diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index f14bd443b..000000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,4 +0,0 @@ -# These owners will be the default owners for everything in -# the repo. Unless a later match takes precedence, -# they will be requested for review when someone opens a pull request. -* @SozinM @avalonche @karim-agha diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index d6f705027..000000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,15 +0,0 @@ -## 📝 Summary - - - -## 💡 Motivation and Context - - - ---- - -## ✅ I have completed the following steps: - -* [ ] Run `make lint` -* [ ] Run `make test` -* [ ] Added tests (if applicable) diff --git a/.github/workflows/checks_docker.yaml b/.github/workflows/checks_docker.yaml deleted file mode 100644 index bb0a6b9b8..000000000 --- a/.github/workflows/checks_docker.yaml +++ /dev/null @@ -1,32 +0,0 @@ -name: Docker Build Check - -on: - workflow_dispatch: - pull_request: - merge_group: - push: - branches: [main] - -jobs: - build-docker: - name: Build Docker image - runs-on: warp-ubuntu-latest-x64-32x - - steps: - - name: Checkout sources - uses: actions/checkout@v4 - - - name: Docker QEMU - uses: docker/setup-qemu-action@v3 - - - name: Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Docker Build - uses: docker/build-push-action@v5 - with: - cache-from: type=gha - cache-to: type=gha,mode=max - platforms: linux/amd64 - context: . - push: false diff --git a/.github/workflows/docker_build.yaml b/.github/workflows/docker_build.yaml deleted file mode 100644 index 1e619ca3b..000000000 --- a/.github/workflows/docker_build.yaml +++ /dev/null @@ -1,88 +0,0 @@ -name: Docker Build Release - -on: - workflow_dispatch: - schedule: - - cron: "0 1 * * *" - -jobs: - extract-version: - name: Extract version - runs-on: warp-ubuntu-latest-x64-16x - outputs: - VERSION: ${{ steps.extract_version.outputs.VERSION }} - steps: - - name: Extract version - id: extract_version - run: | - if [[ "${GITHUB_REF_TYPE}" == "tag" ]]; then - VERSION="${GITHUB_REF#refs/tags/}" - else - VERSION="$(echo ${GITHUB_SHA} | cut -c1-7)" - fi - echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT - - echo "| | |" >> $GITHUB_STEP_SUMMARY - echo "| ------------------- | ---------------------- |" >> $GITHUB_STEP_SUMMARY - echo "| \`GITHUB_REF_TYPE\` | \`${GITHUB_REF_TYPE}\` |" >> $GITHUB_STEP_SUMMARY - echo "| \`GITHUB_REF_NAME\` | \`${GITHUB_REF_NAME}\` |" >> $GITHUB_STEP_SUMMARY - echo "| \`GITHUB_REF\` | \`${GITHUB_REF}\` |" >> $GITHUB_STEP_SUMMARY - echo "| \`GITHUB_SHA\` | \`${GITHUB_SHA}\` |" >> $GITHUB_STEP_SUMMARY - echo "| \`VERSION\` | \`${VERSION}\` |" >> $GITHUB_STEP_SUMMARY - - build-docker: - name: Build and publish Docker image - needs: extract-version - runs-on: ${{ matrix.configs.runner }} - env: - VERSION: ${{ needs.extract-version.outputs.VERSION }} - permissions: - contents: read - packages: write - strategy: - matrix: - configs: - - target: linux/amd64 - runner: warp-ubuntu-latest-x64-16x - - target: linux/arm64 - runner: warp-ubuntu-latest-arm64-16x - steps: - - name: checkout sources - uses: actions/checkout@v4 - - - name: docker qemu - uses: docker/setup-qemu-action@v3 - - - name: docker buildx - uses: docker/setup-buildx-action@v3 - - - name: docker metadata - uses: docker/metadata-action@v5 - id: meta - with: - images: ghcr.io/${{ github.repository }} - labels: org.opencontainers.image.source=${{ github.repositoryUrl }} - tags: | - type=sha - type=schedule,pattern=nightly - - - name: docker login - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: docker build and push op-rbuilder - uses: docker/build-push-action@v5 - with: - cache-from: type=gha - cache-to: type=gha,mode=max - file: Dockerfile - context: . - labels: ${{ steps.meta.outputs.labels }} - platforms: ${{ matrix.configs.target }} - push: true - tags: ${{ steps.meta.outputs.tags }} - build-args: | - RBUILDER_BIN=op-rbuilder diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml new file mode 100644 index 000000000..cbf7c9fde --- /dev/null +++ b/.github/workflows/docker_build.yml @@ -0,0 +1,202 @@ +name: Docker Build Release + +on: + push: + branches: + - lightlink + - main + tags: + - "v*" + pull_request: + types: [opened, synchronize] + workflow_dispatch: + inputs: + features: + description: "Rust features to enable" + required: false + default: "" + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + extract-metadata: + name: Extract metadata + runs-on: + labels: Large + outputs: + version: ${{ steps.meta.outputs.version }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + primary-tag: ${{ steps.primary-tag.outputs.tag }} + should-push: ${{ steps.push-decision.outputs.should-push }} + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Extract metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=ref,event=branch + type=ref,event=pr + type=sha,prefix=sha-,format=short + type=raw,value=latest,enable={{is_default_branch}} + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + labels: | + org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }} + org.opencontainers.image.revision=${{ github.sha }} + org.opencontainers.image.created={{date 'iso8601'}} + + - name: Get primary tag + id: primary-tag + run: | + # Get the first tag from metadata, with fallback + primary_tag=$(echo '${{ steps.meta.outputs.tags }}' | head -n1) + + # If no tags generated, create a fallback based on event type + if [ -z "$primary_tag" ]; then + case "${{ github.event_name }}" in + "pull_request") + primary_tag="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:pr-${{ github.event.number }}" + ;; + "push") + branch_name=$(echo "${{ github.ref_name }}" | sed 's/[^a-zA-Z0-9._-]/-/g') + primary_tag="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${branch_name}-${{ github.sha }}" + ;; + *) + primary_tag="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}" + ;; + esac + fi + + echo "tag=$primary_tag" >> $GITHUB_OUTPUT + echo "Using primary tag: $primary_tag" + + - name: Decide whether to push + id: push-decision + run: | + # Always push images for all event types + echo "Event name: ${{ github.event_name }}" + echo "Ref: ${{ github.ref }}" + echo "Event type: ${{ github.ref_type }}" + + should_push="true" + echo "Always pushing images - configured to push for all events" + + echo "Final decision: should_push=${should_push}" + echo "should-push=${should_push}" >> $GITHUB_OUTPUT + + - name: Show generated tags (debug) + run: | + echo "All generated tags:" + echo '${{ steps.meta.outputs.tags }}' + echo "" + echo "Primary tag: ${{ steps.primary-tag.outputs.tag }}" + echo "Should push: ${{ steps.push-decision.outputs.should-push }}" + + lint-dockerfile: + name: Lint Dockerfile + runs-on: + labels: Large + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Lint Dockerfile + uses: hadolint/hadolint-action@v3.1.0 + with: + dockerfile: DockerfileOp + failure-threshold: warning + ignore: DL3008 + + build-and-push: + name: Build and push Docker image + needs: [extract-metadata, lint-dockerfile] + runs-on: + labels: Large + permissions: + contents: read + packages: write + env: + SHOULD_PUSH: ${{ needs.extract-metadata.outputs.should-push }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to Container Registry + if: env.SHOULD_PUSH == 'true' + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push Docker image + id: build + uses: docker/build-push-action@v5 + with: + context: . + file: DockerfileOp + platforms: linux/amd64,linux/arm64 + push: ${{ needs.extract-metadata.outputs.should-push == 'true' }} + tags: ${{ needs.extract-metadata.outputs.tags }} + labels: ${{ needs.extract-metadata.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max + build-args: | + RBUILDER_BIN=op-rbuilder + FEATURES=${{ inputs.features || '' }} + + - name: Show build results (debug) + run: | + echo "Push decision: ${{ needs.extract-metadata.outputs.should-push }}" + echo "Push boolean: ${{ needs.extract-metadata.outputs.should-push == 'true' }}" + echo "Build digest: ${{ steps.build.outputs.digest }}" + echo "Build metadata: ${{ steps.build.outputs.metadata }}" + + security-scan: + name: Security scan + needs: [build-and-push, extract-metadata] + if: needs.extract-metadata.outputs.should-push == 'true' + runs-on: + labels: Large + permissions: + contents: read + security-events: write + steps: + - name: Run Trivy vulnerability scanner + uses: aquasecurity/trivy-action@master + with: + image-ref: ${{ needs.extract-metadata.outputs.primary-tag }} + format: "sarif" + output: "trivy-results.sarif" + + - name: Upload Trivy scan results + uses: github/codeql-action/upload-sarif@v3 + with: + sarif_file: "trivy-results.sarif" + + test-image: + name: Test Docker image + needs: [build-and-push, extract-metadata] + if: needs.extract-metadata.outputs.should-push == 'true' + runs-on: + labels: Large + steps: + - name: Test image + run: | + docker run --rm ${{ needs.extract-metadata.outputs.primary-tag }} --version diff --git a/.github/workflows/op_rbuilder_checks.yaml b/.github/workflows/op_rbuilder_checks.yaml deleted file mode 100644 index b30b8fd8a..000000000 --- a/.github/workflows/op_rbuilder_checks.yaml +++ /dev/null @@ -1,76 +0,0 @@ -name: "[op-rbuilder] Checks" - -on: - workflow_dispatch: - pull_request: - merge_group: - push: - branches: [main] - -env: - CARGO_TERM_COLOR: always - -jobs: - lint_and_test: - name: Lint and test - runs-on: warp-ubuntu-latest-x64-32x - env: - # Set features for the Makefile - FEATURES: ${{ matrix.features }} - strategy: - matrix: - toolchain: - - nightly - features: - - "" - - steps: - - name: Checkout sources - uses: actions/checkout@v4 - - # https://github.com/dtolnay/rust-toolchain - - name: Setup rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: ${{ matrix.toolchain }} - components: "rustfmt,clippy" - - # https://github.com/swatinem/rust-cache - - name: Run Swatinem/rust-cache@v2 - if: ${{ !env.ACT }} - uses: Swatinem/rust-cache@v2 - with: - cache-on-failure: true - - # https://github.com/Mozilla-Actions/sccache-action - - name: Run sccache-action - if: ${{ !env.ACT }} - uses: mozilla-actions/sccache-action@v0.0.9 - - - name: Set sccache env vars - if: ${{ !env.ACT }} - run: | - echo "SCCACHE_GHA_ENABLED=true" >> $GITHUB_ENV - echo "RUSTC_WRAPPER=sccache" >> $GITHUB_ENV - - - name: Install Foundry toolchain - uses: foundry-rs/foundry-toolchain@v1 - with: - version: nightly - - - name: Install native dependencies - run: sudo apt-get update && sudo apt-get install -y libsqlite3-dev clang libclang-dev llvm build-essential pkg-config libtss2-dev - - - name: Compile tester - run: make tester - - - name: Compile op-rbuilder - run: cargo build -p op-rbuilder --bin op-rbuilder - - - name: Lint - run: make lint - - - name: Test - run: make test - env: - TESTS_TEMP_DIR: ${{ github.workspace }} diff --git a/.github/workflows/op_rbuilder_release.yaml b/.github/workflows/op_rbuilder_release.yaml deleted file mode 100644 index f61358d69..000000000 --- a/.github/workflows/op_rbuilder_release.yaml +++ /dev/null @@ -1,215 +0,0 @@ -name: "[op-rbuilder] Release" - -on: - push: - tags: - - "op-rbuilder/v*" - workflow_dispatch: - inputs: - draft-release: - default: false - description: "Draft Release" - required: false - type: boolean - build-docker: - default: false - description: "Build Docker" - required: false - type: boolean - build-binary: - default: true - description: "Build Binary" - required: false - type: boolean - features: - default: "" - description: "Binary Compilation Features" - options: - - "" - - "redact-sensitive" - - "flashblocks" - required: false - type: choice - -jobs: - extract-version: - name: Extract version - runs-on: warp-ubuntu-latest-x64-16x - outputs: - VERSION: ${{ steps.extract_version.outputs.VERSION }} - steps: - - name: Extract version - id: extract_version - run: | - if [[ "${GITHUB_REF_TYPE}" == "tag" ]]; then - VERSION="${GITHUB_REF#refs/tags/op-rbuilder/}" - else - VERSION="$(echo ${GITHUB_SHA} | cut -c1-7)" - fi - echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT - - echo "| | |" >> $GITHUB_STEP_SUMMARY - echo "| ------------------- | ---------------------- |" >> $GITHUB_STEP_SUMMARY - echo "| \`GITHUB_REF_TYPE\` | \`${GITHUB_REF_TYPE}\` |" >> $GITHUB_STEP_SUMMARY - echo "| \`GITHUB_REF_NAME\` | \`${GITHUB_REF_NAME}\` |" >> $GITHUB_STEP_SUMMARY - echo "| \`GITHUB_REF\` | \`${GITHUB_REF}\` |" >> $GITHUB_STEP_SUMMARY - echo "| \`GITHUB_SHA\` | \`${GITHUB_SHA}\` |" >> $GITHUB_STEP_SUMMARY - echo "| \`VERSION\` | \`${VERSION}\` |" >> $GITHUB_STEP_SUMMARY - echo "| \`FEATURES\` | \`${{ github.event.inputs.features || 'none' }}\` |" >> $GITHUB_STEP_SUMMARY - - build-binary: - name: Build binary - needs: extract-version - if: ${{ github.event.inputs.build-binary == 'true' || github.event_name == 'push'}} # when manually triggered or version tagged - runs-on: ${{ matrix.configs.runner }} - container: - image: ubuntu:22.04 - permissions: - contents: write - packages: write - strategy: - matrix: - configs: - - target: x86_64-unknown-linux-gnu - runner: warp-ubuntu-latest-x64-32x - - target: aarch64-unknown-linux-gnu - runner: warp-ubuntu-latest-arm64-32x - # Paused until docker is pre-installed https://github.com/actions/runner-images/blob/main/images/macos/macos-14-arm64-Readme.md - # - target: aarch64-apple-darwin - # runner: warp-macos-14-arm64-6x - features: - - ${{ github.event.inputs.features || '' }} - - steps: - - name: Install dependencies - run: | - apt-get update - apt-get install -y \ - build-essential \ - curl \ - git \ - libclang-dev \ - libssl-dev \ - pkg-config \ - protobuf-compiler - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - - - uses: actions/checkout@v4 # must install git before checkout and set safe.directory after checkout because of container - - - name: Build op-rbuilder binary - run: | - git config --global --add safe.directory "$(pwd)" - . $HOME/.cargo/env - cargo build --release --features=${{ matrix.features }} --target ${{ matrix.configs.target }} --package op-rbuilder - - - name: Upload op-rbuilder artifact - uses: actions/upload-artifact@v4 - with: - name: op-rbuilder-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.configs.target }}${{ matrix.features && '-' }}${{ matrix.features }} - path: target/${{ matrix.configs.target }}/release/op-rbuilder - - draft-release: - name: Draft release - if: ${{ github.event.inputs.draft-release == 'true' || github.event_name == 'push'}} # when manually triggered or version tagged - needs: [extract-version, build-binary] - runs-on: warp-ubuntu-latest-x64-16x - env: - VERSION: op-rbuilder/${{ needs.extract-version.outputs.VERSION }} - permissions: - contents: write - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Download artifacts - uses: actions/download-artifact@v4 - with: - merge-multiple: true - path: artifacts - - - name: Record artifacts checksums - working-directory: artifacts - run: | - find ./ || true - for file in *; do sha256sum "$file" >> sha256sums.txt; done; - cat sha256sums.txt - - - name: Create release draft - uses: softprops/action-gh-release@v2.0.5 - id: create-release-draft - with: - draft: true - files: artifacts/* - generate_release_notes: true - name: ${{ env.VERSION }} - tag_name: ${{ env.VERSION }} - - - name: Write Github Step Summary - run: | - echo "---" - echo "### Release Draft: ${{ env.VERSION }}" >> $GITHUB_STEP_SUMMARY - echo "${{ steps.create-release-draft.outputs.url }}" >> $GITHUB_STEP_SUMMARY - - build-docker: - if: ${{ github.event.inputs.build-docker == 'true' }} - name: Build and publish Docker image - needs: extract-version - runs-on: ${{ matrix.configs.runner }} - env: - VERSION: ${{ needs.extract-version.outputs.VERSION }} - permissions: - contents: read - packages: write - strategy: - matrix: - configs: - - target: linux/amd64 - runner: warp-ubuntu-latest-x64-16x - - target: linux/arm64 - runner: warp-ubuntu-latest-arm64-16x - steps: - - name: checkout sources - uses: actions/checkout@v4 - - - name: docker qemu - uses: docker/setup-qemu-action@v3 - - - name: docker buildx - uses: docker/setup-buildx-action@v3 - - - name: docker metadata - uses: docker/metadata-action@v5 - id: meta - with: - images: ghcr.io/${{ github.repository }} - labels: org.opencontainers.image.source=${{ github.repositoryUrl }} - tags: | - type=sha - type=semver,pattern={{version}},value=${{ env.VERSION }} - type=semver,pattern={{major}}.{{minor}},value=${{ env.VERSION }} - type=semver,pattern={{major}},value=${{ env.VERSION }} - - # Push latest tag for full version only, not for prerelease versions (i.e. not for v1.2.3-rc1) - type=raw,value=latest,enable=${{ !contains(env.VERSION, '-') }} - - - name: docker login - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: docker build and push op-rbuilder - uses: docker/build-push-action@v5 - with: - cache-from: type=gha - cache-to: type=gha,mode=max - file: Dockerfile - context: . - labels: ${{ steps.meta.outputs.labels }} - platforms: ${{ matrix.configs.target }} - push: true - tags: ${{ steps.meta.outputs.tags }} - build-args: | - FEATURES=${{ github.event.inputs.features || '' }} - RBUILDER_BIN=op-rbuilder diff --git a/.github/workflows/op_rbuilder_reproducible_verify.yaml b/.github/workflows/op_rbuilder_reproducible_verify.yaml new file mode 100644 index 000000000..a59a86bae --- /dev/null +++ b/.github/workflows/op_rbuilder_reproducible_verify.yaml @@ -0,0 +1,37 @@ +name: Verify Reproducible Build + +on: + workflow_dispatch: + schedule: + - cron: "0 2 */3 * *" + +jobs: + verify: + name: "[op-rbuilder] Verify reproducible builds" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - name: Build twice and compare + run: | + export REPRO_FLAGS="--C target-feature=+crt-static -C link-arg=-static-libgcc -C link-arg=-Wl,--build-id=none -C metadata='' --remap-path-prefix=$(pwd)=." + export SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct) + + RUSTFLAGS="$REPRO_FLAGS" CARGO_INCREMENTAL=0 LC_ALL=C TZ=UTC \ + CFLAGS="-D__TIME__=\"\" -D__DATE__=\"\"" CXXFLAGS="-D__TIME__=\"\" -D__DATE__=\"\"" \ + cargo build --release --locked -p op-rbuilder --target x86_64-unknown-linux-gnu + mv target/x86_64-unknown-linux-gnu/release/op-rbuilder build1 + + cargo clean + + RUSTFLAGS="$REPRO_FLAGS" CARGO_INCREMENTAL=0 LC_ALL=C TZ=UTC \ + CFLAGS="-D__TIME__=\"\" -D__DATE__=\"\"" CXXFLAGS="-D__TIME__=\"\" -D__DATE__=\"\"" \ + cargo build --release --locked -p op-rbuilder --target x86_64-unknown-linux-gnu + mv target/x86_64-unknown-linux-gnu/release/op-rbuilder build2 + + if cmp -s build1 build2; then + echo "✅ Builds are reproducible" + else + echo "❌ Builds differ" + exit 1 + fi diff --git a/.github/workflows/tdx_quote_provider_checks.yaml b/.github/workflows/tdx_quote_provider_checks.yaml deleted file mode 100644 index 48f83bda0..000000000 --- a/.github/workflows/tdx_quote_provider_checks.yaml +++ /dev/null @@ -1,67 +0,0 @@ -name: "[tdx-quote-provider] Checks" - -on: - push: - branches: [main] - pull_request: - -env: - CARGO_TERM_COLOR: always - -jobs: - check: - name: Check - runs-on: warp-ubuntu-latest-x64-16x - defaults: - run: - working-directory: "./crates/tdx-quote-provider" - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Rust - uses: dtolnay/rust-toolchain@stable - with: - toolchain: stable - components: rustfmt - - - name: Install native dependencies - run: sudo apt-get update && sudo apt-get install -y libtss2-dev - - - name: Cache dependencies - uses: Swatinem/rust-cache@v2 - - - name: Run build - run: cargo build - - - name: Check formatting - run: cargo fmt --all -- --check - - - name: Run clippy - run: cargo clippy -- -D warnings - - - name: Run tests - run: cargo test --all-features - - - name: Check for common mistakes - run: cargo check - - docker: - name: Docker Build - runs-on: warp-ubuntu-latest-x64-16x - defaults: - run: - working-directory: "./crates/tdx-quote-provider" - steps: - - uses: actions/checkout@v4 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Build Docker image - uses: docker/build-push-action@v5 - with: - context: . - push: false - cache-from: type=gha - cache-to: type=gha,mode=max diff --git a/.github/workflows/tdx_quote_provider_release.yaml b/.github/workflows/tdx_quote_provider_release.yaml deleted file mode 100644 index 419749faa..000000000 --- a/.github/workflows/tdx_quote_provider_release.yaml +++ /dev/null @@ -1,141 +0,0 @@ -name: "[tdx-quote-provider] Release" - -on: - push: - tags: - - "tdx-quote-provider/v*" - workflow_dispatch: - inputs: - draft-release: - default: false - description: "Draft Release" - required: false - type: boolean - features: - default: "" - description: "Binary Compilation Features" - options: - - "" - required: false - type: choice - -jobs: - extract-version: - name: Extract version - runs-on: warp-ubuntu-latest-x64-16x - outputs: - VERSION: ${{ steps.extract_version.outputs.VERSION }} - steps: - - name: Extract version - id: extract_version - run: | - if [[ "${GITHUB_REF_TYPE}" == "tag" ]]; then - VERSION="${GITHUB_REF#refs/tags/tdx-quote-provider/}" - else - VERSION="$(echo ${GITHUB_SHA} | cut -c1-7)" - fi - echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT - - echo "| | |" >> $GITHUB_STEP_SUMMARY - echo "| ------------------- | ---------------------- |" >> $GITHUB_STEP_SUMMARY - echo "| \`GITHUB_REF_TYPE\` | \`${GITHUB_REF_TYPE}\` |" >> $GITHUB_STEP_SUMMARY - echo "| \`GITHUB_REF_NAME\` | \`${GITHUB_REF_NAME}\` |" >> $GITHUB_STEP_SUMMARY - echo "| \`GITHUB_REF\` | \`${GITHUB_REF}\` |" >> $GITHUB_STEP_SUMMARY - echo "| \`GITHUB_SHA\` | \`${GITHUB_SHA}\` |" >> $GITHUB_STEP_SUMMARY - echo "| \`VERSION\` | \`${VERSION}\` |" >> $GITHUB_STEP_SUMMARY - echo "| \`FEATURES\` | \`${{ github.event.inputs.features || 'none' }}\` |" >> $GITHUB_STEP_SUMMARY - - build-binary: - name: Build binary - needs: extract-version - runs-on: ${{ matrix.configs.runner }} - container: - image: ubuntu:22.04 - permissions: - contents: write - packages: write - strategy: - matrix: - configs: - - target: x86_64-unknown-linux-gnu - runner: warp-ubuntu-latest-x64-32x - - target: aarch64-unknown-linux-gnu - runner: warp-ubuntu-latest-arm64-32x - # Paused until docker is pre-installed https://github.com/actions/runner-images/blob/main/images/macos/macos-14-arm64-Readme.md - # - target: aarch64-apple-darwin - # runner: warp-macos-14-arm64-6x - features: - - ${{ github.event.inputs.features || '' }} - - steps: - - name: Install dependencies - run: | - apt-get update - apt-get install -y \ - build-essential \ - curl \ - git \ - libclang-dev \ - libssl-dev \ - libtss2-dev \ - pkg-config \ - protobuf-compiler - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - - - uses: actions/checkout@v4 # must install git before checkout and set safe.directory after checkout because of container - - - name: Build tdx-quote-provider binary - run: | - git config --global --add safe.directory "$(pwd)" - . $HOME/.cargo/env - cargo build --release --features=${{ matrix.features }} --target ${{ matrix.configs.target }} --package tdx-quote-provider - mkdir -p artifacts - mv target/${{ matrix.configs.target }}/release/tdx-quote-provider artifacts/tdx-quote-provider-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.configs.target }}${{ matrix.features && '-' }}${{ matrix.features }} - - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: tdx-quote-provider-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.configs.target }}${{ matrix.features && '-' }}${{ matrix.features }} - path: artifacts - - draft-release: - name: Draft release - if: ${{ github.event.inputs.draft-release == 'true' || github.event_name == 'push'}} # when manually triggered or version tagged - needs: [extract-version, build-binary] - runs-on: warp-ubuntu-latest-x64-16x - env: - VERSION: op-${{ needs.extract-version.outputs.VERSION }} - permissions: - contents: write - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Download artifacts - uses: actions/download-artifact@v4 - with: - merge-multiple: true - path: artifacts - - - name: Record artifacts checksums - working-directory: artifacts - run: | - find ./ || true - for file in *; do sha256sum "$file" >> sha256sums.txt; done; - cat sha256sums.txt - - - name: Create release draft - uses: softprops/action-gh-release@v2.0.5 - id: create-release-draft - with: - draft: true - files: artifacts/* - generate_release_notes: true - name: ${{ env.VERSION }} - tag_name: ${{ env.VERSION }} - - - name: Write Github Step Summary - run: | - echo "---" - echo "### Release Draft: ${{ env.VERSION }}" >> $GITHUB_STEP_SUMMARY - echo "${{ steps.create-release-draft.outputs.url }}" >> $GITHUB_STEP_SUMMARY diff --git a/Cargo.lock b/Cargo.lock index 7675e1d3a..d5b56d630 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,15 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - [[package]] name = "adler2" version = "2.0.1" @@ -59,7 +50,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", "version_check", "zerocopy", @@ -97,9 +88,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "992a9d0732a0e0e1a34d61a6553ad28f761c9049bb46572d3916f172348d2cb7" +checksum = "ae62e633fa48b4190af5e841eb05179841bb8b713945103291e2c0867037c0d1" dependencies = [ "alloy-consensus", "alloy-contract", @@ -120,11 +111,11 @@ dependencies = [ [[package]] name = "alloy-chains" -version = "0.2.7" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a379c0d821498c996ceb9e7519fc2dab8286c35a203c1fb95f80ecd66e07cf2f" +checksum = "0bbb778f50ecb0cebfb5c05580948501927508da7bd628833a8c4bd8545e23e2" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "num_enum", "serde", @@ -133,12 +124,12 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35f021a55afd68ff2364ccfddaa364fc9a38a72200cdc74fcfb8dc3231d38f2c" +checksum = "b9b151e38e42f1586a01369ec52a6934702731d07e8509a7307331b09f6c46dc" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-serde", "alloy-trie", @@ -153,19 +144,20 @@ dependencies = [ "rand 0.8.5", "secp256k1 0.30.0", "serde", + "serde_json", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "alloy-consensus-any" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a0ecca7a71b1f88e63d19e2d9397ce56949d3dd3484fd73c73d0077dc5c93d4" +checksum = "6e2d5e8668ef6215efdb7dcca6f22277b4e483a5650e05f5de22b2350971f4b8" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-serde", "arbitrary", @@ -174,49 +166,49 @@ dependencies = [ [[package]] name = "alloy-contract" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd26132cbfa6e5f191a01f7b9725eaa0680a953be1fd005d588b0e9422c16456" +checksum = "630288cf4f3a34a8c6bc75c03dce1dbd47833138f65f37d53a1661eafc96b83f" dependencies = [ "alloy-consensus", "alloy-dyn-abi", - "alloy-json-abi 1.3.1", + "alloy-json-abi 1.4.1", "alloy-network", "alloy-network-primitives", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-provider", "alloy-rpc-types-eth", - "alloy-sol-types 1.3.1", + "alloy-sol-types 1.4.1", "alloy-transport", "futures", "futures-util", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "alloy-core" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe6c56d58fbfa9f0f6299376e8ce33091fc6494239466814c3f54b55743cb09" +checksum = "5ca96214615ec8cf3fa2a54b32f486eb49100ca7fe7eb0b8c1137cd316e7250a" dependencies = [ "alloy-dyn-abi", - "alloy-json-abi 1.3.1", - "alloy-primitives 1.3.1", + "alloy-json-abi 1.4.1", + "alloy-primitives 1.4.1", "alloy-rlp", - "alloy-sol-types 1.3.1", + "alloy-sol-types 1.4.1", ] [[package]] name = "alloy-dyn-abi" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f56873f3cac7a2c63d8e98a4314b8311aa96adb1a0f82ae923eb2119809d2c" +checksum = "3fdff496dd4e98a81f4861e66f7eaf5f2488971848bb42d9c892f871730245c8" dependencies = [ - "alloy-json-abi 1.3.1", - "alloy-primitives 1.3.1", - "alloy-sol-type-parser 1.3.1", - "alloy-sol-types 1.3.1", + "alloy-json-abi 1.4.1", + "alloy-primitives 1.4.1", + "alloy-sol-type-parser 1.4.1", + "alloy-sol-types 1.4.1", "derive_more", "itoa", "serde", @@ -230,13 +222,13 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "741bdd7499908b3aa0b159bba11e71c8cddd009a2c2eb7a06e825f1ec87900a5" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "arbitrary", "crc", "rand 0.8.5", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -245,7 +237,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b82752a889170df67bbb36d42ca63c531eb16274f0d7299ae2a680facba17bd" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "arbitrary", "rand 0.8.5", @@ -258,26 +250,26 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d4769c6ffddca380b0070d71c8b7f30bed375543fe76bb2f74ec0acf4b7cd16" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "arbitrary", "k256", "rand 0.8.5", "serde", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "alloy-eips" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7473a19f02b25f8e1e8c69d35f02c07245694d11bd91bfe00e9190ac106b3838" +checksum = "e5434834adaf64fa20a6fb90877bc1d33214c41b055cc49f82189c98614368cc" dependencies = [ "alloy-eip2124", "alloy-eip2930", "alloy-eip7702", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-serde", "arbitrary", @@ -288,57 +280,42 @@ dependencies = [ "ethereum_ssz", "ethereum_ssz_derive", "serde", + "serde_with", "sha2 0.10.9", + "thiserror 2.0.17", ] [[package]] name = "alloy-evm" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28de0dd1bbb0634ef7c3715e8e60176b77b82f8b6b15b2e35fe64cf6640f6550" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-hardforks", - "alloy-primitives 1.3.1", - "alloy-rpc-types-eth", - "alloy-sol-types 1.3.1", - "auto_impl", - "derive_more", - "op-alloy-consensus", - "op-revm 8.1.0", - "revm 27.1.0", - "thiserror 2.0.16", -] - -[[package]] -name = "alloy-evm" -version = "0.18.3" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4d88e267e4b599e944e1d32fbbfeaf4b8ea414e54da27306ede37c0798684d" +checksum = "2f1bfade4de9f464719b5aca30cf5bb02b9fda7036f0cf43addc3a0e66a0340c" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-hardforks", - "alloy-primitives 1.3.1", + "alloy-op-hardforks", + "alloy-primitives 1.4.1", + "alloy-rpc-types-engine", "alloy-rpc-types-eth", - "alloy-sol-types 1.3.1", + "alloy-sol-types 1.4.1", "auto_impl", "derive_more", "op-alloy-consensus", - "op-revm 9.0.1", - "revm 28.0.1", - "thiserror 2.0.16", + "op-alloy-rpc-types-engine", + "op-revm", + "revm", + "thiserror 2.0.17", ] [[package]] name = "alloy-genesis" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b2c29f25098bfa4cd3d9ec7806e1506716931e188c7c0843284123831c2cf1" +checksum = "919a8471cfbed7bcd8cf1197a57dda583ce0e10c6385f6ff4e8b41304b223392" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-serde", "alloy-trie", "serde", @@ -347,13 +324,13 @@ dependencies = [ [[package]] name = "alloy-hardforks" -version = "0.2.13" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3165210652f71dfc094b051602bafd691f506c54050a174b1cba18fb5ef706a3" +checksum = "889eb3949b58368a09d4f16931c660275ef5fb08e5fbd4a96573b19c7085c41f" dependencies = [ "alloy-chains", "alloy-eip2124", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "auto_impl", "dyn-clone", "serde", @@ -361,141 +338,125 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6beff64ad0aa6ad1019a3db26fef565aefeb011736150ab73ed3366c3cfd1b" +checksum = "4584e3641181ff073e9d5bec5b3b8f78f9749d9fb108a1cfbc4399a4a139c72a" dependencies = [ - "alloy-primitives 0.8.25", - "alloy-sol-type-parser 0.8.25", + "alloy-primitives 0.8.26", + "alloy-sol-type-parser 0.8.26", "serde", "serde_json", ] [[package]] name = "alloy-json-abi" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "125a1c373261b252e53e04d6e92c37d881833afc1315fceab53fd46045695640" +checksum = "5513d5e6bd1cba6bdcf5373470f559f320c05c8c59493b6e98912fbe6733943f" dependencies = [ - "alloy-primitives 1.3.1", - "alloy-sol-type-parser 1.3.1", + "alloy-primitives 1.4.1", + "alloy-sol-type-parser 1.4.1", "serde", "serde_json", ] [[package]] name = "alloy-json-rpc" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a4d1f49fdf9780b60e52c20ffcc1e352d8d27885cc8890620eb584978265dd9" +checksum = "d7c69f6c9c68a1287c9d5ff903d0010726934de0dac10989be37b75a29190d55" dependencies = [ - "alloy-primitives 1.3.1", - "alloy-sol-types 1.3.1", + "alloy-primitives 1.4.1", + "alloy-sol-types 1.4.1", "http", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] [[package]] name = "alloy-network" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2991c432e149babfd996194f8f558f85d7326ac4cf52c55732d32078ff0282d4" +checksum = "8eaf2ae05219e73e0979cb2cf55612aafbab191d130f203079805eaf881cca58" dependencies = [ "alloy-consensus", "alloy-consensus-any", "alloy-eips", "alloy-json-rpc", "alloy-network-primitives", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-any", "alloy-rpc-types-eth", "alloy-serde", "alloy-signer", - "alloy-sol-types 1.3.1", + "alloy-sol-types 1.4.1", "async-trait", "auto_impl", "derive_more", "futures-utils-wasm", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "alloy-network-primitives" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d540d962ddbc3e95153bafe56ccefeb16dfbffa52c5f7bdd66cd29ec8f52259" +checksum = "e58f4f345cef483eab7374f2b6056973c7419ffe8ad35e994b7a7f5d8e0c7ba4" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-serde", "serde", ] [[package]] name = "alloy-op-evm" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0afe768962308a08b42fddef8a4296324f140b5a8dd0d4360038229885ce9434" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-evm 0.15.0", - "alloy-op-hardforks", - "alloy-primitives 1.3.1", - "auto_impl", - "op-alloy-consensus", - "op-revm 8.1.0", - "revm 27.1.0", -] - -[[package]] -name = "alloy-op-evm" -version = "0.18.3" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ead219a54943c27b0bb568401cbfa6afe04398b97a76fd33b29745d0c0f35b43" +checksum = "d0b6679dc8854285d6c34ef6a9f9ade06dec1f5db8aab96e941d99b8abcefb72" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.18.3", + "alloy-evm", "alloy-op-hardforks", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "auto_impl", "op-alloy-consensus", - "op-revm 9.0.1", - "revm 28.0.1", + "op-revm", + "revm", ] [[package]] name = "alloy-op-hardforks" -version = "0.2.13" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3417f4187eaf7f7fb0d7556f0197bca26f0b23c4bb3aca0c9d566dc1c5d727a2" +checksum = "599c1d7dfbccb66603cb93fde00980d12848d32fe5e814f50562104a92df6487" dependencies = [ "alloy-chains", "alloy-hardforks", + "alloy-primitives 1.4.1", "auto_impl", ] [[package]] name = "alloy-primitives" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c77490fe91a0ce933a1f219029521f20fc28c2c0ca95d53fa4da9c00b8d9d4e" +checksum = "777d58b30eb9a4db0e5f59bc30e8c2caef877fee7dc8734cf242a51a60f22e05" dependencies = [ "alloy-rlp", "bytes", "cfg-if", "const-hex", "derive_more", - "foldhash", + "foldhash 0.1.5", "hashbrown 0.15.5", - "indexmap 2.10.0", + "indexmap 2.12.0", "itoa", "k256", "keccak-asm", @@ -511,9 +472,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9485c56de23438127a731a6b4c87803d49faf1a7068dcd1d8768aca3a9edb9" +checksum = "355bf68a433e0fd7f7d33d5a9fc2583fde70bf5c530f63b80845f8da5505cf28" dependencies = [ "alloy-rlp", "arbitrary", @@ -521,16 +482,16 @@ dependencies = [ "cfg-if", "const-hex", "derive_more", - "foldhash", - "getrandom 0.3.3", - "hashbrown 0.15.5", - "indexmap 2.10.0", + "foldhash 0.2.0", + "getrandom 0.3.4", + "hashbrown 0.16.0", + "indexmap 2.12.0", "itoa", "k256", "keccak-asm", "paste", "proptest", - "proptest-derive", + "proptest-derive 0.6.0", "rand 0.9.2", "ruint", "rustc-hash 2.1.1", @@ -541,9 +502,9 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e96d8084a1cf96be2df6219ac407275ac20c1136fa01f911535eb489aa006e8" +checksum = "de2597751539b1cc8fe4204e5325f9a9ed83fcacfb212018dfcfa7877e76de21" dependencies = [ "alloy-chains", "alloy-consensus", @@ -551,14 +512,14 @@ dependencies = [ "alloy-json-rpc", "alloy-network", "alloy-network-primitives", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-pubsub", "alloy-rpc-client", "alloy-rpc-types-engine", "alloy-rpc-types-eth", "alloy-rpc-types-txpool", "alloy-signer", - "alloy-sol-types 1.3.1", + "alloy-sol-types 1.4.1", "alloy-transport", "alloy-transport-http", "alloy-transport-ipc", @@ -576,7 +537,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", "url", @@ -585,12 +546,12 @@ dependencies = [ [[package]] name = "alloy-pubsub" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a682f14e10c3f4489c57b64ed457801b3e7ffc5091b6a35883d0e5960b9b894" +checksum = "06e45a68423e732900a0c824b8e22237db461b79d2e472dd68b7547c16104427" dependencies = [ "alloy-json-rpc", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-transport", "auto_impl", "bimap", @@ -624,17 +585,17 @@ checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "alloy-rpc-client" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194ff51cd1d2e65c66b98425e0ca7eb559ca1a579725834c986d84faf8e224c0" +checksum = "edf8eb8be597cfa8c312934d2566ec4516f066d69164f9212d7a148979fdcfd8" dependencies = [ "alloy-json-rpc", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-pubsub", "alloy-transport", "alloy-transport-http", @@ -655,11 +616,11 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d4fe522f6fc749c8afce721bdc8f73b715d317c3c02fcb9b51f7a143e4401dd" +checksum = "339af7336571dd39ae3a15bde08ae6a647e62f75350bd415832640268af92c06" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "alloy-rpc-types-eth", "alloy-serde", @@ -668,23 +629,23 @@ dependencies = [ [[package]] name = "alloy-rpc-types-admin" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30f218456a0a70a234ed52c181f04e6c98b6810c25273cf5280d32dd2cbdc876" +checksum = "19b33cdc0483d236cdfff763dae799ccef9646e94fb549a74f7adac6a7f7bb86" dependencies = [ "alloy-genesis", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "serde", "serde_json", ] [[package]] name = "alloy-rpc-types-anvil" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6af88d9714b499675164cac2fa2baadb3554579ab3ea8bc0d7b0c0de4f9d692" +checksum = "83d98fb386a462e143f5efa64350860af39950c49e7c0cbdba419c16793116ef" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-eth", "alloy-serde", "serde", @@ -692,9 +653,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-any" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "124b742619519d5932e586631f11050028b29c30e3e195f2bb04228c886253d6" +checksum = "fbde0801a32d21c5f111f037bee7e22874836fba7add34ed4a6919932dd7cf23" dependencies = [ "alloy-consensus-any", "alloy-rpc-types-eth", @@ -703,42 +664,45 @@ dependencies = [ [[package]] name = "alloy-rpc-types-beacon" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd39ff755554e506ae0f6a8e8251f8633bd7512cce0d7d1a7cfd689797e0daa5" +checksum = "55c8d51ebb7c5fa8be8ea739a3933c5bfea08777d2d662b30b2109ac5ca71e6b" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", + "derive_more", "ethereum_ssz", "ethereum_ssz_derive", "serde", + "serde_json", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", "tree_hash", "tree_hash_derive", ] [[package]] name = "alloy-rpc-types-debug" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c6a6c8ae298c2739706ee3cd996c220b0ea406e6841a4e4290c7336edd5f811" +checksum = "388cf910e66bd4f309a81ef746dcf8f9bca2226e3577890a8d56c5839225cf46" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "derive_more", "serde", + "serde_with", ] [[package]] name = "alloy-rpc-types-engine" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1a77a23d609bca2e4a60f992dde5f987475cb064da355fa4dbd7cda2e1bb48" +checksum = "605ec375d91073851f566a3082548af69a28dca831b27a8be7c1b4c49f5c6ca2" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-serde", "derive_more", @@ -752,35 +716,35 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "781d4d5020bea8f020e164f5593101c2e2f790d66d04a0727839d03bc4411ed7" +checksum = "361cd87ead4ba7659bda8127902eda92d17fa7ceb18aba1676f7be10f7222487" dependencies = [ "alloy-consensus", "alloy-consensus-any", "alloy-eips", "alloy-network-primitives", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-serde", - "alloy-sol-types 1.3.1", + "alloy-sol-types 1.4.1", "arbitrary", "itertools 0.14.0", "serde", "serde_json", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "alloy-rpc-types-mev" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f742708f7ea7c3dc6067e7d87b6635c0817cf142b7c72cb8e8e3e07371aa3a" +checksum = "1397926d8d06a2531578bafc3e0ec78f97a02f0e6d1631c67d80d22af6a3af02" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-eth", "alloy-serde", "serde", @@ -789,25 +753,25 @@ dependencies = [ [[package]] name = "alloy-rpc-types-trace" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719e5eb9c15e21dab3dee2cac53505500e5e701f25d556734279c5f02154022a" +checksum = "de4e95fb0572b97b17751d0fdf5cdc42b0050f9dd9459eddd1bf2e2fbfed0a33" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-eth", "alloy-serde", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "alloy-rpc-types-txpool" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c751233a6067ccc8a4cbd469e0fd34e0d9475fd118959dbc777ae3af31bba7" +checksum = "cddde1bbd4feeb0d363ae7882af1e2e7955ef77c17f933f31402aad9343b57c5" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-eth", "alloy-serde", "serde", @@ -815,11 +779,11 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30be84f45d4f687b00efaba1e6290cbf53ccc8f6b8fbb54e4c2f9d2a0474ce95" +checksum = "64600fc6c312b7e0ba76f73a381059af044f4f21f43e07f51f1fa76c868fe302" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "arbitrary", "serde", "serde_json", @@ -827,105 +791,105 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa8c24b883fe56395db64afcd665fca32dcdef670a59e5338de6892c2e38d7e9" +checksum = "5772858492b26f780468ae693405f895d6a27dea6e3eab2c36b6217de47c2647" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "async-trait", "auto_impl", "either", "elliptic-curve", "k256", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "alloy-signer-local" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05724615fd2ec3417f5cd07cab908300cbb3aae5badc1b805ca70c555b26775f" +checksum = "f4195b803d0a992d8dbaab2ca1986fc86533d4bc80967c0cce7668b26ad99ef9" dependencies = [ "alloy-consensus", "alloy-network", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-signer", "async-trait", "k256", "rand 0.8.5", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "alloy-sol-macro" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10ae8e9a91d328ae954c22542415303919aabe976fe7a92eb06db1b68fd59f2" +checksum = "e68b32b6fa0d09bb74b4cefe35ccc8269d711c26629bc7cd98a47eeb12fe353f" dependencies = [ - "alloy-sol-macro-expander 0.8.25", - "alloy-sol-macro-input 0.8.25", + "alloy-sol-macro-expander 0.8.26", + "alloy-sol-macro-input 0.8.26", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "alloy-sol-macro" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d20d867dcf42019d4779519a1ceb55eba8d7f3d0e4f0a89bcba82b8f9eb01e48" +checksum = "f3ce480400051b5217f19d6e9a82d9010cdde20f1ae9c00d53591e4a1afbb312" dependencies = [ - "alloy-sol-macro-expander 1.3.1", - "alloy-sol-macro-input 1.3.1", + "alloy-sol-macro-expander 1.4.1", + "alloy-sol-macro-input 1.4.1", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "alloy-sol-macro-expander" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83ad5da86c127751bc607c174d6c9fe9b85ef0889a9ca0c641735d77d4f98f26" +checksum = "2afe6879ac373e58fd53581636f2cce843998ae0b058ebe1e4f649195e2bd23c" dependencies = [ - "alloy-sol-macro-input 0.8.25", + "alloy-sol-macro-input 0.8.26", "const-hex", "heck", - "indexmap 2.10.0", + "indexmap 2.12.0", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.106", - "syn-solidity 0.8.25", + "syn 2.0.108", + "syn-solidity 0.8.26", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-expander" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b74e91b0b553c115d14bd0ed41898309356dc85d0e3d4b9014c4e7715e48c8ad" +checksum = "6d792e205ed3b72f795a8044c52877d2e6b6e9b1d13f431478121d8d4eaa9028" dependencies = [ - "alloy-json-abi 1.3.1", - "alloy-sol-macro-input 1.3.1", + "alloy-json-abi 1.4.1", + "alloy-sol-macro-input 1.4.1", "const-hex", "heck", - "indexmap 2.10.0", + "indexmap 2.12.0", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.106", - "syn-solidity 1.3.1", + "syn 2.0.108", + "syn-solidity 1.4.1", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3d30f0d3f9ba3b7686f3ff1de9ee312647aac705604417a2f40c604f409a9e" +checksum = "c3ba01aee235a8c699d07e5be97ba215607564e71be72f433665329bec307d28" dependencies = [ "const-hex", "dunce", @@ -933,17 +897,17 @@ dependencies = [ "macro-string", "proc-macro2", "quote", - "syn 2.0.106", - "syn-solidity 0.8.25", + "syn 2.0.108", + "syn-solidity 0.8.26", ] [[package]] name = "alloy-sol-macro-input" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84194d31220803f5f62d0a00f583fd3a062b36382e2bea446f1af96727754565" +checksum = "0bd1247a8f90b465ef3f1207627547ec16940c35597875cdc09c49d58b19693c" dependencies = [ - "alloy-json-abi 1.3.1", + "alloy-json-abi 1.4.1", "const-hex", "dunce", "heck", @@ -951,15 +915,15 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.106", - "syn-solidity 1.3.1", + "syn 2.0.108", + "syn-solidity 1.4.1", ] [[package]] name = "alloy-sol-type-parser" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d162f8524adfdfb0e4bd0505c734c985f3e2474eb022af32eef0d52a4f3935c" +checksum = "4c13fc168b97411e04465f03e632f31ef94cad1c7c8951bf799237fd7870d535" dependencies = [ "serde", "winnow", @@ -967,9 +931,9 @@ dependencies = [ [[package]] name = "alloy-sol-type-parser" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe8c27b3cf6b2bb8361904732f955bc7c05e00be5f469cec7e2280b6167f3ff0" +checksum = "954d1b2533b9b2c7959652df3076954ecb1122a28cc740aa84e7b0a49f6ac0a9" dependencies = [ "serde", "winnow", @@ -977,37 +941,37 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d43d5e60466a440230c07761aa67671d4719d46f43be8ea6e7ed334d8db4a9ab" +checksum = "6e960c4b52508ef2ae1e37cae5058e905e9ae099b107900067a503f8c454036f" dependencies = [ - "alloy-json-abi 0.8.25", - "alloy-primitives 0.8.25", - "alloy-sol-macro 0.8.25", + "alloy-json-abi 0.8.26", + "alloy-primitives 0.8.26", + "alloy-sol-macro 0.8.26", "const-hex", "serde", ] [[package]] name = "alloy-sol-types" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5383d34ea00079e6dd89c652bcbdb764db160cef84e6250926961a0b2295d04" +checksum = "70319350969a3af119da6fb3e9bddb1bce66c9ea933600cb297c8b1850ad2a3c" dependencies = [ - "alloy-json-abi 1.3.1", - "alloy-primitives 1.3.1", - "alloy-sol-macro 1.3.1", + "alloy-json-abi 1.4.1", + "alloy-primitives 1.4.1", + "alloy-sol-macro 1.4.1", "serde", ] [[package]] name = "alloy-transport" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20b7f8b6c540b55e858f958d3a92223494cf83c4fb43ff9b26491edbeb3a3b71" +checksum = "025a940182bddaeb594c26fe3728525ae262d0806fe6a4befdf5d7bc13d54bce" dependencies = [ "alloy-json-rpc", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "auto_impl", "base64 0.22.1", "derive_more", @@ -1016,7 +980,7 @@ dependencies = [ "parking_lot", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tower 0.5.2", "tracing", @@ -1026,9 +990,9 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "260e9584dfd7998760d7dfe1856c6f8f346462b9e7837287d7eddfb3922ef275" +checksum = "e3b5064d1e1e1aabc918b5954e7fb8154c39e77ec6903a581b973198b26628fa" dependencies = [ "alloy-json-rpc", "alloy-transport", @@ -1041,9 +1005,9 @@ dependencies = [ [[package]] name = "alloy-transport-ipc" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9491a1d81e97ae9d919da49e1c63dec4729c994e2715933968b8f780aa18793e" +checksum = "d47962f3f1d9276646485458dc842b4e35675f42111c9d814ae4711c664c8300" dependencies = [ "alloy-json-rpc", "alloy-pubsub", @@ -1061,9 +1025,9 @@ dependencies = [ [[package]] name = "alloy-transport-ws" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d056ef079553e1f18834d6ef4c2793e4d51ac742021b2be5039dd623fe1354f0" +checksum = "9476a36a34e2fb51b6746d009c53d309a186a825aa95435407f0e07149f4ad2d" dependencies = [ "alloy-pubsub", "alloy-transport", @@ -1083,7 +1047,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3412d52bb97c6c6cc27ccc28d4e6e8cf605469101193b50b0bd5813b1f990b5" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "arbitrary", "arrayvec", @@ -1091,7 +1055,7 @@ dependencies = [ "derive_more", "nybbles", "proptest", - "proptest-derive", + "proptest-derive 0.5.1", "serde", "smallvec", "tracing", @@ -1099,23 +1063,17 @@ dependencies = [ [[package]] name = "alloy-tx-macros" -version = "1.0.25" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72e29436068f836727d4e7c819ae6bf6f9c9e19a32e96fc23e814709a277f23a" +checksum = "f8e52276fdb553d3c11563afad2898f4085165e4093604afe3d78b69afbf408f" dependencies = [ - "alloy-primitives 1.3.1", - "darling", + "alloy-primitives 1.4.1", + "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -1127,9 +1085,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.20" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -1142,9 +1100,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" @@ -1177,9 +1135,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.99" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "aquamarine" @@ -1192,7 +1150,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -1334,7 +1292,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -1372,7 +1330,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -1461,7 +1419,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -1556,18 +1514,15 @@ checksum = "155a5a185e42c6b77ac7b88a15143d930a9e9727a5b7b77eed417404ab15c247" [[package]] name = "async-compression" -version = "0.4.27" +version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddb939d66e4ae03cee6091612804ba446b12878410cfa17f785f4dd67d4014e8" +checksum = "5a89bce6054c720275ac2432fbba080a66a2106a44a1b804553930ca6909f4e0" dependencies = [ - "brotli", - "flate2", + "compression-codecs", + "compression-core", "futures-core", - "memchr", "pin-project-lite", "tokio", - "zstd", - "zstd-safe", ] [[package]] @@ -1600,7 +1555,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -1611,7 +1566,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -1649,7 +1604,7 @@ checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -1710,11 +1665,11 @@ dependencies = [ [[package]] name = "axum" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5" +checksum = "8a18ed336352031311f4e0b4dd2ff392d4fbb370777c9d18d7fc9d7359f73871" dependencies = [ - "axum-core 0.5.2", + "axum-core 0.5.5", "bytes", "form_urlencoded", "futures-util", @@ -1729,8 +1684,7 @@ dependencies = [ "mime", "percent-encoding", "pin-project-lite", - "rustversion", - "serde", + "serde_core", "serde_json", "serde_path_to_error", "serde_urlencoded", @@ -1764,9 +1718,9 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.5.2" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6" +checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22" dependencies = [ "bytes", "futures-core", @@ -1775,7 +1729,6 @@ dependencies = [ "http-body-util", "mime", "pin-project-lite", - "rustversion", "sync_wrapper", "tower-layer", "tower-service", @@ -1790,29 +1743,14 @@ checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" [[package]] name = "backon" -version = "1.5.2" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "592277618714fbcecda9a02ba7a8781f319d26532a88553bbacc77ba5d2b3a8d" +checksum = "cffb0e931875b666fc4fcb20fee52e9bbd1ef836fd9e9e04ec21555f9f85f7ef" dependencies = [ "fastrand", "tokio", ] -[[package]] -name = "backtrace" -version = "0.3.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets 0.52.6", -] - [[package]] name = "base-x" version = "0.2.11" @@ -1825,6 +1763,16 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base256emoji" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e9430d9a245a77c92176e649af6e275f20839a48389859d1661e9a128d077c" +dependencies = [ + "const-str", + "match-lookup", +] + [[package]] name = "base64" version = "0.21.7" @@ -1873,7 +1821,7 @@ version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "cexpr", "clang-sys", "itertools 0.12.1", @@ -1886,26 +1834,44 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.106", + "syn 2.0.108", "which", ] [[package]] name = "bindgen" -version = "0.70.1" +version = "0.71.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" +checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "cexpr", "clang-sys", "itertools 0.13.0", "proc-macro2", "quote", "regex", - "rustc-hash 1.1.0", + "rustc-hash 2.1.1", + "shlex", + "syn 2.0.108", +] + +[[package]] +name = "bindgen" +version = "0.72.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" +dependencies = [ + "bitflags 2.10.0", + "cexpr", + "clang-sys", + "itertools 0.13.0", + "proc-macro2", + "quote", + "regex", + "rustc-hash 2.1.1", "shlex", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -1947,22 +1913,22 @@ checksum = "2d7e60934ceec538daadb9d8432424ed043a904d8e0243f3c6446bce549a46ac" [[package]] name = "bitfield" -version = "0.19.1" +version = "0.19.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db1bcd90f88eabbf0cadbfb87a45bceeaebcd3b4bc9e43da379cd2ef0162590d" +checksum = "6bf79f42d21f18b5926a959280215903e659760da994835d27c3a0c5ff4f898f" dependencies = [ "bitfield-macros", ] [[package]] name = "bitfield-macros" -version = "0.19.1" +version = "0.19.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3787a07661997bfc05dd3431e379c0188573f78857080cf682e1393ab8e4d64c" +checksum = "6115af052c7914c0cbb97195e5c72cb61c511527250074f5c041d1048b0d8b16" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -1973,11 +1939,11 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.2" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a65b545ab31d687cff52899d4890855fec459eb6afe0da6417b8a18da87aa29" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -2022,9 +1988,9 @@ dependencies = [ [[package]] name = "blst" -version = "0.3.15" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fd49896f12ac9b6dcd7a5998466b9b58263a695a3dd1ecc1aaca2e12a90b080" +checksum = "dcdb4c7013139a150f9fc55d123186dbfaba0d912817466282c73ac49e71fb45" dependencies = [ "cc", "glob", @@ -2038,11 +2004,11 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c340fe0f0b267787095cbe35240c6786ff19da63ec7b69367ba338eace8169b" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "boa_interner", "boa_macros", "boa_string", - "indexmap 2.10.0", + "indexmap 2.12.0", "num-bigint", "rustc-hash 2.1.1", ] @@ -2054,7 +2020,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f620c3f06f51e65c0504ddf04978be1b814ac6586f0b45f6019801ab5efd37f9" dependencies = [ "arrayvec", - "bitflags 2.9.2", + "bitflags 2.10.0", "boa_ast", "boa_gc", "boa_interner", @@ -2068,7 +2034,7 @@ dependencies = [ "fast-float2", "hashbrown 0.15.5", "icu_normalizer 1.5.0", - "indexmap 2.10.0", + "indexmap 2.12.0", "intrusive-collections", "itertools 0.13.0", "num-bigint", @@ -2088,7 +2054,7 @@ dependencies = [ "static_assertions", "tap", "thin-vec", - "thiserror 2.0.16", + "thiserror 2.0.17", "time", ] @@ -2114,7 +2080,7 @@ dependencies = [ "boa_gc", "boa_macros", "hashbrown 0.15.5", - "indexmap 2.10.0", + "indexmap 2.12.0", "once_cell", "phf", "rustc-hash 2.1.1", @@ -2129,7 +2095,7 @@ checksum = "9fd3f870829131332587f607a7ff909f1af5fc523fd1b192db55fbbdf52e8d3c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", "synstructure 0.13.2", ] @@ -2139,7 +2105,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cc142dac798cdc6e2dbccfddeb50f36d2523bb977a976e19bdb3ae19b740804" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "boa_ast", "boa_interner", "boa_macros", @@ -2202,7 +2168,7 @@ dependencies = [ "serde_json", "serde_repr", "serde_urlencoded", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-util", "tower-service", @@ -2280,22 +2246,22 @@ checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" [[package]] name = "bytemuck" -version = "1.23.2" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.10.1" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" +checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -2315,9 +2281,9 @@ dependencies = [ [[package]] name = "c-kzg" -version = "2.1.1" +version = "2.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7318cfa722931cb5fe0838b98d3ce5621e75f6a6408abc21721d80de9223f2e4" +checksum = "e00bf4b112b07b505472dbefd19e37e53307e2bfed5a79e0cc161d58ccd0e687" dependencies = [ "arbitrary", "blst", @@ -2331,11 +2297,11 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.11" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d07aa9a93b00c76f71bc35d598bed923f6d4f3a9ca5c24b7737ae1a292841c0" +checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -2355,7 +2321,7 @@ checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" dependencies = [ "camino", "cargo-platform", - "semver 1.0.26", + "semver 1.0.27", "serde", "serde_json", ] @@ -2368,10 +2334,10 @@ checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" dependencies = [ "camino", "cargo-platform", - "semver 1.0.26", + "semver 1.0.27", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -2391,21 +2357,21 @@ dependencies = [ [[package]] name = "cbindgen" -version = "0.29.0" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "975982cdb7ad6a142be15bdf84aea7ec6a9e5d4d797c004d43185b24cfe4e684" +checksum = "befbfd072a8e81c02f8c507aefce431fe5e7d051f83d48a23ffc9b9fe5a11799" dependencies = [ "clap", "heck", - "indexmap 2.10.0", + "indexmap 2.12.0", "log", "proc-macro2", "quote", "serde", "serde_json", - "syn 2.0.106", + "syn 2.0.108", "tempfile", - "toml", + "toml 0.9.8", ] [[package]] @@ -2436,9 +2402,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" @@ -2448,17 +2414,16 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", "wasm-bindgen", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -2484,9 +2449,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.45" +version = "4.5.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318" +checksum = "0c2cfd7bf8a6017ddaa4e32ffe7403d547790db06bd171c1c53926faab501623" dependencies = [ "clap_builder", "clap_derive", @@ -2494,9 +2459,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.44" +version = "4.5.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8" +checksum = "0a4c05b9e80c5ccd3a7ef080ad7b6ba7d6fc00a985b8b157197075677c82c7a0" dependencies = [ "anstream", "anstyle", @@ -2506,21 +2471,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.45" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "clap_lex" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] name = "cmake" @@ -2537,7 +2502,7 @@ version = "0.3.0" source = "git+https://github.com/automata-network/coco-provider-sdk#3a832b8cf5e88ef71649ab56e4efd67067b26b7c" dependencies = [ "bincode", - "bitfield 0.19.1", + "bitfield 0.19.3", "cbindgen", "iocuddle", "libc", @@ -2568,11 +2533,11 @@ dependencies = [ [[package]] name = "comfy-table" -version = "7.1.4" +version = "7.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a65ebfec4fb190b6f90e944a817d60499ee0744e582530e2c9900a22e591d9a" +checksum = "b03b7db8e0b4b2fdad6c551e634134e99ec000e5c8c3b6856c65e8bbaded7a3b" dependencies = [ - "crossterm", + "crossterm 0.29.0", "unicode-segmentation", "unicode-width 0.2.0", ] @@ -2591,6 +2556,26 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "compression-codecs" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef8a506ec4b81c460798f572caead636d57d3d7e940f998160f52bd254bf2d23" +dependencies = [ + "brotli", + "compression-core", + "flate2", + "memchr", + "zstd", + "zstd-safe", +] + +[[package]] +name = "compression-core" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb" + [[package]] name = "concat-kdf" version = "0.1.0" @@ -2611,15 +2596,14 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.15.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dccd746bf9b1038c0507b7cec21eb2b11222db96a2902c96e8c185d6d20fb9c4" +checksum = "3bb320cac8a0750d7f25280aa97b09c26edfe161164238ecbbb31092b079e735" dependencies = [ "cfg-if", "cpufeatures", - "hex", "proptest", - "serde", + "serde_core", ] [[package]] @@ -2628,11 +2612,17 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const-str" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" + [[package]] name = "const_format" -version = "0.2.34" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" dependencies = [ "const_format_proc_macros", ] @@ -2771,7 +2761,7 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "crossterm_winapi", "mio", "parking_lot", @@ -2781,6 +2771,20 @@ dependencies = [ "winapi", ] +[[package]] +name = "crossterm" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" +dependencies = [ + "bitflags 2.10.0", + "crossterm_winapi", + "document-features", + "parking_lot", + "rustix 1.1.2", + "winapi", +] + [[package]] name = "crossterm_winapi" version = "0.9.1" @@ -2868,7 +2872,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -2877,8 +2881,18 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core 0.21.3", + "darling_macro 0.21.3", ] [[package]] @@ -2892,7 +2906,22 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.106", + "syn 2.0.108", +] + +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "serde", + "strsim", + "syn 2.0.108", ] [[package]] @@ -2901,9 +2930,20 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core", + "darling_core 0.20.11", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core 0.21.3", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -2956,7 +2996,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" dependencies = [ "data-encoding", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -2964,7 +3004,7 @@ name = "dcap-rs" version = "0.1.0" source = "git+https://github.com/automata-network/dcap-rs.git?rev=d847b8f75a493640c4881bdf67775250b6baefab#d847b8f75a493640c4881bdf67775250b6baefab" dependencies = [ - "alloy-sol-types 0.8.25", + "alloy-sol-types 0.8.26", "chrono", "hex", "p256", @@ -3020,12 +3060,12 @@ dependencies = [ [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" dependencies = [ "powerfmt", - "serde", + "serde_core", ] [[package]] @@ -3047,7 +3087,7 @@ checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3058,7 +3098,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3076,10 +3116,10 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" dependencies = [ - "darling", + "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3089,7 +3129,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3110,7 +3150,7 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", "unicode-xid", ] @@ -3169,7 +3209,7 @@ dependencies = [ "libc", "option-ext", "redox_users 0.5.2", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -3224,7 +3264,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3244,6 +3284,15 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aac81fa3e28d21450aa4d2ac065992ba96a1d7303efbce51a95f4fd175b67562" +[[package]] +name = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + [[package]] name = "dotenvy" version = "0.15.7" @@ -3326,7 +3375,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3403,7 +3452,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3423,7 +3472,7 @@ checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3443,7 +3492,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3454,12 +3503,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -3510,7 +3559,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3dc1355dbb41fbbd34ec28d4fb2a57d9a70c67ac3c19f6a5ca4d4a176b9e997a" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "hex", "serde", "serde_derive", @@ -3519,11 +3568,11 @@ dependencies = [ [[package]] name = "ethereum_ssz" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ca8ba45b63c389c6e115b095ca16381534fdcc03cf58176a3f8554db2dbe19b" +checksum = "0dcddb2554d19cde19b099fadddde576929d7a4d0c1cd3512d1fd95cf174375c" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "ethereum_serde_utils", "itertools 0.13.0", "serde", @@ -3534,14 +3583,14 @@ dependencies = [ [[package]] name = "ethereum_ssz_derive" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd55d08012b4e0dfcc92b8d6081234df65f2986ad34cc76eeed69c5e2ce7506" +checksum = "a657b6b3b7e153637dc6bdc6566ad9279d9ee11a15b12cfb24a2e04360637e9f" dependencies = [ - "darling", + "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3637,14 +3686,14 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "filetime" -version = "0.2.25" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" dependencies = [ "cfg-if", "libc", "libredox", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -3661,9 +3710,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.1.2" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" dependencies = [ "crc32fast", "miniz_oxide", @@ -3681,6 +3730,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + [[package]] name = "foreign-types" version = "0.3.2" @@ -3698,9 +3753,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] @@ -3782,7 +3837,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3832,24 +3887,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" [[package]] -name = "generator" -version = "0.8.5" +name = "generic-array" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d18470a76cb7f8ff746cf1f7470914f900252ec36bbc40b569d74b1258446827" -dependencies = [ - "cc", - "cfg-if", - "libc", - "log", - "rustversion", - "windows 0.61.3", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "serde", "typenum", @@ -3866,21 +3907,21 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "js-sys", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasip2", "wasm-bindgen", ] @@ -3894,19 +3935,13 @@ dependencies = [ "polyval", ] -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - [[package]] name = "git2" version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2deb07a133b1520dc1a5690e9bd08950108873d7ed5de38dcc74d3b5ebffa110" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "libc", "libgit2-sys", "log", @@ -3967,12 +4002,12 @@ dependencies = [ [[package]] name = "gmp-mpfr-sys" -version = "1.6.5" +version = "1.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66d61197a68f6323b9afa616cf83d55d69191e1bf364d4eb7d35ae18defe776" +checksum = "60f8970a75c006bb2f8ae79c6768a116dd215fa8346a87aed99bf9d82ca43394" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -3998,7 +4033,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.10.0", + "indexmap 2.12.0", "slab", "tokio", "tokio-util", @@ -4040,7 +4075,17 @@ checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", - "foldhash", + "foldhash 0.1.5", + "serde", +] + +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +dependencies = [ + "foldhash 0.2.0", "serde", ] @@ -4080,9 +4125,6 @@ name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -dependencies = [ - "serde", -] [[package]] name = "hex-conservative" @@ -4112,7 +4154,7 @@ dependencies = [ "rand 0.9.2", "ring", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tinyvec", "tokio", "tracing", @@ -4136,7 +4178,7 @@ dependencies = [ "resolv-conf", "serde", "smallvec", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] @@ -4161,11 +4203,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.11" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4234,9 +4276,9 @@ checksum = "91f255a4535024abf7640cb288260811fc14794f62b063652ed349f9a6c2348e" [[package]] name = "humantime" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" [[package]] name = "humantime-serde" @@ -4302,7 +4344,7 @@ dependencies = [ "tokio", "tokio-rustls", "tower-service", - "webpki-roots 1.0.2", + "webpki-roots 1.0.3", ] [[package]] @@ -4336,9 +4378,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" dependencies = [ "base64 0.22.1", "bytes", @@ -4352,7 +4394,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.0", + "socket2 0.6.1", "system-configuration", "tokio", "tower-service", @@ -4377,9 +4419,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -4387,7 +4429,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.61.2", + "windows-core 0.62.2", ] [[package]] @@ -4600,7 +4642,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -4611,9 +4653,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -4657,7 +4699,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -4698,21 +4740,25 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.10.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "arbitrary", "equivalent", - "hashbrown 0.15.5", + "hashbrown 0.16.0", "serde", + "serde_core", ] [[package]] name = "indoc" -version = "2.0.6" +version = "2.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" +checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" +dependencies = [ + "rustversion", +] [[package]] name = "inotify" @@ -4720,7 +4766,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "inotify-sys", "libc", ] @@ -4750,11 +4796,11 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "435d80800b936787d62688c927b6490e887c7ef5ff9ce922c6c6050fca75eb9a" dependencies = [ - "darling", + "darling 0.20.11", "indoc", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -4781,17 +4827,6 @@ dependencies = [ "memoffset", ] -[[package]] -name = "io-uring" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" -dependencies = [ - "bitflags 2.9.2", - "cfg-if", - "libc", -] - [[package]] name = "iocuddle" version = "0.1.1" @@ -4828,9 +4863,9 @@ dependencies = [ [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -4898,19 +4933,19 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "libc", ] [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" dependencies = [ "once_cell", "wasm-bindgen", @@ -4919,53 +4954,53 @@ dependencies = [ [[package]] name = "jsonrpsee" version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fba77a59c4c644fd48732367624d1bcf6f409f9c9a286fbc71d2f1fc0b2ea16" +source = "git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff#f04afa740e55db60dce20d9839758792f035ffff" dependencies = [ - "jsonrpsee-client-transport", - "jsonrpsee-core 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpsee-http-client 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpsee-proc-macros 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpsee-server 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpsee-types 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpsee-wasm-client", - "jsonrpsee-ws-client", + "jsonrpsee-core 0.25.1", + "jsonrpsee-http-client 0.25.1", + "jsonrpsee-proc-macros 0.25.1", + "jsonrpsee-server 0.25.1", + "jsonrpsee-types 0.25.1", "tokio", "tracing", ] [[package]] name = "jsonrpsee" -version = "0.25.1" -source = "git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff#f04afa740e55db60dce20d9839758792f035ffff" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f3f48dc3e6b8bd21e15436c1ddd0bc22a6a54e8ec46fedd6adf3425f396ec6a" dependencies = [ - "jsonrpsee-core 0.25.1 (git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff)", - "jsonrpsee-http-client 0.25.1 (git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff)", - "jsonrpsee-proc-macros 0.25.1 (git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff)", - "jsonrpsee-server 0.25.1 (git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff)", - "jsonrpsee-types 0.25.1 (git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff)", + "jsonrpsee-client-transport", + "jsonrpsee-core 0.26.0", + "jsonrpsee-http-client 0.26.0", + "jsonrpsee-proc-macros 0.26.0", + "jsonrpsee-server 0.26.0", + "jsonrpsee-types 0.26.0", + "jsonrpsee-wasm-client", + "jsonrpsee-ws-client", "tokio", "tracing", ] [[package]] name = "jsonrpsee-client-transport" -version = "0.25.1" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a320a3f1464e4094f780c4d48413acd786ce5627aaaecfac9e9c7431d13ae1" +checksum = "cf36eb27f8e13fa93dcb50ccb44c417e25b818cfa1a481b5470cd07b19c60b98" dependencies = [ "base64 0.22.1", "futures-channel", "futures-util", "gloo-net", "http", - "jsonrpsee-core 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpsee-core 0.26.0", "pin-project", "rustls", "rustls-pki-types", "rustls-platform-verifier", "soketto", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-rustls", "tokio-util", @@ -4976,73 +5011,72 @@ dependencies = [ [[package]] name = "jsonrpsee-core" version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693c93cbb7db25f4108ed121304b671a36002c2db67dff2ee4391a688c738547" +source = "git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff#f04afa740e55db60dce20d9839758792f035ffff" dependencies = [ "async-trait", "bytes", - "futures-timer", "futures-util", "http", "http-body", "http-body-util", - "jsonrpsee-types 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpsee-types 0.25.1", "parking_lot", "pin-project", "rand 0.9.2", "rustc-hash 2.1.1", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", - "tokio-stream", "tower 0.5.2", "tracing", - "wasm-bindgen-futures", ] [[package]] name = "jsonrpsee-core" -version = "0.25.1" -source = "git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff#f04afa740e55db60dce20d9839758792f035ffff" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "316c96719901f05d1137f19ba598b5fe9c9bc39f4335f67f6be8613921946480" dependencies = [ "async-trait", "bytes", + "futures-timer", "futures-util", "http", "http-body", "http-body-util", - "jsonrpsee-types 0.25.1 (git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff)", + "jsonrpsee-types 0.26.0", "parking_lot", "pin-project", "rand 0.9.2", "rustc-hash 2.1.1", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", + "tokio-stream", "tower 0.5.2", "tracing", + "wasm-bindgen-futures", ] [[package]] name = "jsonrpsee-http-client" version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6962d2bd295f75e97dd328891e58fce166894b974c1f7ce2e7597f02eeceb791" +source = "git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff#f04afa740e55db60dce20d9839758792f035ffff" dependencies = [ "base64 0.22.1", "http-body", "hyper", "hyper-rustls", "hyper-util", - "jsonrpsee-core 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpsee-types 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpsee-core 0.25.1", + "jsonrpsee-types 0.25.1", "rustls", "rustls-platform-verifier", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tower 0.5.2", "url", @@ -5050,21 +5084,22 @@ dependencies = [ [[package]] name = "jsonrpsee-http-client" -version = "0.25.1" -source = "git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff#f04afa740e55db60dce20d9839758792f035ffff" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790bedefcec85321e007ff3af84b4e417540d5c87b3c9779b9e247d1bcc3dab8" dependencies = [ "base64 0.22.1", "http-body", "hyper", "hyper-rustls", "hyper-util", - "jsonrpsee-core 0.25.1 (git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff)", - "jsonrpsee-types 0.25.1 (git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff)", + "jsonrpsee-core 0.26.0", + "jsonrpsee-types 0.26.0", "rustls", "rustls-platform-verifier", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tower 0.5.2", "url", @@ -5073,33 +5108,32 @@ dependencies = [ [[package]] name = "jsonrpsee-proc-macros" version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fa4f5daed39f982a1bb9d15449a28347490ad42b212f8eaa2a2a344a0dce9e9" +source = "git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff#f04afa740e55db60dce20d9839758792f035ffff" dependencies = [ "heck", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "jsonrpsee-proc-macros" -version = "0.25.1" -source = "git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff#f04afa740e55db60dce20d9839758792f035ffff" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2da3f8ab5ce1bb124b6d082e62dffe997578ceaf0aeb9f3174a214589dc00f07" dependencies = [ "heck", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "jsonrpsee-server" version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38b0bcf407ac68d241f90e2d46041e6a06988f97fe1721fb80b91c42584fae6" +source = "git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff#f04afa740e55db60dce20d9839758792f035ffff" dependencies = [ "futures-util", "http", @@ -5107,14 +5141,14 @@ dependencies = [ "http-body-util", "hyper", "hyper-util", - "jsonrpsee-core 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpsee-types 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpsee-core 0.25.1", + "jsonrpsee-types 0.25.1", "pin-project", "route-recognizer", "serde", "serde_json", "soketto", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", @@ -5124,8 +5158,9 @@ dependencies = [ [[package]] name = "jsonrpsee-server" -version = "0.25.1" -source = "git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff#f04afa740e55db60dce20d9839758792f035ffff" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c51b7c290bb68ce3af2d029648148403863b982f138484a73f02a9dd52dbd7f" dependencies = [ "futures-util", "http", @@ -5133,14 +5168,14 @@ dependencies = [ "http-body-util", "hyper", "hyper-util", - "jsonrpsee-core 0.25.1 (git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff)", - "jsonrpsee-types 0.25.1 (git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff)", + "jsonrpsee-core 0.26.0", + "jsonrpsee-types 0.26.0", "pin-project", "route-recognizer", "serde", "serde_json", "soketto", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", @@ -5151,48 +5186,48 @@ dependencies = [ [[package]] name = "jsonrpsee-types" version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66df7256371c45621b3b7d2fb23aea923d577616b9c0e9c0b950a6ea5c2be0ca" +source = "git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff#f04afa740e55db60dce20d9839758792f035ffff" dependencies = [ "http", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "jsonrpsee-types" -version = "0.25.1" -source = "git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff#f04afa740e55db60dce20d9839758792f035ffff" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc88ff4688e43cc3fa9883a8a95c6fa27aa2e76c96e610b737b6554d650d7fd5" dependencies = [ "http", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "jsonrpsee-wasm-client" -version = "0.25.1" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b67695cbcf4653f39f8f8738925547e0e23fd9fe315bccf951097b9f6a38781" +checksum = "7902885de4779f711a95d82c8da2d7e5f9f3a7c7cfa44d51c067fd1c29d72a3c" dependencies = [ "jsonrpsee-client-transport", - "jsonrpsee-core 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpsee-types 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpsee-core 0.26.0", + "jsonrpsee-types 0.26.0", "tower 0.5.2", ] [[package]] name = "jsonrpsee-ws-client" -version = "0.25.1" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da2694c9ff271a9d3ebfe520f6b36820e85133a51be77a3cb549fd615095261" +checksum = "9b6fceceeb05301cc4c065ab3bd2fa990d41ff4eb44e4ca1b30fa99c057c3e79" dependencies = [ "http", "jsonrpsee-client-transport", - "jsonrpsee-core 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpsee-types 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpsee-core 0.26.0", + "jsonrpsee-types 0.26.0", "tower 0.5.2", "url", ] @@ -5280,9 +5315,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.175" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libgit2-sys" @@ -5298,12 +5333,12 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-targets 0.53.3", + "windows-link 0.2.1", ] [[package]] @@ -5326,31 +5361,31 @@ dependencies = [ "multihash", "quick-protobuf", "sha2 0.10.9", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", "zeroize", ] [[package]] name = "libproc" -version = "0.14.10" +version = "0.14.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78a09b56be5adbcad5aa1197371688dc6bb249a26da3bca2011ee2fb987ebfb" +checksum = "a54ad7278b8bc5301d5ffd2a94251c004feb971feba96c971ea4063645990757" dependencies = [ - "bindgen 0.70.1", + "bindgen 0.72.1", "errno", "libc", ] [[package]] name = "libredox" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "libc", - "redox_syscall 0.5.17", + "redox_syscall 0.5.18", ] [[package]] @@ -5435,9 +5470,9 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.9.4" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" @@ -5451,35 +5486,27 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +[[package]] +name = "litrs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" + [[package]] name = "lock_api" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", "serde", ] [[package]] name = "log" -version = "0.4.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" - -[[package]] -name = "loom" -version = "0.7.2" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "tracing", - "tracing-subscriber 0.3.19", -] +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "lru" @@ -5532,9 +5559,9 @@ checksum = "08ab2867e3eeeca90e844d1940eab391c9dc5228783db2ed999acbc0a9ed375a" [[package]] name = "mach2" -version = "0.4.3" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d640282b302c0bb0a2a8e0233ead9035e3bed871f0b7e81fe4a1ec829765db44" +checksum = "6a1b95cd5421ec55b445b5ae102f5ea0e768de1f82bd3001e11f426c269c3aea" dependencies = [ "libc", ] @@ -5547,7 +5574,7 @@ checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -5557,16 +5584,27 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", +] + +[[package]] +name = "match-lookup" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1265724d8cb29dbbc2b0f06fffb8bf1a8c0cf73a78eede9ba73a4a66c52a981e" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] name = "matchers" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] [[package]] @@ -5593,15 +5631,15 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.5" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memmap2" -version = "0.9.7" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "483758ad303d734cec05e5c12b41d7e93e6a6390c5e9dae6bdeb7c1259012d28" +checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" dependencies = [ "libc", ] @@ -5634,7 +5672,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -5648,7 +5686,7 @@ dependencies = [ "hyper", "hyper-rustls", "hyper-util", - "indexmap 2.10.0", + "indexmap 2.12.0", "ipnet", "metrics", "metrics-util 0.19.1", @@ -5669,30 +5707,30 @@ dependencies = [ "hyper", "hyper-rustls", "hyper-util", - "indexmap 2.10.0", + "indexmap 2.12.0", "ipnet", "metrics", "metrics-util 0.20.0", "quanta", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] [[package]] name = "metrics-process" -version = "2.4.0" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a82c8add4382f29a122fa64fff1891453ed0f6b2867d971e7d60cb8dfa322ff" +checksum = "f615e08e049bd14a44c4425415782efb9bcd479fc1e19ddeb971509074c060d0" dependencies = [ "libc", "libproc", "mach2", "metrics", "once_cell", - "procfs", + "procfs 0.18.0", "rlimit", - "windows 0.58.0", + "windows 0.62.2", ] [[package]] @@ -5705,7 +5743,7 @@ dependencies = [ "crossbeam-epoch", "crossbeam-utils", "hashbrown 0.15.5", - "indexmap 2.10.0", + "indexmap 2.12.0", "metrics", "ordered-float", "quanta", @@ -5775,18 +5813,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", + "simd-adler32", ] [[package]] name = "mio" -version = "1.0.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" dependencies = [ "libc", "log", - "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", + "wasi", + "windows-sys 0.61.2", ] [[package]] @@ -5812,23 +5851,22 @@ dependencies = [ [[package]] name = "moka" -version = "0.12.10" +version = "0.12.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" +checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077" dependencies = [ "async-lock", "crossbeam-channel", "crossbeam-epoch", "crossbeam-utils", + "equivalent", "event-listener", "futures-util", - "loom", "parking_lot", "portable-atomic", "rustc_version 0.4.1", "smallvec", "tagptr", - "thiserror 1.0.69", "uuid", ] @@ -5859,11 +5897,12 @@ dependencies = [ [[package]] name = "multibase" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" +checksum = "8694bb4835f452b0e3bb06dbebb1d6fc5385b6ca1caf2e55fd165c042390ec77" dependencies = [ "base-x", + "base256emoji", "data-encoding", "data-encoding-macro", ] @@ -5929,7 +5968,7 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "fsevent-sys", "inotify", "kqueue", @@ -5958,12 +5997,11 @@ dependencies = [ [[package]] name = "nu-ansi-term" -version = "0.46.0" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "overload", - "winapi", + "windows-sys 0.61.2", ] [[package]] @@ -6014,7 +6052,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -6070,9 +6108,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" +checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" dependencies = [ "num_enum_derive", "rustversion", @@ -6080,14 +6118,14 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" +checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -6101,9 +6139,9 @@ dependencies = [ [[package]] name = "nybbles" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63cb50036b1ad148038105af40aaa70ff24d8a14fbc44ae5c914e1348533d12e" +checksum = "2c4b5ecbd0beec843101bffe848217f770e8b8da81d8355b7d6e226f2199b3dc" dependencies = [ "alloy-rlp", "arbitrary", @@ -6116,32 +6154,23 @@ dependencies = [ [[package]] name = "objc2-core-foundation" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", ] [[package]] name = "objc2-io-kit" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71c1c64d6120e51cd86033f67176b1cb66780c2efe34dec55176f77befd93c0a" +checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" dependencies = [ "libc", "objc2-core-foundation", ] -[[package]] -name = "object" -version = "0.36.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" -dependencies = [ - "memchr", -] - [[package]] name = "oid" version = "0.2.1" @@ -6172,20 +6201,20 @@ dependencies = [ [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "op-alloy-consensus" -version = "0.18.14" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c88d2940558fd69f8f07b3cbd7bb3c02fc7d31159c1a7ba9deede50e7881024" +checksum = "3a501241474c3118833d6195312ae7eb7cc90bbb0d5f524cbb0b06619e49ff67" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-network", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-eth", "alloy-serde", @@ -6193,7 +6222,7 @@ dependencies = [ "derive_more", "serde", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -6204,13 +6233,13 @@ checksum = "a79f352fc3893dcd670172e615afef993a41798a1d3fc0db88a3e60ef2e70ecc" [[package]] name = "op-alloy-network" -version = "0.18.14" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7071d7c3457d02aa0d35799cb8fbd93eabd51a21d100dcf411f4fcab6fdd2ea5" +checksum = "f80108e3b36901200a4c5df1db1ee9ef6ce685b59ea79d7be1713c845e3765da" dependencies = [ "alloy-consensus", "alloy-network", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-provider", "alloy-rpc-types-eth", "alloy-signer", @@ -6220,42 +6249,42 @@ dependencies = [ [[package]] name = "op-alloy-rpc-jsonrpsee" -version = "0.18.14" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327fc8be822ca7d4be006c69779853fa27e747cff4456a1c2ef521a68ac26432" +checksum = "e8eb878fc5ea95adb5abe55fb97475b3eb0dcc77dfcd6f61bd626a68ae0bdba1" dependencies = [ - "alloy-primitives 1.3.1", - "jsonrpsee 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-primitives 1.4.1", + "jsonrpsee 0.26.0", ] [[package]] name = "op-alloy-rpc-types" -version = "0.18.14" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f22201e53e8cbb67a053e88b534b4e7f02265c5406994bf35978482a9ad0ae26" +checksum = "753d6f6b03beca1ba9cbd344c05fee075a2ce715ee9d61981c10b9c764a824a2" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-network-primitives", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-eth", "alloy-serde", "derive_more", "op-alloy-consensus", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "op-alloy-rpc-types-engine" -version = "0.18.14" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b4f977b51e9e177e69a4d241ab7c4b439df9a3a5a998c000ae01be724de271" +checksum = "14e50c94013a1d036a529df259151991dbbd6cf8dc215e3b68b784f95eec60e6" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-engine", "alloy-serde", @@ -6265,20 +6294,21 @@ dependencies = [ "op-alloy-consensus", "serde", "snap", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "op-rbuilder" -version = "0.2.0" +version = "0.2.6" dependencies = [ "alloy-consensus", "alloy-contract", "alloy-eips", + "alloy-evm", "alloy-json-rpc", "alloy-network", - "alloy-op-evm 0.18.3", - "alloy-primitives 1.3.1", + "alloy-op-evm", + "alloy-primitives 1.4.1", "alloy-provider", "alloy-rpc-client", "alloy-rpc-types-beacon", @@ -6286,7 +6316,7 @@ dependencies = [ "alloy-rpc-types-eth", "alloy-serde", "alloy-signer-local", - "alloy-sol-types 1.3.1", + "alloy-sol-types 1.4.1", "alloy-transport", "alloy-transport-http", "anyhow", @@ -6297,14 +6327,19 @@ dependencies = [ "ctor", "dashmap 6.1.0", "derive_more", + "dirs-next", "eyre", "futures", "futures-util", "hex", "http", - "jsonrpsee 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpsee-core 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpsee-types 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "http-body-util", + "hyper", + "hyper-util", + "jsonrpsee 0.26.0", + "jsonrpsee-core 0.26.0", + "jsonrpsee-types 0.26.0", + "k256", "macros", "metrics", "moka", @@ -6314,57 +6349,58 @@ dependencies = [ "op-alloy-network", "op-alloy-rpc-types", "op-alloy-rpc-types-engine", - "op-revm 9.0.1", + "op-revm", "opentelemetry 0.29.1", "parking_lot", "rand 0.9.2", + "reqwest", "reth", - "reth-basic-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-basic-payload-builder 1.8.2", + "reth-chain-state 1.8.2", + "reth-chainspec 1.8.2", "reth-cli", "reth-cli-commands", "reth-cli-util", "reth-db", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-evm 1.8.2", + "reth-execution-types 1.8.2", "reth-exex", "reth-ipc", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-network-peers 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-metrics 1.8.2", + "reth-network-peers 1.8.2", "reth-node-api", "reth-node-builder", "reth-node-core", "reth-node-ethereum", - "reth-optimism-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-optimism-chainspec 1.8.2", "reth-optimism-cli", - "reth-optimism-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-optimism-consensus 1.8.2", + "reth-optimism-evm 1.8.2", + "reth-optimism-forks 1.8.2", "reth-optimism-node", - "reth-optimism-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-optimism-payload-builder 1.8.2", + "reth-optimism-primitives 1.8.2", "reth-optimism-rpc", - "reth-optimism-txpool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-builder-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-util 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-optimism-txpool 1.8.2", + "reth-payload-builder 1.8.2", + "reth-payload-builder-primitives 1.8.2", + "reth-payload-primitives 1.8.2", + "reth-payload-util 1.8.2", "reth-primitives", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-primitives-traits 1.8.2", "reth-provider", - "reth-revm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-revm 1.8.2", "reth-rpc-api", "reth-rpc-engine-api", "reth-rpc-eth-types", "reth-rpc-layer", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-storage-api 1.8.2", + "reth-tasks 1.8.2", "reth-testing-utils", "reth-tracing-otlp", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "revm 28.0.1", + "reth-transaction-pool 1.8.2", + "reth-trie 1.8.2", + "revm", "rlimit", "rollup-boost", "secp256k1 0.30.0", @@ -6385,8 +6421,7 @@ dependencies = [ "tokio-util", "tower 0.5.2", "tracing", - "tracing-subscriber 0.3.19", - "ureq", + "tracing-subscriber 0.3.20", "url", "uuid", "vergen", @@ -6395,24 +6430,12 @@ dependencies = [ [[package]] name = "op-revm" -version = "8.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce1dc7533f4e5716c55cd3d62488c6200cb4dfda96e0c75a7e484652464343b" -dependencies = [ - "auto_impl", - "once_cell", - "revm 27.1.0", - "serde", -] - -[[package]] -name = "op-revm" -version = "9.0.1" +version = "10.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6889cdfed74c6c924a54b2357982fce232e06473c6bb73b9a0c71a9151bfabd" +checksum = "826f43a5b1613c224f561847c152bfbaefcb593a9ae2c612ff4dc4661c6e625f" dependencies = [ "auto_impl", - "revm 28.0.1", + "revm", "serde", ] @@ -6424,11 +6447,11 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.73" +version = "0.10.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" +checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "cfg-if", "foreign-types", "libc", @@ -6445,7 +6468,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -6456,9 +6479,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.109" +version = "0.9.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" dependencies = [ "cc", "libc", @@ -6476,7 +6499,7 @@ dependencies = [ "futures-sink", "js-sys", "pin-project-lite", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] @@ -6490,7 +6513,7 @@ dependencies = [ "futures-sink", "js-sys", "pin-project-lite", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] @@ -6538,7 +6561,7 @@ dependencies = [ "prost", "reqwest", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tonic", "tracing", @@ -6558,7 +6581,7 @@ dependencies = [ "opentelemetry_sdk 0.29.0", "prost", "reqwest", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] @@ -6610,7 +6633,7 @@ dependencies = [ "percent-encoding", "rand 0.8.5", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tracing", @@ -6630,7 +6653,7 @@ dependencies = [ "percent-encoding", "rand 0.9.2", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] @@ -6649,12 +6672,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "p256" version = "0.13.2" @@ -6704,7 +6721,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -6715,9 +6732,9 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", @@ -6725,15 +6742,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.17", + "redox_syscall 0.5.18", "smallvec", - "windows-targets 0.52.6", + "windows-link 0.2.1", ] [[package]] @@ -6744,7 +6761,7 @@ checksum = "914a1c2265c98e2446911282c6ac86d8524f495792c38c5bd884f80499c7538a" dependencies = [ "parse-display-derive", "regex", - "regex-syntax 0.8.5", + "regex-syntax", ] [[package]] @@ -6756,9 +6773,9 @@ dependencies = [ "proc-macro2", "quote", "regex", - "regex-syntax 0.8.5", + "regex-syntax", "structmeta", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -6769,12 +6786,12 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pem" -version = "3.0.5" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" dependencies = [ "base64 0.22.1", - "serde", + "serde_core", ] [[package]] @@ -6788,18 +6805,17 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" +checksum = "989e7521a040efde50c3ab6bbadafbe15ab6dc042686926be59ac35d74607df4" dependencies = [ "memchr", - "thiserror 2.0.16", "ucd-trie", ] @@ -6844,7 +6860,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -6908,7 +6924,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -6974,9 +6990,9 @@ checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" dependencies = [ "zerovec 0.11.4", ] @@ -7013,7 +7029,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -7038,11 +7054,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit", + "toml_edit 0.23.7", ] [[package]] @@ -7064,14 +7080,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] @@ -7082,40 +7098,60 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc5b72d8145275d844d4b5f6d4e1eef00c8cd889edb6035c21675d1bb1f45c9f" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "chrono", "flate2", "hex", - "procfs-core", + "procfs-core 0.17.0", "rustix 0.38.44", ] +[[package]] +name = "procfs" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25485360a54d6861439d60facef26de713b1e126bf015ec8f98239467a2b82f7" +dependencies = [ + "bitflags 2.10.0", + "procfs-core 0.18.0", + "rustix 1.1.2", +] + [[package]] name = "procfs-core" version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "239df02d8349b06fc07398a3a1697b06418223b1c7725085e801e7c0fc6a12ec" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "chrono", "hex", ] +[[package]] +name = "procfs-core" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6401bf7b6af22f78b563665d15a22e9aef27775b79b149a66ca022468a4e405" +dependencies = [ + "bitflags 2.10.0", + "hex", +] + [[package]] name = "proptest" -version = "1.7.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fcdab19deb5195a31cf7726a210015ff1496ba1464fd42cb4f537b8b01b471f" +checksum = "bee689443a2bd0a16ab0348b52ee43e3b2d1b1f931c8aa5c9f8de4c86fbe8c40" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.9.2", - "lazy_static", + "bitflags 2.10.0", "num-traits", "rand 0.9.2", "rand_chacha 0.9.0", "rand_xorshift", - "regex-syntax 0.8.5", + "regex-syntax", "rusty-fork", "tempfile", "unarray", @@ -7139,7 +7175,18 @@ checksum = "4ee1c9ac207483d5e7db4940700de86a9aae46ef90c48b57f99fe7edb8345e49" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", +] + +[[package]] +name = "proptest-derive" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "095a99f75c69734802359b682be8daaf8980296731f6470434ea2c652af1dd30" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", ] [[package]] @@ -7162,7 +7209,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -7171,7 +7218,7 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "memchr", "unicase", ] @@ -7186,7 +7233,7 @@ dependencies = [ "libc", "once_cell", "raw-cpuid", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "web-sys", "winapi", ] @@ -7208,9 +7255,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", "cfg_aliases", @@ -7219,8 +7266,8 @@ dependencies = [ "quinn-udp", "rustc-hash 2.1.1", "rustls", - "socket2 0.5.10", - "thiserror 2.0.16", + "socket2 0.6.1", + "thiserror 2.0.17", "tokio", "tracing", "web-time", @@ -7228,12 +7275,12 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.12" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ "bytes", - "getrandom 0.3.3", + "getrandom 0.3.4", "lru-slab", "rand 0.9.2", "ring", @@ -7241,7 +7288,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.16", + "thiserror 2.0.17", "tinyvec", "tracing", "web-time", @@ -7249,23 +7296,23 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.5.10", + "socket2 0.6.1", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] @@ -7350,7 +7397,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "serde", ] @@ -7378,10 +7425,10 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eabd94c2f37801c20583fc49dd5cd6b0ba68c716787c2dd6ed18571e1e63117b" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "cassowary", "compact_str", - "crossterm", + "crossterm 0.28.1", "indoc", "instability", "itertools 0.13.0", @@ -7395,11 +7442,11 @@ dependencies = [ [[package]] name = "raw-cpuid" -version = "11.5.0" +version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" +checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", ] [[package]] @@ -7439,11 +7486,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.17" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", ] [[package]] @@ -7465,72 +7512,57 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.16", "libredox", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "ref-cast" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "regex" -version = "1.11.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", + "regex-automata", + "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "regress" @@ -7544,9 +7576,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.23" +version = "0.12.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" dependencies = [ "base64 0.22.1", "bytes", @@ -7588,34 +7620,34 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 1.0.2", + "webpki-roots 1.0.3", ] [[package]] name = "resolv-conf" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3" +checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" [[package]] name = "reth" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-rpc-types", "aquamarine", "clap", "eyre", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", "reth-cli-runner", "reth-cli-util", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-consensus-common 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-consensus 1.8.2", + "reth-consensus-common 1.8.2", "reth-db", "reth-ethereum-cli", "reth-ethereum-payload-builder", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-ethereum-primitives 1.8.2", + "reth-evm 1.8.2", "reth-network", "reth-network-api", "reth-node-api", @@ -7623,94 +7655,94 @@ dependencies = [ "reth-node-core", "reth-node-ethereum", "reth-node-metrics", - "reth-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-payload-builder 1.8.2", + "reth-payload-primitives 1.8.2", "reth-primitives", "reth-provider", "reth-ress-protocol", "reth-ress-provider", - "reth-revm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-revm 1.8.2", "reth-rpc", "reth-rpc-api", "reth-rpc-builder", "reth-rpc-convert", "reth-rpc-eth-types", "reth-rpc-server-types", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-tasks 1.8.2", "reth-tokio-util", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-transaction-pool 1.8.2", "tokio", "tracing", ] [[package]] name = "reth-basic-payload-builder" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "futures-core", "futures-util", "metrics", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-payload-builder-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-revm 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-chain-state 1.8.1", + "reth-metrics 1.8.1", + "reth-payload-builder 1.8.1", + "reth-payload-builder-primitives 1.8.1", + "reth-payload-primitives 1.8.1", + "reth-primitives-traits 1.8.1", + "reth-revm 1.8.1", + "reth-storage-api 1.8.1", + "reth-tasks 1.8.1", "tokio", "tracing", ] [[package]] name = "reth-basic-payload-builder" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "futures-core", "futures-util", "metrics", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-builder-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-revm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chain-state 1.8.2", + "reth-metrics 1.8.2", + "reth-payload-builder 1.8.2", + "reth-payload-builder-primitives 1.8.2", + "reth-payload-primitives 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-revm 1.8.2", + "reth-storage-api 1.8.2", + "reth-tasks 1.8.2", "tokio", "tracing", ] [[package]] name = "reth-chain-state" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "derive_more", "metrics", "parking_lot", "pin-project", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-trie 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-chainspec 1.8.1", + "reth-errors 1.8.1", + "reth-ethereum-primitives 1.8.1", + "reth-execution-types 1.8.1", + "reth-metrics 1.8.1", + "reth-primitives-traits 1.8.1", + "reth-storage-api 1.8.1", + "reth-trie 1.8.1", "revm-database", "tokio", "tokio-stream", @@ -7719,12 +7751,12 @@ dependencies = [ [[package]] name = "reth-chain-state" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-signer", "alloy-signer-local", "derive_more", @@ -7732,14 +7764,14 @@ dependencies = [ "parking_lot", "pin-project", "rand 0.9.2", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", + "reth-errors 1.8.2", + "reth-ethereum-primitives 1.8.2", + "reth-execution-types 1.8.2", + "reth-metrics 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-storage-api 1.8.2", + "reth-trie 1.8.2", "revm-database", "revm-state", "serde", @@ -7750,48 +7782,48 @@ dependencies = [ [[package]] name = "reth-chainspec" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", - "alloy-evm 0.15.0", + "alloy-evm", "alloy-genesis", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-trie", "auto_impl", "derive_more", - "reth-ethereum-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-network-peers 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-ethereum-forks 1.8.1", + "reth-network-peers 1.8.1", + "reth-primitives-traits 1.8.1", "serde_json", ] [[package]] name = "reth-chainspec" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", - "alloy-evm 0.18.3", + "alloy-evm", "alloy-genesis", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-trie", "auto_impl", "derive_more", - "reth-ethereum-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-network-peers 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-ethereum-forks 1.8.2", + "reth-network-peers 1.8.2", + "reth-primitives-traits 1.8.2", "serde_json", ] [[package]] name = "reth-cli" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-genesis", "clap", @@ -7804,34 +7836,34 @@ dependencies = [ [[package]] name = "reth-cli-commands" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "ahash", "alloy-chains", "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "backon", "clap", "comfy-table", - "crossterm", + "crossterm 0.28.1", "eyre", "fdlimit", "futures", "human_bytes", + "humantime", "itertools 0.14.0", "lz4", "ratatui", "reqwest", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", "reth-cli", "reth-cli-runner", "reth-cli-util", - "reth-codecs 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-codecs 1.8.2", "reth-config", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-consensus 1.8.2", "reth-db", "reth-db-api", "reth-db-common", @@ -7844,26 +7876,27 @@ dependencies = [ "reth-era-utils", "reth-eth-wire", "reth-etl", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-evm 1.8.2", "reth-exex", - "reth-fs-util 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-fs-util 1.8.2", "reth-net-nat", "reth-network", "reth-network-p2p", - "reth-network-peers 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-network-peers 1.8.2", "reth-node-api", "reth-node-builder", "reth-node-core", "reth-node-events", "reth-node-metrics", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-primitives-traits 1.8.2", "reth-provider", "reth-prune", - "reth-revm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-revm 1.8.2", "reth-stages", "reth-static-file", - "reth-static-file-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-static-file-types 1.8.2", + "reth-trie 1.8.2", + "reth-trie-common 1.8.2", "reth-trie-db", "secp256k1 0.30.0", "serde", @@ -7871,181 +7904,183 @@ dependencies = [ "tar", "tokio", "tokio-stream", - "toml", + "toml 0.8.23", "tracing", + "zstd", ] [[package]] name = "reth-cli-runner" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-tasks 1.8.2", "tokio", "tracing", ] [[package]] name = "reth-cli-util" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "cfg-if", "eyre", "libc", "rand 0.8.5", - "reth-fs-util 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-fs-util 1.8.2", "secp256k1 0.30.0", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tikv-jemallocator", ] [[package]] name = "reth-codecs" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-genesis", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-trie", "bytes", "modular-bitfield", "op-alloy-consensus", - "reth-codecs-derive 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-zstd-compressors 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-codecs-derive 1.8.1", + "reth-zstd-compressors 1.8.1", "serde", ] [[package]] name = "reth-codecs" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-genesis", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-trie", "arbitrary", "bytes", "modular-bitfield", "op-alloy-consensus", - "reth-codecs-derive 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-zstd-compressors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-codecs-derive 1.8.2", + "reth-zstd-compressors 1.8.2", "serde", "visibility", ] [[package]] name = "reth-codecs-derive" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "convert_case", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "reth-codecs-derive" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "convert_case", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "reth-config" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "eyre", "humantime-serde", "reth-network-types", - "reth-prune-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-stages-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-prune-types 1.8.2", + "reth-stages-types 1.8.2", "serde", - "toml", + "toml 0.8.23", "url", ] [[package]] name = "reth-consensus" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "auto_impl", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "thiserror 2.0.16", + "reth-execution-types 1.8.1", + "reth-primitives-traits 1.8.1", + "thiserror 2.0.17", ] [[package]] name = "reth-consensus" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "auto_impl", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "thiserror 2.0.16", + "reth-execution-types 1.8.2", + "reth-primitives-traits 1.8.2", + "thiserror 2.0.17", ] [[package]] name = "reth-consensus-common" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-chainspec 1.8.1", + "reth-consensus 1.8.1", + "reth-primitives-traits 1.8.1", ] [[package]] name = "reth-consensus-common" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", + "reth-consensus 1.8.2", + "reth-primitives-traits 1.8.2", ] [[package]] name = "reth-consensus-debug-client" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-json-rpc", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-provider", "alloy-rpc-types-engine", + "alloy-transport", "auto_impl", "derive_more", "eyre", "futures", "reqwest", "reth-node-api", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-primitives-traits 1.8.2", "reth-tracing", "ringbuffer", "serde", @@ -8055,38 +8090,38 @@ dependencies = [ [[package]] name = "reth-db" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "derive_more", "eyre", "metrics", "page_size", "parking_lot", "reth-db-api", - "reth-fs-util 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-fs-util 1.8.2", "reth-libmdbx", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-metrics 1.8.2", "reth-nippy-jar", - "reth-static-file-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-static-file-types 1.8.2", + "reth-storage-errors 1.8.2", "reth-tracing", "rustc-hash 2.1.1", "strum 0.27.2", "sysinfo 0.33.1", "tempfile", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "reth-db-api" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-genesis", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "arbitrary", "bytes", "derive_more", @@ -8094,80 +8129,80 @@ dependencies = [ "modular-bitfield", "parity-scale-codec", "proptest", - "reth-codecs 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-db-models 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-prune-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-stages-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-codecs 1.8.2", + "reth-db-models 1.8.2", + "reth-ethereum-primitives 1.8.2", + "reth-optimism-primitives 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-prune-types 1.8.2", + "reth-stages-types 1.8.2", + "reth-storage-errors 1.8.2", + "reth-trie-common 1.8.2", "roaring", "serde", ] [[package]] name = "reth-db-common" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-genesis", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "boyer-moore-magiclen", "eyre", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-codecs 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", + "reth-codecs 1.8.2", "reth-config", "reth-db-api", "reth-etl", - "reth-execution-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-fs-util 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-execution-errors 1.8.2", + "reth-fs-util 1.8.2", "reth-node-types", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-primitives-traits 1.8.2", "reth-provider", - "reth-stages-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-static-file-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-stages-types 1.8.2", + "reth-static-file-types 1.8.2", + "reth-trie 1.8.2", "reth-trie-db", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] [[package]] name = "reth-db-models" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "alloy-primitives 1.4.1", + "reth-primitives-traits 1.8.1", ] [[package]] name = "reth-db-models" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "arbitrary", "bytes", "modular-bitfield", - "reth-codecs 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-codecs 1.8.2", + "reth-primitives-traits 1.8.2", "serde", ] [[package]] name = "reth-discv4" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "discv5", "enr", @@ -8175,14 +8210,14 @@ dependencies = [ "itertools 0.14.0", "parking_lot", "rand 0.8.5", - "reth-ethereum-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-ethereum-forks 1.8.2", "reth-net-banlist", "reth-net-nat", - "reth-network-peers 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-network-peers 1.8.2", "schnellru", "secp256k1 0.30.0", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tracing", @@ -8190,10 +8225,10 @@ dependencies = [ [[package]] name = "reth-discv5" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "derive_more", "discv5", @@ -8202,35 +8237,35 @@ dependencies = [ "itertools 0.14.0", "metrics", "rand 0.9.2", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-network-peers 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", + "reth-ethereum-forks 1.8.2", + "reth-metrics 1.8.2", + "reth-network-peers 1.8.2", "secp256k1 0.30.0", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] [[package]] name = "reth-dns-discovery" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "data-encoding", "enr", "hickory-resolver", "linked_hash_set", "parking_lot", - "reth-ethereum-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-network-peers 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-ethereum-forks 1.8.2", + "reth-network-peers 1.8.2", "reth-tokio-util", "schnellru", "secp256k1 0.30.0", "serde", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tracing", @@ -8238,12 +8273,12 @@ dependencies = [ [[package]] name = "reth-downloaders" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "futures", "futures-util", @@ -8252,19 +8287,19 @@ dependencies = [ "pin-project", "rayon", "reth-config", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-consensus 1.8.2", "reth-db", "reth-db-api", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-ethereum-primitives 1.8.2", + "reth-metrics 1.8.2", "reth-network-p2p", - "reth-network-peers 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-network-peers 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-storage-api 1.8.2", + "reth-tasks 1.8.2", "reth-testing-utils", "tempfile", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", @@ -8273,11 +8308,11 @@ dependencies = [ [[package]] name = "reth-ecies" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "aes", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "block-padding", "byteorder", @@ -8290,11 +8325,11 @@ dependencies = [ "hmac", "pin-project", "rand 0.8.5", - "reth-network-peers 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-network-peers 1.8.2", "secp256k1 0.30.0", "sha2 0.10.9", "sha3", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", @@ -8304,23 +8339,23 @@ dependencies = [ [[package]] name = "reth-engine-local" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "eyre", "futures-util", "op-alloy-rpc-types-engine", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", + "reth-engine-primitives 1.8.2", + "reth-ethereum-engine-primitives 1.8.2", + "reth-optimism-chainspec 1.8.2", + "reth-payload-builder 1.8.2", + "reth-payload-primitives 1.8.2", "reth-provider", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-transaction-pool 1.8.2", "tokio", "tokio-stream", "tracing", @@ -8328,86 +8363,84 @@ dependencies = [ [[package]] name = "reth-engine-primitives" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "auto_impl", - "futures", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-payload-builder-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-trie 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "serde", - "thiserror 2.0.16", - "tokio", + "reth-chain-state 1.8.1", + "reth-errors 1.8.1", + "reth-ethereum-primitives 1.8.1", + "reth-evm 1.8.1", + "reth-execution-types 1.8.1", + "reth-payload-builder-primitives 1.8.1", + "reth-payload-primitives 1.8.1", + "reth-primitives-traits 1.8.1", + "reth-trie-common 1.8.1", + "serde", + "thiserror 2.0.17", ] [[package]] name = "reth-engine-primitives" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "auto_impl", "futures", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-builder-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "serde", - "thiserror 2.0.16", + "reth-chain-state 1.8.2", + "reth-errors 1.8.2", + "reth-ethereum-primitives 1.8.2", + "reth-evm 1.8.2", + "reth-execution-types 1.8.2", + "reth-payload-builder-primitives 1.8.2", + "reth-payload-primitives 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-trie-common 1.8.2", + "serde", + "thiserror 2.0.17", "tokio", ] [[package]] name = "reth-engine-service" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "futures", "pin-project", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", + "reth-consensus 1.8.2", + "reth-engine-primitives 1.8.2", "reth-engine-tree", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-ethereum-primitives 1.8.2", + "reth-evm 1.8.2", "reth-network-p2p", "reth-node-types", - "reth-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-payload-builder 1.8.2", "reth-provider", "reth-prune", "reth-stages-api", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "thiserror 2.0.16", + "reth-tasks 1.8.2", + "thiserror 2.0.17", ] [[package]] name = "reth-engine-tree" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.18.3", - "alloy-primitives 1.3.1", + "alloy-evm", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-engine", "derive_more", @@ -8416,45 +8449,47 @@ dependencies = [ "mini-moka", "parking_lot", "rayon", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chain-state 1.8.2", + "reth-chainspec 1.8.2", + "reth-consensus 1.8.2", "reth-db", - "reth-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-engine-primitives 1.8.2", + "reth-errors 1.8.2", + "reth-ethereum-primitives 1.8.2", + "reth-evm 1.8.2", + "reth-execution-types 1.8.2", + "reth-metrics 1.8.2", "reth-network-p2p", - "reth-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-payload-builder 1.8.2", + "reth-payload-primitives 1.8.2", + "reth-primitives-traits 1.8.2", "reth-provider", "reth-prune", - "reth-prune-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-revm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-prune-types 1.8.2", + "reth-revm 1.8.2", "reth-stages", "reth-stages-api", "reth-static-file", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-tasks 1.8.2", "reth-tracing", - "reth-trie 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-trie 1.8.2", "reth-trie-db", "reth-trie-parallel", - "reth-trie-sparse 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-trie-sparse 1.8.2", "reth-trie-sparse-parallel", - "revm 28.0.1", + "revm", "revm-primitives", "schnellru", - "thiserror 2.0.16", + "smallvec", + "thiserror 2.0.17", "tokio", "tracing", ] [[package]] name = "reth-engine-util" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-rpc-types-engine", @@ -8462,16 +8497,16 @@ dependencies = [ "futures", "itertools 0.14.0", "pin-project", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", + "reth-engine-primitives 1.8.2", "reth-engine-tree", - "reth-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-fs-util 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-revm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-errors 1.8.2", + "reth-evm 1.8.2", + "reth-fs-util 1.8.2", + "reth-payload-primitives 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-revm 1.8.2", + "reth-storage-api 1.8.2", "serde", "serde_json", "tokio", @@ -8481,103 +8516,101 @@ dependencies = [ [[package]] name = "reth-era" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "ethereum_ssz", "ethereum_ssz_derive", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-ethereum-primitives 1.8.2", "snap", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "reth-era-downloader" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "bytes", "eyre", "futures-util", "reqwest", - "reth-fs-util 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-fs-util 1.8.2", "sha2 0.10.9", "tokio", ] [[package]] name = "reth-era-utils" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", - "alloy-rlp", + "alloy-primitives 1.4.1", "eyre", "futures-util", "reth-db-api", "reth-era", "reth-era-downloader", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", "reth-etl", - "reth-fs-util 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-fs-util 1.8.2", + "reth-primitives-traits 1.8.2", "reth-provider", - "reth-stages-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-stages-types 1.8.2", + "reth-storage-api 1.8.2", "tokio", "tracing", ] [[package]] name = "reth-errors" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-execution-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "thiserror 2.0.16", + "reth-consensus 1.8.1", + "reth-execution-errors 1.8.1", + "reth-storage-errors 1.8.1", + "thiserror 2.0.17", ] [[package]] name = "reth-errors" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-execution-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "thiserror 2.0.16", + "reth-consensus 1.8.2", + "reth-execution-errors 1.8.2", + "reth-storage-errors 1.8.2", + "thiserror 2.0.17", ] [[package]] name = "reth-eth-wire" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-chains", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "bytes", "derive_more", "futures", "pin-project", - "reth-codecs 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-codecs 1.8.2", "reth-ecies", - "reth-eth-wire-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-network-peers 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-eth-wire-types 1.8.2", + "reth-ethereum-forks 1.8.2", + "reth-metrics 1.8.2", + "reth-network-peers 1.8.2", + "reth-primitives-traits 1.8.2", "serde", "snap", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", @@ -8586,54 +8619,54 @@ dependencies = [ [[package]] name = "reth-eth-wire-types" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", "alloy-hardforks", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "bytes", "derive_more", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-codecs-derive 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-chainspec 1.8.1", + "reth-codecs-derive 1.8.1", + "reth-ethereum-primitives 1.8.1", + "reth-primitives-traits 1.8.1", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "reth-eth-wire-types" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", "alloy-hardforks", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "bytes", "derive_more", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-codecs-derive 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", + "reth-codecs-derive 1.8.2", + "reth-ethereum-primitives 1.8.2", + "reth-primitives-traits 1.8.2", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "reth-ethereum-cli" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "clap", "eyre", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", "reth-cli", "reth-cli-commands", "reth-cli-runner", @@ -8643,70 +8676,71 @@ dependencies = [ "reth-node-core", "reth-node-ethereum", "reth-node-metrics", + "reth-rpc-server-types", "reth-tracing", "tracing", ] [[package]] name = "reth-ethereum-consensus" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-consensus-common 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "alloy-primitives 1.4.1", + "reth-chainspec 1.8.2", + "reth-consensus 1.8.2", + "reth-consensus-common 1.8.2", + "reth-execution-types 1.8.2", + "reth-primitives-traits 1.8.2", "tracing", ] [[package]] name = "reth-ethereum-engine-primitives" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-engine", - "reth-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-engine-primitives 1.8.1", + "reth-ethereum-primitives 1.8.1", + "reth-payload-primitives 1.8.1", + "reth-primitives-traits 1.8.1", "serde", "sha2 0.10.9", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "reth-ethereum-engine-primitives" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-engine", - "reth-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-engine-primitives 1.8.2", + "reth-ethereum-primitives 1.8.2", + "reth-payload-primitives 1.8.2", + "reth-primitives-traits 1.8.2", "serde", "sha2 0.10.9", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "reth-ethereum-forks" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-eip2124", "alloy-hardforks", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "auto_impl", "once_cell", "rustc-hash 2.1.1", @@ -8714,12 +8748,12 @@ dependencies = [ [[package]] name = "reth-ethereum-forks" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-eip2124", "alloy-hardforks", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "auto_impl", "once_cell", "rustc-hash 2.1.1", @@ -8727,68 +8761,74 @@ dependencies = [ [[package]] name = "reth-ethereum-payload-builder" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", + "alloy-rlp", "alloy-rpc-types-engine", - "reth-basic-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-basic-payload-builder 1.8.2", + "reth-chainspec 1.8.2", + "reth-consensus-common 1.8.2", + "reth-errors 1.8.2", + "reth-ethereum-primitives 1.8.2", + "reth-evm 1.8.2", "reth-evm-ethereum", - "reth-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-builder-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-validator 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-revm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "revm 28.0.1", + "reth-payload-builder 1.8.2", + "reth-payload-builder-primitives 1.8.2", + "reth-payload-primitives 1.8.2", + "reth-payload-validator 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-revm 1.8.2", + "reth-storage-api 1.8.2", + "reth-transaction-pool 1.8.2", + "revm", "tracing", ] [[package]] name = "reth-ethereum-primitives" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-zstd-compressors 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "alloy-rpc-types-eth", + "alloy-serde", + "reth-primitives-traits 1.8.1", + "reth-zstd-compressors 1.8.1", "serde", "serde_with", ] [[package]] name = "reth-ethereum-primitives" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", + "alloy-rpc-types-eth", + "alloy-serde", "arbitrary", "modular-bitfield", - "reth-codecs 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-zstd-compressors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-codecs 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-zstd-compressors 1.8.2", "serde", "serde_with", ] [[package]] name = "reth-etl" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "rayon", "reth-db-api", @@ -8797,161 +8837,161 @@ dependencies = [ [[package]] name = "reth-evm" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.15.0", - "alloy-primitives 1.3.1", + "alloy-evm", + "alloy-primitives 1.4.1", "auto_impl", "derive_more", "futures-util", - "reth-execution-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "revm 27.1.0", + "reth-execution-errors 1.8.1", + "reth-execution-types 1.8.1", + "reth-primitives-traits 1.8.1", + "reth-storage-api 1.8.1", + "reth-storage-errors 1.8.1", + "reth-trie-common 1.8.1", + "revm", ] [[package]] name = "reth-evm" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.18.3", - "alloy-primitives 1.3.1", + "alloy-evm", + "alloy-primitives 1.4.1", "auto_impl", "derive_more", "futures-util", "metrics", - "reth-execution-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "revm 28.0.1", + "reth-execution-errors 1.8.2", + "reth-execution-types 1.8.2", + "reth-metrics 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-storage-api 1.8.2", + "reth-storage-errors 1.8.2", + "reth-trie-common 1.8.2", + "revm", ] [[package]] name = "reth-evm-ethereum" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.18.3", - "alloy-primitives 1.3.1", + "alloy-evm", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "revm 28.0.1", + "reth-chainspec 1.8.2", + "reth-ethereum-forks 1.8.2", + "reth-ethereum-primitives 1.8.2", + "reth-evm 1.8.2", + "reth-execution-types 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-storage-errors 1.8.2", + "revm", ] [[package]] name = "reth-execution-errors" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-evm 0.15.0", - "alloy-primitives 1.3.1", + "alloy-evm", + "alloy-primitives 1.4.1", "alloy-rlp", "nybbles", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "thiserror 2.0.16", + "reth-storage-errors 1.8.1", + "thiserror 2.0.17", ] [[package]] name = "reth-execution-errors" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "alloy-evm 0.18.3", - "alloy-primitives 1.3.1", + "alloy-evm", + "alloy-primitives 1.4.1", "alloy-rlp", "nybbles", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "thiserror 2.0.16", + "reth-storage-errors 1.8.2", + "thiserror 2.0.17", ] [[package]] name = "reth-execution-types" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.15.0", - "alloy-primitives 1.3.1", + "alloy-evm", + "alloy-primitives 1.4.1", "derive_more", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "revm 27.1.0", + "reth-ethereum-primitives 1.8.1", + "reth-primitives-traits 1.8.1", + "reth-trie-common 1.8.1", + "revm", ] [[package]] name = "reth-execution-types" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.18.3", - "alloy-primitives 1.3.1", + "alloy-evm", + "alloy-primitives 1.4.1", "derive_more", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "revm 28.0.1", + "reth-ethereum-primitives 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-trie-common 1.8.2", + "revm", "serde", "serde_with", ] [[package]] name = "reth-exex" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "eyre", "futures", "itertools 0.14.0", "metrics", "parking_lot", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chain-state 1.8.2", + "reth-chainspec 1.8.2", "reth-config", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-ethereum-primitives 1.8.2", + "reth-evm 1.8.2", "reth-exex-types", - "reth-fs-util 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-fs-util 1.8.2", + "reth-metrics 1.8.2", "reth-node-api", "reth-node-core", - "reth-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-payload-builder 1.8.2", + "reth-primitives-traits 1.8.2", "reth-provider", - "reth-prune-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-revm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-prune-types 1.8.2", + "reth-revm 1.8.2", "reth-stages-api", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-tasks 1.8.2", "reth-tracing", "rmp-serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-util", "tracing", @@ -8959,60 +8999,72 @@ dependencies = [ [[package]] name = "reth-exex-types" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "alloy-primitives 1.4.1", + "reth-chain-state 1.8.2", + "reth-execution-types 1.8.2", + "reth-primitives-traits 1.8.2", "serde", "serde_with", ] [[package]] name = "reth-fs-util" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "reth-fs-util" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", +] + +[[package]] +name = "reth-gas-station" +version = "0.0.1" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" +dependencies = [ + "alloy-primitives 1.4.1", + "alloy-rlp", + "reth-primitives-traits 1.8.2", + "reth-storage-api 1.8.2", + "revm-database", + "thiserror 2.0.17", ] [[package]] name = "reth-invalid-block-hooks" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-debug", "eyre", "futures", - "jsonrpsee 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpsee 0.26.0", "pretty_assertions", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-engine-primitives 1.8.2", + "reth-evm 1.8.2", + "reth-primitives-traits 1.8.2", "reth-provider", - "reth-revm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-revm 1.8.2", "reth-rpc-api", "reth-tracing", - "reth-trie 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-trie 1.8.2", "revm-bytecode", "revm-database", "serde", @@ -9021,17 +9073,17 @@ dependencies = [ [[package]] name = "reth-ipc" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "bytes", "futures", "futures-util", "interprocess", - "jsonrpsee 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpsee 0.26.0", "pin-project", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", @@ -9041,34 +9093,33 @@ dependencies = [ [[package]] name = "reth-libmdbx" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "byteorder", "dashmap 6.1.0", "derive_more", - "indexmap 2.10.0", "parking_lot", "reth-mdbx-sys", "smallvec", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] [[package]] name = "reth-mdbx-sys" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "bindgen 0.70.1", + "bindgen 0.71.1", "cc", ] [[package]] name = "reth-metrics" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "metrics", "metrics-derive", @@ -9076,8 +9127,8 @@ dependencies = [ [[package]] name = "reth-metrics" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "futures", "metrics", @@ -9088,34 +9139,34 @@ dependencies = [ [[package]] name = "reth-net-banlist" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", ] [[package]] name = "reth-net-nat" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "futures-util", "if-addrs", "reqwest", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] [[package]] name = "reth-network" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "aquamarine", "auto_impl", @@ -9129,34 +9180,34 @@ dependencies = [ "pin-project", "rand 0.8.5", "rand 0.9.2", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", + "reth-consensus 1.8.2", "reth-discv4", "reth-discv5", "reth-dns-discovery", "reth-ecies", "reth-eth-wire", - "reth-eth-wire-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-fs-util 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-eth-wire-types 1.8.2", + "reth-ethereum-forks 1.8.2", + "reth-ethereum-primitives 1.8.2", + "reth-fs-util 1.8.2", + "reth-metrics 1.8.2", "reth-net-banlist", "reth-network-api", "reth-network-p2p", - "reth-network-peers 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-network-peers 1.8.2", "reth-network-types", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-primitives-traits 1.8.2", + "reth-storage-api 1.8.2", + "reth-tasks 1.8.2", "reth-tokio-util", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-transaction-pool 1.8.2", "rustc-hash 2.1.1", "schnellru", "secp256k1 0.30.0", "serde", "smallvec", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", @@ -9165,89 +9216,89 @@ dependencies = [ [[package]] name = "reth-network-api" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-admin", "alloy-rpc-types-eth", "auto_impl", "derive_more", "enr", "futures", - "reth-eth-wire-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-eth-wire-types 1.8.2", + "reth-ethereum-forks 1.8.2", "reth-network-p2p", - "reth-network-peers 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-network-peers 1.8.2", "reth-network-types", "reth-tokio-util", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", ] [[package]] name = "reth-network-p2p" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "auto_impl", "derive_more", "futures", "parking_lot", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-eth-wire-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-network-peers 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-consensus 1.8.2", + "reth-eth-wire-types 1.8.2", + "reth-ethereum-primitives 1.8.2", + "reth-network-peers 1.8.2", "reth-network-types", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-primitives-traits 1.8.2", + "reth-storage-errors 1.8.2", "tokio", "tracing", ] [[package]] name = "reth-network-peers" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "secp256k1 0.30.0", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", "url", ] [[package]] name = "reth-network-peers" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "enr", "secp256k1 0.30.0", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "url", ] [[package]] name = "reth-network-types" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-eip2124", "humantime-serde", "reth-net-banlist", - "reth-network-peers 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-network-peers 1.8.2", "serde", "serde_json", "tracing", @@ -9255,53 +9306,53 @@ dependencies = [ [[package]] name = "reth-nippy-jar" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "anyhow", "bincode", "derive_more", "lz4_flex", "memmap2", - "reth-fs-util 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-fs-util 1.8.2", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", "zstd", ] [[package]] name = "reth-node-api" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-rpc-types-engine", "eyre", - "reth-basic-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-basic-payload-builder 1.8.2", + "reth-consensus 1.8.2", "reth-db-api", - "reth-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-engine-primitives 1.8.2", + "reth-evm 1.8.2", "reth-network-api", "reth-node-core", "reth-node-types", - "reth-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-builder-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-payload-builder 1.8.2", + "reth-payload-builder-primitives 1.8.2", + "reth-payload-primitives 1.8.2", "reth-provider", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-tasks 1.8.2", "reth-tokio-util", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-transaction-pool 1.8.2", ] [[package]] name = "reth-node-builder" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-provider", "alloy-rpc-types", "alloy-rpc-types-engine", @@ -9309,27 +9360,27 @@ dependencies = [ "eyre", "fdlimit", "futures", - "jsonrpsee 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpsee 0.26.0", "rayon", - "reth-basic-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-basic-payload-builder 1.8.2", + "reth-chain-state 1.8.2", + "reth-chainspec 1.8.2", "reth-cli-util", "reth-config", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-consensus 1.8.2", "reth-consensus-debug-client", "reth-db", "reth-db-api", "reth-db-common", "reth-downloaders", "reth-engine-local", - "reth-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-engine-primitives 1.8.2", "reth-engine-service", "reth-engine-tree", "reth-engine-util", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-evm 1.8.2", "reth-exex", - "reth-fs-util 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-fs-util 1.8.2", "reth-invalid-block-hooks", "reth-network", "reth-network-api", @@ -9339,8 +9390,8 @@ dependencies = [ "reth-node-ethstats", "reth-node-events", "reth-node-metrics", - "reth-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-payload-builder 1.8.2", + "reth-primitives-traits 1.8.2", "reth-provider", "reth-prune", "reth-rpc", @@ -9351,10 +9402,10 @@ dependencies = [ "reth-rpc-layer", "reth-stages", "reth-static-file", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-tasks 1.8.2", "reth-tokio-util", "reth-tracing", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-transaction-pool 1.8.2", "secp256k1 0.30.0", "serde_json", "tokio", @@ -9364,12 +9415,12 @@ dependencies = [ [[package]] name = "reth-node-core" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "clap", "derive_more", @@ -9378,36 +9429,36 @@ dependencies = [ "futures", "humantime", "rand 0.9.2", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", "reth-cli-util", "reth-config", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-consensus 1.8.2", "reth-db", "reth-discv4", "reth-discv5", "reth-engine-local", - "reth-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-engine-primitives 1.8.2", + "reth-ethereum-forks 1.8.2", "reth-net-nat", "reth-network", "reth-network-p2p", - "reth-network-peers 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-prune-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-network-peers 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-prune-types 1.8.2", "reth-rpc-convert", "reth-rpc-eth-types", "reth-rpc-server-types", - "reth-stages-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-stages-types 1.8.2", + "reth-storage-api 1.8.2", + "reth-storage-errors 1.8.2", "reth-tracing", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-transaction-pool 1.8.2", "secp256k1 0.30.0", "serde", "shellexpand", "strum 0.27.2", - "thiserror 2.0.16", - "toml", + "thiserror 2.0.17", + "toml 0.8.23", "tracing", "url", "vergen", @@ -9416,30 +9467,30 @@ dependencies = [ [[package]] name = "reth-node-ethereum" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-eips", "alloy-network", "alloy-rpc-types-engine", "alloy-rpc-types-eth", "eyre", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", "reth-engine-local", - "reth-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-engine-primitives 1.8.2", "reth-ethereum-consensus", - "reth-ethereum-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-ethereum-engine-primitives 1.8.2", "reth-ethereum-payload-builder", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-ethereum-primitives 1.8.2", + "reth-evm 1.8.2", "reth-evm-ethereum", "reth-network", "reth-node-api", "reth-node-builder", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-payload-primitives 1.8.2", + "reth-primitives-traits 1.8.2", "reth-provider", - "reth-revm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-revm 1.8.2", "reth-rpc", "reth-rpc-api", "reth-rpc-builder", @@ -9447,28 +9498,28 @@ dependencies = [ "reth-rpc-eth-types", "reth-rpc-server-types", "reth-tracing", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "revm 28.0.1", + "reth-transaction-pool 1.8.2", + "revm", "tokio", ] [[package]] name = "reth-node-ethstats" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "chrono", "futures-util", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chain-state 1.8.2", "reth-network-api", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-primitives-traits 1.8.2", + "reth-storage-api 1.8.2", + "reth-transaction-pool 1.8.2", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-tungstenite", @@ -9478,43 +9529,43 @@ dependencies = [ [[package]] name = "reth-node-events" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "derive_more", "futures", "humantime", "pin-project", - "reth-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-engine-primitives 1.8.2", "reth-network-api", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-prune-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-primitives-traits 1.8.2", + "reth-prune-types 1.8.2", "reth-stages", - "reth-static-file-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-static-file-types 1.8.2", + "reth-storage-api 1.8.2", "tokio", "tracing", ] [[package]] name = "reth-node-metrics" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "eyre", "http", - "jsonrpsee-server 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpsee-server 0.26.0", "metrics", "metrics-exporter-prometheus 0.16.2", "metrics-process", "metrics-util 0.19.1", - "procfs", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "procfs 0.17.0", + "reth-metrics 1.8.2", + "reth-tasks 1.8.2", "tikv-jemalloc-ctl", "tokio", "tower 0.5.2", @@ -9523,107 +9574,108 @@ dependencies = [ [[package]] name = "reth-node-types" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", "reth-db-api", - "reth-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-engine-primitives 1.8.2", + "reth-payload-primitives 1.8.2", + "reth-primitives-traits 1.8.2", ] [[package]] name = "reth-optimism-chainspec" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", "alloy-genesis", "alloy-hardforks", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "derive_more", "op-alloy-consensus", "op-alloy-rpc-types", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-ethereum-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-network-peers 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-optimism-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-optimism-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-chainspec 1.8.1", + "reth-ethereum-forks 1.8.1", + "reth-network-peers 1.8.1", + "reth-optimism-forks 1.8.1", + "reth-optimism-primitives 1.8.1", + "reth-primitives-traits 1.8.1", "serde_json", ] [[package]] name = "reth-optimism-chainspec" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", "alloy-genesis", "alloy-hardforks", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "derive_more", "miniz_oxide", "op-alloy-consensus", "op-alloy-rpc-types", "paste", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-network-peers 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", + "reth-ethereum-forks 1.8.2", + "reth-network-peers 1.8.2", + "reth-optimism-forks 1.8.2", + "reth-optimism-primitives 1.8.2", + "reth-primitives-traits 1.8.2", "serde", "serde_json", "tar-no-std", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "reth-optimism-cli" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "clap", "derive_more", "eyre", "futures-util", "op-alloy-consensus", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", "reth-cli", "reth-cli-commands", "reth-cli-runner", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-consensus 1.8.2", "reth-db", "reth-db-api", "reth-db-common", "reth-downloaders", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-fs-util 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-execution-types 1.8.2", + "reth-fs-util 1.8.2", "reth-node-builder", "reth-node-core", "reth-node-events", "reth-node-metrics", - "reth-optimism-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-optimism-chainspec 1.8.2", + "reth-optimism-consensus 1.8.2", + "reth-optimism-evm 1.8.2", "reth-optimism-node", - "reth-optimism-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-optimism-primitives 1.8.2", + "reth-primitives-traits 1.8.2", "reth-provider", "reth-prune", + "reth-rpc-server-types", "reth-stages", "reth-static-file", - "reth-static-file-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-static-file-types 1.8.2", "reth-tracing", "serde", "tokio", @@ -9633,294 +9685,333 @@ dependencies = [ [[package]] name = "reth-optimism-consensus" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-trie", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-consensus-common 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-optimism-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-optimism-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-optimism-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "revm 27.1.0", - "thiserror 2.0.16", + "reth-chainspec 1.8.1", + "reth-consensus 1.8.1", + "reth-consensus-common 1.8.1", + "reth-execution-types 1.8.1", + "reth-optimism-chainspec 1.8.1", + "reth-optimism-forks 1.8.1", + "reth-optimism-primitives 1.8.1", + "reth-primitives-traits 1.8.1", + "reth-storage-api 1.8.1", + "reth-storage-errors 1.8.1", + "reth-trie-common 1.8.1", + "revm", + "thiserror 2.0.17", "tracing", ] [[package]] name = "reth-optimism-consensus" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-trie", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-consensus-common 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "revm 28.0.1", - "thiserror 2.0.16", + "reth-chainspec 1.8.2", + "reth-consensus 1.8.2", + "reth-consensus-common 1.8.2", + "reth-execution-types 1.8.2", + "reth-optimism-chainspec 1.8.2", + "reth-optimism-forks 1.8.2", + "reth-optimism-primitives 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-storage-api 1.8.2", + "reth-storage-errors 1.8.2", + "reth-trie-common 1.8.2", + "revm", + "thiserror 2.0.17", "tracing", ] [[package]] name = "reth-optimism-evm" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.15.0", - "alloy-op-evm 0.15.0", - "alloy-primitives 1.3.1", + "alloy-evm", + "alloy-op-evm", + "alloy-primitives 1.4.1", "op-alloy-consensus", - "op-revm 8.1.0", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-execution-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-optimism-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-optimism-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-optimism-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-optimism-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "revm 27.1.0", - "thiserror 2.0.16", + "op-alloy-rpc-types-engine", + "op-revm", + "reth-chainspec 1.8.1", + "reth-evm 1.8.1", + "reth-execution-errors 1.8.1", + "reth-execution-types 1.8.1", + "reth-optimism-chainspec 1.8.1", + "reth-optimism-consensus 1.8.1", + "reth-optimism-forks 1.8.1", + "reth-optimism-primitives 1.8.1", + "reth-primitives-traits 1.8.1", + "reth-storage-errors 1.8.1", + "revm", + "thiserror 2.0.17", ] [[package]] name = "reth-optimism-evm" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.18.3", - "alloy-op-evm 0.18.3", - "alloy-primitives 1.3.1", + "alloy-evm", + "alloy-op-evm", + "alloy-primitives 1.4.1", "op-alloy-consensus", "op-alloy-rpc-types-engine", - "op-revm 9.0.1", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-execution-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "op-revm", + "reth-chainspec 1.8.2", + "reth-evm 1.8.2", + "reth-execution-errors 1.8.2", + "reth-execution-types 1.8.2", + "reth-optimism-chainspec 1.8.2", + "reth-optimism-consensus 1.8.2", + "reth-optimism-forks 1.8.2", + "reth-optimism-primitives 1.8.2", + "reth-primitives-traits 1.8.2", "reth-rpc-eth-api", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "revm 28.0.1", - "thiserror 2.0.16", + "reth-storage-errors 1.8.2", + "revm", + "thiserror 2.0.17", +] + +[[package]] +name = "reth-optimism-flashblocks" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives 1.4.1", + "alloy-rpc-types-engine", + "alloy-serde", + "brotli", + "eyre", + "futures-util", + "reth-chain-state 1.8.2", + "reth-errors 1.8.2", + "reth-evm 1.8.2", + "reth-execution-types 1.8.2", + "reth-node-api", + "reth-optimism-evm 1.8.2", + "reth-optimism-payload-builder 1.8.2", + "reth-optimism-primitives 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-revm 1.8.2", + "reth-rpc-eth-types", + "reth-storage-api 1.8.2", + "reth-tasks 1.8.2", + "ringbuffer", + "serde", + "serde_json", + "tokio", + "tokio-tungstenite", + "tracing", + "url", ] [[package]] name = "reth-optimism-forks" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-op-hardforks", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "once_cell", - "reth-ethereum-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-ethereum-forks 1.8.1", ] [[package]] name = "reth-optimism-forks" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-op-hardforks", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "once_cell", - "reth-ethereum-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-ethereum-forks 1.8.2", ] [[package]] name = "reth-optimism-node" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "alloy-rpc-types-eth", "clap", "eyre", "op-alloy-consensus", "op-alloy-rpc-types-engine", - "op-revm 9.0.1", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "op-revm", + "reth-chainspec 1.8.2", + "reth-consensus 1.8.2", "reth-engine-local", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-evm 1.8.2", "reth-network", "reth-node-api", "reth-node-builder", "reth-node-core", - "reth-optimism-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-optimism-chainspec 1.8.2", + "reth-optimism-consensus 1.8.2", + "reth-optimism-evm 1.8.2", + "reth-optimism-forks 1.8.2", + "reth-optimism-payload-builder 1.8.2", + "reth-optimism-primitives 1.8.2", "reth-optimism-rpc", "reth-optimism-storage", - "reth-optimism-txpool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-optimism-txpool 1.8.2", + "reth-payload-builder 1.8.2", + "reth-primitives-traits 1.8.2", "reth-provider", "reth-rpc-api", "reth-rpc-engine-api", "reth-rpc-server-types", "reth-tracing", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "revm 28.0.1", + "reth-transaction-pool 1.8.2", + "reth-trie-common 1.8.2", + "revm", "serde", "tokio", + "url", ] [[package]] name = "reth-optimism-payload-builder" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-debug", "alloy-rpc-types-engine", "derive_more", "op-alloy-consensus", "op-alloy-rpc-types-engine", - "reth-basic-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-optimism-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-optimism-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-optimism-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-optimism-txpool 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-payload-builder-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-payload-util 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-payload-validator 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-revm 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "revm 27.1.0", + "reth-basic-payload-builder 1.8.1", + "reth-chain-state 1.8.1", + "reth-chainspec 1.8.1", + "reth-evm 1.8.1", + "reth-execution-types 1.8.1", + "reth-optimism-evm 1.8.1", + "reth-optimism-forks 1.8.1", + "reth-optimism-primitives 1.8.1", + "reth-optimism-txpool 1.8.1", + "reth-payload-builder 1.8.1", + "reth-payload-builder-primitives 1.8.1", + "reth-payload-primitives 1.8.1", + "reth-payload-util 1.8.1", + "reth-payload-validator 1.8.1", + "reth-primitives-traits 1.8.1", + "reth-revm 1.8.1", + "reth-storage-api 1.8.1", + "reth-transaction-pool 1.8.1", + "revm", "serde", "sha2 0.10.9", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] [[package]] name = "reth-optimism-payload-builder" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-debug", "alloy-rpc-types-engine", "derive_more", "op-alloy-consensus", "op-alloy-rpc-types-engine", - "reth-basic-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-txpool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-builder-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-util 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-validator 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-revm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "revm 28.0.1", + "reth-basic-payload-builder 1.8.2", + "reth-chain-state 1.8.2", + "reth-chainspec 1.8.2", + "reth-evm 1.8.2", + "reth-execution-types 1.8.2", + "reth-gas-station", + "reth-optimism-evm 1.8.2", + "reth-optimism-forks 1.8.2", + "reth-optimism-primitives 1.8.2", + "reth-optimism-txpool 1.8.2", + "reth-payload-builder 1.8.2", + "reth-payload-builder-primitives 1.8.2", + "reth-payload-primitives 1.8.2", + "reth-payload-util 1.8.2", + "reth-payload-validator 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-revm 1.8.2", + "reth-storage-api 1.8.2", + "reth-transaction-pool 1.8.2", + "revm", "serde", "sha2 0.10.9", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] [[package]] name = "reth-optimism-primitives" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "op-alloy-consensus", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-primitives-traits 1.8.1", ] [[package]] name = "reth-optimism-primitives" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "arbitrary", "bytes", "modular-bitfield", "op-alloy-consensus", - "reth-codecs 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-zstd-compressors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-codecs 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-zstd-compressors 1.8.2", "serde", "serde_with", ] [[package]] name = "reth-optimism-rpc" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-json-rpc", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-client", "alloy-rpc-types-debug", "alloy-rpc-types-engine", @@ -9930,70 +10021,69 @@ dependencies = [ "async-trait", "derive_more", "eyre", - "jsonrpsee 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpsee-core 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpsee-types 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "futures", + "jsonrpsee 0.26.0", + "jsonrpsee-core 0.26.0", + "jsonrpsee-types 0.26.0", "metrics", "op-alloy-consensus", "op-alloy-network", "op-alloy-rpc-jsonrpsee", "op-alloy-rpc-types", "op-alloy-rpc-types-engine", - "op-revm 9.0.1", + "op-revm", "reqwest", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chain-state 1.8.2", + "reth-chainspec 1.8.2", + "reth-evm 1.8.2", + "reth-metrics 1.8.2", "reth-node-api", "reth-node-builder", - "reth-optimism-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-txpool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-optimism-evm 1.8.2", + "reth-optimism-flashblocks", + "reth-optimism-forks 1.8.2", + "reth-optimism-payload-builder 1.8.2", + "reth-optimism-primitives 1.8.2", + "reth-optimism-txpool 1.8.2", + "reth-primitives-traits 1.8.2", "reth-rpc", "reth-rpc-api", + "reth-rpc-convert", "reth-rpc-engine-api", "reth-rpc-eth-api", "reth-rpc-eth-types", "reth-rpc-server-types", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "revm 28.0.1", + "reth-storage-api 1.8.2", + "reth-tasks 1.8.2", + "reth-transaction-pool 1.8.2", + "revm", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", + "tokio-stream", "tower 0.5.2", "tracing", ] [[package]] name = "reth-optimism-storage" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-db-api", - "reth-node-api", - "reth-optimism-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-provider", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-optimism-primitives 1.8.2", + "reth-storage-api 1.8.2", ] [[package]] name = "reth-optimism-txpool" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-json-rpc", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-client", "alloy-rpc-types-eth", "alloy-serde", @@ -10004,32 +10094,32 @@ dependencies = [ "op-alloy-consensus", "op-alloy-flz", "op-alloy-rpc-types", - "op-revm 8.1.0", + "op-revm", "parking_lot", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-optimism-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-optimism-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-optimism-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "serde", - "thiserror 2.0.16", + "reth-chain-state 1.8.1", + "reth-chainspec 1.8.1", + "reth-metrics 1.8.1", + "reth-optimism-evm 1.8.1", + "reth-optimism-forks 1.8.1", + "reth-optimism-primitives 1.8.1", + "reth-primitives-traits 1.8.1", + "reth-storage-api 1.8.1", + "reth-transaction-pool 1.8.1", + "serde", + "thiserror 2.0.17", "tokio", "tracing", ] [[package]] name = "reth-optimism-txpool" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-json-rpc", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-client", "alloy-rpc-types-eth", "alloy-serde", @@ -10040,38 +10130,39 @@ dependencies = [ "op-alloy-consensus", "op-alloy-flz", "op-alloy-rpc-types", - "op-revm 9.0.1", + "op-revm", "parking_lot", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "serde", - "thiserror 2.0.16", + "reth-chain-state 1.8.2", + "reth-chainspec 1.8.2", + "reth-metrics 1.8.2", + "reth-optimism-evm 1.8.2", + "reth-optimism-forks 1.8.2", + "reth-optimism-primitives 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-storage-api 1.8.2", + "reth-transaction-pool 1.8.2", + "serde", + "thiserror 2.0.17", "tokio", "tracing", ] [[package]] name = "reth-payload-builder" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", + "alloy-primitives 1.4.1", "alloy-rpc-types", "futures-util", "metrics", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-ethereum-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-payload-builder-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-chain-state 1.8.1", + "reth-ethereum-engine-primitives 1.8.1", + "reth-metrics 1.8.1", + "reth-payload-builder-primitives 1.8.1", + "reth-payload-primitives 1.8.1", + "reth-primitives-traits 1.8.1", "tokio", "tokio-stream", "tracing", @@ -10079,20 +10170,20 @@ dependencies = [ [[package]] name = "reth-payload-builder" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types", "futures-util", "metrics", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-builder-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chain-state 1.8.2", + "reth-ethereum-engine-primitives 1.8.2", + "reth-metrics 1.8.2", + "reth-payload-builder-primitives 1.8.2", + "reth-payload-primitives 1.8.2", + "reth-primitives-traits 1.8.2", "tokio", "tokio-stream", "tracing", @@ -10100,11 +10191,11 @@ dependencies = [ [[package]] name = "reth-payload-builder-primitives" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "pin-project", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-payload-primitives 1.8.1", "tokio", "tokio-stream", "tracing", @@ -10112,11 +10203,11 @@ dependencies = [ [[package]] name = "reth-payload-builder-primitives" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "pin-project", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-payload-primitives 1.8.2", "tokio", "tokio-stream", "tracing", @@ -10124,105 +10215,107 @@ dependencies = [ [[package]] name = "reth-payload-primitives" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "auto_impl", + "either", "op-alloy-rpc-types-engine", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-chain-state 1.8.1", + "reth-chainspec 1.8.1", + "reth-errors 1.8.1", + "reth-primitives-traits 1.8.1", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", ] [[package]] name = "reth-payload-primitives" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "auto_impl", + "either", "op-alloy-rpc-types-engine", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chain-state 1.8.2", + "reth-chainspec 1.8.2", + "reth-errors 1.8.2", + "reth-primitives-traits 1.8.2", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", ] [[package]] name = "reth-payload-util" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "alloy-primitives 1.4.1", + "reth-transaction-pool 1.8.1", ] [[package]] name = "reth-payload-util" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "alloy-primitives 1.4.1", + "reth-transaction-pool 1.8.2", ] [[package]] name = "reth-payload-validator" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-rpc-types-engine", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-primitives-traits 1.8.1", ] [[package]] name = "reth-payload-validator" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-rpc-types-engine", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-primitives-traits 1.8.2", ] [[package]] name = "reth-primitives" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "c-kzg", "once_cell", - "reth-ethereum-forks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-static-file-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-ethereum-forks 1.8.2", + "reth-ethereum-primitives 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-static-file-types 1.8.2", ] [[package]] name = "reth-primitives-traits" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-genesis", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-eth", "alloy-trie", @@ -10231,25 +10324,25 @@ dependencies = [ "derive_more", "once_cell", "op-alloy-consensus", - "reth-codecs 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-codecs 1.8.1", "revm-bytecode", "revm-primitives", "revm-state", "secp256k1 0.30.0", "serde", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "reth-primitives-traits" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-genesis", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-eth", "alloy-trie", @@ -10264,24 +10357,24 @@ dependencies = [ "proptest", "proptest-arbitrary-interop", "rayon", - "reth-codecs 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-codecs 1.8.2", "revm-bytecode", "revm-primitives", "revm-state", "secp256k1 0.30.0", "serde", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "reth-provider" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "dashmap 6.1.0", "eyre", @@ -10290,27 +10383,27 @@ dependencies = [ "notify", "parking_lot", "rayon", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-codecs 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chain-state 1.8.2", + "reth-chainspec 1.8.2", + "reth-codecs 1.8.2", "reth-db", "reth-db-api", - "reth-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-fs-util 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-errors 1.8.2", + "reth-ethereum-engine-primitives 1.8.2", + "reth-ethereum-primitives 1.8.2", + "reth-evm 1.8.2", + "reth-execution-types 1.8.2", + "reth-fs-util 1.8.2", + "reth-metrics 1.8.2", "reth-nippy-jar", "reth-node-types", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-prune-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-stages-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-static-file-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-primitives-traits 1.8.2", + "reth-prune-types 1.8.2", + "reth-stages-types 1.8.2", + "reth-static-file-types 1.8.2", + "reth-storage-api 1.8.2", + "reth-storage-errors 1.8.2", + "reth-trie 1.8.2", "reth-trie-db", "revm-database", "revm-state", @@ -10321,70 +10414,70 @@ dependencies = [ [[package]] name = "reth-prune" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "itertools 0.14.0", "metrics", "rayon", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", "reth-config", "reth-db-api", - "reth-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-errors 1.8.2", "reth-exex-types", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-metrics 1.8.2", + "reth-primitives-traits 1.8.2", "reth-provider", - "reth-prune-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-static-file-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-prune-types 1.8.2", + "reth-static-file-types 1.8.2", "reth-tokio-util", "rustc-hash 2.1.1", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] [[package]] name = "reth-prune-types" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "derive_more", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "reth-prune-types" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "arbitrary", "derive_more", "modular-bitfield", - "reth-codecs 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-codecs 1.8.2", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "reth-ress-protocol" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "futures", "reth-eth-wire", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-ethereum-primitives 1.8.2", "reth-network", "reth-network-api", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-storage-errors 1.8.2", "tokio", "tokio-stream", "tracing", @@ -10392,26 +10485,26 @@ dependencies = [ [[package]] name = "reth-ress-provider" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "eyre", "futures", "parking_lot", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chain-state 1.8.2", + "reth-errors 1.8.2", + "reth-ethereum-primitives 1.8.2", + "reth-evm 1.8.2", "reth-node-api", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-primitives-traits 1.8.2", "reth-ress-protocol", - "reth-revm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-revm 1.8.2", + "reth-storage-api 1.8.2", + "reth-tasks 1.8.2", "reth-tokio-util", - "reth-trie 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-trie 1.8.2", "schnellru", "tokio", "tracing", @@ -10419,43 +10512,44 @@ dependencies = [ [[package]] name = "reth-revm" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-primitives 1.3.1", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-trie 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "revm 27.1.0", + "alloy-primitives 1.4.1", + "reth-primitives-traits 1.8.1", + "reth-storage-api 1.8.1", + "reth-storage-errors 1.8.1", + "reth-trie 1.8.1", + "revm", ] [[package]] name = "reth-revm" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "alloy-primitives 1.3.1", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "revm 28.0.1", + "alloy-primitives 1.4.1", + "reth-primitives-traits 1.8.2", + "reth-storage-api 1.8.2", + "reth-storage-errors 1.8.2", + "reth-trie 1.8.2", + "revm", ] [[package]] name = "reth-rpc" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-dyn-abi", "alloy-eips", - "alloy-evm 0.18.3", + "alloy-evm", "alloy-genesis", "alloy-network", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", + "alloy-rpc-client", "alloy-rpc-types", "alloy-rpc-types-admin", "alloy-rpc-types-beacon", @@ -10470,48 +10564,50 @@ dependencies = [ "alloy-signer-local", "async-trait", "derive_more", + "dyn-clone", "futures", "http", "http-body", "hyper", "itertools 0.14.0", - "jsonrpsee 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpsee-types 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpsee 0.26.0", + "jsonrpsee-types 0.26.0", "jsonwebtoken", "parking_lot", "pin-project", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chain-state 1.8.2", + "reth-chainspec 1.8.2", + "reth-consensus 1.8.2", + "reth-consensus-common 1.8.2", + "reth-engine-primitives 1.8.2", + "reth-errors 1.8.2", + "reth-evm 1.8.2", "reth-evm-ethereum", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-execution-types 1.8.2", + "reth-metrics 1.8.2", "reth-network-api", - "reth-network-peers 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-network-peers 1.8.2", "reth-network-types", "reth-node-api", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-revm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-primitives-traits 1.8.2", + "reth-revm 1.8.2", "reth-rpc-api", "reth-rpc-convert", "reth-rpc-engine-api", "reth-rpc-eth-api", "reth-rpc-eth-types", "reth-rpc-server-types", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "revm 28.0.1", + "reth-storage-api 1.8.2", + "reth-tasks 1.8.2", + "reth-transaction-pool 1.8.2", + "reth-trie-common 1.8.2", + "revm", "revm-inspectors", "revm-primitives", "serde", "serde_json", "sha2 0.10.9", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tower 0.5.2", @@ -10521,13 +10617,13 @@ dependencies = [ [[package]] name = "reth-rpc-api" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-eips", "alloy-genesis", "alloy-json-rpc", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types", "alloy-rpc-types-admin", "alloy-rpc-types-anvil", @@ -10539,45 +10635,46 @@ dependencies = [ "alloy-rpc-types-trace", "alloy-rpc-types-txpool", "alloy-serde", - "jsonrpsee 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-network-peers 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "jsonrpsee 0.26.0", + "reth-chain-state 1.8.2", + "reth-engine-primitives 1.8.2", + "reth-network-peers 1.8.2", "reth-rpc-eth-api", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-trie-common 1.8.2", ] [[package]] name = "reth-rpc-builder" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-network", "alloy-provider", + "dyn-clone", "http", - "jsonrpsee 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpsee 0.26.0", "metrics", "pin-project", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chain-state 1.8.2", + "reth-chainspec 1.8.2", + "reth-consensus 1.8.2", + "reth-evm 1.8.2", "reth-ipc", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-metrics 1.8.2", "reth-network-api", "reth-node-core", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-primitives-traits 1.8.2", "reth-rpc", "reth-rpc-api", "reth-rpc-eth-api", "reth-rpc-eth-types", "reth-rpc-layer", "reth-rpc-server-types", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-storage-api 1.8.2", + "reth-tasks 1.8.2", + "reth-transaction-pool 1.8.2", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-util", "tower 0.5.2", @@ -10587,71 +10684,73 @@ dependencies = [ [[package]] name = "reth-rpc-convert" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-json-rpc", "alloy-network", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-eth", "alloy-signer", - "jsonrpsee-types 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "auto_impl", + "dyn-clone", + "jsonrpsee-types 0.26.0", "op-alloy-consensus", "op-alloy-network", "op-alloy-rpc-types", - "op-revm 9.0.1", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-optimism-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "revm-context 9.0.1", - "thiserror 2.0.16", + "op-revm", + "reth-ethereum-primitives 1.8.2", + "reth-evm 1.8.2", + "reth-optimism-primitives 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-storage-api 1.8.2", + "revm-context", + "thiserror 2.0.17", ] [[package]] name = "reth-rpc-engine-api" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "async-trait", - "jsonrpsee-core 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpsee-types 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpsee-core 0.26.0", + "jsonrpsee-types 0.26.0", "metrics", "parking_lot", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-engine-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-builder-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-payload-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", + "reth-engine-primitives 1.8.2", + "reth-metrics 1.8.2", + "reth-payload-builder 1.8.2", + "reth-payload-builder-primitives 1.8.2", + "reth-payload-primitives 1.8.2", + "reth-primitives-traits 1.8.2", "reth-rpc-api", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-storage-api 1.8.2", + "reth-tasks 1.8.2", + "reth-transaction-pool 1.8.2", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] [[package]] name = "reth-rpc-eth-api" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-dyn-abi", "alloy-eips", - "alloy-evm 0.18.3", + "alloy-evm", "alloy-json-rpc", "alloy-network", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-eth", "alloy-rpc-types-mev", @@ -10660,25 +10759,25 @@ dependencies = [ "auto_impl", "dyn-clone", "futures", - "jsonrpsee 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpsee-types 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpsee 0.26.0", + "jsonrpsee-types 0.26.0", "parking_lot", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chain-state 1.8.2", + "reth-chainspec 1.8.2", + "reth-errors 1.8.2", + "reth-evm 1.8.2", "reth-network-api", "reth-node-api", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-revm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-primitives-traits 1.8.2", + "reth-revm 1.8.2", "reth-rpc-convert", "reth-rpc-eth-types", "reth-rpc-server-types", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "revm 28.0.1", + "reth-storage-api 1.8.2", + "reth-tasks 1.8.2", + "reth-transaction-pool 1.8.2", + "reth-trie-common 1.8.2", + "revm", "revm-inspectors", "tokio", "tracing", @@ -10686,43 +10785,46 @@ dependencies = [ [[package]] name = "reth-rpc-eth-types" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.18.3", + "alloy-evm", "alloy-network", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", + "alloy-rpc-client", "alloy-rpc-types-eth", - "alloy-sol-types 1.3.1", + "alloy-sol-types 1.4.1", + "alloy-transport", "derive_more", "futures", "itertools 0.14.0", - "jsonrpsee-core 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpsee-types 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpsee-core 0.26.0", + "jsonrpsee-types 0.26.0", "metrics", "rand 0.9.2", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-revm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reqwest", + "reth-chain-state 1.8.2", + "reth-chainspec 1.8.2", + "reth-errors 1.8.2", + "reth-ethereum-primitives 1.8.2", + "reth-evm 1.8.2", + "reth-execution-types 1.8.2", + "reth-metrics 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-revm 1.8.2", "reth-rpc-convert", "reth-rpc-server-types", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-transaction-pool 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "revm 28.0.1", + "reth-storage-api 1.8.2", + "reth-tasks 1.8.2", + "reth-transaction-pool 1.8.2", + "reth-trie 1.8.2", + "revm", "revm-inspectors", "schnellru", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tracing", @@ -10730,12 +10832,12 @@ dependencies = [ [[package]] name = "reth-rpc-layer" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-rpc-types-engine", "http", - "jsonrpsee-http-client 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpsee-http-client 0.26.0", "pin-project", "tower 0.5.2", "tower-http", @@ -10744,15 +10846,15 @@ dependencies = [ [[package]] name = "reth-rpc-server-types" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", - "jsonrpsee-core 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpsee-types 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "reth-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "jsonrpsee-core 0.26.0", + "jsonrpsee-types 0.26.0", + "reth-errors 1.8.2", "reth-network-api", "serde", "strum 0.27.2", @@ -10760,12 +10862,12 @@ dependencies = [ [[package]] name = "reth-stages" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "bincode", "eyre", "futures-util", @@ -10773,115 +10875,115 @@ dependencies = [ "num-traits", "rayon", "reqwest", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-codecs 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", + "reth-codecs 1.8.2", "reth-config", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-consensus 1.8.2", "reth-db", "reth-db-api", "reth-era", "reth-era-downloader", "reth-era-utils", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-ethereum-primitives 1.8.2", "reth-etl", - "reth-evm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-evm 1.8.2", + "reth-execution-types 1.8.2", "reth-exex", - "reth-fs-util 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-fs-util 1.8.2", "reth-network-p2p", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-primitives-traits 1.8.2", "reth-provider", "reth-prune", - "reth-prune-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-revm 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-prune-types 1.8.2", + "reth-revm 1.8.2", "reth-stages-api", - "reth-static-file-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-static-file-types 1.8.2", + "reth-storage-errors 1.8.2", "reth-testing-utils", - "reth-trie 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-trie 1.8.2", "reth-trie-db", "tempfile", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] [[package]] name = "reth-stages-api" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "aquamarine", "auto_impl", "futures-util", "metrics", - "reth-consensus 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-consensus 1.8.2", + "reth-errors 1.8.2", + "reth-metrics 1.8.2", "reth-network-p2p", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-primitives-traits 1.8.2", "reth-provider", "reth-prune", - "reth-stages-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-stages-types 1.8.2", "reth-static-file", - "reth-static-file-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-static-file-types 1.8.2", "reth-tokio-util", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] [[package]] name = "reth-stages-types" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-primitives 1.3.1", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "alloy-primitives 1.4.1", + "reth-trie-common 1.8.1", ] [[package]] name = "reth-stages-types" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "arbitrary", "bytes", "modular-bitfield", - "reth-codecs 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-codecs 1.8.2", + "reth-trie-common 1.8.2", "serde", ] [[package]] name = "reth-static-file" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "parking_lot", "rayon", - "reth-codecs 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-codecs 1.8.2", "reth-db-api", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-primitives-traits 1.8.2", "reth-provider", - "reth-prune-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-stages-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-static-file-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-prune-types 1.8.2", + "reth-stages-types 1.8.2", + "reth-static-file-types 1.8.2", + "reth-storage-errors 1.8.2", "reth-tokio-util", "tracing", ] [[package]] name = "reth-static-file-types" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "derive_more", "serde", "strum 0.27.2", @@ -10889,10 +10991,10 @@ dependencies = [ [[package]] name = "reth-static-file-types" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "clap", "derive_more", "serde", @@ -10901,92 +11003,92 @@ dependencies = [ [[package]] name = "reth-storage-api" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "auto_impl", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-db-models 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-prune-types 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-stages-types 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-chainspec 1.8.1", + "reth-db-models 1.8.1", + "reth-ethereum-primitives 1.8.1", + "reth-execution-types 1.8.1", + "reth-primitives-traits 1.8.1", + "reth-prune-types 1.8.1", + "reth-stages-types 1.8.1", + "reth-storage-errors 1.8.1", + "reth-trie-common 1.8.1", "revm-database", ] [[package]] name = "reth-storage-api" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "auto_impl", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-chainspec 1.8.2", "reth-db-api", - "reth-db-models 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-prune-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-stages-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-db-models 1.8.2", + "reth-ethereum-primitives 1.8.2", + "reth-execution-types 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-prune-types 1.8.2", + "reth-stages-types 1.8.2", + "reth-storage-errors 1.8.2", + "reth-trie-common 1.8.2", "revm-database", ] [[package]] name = "reth-storage-errors" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "derive_more", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-prune-types 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-static-file-types 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-primitives-traits 1.8.1", + "reth-prune-types 1.8.1", + "reth-static-file-types 1.8.1", "revm-database-interface", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "reth-storage-errors" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "derive_more", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-prune-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-static-file-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-primitives-traits 1.8.2", + "reth-prune-types 1.8.2", + "reth-static-file-types 1.8.2", "revm-database-interface", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "reth-tasks" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "auto_impl", "dyn-clone", "futures-util", "metrics", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "thiserror 2.0.16", + "reth-metrics 1.8.1", + "thiserror 2.0.17", "tokio", "tracing", "tracing-futures", @@ -10994,8 +11096,8 @@ dependencies = [ [[package]] name = "reth-tasks" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "auto_impl", "dyn-clone", @@ -11003,8 +11105,8 @@ dependencies = [ "metrics", "pin-project", "rayon", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "thiserror 2.0.16", + "reth-metrics 1.8.2", + "thiserror 2.0.17", "tokio", "tracing", "tracing-futures", @@ -11012,24 +11114,24 @@ dependencies = [ [[package]] name = "reth-testing-utils" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-genesis", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "rand 0.8.5", "rand 0.9.2", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-ethereum-primitives 1.8.2", + "reth-primitives-traits 1.8.2", "secp256k1 0.30.0", ] [[package]] name = "reth-tokio-util" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "tokio", "tokio-stream", @@ -11038,8 +11140,8 @@ dependencies = [ [[package]] name = "reth-tracing" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "clap", "eyre", @@ -11048,13 +11150,13 @@ dependencies = [ "tracing-appender", "tracing-journald", "tracing-logfmt", - "tracing-subscriber 0.3.19", + "tracing-subscriber 0.3.20", ] [[package]] name = "reth-tracing-otlp" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "opentelemetry 0.29.1", "opentelemetry-otlp 0.29.0", @@ -11062,40 +11164,43 @@ dependencies = [ "opentelemetry_sdk 0.29.0", "tracing", "tracing-opentelemetry 0.30.0", - "tracing-subscriber 0.3.19", + "tracing-subscriber 0.3.20", ] [[package]] name = "reth-transaction-pool" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "aquamarine", "auto_impl", - "bitflags 2.9.2", + "bitflags 2.10.0", "futures-util", "metrics", "parking_lot", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-eth-wire-types 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-fs-util 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "revm-interpreter 23.0.2", + "pin-project", + "reth-chain-state 1.8.1", + "reth-chainspec 1.8.1", + "reth-eth-wire-types 1.8.1", + "reth-ethereum-primitives 1.8.1", + "reth-execution-types 1.8.1", + "reth-fs-util 1.8.1", + "reth-metrics 1.8.1", + "reth-primitives-traits 1.8.1", + "reth-storage-api 1.8.1", + "reth-tasks 1.8.1", + "revm-interpreter", "revm-primitives", "rustc-hash 2.1.1", "schnellru", + "serde", + "serde_json", "smallvec", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tracing", @@ -11103,40 +11208,42 @@ dependencies = [ [[package]] name = "reth-transaction-pool" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "aquamarine", "auto_impl", - "bitflags 2.9.2", + "bitflags 2.10.0", "futures-util", "metrics", "parking_lot", "paste", "pin-project", "rand 0.9.2", - "reth-chain-state 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-chainspec 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-eth-wire-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-ethereum-primitives 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-execution-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-fs-util 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-api 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-tasks 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "revm-interpreter 23.0.2", + "reth-chain-state 1.8.2", + "reth-chainspec 1.8.2", + "reth-eth-wire-types 1.8.2", + "reth-ethereum-primitives 1.8.2", + "reth-execution-types 1.8.2", + "reth-fs-util 1.8.2", + "reth-gas-station", + "reth-metrics 1.8.2", + "reth-optimism-primitives 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-storage-api 1.8.2", + "reth-tasks 1.8.2", + "revm-interpreter", "revm-primitives", "rustc-hash 2.1.1", "schnellru", "serde", "serde_json", "smallvec", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tracing", @@ -11144,46 +11251,46 @@ dependencies = [ [[package]] name = "reth-trie" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-trie", "auto_impl", "itertools 0.14.0", - "reth-execution-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-stages-types 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-trie-sparse 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-execution-errors 1.8.1", + "reth-primitives-traits 1.8.1", + "reth-stages-types 1.8.1", + "reth-storage-errors 1.8.1", + "reth-trie-common 1.8.1", + "reth-trie-sparse 1.8.1", "revm-database", "tracing", ] [[package]] name = "reth-trie" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-trie", "auto_impl", "itertools 0.14.0", "metrics", - "reth-execution-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-stages-types 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie-sparse 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-execution-errors 1.8.2", + "reth-metrics 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-stages-types 1.8.2", + "reth-storage-errors 1.8.2", + "reth-trie-common 1.8.2", + "reth-trie-sparse 1.8.2", "revm-database", "tracing", "triehash", @@ -11191,28 +11298,28 @@ dependencies = [ [[package]] name = "reth-trie-common" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-trie", "derive_more", "itertools 0.14.0", "nybbles", "rayon", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-primitives-traits 1.8.1", "revm-database", ] [[package]] name = "reth-trie-common" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-eth", "alloy-serde", @@ -11225,8 +11332,8 @@ dependencies = [ "nybbles", "plain_hasher", "rayon", - "reth-codecs 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-codecs 1.8.2", + "reth-primitives-traits 1.8.2", "revm-database", "serde", "serde_with", @@ -11234,154 +11341,133 @@ dependencies = [ [[package]] name = "reth-trie-db" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "reth-db-api", - "reth-execution-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-execution-errors 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-trie 1.8.2", "tracing", ] [[package]] name = "reth-trie-parallel" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "derive_more", "itertools 0.14.0", "metrics", "rayon", "reth-db-api", - "reth-execution-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-execution-errors 1.8.2", + "reth-metrics 1.8.2", "reth-provider", - "reth-storage-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-storage-errors 1.8.2", + "reth-trie 1.8.2", + "reth-trie-common 1.8.2", "reth-trie-db", - "reth-trie-sparse 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "thiserror 2.0.16", + "reth-trie-sparse 1.8.2", + "thiserror 2.0.17", "tokio", "tracing", ] [[package]] name = "reth-trie-sparse" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-trie", "auto_impl", - "reth-execution-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-execution-errors 1.8.1", + "reth-primitives-traits 1.8.1", + "reth-trie-common 1.8.1", "smallvec", "tracing", ] [[package]] name = "reth-trie-sparse" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-trie", "auto_impl", "metrics", "rayon", - "reth-execution-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-primitives-traits 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-execution-errors 1.8.2", + "reth-metrics 1.8.2", + "reth-primitives-traits 1.8.2", + "reth-trie-common 1.8.2", "smallvec", "tracing", ] [[package]] name = "reth-trie-sparse-parallel" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-trie", "metrics", "rayon", - "reth-execution-errors 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-metrics 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie-common 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", - "reth-trie-sparse 1.6.0 (git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628)", + "reth-execution-errors 1.8.2", + "reth-metrics 1.8.2", + "reth-trie-common 1.8.2", + "reth-trie-sparse 1.8.2", "smallvec", "tracing", ] [[package]] name = "reth-zstd-compressors" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.6.0#d8451e54e7267f9f1634118d6d279b2216f7e2bb" +version = "1.8.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "zstd", ] [[package]] name = "reth-zstd-compressors" -version = "1.6.0" -source = "git+https://github.com/paradigmxyz/reth?rev=0fa93840e8f48f97c68ea888dab86b2c7cf49628#0fa93840e8f48f97c68ea888dab86b2c7cf49628" +version = "1.8.2" +source = "git+https://github.com/lightlink-network/reth?branch=feat%2Fgasless-2#3921005ac119316d9939c940b75440ade9b78e78" dependencies = [ "zstd", ] [[package]] name = "revm" -version = "27.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6bf82101a1ad8a2b637363a37aef27f88b4efc8a6e24c72bf5f64923dc5532" -dependencies = [ - "revm-bytecode", - "revm-context 8.0.4", - "revm-context-interface 9.0.0", - "revm-database", - "revm-database-interface", - "revm-handler 8.1.0", - "revm-inspector 8.1.0", - "revm-interpreter 24.0.0", - "revm-precompile 25.0.0", - "revm-primitives", - "revm-state", -] - -[[package]] -name = "revm" -version = "28.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee5d3f7d031e90ab47c7488061bdc4875abc4e9dcea6c18f5dee09732d0436fb" +version = "29.0.1" +source = "git+https://github.com/lightlink-network/revm?branch=feat%2Fgasless-2#960cbd6ceb0a2dbc5db8959a2a289ea42d94eb57" dependencies = [ "revm-bytecode", - "revm-context 9.0.1", - "revm-context-interface 10.0.1", + "revm-context", + "revm-context-interface", "revm-database", "revm-database-interface", - "revm-handler 9.0.1", - "revm-inspector 9.1.0", - "revm-interpreter 25.0.1", - "revm-precompile 26.0.1", + "revm-handler", + "revm-inspector", + "revm-interpreter", + "revm-precompile", "revm-primitives", "revm-state", ] [[package]] name = "revm-bytecode" -version = "6.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d800e6c2119457ded5b0af71634eb2468040bf97de468eee5a730272a106da0" +version = "6.2.2" +source = "git+https://github.com/lightlink-network/revm?branch=feat%2Fgasless-2#960cbd6ceb0a2dbc5db8959a2a289ea42d94eb57" dependencies = [ "bitvec", "phf", @@ -11391,31 +11477,14 @@ dependencies = [ [[package]] name = "revm-context" -version = "8.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cd508416a35a4d8a9feaf5ccd06ac6d6661cd31ee2dc0252f9f7316455d71f9" -dependencies = [ - "cfg-if", - "derive-where", - "revm-bytecode", - "revm-context-interface 9.0.0", - "revm-database-interface", - "revm-primitives", - "revm-state", - "serde", -] - -[[package]] -name = "revm-context" -version = "9.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c63485b4d1b0e67f342f9a8c0e9f78b6b5f1750863a39bdf6ceabdbaaf4aed1" +version = "9.1.0" +source = "git+https://github.com/lightlink-network/revm?branch=feat%2Fgasless-2#960cbd6ceb0a2dbc5db8959a2a289ea42d94eb57" dependencies = [ "bitvec", "cfg-if", "derive-where", "revm-bytecode", - "revm-context-interface 10.0.1", + "revm-context-interface", "revm-database-interface", "revm-primitives", "revm-state", @@ -11424,41 +11493,8 @@ dependencies = [ [[package]] name = "revm-context-interface" -version = "8.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a303a93102fceccec628265efd550ce49f2817b38ac3a492c53f7d524f18a1ca" -dependencies = [ - "alloy-eip2930", - "alloy-eip7702", - "auto_impl", - "either", - "revm-database-interface", - "revm-primitives", - "revm-state", - "serde", -] - -[[package]] -name = "revm-context-interface" -version = "9.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc90302642d21c8f93e0876e201f3c5f7913c4fcb66fb465b0fd7b707dfe1c79" -dependencies = [ - "alloy-eip2930", - "alloy-eip7702", - "auto_impl", - "either", - "revm-database-interface", - "revm-primitives", - "revm-state", - "serde", -] - -[[package]] -name = "revm-context-interface" -version = "10.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "550cb8b9465e00bdb0a384922b69f864c5bcc228bed19c8ecbfa69fff2256382" +version = "10.2.0" +source = "git+https://github.com/lightlink-network/revm?branch=feat%2Fgasless-2#960cbd6ceb0a2dbc5db8959a2a289ea42d94eb57" dependencies = [ "alloy-eip2930", "alloy-eip7702", @@ -11472,9 +11508,8 @@ dependencies = [ [[package]] name = "revm-database" -version = "7.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40000c7d917c865f6c232a78581b78e70c43f52db17282bd1b52d4f0565bc8a2" +version = "7.0.5" +source = "git+https://github.com/lightlink-network/revm?branch=feat%2Fgasless-2#960cbd6ceb0a2dbc5db8959a2a289ea42d94eb57" dependencies = [ "alloy-eips", "revm-bytecode", @@ -11486,9 +11521,8 @@ dependencies = [ [[package]] name = "revm-database-interface" -version = "7.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4ccea7a168cba1196b1e57dd3e22c36047208c135f600f8e58cbe7d49957dba" +version = "7.0.5" +source = "git+https://github.com/lightlink-network/revm?branch=feat%2Fgasless-2#960cbd6ceb0a2dbc5db8959a2a289ea42d94eb57" dependencies = [ "auto_impl", "either", @@ -11499,37 +11533,17 @@ dependencies = [ [[package]] name = "revm-handler" -version = "8.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1529c8050e663be64010e80ec92bf480315d21b1f2dbf65540028653a621b27d" -dependencies = [ - "auto_impl", - "derive-where", - "revm-bytecode", - "revm-context 8.0.4", - "revm-context-interface 9.0.0", - "revm-database-interface", - "revm-interpreter 24.0.0", - "revm-precompile 25.0.0", - "revm-primitives", - "revm-state", - "serde", -] - -[[package]] -name = "revm-handler" -version = "9.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cb09d07e6799823ce5a344f1604236b53fe1a92bacd7122c0b16286f92254c2" +version = "10.0.1" +source = "git+https://github.com/lightlink-network/revm?branch=feat%2Fgasless-2#960cbd6ceb0a2dbc5db8959a2a289ea42d94eb57" dependencies = [ "auto_impl", "derive-where", "revm-bytecode", - "revm-context 9.0.1", - "revm-context-interface 10.0.1", + "revm-context", + "revm-context-interface", "revm-database-interface", - "revm-interpreter 25.0.1", - "revm-precompile 26.0.1", + "revm-interpreter", + "revm-precompile", "revm-primitives", "revm-state", "serde", @@ -11537,34 +11551,15 @@ dependencies = [ [[package]] name = "revm-inspector" -version = "8.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f78db140e332489094ef314eaeb0bd1849d6d01172c113ab0eb6ea8ab9372926" -dependencies = [ - "auto_impl", - "either", - "revm-context 8.0.4", - "revm-database-interface", - "revm-handler 8.1.0", - "revm-interpreter 24.0.0", - "revm-primitives", - "revm-state", - "serde", - "serde_json", -] - -[[package]] -name = "revm-inspector" -version = "9.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2770c0d7e9f4f23660dc0b8b954b7a1eee8989ec97f936ebce366c78b6d7b915" +version = "10.0.1" +source = "git+https://github.com/lightlink-network/revm?branch=feat%2Fgasless-2#960cbd6ceb0a2dbc5db8959a2a289ea42d94eb57" dependencies = [ "auto_impl", "either", - "revm-context 9.0.1", + "revm-context", "revm-database-interface", - "revm-handler 9.0.1", - "revm-interpreter 25.0.1", + "revm-handler", + "revm-interpreter", "revm-primitives", "revm-state", "serde", @@ -11573,91 +11568,39 @@ dependencies = [ [[package]] name = "revm-inspectors" -version = "0.28.1" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d3f54151c26870f50a3d7e8688e30a0f3578dd57bc69450caa1df11a7713906" +checksum = "de23199c4b6181a6539e4131cf7e31cde4df05e1192bcdce491c34a511241588" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-eth", "alloy-rpc-types-trace", - "alloy-sol-types 1.3.1", + "alloy-sol-types 1.4.1", "anstyle", "boa_engine", "boa_gc", "colorchoice", - "revm 28.0.1", + "revm", "serde", "serde_json", - "thiserror 2.0.16", -] - -[[package]] -name = "revm-interpreter" -version = "23.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95c4a9a1662d10b689b66b536ddc2eb1e89f5debfcabc1a2d7b8417a2fa47cd" -dependencies = [ - "revm-bytecode", - "revm-context-interface 8.0.1", - "revm-primitives", - "serde", -] - -[[package]] -name = "revm-interpreter" -version = "24.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff9d7d9d71e8a33740b277b602165b6e3d25fff091ba3d7b5a8d373bf55f28a7" -dependencies = [ - "revm-bytecode", - "revm-context-interface 9.0.0", - "revm-primitives", - "serde", + "thiserror 2.0.17", ] [[package]] name = "revm-interpreter" -version = "25.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c938c0d4d617c285203cad8aba1cefeec383fcff2fdf94a4469f588ab979b5" +version = "25.0.3" +source = "git+https://github.com/lightlink-network/revm?branch=feat%2Fgasless-2#960cbd6ceb0a2dbc5db8959a2a289ea42d94eb57" dependencies = [ "revm-bytecode", - "revm-context-interface 10.0.1", + "revm-context-interface", "revm-primitives", "serde", ] [[package]] name = "revm-precompile" -version = "25.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cee3f336b83621294b4cfe84d817e3eef6f3d0fce00951973364cc7f860424d" -dependencies = [ - "ark-bls12-381", - "ark-bn254", - "ark-ec", - "ark-ff 0.5.0", - "ark-serialize 0.5.0", - "arrayref", - "aurora-engine-modexp", - "c-kzg", - "cfg-if", - "k256", - "libsecp256k1", - "once_cell", - "p256", - "revm-primitives", - "ripemd", - "rug", - "secp256k1 0.31.1", - "sha2 0.10.9", -] - -[[package]] -name = "revm-precompile" -version = "26.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7bb5e8b92891c5ac9dd8dae157bd1d90aab01973ad4f99d4135d507facc3e7" +version = "27.0.0" +source = "git+https://github.com/lightlink-network/revm?branch=feat%2Fgasless-2#960cbd6ceb0a2dbc5db8959a2a289ea42d94eb57" dependencies = [ "ark-bls12-381", "ark-bn254", @@ -11682,10 +11625,9 @@ dependencies = [ [[package]] name = "revm-primitives" version = "20.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa29d9da06fe03b249b6419b33968ecdf92ad6428e2f012dc57bcd619b5d94e" +source = "git+https://github.com/lightlink-network/revm?branch=feat%2Fgasless-2#960cbd6ceb0a2dbc5db8959a2a289ea42d94eb57" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "num_enum", "once_cell", "serde", @@ -11693,11 +11635,10 @@ dependencies = [ [[package]] name = "revm-state" -version = "7.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d7f39ea56df3bfbb3c81c99b1f028d26f205b6004156baffbf1a4f84b46cfa" +version = "7.0.5" +source = "git+https://github.com/lightlink-network/revm?branch=feat%2Fgasless-2#960cbd6ceb0a2dbc5db8959a2a289ea42d94eb57" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "revm-bytecode", "revm-primitives", "serde", @@ -11805,13 +11746,14 @@ dependencies = [ [[package]] name = "rollup-boost" version = "0.1.0" -source = "git+http://github.com/flashbots/rollup-boost?branch=main#81c0699aeb29d2d0b443e25c1075bafcb1db3705" +source = "git+http://github.com/flashbots/rollup-boost?rev=b86af43969557bee18f17ec1d6bcd3e984f910b2#b86af43969557bee18f17ec1d6bcd3e984f910b2" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "alloy-rpc-types-eth", "alloy-serde", "clap", + "dashmap 6.1.0", "dotenvy", "eyre", "futures", @@ -11820,7 +11762,7 @@ dependencies = [ "hyper", "hyper-rustls", "hyper-util", - "jsonrpsee 0.25.1 (git+https://github.com/paritytech/jsonrpsee?rev=f04afa740e55db60dce20d9839758792f035ffff)", + "jsonrpsee 0.25.1", "metrics", "metrics-derive", "metrics-exporter-prometheus 0.16.2", @@ -11832,13 +11774,13 @@ dependencies = [ "opentelemetry_sdk 0.28.0", "parking_lot", "paste", - "reth-optimism-payload-builder 1.6.0 (git+https://github.com/paradigmxyz/reth?tag=v1.6.0)", + "reth-optimism-payload-builder 1.8.1", "rustls", "serde", "serde_json", "sha2 0.10.9", "testcontainers 0.23.3", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-tungstenite", "tokio-util", @@ -11846,7 +11788,7 @@ dependencies = [ "tower-http", "tracing", "tracing-opentelemetry 0.29.0", - "tracing-subscriber 0.3.19", + "tracing-subscriber 0.3.20", "url", "vergen", "vergen-git2", @@ -11860,9 +11802,9 @@ checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" [[package]] name = "rug" -version = "1.27.0" +version = "1.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4207e8d668e5b8eb574bda8322088ccd0d7782d3d03c7e8d562e82ed82bdcbc3" +checksum = "58ad2e973fe3c3214251a840a621812a4f40468da814b1a3d6947d433c2af11f" dependencies = [ "az", "gmp-mpfr-sys", @@ -11872,14 +11814,15 @@ dependencies = [ [[package]] name = "ruint" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecb38f82477f20c5c3d62ef52d7c4e536e38ea9b73fb570a20c5cae0e14bcf6" +checksum = "a68df0380e5c9d20ce49534f292a36a7514ae21350726efe1865bdb1fa91d278" dependencies = [ "alloy-rlp", "arbitrary", "ark-ff 0.3.0", "ark-ff 0.4.2", + "ark-ff 0.5.0", "bytes", "fastrlp 0.3.1", "fastrlp 0.4.0", @@ -11893,7 +11836,7 @@ dependencies = [ "rand 0.9.2", "rlp", "ruint-macro", - "serde", + "serde_core", "valuable", "zeroize", ] @@ -11904,12 +11847,6 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" -[[package]] -name = "rustc-demangle" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" - [[package]] name = "rustc-hash" version = "1.1.0" @@ -11946,7 +11883,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.26", + "semver 1.0.27", ] [[package]] @@ -11964,7 +11901,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -11973,15 +11910,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.8" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "errno", "libc", - "linux-raw-sys 0.9.4", - "windows-sys 0.60.2", + "linux-raw-sys 0.11.0", + "windows-sys 0.61.2", ] [[package]] @@ -12002,14 +11939,14 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" +checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923" dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.3.0", + "security-framework 3.5.1", ] [[package]] @@ -12023,9 +11960,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" dependencies = [ "web-time", "zeroize", @@ -12046,7 +11983,7 @@ dependencies = [ "rustls-native-certs", "rustls-platform-verifier-android", "rustls-webpki", - "security-framework 3.3.0", + "security-framework 3.5.1", "security-framework-sys", "webpki-root-certs 0.26.11", "windows-sys 0.59.0", @@ -12078,9 +12015,9 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rusty-fork" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" dependencies = [ "fnv", "quick-error", @@ -12111,11 +12048,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -12153,12 +12090,6 @@ dependencies = [ "hashbrown 0.13.2", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" version = "1.2.0" @@ -12227,7 +12158,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -12236,11 +12167,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.3.0" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c" +checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -12249,9 +12180,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ "core-foundation-sys", "libc", @@ -12268,11 +12199,12 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" dependencies = [ "serde", + "serde_core", ] [[package]] @@ -12298,10 +12230,11 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ + "serde_core", "serde_derive", ] @@ -12316,45 +12249,57 @@ dependencies = [ [[package]] name = "serde_bytes" -version = "0.11.17" +version = "0.11.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" +checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" dependencies = [ "serde", + "serde_core", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "serde_json" -version = "1.0.143" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.12.0", "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] name = "serde_path_to_error" -version = "0.1.17" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" dependencies = [ "itoa", "serde", + "serde_core", ] [[package]] @@ -12365,7 +12310,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12377,6 +12322,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" +dependencies = [ + "serde_core", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -12391,19 +12345,18 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.14.0" +version = "3.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" +checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.10.0", + "indexmap 2.12.0", "schemars 0.9.0", "schemars 1.0.4", - "serde", - "serde_derive", + "serde_core", "serde_json", "serde_with_macros", "time", @@ -12411,14 +12364,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.14.0" +version = "3.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" +checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12427,7 +12380,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.12.0", "itoa", "ryu", "serde", @@ -12541,9 +12494,9 @@ dependencies = [ [[package]] name = "signal-hook-mio" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" +checksum = "b75a19a7a740b25bc7944bdee6172368f988763b744e3d4dfe753f6b4ece40cc" dependencies = [ "libc", "mio", @@ -12569,6 +12522,12 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + [[package]] name = "simple_asn1" version = "0.6.3" @@ -12577,7 +12536,7 @@ checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" dependencies = [ "num-bigint", "num-traits", - "thiserror 2.0.16", + "thiserror 2.0.17", "time", ] @@ -12642,12 +12601,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -12684,9 +12643,9 @@ checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a" [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "static_assertions" @@ -12709,7 +12668,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta-derive", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12720,7 +12679,7 @@ checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12751,7 +12710,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12763,7 +12722,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12785,9 +12744,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.106" +version = "2.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" dependencies = [ "proc-macro2", "quote", @@ -12796,26 +12755,26 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4560533fbd6914b94a8fb5cc803ed6801c3455668db3b810702c57612bac9412" +checksum = "ab4e6eed052a117409a1a744c8bda9c3ea6934597cf7419f791cb7d590871c4c" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "syn-solidity" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0b198d366dbec045acfcd97295eb653a7a2b40e4dc764ef1e79aafcad439d3c" +checksum = "ff790eb176cc81bb8936aed0f7b9f14fc4670069a2d371b3e3b0ecce908b2cb3" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12847,7 +12806,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12883,7 +12842,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -12927,7 +12886,7 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac9ee8b664c9f1740cd813fea422116f8ba29997bb7c878d1940424889802897" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.10.0", "log", "num-traits", ] @@ -12963,7 +12922,7 @@ dependencies = [ name = "tdx-quote-provider" version = "0.1.0" dependencies = [ - "axum 0.8.4", + "axum 0.8.6", "clap", "dotenvy", "eyre", @@ -12978,20 +12937,20 @@ dependencies = [ "thiserror 1.0.69", "tokio", "tracing", - "tracing-subscriber 0.3.19", + "tracing-subscriber 0.3.20", ] [[package]] name = "tempfile" -version = "3.21.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", - "rustix 1.0.8", - "windows-sys 0.60.2", + "rustix 1.1.2", + "windows-sys 0.61.2", ] [[package]] @@ -13015,7 +12974,7 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-tar", @@ -13044,7 +13003,7 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-tar", @@ -13069,11 +13028,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.16", + "thiserror-impl 2.0.17", ] [[package]] @@ -13084,18 +13043,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "thiserror-impl" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -13118,9 +13077,9 @@ dependencies = [ [[package]] name = "tikv-jemalloc-ctl" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f21f216790c8df74ce3ab25b534e0718da5a1916719771d3fec23315c99e468b" +checksum = "661f1f6a57b3a36dc9174a2c10f19513b4866816e13425d3e418b11cc37bc24c" dependencies = [ "libc", "paste", @@ -13129,9 +13088,9 @@ dependencies = [ [[package]] name = "tikv-jemalloc-sys" -version = "0.6.0+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7" +version = "0.6.1+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3c60906412afa9c2b5b5a48ca6a5abe5736aec9eb48ad05037a677e52e4e2d" +checksum = "cd8aa5b2ab86a2cefa406d889139c162cbb230092f7d1d7cbc1716405d852a3b" dependencies = [ "cc", "libc", @@ -13139,9 +13098,9 @@ dependencies = [ [[package]] name = "tikv-jemallocator" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cec5ff18518d81584f477e9bfdf957f5bb0979b0bac3af4ca30b5b3ae2d2865" +checksum = "0359b4327f954e0567e69fb191cf1436617748813819c94b8cd4a431422d053a" dependencies = [ "libc", "tikv-jemalloc-sys", @@ -13149,9 +13108,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.41" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", "itoa", @@ -13167,15 +13126,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -13227,33 +13186,30 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.47.1" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "backtrace", "bytes", - "io-uring", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", - "slab", - "socket2 0.6.0", + "socket2 0.6.1", "tokio-macros", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -13268,9 +13224,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ "rustls", "tokio", @@ -13344,9 +13300,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", + "serde_spanned 0.6.9", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", +] + +[[package]] +name = "toml" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" +dependencies = [ + "indexmap 2.12.0", + "serde_core", + "serde_spanned 1.0.3", + "toml_datetime 0.7.3", + "toml_parser", + "toml_writer", + "winnow", ] [[package]] @@ -13358,26 +13329,62 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] + [[package]] name = "toml_edit" version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.12.0", "serde", - "serde_spanned", - "toml_datetime", + "serde_spanned 0.6.9", + "toml_datetime 0.6.11", "toml_write", "winnow", ] +[[package]] +name = "toml_edit" +version = "0.23.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +dependencies = [ + "indexmap 2.12.0", + "toml_datetime 0.7.3", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ + "winnow", +] + [[package]] name = "toml_write" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" +[[package]] +name = "toml_writer" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" + [[package]] name = "tonic" version = "0.12.3" @@ -13437,7 +13444,7 @@ dependencies = [ "futures-core", "futures-util", "hdrhistogram", - "indexmap 2.10.0", + "indexmap 2.12.0", "pin-project-lite", "slab", "sync_wrapper", @@ -13456,7 +13463,7 @@ checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ "async-compression", "base64 0.22.1", - "bitflags 2.9.2", + "bitflags 2.10.0", "bytes", "futures-core", "futures-util", @@ -13512,7 +13519,7 @@ dependencies = [ "crossbeam-channel", "thiserror 1.0.69", "time", - "tracing-subscriber 0.3.19", + "tracing-subscriber 0.3.20", ] [[package]] @@ -13523,7 +13530,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -13554,7 +13561,7 @@ checksum = "fc0b4143302cf1022dac868d521e36e8b27691f72c84b3311750d5188ebba657" dependencies = [ "libc", "tracing-core", - "tracing-subscriber 0.3.19", + "tracing-subscriber 0.3.20", ] [[package]] @@ -13577,7 +13584,7 @@ dependencies = [ "time", "tracing", "tracing-core", - "tracing-subscriber 0.3.19", + "tracing-subscriber 0.3.20", ] [[package]] @@ -13594,7 +13601,7 @@ dependencies = [ "tracing", "tracing-core", "tracing-log", - "tracing-subscriber 0.3.19", + "tracing-subscriber 0.3.20", "web-time", ] @@ -13612,7 +13619,7 @@ dependencies = [ "tracing", "tracing-core", "tracing-log", - "tracing-subscriber 0.3.19", + "tracing-subscriber 0.3.20", "web-time", ] @@ -13637,14 +13644,14 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "regex", + "regex-automata", "serde", "serde_json", "sharded-slab", @@ -13662,7 +13669,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee44f4cef85f88b4dea21c0b1f58320bdf35715cf56d840969487cff00613321" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "ethereum_hashing", "ethereum_ssz", "smallvec", @@ -13675,10 +13682,10 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bee2ea1551f90040ab0e34b6fb7f2fa3bad8acc925837ac654f2c78a13e3089" dependencies = [ - "darling", + "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -13693,9 +13700,9 @@ dependencies = [ [[package]] name = "triomphe" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8f7726da4807b58ea5c96fdc122f80702030edc33b35aff9190a51148ccc85" +checksum = "dd69c5aa8f924c7519d6372789a74eac5b94fb0f8fcf0d4a97eb0bfc3e785f39" [[package]] name = "try-lock" @@ -13752,15 +13759,15 @@ dependencies = [ "rustls", "rustls-pki-types", "sha1", - "thiserror 2.0.16", + "thiserror 2.0.17", "utf-8", ] [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "ucd-trie" @@ -13806,9 +13813,9 @@ checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" [[package]] name = "unicode-segmentation" @@ -13893,9 +13900,9 @@ dependencies = [ [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", @@ -13929,11 +13936,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.18.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f33196643e165781c20a5ead5582283a7dacbb87855d867fbc2df3f81eddc1be" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "js-sys", "serde", "sha1_smol", @@ -14007,7 +14014,7 @@ checksum = "d674d135b4a8c1d7e813e2f8d1c9a58308aee4a680323066025e53132218bd91" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -14045,45 +14052,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.106", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" dependencies = [ "cfg-if", "js-sys", @@ -14094,9 +14088,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -14104,22 +14098,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn 2.0.106", - "wasm-bindgen-backend", + "syn 2.0.108", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" dependencies = [ "unicode-ident", ] @@ -14139,9 +14133,9 @@ dependencies = [ [[package]] name = "wasmtimer" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8d49b5d6c64e8558d9b1b065014426f35c18de636895d24893dbbd329743446" +checksum = "1c598d6b99ea013e35844697fc4670d08339d5cda15588f193c6beedd12f644b" dependencies = [ "futures", "js-sys", @@ -14153,9 +14147,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" dependencies = [ "js-sys", "wasm-bindgen", @@ -14177,14 +14171,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75c7f0ef91146ebfb530314f5f1d24528d7f0767efbfd31dce919275413e393e" dependencies = [ - "webpki-root-certs 1.0.2", + "webpki-root-certs 1.0.3", ] [[package]] name = "webpki-root-certs" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4ffd8df1c57e87c325000a3d6ef93db75279dc3a231125aac571650f22b12a" +checksum = "05d651ec480de84b762e7be71e6efa7461699c19d9e2c272c8d93455f567786e" dependencies = [ "rustls-pki-types", ] @@ -14195,14 +14189,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.2", + "webpki-roots 1.0.3", ] [[package]] name = "webpki-roots" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" +checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" dependencies = [ "rustls-pki-types", ] @@ -14221,9 +14215,9 @@ dependencies = [ [[package]] name = "widestring" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" +checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" [[package]] name = "winapi" @@ -14243,11 +14237,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -14268,25 +14262,27 @@ dependencies = [ [[package]] name = "windows" -version = "0.58.0" +version = "0.61.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ - "windows-core 0.58.0", - "windows-targets 0.52.6", + "windows-collections 0.2.0", + "windows-core 0.61.2", + "windows-future 0.2.1", + "windows-link 0.1.3", + "windows-numerics 0.2.0", ] [[package]] name = "windows" -version = "0.61.3" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" dependencies = [ - "windows-collections", - "windows-core 0.61.2", - "windows-future", - "windows-link", - "windows-numerics", + "windows-collections 0.3.2", + "windows-core 0.62.2", + "windows-future 0.3.2", + "windows-numerics 0.3.1", ] [[package]] @@ -14298,6 +14294,15 @@ dependencies = [ "windows-core 0.61.2", ] +[[package]] +name = "windows-collections" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" +dependencies = [ + "windows-core 0.62.2", +] + [[package]] name = "windows-core" version = "0.57.0" @@ -14312,28 +14317,28 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.58.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement 0.58.0", - "windows-interface 0.58.0", - "windows-result 0.2.0", - "windows-strings 0.1.0", - "windows-targets 0.52.6", + "windows-implement 0.60.2", + "windows-interface 0.59.3", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", ] [[package]] name = "windows-core" -version = "0.61.2" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-implement 0.60.0", - "windows-interface 0.59.1", - "windows-link", - "windows-result 0.3.4", - "windows-strings 0.4.2", + "windows-implement 0.60.2", + "windows-interface 0.59.3", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", ] [[package]] @@ -14343,41 +14348,41 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ "windows-core 0.61.2", - "windows-link", - "windows-threading", + "windows-link 0.1.3", + "windows-threading 0.1.0", ] [[package]] -name = "windows-implement" -version = "0.57.0" +name = "windows-future" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", + "windows-core 0.62.2", + "windows-link 0.2.1", + "windows-threading 0.2.1", ] [[package]] name = "windows-implement" -version = "0.58.0" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "windows-implement" -version = "0.60.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -14388,36 +14393,31 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "windows-interface" -version = "0.58.0" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] -name = "windows-interface" -version = "0.59.1" +name = "windows-link" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] name = "windows-link" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-numerics" @@ -14426,7 +14426,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ "windows-core 0.61.2", - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-numerics" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" +dependencies = [ + "windows-core 0.62.2", + "windows-link 0.2.1", ] [[package]] @@ -14435,7 +14445,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" dependencies = [ - "windows-link", + "windows-link 0.1.3", "windows-result 0.3.4", "windows-strings 0.4.2", ] @@ -14451,39 +14461,38 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.2.0" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-targets 0.52.6", + "windows-link 0.1.3", ] [[package]] name = "windows-result" -version = "0.3.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] name = "windows-strings" -version = "0.1.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows-result 0.2.0", - "windows-targets 0.52.6", + "windows-link 0.1.3", ] [[package]] name = "windows-strings" -version = "0.4.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -14528,7 +14537,16 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.3", + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", ] [[package]] @@ -14579,19 +14597,19 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.3" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows-link", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] @@ -14600,7 +14618,16 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-threading" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" +dependencies = [ + "windows-link 0.2.1", ] [[package]] @@ -14623,9 +14650,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" @@ -14647,9 +14674,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" @@ -14671,9 +14698,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" @@ -14683,9 +14710,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" @@ -14707,9 +14734,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" @@ -14731,9 +14758,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" @@ -14755,9 +14782,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" @@ -14779,15 +14806,15 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "0.7.12" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] @@ -14803,13 +14830,10 @@ dependencies = [ ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.2", -] +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "write16" @@ -14842,7 +14866,7 @@ dependencies = [ "pharos", "rustc_version 0.4.1", "send_wrapper 0.6.0", - "thiserror 2.0.16", + "thiserror 2.0.17", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -14876,12 +14900,12 @@ dependencies = [ [[package]] name = "xattr" -version = "1.5.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af3a19837351dc82ba89f8a125e22a3c475f05aba604acc023d62b2739ae2909" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", - "rustix 1.0.8", + "rustix 1.1.2", ] [[package]] @@ -14922,7 +14946,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", "synstructure 0.13.2", ] @@ -14934,28 +14958,28 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", "synstructure 0.13.2", ] [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -14975,15 +14999,15 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", "synstructure 0.13.2", ] [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" dependencies = [ "zeroize_derive", ] @@ -14996,7 +15020,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -15040,7 +15064,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -15051,7 +15075,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -15074,9 +15098,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.15+zstd.1.5.7" +version = "2.0.16+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index e89709bc0..f97b92873 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace.package] -version = "0.2.0" +version = "0.2.6" edition = "2024" rust-version = "1.86" license = "MIT OR Apache-2.0" @@ -8,7 +8,7 @@ repository = "https://github.com/flashbots/op-rbuilder" exclude = [".github/"] [workspace] -members = [ "crates/op-rbuilder", "crates/tdx-quote-provider"] +members = ["crates/op-rbuilder", "crates/tdx-quote-provider"] default-members = ["crates/op-rbuilder"] resolver = "2" @@ -39,74 +39,78 @@ lto = "fat" codegen-units = 1 incremental = false +[workspace.lints.rust] +unreachable_pub = "warn" + [workspace.dependencies] -reth = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-chain-state = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-cli = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-cli-commands = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-cli-util = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-db = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-db-common = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-errors = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-payload-builder = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-node-api = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-rpc-engine-api = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-node-ethereum = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-trie = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-trie-parallel = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-basic-payload-builder = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-node-core = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-primitives = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-primitives-traits = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-provider = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628", features = [ +reth = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-chain-state = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-cli = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-cli-commands = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-cli-util = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-db = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-db-common = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-errors = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-payload-builder = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-node-api = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-rpc-engine-api = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-node-ethereum = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-trie = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-trie-parallel = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-basic-payload-builder = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-node-core = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-primitives = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-primitives-traits = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-provider = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2", features = [ "test-utils", ] } -reth-chainspec = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-storage-api = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-rpc-api = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-evm = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-evm-ethereum = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-execution-errors = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-exex = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-tasks = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-metrics = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-trie-db = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-payload-primitives = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-transaction-pool = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-execution-types = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-revm = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-payload-builder-primitives = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-payload-util = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-rpc-layer = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-network-peers = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-testing-utils = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-node-builder = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-rpc-eth-types = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-tracing-otlp = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-ipc = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } +reth-chainspec = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-storage-api = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-rpc-api = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-evm = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-evm-ethereum = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-execution-errors = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-exex = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-tasks = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-metrics = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-trie-db = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-payload-primitives = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-transaction-pool = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-execution-types = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-revm = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-payload-builder-primitives = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-payload-util = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-rpc-layer = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-network-peers = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-testing-utils = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-node-builder = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-rpc-eth-types = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-tracing-otlp = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-ipc = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } # reth optimism -reth-optimism-primitives = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-optimism-consensus = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-optimism-cli = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-optimism-forks = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-optimism-evm = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-optimism-node = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-optimism-payload-builder = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-optimism-chainspec = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-optimism-txpool = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628" } -reth-optimism-rpc = { git = "https://github.com/paradigmxyz/reth", rev = "0fa93840e8f48f97c68ea888dab86b2c7cf49628", features = [ +reth-optimism-primitives = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-optimism-consensus = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-optimism-cli = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-optimism-forks = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-optimism-evm = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-optimism-node = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-optimism-payload-builder = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-optimism-chainspec = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-optimism-txpool = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2" } +reth-optimism-rpc = { git = "https://github.com/lightlink-network/reth", branch = "feat/gasless-2", features = [ "client", ] } -revm = { version = "28.0.1", features = [ +revm = { version = "29.0.1", features = [ "std", "secp256k1", "optional_balance_check", + "optional_gasless", ], default-features = false } -revm-inspectors = { version = "0.28.0", default-features = false } -op-revm = { version = "9.0.1", default-features = false } +revm-inspectors = { version = "0.30.0", default-features = false } +op-revm = { version = "10.1.0", default-features = false } ethereum_ssz_derive = "0.9.0" ethereum_ssz = "0.9.0" @@ -114,41 +118,41 @@ ethereum_ssz = "0.9.0" alloy-primitives = { version = "1.3.1", default-features = false } alloy-rlp = "0.3.10" alloy-chains = "0.2.5" -alloy-contract = { version = "1.0.23" } -alloy-evm = { version = "0.18.2", default-features = false } -alloy-provider = { version = "1.0.23", features = [ +alloy-contract = { version = "1.0.37" } +alloy-evm = { version = "0.21.0", default-features = false } +alloy-provider = { version = "1.0.37", features = [ "ipc", "pubsub", "txpool-api", "engine-api", ] } -alloy-pubsub = { version = "1.0.23" } -alloy-eips = { version = "1.0.23" } -alloy-rpc-types = { version = "1.0.23" } -alloy-json-rpc = { version = "1.0.23" } -alloy-transport-http = { version = "1.0.23" } -alloy-network = { version = "1.0.23" } -alloy-network-primitives = { version = "1.0.23" } -alloy-transport = { version = "1.0.23" } -alloy-node-bindings = { version = "1.0.23" } -alloy-consensus = { version = "1.0.23", features = ["kzg"] } -alloy-serde = { version = "1.0.23" } +alloy-pubsub = { version = "1.0.37" } +alloy-eips = { version = "1.0.37" } +alloy-rpc-types = { version = "1.0.37" } +alloy-json-rpc = { version = "1.0.37" } +alloy-transport-http = { version = "1.0.37" } +alloy-network = { version = "1.0.37" } +alloy-network-primitives = { version = "1.0.37" } +alloy-transport = { version = "1.0.37" } +alloy-node-bindings = { version = "1.0.37" } +alloy-consensus = { version = "1.0.37", features = ["kzg"] } +alloy-serde = { version = "1.0.37" } alloy-sol-types = { version = "1.2.1", features = ["json"] } -alloy-rpc-types-beacon = { version = "1.0.23", features = ["ssz"] } -alloy-rpc-types-engine = { version = "1.0.23", features = ["ssz"] } -alloy-rpc-types-eth = { version = "1.0.23" } -alloy-signer-local = { version = "1.0.23" } -alloy-rpc-client = { version = "1.0.23" } -alloy-genesis = { version = "1.0.23" } -alloy-trie = { version = "0.9.0" } +alloy-rpc-types-beacon = { version = "1.0.37", features = ["ssz"] } +alloy-rpc-types-engine = { version = "1.0.37", features = ["ssz"] } +alloy-rpc-types-eth = { version = "1.0.37" } +alloy-signer-local = { version = "1.0.37" } +alloy-rpc-client = { version = "1.0.37" } +alloy-genesis = { version = "1.0.37" } +alloy-trie = { version = "0.9.1" } # optimism -alloy-op-evm = { version = "0.18", default-features = false } -op-alloy-rpc-types = { version = "0.18.12", default-features = false } -op-alloy-rpc-types-engine = { version = "0.18.12", default-features = false } -op-alloy-rpc-jsonrpsee = { version = "0.18.12", default-features = false } -op-alloy-network = { version = "0.18.12", default-features = false } -op-alloy-consensus = { version = "0.18.12", default-features = false } +alloy-op-evm = { version = "0.21.0", default-features = false } +op-alloy-rpc-types = { version = "0.20.0", default-features = false } +op-alloy-rpc-types-engine = { version = "0.20.0", default-features = false } +op-alloy-rpc-jsonrpsee = { version = "0.20.0", default-features = false } +op-alloy-network = { version = "0.20.0", default-features = false } +op-alloy-consensus = { version = "0.20.0", default-features = false } op-alloy-flz = { version = "0.13.1", default-features = false } async-trait = { version = "0.1.83" } @@ -156,9 +160,9 @@ clap = { version = "4.4.3", features = ["derive", "env", "string"] } clap_builder = { version = "4.5.19" } thiserror = { version = "1.0.64" } eyre = { version = "0.6.12" } -jsonrpsee = { version = "0.25.1" } -jsonrpsee-types = { version = "0.25.1" } -jsonrpsee-core = { version = "0.25.1" } +jsonrpsee = { version = "0.26.0" } +jsonrpsee-types = { version = "0.26.0" } +jsonrpsee-core = { version = "0.26.0" } parking_lot = { version = "0.12.3" } tokio = { version = "1.40.0" } auto_impl = { version = "1.2.0" } @@ -172,9 +176,10 @@ tokio-stream = "0.1.16" tokio-util = "0.7.12" url = "2.5.2" warp = "0.3.7" -flate2 = "1.0.35" +flate2 = "1.0.37" prometheus = "0.13.4" ctor = "0.2" +dashmap = "6.1" lazy_static = "1.4.0" tikv-jemallocator = { version = "0.6" } @@ -185,3 +190,18 @@ time = { version = "0.3.36", features = ["macros", "formatting", "parsing"] } vergen = "9.0.4" vergen-git2 = "1.0.5" opentelemetry = { version = "0.29.1", features = ["trace"] } + +[patch.crates-io] +revm = { git = "https://github.com/lightlink-network/revm", branch = "feat/gasless-2", default-features = false, features = [ + "optional_gasless", +] } +revm-primitives = { git = "https://github.com/lightlink-network/revm", branch = "feat/gasless-2" } +revm-interpreter = { git = "https://github.com/lightlink-network/revm", branch = "feat/gasless-2" } +revm-handler = { git = "https://github.com/lightlink-network/revm", branch = "feat/gasless-2" } +revm-context = { git = "https://github.com/lightlink-network/revm", branch = "feat/gasless-2" } +revm-context-interface = { git = "https://github.com/lightlink-network/revm", branch = "feat/gasless-2" } +revm-state = { git = "https://github.com/lightlink-network/revm", branch = "feat/gasless-2" } +revm-database = { git = "https://github.com/lightlink-network/revm", branch = "feat/gasless-2" } +revm-database-interface = { git = "https://github.com/lightlink-network/revm", branch = "feat/gasless-2" } +revm-bytecode = { git = "https://github.com/lightlink-network/revm", branch = "feat/gasless-2" } +revm-inspector = { git = "https://github.com/lightlink-network/revm", branch = "feat/gasless-2" } diff --git a/Dockerfile b/Dockerfile index 5e9258c07..f8ed6d96e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -73,10 +73,40 @@ RUN --mount=type=cache,target=/usr/local/cargo/registry \ --mount=type=cache,target=$SCCACHE_DIR,sharing=locked \ cargo build --release --features="$FEATURES" --package=${RBUILDER_BIN} -# Runtime container for rbuilder -FROM gcr.io/distroless/cc-debian12 AS rbuilder-runtime +# +# Reproducible builder container (deterministic source-date-epoch, no caching, no incremental builds) +# +FROM base AS rbuilder-reproducible ARG RBUILDER_BIN +ARG FEATURES +ARG TARGETPLATFORM + +ARG CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS="-C target-feature=+crt-static -C link-arg=-static-libgcc -C link-arg=-Wl,--build-id=none -C metadata=target --remap-path-prefix=/app=." + +ARG CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUSTFLAGS="-C target-feature=+crt-static -C link-arg=-static-libgcc -C link-arg=-Wl,--build-id=none -C metadata=target --remap-path-prefix=/app=." + WORKDIR /app -COPY --from=rbuilder /app/target/release/${RBUILDER_BIN} /app/rbuilder -ENTRYPOINT ["/app/rbuilder"] +COPY . . +RUN case "$TARGETPLATFORM" in \ + "linux/amd64") ARCH_TAG="x86_64-unknown-linux-gnu" ;; \ + "linux/arm64") ARCH_TAG="aarch64-unknown-linux-gnu" ;; \ + *) \ + echo "Unsupported platform: $TARGETPLATFORM"; \ + exit 1 \ + ;; \ + esac; \ + SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct) \ + RUSTFLAGS="-C target-feature=+crt-static -C link-arg=-static-libgcc -C link-arg=-Wl,--build-id=none -C metadata='' --remap-path-prefix=/app=." \ + CARGO_INCREMENTAL=0 \ + LC_ALL=C \ + TZ=UTC \ + CFLAGS="-D__TIME__=\"\" -D__DATE__=\"\"" \ + CXXFLAGS="-D__TIME__=\"\" -D__DATE__=\"\"" \ + cargo build --release --locked --features="$FEATURES" --package=${RBUILDER_BIN} --target "${ARCH_TAG}" +# Reproducible runtime container for rbuilder +FROM gcr.io/distroless/cc-debian12 AS rbuilder-reproducible-runtime +ARG RBUILDER_BIN +WORKDIR /app +COPY --from=rbuilder-reproducible /app/target/*/release/${RBUILDER_BIN} /app/rbuilder +ENTRYPOINT ["/app/rbuilder"] diff --git a/DockerfileOp b/DockerfileOp new file mode 100644 index 000000000..d3fd04590 --- /dev/null +++ b/DockerfileOp @@ -0,0 +1,67 @@ +FROM rust:1.88 AS chef +WORKDIR /app + +LABEL org.opencontainers.image.source=https://github.com/flashbots/op-rbuilder +LABEL org.opencontainers.image.licenses="MIT OR Apache-2.0" + +RUN apt-get update && \ + apt-get -y upgrade && \ + apt-get install -y --no-install-recommends \ + libclang-dev \ + pkg-config \ + libtss2-dev && \ + rm -rf /var/lib/apt/lists/* && \ + cargo install cargo-chef --locked + +FROM chef AS planner +COPY . . +RUN cargo chef prepare --recipe-path recipe.json + +FROM chef AS builder +COPY --from=planner /app/recipe.json recipe.json + +ARG BUILD_PROFILE=release +ENV BUILD_PROFILE=$BUILD_PROFILE + +ARG RUSTFLAGS="" +ENV RUSTFLAGS="$RUSTFLAGS" + +ARG FEATURES="" +ARG RBUILDER_BIN="op-rbuilder" + +# Optimize Rust compilation for 16-core CI runner +ENV CARGO_INCREMENTAL=0 +ENV RUST_BACKTRACE=1 +ENV CARGO_NET_GIT_FETCH_WITH_CLI=true + +# Use faster linker and configure for high-core builds +ARG TARGETARCH +RUN if [ "$TARGETARCH" = "amd64" ]; then \ + apt-get update && apt-get install -y --no-install-recommends lld && rm -rf /var/lib/apt/lists/* && \ + echo '[target.x86_64-unknown-linux-gnu]\nrustflags = ["-C", "link-arg=-fuse-ld=lld"]' >> /usr/local/cargo/config.toml; \ + fi + +RUN cargo chef cook --profile $BUILD_PROFILE --recipe-path recipe.json + +COPY . . +RUN CARGO_BUILD_JOBS=16 cargo build --profile $BUILD_PROFILE --bin $RBUILDER_BIN --package $RBUILDER_BIN --features="$FEATURES" && \ + ls -la /app/target/$BUILD_PROFILE/$RBUILDER_BIN && \ + cp /app/target/$BUILD_PROFILE/$RBUILDER_BIN /app/op-rbuilder + +FROM ubuntu:22.04 AS runtime + +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + ca-certificates \ + libssl-dev \ + pkg-config \ + strace && \ + rm -rf /var/lib/apt/lists/* + +WORKDIR /app +COPY --from=builder /app/op-rbuilder /usr/local/bin/op-rbuilder +RUN chmod +x /usr/local/bin/op-rbuilder +COPY LICENSE-* ./ + +EXPOSE 30303 30303/udp 9001 8545 8546 7545 8551 +ENTRYPOINT ["/usr/local/bin/op-rbuilder"] diff --git a/Makefile b/Makefile index 62625a939..0eb0c4ad6 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,26 @@ GIT_TAG ?= $(shell git describe --tags --abbrev=0) FEATURES ?= +# Environment variables for reproducible builds +# Initialize RUSTFLAGS +RUST_BUILD_FLAGS = +# Enable static linking to ensure reproducibility across builds +RUST_BUILD_FLAGS += --C target-feature=+crt-static +# Set the linker to use static libgcc to ensure reproducibility across builds +RUST_BUILD_FLAGS += -C link-arg=-static-libgcc +# Remove build ID from the binary to ensure reproducibility across builds +RUST_BUILD_FLAGS += -C link-arg=-Wl,--build-id=none +# Remove metadata hash from symbol names to ensure reproducible builds +RUST_BUILD_FLAGS += -C metadata='' +# Set timestamp from last git commit for reproducible builds +SOURCE_DATE ?= $(shell git log -1 --pretty=%ct) +# Disable incremental compilation to avoid non-deterministic artifacts +CARGO_INCREMENTAL_VAL = 0 +# Set C locale for consistent string handling and sorting +LOCALE_VAL = C +# Set UTC timezone for consistent time handling across builds +TZ_VAL = UTC + ##@ Help .PHONY: help @@ -31,6 +51,15 @@ build: ## Build (debug version) op-rbuilder: ## Build op-rbuilder (debug version) cargo build -p op-rbuilder --bin op-rbuilder --features "$(FEATURES)" +.PHONY: build-reproducible +build-reproducible: ## Build the reth binary into `target` directory with reproducible builds + SOURCE_DATE_EPOCH=$(SOURCE_DATE) \ + RUSTFLAGS="${RUST_BUILD_FLAGS} --remap-path-prefix $$(pwd)=." \ + CARGO_INCREMENTAL=${CARGO_INCREMENTAL_VAL} \ + LC_ALL=${LOCALE_VAL} \ + TZ=${TZ_VAL} \ + cargo build -p op-rbuilder --bin op-rbuilder --features "$(FEATURES)" --profile "release" --locked --features "$(FEATURES)" --target x86_64-unknown-linux-gnu + .PHONY: tdx-quote-provider tdx-quote-provider: ## Build tdx-quote-provider (debug version) cargo build -p tdx-quote-provider --bin tdx-quote-provider --features "$(FEATURES)" diff --git a/README.md b/README.md index 105db0739..599f360c4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # op-rbuilder -[![CI status](https://github.com/flashbots/op-rbuilder/actions/workflows/checks.yaml/badge.svg)](https://github.com/flashbots/op-rbuilder/actions) +[![CI status](https://github.com/flashbots/op-rbuilder/actions/workflows/op_rbuilder_checks.yaml/badge.svg)](https://github.com/flashbots/op-rbuilder/actions) `op-rbuilder` is a Rust-based block builder designed to build blocks for the Optimism stack. @@ -42,6 +42,22 @@ cargo run -p op-rbuilder --bin op-rbuilder -- node \ --flashblocks.addr 127.0.0.1 # address to bind the ws that provides flashblocks ``` +#### Flashblocks Number Contract + +To enable builder tranctions to the [flashblocks number contract](https://github.com/Uniswap/flashblocks_number_contract) for contracts to integrate with flashblocks onchain, specify the address in the CLI args: + +```bash +cargo run -p op-rbuilder --bin op-rbuilder -- node \ + --chain /path/to/chain-config.json \ + --http \ + --authrpc.port 9551 \ + --authrpc.jwtsecret /path/to/jwt.hex \ + --flashblocks.enabled \ + --flashblocks.number-contract-address 0xFlashblocksNumberAddress +``` + +This will increment the flashblock number before the start of every flashblock and replace the builder tx at the end of the block. + ### Flashtestations To run op-rbuilder with flashtestations: @@ -77,6 +93,12 @@ To enable metrics, set the `--metrics` flag like in [reth](https://reth.rs/run/m To see the full list of op-rbuilder metrics, see [`src/metrics.rs`](./crates/op-rbuilder/src/metrics.rs). +Default `debug` level trace logs can be found at: + +- `~/.cache/op-rbuilder/logs` on Linux +- `~/Library/Caches/op-rbuilder/logs` on macOS +- `%localAppData%/op-rbuilder/logs` on Windows + ## Integration Testing op-rbuilder has an integration test framework that runs the builder against mock engine api payloads and ensures that the builder produces valid blocks. diff --git a/crates/op-rbuilder/Cargo.toml b/crates/op-rbuilder/Cargo.toml index a2bf891e3..c674691c4 100644 --- a/crates/op-rbuilder/Cargo.toml +++ b/crates/op-rbuilder/Cargo.toml @@ -8,6 +8,9 @@ homepage.workspace = true repository.workspace = true default-run = "op-rbuilder" +[lints] +workspace = true + [dependencies] reth.workspace = true reth-optimism-node.workspace = true @@ -59,6 +62,7 @@ alloy-primitives.workspace = true alloy-consensus.workspace = true alloy-contract.workspace = true alloy-eips.workspace = true +alloy-evm.workspace = true alloy-rpc-types-beacon.workspace = true alloy-rpc-types-engine.workspace = true alloy-transport-http.workspace = true @@ -104,6 +108,7 @@ parking_lot.workspace = true url.workspace = true anyhow = "1" opentelemetry = { workspace = true, optional = true } +dashmap.workspace = true tower = "0.5" futures = "0.3" @@ -120,18 +125,22 @@ moka = "0.12" http = "1.0" sha3 = "0.10" hex = "0.4" -ureq = "2.10" +reqwest = "0.12.23" +k256 = "0.13.4" -rollup-boost = { git = "http://github.com/flashbots/rollup-boost", branch = "main" } +rollup-boost = { git = "http://github.com/flashbots/rollup-boost", rev = "b86af43969557bee18f17ec1d6bcd3e984f910b2" } -dashmap = { version = "6.1", optional = true } nanoid = { version = "0.4", optional = true } reth-ipc = { workspace = true, optional = true } tar = { version = "0.4", optional = true } ctor = { version = "0.4.2", optional = true } rlimit = { version = "0.10", optional = true } macros = { path = "src/tests/framework/macros", optional = true } +hyper = { version = "1.7.0", features = ["http1"], optional = true } +hyper-util = { version = "0.1.11", optional = true } +http-body-util = { version = "0.1.3", optional = true } testcontainers = "0.24.0" +dirs-next = "2.0.0" [target.'cfg(unix)'.dependencies] tikv-jemallocator = { version = "0.6", optional = true } @@ -146,12 +155,14 @@ alloy-provider = { workspace = true, default-features = true, features = [ ] } tempfile = "3.8" macros = { path = "src/tests/framework/macros" } -dashmap = { version = "6.1" } nanoid = { version = "0.4" } reth-ipc = { workspace = true } reth-node-builder = { workspace = true, features = ["test-utils"] } ctor = "0.4.2" rlimit = { version = "0.10" } +hyper = { version = "1.7.0", features = ["http1"] } +hyper-util = { version = "0.1.11" } +http-body-util = { version = "0.1.3" } [features] default = ["jemalloc"] @@ -175,7 +186,6 @@ min-debug-logs = ["tracing/release_max_level_debug"] min-trace-logs = ["tracing/release_max_level_trace"] testing = [ - "dashmap", "nanoid", "reth-ipc", "reth-node-builder/test-utils", diff --git a/crates/op-rbuilder/build.rs b/crates/op-rbuilder/build.rs index 3e8c774f9..97acc1fef 100644 --- a/crates/op-rbuilder/build.rs +++ b/crates/op-rbuilder/build.rs @@ -43,6 +43,9 @@ fn main() -> Result<(), Box> { .describe(false, true, None) .dirty(true) .sha(false) + .commit_author_name(true) + .commit_author_email(true) + .commit_message(true) .build()?; emitter.add_instructions(&git_builder)?; @@ -51,6 +54,16 @@ fn main() -> Result<(), Box> { let sha = env::var("VERGEN_GIT_SHA")?; let sha_short = &sha[0..7]; + // Set short SHA + println!("cargo:rustc-env=VERGEN_GIT_SHA_SHORT={}", &sha[..8]); + + let author_name = env::var("VERGEN_GIT_COMMIT_AUTHOR_NAME")?; + let author_email = env::var("VERGEN_GIT_COMMIT_AUTHOR_EMAIL")?; + let author_full = format!("{author_name} <{author_email}>"); + + // Set author full name + println!("cargo:rustc-env=VERGEN_GIT_COMMIT_AUTHOR={author_full}"); + let is_dirty = env::var("VERGEN_GIT_DIRTY")? == "true"; // > git describe --always --tags // if not on a tag: v0.2.0-beta.3-82-g1939939b @@ -59,9 +72,6 @@ fn main() -> Result<(), Box> { let version_suffix = if is_dirty || not_on_tag { "-dev" } else { "" }; println!("cargo:rustc-env=OP_RBUILDER_VERSION_SUFFIX={version_suffix}"); - // Set short SHA - println!("cargo:rustc-env=VERGEN_GIT_SHA_SHORT={}", &sha[..8]); - // Set the build profile let out_dir = env::var("OUT_DIR").unwrap(); let profile = out_dir.rsplit(std::path::MAIN_SEPARATOR).nth(3).unwrap(); @@ -86,6 +96,7 @@ fn main() -> Result<(), Box> { // - The build datetime // - The build features // - The build profile + // - The latest commit message and author // // Example: // @@ -95,6 +106,7 @@ fn main() -> Result<(), Box> { // Build Timestamp: 2023-05-19T01:47:19.815651705Z // Build Features: jemalloc // Build Profile: maxperf + // Latest Commit: 'message' by John Doe // ``` println!("cargo:rustc-env=OP_RBUILDER_LONG_VERSION_0=Version: {pkg_version}{version_suffix}"); println!("cargo:rustc-env=OP_RBUILDER_LONG_VERSION_1=Commit SHA: {sha}"); @@ -107,6 +119,11 @@ fn main() -> Result<(), Box> { env::var("VERGEN_CARGO_FEATURES")? ); println!("cargo:rustc-env=OP_RBUILDER_LONG_VERSION_4=Build Profile: {profile}"); + println!( + "cargo:rustc-env=OP_RBUILDER_LONG_VERSION_5=Latest Commit: '{}' by {}", + env::var("VERGEN_GIT_COMMIT_MESSAGE")?.trim_end(), + author_full + ); // The version information for op-rbuilder formatted for P2P (devp2p). // - The latest version from Cargo.toml diff --git a/crates/op-rbuilder/src/args/mod.rs b/crates/op-rbuilder/src/args/mod.rs index 4188e39cc..a89f3790e 100644 --- a/crates/op-rbuilder/src/args/mod.rs +++ b/crates/op-rbuilder/src/args/mod.rs @@ -78,12 +78,17 @@ impl CliExt for Cli { /// Parses commands and overrides versions fn set_version() -> Self { + let logs_dir = dirs_next::cache_dir() + .map(|root| root.join("op-rbuilder/logs")) + .unwrap() + .into_os_string(); let matches = Cli::command() .version(SHORT_VERSION) .long_version(LONG_VERSION) .about("Block builder designed for the Optimism stack") .author("Flashbots") .name("op-rbuilder") + .mut_arg("log_file_directory", |arg| arg.default_value(logs_dir)) .get_matches(); Cli::from_arg_matches(&matches).expect("Parsing args") } diff --git a/crates/op-rbuilder/src/args/op.rs b/crates/op-rbuilder/src/args/op.rs index 9c1d1fc20..bd860f155 100644 --- a/crates/op-rbuilder/src/args/op.rs +++ b/crates/op-rbuilder/src/args/op.rs @@ -4,7 +4,11 @@ //! clap [Args](clap::Args) for optimism rollup configuration -use crate::{flashtestations::args::FlashtestationsArgs, tx_signer::Signer}; +use crate::{ + flashtestations::args::FlashtestationsArgs, gas_limiter::args::GasLimiterArgs, + tx_signer::Signer, +}; +use alloy_primitives::Address; use anyhow::{Result, anyhow}; use clap::Parser; use reth_optimism_cli::commands::Commands; @@ -60,6 +64,8 @@ pub struct OpRbuilderArgs { pub telemetry: TelemetryArgs, #[command(flatten)] pub flashtestations: FlashtestationsArgs, + #[command(flatten)] + pub gas_limiter: GasLimiterArgs, } impl Default for OpRbuilderArgs { @@ -142,6 +148,24 @@ pub struct FlashblocksArgs { env = "FLASHBLOCK_LEEWAY_TIME" )] pub flashblocks_leeway_time: u64, + + /// Should we calculate state root for each flashblock + #[arg( + long = "flashblocks.calculate-state-root", + default_value = "true", + env = "FLASHBLOCKS_CALCULATE_STATE_ROOT" + )] + pub flashblocks_calculate_state_root: bool, + + /// Flashblocks number contract address + /// + /// This is the address of the contract that will be used to increment the flashblock number. + /// If set a builder tx will be added to the start of every flashblock instead of the regular builder tx. + #[arg( + long = "flashblocks.number-contract-address", + env = "FLASHBLOCK_NUMBER_CONTRACT_ADDRESS" + )] + pub flashblocks_number_contract_address: Option
, } impl Default for FlashblocksArgs { diff --git a/crates/op-rbuilder/src/args/playground.rs b/crates/op-rbuilder/src/args/playground.rs index c4cf2470a..3ef24c1d0 100644 --- a/crates/op-rbuilder/src/args/playground.rs +++ b/crates/op-rbuilder/src/args/playground.rs @@ -50,7 +50,7 @@ use url::{Host, Url}; use super::Cli; -pub struct PlaygroundOptions { +pub(super) struct PlaygroundOptions { /// Sets node.chain in NodeCommand pub chain: Arc, @@ -78,7 +78,7 @@ pub struct PlaygroundOptions { impl PlaygroundOptions { /// Creates a new `PlaygroundOptions` instance with the specified genesis path. - pub fn new(path: &Path) -> Result { + pub(super) fn new(path: &Path) -> Result { if !path.exists() { return Err(eyre!( "Playground data directory {} does not exist", @@ -112,7 +112,7 @@ impl PlaygroundOptions { }) } - pub fn apply(self, cli: Cli) -> Cli { + pub(super) fn apply(self, cli: Cli) -> Cli { let mut cli = cli; let Commands::Node(ref mut node) = cli.command else { // playground defaults are only relevant if running the node commands. diff --git a/crates/op-rbuilder/src/builders/builder_tx.rs b/crates/op-rbuilder/src/builders/builder_tx.rs index 3dcb89848..0cd8d5e8e 100644 --- a/crates/op-rbuilder/src/builders/builder_tx.rs +++ b/crates/op-rbuilder/src/builders/builder_tx.rs @@ -1,32 +1,306 @@ +use alloy_consensus::TxEip1559; +use alloy_eips::{Encodable2718, eip7623::TOTAL_COST_FLOOR_PER_TOKEN}; +use alloy_evm::Database; +use alloy_primitives::{ + Address, B256, Log, TxKind, U256, + map::foldhash::{HashSet, HashSetExt}, +}; +use core::fmt::Debug; +use op_alloy_consensus::OpTypedTransaction; +use op_revm::OpTransactionError; +use reth_evm::{ConfigureEvm, Evm, eth::receipt_builder::ReceiptBuilderCtx}; +use reth_node_api::PayloadBuilderError; use reth_optimism_primitives::OpTransactionSigned; use reth_primitives::Recovered; +use reth_provider::{ProviderError, StateProvider}; +use reth_revm::{State, database::StateProviderDatabase}; +use revm::{ + DatabaseCommit, + context::result::{EVMError, ResultAndState}, +}; +use tracing::warn; -use crate::tx_signer::Signer; +use crate::{ + builders::context::OpPayloadBuilderCtx, primitives::reth::ExecutionInfo, tx_signer::Signer, +}; -pub trait BuilderTx { - fn estimated_builder_tx_gas(&self) -> u64; - fn estimated_builder_tx_da_size(&self) -> Option; - fn signed_builder_tx(&self) -> Result, secp256k1::Error>; +#[derive(Debug, Clone)] +pub struct BuilderTransactionCtx { + pub gas_used: u64, + pub da_size: u64, + pub signed_tx: Recovered, + // whether the transaction should be a top of block or + // bottom of block transaction + pub is_top_of_block: bool, } -// Scaffolding for how to construct the end of block builder transaction -// This will be the regular end of block transaction without the TEE key -#[derive(Clone)] -pub struct StandardBuilderTx { - #[allow(dead_code)] +impl BuilderTransactionCtx { + pub fn set_top_of_block(mut self) -> Self { + self.is_top_of_block = true; + self + } + + pub fn set_bottom_of_block(mut self) -> Self { + self.is_top_of_block = false; + self + } +} + +/// Possible error variants during construction of builder txs. +#[derive(Debug, thiserror::Error)] +pub enum BuilderTransactionError { + /// Builder account load fails to get builder nonce + #[error("failed to load account {0}")] + AccountLoadFailed(Address), + /// Signature signing fails + #[error("failed to sign transaction: {0}")] + SigningError(secp256k1::Error), + /// Invalid tx errors during evm execution. + #[error("invalid transaction error {0}")] + InvalidTransactionError(Box), + /// Unrecoverable error during evm execution. + #[error("evm execution error {0}")] + EvmExecutionError(Box), + /// Any other builder transaction errors. + #[error(transparent)] + Other(Box), +} + +impl From for BuilderTransactionError { + fn from(error: secp256k1::Error) -> Self { + BuilderTransactionError::SigningError(error) + } +} + +impl From> for BuilderTransactionError { + fn from(error: EVMError) -> Self { + BuilderTransactionError::EvmExecutionError(Box::new(error)) + } +} + +impl From for PayloadBuilderError { + fn from(error: BuilderTransactionError) -> Self { + match error { + BuilderTransactionError::EvmExecutionError(e) => { + PayloadBuilderError::EvmExecutionError(e) + } + _ => PayloadBuilderError::Other(Box::new(error)), + } + } +} + +pub trait BuilderTransactions: Debug { + fn simulate_builder_txs( + &self, + state_provider: impl StateProvider + Clone, + info: &mut ExecutionInfo, + ctx: &OpPayloadBuilderCtx, + db: &mut State, + ) -> Result, BuilderTransactionError>; + + fn add_builder_txs( + &self, + state_provider: impl StateProvider + Clone, + info: &mut ExecutionInfo, + builder_ctx: &OpPayloadBuilderCtx, + db: &mut State, + top_of_block: bool, + ) -> Result, BuilderTransactionError> { + { + let mut evm = builder_ctx + .evm_config + .evm_with_env(&mut *db, builder_ctx.evm_env.clone()); + + let mut invalid: HashSet
= HashSet::new(); + + let builder_txs = + self.simulate_builder_txs(state_provider, info, builder_ctx, evm.db_mut())?; + for builder_tx in builder_txs.iter() { + if builder_tx.is_top_of_block != top_of_block { + // don't commit tx if the buidler tx is not being added in the intended + // position in the block + continue; + } + if invalid.contains(&builder_tx.signed_tx.signer()) { + warn!(target: "payload_builder", tx_hash = ?builder_tx.signed_tx.tx_hash(), "builder signer invalid as previous builder tx reverted"); + continue; + } + + let ResultAndState { result, state } = evm + .transact(&builder_tx.signed_tx) + .map_err(|err| BuilderTransactionError::EvmExecutionError(Box::new(err)))?; + + if !result.is_success() { + warn!(target: "payload_builder", tx_hash = ?builder_tx.signed_tx.tx_hash(), "builder tx reverted"); + invalid.insert(builder_tx.signed_tx.signer()); + continue; + } + + // Add gas used by the transaction to cumulative gas used, before creating the receipt + let gas_used = result.gas_used(); + info.cumulative_gas_used += gas_used; + + let ctx = ReceiptBuilderCtx { + tx: builder_tx.signed_tx.inner(), + evm: &evm, + result, + state: &state, + cumulative_gas_used: info.cumulative_gas_used, + }; + info.receipts.push(builder_ctx.build_receipt(ctx, None)); + + // Commit changes + evm.db_mut().commit(state); + + // Append sender and transaction to the respective lists + info.executed_senders.push(builder_tx.signed_tx.signer()); + info.executed_transactions + .push(builder_tx.signed_tx.clone().into_inner()); + } + + // Release the db reference by dropping evm + drop(evm); + + Ok(builder_txs) + } + } + + fn simulate_builder_txs_state( + &self, + state_provider: impl StateProvider + Clone, + builder_txs: Vec<&BuilderTransactionCtx>, + ctx: &OpPayloadBuilderCtx, + db: &mut State, + ) -> Result>, BuilderTransactionError> { + let state = StateProviderDatabase::new(state_provider.clone()); + let mut simulation_state = State::builder() + .with_database(state) + .with_cached_prestate(db.cache.clone()) + .with_bundle_update() + .build(); + let mut evm = ctx + .evm_config + .evm_with_env(&mut simulation_state, ctx.evm_env.clone()); + + for builder_tx in builder_txs { + let ResultAndState { state, .. } = evm + .transact(&builder_tx.signed_tx) + .map_err(|err| BuilderTransactionError::EvmExecutionError(Box::new(err)))?; + + evm.db_mut().commit(state); + } + + Ok(simulation_state) + } +} + +#[derive(Debug, Clone)] +pub(super) struct BuilderTxBase { pub signer: Option, } -impl BuilderTx for StandardBuilderTx { - fn estimated_builder_tx_gas(&self) -> u64 { - todo!() +impl BuilderTxBase { + pub(super) fn new(signer: Option) -> Self { + Self { signer } + } + + pub(super) fn simulate_builder_tx( + &self, + ctx: &OpPayloadBuilderCtx, + db: &mut State, + ) -> Result, BuilderTransactionError> { + match self.signer { + Some(signer) => { + let message: Vec = format!("Block Number: {}", ctx.block_number()).into_bytes(); + let gas_used = self.estimate_builder_tx_gas(&message); + let signed_tx = self.signed_builder_tx(ctx, db, signer, gas_used, message)?; + let da_size = op_alloy_flz::tx_estimated_size_fjord_bytes( + signed_tx.encoded_2718().as_slice(), + ); + Ok(Some(BuilderTransactionCtx { + gas_used, + da_size, + signed_tx, + is_top_of_block: false, + })) + } + None => Ok(None), + } } - fn estimated_builder_tx_da_size(&self) -> Option { - todo!() + fn estimate_builder_tx_gas(&self, input: &[u8]) -> u64 { + // Count zero and non-zero bytes + let (zero_bytes, nonzero_bytes) = input.iter().fold((0, 0), |(zeros, nonzeros), &byte| { + if byte == 0 { + (zeros + 1, nonzeros) + } else { + (zeros, nonzeros + 1) + } + }); + + // Calculate gas cost (4 gas per zero byte, 16 gas per non-zero byte) + let zero_cost = zero_bytes * 4; + let nonzero_cost = nonzero_bytes * 16; + + // Tx gas should be not less than floor gas https://eips.ethereum.org/EIPS/eip-7623 + let tokens_in_calldata = zero_bytes + nonzero_bytes * 4; + let floor_gas = 21_000 + tokens_in_calldata * TOTAL_COST_FLOOR_PER_TOKEN; + + std::cmp::max(zero_cost + nonzero_cost + 21_000, floor_gas) } - fn signed_builder_tx(&self) -> Result, secp256k1::Error> { - todo!() + fn signed_builder_tx( + &self, + ctx: &OpPayloadBuilderCtx, + db: &mut State, + signer: Signer, + gas_used: u64, + message: Vec, + ) -> Result, BuilderTransactionError> { + let nonce = db + .load_cache_account(signer.address) + .map(|acc| acc.account_info().unwrap_or_default().nonce) + .map_err(|_| BuilderTransactionError::AccountLoadFailed(signer.address))?; + + // Create the EIP-1559 transaction + let tx = OpTypedTransaction::Eip1559(TxEip1559 { + chain_id: ctx.chain_id(), + nonce, + gas_limit: gas_used, + max_fee_per_gas: ctx.base_fee().into(), + max_priority_fee_per_gas: 0, + to: TxKind::Call(Address::ZERO), + // Include the message as part of the transaction data + input: message.into(), + ..Default::default() + }); + // Sign the transaction + let builder_tx = signer + .sign_tx(tx) + .map_err(BuilderTransactionError::SigningError)?; + + Ok(builder_tx) } } + +pub fn get_nonce( + db: &mut State, + address: Address, +) -> Result { + db.load_cache_account(address) + .map(|acc| acc.account_info().unwrap_or_default().nonce) + .map_err(|_| BuilderTransactionError::AccountLoadFailed(address)) +} + +pub fn get_balance( + db: &mut State, + address: Address, +) -> Result { + db.load_cache_account(address) + .map(|acc| acc.account_info().unwrap_or_default().balance) + .map_err(|_| BuilderTransactionError::AccountLoadFailed(address)) +} + +pub fn log_exists(logs: &[Log], topic: &B256) -> bool { + logs.iter().any(|log| log.topics().first() == Some(topic)) +} diff --git a/crates/op-rbuilder/src/builders/context.rs b/crates/op-rbuilder/src/builders/context.rs index 4fac34c80..bf78ea90a 100644 --- a/crates/op-rbuilder/src/builders/context.rs +++ b/crates/op-rbuilder/src/builders/context.rs @@ -1,12 +1,11 @@ -use alloy_consensus::{ - Eip658Value, Transaction, TxEip1559, conditional::BlockConditionalAttributes, -}; -use alloy_eips::{Encodable2718, Typed2718, eip7623::TOTAL_COST_FLOOR_PER_TOKEN}; +use alloy_consensus::{Eip658Value, Transaction, conditional::BlockConditionalAttributes}; +use alloy_eips::Typed2718; +use alloy_evm::Database; use alloy_op_evm::block::receipt_builder::OpReceiptBuilder; -use alloy_primitives::{Address, Bytes, TxKind, U256}; +use alloy_primitives::{Bytes, U256}; use alloy_rpc_types_eth::Withdrawals; use core::fmt::Debug; -use op_alloy_consensus::{OpDepositReceipt, OpTypedTransaction}; +use op_alloy_consensus::OpDepositReceipt; use op_revm::OpSpecId; use reth::payload::PayloadBuilderAttributes; use reth_basic_payload_builder::PayloadConfig; @@ -20,26 +19,24 @@ use reth_optimism_evm::{OpEvmConfig, OpNextBlockEnvAttributes}; use reth_optimism_forks::OpHardforks; use reth_optimism_node::OpPayloadBuilderAttributes; use reth_optimism_payload_builder::{config::OpDAConfig, error::OpPayloadBuilderError}; -use reth_optimism_primitives::{OpReceipt, OpTransactionSigned}; +use reth_optimism_primitives::{OpReceipt, OpTransactionSigned, is_gasless}; use reth_optimism_txpool::{ conditional::MaybeConditionalTransaction, estimated_da_size::DataAvailabilitySized, interop::{MaybeInteropTransaction, is_valid_interop}, }; use reth_payload_builder::PayloadId; -use reth_primitives::{Recovered, SealedHeader}; +use reth_primitives::SealedHeader; use reth_primitives_traits::{InMemorySize, SignedTransaction}; -use reth_provider::ProviderError; use reth_revm::{State, context::Block}; use reth_transaction_pool::{BestTransactionsAttributes, PoolTransaction}; -use revm::{ - Database, DatabaseCommit, context::result::ResultAndState, interpreter::as_u64_saturated, -}; +use revm::{DatabaseCommit, context::result::ResultAndState, interpreter::as_u64_saturated}; use std::{sync::Arc, time::Instant}; use tokio_util::sync::CancellationToken; -use tracing::{debug, info, trace, warn}; +use tracing::{debug, info, trace}; use crate::{ + gas_limiter::AddressGasLimiter, metrics::OpRBuilderMetrics, primitives::reth::{ExecutionInfo, TxnExecutionResult}, traits::PayloadTxsBounds, @@ -72,45 +69,47 @@ pub struct OpPayloadBuilderCtx { pub extra_ctx: ExtraCtx, /// Max gas that can be used by a transaction. pub max_gas_per_txn: Option, + /// Rate limiting based on gas. This is an optional feature. + pub address_gas_limiter: AddressGasLimiter, } impl OpPayloadBuilderCtx { /// Returns the parent block the payload will be build on. - pub fn parent(&self) -> &SealedHeader { + pub(super) fn parent(&self) -> &SealedHeader { &self.config.parent_header } /// Returns the builder attributes. - pub const fn attributes(&self) -> &OpPayloadBuilderAttributes { + pub(super) const fn attributes(&self) -> &OpPayloadBuilderAttributes { &self.config.attributes } /// Returns the withdrawals if shanghai is active. - pub fn withdrawals(&self) -> Option<&Withdrawals> { + pub(super) fn withdrawals(&self) -> Option<&Withdrawals> { self.chain_spec .is_shanghai_active_at_timestamp(self.attributes().timestamp()) .then(|| &self.attributes().payload_attributes.withdrawals) } /// Returns the block gas limit to target. - pub fn block_gas_limit(&self) -> u64 { + pub(super) fn block_gas_limit(&self) -> u64 { self.attributes() .gas_limit .unwrap_or(self.evm_env.block_env.gas_limit) } /// Returns the block number for the block. - pub fn block_number(&self) -> u64 { + pub(super) fn block_number(&self) -> u64 { as_u64_saturated!(self.evm_env.block_env.number) } /// Returns the current base fee - pub fn base_fee(&self) -> u64 { + pub(super) fn base_fee(&self) -> u64 { self.evm_env.block_env.basefee } /// Returns the current blob gas price. - pub fn get_blob_gasprice(&self) -> Option { + pub(super) fn get_blob_gasprice(&self) -> Option { self.evm_env .block_env .blob_gasprice() @@ -120,7 +119,7 @@ impl OpPayloadBuilderCtx { /// Returns the blob fields for the header. /// /// This will always return `Some(0)` after ecotone. - pub fn blob_fields(&self) -> (Option, Option) { + pub(super) fn blob_fields(&self) -> (Option, Option) { // OP doesn't support blobs/EIP-4844. // https://specs.optimism.io/protocol/exec-engine.html#ecotone-disable-blob-transactions // Need [Some] or [None] based on hardfork to match block hash. @@ -134,7 +133,7 @@ impl OpPayloadBuilderCtx { /// Returns the extra data for the block. /// /// After holocene this extracts the extradata from the paylpad - pub fn extra_data(&self) -> Result { + pub(super) fn extra_data(&self) -> Result { if self.is_holocene_active() { self.attributes() .get_holocene_extra_data( @@ -149,59 +148,54 @@ impl OpPayloadBuilderCtx { } /// Returns the current fee settings for transactions from the mempool - pub fn best_transaction_attributes(&self) -> BestTransactionsAttributes { + pub(super) fn best_transaction_attributes(&self) -> BestTransactionsAttributes { BestTransactionsAttributes::new(self.base_fee(), self.get_blob_gasprice()) } /// Returns the unique id for this payload job. - pub fn payload_id(&self) -> PayloadId { + pub(super) fn payload_id(&self) -> PayloadId { self.attributes().payload_id() } /// Returns true if regolith is active for the payload. - pub fn is_regolith_active(&self) -> bool { + pub(super) fn is_regolith_active(&self) -> bool { self.chain_spec .is_regolith_active_at_timestamp(self.attributes().timestamp()) } /// Returns true if ecotone is active for the payload. - pub fn is_ecotone_active(&self) -> bool { + pub(super) fn is_ecotone_active(&self) -> bool { self.chain_spec .is_ecotone_active_at_timestamp(self.attributes().timestamp()) } /// Returns true if canyon is active for the payload. - pub fn is_canyon_active(&self) -> bool { + pub(super) fn is_canyon_active(&self) -> bool { self.chain_spec .is_canyon_active_at_timestamp(self.attributes().timestamp()) } /// Returns true if holocene is active for the payload. - pub fn is_holocene_active(&self) -> bool { + pub(super) fn is_holocene_active(&self) -> bool { self.chain_spec .is_holocene_active_at_timestamp(self.attributes().timestamp()) } /// Returns true if isthmus is active for the payload. - pub fn is_isthmus_active(&self) -> bool { + pub(super) fn is_isthmus_active(&self) -> bool { self.chain_spec .is_isthmus_active_at_timestamp(self.attributes().timestamp()) } /// Returns the chain id - pub fn chain_id(&self) -> u64 { + pub(super) fn chain_id(&self) -> u64 { self.chain_spec.chain_id() } - - /// Returns the builder signer - pub fn builder_signer(&self) -> Option { - self.builder_signer - } } impl OpPayloadBuilderCtx { /// Constructs a receipt for the given transaction. - fn build_receipt( + pub fn build_receipt( &self, ctx: ReceiptBuilderCtx<'_, OpTransactionSigned, E>, deposit_nonce: Option, @@ -233,18 +227,13 @@ impl OpPayloadBuilderCtx { } /// Executes all sequencer transactions that are included in the payload attributes. - pub fn execute_sequencer_transactions( + pub(super) fn execute_sequencer_transactions( &self, - state: &mut State, - ) -> Result, PayloadBuilderError> - where - DB: Database + std::fmt::Debug, - { + db: &mut State, + ) -> Result, PayloadBuilderError> { let mut info = ExecutionInfo::with_capacity(self.attributes().transactions.len()); - let mut evm = self - .evm_config - .evm_with_env(&mut *state, self.evm_env.clone()); + let mut evm = self.evm_config.evm_with_env(&mut *db, self.evm_env.clone()); for sequencer_tx in &self.attributes().transactions { // A sequencer's block should never contain blob transactions. @@ -322,28 +311,24 @@ impl OpPayloadBuilderCtx { /// Executes the given best transactions and updates the execution info. /// /// Returns `Ok(Some(())` if the job was cancelled. - pub fn execute_best_transactions( + pub(super) fn execute_best_transactions( &self, info: &mut ExecutionInfo, - state: &mut State, + db: &mut State, best_txs: &mut impl PayloadTxsBounds, block_gas_limit: u64, block_da_limit: Option, - ) -> Result, PayloadBuilderError> - where - DB: Database + std::fmt::Debug, - { + ) -> Result, PayloadBuilderError> { let execute_txs_start_time = Instant::now(); let mut num_txs_considered = 0; let mut num_txs_simulated = 0; let mut num_txs_simulated_success = 0; let mut num_txs_simulated_fail = 0; let mut num_bundles_reverted = 0; + let mut reverted_gas_used = 0; let base_fee = self.base_fee(); let tx_da_limit = self.da_config.max_da_tx_size(); - let mut evm = self - .evm_config - .evm_with_env(&mut *state, self.evm_env.clone()); + let mut evm = self.evm_config.evm_with_env(&mut *db, self.evm_env.clone()); info!( target: "payload_builder", @@ -353,15 +338,6 @@ impl OpPayloadBuilderCtx { block_gas_limit = ?block_gas_limit, ); - // Remove once we merge Reth 1.4.4 - // Fixed in https://github.com/paradigmxyz/reth/pull/16514 - self.metrics - .da_block_size_limit - .set(block_da_limit.map_or(-1.0, |v| v as f64)); - self.metrics - .da_tx_size_limit - .set(tx_da_limit.map_or(-1.0, |v| v as f64)); - let block_attr = BlockConditionalAttributes { number: self.block_number(), timestamp: self.attributes().timestamp(), @@ -467,7 +443,7 @@ impl OpPayloadBuilderCtx { } // this is an error that we should treat as fatal for this attempt log_txn(TxnExecutionResult::EvmError); - return Err(PayloadBuilderError::EvmExecutionError(Box::new(err))); + return Err(PayloadBuilderError::evm(err)); } }; @@ -476,17 +452,35 @@ impl OpPayloadBuilderCtx { .record(tx_simulation_start_time.elapsed()); self.metrics.tx_byte_size.record(tx.inner().size() as f64); num_txs_simulated += 1; + + // Run the per-address gas limiting before checking if the tx has + // reverted or not, as this is a check against maliciously searchers + // sending txs that are expensive to compute but always revert. + let gas_used = result.gas_used(); + if self + .address_gas_limiter + .consume_gas(tx.signer(), gas_used) + .is_err() + { + log_txn(TxnExecutionResult::MaxGasUsageExceeded); + best_txs.mark_invalid(tx.signer(), tx.nonce()); + continue; + } + if result.is_success() { log_txn(TxnExecutionResult::Success); num_txs_simulated_success += 1; + self.metrics.successful_tx_gas_used.record(gas_used as f64); } else { num_txs_simulated_fail += 1; + reverted_gas_used += gas_used as i32; + self.metrics.reverted_tx_gas_used.record(gas_used as f64); if is_bundle_tx { num_bundles_reverted += 1; } if exclude_reverting_txs { log_txn(TxnExecutionResult::RevertedAndExcluded); - info!(target: "payload_builder", tx_hash = ?tx.tx_hash(), "skipping reverted transaction"); + info!(target: "payload_builder", tx_hash = ?tx.tx_hash(), result = ?result, "skipping reverted transaction"); best_txs.mark_invalid(tx.signer(), tx.nonce()); continue; } else { @@ -496,7 +490,6 @@ impl OpPayloadBuilderCtx { // add gas used by the transaction to cumulative gas used, before creating the // receipt - let gas_used = result.gas_used(); if let Some(max_gas_per_txn) = self.max_gas_per_txn { if gas_used > max_gas_per_txn { log_txn(TxnExecutionResult::MaxGasUsageExceeded); @@ -522,11 +515,13 @@ impl OpPayloadBuilderCtx { // commit changes evm.db_mut().commit(state); - // update add to total fees - let miner_fee = tx - .effective_tip_per_gas(base_fee) - .expect("fee is always valid; execution succeeded"); - info.total_fees += U256::from(miner_fee) * U256::from(gas_used); + if !is_gasless(&*tx) { + // update add to total fees + let miner_fee = tx + .effective_tip_per_gas(base_fee) + .expect("fee is always valid; execution succeeded"); + info.total_fees += U256::from(miner_fee) * U256::from(gas_used); + } // append sender and transaction to the respective lists info.executed_senders.push(tx.signer()); @@ -541,6 +536,7 @@ impl OpPayloadBuilderCtx { num_txs_simulated_success, num_txs_simulated_fail, num_bundles_reverted, + reverted_gas_used, ); debug!( @@ -553,151 +549,4 @@ impl OpPayloadBuilderCtx { ); Ok(None) } - - pub fn add_builder_tx( - &self, - info: &mut ExecutionInfo, - state: &mut State, - builder_tx_gas: u64, - message: Vec, - ) -> Option<()> - where - DB: Database + std::fmt::Debug, - { - self.builder_signer() - .map(|signer| { - let base_fee = self.base_fee(); - let chain_id = self.chain_id(); - // Create and sign the transaction - let builder_tx = - signed_builder_tx(state, builder_tx_gas, message, signer, base_fee, chain_id)?; - - let mut evm = self - .evm_config - .evm_with_env(&mut *state, self.evm_env.clone()); - - let ResultAndState { - result, - state: new_state, - } = evm - .transact(&builder_tx) - .map_err(|err| PayloadBuilderError::EvmExecutionError(Box::new(err)))?; - - // Add gas used by the transaction to cumulative gas used, before creating the receipt - info.cumulative_gas_used += result.gas_used(); - - let ctx = ReceiptBuilderCtx { - tx: builder_tx.inner(), - evm: &evm, - result, - state: &new_state, - cumulative_gas_used: info.cumulative_gas_used, - }; - info.receipts.push(self.build_receipt(ctx, None)); - - // Release the db reference by dropping evm - drop(evm); - // Commit changes - state.commit(new_state); - - // Append sender and transaction to the respective lists - info.executed_senders.push(builder_tx.signer()); - info.executed_transactions.push(builder_tx.into_inner()); - Ok(()) - }) - .transpose() - .unwrap_or_else(|err: PayloadBuilderError| { - warn!(target: "payload_builder", %err, "Failed to add builder transaction"); - None - }) - } - - /// Calculates EIP 2718 builder transaction size - // TODO: this function could be improved, ideally we shouldn't take mut ref to db and maybe - // it's possible to do this without db at all - pub fn estimate_builder_tx_da_size( - &self, - state: &mut State, - builder_tx_gas: u64, - message: Vec, - ) -> Option - where - DB: Database, - { - self.builder_signer() - .map(|signer| { - let base_fee = self.base_fee(); - let chain_id = self.chain_id(); - // Create and sign the transaction - let builder_tx = - signed_builder_tx(state, builder_tx_gas, message, signer, base_fee, chain_id)?; - Ok(op_alloy_flz::tx_estimated_size_fjord_bytes( - builder_tx.encoded_2718().as_slice(), - )) - }) - .transpose() - .unwrap_or_else(|err: PayloadBuilderError| { - warn!(target: "payload_builder", %err, "Failed to add builder transaction"); - None - }) - } -} - -pub fn estimate_gas_for_builder_tx(input: Vec) -> u64 { - // Count zero and non-zero bytes - let (zero_bytes, nonzero_bytes) = input.iter().fold((0, 0), |(zeros, nonzeros), &byte| { - if byte == 0 { - (zeros + 1, nonzeros) - } else { - (zeros, nonzeros + 1) - } - }); - - // Calculate gas cost (4 gas per zero byte, 16 gas per non-zero byte) - let zero_cost = zero_bytes * 4; - let nonzero_cost = nonzero_bytes * 16; - - // Tx gas should be not less than floor gas https://eips.ethereum.org/EIPS/eip-7623 - let tokens_in_calldata = zero_bytes + nonzero_bytes * 4; - let floor_gas = 21_000 + tokens_in_calldata * TOTAL_COST_FLOOR_PER_TOKEN; - - std::cmp::max(zero_cost + nonzero_cost + 21_000, floor_gas) -} - -/// Creates signed builder tx to Address::ZERO and specified message as input -pub fn signed_builder_tx( - state: &mut State, - builder_tx_gas: u64, - message: Vec, - signer: Signer, - base_fee: u64, - chain_id: u64, -) -> Result, PayloadBuilderError> -where - DB: Database, -{ - // Create message with block number for the builder to sign - let nonce = state - .load_cache_account(signer.address) - .map(|acc| acc.account_info().unwrap_or_default().nonce) - .map_err(|_| { - PayloadBuilderError::other(OpPayloadBuilderError::AccountLoadFailed(signer.address)) - })?; - - // Create the EIP-1559 transaction - let tx = OpTypedTransaction::Eip1559(TxEip1559 { - chain_id, - nonce, - gas_limit: builder_tx_gas, - max_fee_per_gas: base_fee.into(), - max_priority_fee_per_gas: 0, - to: TxKind::Call(Address::ZERO), - // Include the message as part of the transaction data - input: message.into(), - ..Default::default() - }); - // Sign the transaction - let builder_tx = signer.sign_tx(tx).map_err(PayloadBuilderError::other)?; - - Ok(builder_tx) } diff --git a/crates/op-rbuilder/src/builders/flashblocks/best_txs.rs b/crates/op-rbuilder/src/builders/flashblocks/best_txs.rs index e8d73bad5..2f36c96dc 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/best_txs.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/best_txs.rs @@ -1,17 +1,17 @@ use alloy_primitives::{Address, TxHash}; use reth_payload_util::PayloadTransactions; -use reth_transaction_pool::PoolTransaction; -use std::collections::HashSet; +use reth_transaction_pool::{PoolTransaction, ValidPoolTransaction}; +use std::{collections::HashSet, sync::Arc}; use tracing::debug; use crate::tx::MaybeFlashblockFilter; -pub struct BestFlashblocksTxs +pub(super) struct BestFlashblocksTxs where T: PoolTransaction, - I: PayloadTransactions, + I: Iterator>>, { - inner: I, + inner: reth_payload_util::BestPayloadTransactions, current_flashblock_number: u64, // Transactions that were already commited to the state. Using them again would cause NonceTooLow // so we skip them @@ -21,9 +21,9 @@ where impl BestFlashblocksTxs where T: PoolTransaction, - I: PayloadTransactions, + I: Iterator>>, { - pub fn new(inner: I) -> Self { + pub(super) fn new(inner: reth_payload_util::BestPayloadTransactions) -> Self { Self { inner, current_flashblock_number: 0, @@ -33,13 +33,17 @@ where /// Replaces current iterator with new one. We use it on new flashblock building, to refresh /// priority boundaries - pub fn refresh_iterator(&mut self, inner: I, current_flashblock_number: u64) { + pub(super) fn refresh_iterator( + &mut self, + inner: reth_payload_util::BestPayloadTransactions, + current_flashblock_number: u64, + ) { self.inner = inner; self.current_flashblock_number = current_flashblock_number; } /// Remove transaction from next iteration and it already in the state - pub fn mark_commited(&mut self, txs: Vec) { + pub(super) fn mark_commited(&mut self, txs: Vec) { self.commited_transactions.extend(txs); } } @@ -47,7 +51,7 @@ where impl PayloadTransactions for BestFlashblocksTxs where T: PoolTransaction + MaybeFlashblockFilter, - I: PayloadTransactions, + I: Iterator>>, { type Transaction = T; @@ -74,6 +78,7 @@ where if self.current_flashblock_number > max { debug!( target: "payload_builder", + tx_hash = ?tx.hash(), sender = ?tx.sender(), nonce = tx.nonce(), current_flashblock = self.current_flashblock_number, diff --git a/crates/op-rbuilder/src/builders/flashblocks/builder_tx.rs b/crates/op-rbuilder/src/builders/flashblocks/builder_tx.rs new file mode 100644 index 000000000..7588dd4e3 --- /dev/null +++ b/crates/op-rbuilder/src/builders/flashblocks/builder_tx.rs @@ -0,0 +1,304 @@ +use alloy_consensus::TxEip1559; +use alloy_eips::Encodable2718; +use alloy_evm::{Database, Evm}; +use alloy_op_evm::OpEvm; +use alloy_primitives::{Address, B256, TxKind}; +use alloy_sol_types::{Error, SolCall, SolEvent, SolInterface, sol}; +use core::fmt::Debug; +use op_alloy_consensus::OpTypedTransaction; +use op_revm::OpHaltReason; +use reth_evm::{ConfigureEvm, precompiles::PrecompilesMap}; +use reth_optimism_primitives::OpTransactionSigned; +use reth_primitives::Recovered; +use reth_provider::StateProvider; +use reth_revm::{State, database::StateProviderDatabase}; +use revm::{ + context::result::{ExecutionResult, ResultAndState}, + inspector::NoOpInspector, +}; +use tracing::warn; + +use crate::{ + builders::{ + BuilderTransactionCtx, BuilderTransactionError, BuilderTransactions, + builder_tx::{BuilderTxBase, get_nonce, log_exists}, + context::OpPayloadBuilderCtx, + flashblocks::payload::FlashblocksExtraCtx, + }, + flashtestations::service::FlashtestationsBuilderTx, + primitives::reth::ExecutionInfo, + tx_signer::Signer, +}; + +sol!( + // From https://github.com/Uniswap/flashblocks_number_contract/blob/main/src/FlashblockNumber.sol + #[sol(rpc, abi)] + #[derive(Debug)] + interface IFlashblockNumber { + function incrementFlashblockNumber() external; + + // @notice Emitted when flashblock index is incremented + // @param newFlashblockIndex The new flashblock index (0-indexed within each L2 block) + event FlashblockIncremented(uint256 newFlashblockIndex); + + /// ----------------------------------------------------------------------- + /// Errors + /// ----------------------------------------------------------------------- + error NonBuilderAddress(address addr); + error MismatchedFlashblockNumber(uint256 expectedFlashblockNumber, uint256 actualFlashblockNumber); + } +); + +#[derive(Debug, thiserror::Error)] +pub(super) enum FlashblockNumberError { + #[error("flashblocks number contract tx reverted: {0:?}")] + Revert(IFlashblockNumber::IFlashblockNumberErrors), + #[error("contract may be invalid, mismatch in log emitted: expected {0:?}")] + LogMismatch(B256), + #[error("unknown revert: {0} err: {1}")] + Unknown(String, Error), + #[error("halt: {0:?}")] + Halt(OpHaltReason), +} + +// This will be the end of block transaction of a regular block +#[derive(Debug, Clone)] +pub(super) struct FlashblocksBuilderTx { + pub base_builder_tx: BuilderTxBase, + pub flashtestations_builder_tx: Option, +} + +impl FlashblocksBuilderTx { + pub(super) fn new( + signer: Option, + flashtestations_builder_tx: Option, + ) -> Self { + let base_builder_tx = BuilderTxBase::new(signer); + Self { + base_builder_tx, + flashtestations_builder_tx, + } + } +} + +impl BuilderTransactions for FlashblocksBuilderTx { + fn simulate_builder_txs( + &self, + state_provider: impl StateProvider + Clone, + info: &mut ExecutionInfo, + ctx: &OpPayloadBuilderCtx, + db: &mut State, + ) -> Result, BuilderTransactionError> { + let mut builder_txs = Vec::::new(); + + if ctx.is_first_flashblock() { + let flashblocks_builder_tx = self.base_builder_tx.simulate_builder_tx(ctx, db)?; + builder_txs.extend(flashblocks_builder_tx.clone()); + } + + if ctx.is_last_flashblock() { + let base_tx = self.base_builder_tx.simulate_builder_tx(ctx, db)?; + builder_txs.extend(base_tx.clone()); + + if let Some(flashtestations_builder_tx) = &self.flashtestations_builder_tx { + // We only include flashtestations txs in the last flashblock + let mut simulation_state = self.simulate_builder_txs_state::( + state_provider.clone(), + base_tx.iter().collect(), + ctx, + db, + )?; + let flashtestations_builder_txs = flashtestations_builder_tx.simulate_builder_txs( + state_provider, + info, + ctx, + &mut simulation_state, + )?; + builder_txs.extend(flashtestations_builder_txs); + } + } + Ok(builder_txs) + } +} + +// This will be the end of block transaction of a regular block +#[derive(Debug, Clone)] +pub(super) struct FlashblocksNumberBuilderTx { + pub signer: Option, + pub flashblock_number_address: Address, + pub base_builder_tx: BuilderTxBase, + pub flashtestations_builder_tx: Option, +} + +impl FlashblocksNumberBuilderTx { + pub(super) fn new( + signer: Option, + flashblock_number_address: Address, + flashtestations_builder_tx: Option, + ) -> Self { + let base_builder_tx = BuilderTxBase::new(signer); + Self { + signer, + flashblock_number_address, + base_builder_tx, + flashtestations_builder_tx, + } + } + + fn estimate_flashblock_number_tx_gas( + &self, + ctx: &OpPayloadBuilderCtx, + evm: &mut OpEvm< + State>, + NoOpInspector, + PrecompilesMap, + >, + signer: &Signer, + nonce: u64, + ) -> Result { + let tx = self.signed_flashblock_number_tx(ctx, ctx.block_gas_limit(), nonce, signer)?; + let ResultAndState { result, .. } = match evm.transact(&tx) { + Ok(res) => res, + Err(err) => { + return Err(BuilderTransactionError::EvmExecutionError(Box::new(err))); + } + }; + + match result { + ExecutionResult::Success { gas_used, logs, .. } => { + if log_exists( + &logs, + &IFlashblockNumber::FlashblockIncremented::SIGNATURE_HASH, + ) { + Ok(gas_used) + } else { + Err(BuilderTransactionError::Other(Box::new( + FlashblockNumberError::LogMismatch( + IFlashblockNumber::FlashblockIncremented::SIGNATURE_HASH, + ), + ))) + } + } + ExecutionResult::Revert { output, .. } => { + Err(BuilderTransactionError::Other(Box::new( + IFlashblockNumber::IFlashblockNumberErrors::abi_decode(&output) + .map(FlashblockNumberError::Revert) + .unwrap_or_else(|e| FlashblockNumberError::Unknown(hex::encode(output), e)), + ))) + } + ExecutionResult::Halt { reason, .. } => Err(BuilderTransactionError::Other(Box::new( + FlashblockNumberError::Halt(reason), + ))), + } + } + + fn signed_flashblock_number_tx( + &self, + ctx: &OpPayloadBuilderCtx, + gas_limit: u64, + nonce: u64, + signer: &Signer, + ) -> Result, secp256k1::Error> { + let calldata = IFlashblockNumber::incrementFlashblockNumberCall {}.abi_encode(); + // Create the EIP-1559 transaction + let tx = OpTypedTransaction::Eip1559(TxEip1559 { + chain_id: ctx.chain_id(), + nonce, + gas_limit, + max_fee_per_gas: ctx.base_fee().into(), + max_priority_fee_per_gas: 0, + to: TxKind::Call(self.flashblock_number_address), + input: calldata.into(), + ..Default::default() + }); + signer.sign_tx(tx) + } +} + +impl BuilderTransactions for FlashblocksNumberBuilderTx { + fn simulate_builder_txs( + &self, + state_provider: impl StateProvider + Clone, + info: &mut ExecutionInfo, + ctx: &OpPayloadBuilderCtx, + db: &mut State, + ) -> Result, BuilderTransactionError> { + let mut builder_txs = Vec::::new(); + let state = StateProviderDatabase::new(state_provider.clone()); + let simulation_state = State::builder() + .with_database(state) + .with_cached_prestate(db.cache.clone()) + .with_bundle_update() + .build(); + + if ctx.is_first_flashblock() { + // fallback block builder tx + builder_txs.extend(self.base_builder_tx.simulate_builder_tx(ctx, db)?); + } else { + // we increment the flashblock number for the next flashblock so we don't increment in the last flashblock + if let Some(signer) = &self.signer { + let mut evm = ctx + .evm_config + .evm_with_env(simulation_state, ctx.evm_env.clone()); + evm.modify_cfg(|cfg| { + cfg.disable_balance_check = true; + }); + + let nonce = get_nonce(evm.db_mut(), signer.address)?; + + let tx = match self.estimate_flashblock_number_tx_gas(ctx, &mut evm, signer, nonce) + { + Ok(gas_used) => { + // Due to EIP-150, 63/64 of available gas is forwarded to external calls so need to add a buffer + let signed_tx = self.signed_flashblock_number_tx( + ctx, + gas_used * 64 / 63, + nonce, + signer, + )?; + + let da_size = op_alloy_flz::tx_estimated_size_fjord_bytes( + signed_tx.encoded_2718().as_slice(), + ); + Some(BuilderTransactionCtx { + gas_used, + da_size, + signed_tx, + is_top_of_block: true, // number tx at top of flashblock + }) + } + Err(e) => { + warn!(target: "builder_tx", error = ?e, "Flashblocks number contract tx simulation failed, defaulting to fallback builder tx"); + self.base_builder_tx + .simulate_builder_tx(ctx, db)? + .map(|tx| tx.set_top_of_block()) + } + }; + + builder_txs.extend(tx); + } + } + + if ctx.is_last_flashblock() { + if let Some(flashtestations_builder_tx) = &self.flashtestations_builder_tx { + let flashblocks_builder_txs = builder_txs.clone(); + let mut simulation_state = self.simulate_builder_txs_state::( + state_provider.clone(), + flashblocks_builder_txs.iter().collect(), + ctx, + db, + )?; + // We only include flashtestations txs in the last flashblock + let flashtestations_builder_txs = flashtestations_builder_tx.simulate_builder_txs( + state_provider, + info, + ctx, + &mut simulation_state, + )?; + builder_txs.extend(flashtestations_builder_txs); + } + } + + Ok(builder_txs) + } +} diff --git a/crates/op-rbuilder/src/builders/flashblocks/config.rs b/crates/op-rbuilder/src/builders/flashblocks/config.rs index 702566beb..f2dca7759 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/config.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/config.rs @@ -1,3 +1,5 @@ +use alloy_primitives::Address; + use crate::{args::OpRbuilderArgs, builders::BuilderConfig}; use core::{ net::{Ipv4Addr, SocketAddr}, @@ -28,6 +30,14 @@ pub struct FlashblocksConfig { /// Disables dynamic flashblocks number adjustment based on FCU arrival time pub fixed: bool, + + /// Should we calculate state root for each flashblock + pub calculate_state_root: bool, + + /// The address of the flashblocks number contract. + /// + /// If set a builder tx will be added to the start of every flashblock instead of the regular builder tx. + pub flashblocks_number_contract_address: Option
, } impl Default for FlashblocksConfig { @@ -37,6 +47,8 @@ impl Default for FlashblocksConfig { interval: Duration::from_millis(250), leeway_time: Duration::from_millis(50), fixed: false, + calculate_state_root: true, + flashblocks_number_contract_address: None, } } } @@ -56,16 +68,23 @@ impl TryFrom for FlashblocksConfig { let fixed = args.flashblocks.flashblocks_fixed; + let calculate_state_root = args.flashblocks.flashblocks_calculate_state_root; + + let flashblocks_number_contract_address = + args.flashblocks.flashblocks_number_contract_address; + Ok(Self { ws_addr, interval, leeway_time, fixed, + calculate_state_root, + flashblocks_number_contract_address, }) } } -pub trait FlashBlocksConfigExt { +pub(super) trait FlashBlocksConfigExt { fn flashblocks_per_block(&self) -> u64; } diff --git a/crates/op-rbuilder/src/builders/flashblocks/mod.rs b/crates/op-rbuilder/src/builders/flashblocks/mod.rs index da20a0615..10503fa5d 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/mod.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/mod.rs @@ -3,9 +3,9 @@ use crate::traits::{NodeBounds, PoolBounds}; use config::FlashblocksConfig; use service::FlashblocksServiceBuilder; -mod config; -//mod context; mod best_txs; +mod builder_tx; +mod config; mod payload; mod service; mod wspub; diff --git a/crates/op-rbuilder/src/builders/flashblocks/payload.rs b/crates/op-rbuilder/src/builders/flashblocks/payload.rs index 04d366275..6a46e4c76 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/payload.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/payload.rs @@ -1,11 +1,13 @@ use super::{config::FlashblocksConfig, wspub::WebSocketPublisher}; use crate::{ builders::{ - BuilderConfig, BuilderTx, - context::{OpPayloadBuilderCtx, estimate_gas_for_builder_tx}, + BuilderConfig, + builder_tx::BuilderTransactions, + context::OpPayloadBuilderCtx, flashblocks::{best_txs::BestFlashblocksTxs, config::FlashBlocksConfigExt}, - generator::{BlockCell, BuildArguments}, + generator::{BlockCell, BuildArguments, PayloadBuilder}, }, + gas_limiter::AddressGasLimiter, metrics::OpRBuilderMetrics, primitives::reth::ExecutionInfo, traits::{ClientBounds, PoolBounds}, @@ -36,6 +38,8 @@ use reth_provider::{ use reth_revm::{ State, database::StateProviderDatabase, db::states::bundle_state::BundleRetention, }; +use reth_transaction_pool::TransactionPool; +use reth_trie::{HashedPostState, updates::TrieUpdates}; use revm::Database; use rollup_boost::{ ExecutionPayloadBaseV1, ExecutionPayloadFlashblockDeltaV1, FlashblocksPayloadV1, @@ -46,13 +50,23 @@ use std::{ sync::{Arc, OnceLock}, time::Instant, }; -use tokio::sync::{ - mpsc, - mpsc::{Sender, error::SendError}, -}; +use tokio::sync::mpsc; use tokio_util::sync::CancellationToken; use tracing::{debug, error, info, metadata::Level, span, warn}; +type NextBestFlashblocksTxs = BestFlashblocksTxs< + ::Transaction, + Box< + dyn reth_transaction_pool::BestTransactions< + Item = Arc< + reth_transaction_pool::ValidPoolTransaction< + ::Transaction, + >, + >, + >, + >, +>; + #[derive(Debug, Default)] struct ExtraExecutionInfo { /// Index of the last consumed flashblock @@ -60,45 +74,60 @@ struct ExtraExecutionInfo { } #[derive(Debug, Default)] -struct FlashblocksExtraCtx { +pub struct FlashblocksExtraCtx { /// Current flashblock index - pub flashblock_index: u64, - /// Target flashblock count - pub target_flashblock_count: u64, + flashblock_index: u64, + /// Target flashblock count per block + target_flashblock_count: u64, + /// Total gas left for the current flashblock + target_gas_for_batch: u64, + /// Total DA bytes left for the current flashblock + target_da_for_batch: Option, + /// Gas limit per flashblock + gas_per_batch: u64, + /// DA bytes limit per flashblock + da_per_batch: Option, + /// Whether to calculate the state root for each flashblock + calculate_state_root: bool, } impl OpPayloadBuilderCtx { /// Returns the current flashblock index - pub fn flashblock_index(&self) -> u64 { + pub(crate) fn flashblock_index(&self) -> u64 { self.extra_ctx.flashblock_index } /// Returns the target flashblock count - pub fn target_flashblock_count(&self) -> u64 { + pub(crate) fn target_flashblock_count(&self) -> u64 { self.extra_ctx.target_flashblock_count } /// Increments the flashblock index - pub fn increment_flashblock_index(&mut self) -> u64 { + pub(crate) fn increment_flashblock_index(&mut self) -> u64 { self.extra_ctx.flashblock_index += 1; self.extra_ctx.flashblock_index } /// Sets the target flashblock count - pub fn set_target_flashblock_count(&mut self, target_flashblock_count: u64) -> u64 { + pub(crate) fn set_target_flashblock_count(&mut self, target_flashblock_count: u64) -> u64 { self.extra_ctx.target_flashblock_count = target_flashblock_count; self.extra_ctx.target_flashblock_count } + /// Returns if the flashblock is the first fallback block + pub(crate) fn is_first_flashblock(&self) -> bool { + self.flashblock_index() == 0 + } + /// Returns if the flashblock is the last one - pub fn is_last_flashblock(&self) -> bool { - self.flashblock_index() == self.target_flashblock_count() - 1 + pub(crate) fn is_last_flashblock(&self) -> bool { + self.flashblock_index() == self.target_flashblock_count() } } /// Optimism's payload builder #[derive(Debug, Clone)] -pub struct OpPayloadBuilder { +pub(super) struct OpPayloadBuilder { /// The type responsible for creating the evm. pub evm_config: OpEvmConfig, /// The transaction pool @@ -113,27 +142,29 @@ pub struct OpPayloadBuilder { /// The metrics for the builder pub metrics: Arc, /// The end of builder transaction type - #[allow(dead_code)] - pub builder_tx: BT, + pub builder_tx: BuilderTx, /// Builder events handle to send BuiltPayload events pub payload_builder_handle: Arc>>>, + /// Rate limiting based on gas. This is an optional feature. + pub address_gas_limiter: AddressGasLimiter, } -impl OpPayloadBuilder { +impl OpPayloadBuilder { /// `OpPayloadBuilder` constructor. - pub fn new( + pub(super) fn new( evm_config: OpEvmConfig, pool: Pool, client: Client, config: BuilderConfig, - builder_tx: BT, + builder_tx: BuilderTx, payload_builder_handle: Arc< OnceLock>>, >, ) -> eyre::Result { let metrics = Arc::new(OpRBuilderMetrics::default()); let ws_pub = WebSocketPublisher::new(config.specific.ws_addr, Arc::clone(&metrics))?.into(); + let address_gas_limiter = AddressGasLimiter::new(config.gas_limiter_config.clone()); Ok(Self { evm_config, pool, @@ -143,16 +174,17 @@ impl OpPayloadBuilder { metrics, builder_tx, payload_builder_handle, + address_gas_limiter, }) } } -impl reth_basic_payload_builder::PayloadBuilder - for OpPayloadBuilder +impl reth_basic_payload_builder::PayloadBuilder + for OpPayloadBuilder where Pool: Clone + Send + Sync, Client: Clone + Send + Sync, - BT: Clone + Send + Sync, + BuilderTx: Clone + Send + Sync, { type Attributes = OpPayloadBuilderAttributes; type BuiltPayload = OpBuiltPayload; @@ -175,11 +207,11 @@ where } } -impl OpPayloadBuilder +impl OpPayloadBuilder where Pool: PoolBounds, Client: ClientBounds, - BT: BuilderTx, + BuilderTx: BuilderTransactions + Send + Sync, { /// Constructs an Optimism payload from the transactions sent via the /// Payload attributes by the sequencer. If the `no_tx_pool` argument is passed in @@ -189,7 +221,7 @@ where /// Given build arguments including an Optimism client, transaction pool, /// and configuration, this function creates a transaction payload. Returns /// a result indicating success with the payload or an error in case of failure. - fn build_payload( + async fn build_payload( &self, args: BuildArguments, OpBuiltPayload>, best_payload: BlockCell, @@ -217,6 +249,7 @@ where let chain_spec = self.client.chain_spec(); let timestamp = config.attributes.timestamp(); + let calculate_state_root = self.config.specific.calculate_state_root; let block_env_attributes = OpNextBlockEnvAttributes { timestamp, suggested_fee_recipient: config.attributes.suggested_fee_recipient(), @@ -258,13 +291,21 @@ where extra_ctx: FlashblocksExtraCtx { flashblock_index: 0, target_flashblock_count: self.config.flashblocks_per_block(), + target_gas_for_batch: 0, + target_da_for_batch: None, + gas_per_batch: 0, + da_per_batch: None, + calculate_state_root, }, max_gas_per_txn: self.config.max_gas_per_txn, + address_gas_limiter: self.address_gas_limiter.clone(), }; let state_provider = self.client.state_by_block_hash(ctx.parent().hash())?; let db = StateProviderDatabase::new(&state_provider); + self.address_gas_limiter.refresh(ctx.block_number()); + // 1. execute the pre steps and seal an early block with that let sequencer_tx_start_time = Instant::now(); let mut state = State::builder() @@ -272,37 +313,53 @@ where .with_bundle_update() .build(); - // We subtract gas limit and da limit for builder transaction from the whole limit - let message = format!("Block Number: {}", ctx.block_number()).into_bytes(); - let builder_tx_gas = ctx - .builder_signer() - .map_or(0, |_| estimate_gas_for_builder_tx(message.clone())); - let builder_tx_da_size = ctx - .estimate_builder_tx_da_size(&mut state, builder_tx_gas, message.clone()) - .unwrap_or(0); - let mut info = execute_pre_steps(&mut state, &ctx)?; let sequencer_tx_time = sequencer_tx_start_time.elapsed(); ctx.metrics.sequencer_tx_duration.record(sequencer_tx_time); ctx.metrics.sequencer_tx_gauge.set(sequencer_tx_time); - // If we have payload with txpool we add first builder tx right after deposits - if !ctx.attributes().no_tx_pool { - ctx.add_builder_tx(&mut info, &mut state, builder_tx_gas, message.clone()); - } + // We add first builder tx right after deposits + let builder_txs = if ctx.attributes().no_tx_pool { + vec![] + } else { + match self.builder_tx.add_builder_txs( + &state_provider, + &mut info, + &ctx, + &mut state, + false, + ) { + Ok(builder_txs) => builder_txs, + Err(e) => { + error!(target: "payload_builder", "Error adding builder txs to fallback block: {}", e); + vec![] + } + } + }; + + // We subtract gas limit and da limit for builder transaction from the whole limit + let builder_tx_gas = builder_txs.iter().fold(0, |acc, tx| acc + tx.gas_used); + let builder_tx_da_size: u64 = builder_txs.iter().fold(0, |acc, tx| acc + tx.da_size); - let (payload, fb_payload) = build_block(&mut state, &ctx, &mut info)?; + let (payload, fb_payload) = build_block( + &mut state, + &ctx, + &mut info, + calculate_state_root || ctx.attributes().no_tx_pool, // need to calculate state root for CL sync + )?; best_payload.set(payload.clone()); self.send_payload_to_engine(payload); - - let flashblock_byte_size = self - .ws_pub - .publish(&fb_payload) - .map_err(PayloadBuilderError::other)?; - ctx.metrics - .flashblock_byte_size_histogram - .record(flashblock_byte_size as f64); + // not emitting flashblock if no_tx_pool in FCU, it's just syncing + if !ctx.attributes().no_tx_pool { + let flashblock_byte_size = self + .ws_pub + .publish(&fb_payload) + .map_err(PayloadBuilderError::other)?; + ctx.metrics + .flashblock_byte_size_histogram + .record(flashblock_byte_size as f64); + } info!( target: "payload_builder", @@ -353,7 +410,7 @@ where .first_flashblock_time_offset .record(first_flashblock_offset.as_millis() as f64); let gas_per_batch = ctx.block_gas_limit() / ctx.target_flashblock_count(); - let mut total_gas_per_batch = gas_per_batch; + let target_gas_for_batch = gas_per_batch; let da_per_batch = ctx .da_config .max_da_block_size() @@ -370,24 +427,59 @@ where let mut total_da_per_batch = da_per_batch; // Account for already included builder tx - total_gas_per_batch = total_gas_per_batch.saturating_sub(builder_tx_gas); + ctx.extra_ctx.target_gas_for_batch = target_gas_for_batch.saturating_sub(builder_tx_gas); if let Some(da_limit) = total_da_per_batch.as_mut() { *da_limit = da_limit.saturating_sub(builder_tx_da_size); } + ctx.extra_ctx.target_da_for_batch = total_da_per_batch; + ctx.extra_ctx.gas_per_batch = gas_per_batch; + ctx.extra_ctx.da_per_batch = da_per_batch; // Create best_transaction iterator let mut best_txs = BestFlashblocksTxs::new(BestPayloadTransactions::new( self.pool .best_transactions_with_attributes(ctx.best_transaction_attributes()), )); - // This channel coordinates flashblock building - let (fb_cancel_token_rx, mut fb_cancel_token_tx) = - mpsc::channel((self.config.flashblocks_per_block() + 1) as usize); - self.spawn_timer_task( - block_cancel.clone(), - fb_cancel_token_rx, - first_flashblock_offset, - ); + let interval = self.config.specific.interval; + let (tx, mut rx) = mpsc::channel((self.config.flashblocks_per_block() + 1) as usize); + let mut fb_cancel = block_cancel.child_token(); + ctx.cancel = fb_cancel.clone(); + + tokio::spawn({ + let block_cancel = block_cancel.clone(); + + async move { + let mut timer = tokio::time::interval_at( + tokio::time::Instant::now() + .checked_add(first_flashblock_offset) + .expect("can add flashblock offset to current time"), + interval, + ); + + loop { + tokio::select! { + _ = timer.tick() => { + // cancel current payload building job + fb_cancel.cancel(); + fb_cancel = block_cancel.child_token(); + // this will tick at first_flashblock_offset, + // starting the second flashblock + if tx.send(fb_cancel.clone()).await.is_err() { + // receiver channel was dropped, return. + // this will only happen if the `build_payload` function returns, + // due to payload building error or the main cancellation token being + // cancelled. + return; + } + } + _ = block_cancel.cancelled() => { + return; + } + } + } + } + }); + // Process flashblocks in a blocking loop loop { let fb_span = if span.is_none() { @@ -401,193 +493,35 @@ where }; let _entered = fb_span.enter(); - // We get token from time loop. Token from this channel means that we need to start build flashblock - // Cancellation of this token means that we need to stop building flashblock. - // If channel return None it means that we built all flashblock or parent_token got cancelled - let fb_cancel_token = - tokio::task::block_in_place(|| fb_cancel_token_tx.blocking_recv()).flatten(); - - match fb_cancel_token { - Some(cancel_token) => { - // We use fb_cancel_token inside context so we could exit from - // execute_best_transaction without cancelling parent token - ctx.cancel = cancel_token; - // TODO: remove this - if ctx.flashblock_index() >= ctx.target_flashblock_count() { - info!( - target: "payload_builder", - target = ctx.target_flashblock_count(), - flashblock_count = ctx.flashblock_index(), - block_number = ctx.block_number(), - "Skipping flashblock reached target", - ); - continue; - } - // Continue with flashblock building - info!( + // build first flashblock immediately + match self.build_next_flashblock( + &mut ctx, + &mut info, + &mut state, + &state_provider, + &mut best_txs, + &block_cancel, + &best_payload, + &fb_span, + ) { + Ok(()) => {} + Err(err) => { + error!( target: "payload_builder", - block_number = ctx.block_number(), - flashblock_count = ctx.flashblock_index(), - target_gas = total_gas_per_batch, - gas_used = info.cumulative_gas_used, - target_da = total_da_per_batch.unwrap_or(0), - da_used = info.cumulative_da_bytes_used, - "Building flashblock", - ); - let flashblock_build_start_time = Instant::now(); - // If it is the last flashblock, we need to account for the builder tx - if ctx.is_last_flashblock() { - total_gas_per_batch = total_gas_per_batch.saturating_sub(builder_tx_gas); - // saturating sub just in case, we will log an error if da_limit too small for builder_tx_da_size - if let Some(da_limit) = total_da_per_batch.as_mut() { - *da_limit = da_limit.saturating_sub(builder_tx_da_size); - } - } - - let best_txs_start_time = Instant::now(); - best_txs.refresh_iterator( - BestPayloadTransactions::new( - self.pool.best_transactions_with_attributes( - ctx.best_transaction_attributes(), - ), - ), + "Failed to build flashblock {}, flashblock {}: {}", + ctx.block_number(), ctx.flashblock_index(), + err ); - let transaction_pool_fetch_time = best_txs_start_time.elapsed(); - ctx.metrics - .transaction_pool_fetch_duration - .record(transaction_pool_fetch_time); - ctx.metrics - .transaction_pool_fetch_gauge - .set(transaction_pool_fetch_time); - - let tx_execution_start_time = Instant::now(); - ctx.execute_best_transactions( - &mut info, - &mut state, - &mut best_txs, - total_gas_per_batch.min(ctx.block_gas_limit()), - total_da_per_batch, - )?; - // Extract last transactions - let new_transactions = info.executed_transactions - [info.extra.last_flashblock_index..] - .to_vec() - .iter() - .map(|tx| tx.tx_hash()) - .collect::>(); - best_txs.mark_commited(new_transactions); - - // We got block cancelled, we won't need anything from the block at this point - // Caution: this assume that block cancel token only cancelled when new FCU is received - if block_cancel.is_cancelled() { - self.record_flashblocks_metrics( - &ctx, - &info, - flashblocks_per_block, - &span, - "Payload building complete, channel closed or job cancelled", - ); - return Ok(()); - } - - let payload_tx_simulation_time = tx_execution_start_time.elapsed(); - ctx.metrics - .payload_tx_simulation_duration - .record(payload_tx_simulation_time); - ctx.metrics - .payload_tx_simulation_gauge - .set(payload_tx_simulation_time); - - // If it is the last flashblocks, add the builder txn to the block if enabled - if ctx.is_last_flashblock() { - ctx.add_builder_tx(&mut info, &mut state, builder_tx_gas, message.clone()); - }; - - let total_block_built_duration = Instant::now(); - let build_result = build_block(&mut state, &ctx, &mut info); - let total_block_built_duration = total_block_built_duration.elapsed(); - ctx.metrics - .total_block_built_duration - .record(total_block_built_duration); - ctx.metrics - .total_block_built_gauge - .set(total_block_built_duration); - - // Handle build errors with match pattern - match build_result { - Err(err) => { - // Track invalid/bad block - ctx.metrics.invalid_blocks_count.increment(1); - error!(target: "payload_builder", "Failed to build block {}, flashblock {}: {}", ctx.block_number(), ctx.flashblock_index(), err); - // Return the error - return Err(err); - } - Ok((new_payload, mut fb_payload)) => { - fb_payload.index = ctx.increment_flashblock_index(); // fallback block is index 0, so we need to increment here - fb_payload.base = None; - - // We check that child_job got cancelled before sending flashblock. - // This will ensure consistent timing between flashblocks. - tokio::task::block_in_place(|| { - tokio::runtime::Handle::current() - .block_on(async { ctx.cancel.cancelled().await }); - }); - - // If main token got canceled in here that means we received get_payload and we should drop everything and now update best_payload - // To ensure that we will return same blocks as rollup-boost (to leverage caches) - if block_cancel.is_cancelled() { - self.record_flashblocks_metrics( - &ctx, - &info, - flashblocks_per_block, - &span, - "Payload building complete, channel closed or job cancelled", - ); - return Ok(()); - } - let flashblock_byte_size = self - .ws_pub - .publish(&fb_payload) - .map_err(PayloadBuilderError::other)?; - - // Record flashblock build duration - ctx.metrics - .flashblock_build_duration - .record(flashblock_build_start_time.elapsed()); - ctx.metrics - .flashblock_byte_size_histogram - .record(flashblock_byte_size as f64); - ctx.metrics - .flashblock_num_tx_histogram - .record(info.executed_transactions.len() as f64); - - best_payload.set(new_payload.clone()); - self.send_payload_to_engine(new_payload); - // Update bundle_state for next iteration - total_gas_per_batch += gas_per_batch; - if let Some(da_limit) = da_per_batch { - if let Some(da) = total_da_per_batch.as_mut() { - *da += da_limit; - } else { - error!( - "Builder end up in faulty invariant, if da_per_batch is set then total_da_per_batch must be set" - ); - } - } - - info!( - target: "payload_builder", - message = "Flashblock built", - flashblock_count = ctx.flashblock_index(), - current_gas = info.cumulative_gas_used, - current_da = info.cumulative_da_bytes_used, - target_flashblocks = flashblocks_per_block, - ); - } - } + return Err(err); } - None => { + } + + tokio::select! { + Some(fb_cancel) = rx.recv() => { + ctx.cancel = fb_cancel; + }, + _ = block_cancel.cancelled() => { self.record_flashblocks_metrics( &ctx, &info, @@ -601,6 +535,223 @@ where } } + #[allow(clippy::too_many_arguments)] + fn build_next_flashblock< + DB: Database + std::fmt::Debug + AsRef

, + P: StateRootProvider + HashedPostStateProvider + StorageRootProvider, + >( + &self, + ctx: &mut OpPayloadBuilderCtx, + info: &mut ExecutionInfo, + state: &mut State, + state_provider: impl reth::providers::StateProvider + Clone, + best_txs: &mut NextBestFlashblocksTxs, + block_cancel: &CancellationToken, + best_payload: &BlockCell, + span: &tracing::Span, + ) -> Result<(), PayloadBuilderError> { + // fallback block is index 0, so we need to increment here + ctx.increment_flashblock_index(); + + // TODO: remove this + if ctx.flashblock_index() > ctx.target_flashblock_count() { + info!( + target: "payload_builder", + target = ctx.target_flashblock_count(), + flashblock_index = ctx.flashblock_index(), + block_number = ctx.block_number(), + "Skipping flashblock reached target", + ); + return Ok(()); + }; + + // Continue with flashblock building + let mut target_gas_for_batch = ctx.extra_ctx.target_gas_for_batch; + let mut target_da_per_batch = ctx.extra_ctx.target_da_for_batch; + + info!( + target: "payload_builder", + block_number = ctx.block_number(), + flashblock_index = ctx.flashblock_index(), + target_gas = target_gas_for_batch, + gas_used = info.cumulative_gas_used, + target_da = target_da_per_batch, + da_used = info.cumulative_da_bytes_used, + block_gas_used = ctx.block_gas_limit(), + "Building flashblock", + ); + let flashblock_build_start_time = Instant::now(); + + let builder_txs = + match self + .builder_tx + .add_builder_txs(&state_provider, info, ctx, state, true) + { + Ok(builder_txs) => builder_txs, + Err(e) => { + error!(target: "payload_builder", "Error simulating builder txs: {}", e); + vec![] + } + }; + + let builder_tx_gas = builder_txs.iter().fold(0, |acc, tx| acc + tx.gas_used); + let builder_tx_da_size: u64 = builder_txs.iter().fold(0, |acc, tx| acc + tx.da_size); + target_gas_for_batch = target_gas_for_batch.saturating_sub(builder_tx_gas); + + // saturating sub just in case, we will log an error if da_limit too small for builder_tx_da_size + if let Some(da_limit) = target_da_per_batch.as_mut() { + *da_limit = da_limit.saturating_sub(builder_tx_da_size); + } + + let best_txs_start_time = Instant::now(); + best_txs.refresh_iterator( + BestPayloadTransactions::new( + self.pool + .best_transactions_with_attributes(ctx.best_transaction_attributes()), + ), + ctx.flashblock_index(), + ); + let transaction_pool_fetch_time = best_txs_start_time.elapsed(); + ctx.metrics + .transaction_pool_fetch_duration + .record(transaction_pool_fetch_time); + ctx.metrics + .transaction_pool_fetch_gauge + .set(transaction_pool_fetch_time); + + let tx_execution_start_time = Instant::now(); + ctx.execute_best_transactions( + info, + state, + best_txs, + target_gas_for_batch.min(ctx.block_gas_limit()), + target_da_per_batch, + )?; + // Extract last transactions + let new_transactions = info.executed_transactions[info.extra.last_flashblock_index..] + .to_vec() + .iter() + .map(|tx| tx.tx_hash()) + .collect::>(); + best_txs.mark_commited(new_transactions); + + // We got block cancelled, we won't need anything from the block at this point + // Caution: this assume that block cancel token only cancelled when new FCU is received + if block_cancel.is_cancelled() { + self.record_flashblocks_metrics( + ctx, + info, + ctx.target_flashblock_count(), + span, + "Payload building complete, channel closed or job cancelled", + ); + return Ok(()); + } + + let payload_tx_simulation_time = tx_execution_start_time.elapsed(); + ctx.metrics + .payload_tx_simulation_duration + .record(payload_tx_simulation_time); + ctx.metrics + .payload_tx_simulation_gauge + .set(payload_tx_simulation_time); + + match self + .builder_tx + .add_builder_txs(&state_provider, info, ctx, state, false) + { + Ok(builder_txs) => builder_txs, + Err(e) => { + error!(target: "payload_builder", "Error simulating builder txs: {}", e); + vec![] + } + }; + + let total_block_built_duration = Instant::now(); + let build_result = build_block( + state, + ctx, + info, + ctx.extra_ctx.calculate_state_root || ctx.attributes().no_tx_pool, + ); + let total_block_built_duration = total_block_built_duration.elapsed(); + ctx.metrics + .total_block_built_duration + .record(total_block_built_duration); + ctx.metrics + .total_block_built_gauge + .set(total_block_built_duration); + + // Handle build errors with match pattern + match build_result { + Err(err) => { + // Track invalid/bad block + ctx.metrics.invalid_blocks_count.increment(1); + error!(target: "payload_builder", "Failed to build block {}, flashblock {}: {}", ctx.block_number(), ctx.flashblock_index(), err); + // Return the error + return Err(err); + } + Ok((new_payload, mut fb_payload)) => { + fb_payload.index = ctx.flashblock_index(); + fb_payload.base = None; + + // If main token got canceled in here that means we received get_payload and we should drop everything and now update best_payload + // To ensure that we will return same blocks as rollup-boost (to leverage caches) + if block_cancel.is_cancelled() { + self.record_flashblocks_metrics( + ctx, + info, + ctx.target_flashblock_count(), + span, + "Payload building complete, channel closed or job cancelled", + ); + return Ok(()); + } + let flashblock_byte_size = self + .ws_pub + .publish(&fb_payload) + .map_err(PayloadBuilderError::other)?; + + // Record flashblock build duration + ctx.metrics + .flashblock_build_duration + .record(flashblock_build_start_time.elapsed()); + ctx.metrics + .flashblock_byte_size_histogram + .record(flashblock_byte_size as f64); + ctx.metrics + .flashblock_num_tx_histogram + .record(info.executed_transactions.len() as f64); + + best_payload.set(new_payload.clone()); + self.send_payload_to_engine(new_payload); + // Update bundle_state for next iteration + if let Some(da_limit) = ctx.extra_ctx.da_per_batch { + if let Some(da) = target_da_per_batch.as_mut() { + *da += da_limit; + } else { + error!( + "Builder end up in faulty invariant, if da_per_batch is set then total_da_per_batch must be set" + ); + } + } + + ctx.extra_ctx.target_gas_for_batch += ctx.extra_ctx.gas_per_batch; + ctx.extra_ctx.target_da_for_batch = target_da_per_batch; + + info!( + target: "payload_builder", + message = "Flashblock built", + flashblock_index = ctx.flashblock_index(), + current_gas = info.cumulative_gas_used, + current_da = info.cumulative_da_bytes_used, + target_flashblocks = ctx.target_flashblock_count(), + ); + } + } + Ok(()) + } + /// Do some logging and metric recording when we stop build flashblocks fn record_flashblocks_metrics( &self, @@ -636,7 +787,7 @@ where } /// Sends built payload via payload builder handle broadcast channel to the engine - pub fn send_payload_to_engine(&self, payload: OpBuiltPayload) { + pub(super) fn send_payload_to_engine(&self, payload: OpBuiltPayload) { // Send built payload as created one match self.payload_builder_handle.get() { Some(handle) => { @@ -654,56 +805,9 @@ where } } - /// Spawn task that will send new flashblock level cancel token in steady intervals (first interval - /// may vary if --flashblocks.dynamic enabled) - pub fn spawn_timer_task( - &self, - block_cancel: CancellationToken, - flashblock_cancel_token_rx: Sender>, - first_flashblock_offset: Duration, - ) { - let interval = self.config.specific.interval; - tokio::spawn(async move { - let cancelled: Option>>> = block_cancel - .run_until_cancelled(async { - // Create first fb interval already started - let mut timer = tokio::time::interval(first_flashblock_offset); - timer.tick().await; - let child_token = block_cancel.child_token(); - flashblock_cancel_token_rx - .send(Some(child_token.clone())) - .await?; - timer.tick().await; - // Time to build flashblock has ended so we cancel the token - child_token.cancel(); - // We would start using regular intervals from here on - let mut timer = tokio::time::interval(interval); - timer.tick().await; - loop { - // Initiate fb job - let child_token = block_cancel.child_token(); - debug!(target: "payload_builder", "Sending child cancel token to execution loop"); - flashblock_cancel_token_rx - .send(Some(child_token.clone())) - .await?; - timer.tick().await; - debug!(target: "payload_builder", "Cancelling child token to complete flashblock"); - // Cancel job once time is up - child_token.cancel(); - } - }) - .await; - if let Some(Err(err)) = cancelled { - error!(target: "payload_builder", "Timer task encountered error: {err}"); - } else { - info!(target: "payload_builder", "Building job cancelled, stopping payload building"); - } - }); - } - /// Calculate number of flashblocks. /// If dynamic is enabled this function will take time drift into the account. - pub fn calculate_flashblocks(&self, timestamp: u64) -> (u64, Duration) { + pub(super) fn calculate_flashblocks(&self, timestamp: u64) -> (u64, Duration) { if self.config.specific.fixed { return ( self.config.flashblocks_per_block(), @@ -763,22 +867,22 @@ where } } -impl crate::builders::generator::PayloadBuilder - for OpPayloadBuilder +#[async_trait::async_trait] +impl PayloadBuilder for OpPayloadBuilder where Pool: PoolBounds, Client: ClientBounds, - BT: BuilderTx + Clone + Send + Sync, + BuilderTx: BuilderTransactions + Clone + Send + Sync, { type Attributes = OpPayloadBuilderAttributes; type BuiltPayload = OpBuiltPayload; - fn try_build( + async fn try_build( &self, args: BuildArguments, best_payload: BlockCell, ) -> Result<(), PayloadBuilderError> { - self.build_payload(args, best_payload) + self.build_payload(args, best_payload).await } } @@ -813,6 +917,7 @@ fn build_block( state: &mut State, ctx: &OpPayloadBuilderCtx, info: &mut ExecutionInfo, + calculate_state_root: bool, ) -> Result<(OpBuiltPayload, FlashblocksPayloadV1), PayloadBuilderError> where DB: Database + AsRef

, @@ -857,28 +962,34 @@ where // TODO: maybe recreate state with bundle in here // // calculate the state root let state_root_start_time = Instant::now(); - let state_provider = state.database.as_ref(); - let hashed_state = state_provider.hashed_post_state(execution_outcome.state()); - let (state_root, trie_output) = { - state - .database - .as_ref() - .state_root_with_updates(hashed_state.clone()) - .inspect_err(|err| { - warn!(target: "payload_builder", - parent_header=%ctx.parent().hash(), - %err, - "failed to calculate state root for payload" - ); - })? - }; - let state_root_calculation_time = state_root_start_time.elapsed(); - ctx.metrics - .state_root_calculation_duration - .record(state_root_calculation_time); - ctx.metrics - .state_root_calculation_gauge - .set(state_root_calculation_time); + let mut state_root = B256::ZERO; + let mut trie_output = TrieUpdates::default(); + let mut hashed_state = HashedPostState::default(); + + if calculate_state_root { + let state_provider = state.database.as_ref(); + hashed_state = state_provider.hashed_post_state(execution_outcome.state()); + (state_root, trie_output) = { + state + .database + .as_ref() + .state_root_with_updates(hashed_state.clone()) + .inspect_err(|err| { + warn!(target: "payload_builder", + parent_header=%ctx.parent().hash(), + %err, + "failed to calculate state root for payload" + ); + })? + }; + let state_root_calculation_time = state_root_start_time.elapsed(); + ctx.metrics + .state_root_calculation_duration + .record(state_root_calculation_time); + ctx.metrics + .state_root_calculation_gauge + .set(state_root_calculation_time); + } let mut requests_hash = None; let withdrawals_root = if ctx diff --git a/crates/op-rbuilder/src/builders/flashblocks/service.rs b/crates/op-rbuilder/src/builders/flashblocks/service.rs index ceea02f1b..46ee8ae88 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/service.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/service.rs @@ -1,10 +1,15 @@ use super::{FlashblocksConfig, payload::OpPayloadBuilder}; use crate::{ builders::{ - BuilderConfig, BuilderTx, builder_tx::StandardBuilderTx, + BuilderConfig, + builder_tx::BuilderTransactions, + flashblocks::{ + builder_tx::{FlashblocksBuilderTx, FlashblocksNumberBuilderTx}, + payload::FlashblocksExtraCtx, + }, generator::BlockPayloadJobGenerator, }, - flashtestations::service::spawn_flashtestations_service, + flashtestations::service::bootstrap_flashtestations, traits::{NodeBounds, PoolBounds}, }; use reth_basic_payload_builder::BasicPayloadJobGeneratorConfig; @@ -18,16 +23,16 @@ use std::sync::Arc; pub struct FlashblocksServiceBuilder(pub BuilderConfig); impl FlashblocksServiceBuilder { - fn spawn_payload_builder_service( + fn spawn_payload_builder_service( self, ctx: &BuilderContext, pool: Pool, - builder_tx: BT, + builder_tx: BuilderTx, ) -> eyre::Result::Payload>> where Node: NodeBounds, Pool: PoolBounds, - BT: BuilderTx + Unpin + Clone + Send + Sync + 'static, + BuilderTx: BuilderTransactions + Unpin + Clone + Send + Sync + 'static, { let once_lock = Arc::new(std::sync::OnceLock::new()); @@ -78,30 +83,37 @@ where pool: Pool, _: OpEvmConfig, ) -> eyre::Result::Payload>> { - tracing::debug!("Spawning flashblocks payload builder service"); let signer = self.0.builder_signer; - if self.0.flashtestations_config.flashtestations_enabled { - let flashtestations_service = match spawn_flashtestations_service( - self.0.flashtestations_config.clone(), - ctx, - ) - .await - { - Ok(service) => service, + let flashtestations_builder_tx = if self.0.flashtestations_config.flashtestations_enabled { + match bootstrap_flashtestations(self.0.flashtestations_config.clone(), ctx).await { + Ok(builder_tx) => Some(builder_tx), Err(e) => { - tracing::warn!(error = %e, "Failed to spawn flashtestations service, falling back to standard builder tx"); - return self.spawn_payload_builder_service( - ctx, - pool, - StandardBuilderTx { signer }, - ); + tracing::warn!(error = %e, "Failed to bootstrap flashtestations, builder will not include flashtestations txs"); + None } - }; - - if self.0.flashtestations_config.enable_block_proofs { - return self.spawn_payload_builder_service(ctx, pool, flashtestations_service); } + } else { + None + }; + + if let Some(flashblocks_number_contract_address) = + self.0.specific.flashblocks_number_contract_address + { + self.spawn_payload_builder_service( + ctx, + pool, + FlashblocksNumberBuilderTx::new( + signer, + flashblocks_number_contract_address, + flashtestations_builder_tx, + ), + ) + } else { + self.spawn_payload_builder_service( + ctx, + pool, + FlashblocksBuilderTx::new(signer, flashtestations_builder_tx), + ) } - self.spawn_payload_builder_service(ctx, pool, StandardBuilderTx { signer }) } } diff --git a/crates/op-rbuilder/src/builders/flashblocks/wspub.rs b/crates/op-rbuilder/src/builders/flashblocks/wspub.rs index cf8c485c8..944edb911 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/wspub.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/wspub.rs @@ -28,7 +28,7 @@ use crate::metrics::OpRBuilderMetrics; /// updates about new flashblocks. It maintains a count of sent messages and active subscriptions. /// /// This is modelled as a `futures::Sink` that can be used to send `FlashblocksPayloadV1` messages. -pub struct WebSocketPublisher { +pub(super) struct WebSocketPublisher { sent: Arc, subs: Arc, term: watch::Sender, @@ -36,7 +36,7 @@ pub struct WebSocketPublisher { } impl WebSocketPublisher { - pub fn new(addr: SocketAddr, metrics: Arc) -> io::Result { + pub(super) fn new(addr: SocketAddr, metrics: Arc) -> io::Result { let (pipe, _) = broadcast::channel(100); let (term, _) = watch::channel(false); @@ -61,7 +61,7 @@ impl WebSocketPublisher { }) } - pub fn publish(&self, payload: &FlashblocksPayloadV1) -> io::Result { + pub(super) fn publish(&self, payload: &FlashblocksPayloadV1) -> io::Result { // Serialize the payload to a UTF-8 string // serialize only once, then just copy around only a pointer // to the serialized data for each subscription. diff --git a/crates/op-rbuilder/src/builders/generator.rs b/crates/op-rbuilder/src/builders/generator.rs index c77930835..3408751c8 100644 --- a/crates/op-rbuilder/src/builders/generator.rs +++ b/crates/op-rbuilder/src/builders/generator.rs @@ -34,7 +34,8 @@ use tracing::info; /// /// Generic parameters `Pool` and `Client` represent the transaction pool and /// Ethereum client types. -pub trait PayloadBuilder: Send + Sync + Clone { +#[async_trait::async_trait] +pub(super) trait PayloadBuilder: Send + Sync + Clone { /// The payload attributes type to accept for building. type Attributes: PayloadBuilderAttributes; /// The type of the built payload. @@ -52,7 +53,7 @@ pub trait PayloadBuilder: Send + Sync + Clone { /// # Returns /// /// A `Result` indicating the build outcome or an error. - fn try_build( + async fn try_build( &self, args: BuildArguments, best_payload: BlockCell, @@ -61,7 +62,7 @@ pub trait PayloadBuilder: Send + Sync + Clone { /// The generator type that creates new jobs that builds empty blocks. #[derive(Debug)] -pub struct BlockPayloadJobGenerator { +pub(super) struct BlockPayloadJobGenerator { /// The client that can interact with the chain. client: Client, /// How to spawn building tasks @@ -87,7 +88,7 @@ pub struct BlockPayloadJobGenerator { impl BlockPayloadJobGenerator { /// Creates a new [EmptyBlockPayloadJobGenerator] with the given config and custom /// [PayloadBuilder] - pub fn with_builder( + pub(super) fn with_builder( client: Client, executor: Tasks, config: BasicPayloadJobGeneratorConfig, @@ -238,7 +239,7 @@ use std::{ }; /// A [PayloadJob] that builds empty blocks. -pub struct BlockPayloadJob +pub(super) struct BlockPayloadJob where Builder: PayloadBuilder, { @@ -296,7 +297,7 @@ where } } -pub struct BuildArguments { +pub(super) struct BuildArguments { /// Previously cached disk reads pub cached_reads: CachedReads, /// How to configure the payload. @@ -313,7 +314,7 @@ where Builder::Attributes: Unpin + Clone, Builder::BuiltPayload: Unpin + Clone, { - pub fn spawn_build_job(&mut self) { + pub(super) fn spawn_build_job(&mut self) { let builder = self.builder.clone(); let payload_config = self.config.clone(); let cell = self.cell.clone(); @@ -329,7 +330,7 @@ where cancel, }; - let result = builder.try_build(args, cell); + let result = builder.try_build(args, cell).await; let _ = tx.send(result); })); } @@ -367,12 +368,12 @@ where } // A future that resolves when a payload becomes available in the BlockCell -pub struct ResolvePayload { +pub(super) struct ResolvePayload { future: WaitForValue, } impl ResolvePayload { - pub fn new(future: WaitForValue) -> Self { + pub(super) fn new(future: WaitForValue) -> Self { Self { future } } } @@ -389,39 +390,39 @@ impl Future for ResolvePayload { } #[derive(Clone)] -pub struct BlockCell { +pub(super) struct BlockCell { inner: Arc>>, notify: Arc, } impl BlockCell { - pub fn new() -> Self { + pub(super) fn new() -> Self { Self { inner: Arc::new(Mutex::new(None)), notify: Arc::new(Notify::new()), } } - pub fn set(&self, value: T) { + pub(super) fn set(&self, value: T) { let mut inner = self.inner.lock().unwrap(); *inner = Some(value); self.notify.notify_one(); } - pub fn get(&self) -> Option { + pub(super) fn get(&self) -> Option { let inner = self.inner.lock().unwrap(); inner.clone() } // Return a future that resolves when value is set - pub fn wait_for_value(&self) -> WaitForValue { + pub(super) fn wait_for_value(&self) -> WaitForValue { WaitForValue { cell: self.clone() } } } #[derive(Clone)] // Future that resolves when a value is set in BlockCell -pub struct WaitForValue { +pub(super) struct WaitForValue { cell: BlockCell, } @@ -605,6 +606,7 @@ mod tests { Cancelled, } + #[async_trait::async_trait] impl PayloadBuilder for MockBuilder where N: OpPayloadPrimitives, @@ -612,7 +614,7 @@ mod tests { type Attributes = OpPayloadBuilderAttributes; type BuiltPayload = MockPayload; - fn try_build( + async fn try_build( &self, args: BuildArguments, _best_payload: BlockCell, diff --git a/crates/op-rbuilder/src/builders/mod.rs b/crates/op-rbuilder/src/builders/mod.rs index 92dc8394c..9dbd949ce 100644 --- a/crates/op-rbuilder/src/builders/mod.rs +++ b/crates/op-rbuilder/src/builders/mod.rs @@ -10,6 +10,7 @@ use reth_optimism_payload_builder::config::OpDAConfig; use crate::{ args::OpRbuilderArgs, flashtestations::args::FlashtestationsArgs, + gas_limiter::args::GasLimiterArgs, traits::{NodeBounds, PoolBounds}, tx_signer::Signer, }; @@ -20,7 +21,11 @@ mod flashblocks; mod generator; mod standard; -pub use builder_tx::BuilderTx; +pub use builder_tx::{ + BuilderTransactionCtx, BuilderTransactionError, BuilderTransactions, get_balance, get_nonce, + log_exists, +}; +pub use context::OpPayloadBuilderCtx; pub use flashblocks::FlashblocksBuilder; pub use standard::StandardBuilder; @@ -114,6 +119,9 @@ pub struct BuilderConfig { pub specific: Specific, /// Maximum gas a transaction can use before being excluded. pub max_gas_per_txn: Option, + + /// Address gas limiter stuff + pub gas_limiter_config: GasLimiterArgs, } impl core::fmt::Debug for BuilderConfig { @@ -132,6 +140,8 @@ impl core::fmt::Debug for BuilderConfig { .field("block_time_leeway", &self.block_time_leeway) .field("da_config", &self.da_config) .field("specific", &self.specific) + .field("max_gas_per_txn", &self.max_gas_per_txn) + .field("gas_limiter_config", &self.gas_limiter_config) .finish() } } @@ -148,6 +158,7 @@ impl Default for BuilderConfig { specific: S::default(), sampling_ratio: 100, max_gas_per_txn: None, + gas_limiter_config: GasLimiterArgs::default(), } } } @@ -168,6 +179,7 @@ where da_config: Default::default(), sampling_ratio: args.telemetry.sampling_ratio, max_gas_per_txn: args.max_gas_per_txn, + gas_limiter_config: args.gas_limiter.clone(), specific: S::try_from(args)?, }) } diff --git a/crates/op-rbuilder/src/builders/standard/builder_tx.rs b/crates/op-rbuilder/src/builders/standard/builder_tx.rs new file mode 100644 index 000000000..c19f627d4 --- /dev/null +++ b/crates/op-rbuilder/src/builders/standard/builder_tx.rs @@ -0,0 +1,64 @@ +use alloy_evm::Database; +use core::fmt::Debug; +use reth_provider::StateProvider; +use reth_revm::State; + +use crate::{ + builders::{ + BuilderTransactionCtx, BuilderTransactionError, BuilderTransactions, + builder_tx::BuilderTxBase, context::OpPayloadBuilderCtx, + }, + flashtestations::service::FlashtestationsBuilderTx, + primitives::reth::ExecutionInfo, + tx_signer::Signer, +}; + +// This will be the end of block transaction of a regular block +#[derive(Debug, Clone)] +pub(super) struct StandardBuilderTx { + pub base_builder_tx: BuilderTxBase, + pub flashtestations_builder_tx: Option, +} + +impl StandardBuilderTx { + pub(super) fn new( + signer: Option, + flashtestations_builder_tx: Option, + ) -> Self { + let base_builder_tx = BuilderTxBase::new(signer); + Self { + base_builder_tx, + flashtestations_builder_tx, + } + } +} + +impl BuilderTransactions for StandardBuilderTx { + fn simulate_builder_txs( + &self, + state_provider: impl StateProvider + Clone, + info: &mut ExecutionInfo, + ctx: &OpPayloadBuilderCtx, + db: &mut State, + ) -> Result, BuilderTransactionError> { + let mut builder_txs = Vec::::new(); + let standard_builder_tx = self.base_builder_tx.simulate_builder_tx(ctx, db)?; + builder_txs.extend(standard_builder_tx.clone()); + if let Some(flashtestations_builder_tx) = &self.flashtestations_builder_tx { + let mut simulation_state = self.simulate_builder_txs_state::<()>( + state_provider.clone(), + standard_builder_tx.iter().collect(), + ctx, + db, + )?; + let flashtestations_builder_txs = flashtestations_builder_tx.simulate_builder_txs( + state_provider, + info, + ctx, + &mut simulation_state, + )?; + builder_txs.extend(flashtestations_builder_txs); + } + Ok(builder_txs) + } +} diff --git a/crates/op-rbuilder/src/builders/standard/mod.rs b/crates/op-rbuilder/src/builders/standard/mod.rs index 98e9b44f7..e26bbc6cc 100644 --- a/crates/op-rbuilder/src/builders/standard/mod.rs +++ b/crates/op-rbuilder/src/builders/standard/mod.rs @@ -1,11 +1,13 @@ -use payload::StandardPayloadBuilderBuilder; -use reth_node_builder::components::BasicPayloadServiceBuilder; - -use crate::traits::{NodeBounds, PoolBounds}; +use crate::{ + builders::standard::service::StandardServiceBuilder, + traits::{NodeBounds, PoolBounds}, +}; use super::BuilderConfig; +mod builder_tx; mod payload; +mod service; /// Block building strategy that builds blocks using the standard approach by /// producing blocks every chain block time. @@ -15,7 +17,7 @@ impl super::PayloadBuilder for StandardBuilder { type Config = (); type ServiceBuilder - = BasicPayloadServiceBuilder + = StandardServiceBuilder where Node: NodeBounds, Pool: PoolBounds; @@ -27,8 +29,6 @@ impl super::PayloadBuilder for StandardBuilder { Node: NodeBounds, Pool: PoolBounds, { - Ok(BasicPayloadServiceBuilder::new( - StandardPayloadBuilderBuilder(config), - )) + Ok(StandardServiceBuilder(config)) } } diff --git a/crates/op-rbuilder/src/builders/standard/payload.rs b/crates/op-rbuilder/src/builders/standard/payload.rs index 295302ec4..66e0adda4 100644 --- a/crates/op-rbuilder/src/builders/standard/payload.rs +++ b/crates/op-rbuilder/src/builders/standard/payload.rs @@ -1,21 +1,22 @@ +use super::super::context::OpPayloadBuilderCtx; use crate::{ - builders::{BuilderConfig, generator::BuildArguments}, - flashtestations::service::spawn_flashtestations_service, + builders::{BuilderConfig, BuilderTransactions, generator::BuildArguments}, + gas_limiter::AddressGasLimiter, metrics::OpRBuilderMetrics, primitives::reth::ExecutionInfo, - traits::{ClientBounds, NodeBounds, PayloadTxsBounds, PoolBounds}, + traits::{ClientBounds, PayloadTxsBounds, PoolBounds}, }; use alloy_consensus::{ BlockBody, EMPTY_OMMER_ROOT_HASH, Header, constants::EMPTY_WITHDRAWALS, proofs, }; use alloy_eips::{eip7685::EMPTY_REQUESTS_HASH, merge::BEACON_NONCE}; +use alloy_evm::Database; use alloy_primitives::U256; use reth::payload::PayloadBuilderAttributes; use reth_basic_payload_builder::{BuildOutcome, BuildOutcomeKind, MissingPayloadBehaviour}; use reth_chain_state::{ExecutedBlock, ExecutedBlockWithTrieUpdates, ExecutedTrieUpdates}; use reth_evm::{ConfigureEvm, execute::BlockBuilder}; use reth_node_api::{Block, PayloadBuilderError}; -use reth_node_builder::{BuilderContext, components::PayloadBuilderBuilder}; use reth_optimism_consensus::{calculate_receipt_root_no_memo_optimism, isthmus}; use reth_optimism_evm::{OpEvmConfig, OpNextBlockEnvAttributes}; use reth_optimism_forks::OpHardforks; @@ -23,69 +24,20 @@ use reth_optimism_node::{OpBuiltPayload, OpPayloadBuilderAttributes}; use reth_optimism_primitives::{OpPrimitives, OpTransactionSigned}; use reth_payload_util::{BestPayloadTransactions, NoopPayloadTransactions, PayloadTransactions}; use reth_primitives::RecoveredBlock; -use reth_provider::{ - ExecutionOutcome, HashedPostStateProvider, ProviderError, StateRootProvider, - StorageRootProvider, -}; +use reth_provider::{ExecutionOutcome, StateProvider}; use reth_revm::{ State, database::StateProviderDatabase, db::states::bundle_state::BundleRetention, }; use reth_transaction_pool::{ BestTransactions, BestTransactionsAttributes, PoolTransaction, TransactionPool, }; -use revm::Database; use std::{sync::Arc, time::Instant}; use tokio_util::sync::CancellationToken; use tracing::{error, info, warn}; -use super::super::context::{OpPayloadBuilderCtx, estimate_gas_for_builder_tx}; - -pub struct StandardPayloadBuilderBuilder(pub BuilderConfig<()>); - -impl PayloadBuilderBuilder for StandardPayloadBuilderBuilder -where - Node: NodeBounds, - Pool: PoolBounds, -{ - type PayloadBuilder = StandardOpPayloadBuilder; - - async fn build_payload_builder( - self, - ctx: &BuilderContext, - pool: Pool, - _evm_config: OpEvmConfig, - ) -> eyre::Result { - if self.0.flashtestations_config.flashtestations_enabled { - match spawn_flashtestations_service(self.0.flashtestations_config.clone(), ctx).await { - Ok(service) => service, - Err(e) => { - tracing::warn!(error = %e, "Failed to spawn flashtestations service, falling back to standard builder tx"); - return Ok(StandardOpPayloadBuilder::new( - OpEvmConfig::optimism(ctx.chain_spec()), - pool, - ctx.provider().clone(), - self.0.clone(), - )); - } - }; - - if self.0.flashtestations_config.enable_block_proofs { - // TODO: flashtestations end of block transaction - } - } - - Ok(StandardOpPayloadBuilder::new( - OpEvmConfig::optimism(ctx.chain_spec()), - pool, - ctx.provider().clone(), - self.0.clone(), - )) - } -} - /// Optimism's payload builder #[derive(Debug, Clone)] -pub struct StandardOpPayloadBuilder { +pub(super) struct StandardOpPayloadBuilder { /// The type responsible for creating the evm. pub evm_config: OpEvmConfig, /// The transaction pool @@ -99,16 +51,22 @@ pub struct StandardOpPayloadBuilder { pub best_transactions: Txs, /// The metrics for the builder pub metrics: Arc, + /// Rate limiting based on gas. This is an optional feature. + pub address_gas_limiter: AddressGasLimiter, + /// The type responsible for creating the builder transactions + pub builder_tx: BuilderTx, } -impl StandardOpPayloadBuilder { +impl StandardOpPayloadBuilder { /// `OpPayloadBuilder` constructor. - pub fn new( + pub(super) fn new( evm_config: OpEvmConfig, pool: Pool, client: Client, config: BuilderConfig<()>, + builder_tx: BuilderTx, ) -> Self { + let address_gas_limiter = AddressGasLimiter::new(config.gas_limiter_config.clone()); Self { pool, client, @@ -116,12 +74,16 @@ impl StandardOpPayloadBuilder { evm_config, best_transactions: (), metrics: Default::default(), + address_gas_limiter, + builder_tx, } } } /// A type that returns a the [`PayloadTransactions`] that should be included in the pool. -pub trait OpPayloadTransactions: Clone + Send + Sync + Unpin + 'static { +pub(super) trait OpPayloadTransactions: + Clone + Send + Sync + Unpin + 'static +{ /// Returns an iterator that yields the transaction in the order they should get included in the /// new payload. fn best_transactions>( @@ -146,11 +108,12 @@ impl OpPayloadTransactions for () { } } -impl reth_basic_payload_builder::PayloadBuilder - for StandardOpPayloadBuilder +impl reth_basic_payload_builder::PayloadBuilder + for StandardOpPayloadBuilder where Pool: PoolBounds, Client: ClientBounds, + BuilderTx: BuilderTransactions + Clone + Send + Sync, Txs: OpPayloadTransactions, { type Attributes = OpPayloadBuilderAttributes; @@ -209,10 +172,11 @@ where } } -impl StandardOpPayloadBuilder +impl StandardOpPayloadBuilder where Pool: PoolBounds, Client: ClientBounds, + BuilderTx: BuilderTransactions + Clone, { /// Constructs an Optimism payload from the transactions sent via the /// Payload attributes by the sequencer. If the `no_tx_pool` argument is passed in @@ -276,27 +240,29 @@ where metrics: self.metrics.clone(), extra_ctx: Default::default(), max_gas_per_txn: self.config.max_gas_per_txn, + address_gas_limiter: self.address_gas_limiter.clone(), }; let builder = OpBuilder::new(best); + self.address_gas_limiter.refresh(ctx.block_number()); + let state_provider = self.client.state_by_block_hash(ctx.parent().hash())?; - let db = StateProviderDatabase::new(state_provider); + let db = StateProviderDatabase::new(&state_provider); let metrics = ctx.metrics.clone(); - if ctx.attributes().no_tx_pool { let state = State::builder() .with_database(db) .with_bundle_update() .build(); - builder.build(state, ctx) + builder.build(state, &state_provider, ctx, self.builder_tx.clone()) } else { // sequencer mode we can reuse cachedreads from previous runs let state = State::builder() .with_database(cached_reads.as_db_mut(db)) .with_bundle_update() .build(); - builder.build(state, ctx) + builder.build(state, &state_provider, ctx, self.builder_tx.clone()) } .map(|out| { let total_block_building_time = block_build_start_time.elapsed(); @@ -328,7 +294,7 @@ where /// And finally /// 5. build the block: compute all roots (txs, state) #[derive(derive_more::Debug)] -pub struct OpBuilder<'a, Txs> { +pub(super) struct OpBuilder<'a, Txs> { /// Yields the best transaction to include if transactions from the mempool are allowed. best: Box Txs + 'a>, } @@ -343,35 +309,36 @@ impl<'a, Txs> OpBuilder<'a, Txs> { /// Holds the state after execution #[derive(Debug)] -pub struct ExecutedPayload { +pub(super) struct ExecutedPayload { /// Tracked execution info pub info: ExecutionInfo, } impl OpBuilder<'_, Txs> { /// Executes the payload and returns the outcome. - pub fn execute( + pub(crate) fn execute( self, - state: &mut State, + state_provider: impl StateProvider, + db: &mut State, ctx: &OpPayloadBuilderCtx, + builder_tx: BuilderTx, ) -> Result, PayloadBuilderError> where - DB: Database + AsRef

+ std::fmt::Debug, - P: StorageRootProvider, + BuilderTx: BuilderTransactions, { let Self { best } = self; info!(target: "payload_builder", id=%ctx.payload_id(), parent_header = ?ctx.parent().hash(), parent_number = ctx.parent().number, "building new payload"); // 1. apply pre-execution changes ctx.evm_config - .builder_for_next_block(state, ctx.parent(), ctx.block_env_attributes.clone()) + .builder_for_next_block(db, ctx.parent(), ctx.block_env_attributes.clone()) .map_err(PayloadBuilderError::other)? .apply_pre_execution_changes()?; let sequencer_tx_start_time = Instant::now(); // 3. execute sequencer transactions - let mut info = ctx.execute_sequencer_transactions(state)?; + let mut info = ctx.execute_sequencer_transactions(db)?; let sequencer_tx_time = sequencer_tx_start_time.elapsed(); ctx.metrics.sequencer_tx_duration.record(sequencer_tx_time); @@ -380,17 +347,24 @@ impl OpBuilder<'_, Txs> { // 4. if mem pool transactions are requested we execute them // gas reserved for builder tx - let message = format!("Block Number: {}", ctx.block_number()) - .as_bytes() - .to_vec(); - let builder_tx_gas = ctx - .builder_signer() - .map_or(0, |_| estimate_gas_for_builder_tx(message.clone())); - let block_gas_limit = ctx.block_gas_limit() - builder_tx_gas; + let builder_txs = + match builder_tx.add_builder_txs(&state_provider, &mut info, ctx, db, true) { + Ok(builder_txs) => builder_txs, + Err(e) => { + error!(target: "payload_builder", "Error adding builder txs to block: {}", e); + vec![] + } + }; + + let builder_tx_gas = builder_txs.iter().fold(0, |acc, tx| acc + tx.gas_used); + let block_gas_limit = ctx.block_gas_limit().saturating_sub(builder_tx_gas); + if block_gas_limit == 0 { + error!( + "Builder tx gas subtraction resulted in block gas limit to be 0. No transactions would be included" + ); + } // Save some space in the block_da_limit for builder tx - let builder_tx_da_size = ctx - .estimate_builder_tx_da_size(state, builder_tx_gas, message.clone()) - .unwrap_or(0); + let builder_tx_da_size = builder_txs.iter().fold(0, |acc, tx| acc + tx.da_size); let block_da_limit = ctx .da_config .max_da_block_size() @@ -416,7 +390,7 @@ impl OpBuilder<'_, Txs> { if ctx .execute_best_transactions( &mut info, - state, + db, &mut best_txs, block_gas_limit, block_da_limit, @@ -428,13 +402,15 @@ impl OpBuilder<'_, Txs> { } // Add builder tx to the block - ctx.add_builder_tx(&mut info, state, builder_tx_gas, message); + if let Err(e) = builder_tx.add_builder_txs(&state_provider, &mut info, ctx, db, false) { + error!(target: "payload_builder", "Error adding builder txs to fallback block: {}", e); + }; let state_merge_start_time = Instant::now(); // merge all transitions into bundle state, this would apply the withdrawal balance changes // and 4788 contract call - state.merge_transitions(BundleRetention::Reverts); + db.merge_transitions(BundleRetention::Reverts); let state_transition_merge_time = state_merge_start_time.elapsed(); ctx.metrics @@ -458,24 +434,32 @@ impl OpBuilder<'_, Txs> { } /// Builds the payload on top of the state. - pub fn build( + pub(super) fn build( self, - mut state: State, + state: impl Database, + state_provider: impl StateProvider, ctx: OpPayloadBuilderCtx, + builder_tx: BuilderTx, ) -> Result, PayloadBuilderError> where - DB: Database + AsRef

+ std::fmt::Debug, - P: StateRootProvider + HashedPostStateProvider + StorageRootProvider, + BuilderTx: BuilderTransactions, { - let ExecutedPayload { info } = match self.execute(&mut state, &ctx)? { - BuildOutcomeKind::Better { payload } | BuildOutcomeKind::Freeze(payload) => payload, - BuildOutcomeKind::Cancelled => return Ok(BuildOutcomeKind::Cancelled), - BuildOutcomeKind::Aborted { fees } => return Ok(BuildOutcomeKind::Aborted { fees }), - }; + let mut db = State::builder() + .with_database(state) + .with_bundle_update() + .build(); + let ExecutedPayload { info } = + match self.execute(&state_provider, &mut db, &ctx, builder_tx)? { + BuildOutcomeKind::Better { payload } | BuildOutcomeKind::Freeze(payload) => payload, + BuildOutcomeKind::Cancelled => return Ok(BuildOutcomeKind::Cancelled), + BuildOutcomeKind::Aborted { fees } => { + return Ok(BuildOutcomeKind::Aborted { fees }); + } + }; let block_number = ctx.block_number(); let execution_outcome = ExecutionOutcome::new( - state.take_bundle(), + db.take_bundle(), vec![info.receipts], block_number, Vec::new(), @@ -496,12 +480,9 @@ impl OpBuilder<'_, Txs> { // calculate the state root let state_root_start_time = Instant::now(); - let state_provider = state.database.as_ref(); let hashed_state = state_provider.hashed_post_state(execution_outcome.state()); let (state_root, trie_output) = { - state - .database - .as_ref() + state_provider .state_root_with_updates(hashed_state.clone()) .inspect_err(|err| { warn!(target: "payload_builder", @@ -525,7 +506,7 @@ impl OpBuilder<'_, Txs> { // `l2tol1-message-passer` ( Some( - isthmus::withdrawals_root(execution_outcome.state(), state.database.as_ref()) + isthmus::withdrawals_root(execution_outcome.state(), state_provider) .map_err(PayloadBuilderError::other)?, ), Some(EMPTY_REQUESTS_HASH), diff --git a/crates/op-rbuilder/src/builders/standard/service.rs b/crates/op-rbuilder/src/builders/standard/service.rs new file mode 100644 index 000000000..c713b69cb --- /dev/null +++ b/crates/op-rbuilder/src/builders/standard/service.rs @@ -0,0 +1,96 @@ +use reth_basic_payload_builder::{BasicPayloadJobGenerator, BasicPayloadJobGeneratorConfig}; +use reth_node_api::NodeTypes; +use reth_node_builder::{BuilderContext, components::PayloadServiceBuilder}; +use reth_optimism_evm::OpEvmConfig; +use reth_payload_builder::{PayloadBuilderHandle, PayloadBuilderService}; +use reth_provider::CanonStateSubscriptions; + +use crate::{ + builders::{ + BuilderConfig, BuilderTransactions, + standard::{builder_tx::StandardBuilderTx, payload::StandardOpPayloadBuilder}, + }, + flashtestations::service::bootstrap_flashtestations, + traits::{NodeBounds, PoolBounds}, +}; + +pub struct StandardServiceBuilder(pub BuilderConfig<()>); + +impl StandardServiceBuilder { + pub fn spawn_payload_builder_service( + self, + evm_config: OpEvmConfig, + ctx: &BuilderContext, + pool: Pool, + builder_tx: BuilderTx, + ) -> eyre::Result::Payload>> + where + Node: NodeBounds, + Pool: PoolBounds, + BuilderTx: BuilderTransactions + Unpin + Clone + Send + Sync + 'static, + { + let payload_builder = StandardOpPayloadBuilder::new( + evm_config, + pool, + ctx.provider().clone(), + self.0.clone(), + builder_tx, + ); + + let conf = ctx.config().builder.clone(); + + let payload_job_config = BasicPayloadJobGeneratorConfig::default() + .interval(conf.interval) + .deadline(conf.deadline) + .max_payload_tasks(conf.max_payload_tasks); + + let payload_generator = BasicPayloadJobGenerator::with_builder( + ctx.provider().clone(), + ctx.task_executor().clone(), + payload_job_config, + payload_builder, + ); + let (payload_service, payload_service_handle) = + PayloadBuilderService::new(payload_generator, ctx.provider().canonical_state_stream()); + + ctx.task_executor() + .spawn_critical("payload builder service", Box::pin(payload_service)); + + Ok(payload_service_handle) + } +} + +impl PayloadServiceBuilder for StandardServiceBuilder +where + Node: NodeBounds, + Pool: PoolBounds, +{ + async fn spawn_payload_builder_service( + self, + ctx: &BuilderContext, + pool: Pool, + evm_config: OpEvmConfig, + ) -> eyre::Result::Payload>> { + let signer = self.0.builder_signer; + let flashtestations_builder_tx = if self.0.flashtestations_config.flashtestations_enabled { + match bootstrap_flashtestations::(self.0.flashtestations_config.clone(), ctx) + .await + { + Ok(builder_tx) => Some(builder_tx), + Err(e) => { + tracing::warn!(error = %e, "Failed to bootstrap flashtestations, builderb will not include flashtestations txs"); + None + } + } + } else { + None + }; + + self.spawn_payload_builder_service( + evm_config, + ctx, + pool, + StandardBuilderTx::new(signer, flashtestations_builder_tx), + ) + } +} diff --git a/crates/op-rbuilder/src/flashtestations/args.rs b/crates/op-rbuilder/src/flashtestations/args.rs index cc4f36463..598a8a8f0 100644 --- a/crates/op-rbuilder/src/flashtestations/args.rs +++ b/crates/op-rbuilder/src/flashtestations/args.rs @@ -1,10 +1,12 @@ use alloy_primitives::{Address, U256, utils::parse_ether}; +use clap::Parser; +use reth_optimism_cli::commands::Commands; -use crate::tx_signer::Signer; +use crate::{args::Cli, tx_signer::Signer}; /// Parameters for Flashtestations configuration /// The names in the struct are prefixed with `flashtestations` -#[derive(Debug, Clone, Default, PartialEq, Eq, clap::Args)] +#[derive(Debug, Clone, PartialEq, Eq, clap::Args)] pub struct FlashtestationsArgs { /// When set to true, the builder will initiate the flashtestations /// workflow within the bootstrapping and block building process. @@ -23,17 +25,32 @@ pub struct FlashtestationsArgs { )] pub debug: bool, - // Debug url for attestations - #[arg(long = "flashtestations.debug-url", env = "FLASHTESTATIONS_DEBUG_URL")] - pub debug_url: Option, + // Debug static key for the tee key. DO NOT USE IN PRODUCTION + #[arg( + long = "flashtestations.debug-tee-key-seed", + env = "FLASHTESTATIONS_DEBUG_TEE_KEY_SEED", + default_value = "debug" + )] + pub debug_tee_key_seed: String, - /// The rpc url to post the onchain attestation requests to + /// Path to save ephemeral TEE key between restarts + #[arg( + long = "flashtestations.tee-key-path", + env = "FLASHTESTATIONS_TEE_KEY_PATH", + default_value = "/run/flashtestation.key" + )] + pub flashtestations_key_path: String, + + // Remote url for attestations #[arg( - long = "flashtestations.rpc-url", - env = "FLASHTESTATIONS_RPC_URL", - default_value = "http://localhost:8545" + long = "flashtestations.quote-provider", + env = "FLASHTESTATIONS_QUOTE_PROVIDER" )] - pub rpc_url: String, + pub quote_provider: Option, + + /// The rpc url to post the onchain attestation requests to + #[arg(long = "flashtestations.rpc-url", env = "FLASHTESTATIONS_RPC_URL")] + pub rpc_url: Option, /// Funding key for the TEE key #[arg( @@ -84,3 +101,13 @@ pub struct FlashtestationsArgs { )] pub builder_proof_version: u8, } + +impl Default for FlashtestationsArgs { + fn default() -> Self { + let args = Cli::parse_from(["dummy", "node"]); + let Commands::Node(node_command) = args.command else { + unreachable!() + }; + node_command.ext.flashtestations + } +} diff --git a/crates/op-rbuilder/src/flashtestations/attestation.rs b/crates/op-rbuilder/src/flashtestations/attestation.rs index e52f588ad..39c99539d 100644 --- a/crates/op-rbuilder/src/flashtestations/attestation.rs +++ b/crates/op-rbuilder/src/flashtestations/attestation.rs @@ -1,6 +1,5 @@ -use std::io::Read; +use reqwest::Client; use tracing::info; -use ureq; const DEBUG_QUOTE_SERVICE_URL: &str = "http://ns31695324.ip-141-94-163.eu:10080/attest"; @@ -9,57 +8,58 @@ const DEBUG_QUOTE_SERVICE_URL: &str = "http://ns31695324.ip-141-94-163.eu:10080/ pub struct AttestationConfig { /// If true, uses the debug HTTP service instead of real TDX hardware pub debug: bool, - /// The URL of the debug HTTP service - pub debug_url: Option, + /// The URL of the quote provider + pub quote_provider: Option, } - -/// Trait for attestation providers -pub trait AttestationProvider { - fn get_attestation(&self, report_data: [u8; 64]) -> eyre::Result>; -} - -/// Debug HTTP service attestation provider -pub struct DebugAttestationProvider { +/// Remote attestation provider +#[derive(Debug, Clone)] +pub struct RemoteAttestationProvider { + client: Client, service_url: String, } -impl DebugAttestationProvider { +impl RemoteAttestationProvider { pub fn new(service_url: String) -> Self { - Self { service_url } + let client = Client::new(); + Self { + client, + service_url, + } } } -impl AttestationProvider for DebugAttestationProvider { - fn get_attestation(&self, report_data: [u8; 64]) -> eyre::Result> { +impl RemoteAttestationProvider { + pub async fn get_attestation(&self, report_data: [u8; 64]) -> eyre::Result> { let report_data_hex = hex::encode(report_data); let url = format!("{}/{}", self.service_url, report_data_hex); info!(target: "flashtestations", url = url, "fetching quote in debug mode"); - let response = ureq::get(&url) + let response = self + .client + .get(&url) .timeout(std::time::Duration::from_secs(10)) - .call()?; - - let mut body = Vec::new(); - response.into_reader().read_to_end(&mut body)?; + .send() + .await? + .error_for_status()?; + let body = response.bytes().await?.to_vec(); Ok(body) } } -pub fn get_attestation_provider( - config: AttestationConfig, -) -> Box { +pub fn get_attestation_provider(config: AttestationConfig) -> RemoteAttestationProvider { if config.debug { - Box::new(DebugAttestationProvider::new( + RemoteAttestationProvider::new( config - .debug_url + .quote_provider .unwrap_or(DEBUG_QUOTE_SERVICE_URL.to_string()), - )) + ) } else { - // TODO: replace with real attestation provider - Box::new(DebugAttestationProvider::new( - DEBUG_QUOTE_SERVICE_URL.to_string(), - )) + RemoteAttestationProvider::new( + config + .quote_provider + .expect("remote quote provider must be specified when not in debug mode"), + ) } } diff --git a/crates/op-rbuilder/src/flashtestations/mod.rs b/crates/op-rbuilder/src/flashtestations/mod.rs index a5b16e734..6f9c2743f 100644 --- a/crates/op-rbuilder/src/flashtestations/mod.rs +++ b/crates/op-rbuilder/src/flashtestations/mod.rs @@ -1,3 +1,98 @@ +use alloy_sol_types::{Error, sol}; +use op_revm::OpHaltReason; + +// https://github.com/flashbots/flashtestations/commit/7cc7f68492fe672a823dd2dead649793aac1f216 +sol!( + #[sol(rpc, abi)] + #[derive(Debug)] + interface IFlashtestationRegistry { + function registerTEEService(bytes calldata rawQuote, bytes calldata extendedRegistrationData) external; + + /// @notice Emitted when a TEE service is registered + /// @param teeAddress The address of the TEE service + /// @param rawQuote The raw quote from the TEE device + /// @param alreadyExists Whether the TEE service is already registered + event TEEServiceRegistered(address indexed teeAddress, bytes rawQuote, bool alreadyExists); + + /// @notice Emitted when the attestation contract is the 0x0 address + error InvalidAttestationContract(); + /// @notice Emitted when the signature is expired because the deadline has passed + error ExpiredSignature(uint256 deadline); + /// @notice Emitted when the quote is invalid according to the Automata DCAP Attestation contract + error InvalidQuote(bytes output); + /// @notice Emitted when the report data length is too short + error InvalidReportDataLength(uint256 length); + /// @notice Emitted when the registration data hash does not match the expected hash + error InvalidRegistrationDataHash(bytes32 expected, bytes32 received); + /// @notice Emitted when the byte size is exceeded + error ByteSizeExceeded(uint256 size); + /// @notice Emitted when the TEE service is already registered when registering + error TEEServiceAlreadyRegistered(address teeAddress); + /// @notice Emitted when the signer doesn't match the TEE address + error SignerMustMatchTEEAddress(address signer, address teeAddress); + /// @notice Emitted when the TEE service is not registered + error TEEServiceNotRegistered(address teeAddress); + /// @notice Emitted when the TEE service is already invalid when trying to invalidate a TEE registration + error TEEServiceAlreadyInvalid(address teeAddress); + /// @notice Emitted when the TEE service is still valid when trying to invalidate a TEE registration + error TEEIsStillValid(address teeAddress); + /// @notice Emitted when the nonce is invalid when verifying a signature + error InvalidNonce(uint256 expected, uint256 provided); + } + + #[sol(rpc, abi)] + #[derive(Debug)] + interface IBlockBuilderPolicy { + function verifyBlockBuilderProof(uint8 version, bytes32 blockContentHash) external; + + /// @notice Emitted when a block builder proof is successfully verified + /// @param caller The address that called the verification function (TEE address) + /// @param workloadId The workload identifier of the TEE + /// @param version The flashtestation protocol version used + /// @param blockContentHash The hash of the block content + /// @param commitHash The git commit hash associated with the workload + event BlockBuilderProofVerified( + address caller, bytes32 workloadId, uint8 version, bytes32 blockContentHash, string commitHash + ); + + /// @notice Emitted when the registry is the 0x0 address + error InvalidRegistry(); + /// @notice Emitted when a workload to be added is already in the policy + error WorkloadAlreadyInPolicy(); + /// @notice Emitted when a workload to be removed is not in the policy + error WorkloadNotInPolicy(); + /// @notice Emitted when the address is not in the approvedWorkloads mapping + error UnauthorizedBlockBuilder(address caller); + /// @notice Emitted when the nonce is invalid + error InvalidNonce(uint256 expected, uint256 provided); + /// @notice Emitted when the commit hash is empty + error EmptyCommitHash(); + /// @notice Emitted when the source locators array is empty + error EmptySourceLocators(); + } + + struct BlockData { + bytes32 parentHash; + uint256 blockNumber; + uint256 timestamp; + bytes32[] transactionHashes; + } + + type WorkloadId is bytes32; +); + +#[derive(Debug, thiserror::Error)] +pub enum FlashtestationRevertReason { + #[error("flashtestation registry error: {0:?}")] + FlashtestationRegistry(IFlashtestationRegistry::IFlashtestationRegistryErrors), + #[error("block builder policy error: {0:?}")] + BlockBuilderPolicy(IBlockBuilderPolicy::IBlockBuilderPolicyErrors), + #[error("unknown revert: {0} err: {1}")] + Unknown(String, Error), + #[error("halt: {0:?}")] + Halt(OpHaltReason), +} + pub mod args; pub mod attestation; pub mod service; diff --git a/crates/op-rbuilder/src/flashtestations/service.rs b/crates/op-rbuilder/src/flashtestations/service.rs index 411ef4bfc..237aef7dd 100644 --- a/crates/op-rbuilder/src/flashtestations/service.rs +++ b/crates/op-rbuilder/src/flashtestations/service.rs @@ -1,180 +1,210 @@ -use std::sync::Arc; - -use alloy_primitives::U256; +use alloy_primitives::{B256, Bytes, keccak256}; use reth_node_builder::BuilderContext; -use reth_optimism_primitives::OpTransactionSigned; -use reth_primitives::Recovered; +use reth_provider::StateProvider; +use reth_revm::State; +use revm::Database; +use std::{ + fmt::Debug, + fs::{self, OpenOptions}, + io::Write, + os::unix::fs::OpenOptionsExt, + path::Path, +}; use tracing::{info, warn}; use crate::{ - builders::BuilderTx, + builders::{ + BuilderTransactionCtx, BuilderTransactionError, BuilderTransactions, OpPayloadBuilderCtx, + }, + primitives::reth::ExecutionInfo, traits::NodeBounds, - tx_signer::{Signer, generate_ethereum_keypair}, + tx_signer::{Signer, generate_key_from_seed, generate_signer}, }; use super::{ args::FlashtestationsArgs, - attestation::{AttestationConfig, AttestationProvider, get_attestation_provider}, + attestation::{AttestationConfig, get_attestation_provider}, tx_manager::TxManager, }; -#[derive(Clone)] -pub struct FlashtestationsService { - // Attestation provider generating attestations - attestation_provider: Arc>, - // Handles the onchain attestation and TEE block building proofs - tx_manager: TxManager, - // TEE service generated key - tee_service_signer: Signer, - // Funding amount for the TEE signer - funding_amount: U256, -} - -// TODO: FlashtestationsService error types -impl FlashtestationsService { - pub fn new(args: FlashtestationsArgs) -> Self { - let (private_key, public_key, address) = generate_ethereum_keypair(); - let tee_service_signer = Signer { - address, - pubkey: public_key, - secret: private_key, - }; - - let attestation_provider = Arc::new(get_attestation_provider(AttestationConfig { - debug: args.debug, - debug_url: args.debug_url, - })); - - let tx_manager = TxManager::new( - tee_service_signer, - args.funding_key - .expect("funding key required when flashtestations enabled"), - args.rpc_url, - args.registry_address - .expect("registry address required when flashtestations enabled"), - args.builder_policy_address - .expect("builder policy address required when flashtestations enabled"), - args.builder_proof_version, - ); - - Self { - attestation_provider, - tx_manager, - tee_service_signer, - funding_amount: args.funding_amount, - } - } - - pub async fn bootstrap(&self) -> eyre::Result<()> { - // Prepare report data with public key (64 bytes, no 0x04 prefix) - let mut report_data = [0u8; 64]; - let pubkey_uncompressed = self.tee_service_signer.pubkey.serialize_uncompressed(); - report_data.copy_from_slice(&pubkey_uncompressed[1..65]); // Skip 0x04 prefix - - // Request TDX attestation - info!(target: "flashtestations", "requesting TDX attestation"); - let attestation = self.attestation_provider.get_attestation(report_data)?; - - // Submit report onchain by registering the key of the tee service - self.tx_manager - .fund_and_register_tee_service(attestation, self.funding_amount) - .await - } - - pub async fn clean_up(&self) -> eyre::Result<()> { - self.tx_manager.clean_up().await - } -} - -impl BuilderTx for FlashtestationsService { - fn estimated_builder_tx_gas(&self) -> u64 { - todo!() - } - - fn estimated_builder_tx_da_size(&self) -> Option { - todo!() - } - - fn signed_builder_tx(&self) -> Result, secp256k1::Error> { - todo!() - } -} - -pub async fn spawn_flashtestations_service( +pub async fn bootstrap_flashtestations( args: FlashtestationsArgs, ctx: &BuilderContext, -) -> eyre::Result +) -> eyre::Result where Node: NodeBounds, { - info!("Flashtestations enabled"); + let tee_service_signer = load_or_generate_tee_key( + &args.flashtestations_key_path, + args.debug, + &args.debug_tee_key_seed, + )?; + + info!( + "Flashtestations TEE address: {}", + tee_service_signer.address + ); + + let funding_key = args + .funding_key + .expect("funding key required when flashtestations enabled"); + let registry_address = args + .registry_address + .expect("registry address required when flashtestations enabled"); + let _builder_policy_address = args + .builder_policy_address + .expect("builder policy address required when flashtestations enabled"); + + let attestation_provider = get_attestation_provider(AttestationConfig { + debug: args.debug, + quote_provider: args.quote_provider, + }); + + // Prepare report data: + // - TEE address (20 bytes) at reportData[0:20] + // - Extended registration data hash (32 bytes) at reportData[20:52] + // - Total: 52 bytes, padded to 64 bytes with zeros + + // Extract TEE address as 20 bytes + let tee_address_bytes: [u8; 20] = tee_service_signer.address.into(); + + // Calculate keccak256 hash of empty bytes (32 bytes) + let ext_data = Bytes::from(b""); + let ext_data_hash = keccak256(&ext_data); + + // Create 64-byte report data array + let mut report_data = [0u8; 64]; + + // Copy TEE address (20 bytes) to positions 0-19 + report_data[0..20].copy_from_slice(&tee_address_bytes); + + // Copy extended registration data hash (32 bytes) to positions 20-51 + report_data[20..52].copy_from_slice(ext_data_hash.as_ref()); + + // Request TDX attestation + info!(target: "flashtestations", "requesting TDX attestation"); + let attestation = attestation_provider.get_attestation(report_data).await?; + + #[allow(dead_code)] + let (tx_manager, _registered) = if let Some(rpc_url) = args.rpc_url { + let tx_manager = TxManager::new( + tee_service_signer, + funding_key, + rpc_url.clone(), + registry_address, + ); + // Submit report onchain by registering the key of the tee service + match tx_manager + .fund_and_register_tee_service( + attestation.clone(), + ext_data.clone(), + args.funding_amount, + ) + .await + { + Ok(_) => (Some(tx_manager), true), + Err(e) => { + warn!(error = %e, "Failed to register tee service via rpc"); + (Some(tx_manager), false) + } + } + } else { + (None, false) + }; - let flashtestations_service = FlashtestationsService::new(args.clone()); - // Generates new key and registers the attestation onchain - flashtestations_service.bootstrap().await?; + let flashtestations_builder_tx = FlashtestationsBuilderTx {}; - let flashtestations_clone = flashtestations_service.clone(); ctx.task_executor() .spawn_critical_with_graceful_shutdown_signal( "flashtestations clean up task", |shutdown| { Box::pin(async move { let graceful_guard = shutdown.await; - if let Err(e) = flashtestations_clone.clean_up().await { - warn!( - error = %e, - "Failed to complete clean up for flashtestations service", - ) - }; + if let Some(tx_manager) = tx_manager { + if let Err(e) = tx_manager.clean_up().await { + warn!( + error = %e, + "Failed to complete clean up for flashtestations service", + ); + } + } drop(graceful_guard) }) }, ); - Ok(flashtestations_service) + Ok(flashtestations_builder_tx) } -#[cfg(test)] -mod tests { - use alloy_primitives::Address; - use secp256k1::{PublicKey, Secp256k1, SecretKey}; - use sha3::{Digest, Keccak256}; +/// Load ephemeral TEE key from file, or generate and save a new one +fn load_or_generate_tee_key(key_path: &str, debug: bool, debug_seed: &str) -> eyre::Result { + if debug { + info!("Flashtestations debug mode enabled, generating debug key from seed"); + return Ok(generate_key_from_seed(debug_seed)); + } - use crate::tx_signer::public_key_to_address; + let path = Path::new(key_path); - /// Derives Ethereum address from report data using the same logic as the Solidity contract - fn derive_ethereum_address_from_report_data(pubkey_64_bytes: &[u8]) -> Address { - // This exactly matches the Solidity implementation: - // address(uint160(uint256(keccak256(reportData)))) + if let Some(signer) = load_tee_key(path) { + return Ok(signer); + } - // Step 1: keccak256(reportData) - let hash = Keccak256::digest(pubkey_64_bytes); + // Generate new key + info!("Generating new ephemeral TEE key"); + let signer = generate_signer(); - // Step 2: Take last 20 bytes (same as uint256 -> uint160 conversion) - let mut address_bytes = [0u8; 20]; - address_bytes.copy_from_slice(&hash[12..32]); + let key_hex = hex::encode(signer.secret.secret_bytes()); - Address::from(address_bytes) - } + // Create file with 0600 permissions atomically + OpenOptions::new() + .write(true) + .create(true) + .truncate(true) + .mode(0o600) + .open(path) + .and_then(|mut file| file.write_all(key_hex.as_bytes())) + .inspect_err(|e| warn!("Failed to write key to {}: {:?}", key_path, e)) + .ok(); - #[test] - fn test_address_derivation_matches() { - // Test that our manual derivation is correct - let secp = Secp256k1::new(); - let private_key = SecretKey::from_slice(&[0x01; 32]).unwrap(); - let public_key = PublicKey::from_secret_key(&secp, &private_key); + Ok(signer) +} - // Get address using our implementation - let our_address = public_key_to_address(&public_key); +fn load_tee_key(path: &Path) -> Option { + // Try to load existing key + if !path.exists() { + return None; + } - // Get address using our manual derivation (matching Solidity) - let pubkey_bytes = public_key.serialize_uncompressed(); - let report_data = &pubkey_bytes[1..65]; // Skip 0x04 prefix - let manual_address = derive_ethereum_address_from_report_data(report_data); + info!("Loading TEE key from {:?}", path); + let key_hex = fs::read_to_string(path) + .inspect_err(|e| warn!("failed to read key file: {:?}", e)) + .ok()?; + + let secret_bytes = B256::try_from( + hex::decode(key_hex.trim()) + .inspect_err(|e| warn!("failed to decode hex from file {:?}", e)) + .ok()? + .as_slice(), + ) + .inspect_err(|e| warn!("failed to parse key from file: {:?}", e)) + .ok()?; + + Signer::try_from_secret(secret_bytes) + .inspect_err(|e| warn!("failed to create signer from key: {:?}", e)) + .ok() +} - assert_eq!( - our_address, manual_address, - "Address derivation should match" - ); +#[derive(Debug, Clone)] +pub struct FlashtestationsBuilderTx {} + +impl BuilderTransactions for FlashtestationsBuilderTx { + fn simulate_builder_txs( + &self, + _state_provider: impl StateProvider + Clone, + _info: &mut ExecutionInfo, + _ctx: &OpPayloadBuilderCtx, + _db: &mut State, + ) -> Result, BuilderTransactionError> { + Ok(vec![]) } } diff --git a/crates/op-rbuilder/src/flashtestations/tx_manager.rs b/crates/op-rbuilder/src/flashtestations/tx_manager.rs index 9eabdd28a..a49f50a36 100644 --- a/crates/op-rbuilder/src/flashtestations/tx_manager.rs +++ b/crates/op-rbuilder/src/flashtestations/tx_manager.rs @@ -1,41 +1,34 @@ -use alloy_consensus::TxEip1559; -use alloy_eips::Encodable2718; +use alloy_json_rpc::RpcError; use alloy_network::ReceiptResponse; -use alloy_primitives::{Address, B256, Bytes, TxHash, TxKind, U256, keccak256}; +use alloy_primitives::{Address, Bytes, TxHash, TxKind, U256}; use alloy_rpc_types_eth::TransactionRequest; -use alloy_transport::TransportResult; -use op_alloy_consensus::OpTypedTransaction; -use reth_optimism_node::OpBuiltPayload; -use reth_optimism_primitives::OpTransactionSigned; -use reth_primitives::Recovered; +use alloy_sol_types::SolCall; +use alloy_transport::{TransportError, TransportErrorKind, TransportResult}; +use k256::ecdsa; use std::time::Duration; -use alloy_provider::{PendingTransactionBuilder, Provider, ProviderBuilder}; +use alloy_provider::{ + PendingTransactionBuilder, PendingTransactionError, Provider, ProviderBuilder, +}; use alloy_signer_local::PrivateKeySigner; -use alloy_sol_types::{SolCall, SolValue, sol}; use op_alloy_network::Optimism; -use tracing::{debug, error, info}; - -use crate::tx_signer::Signer; - -sol!( - #[sol(rpc, abi)] - interface IFlashtestationRegistry { - function registerTEEService(bytes calldata rawQuote) external; - } - - #[sol(rpc, abi)] - interface IBlockBuilderPolicy { - function verifyBlockBuilderProof(uint8 version, bytes32 blockContentHash) external; - } - - struct BlockData { - bytes32 parentHash; - uint256 blockNumber; - uint256 timestamp; - bytes32[] transactionHashes; - } -); +use tracing::{debug, info, warn}; + +use crate::{flashtestations::IFlashtestationRegistry, tx_signer::Signer}; + +#[derive(Debug, thiserror::Error)] +pub enum TxManagerError { + #[error("rpc error: {0}")] + RpcError(#[from] TransportError), + #[error("tx reverted: {0}")] + TxReverted(TxHash), + #[error("error checking tx confirmation: {0}")] + TxConfirmationError(PendingTransactionError), + #[error("tx rpc error: {0}")] + TxRpcError(RpcError), + #[error("signer error: {0}")] + SignerError(ecdsa::Error), +} #[derive(Debug, Clone)] pub struct TxManager { @@ -43,8 +36,6 @@ pub struct TxManager { funding_signer: Signer, rpc_url: String, registry_address: Address, - builder_policy_address: Address, - builder_proof_version: u8, } impl TxManager { @@ -53,21 +44,23 @@ impl TxManager { funding_signer: Signer, rpc_url: String, registry_address: Address, - builder_policy_address: Address, - builder_proof_version: u8, ) -> Self { Self { tee_service_signer, funding_signer, rpc_url, registry_address, - builder_policy_address, - builder_proof_version, } } - pub async fn fund_address(&self, from: Signer, to: Address, amount: U256) -> eyre::Result<()> { - let funding_wallet = PrivateKeySigner::from_bytes(&from.secret.secret_bytes().into())?; + pub async fn fund_address( + &self, + from: Signer, + to: Address, + amount: U256, + ) -> Result<(), TxManagerError> { + let funding_wallet = PrivateKeySigner::from_bytes(&from.secret.secret_bytes().into()) + .map_err(TxManagerError::SignerError)?; let provider = ProviderBuilder::new() .disable_recommended_fillers() .fetch_chain_id() @@ -91,36 +84,41 @@ impl TxManager { match Self::process_pending_tx(provider.send_transaction(funding_tx.into()).await).await { Ok(tx_hash) => { info!(target: "flashtestations", tx_hash = %tx_hash, "funding transaction confirmed successfully"); + Ok(()) } Err(e) => { - error!(target: "flashtestations", error = %e, "funding transaction failed"); - return Err(e); + warn!(target: "flashtestations", error = %e, "funding transaction failed"); + Err(e) } } - - Ok(()) } pub async fn fund_and_register_tee_service( &self, attestation: Vec, + extra_registration_data: Bytes, funding_amount: U256, - ) -> eyre::Result<()> { + ) -> Result<(), TxManagerError> { info!(target: "flashtestations", "funding TEE address at {}", self.tee_service_signer.address); self.fund_address( self.funding_signer, self.tee_service_signer.address, funding_amount, ) - .await?; + .await + .unwrap_or_else(|e| { + warn!(target: "flashtestations", error = %e, "Failed to fund TEE address, attempting to register without funding"); + }); let quote_bytes = Bytes::from(attestation); let wallet = - PrivateKeySigner::from_bytes(&self.tee_service_signer.secret.secret_bytes().into())?; + PrivateKeySigner::from_bytes(&self.tee_service_signer.secret.secret_bytes().into()) + .map_err(TxManagerError::SignerError)?; let provider = ProviderBuilder::new() .disable_recommended_fillers() .fetch_chain_id() .with_gas_estimation() + .with_cached_nonce_management() .wallet(wallet) .network::() .connect(self.rpc_url.as_str()) @@ -128,16 +126,14 @@ impl TxManager { info!(target: "flashtestations", "submitting quote to registry at {}", self.registry_address); - // TODO: add retries let calldata = IFlashtestationRegistry::registerTEEServiceCall { rawQuote: quote_bytes, + extendedRegistrationData: extra_registration_data, } .abi_encode(); let tx = TransactionRequest { from: Some(self.tee_service_signer.address), to: Some(TxKind::Call(self.registry_address)), - // gas: Some(10_000_000), // Set gas limit manually as the contract is gas heavy - nonce: Some(0), input: calldata.into(), ..Default::default() }; @@ -147,43 +143,13 @@ impl TxManager { Ok(()) } Err(e) => { - error!(target: "flashtestations", error = %e, "attestation transaction failed to be sent"); + warn!(target: "flashtestations", error = %e, "attestation transaction failed to be sent"); Err(e) } } } - pub fn signed_block_builder_proof( - &self, - payload: OpBuiltPayload, - gas_limit: u64, - base_fee: u64, - chain_id: u64, - nonce: u64, - ) -> Result, secp256k1::Error> { - let block_content_hash = Self::compute_block_content_hash(payload); - - info!(target: "flashtestations", block_content_hash = ?block_content_hash, "submitting block builder proof transaction"); - let calldata = IBlockBuilderPolicy::verifyBlockBuilderProofCall { - version: self.builder_proof_version, - blockContentHash: block_content_hash, - } - .abi_encode(); - // Create the EIP-1559 transaction - let tx = OpTypedTransaction::Eip1559(TxEip1559 { - chain_id, - nonce, - gas_limit, - max_fee_per_gas: base_fee.into(), - max_priority_fee_per_gas: 0, - to: TxKind::Call(self.builder_policy_address), - input: calldata.into(), - ..Default::default() - }); - self.tee_service_signer.sign_tx(tx) - } - - pub async fn clean_up(&self) -> eyre::Result<()> { + pub async fn clean_up(&self) -> Result<(), TxManagerError> { info!(target: "flashtestations", "sending funds back from TEE generated key to funding address"); let provider = ProviderBuilder::new() .disable_recommended_fillers() @@ -202,7 +168,7 @@ impl TxManager { self.funding_signer.address, balance.saturating_sub(gas_cost), ) - .await? + .await?; } Ok(()) } @@ -210,7 +176,7 @@ impl TxManager { /// Processes a pending transaction and logs whether the transaction succeeded or not async fn process_pending_tx( pending_tx_result: TransportResult>, - ) -> eyre::Result { + ) -> Result { match pending_tx_result { Ok(pending_tx) => { let tx_hash = *pending_tx.tx_hash(); @@ -226,42 +192,13 @@ impl TxManager { if receipt.status() { Ok(receipt.transaction_hash()) } else { - Err(eyre::eyre!("Transaction reverted: {}", tx_hash)) + Err(TxManagerError::TxReverted(tx_hash)) } } - Err(e) => Err(e.into()), + Err(e) => Err(TxManagerError::TxConfirmationError(e)), } } - Err(e) => Err(e.into()), + Err(e) => Err(TxManagerError::TxRpcError(e)), } } - - /// Computes the block content hash according to the formula: - /// keccak256(abi.encode(parentHash, blockNumber, timestamp, transactionHashes)) - fn compute_block_content_hash(payload: OpBuiltPayload) -> B256 { - let block = payload.block(); - let body = block.clone().into_body(); - let transactions = body.transactions(); - - // Create ordered list of transaction hashes - let transaction_hashes: Vec = transactions - .map(|tx| { - // RLP encode the transaction and hash it - let mut encoded = Vec::new(); - tx.encode_2718(&mut encoded); - keccak256(&encoded) - }) - .collect(); - - // Create struct and ABI encode - let block_data = BlockData { - parentHash: block.parent_hash, - blockNumber: U256::from(block.number), - timestamp: U256::from(block.timestamp), - transactionHashes: transaction_hashes, - }; - - let encoded = block_data.abi_encode(); - keccak256(&encoded) - } } diff --git a/crates/op-rbuilder/src/gas_limiter/args.rs b/crates/op-rbuilder/src/gas_limiter/args.rs new file mode 100644 index 000000000..ec7f8008b --- /dev/null +++ b/crates/op-rbuilder/src/gas_limiter/args.rs @@ -0,0 +1,28 @@ +use clap::Args; + +#[derive(Debug, Clone, Default, PartialEq, Eq, Args)] +pub struct GasLimiterArgs { + /// Enable address-based gas rate limiting + #[arg(long = "gas-limiter.enabled", env)] + pub gas_limiter_enabled: bool, + + /// Maximum gas per address in token bucket. Defaults to 10 million gas. + #[arg( + long = "gas-limiter.max-gas-per-address", + env, + default_value = "10000000" + )] + pub max_gas_per_address: u64, + + /// Gas refill rate per block. Defaults to 1 million gas per block. + #[arg( + long = "gas-limiter.refill-rate-per-block", + env, + default_value = "1000000" + )] + pub refill_rate_per_block: u64, + + /// How many blocks to wait before cleaning up stale buckets for addresses. + #[arg(long = "gas-limiter.cleanup-interval", env, default_value = "100")] + pub cleanup_interval: u64, +} diff --git a/crates/op-rbuilder/src/gas_limiter/error.rs b/crates/op-rbuilder/src/gas_limiter/error.rs new file mode 100644 index 000000000..a85b7f77c --- /dev/null +++ b/crates/op-rbuilder/src/gas_limiter/error.rs @@ -0,0 +1,13 @@ +use alloy_primitives::Address; + +#[derive(Debug, thiserror::Error)] +pub enum GasLimitError { + #[error( + "Address {address} exceeded gas limit: {requested} gwei requested, {available} gwei available" + )] + AddressLimitExceeded { + address: Address, + requested: u64, + available: u64, + }, +} diff --git a/crates/op-rbuilder/src/gas_limiter/metrics.rs b/crates/op-rbuilder/src/gas_limiter/metrics.rs new file mode 100644 index 000000000..f78986570 --- /dev/null +++ b/crates/op-rbuilder/src/gas_limiter/metrics.rs @@ -0,0 +1,47 @@ +use std::time::Duration; + +use metrics::{Counter, Gauge, Histogram}; +use reth_metrics::Metrics; + +use crate::gas_limiter::error::GasLimitError; + +#[derive(Metrics, Clone)] +#[metrics(scope = "op_rbuilder.gas_limiter")] +pub(super) struct GasLimiterMetrics { + /// Transactions rejected by gas limits Labeled by reason: "per_address", + /// "global", "burst" + pub rejections: Counter, + + /// Time spent in rate limiting logic + pub check_time: Histogram, + + /// Number of addresses with active budgets + pub active_address_count: Gauge, + + /// Time to refill buckets + pub refresh_duration: Histogram, +} + +impl GasLimiterMetrics { + pub(super) fn record_gas_check( + &self, + check_result: &Result, + duration: Duration, + ) { + if let Ok(created_new_bucket) = check_result { + if *created_new_bucket { + self.active_address_count.increment(1); + } + } else { + self.rejections.increment(1); + } + + self.check_time.record(duration); + } + + pub(super) fn record_refresh(&self, removed_addresses: usize, duration: Duration) { + self.active_address_count + .decrement(removed_addresses as f64); + self.refresh_duration.record(duration); + } +} diff --git a/crates/op-rbuilder/src/gas_limiter/mod.rs b/crates/op-rbuilder/src/gas_limiter/mod.rs new file mode 100644 index 000000000..327a6749d --- /dev/null +++ b/crates/op-rbuilder/src/gas_limiter/mod.rs @@ -0,0 +1,223 @@ +use std::{cmp::min, sync::Arc, time::Instant}; + +use alloy_primitives::Address; +use dashmap::DashMap; + +use crate::gas_limiter::{args::GasLimiterArgs, error::GasLimitError, metrics::GasLimiterMetrics}; + +pub mod args; +pub mod error; +mod metrics; + +#[derive(Debug, Clone)] +pub struct AddressGasLimiter { + inner: Option, +} + +#[derive(Debug, Clone)] +struct AddressGasLimiterInner { + config: GasLimiterArgs, + // We don't need an Arc> here, we can get away with RefCell, but + // the reth PayloadBuilder trait needs this to be Send + Sync + address_buckets: Arc>, + metrics: GasLimiterMetrics, +} + +#[derive(Debug, Clone)] +struct TokenBucket { + capacity: u64, + available: u64, +} + +impl AddressGasLimiter { + pub fn new(config: GasLimiterArgs) -> Self { + Self { + inner: AddressGasLimiterInner::try_new(config), + } + } + + /// Check if there's enough gas for this address and consume it. Returns + /// Ok(()) if there's enough otherwise returns an error. + pub fn consume_gas(&self, address: Address, gas_requested: u64) -> Result<(), GasLimitError> { + if let Some(inner) = &self.inner { + inner.consume_gas(address, gas_requested) + } else { + Ok(()) + } + } + + /// Should be called upon each new block. Refills buckets/Garbage collection + pub fn refresh(&self, block_number: u64) { + if let Some(inner) = self.inner.as_ref() { + inner.refresh(block_number) + } + } +} + +impl AddressGasLimiterInner { + fn try_new(config: GasLimiterArgs) -> Option { + if !config.gas_limiter_enabled { + return None; + } + + Some(Self { + config, + address_buckets: Default::default(), + metrics: Default::default(), + }) + } + + fn consume_gas_inner( + &self, + address: Address, + gas_requested: u64, + ) -> Result { + let mut created_new_bucket = false; + let mut bucket = self + .address_buckets + .entry(address) + // if we don't find a bucket we need to initialize a new one + .or_insert_with(|| { + created_new_bucket = true; + TokenBucket::new(self.config.max_gas_per_address) + }); + + if gas_requested > bucket.available { + return Err(GasLimitError::AddressLimitExceeded { + address, + requested: gas_requested, + available: bucket.available, + }); + } + + bucket.available -= gas_requested; + + Ok(created_new_bucket) + } + + fn consume_gas(&self, address: Address, gas_requested: u64) -> Result<(), GasLimitError> { + let start = Instant::now(); + let result = self.consume_gas_inner(address, gas_requested); + + self.metrics.record_gas_check(&result, start.elapsed()); + + result.map(|_| ()) + } + + fn refresh_inner(&self, block_number: u64) -> usize { + let active_addresses = self.address_buckets.len(); + + self.address_buckets.iter_mut().for_each(|mut bucket| { + bucket.available = min( + bucket.capacity, + bucket.available + self.config.refill_rate_per_block, + ) + }); + + // Only clean up stale buckets every `cleanup_interval` blocks + if block_number % self.config.cleanup_interval == 0 { + self.address_buckets + .retain(|_, bucket| bucket.available <= bucket.capacity); + } + + active_addresses - self.address_buckets.len() + } + + fn refresh(&self, block_number: u64) { + let start = Instant::now(); + let removed_addresses = self.refresh_inner(block_number); + + self.metrics + .record_refresh(removed_addresses, start.elapsed()); + } +} + +impl TokenBucket { + fn new(capacity: u64) -> Self { + Self { + capacity, + available: capacity, + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use alloy_primitives::Address; + + fn create_test_config(max_gas: u64, refill_rate: u64, cleanup_interval: u64) -> GasLimiterArgs { + GasLimiterArgs { + gas_limiter_enabled: true, + max_gas_per_address: max_gas, + refill_rate_per_block: refill_rate, + cleanup_interval, + } + } + + fn test_address() -> Address { + Address::from([1u8; 20]) + } + + #[test] + fn test_basic_refill() { + let config = create_test_config(1000, 200, 10); + let limiter = AddressGasLimiter::new(config); + + // Consume all gas + assert!(limiter.consume_gas(test_address(), 1000).is_ok()); + assert!(limiter.consume_gas(test_address(), 1).is_err()); + + // Refill and check available gas increased + limiter.refresh(1); + assert!(limiter.consume_gas(test_address(), 200).is_ok()); + assert!(limiter.consume_gas(test_address(), 1).is_err()); + } + + #[test] + fn test_over_capacity_request() { + let config = create_test_config(1000, 100, 10); + let limiter = AddressGasLimiter::new(config); + + // Request more than capacity should fail + let result = limiter.consume_gas(test_address(), 1500); + assert!(result.is_err()); + + if let Err(GasLimitError::AddressLimitExceeded { available, .. }) = result { + assert_eq!(available, 1000); + } + + // Bucket should still be full after failed request + assert!(limiter.consume_gas(test_address(), 1000).is_ok()); + } + + #[test] + fn test_multiple_users() { + // Simulate more realistic scenario + let config = create_test_config(10_000_000, 1_000_000, 100); // 10M max, 1M refill + let limiter = AddressGasLimiter::new(config); + + let searcher1 = Address::from([0x1; 20]); + let searcher2 = Address::from([0x2; 20]); + let attacker = Address::from([0x3; 20]); + + // Normal searchers use reasonable amounts + assert!(limiter.consume_gas(searcher1, 500_000).is_ok()); + assert!(limiter.consume_gas(searcher2, 750_000).is_ok()); + + // Attacker tries to consume massive amounts + assert!(limiter.consume_gas(attacker, 15_000_000).is_err()); // Should fail - over capacity + assert!(limiter.consume_gas(attacker, 5_000_000).is_ok()); // Should succeed - within capacity + + // Attacker tries to consume more + assert!(limiter.consume_gas(attacker, 6_000_000).is_err()); // Should fail - would exceed remaining + + // New block - refill + limiter.refresh(1); + + // Everyone should get some gas back + assert!(limiter.consume_gas(searcher1, 1_000_000).is_ok()); // Had 9.5M + 1M refill, now 9.5M + assert!(limiter.consume_gas(searcher2, 1_000_000).is_ok()); // Had 9.25M + 1M refill, now 9.25M + assert!(limiter.consume_gas(attacker, 1_000_000).is_ok()); // Had 5M + 1M refill, now 5M + } +} diff --git a/crates/op-rbuilder/src/lib.rs b/crates/op-rbuilder/src/lib.rs index 9449e98c3..7817ba2d0 100644 --- a/crates/op-rbuilder/src/lib.rs +++ b/crates/op-rbuilder/src/lib.rs @@ -1,6 +1,7 @@ pub mod args; pub mod builders; pub mod flashtestations; +pub mod gas_limiter; pub mod launcher; pub mod metrics; mod monitor_tx_pool; diff --git a/crates/op-rbuilder/src/metrics.rs b/crates/op-rbuilder/src/metrics.rs index 79658f765..dd43d9580 100644 --- a/crates/op-rbuilder/src/metrics.rs +++ b/crates/op-rbuilder/src/metrics.rs @@ -21,6 +21,10 @@ pub const VERGEN_CARGO_TARGET_TRIPLE: &str = env!("VERGEN_CARGO_TARGET_TRIPLE"); /// The build features. pub const VERGEN_CARGO_FEATURES: &str = env!("VERGEN_CARGO_FEATURES"); +/// The latest commit message and author name and email. +pub const VERGEN_GIT_AUTHOR: &str = env!("VERGEN_GIT_COMMIT_AUTHOR"); +pub const VERGEN_GIT_COMMIT_MESSAGE: &str = env!("VERGEN_GIT_COMMIT_MESSAGE"); + /// The build profile name. pub const BUILD_PROFILE_NAME: &str = env!("OP_RBUILDER_BUILD_PROFILE"); @@ -38,6 +42,8 @@ pub const LONG_VERSION: &str = concat!( env!("OP_RBUILDER_LONG_VERSION_3"), "\n", env!("OP_RBUILDER_LONG_VERSION_4"), + "\n", + env!("OP_RBUILDER_LONG_VERSION_5"), ); pub const VERSION: VersionInfo = VersionInfo { @@ -47,6 +53,8 @@ pub const VERSION: VersionInfo = VersionInfo { git_sha: VERGEN_GIT_SHA, target_triple: VERGEN_CARGO_TARGET_TRIPLE, build_profile: BUILD_PROFILE_NAME, + commit_author: VERGEN_GIT_AUTHOR, + commit_message: VERGEN_GIT_COMMIT_MESSAGE, }; /// op-rbuilder metrics @@ -115,14 +123,16 @@ pub struct OpRBuilderMetrics { pub payload_num_tx_simulated_fail: Histogram, /// Latest number of transactions in the payload that failed simulation pub payload_num_tx_simulated_fail_gauge: Gauge, + /// Histogram of gas used by successful transactions + pub successful_tx_gas_used: Histogram, + /// Histogram of gas used by reverted transactions + pub reverted_tx_gas_used: Histogram, + /// Gas used by reverted transactions in the latest block + pub payload_reverted_tx_gas_used: Gauge, /// Histogram of tx simulation duration pub tx_simulation_duration: Histogram, /// Byte size of transactions pub tx_byte_size: Histogram, - /// Da block size limit - pub da_block_size_limit: Gauge, - /// Da tx size limit - pub da_tx_size_limit: Gauge, /// How much less flashblocks we issue to be on time with block construction pub reduced_flashblocks_number: Histogram, /// How much less flashblocks we issued in reality, comparing to calculated number for block @@ -144,6 +154,7 @@ pub struct OpRBuilderMetrics { } impl OpRBuilderMetrics { + #[expect(clippy::too_many_arguments)] pub fn set_payload_builder_metrics( &self, payload_tx_simulation_time: impl IntoF64 + Copy, @@ -152,6 +163,7 @@ impl OpRBuilderMetrics { num_txs_simulated_success: impl IntoF64 + Copy, num_txs_simulated_fail: impl IntoF64 + Copy, num_bundles_reverted: impl IntoF64, + reverted_gas_used: impl IntoF64, ) { self.payload_tx_simulation_duration .record(payload_tx_simulation_time); @@ -170,6 +182,7 @@ impl OpRBuilderMetrics { self.payload_num_tx_simulated_fail_gauge .set(num_txs_simulated_fail); self.bundles_reverted.record(num_bundles_reverted); + self.payload_reverted_tx_gas_used.set(reverted_gas_used); } } @@ -198,18 +211,24 @@ pub struct VersionInfo { pub target_triple: &'static str, /// The build profile (e.g., debug or release). pub build_profile: &'static str, + /// The author of the latest commit. + pub commit_author: &'static str, + /// The message of the latest commit. + pub commit_message: &'static str, } impl VersionInfo { - /// This exposes reth's version information over prometheus. + /// This exposes op-rbuilder's version information over prometheus. pub fn register_version_metrics(&self) { - let labels: [(&str, &str); 6] = [ + let labels: [(&str, &str); 8] = [ ("version", self.version), ("build_timestamp", self.build_timestamp), ("cargo_features", self.cargo_features), ("git_sha", self.git_sha), ("target_triple", self.target_triple), ("build_profile", self.build_profile), + ("commit_author", self.commit_author), + ("commit_message", self.commit_message), ]; let gauge = gauge!("builder_info", &labels); diff --git a/crates/op-rbuilder/src/monitor_tx_pool.rs b/crates/op-rbuilder/src/monitor_tx_pool.rs index 4554c5e60..a9cbbae68 100644 --- a/crates/op-rbuilder/src/monitor_tx_pool.rs +++ b/crates/op-rbuilder/src/monitor_tx_pool.rs @@ -5,7 +5,7 @@ use moka::future::Cache; use reth_transaction_pool::{AllTransactionsEvents, FullTransactionEvent}; use tracing::info; -pub async fn monitor_tx_pool( +pub(crate) async fn monitor_tx_pool( mut new_transactions: AllTransactionsEvents, reverted_cache: Cache, ) { diff --git a/crates/op-rbuilder/src/primitives/reth/execution.rs b/crates/op-rbuilder/src/primitives/reth/execution.rs index 45acf963f..b2591c212 100644 --- a/crates/op-rbuilder/src/primitives/reth/execution.rs +++ b/crates/op-rbuilder/src/primitives/reth/execution.rs @@ -8,8 +8,10 @@ use reth_optimism_primitives::{OpReceipt, OpTransactionSigned}; #[derive(Debug, Display)] pub enum TxnExecutionResult { TransactionDALimitExceeded, - BlockDALimitExceeded, - TransactionGasLimitExceeded, + #[display("BlockDALimitExceeded: total_da_used={_0} tx_da_size={_1} block_da_limit={_2}")] + BlockDALimitExceeded(u64, u64, u64), + #[display("TransactionGasLimitExceeded: total_gas_used={_0} tx_gas_limit={_1}")] + TransactionGasLimitExceeded(u64, u64, u64), SequencerTransaction, NonceTooLow, InteropFailed, @@ -75,11 +77,19 @@ impl ExecutionInfo { if block_data_limit .is_some_and(|da_limit| self.cumulative_da_bytes_used + tx_da_size > da_limit) { - return Err(TxnExecutionResult::BlockDALimitExceeded); + return Err(TxnExecutionResult::BlockDALimitExceeded( + self.cumulative_da_bytes_used, + tx_da_size, + block_data_limit.unwrap_or_default(), + )); } if self.cumulative_gas_used + tx_gas_limit > block_gas_limit { - return Err(TxnExecutionResult::TransactionGasLimitExceeded); + return Err(TxnExecutionResult::TransactionGasLimitExceeded( + self.cumulative_gas_used, + tx_gas_limit, + block_gas_limit, + )); } Ok(()) } diff --git a/crates/op-rbuilder/src/tests/flashblocks.rs b/crates/op-rbuilder/src/tests/flashblocks.rs index cd17f8aeb..f3e46dae5 100644 --- a/crates/op-rbuilder/src/tests/flashblocks.rs +++ b/crates/op-rbuilder/src/tests/flashblocks.rs @@ -1,17 +1,25 @@ +use alloy_consensus::Transaction; +use alloy_eips::Decodable2718; +use alloy_primitives::{Address, TxHash, U256, address, b128, b256}; use alloy_provider::Provider; -use futures::StreamExt; +use alloy_sol_types::SolCall; use macros::rb_test; -use parking_lot::Mutex; -use std::{sync::Arc, time::Duration}; -use tokio::task::JoinHandle; -use tokio_tungstenite::{connect_async, tungstenite::Message}; -use tokio_util::sync::CancellationToken; +use op_alloy_consensus::OpTxEnvelope; +use std::time::Duration; use crate::{ args::{FlashblocksArgs, OpRbuilderArgs}, - tests::{BlockTransactionsExt, BundleOpts, LocalInstance, TransactionBuilderExt}, + tests::{ + BUILDER_PRIVATE_KEY, BlockTransactionsExt, BundleOpts, ChainDriver, ChainDriverExt, + FUNDED_PRIVATE_KEY, LocalInstance, ONE_ETH, TransactionBuilderExt, + flashblocks_number_contract::FlashblocksNumber, + }, + tx_signer::Signer, }; +// If the order of deployment from the signer changes the address will change +const FLASHBLOCKS_NUMBER_ADDRESS: Address = address!("5fbdb2315678afecb367f032d93f642f64180aa3"); + #[rb_test(flashblocks, args = OpRbuilderArgs { chain_block_time: 2000, flashblocks: FlashblocksArgs { @@ -21,35 +29,13 @@ use crate::{ flashblocks_block_time: 200, flashblocks_leeway_time: 100, flashblocks_fixed: false, + ..Default::default() }, ..Default::default() })] async fn smoke_dynamic_base(rbuilder: LocalInstance) -> eyre::Result<()> { let driver = rbuilder.driver().await?; - - // Create a struct to hold received messages - let received_messages = Arc::new(Mutex::new(Vec::new())); - let messages_clone = received_messages.clone(); - let cancellation_token = CancellationToken::new(); - let flashblocks_ws_url = rbuilder.flashblocks_ws_url(); - - // Spawn WebSocket listener task - let cancellation_token_clone = cancellation_token.clone(); - let ws_handle: JoinHandle> = tokio::spawn(async move { - let (ws_stream, _) = connect_async(flashblocks_ws_url).await?; - let (_, mut read) = ws_stream.split(); - - loop { - tokio::select! { - _ = cancellation_token_clone.cancelled() => { - break Ok(()); - } - Some(Ok(Message::Text(text))) = read.next() => { - messages_clone.lock().push(text); - } - } - } - }); + let flashblocks_listener = rbuilder.spawn_flashblocks_listener(); // We align out block timestamps with current unix timestamp for _ in 0..10 { @@ -66,18 +52,10 @@ async fn smoke_dynamic_base(rbuilder: LocalInstance) -> eyre::Result<()> { tokio::time::sleep(std::time::Duration::from_secs(1)).await; } - cancellation_token.cancel(); - assert!(ws_handle.await.is_ok(), "WebSocket listener task failed"); + let flashblocks = flashblocks_listener.get_flashblocks(); + assert_eq!(110, flashblocks.len()); - assert!( - !received_messages - .lock() - .iter() - .any(|msg| msg.contains("Building flashblock")), - "No messages received from WebSocket" - ); - - Ok(()) + flashblocks_listener.stop().await } #[rb_test(flashblocks, args = OpRbuilderArgs { @@ -89,35 +67,13 @@ async fn smoke_dynamic_base(rbuilder: LocalInstance) -> eyre::Result<()> { flashblocks_block_time: 200, flashblocks_leeway_time: 100, flashblocks_fixed: false, + ..Default::default() }, ..Default::default() })] async fn smoke_dynamic_unichain(rbuilder: LocalInstance) -> eyre::Result<()> { let driver = rbuilder.driver().await?; - - // Create a struct to hold received messages - let received_messages = Arc::new(Mutex::new(Vec::new())); - let messages_clone = received_messages.clone(); - let cancellation_token = CancellationToken::new(); - let flashblocks_ws_url = rbuilder.flashblocks_ws_url(); - - // Spawn WebSocket listener task - let cancellation_token_clone = cancellation_token.clone(); - let ws_handle: JoinHandle> = tokio::spawn(async move { - let (ws_stream, _) = connect_async(flashblocks_ws_url).await?; - let (_, mut read) = ws_stream.split(); - - loop { - tokio::select! { - _ = cancellation_token_clone.cancelled() => { - break Ok(()); - } - Some(Ok(Message::Text(text))) = read.next() => { - messages_clone.lock().push(text); - } - } - } - }); + let flashblocks_listener = rbuilder.spawn_flashblocks_listener(); // We align out block timestamps with current unix timestamp for _ in 0..10 { @@ -134,18 +90,10 @@ async fn smoke_dynamic_unichain(rbuilder: LocalInstance) -> eyre::Result<()> { tokio::time::sleep(std::time::Duration::from_secs(1)).await; } - cancellation_token.cancel(); - assert!(ws_handle.await.is_ok(), "WebSocket listener task failed"); + let flashblocks = flashblocks_listener.get_flashblocks(); + assert_eq!(60, flashblocks.len()); - assert!( - !received_messages - .lock() - .iter() - .any(|msg| msg.contains("Building flashblock")), - "No messages received from WebSocket" - ); - - Ok(()) + flashblocks_listener.stop().await } #[rb_test(flashblocks, args = OpRbuilderArgs { @@ -157,35 +105,13 @@ async fn smoke_dynamic_unichain(rbuilder: LocalInstance) -> eyre::Result<()> { flashblocks_block_time: 200, flashblocks_leeway_time: 50, flashblocks_fixed: true, + ..Default::default() }, ..Default::default() })] async fn smoke_classic_unichain(rbuilder: LocalInstance) -> eyre::Result<()> { let driver = rbuilder.driver().await?; - - // Create a struct to hold received messages - let received_messages = Arc::new(Mutex::new(Vec::new())); - let messages_clone = received_messages.clone(); - let cancellation_token = CancellationToken::new(); - let flashblocks_ws_url = rbuilder.flashblocks_ws_url(); - - // Spawn WebSocket listener task - let cancellation_token_clone = cancellation_token.clone(); - let ws_handle: JoinHandle> = tokio::spawn(async move { - let (ws_stream, _) = connect_async(flashblocks_ws_url).await?; - let (_, mut read) = ws_stream.split(); - - loop { - tokio::select! { - _ = cancellation_token_clone.cancelled() => { - break Ok(()); - } - Some(Ok(Message::Text(text))) = read.next() => { - messages_clone.lock().push(text); - } - } - } - }); + let flashblocks_listener = rbuilder.spawn_flashblocks_listener(); // We align out block timestamps with current unix timestamp for _ in 0..10 { @@ -202,18 +128,10 @@ async fn smoke_classic_unichain(rbuilder: LocalInstance) -> eyre::Result<()> { tokio::time::sleep(std::time::Duration::from_secs(1)).await; } - cancellation_token.cancel(); - assert!(ws_handle.await.is_ok(), "WebSocket listener task failed"); + let flashblocks = flashblocks_listener.get_flashblocks(); + assert_eq!(60, flashblocks.len()); - assert!( - !received_messages - .lock() - .iter() - .any(|msg| msg.contains("Building flashblock")), - "No messages received from WebSocket" - ); - - Ok(()) + flashblocks_listener.stop().await } #[rb_test(flashblocks, args = OpRbuilderArgs { @@ -225,35 +143,13 @@ async fn smoke_classic_unichain(rbuilder: LocalInstance) -> eyre::Result<()> { flashblocks_block_time: 200, flashblocks_leeway_time: 50, flashblocks_fixed: true, + ..Default::default() }, ..Default::default() })] async fn smoke_classic_base(rbuilder: LocalInstance) -> eyre::Result<()> { let driver = rbuilder.driver().await?; - - // Create a struct to hold received messages - let received_messages = Arc::new(Mutex::new(Vec::new())); - let messages_clone = received_messages.clone(); - let cancellation_token = CancellationToken::new(); - let flashblocks_ws_url = rbuilder.flashblocks_ws_url(); - - // Spawn WebSocket listener task - let cancellation_token_clone = cancellation_token.clone(); - let ws_handle: JoinHandle> = tokio::spawn(async move { - let (ws_stream, _) = connect_async(flashblocks_ws_url).await?; - let (_, mut read) = ws_stream.split(); - - loop { - tokio::select! { - _ = cancellation_token_clone.cancelled() => { - break Ok(()); - } - Some(Ok(Message::Text(text))) = read.next() => { - messages_clone.lock().push(text); - } - } - } - }); + let flashblocks_listener = rbuilder.spawn_flashblocks_listener(); // We align out block timestamps with current unix timestamp for _ in 0..10 { @@ -270,18 +166,10 @@ async fn smoke_classic_base(rbuilder: LocalInstance) -> eyre::Result<()> { tokio::time::sleep(std::time::Duration::from_secs(1)).await; } - cancellation_token.cancel(); - assert!(ws_handle.await.is_ok(), "WebSocket listener task failed"); + let flashblocks = flashblocks_listener.get_flashblocks(); + assert_eq!(110, flashblocks.len()); - assert!( - !received_messages - .lock() - .iter() - .any(|msg| msg.contains("Building flashblock")), - "No messages received from WebSocket" - ); - - Ok(()) + flashblocks_listener.stop().await } #[rb_test(flashblocks, args = OpRbuilderArgs { @@ -293,35 +181,13 @@ async fn smoke_classic_base(rbuilder: LocalInstance) -> eyre::Result<()> { flashblocks_block_time: 200, flashblocks_leeway_time: 100, flashblocks_fixed: false, + ..Default::default() }, ..Default::default() })] async fn unichain_dynamic_with_lag(rbuilder: LocalInstance) -> eyre::Result<()> { let driver = rbuilder.driver().await?; - - // Create a struct to hold received messages - let received_messages = Arc::new(Mutex::new(Vec::new())); - let messages_clone = received_messages.clone(); - let cancellation_token = CancellationToken::new(); - let flashblocks_ws_url = rbuilder.flashblocks_ws_url(); - - // Spawn WebSocket listener task - let cancellation_token_clone = cancellation_token.clone(); - let ws_handle: JoinHandle> = tokio::spawn(async move { - let (ws_stream, _) = connect_async(flashblocks_ws_url).await?; - let (_, mut read) = ws_stream.split(); - - loop { - tokio::select! { - _ = cancellation_token_clone.cancelled() => { - break Ok(()); - } - Some(Ok(Message::Text(text))) = read.next() => { - messages_clone.lock().push(text); - } - } - } - }); + let flashblocks_listener = rbuilder.spawn_flashblocks_listener(); // We align out block timestamps with current unix timestamp for i in 0..9 { @@ -336,22 +202,19 @@ async fn unichain_dynamic_with_lag(rbuilder: LocalInstance) -> eyre::Result<()> let block = driver .build_new_block_with_current_timestamp(Some(Duration::from_millis(i * 100))) .await?; - assert_eq!(block.transactions.len(), 8, "Got: {:?}", block.transactions); // 5 normal txn + deposit + 2 builder txn + assert_eq!( + block.transactions.len(), + 8, + "Got: {:#?}", + block.transactions + ); // 5 normal txn + deposit + 2 builder txn tokio::time::sleep(std::time::Duration::from_secs(1)).await; } - cancellation_token.cancel(); - assert!(ws_handle.await.is_ok(), "WebSocket listener task failed"); - - assert!( - !received_messages - .lock() - .iter() - .any(|msg| msg.contains("Building flashblock")), - "No messages received from WebSocket" - ); + let flashblocks = flashblocks_listener.get_flashblocks(); + assert_eq!(34, flashblocks.len()); - Ok(()) + flashblocks_listener.stop().await } #[rb_test(flashblocks, args = OpRbuilderArgs { @@ -362,36 +225,13 @@ async fn unichain_dynamic_with_lag(rbuilder: LocalInstance) -> eyre::Result<()> flashblocks_addr: "127.0.0.1".into(), flashblocks_block_time: 200, flashblocks_leeway_time: 0, - flashblocks_fixed: false, + ..Default::default() }, ..Default::default() })] async fn dynamic_with_full_block_lag(rbuilder: LocalInstance) -> eyre::Result<()> { let driver = rbuilder.driver().await?; - - // Create a struct to hold received messages - let received_messages = Arc::new(Mutex::new(Vec::new())); - let messages_clone = received_messages.clone(); - let cancellation_token = CancellationToken::new(); - let flashblocks_ws_url = rbuilder.flashblocks_ws_url(); - - // Spawn WebSocket listener task - let cancellation_token_clone = cancellation_token.clone(); - let ws_handle: JoinHandle> = tokio::spawn(async move { - let (ws_stream, _) = connect_async(flashblocks_ws_url).await?; - let (_, mut read) = ws_stream.split(); - - loop { - tokio::select! { - _ = cancellation_token_clone.cancelled() => { - break Ok(()); - } - Some(Ok(Message::Text(text))) = read.next() => { - messages_clone.lock().push(text); - } - } - } - }); + let flashblocks_listener = rbuilder.spawn_flashblocks_listener(); for _ in 0..5 { // send a valid transaction @@ -406,18 +246,11 @@ async fn dynamic_with_full_block_lag(rbuilder: LocalInstance) -> eyre::Result<() .await?; // We could only produce block with deposits + builder tx because of short time frame assert_eq!(block.transactions.len(), 2); - cancellation_token.cancel(); - assert!(ws_handle.await.is_ok(), "WebSocket listener task failed"); - assert!( - !received_messages - .lock() - .iter() - .any(|msg| msg.contains("Building flashblock")), - "No messages received from WebSocket" - ); + let flashblocks = flashblocks_listener.get_flashblocks(); + assert_eq!(1, flashblocks.len()); - Ok(()) + flashblocks_listener.stop().await } #[rb_test(flashblocks, args = OpRbuilderArgs { @@ -428,37 +261,13 @@ async fn dynamic_with_full_block_lag(rbuilder: LocalInstance) -> eyre::Result<() flashblocks_port: 1239, flashblocks_addr: "127.0.0.1".into(), flashblocks_block_time: 200, - flashblocks_leeway_time: 100, - flashblocks_fixed: false, + ..Default::default() }, ..Default::default() })] async fn test_flashblock_min_filtering(rbuilder: LocalInstance) -> eyre::Result<()> { let driver = rbuilder.driver().await?; - - // Create a struct to hold received messages - let received_messages = Arc::new(Mutex::new(Vec::new())); - let messages_clone = received_messages.clone(); - let cancellation_token = CancellationToken::new(); - let flashblocks_ws_url = rbuilder.flashblocks_ws_url(); - - // Spawn WebSocket listener task - let cancellation_token_clone = cancellation_token.clone(); - let ws_handle: JoinHandle> = tokio::spawn(async move { - let (ws_stream, _) = connect_async(flashblocks_ws_url).await?; - let (_, mut read) = ws_stream.split(); - - loop { - tokio::select! { - _ = cancellation_token_clone.cancelled() => { - break Ok(()); - } - Some(Ok(Message::Text(text))) = read.next() => { - messages_clone.lock().push(text); - } - } - } - }); + let flashblocks_listener = rbuilder.spawn_flashblocks_listener(); // Create two transactions and set their tips so that while ordinarily // tx2 would come before tx1 because its tip is bigger, now tx1 comes @@ -466,10 +275,7 @@ async fn test_flashblock_min_filtering(rbuilder: LocalInstance) -> eyre::Result< let tx1 = driver .create_transaction() .random_valid_transfer() - .with_bundle(BundleOpts { - flashblock_number_min: Some(0), - ..Default::default() - }) + .with_bundle(BundleOpts::default().with_flashblock_number_min(0)) .with_max_priority_fee_per_gas(0) .send() .await?; @@ -477,42 +283,32 @@ async fn test_flashblock_min_filtering(rbuilder: LocalInstance) -> eyre::Result< let tx2 = driver .create_transaction() .random_valid_transfer() - .with_bundle(BundleOpts { - flashblock_number_min: Some(3), - ..Default::default() - }) + .with_bundle(BundleOpts::default().with_flashblock_number_min(3)) .with_max_priority_fee_per_gas(10) .send() .await?; - let block1 = driver.build_new_block_with_current_timestamp(None).await?; + let _block1 = driver.build_new_block_with_current_timestamp(None).await?; // Check that tx1 comes before tx2 let tx1_hash = *tx1.tx_hash(); let tx2_hash = *tx2.tx_hash(); - let mut tx1_pos = None; - let mut tx2_pos = None; - - for (i, item) in block1.transactions.hashes().into_iter().enumerate() { - if item == tx1_hash { - tx1_pos = Some(i); - } - if item == tx2_hash { - tx2_pos = Some(i); - } - } + let tx1_pos = flashblocks_listener + .find_transaction_flashblock(&tx1_hash) + .unwrap(); + let tx2_pos = flashblocks_listener + .find_transaction_flashblock(&tx2_hash) + .unwrap(); - assert!(tx1_pos.is_some(), "tx {tx1_hash:?} not found"); - assert!(tx2_pos.is_some(), "tx {tx2_hash:?} not found"); assert!( - tx1_pos.unwrap() < tx2_pos.unwrap(), + tx1_pos < tx2_pos, "tx {tx1_hash:?} does not come before {tx2_hash:?}" ); - cancellation_token.cancel(); - assert!(ws_handle.await.is_ok(), "WebSocket listener task failed"); + let flashblocks = flashblocks_listener.get_flashblocks(); + assert_eq!(6, flashblocks.len()); - Ok(()) + flashblocks_listener.stop().await } #[rb_test(flashblocks, args = OpRbuilderArgs { @@ -523,37 +319,13 @@ async fn test_flashblock_min_filtering(rbuilder: LocalInstance) -> eyre::Result< flashblocks_port: 1239, flashblocks_addr: "127.0.0.1".into(), flashblocks_block_time: 200, - flashblocks_leeway_time: 100, - flashblocks_fixed: false, + ..Default::default() }, ..Default::default() })] async fn test_flashblock_max_filtering(rbuilder: LocalInstance) -> eyre::Result<()> { let driver = rbuilder.driver().await?; - - // Create a struct to hold received messages - let received_messages = Arc::new(Mutex::new(Vec::new())); - let messages_clone = received_messages.clone(); - let cancellation_token = CancellationToken::new(); - let flashblocks_ws_url = rbuilder.flashblocks_ws_url(); - - // Spawn WebSocket listener task - let cancellation_token_clone = cancellation_token.clone(); - let ws_handle: JoinHandle> = tokio::spawn(async move { - let (ws_stream, _) = connect_async(flashblocks_ws_url).await?; - let (_, mut read) = ws_stream.split(); - - loop { - tokio::select! { - _ = cancellation_token_clone.cancelled() => { - break Ok(()); - } - Some(Ok(Message::Text(text))) = read.next() => { - messages_clone.lock().push(text); - } - } - } - }); + let flashblocks_listener = rbuilder.spawn_flashblocks_listener(); // Since we cannot directly trigger flashblock creation in tests, we // instead fill up the gas of flashblocks so that our tx with the @@ -575,18 +347,317 @@ async fn test_flashblock_max_filtering(rbuilder: LocalInstance) -> eyre::Result< let tx1 = driver .create_transaction() .random_valid_transfer() - .with_bundle(BundleOpts { - flashblock_number_max: Some(1), - ..Default::default() - }) + .with_bundle(BundleOpts::default().with_flashblock_number_max(1)) .send() .await?; let block = driver.build_new_block_with_current_timestamp(None).await?; assert!(!block.includes(tx1.tx_hash())); + assert!( + flashblocks_listener + .find_transaction_flashblock(tx1.tx_hash()) + .is_none() + ); - cancellation_token.cancel(); - assert!(ws_handle.await.is_ok(), "WebSocket listener task failed"); + let flashblocks = flashblocks_listener.get_flashblocks(); + assert_eq!(6, flashblocks.len()); + + flashblocks_listener.stop().await +} + +#[rb_test(flashblocks, args = OpRbuilderArgs { + chain_block_time: 1000, + enable_revert_protection: true, + flashblocks: FlashblocksArgs { + enabled: true, + flashblocks_port: 1239, + flashblocks_addr: "127.0.0.1".into(), + flashblocks_block_time: 200, + flashblocks_leeway_time: 100, + flashblocks_fixed: false, + ..Default::default() + }, + ..Default::default() +})] +async fn test_flashblock_min_max_filtering(rbuilder: LocalInstance) -> eyre::Result<()> { + let driver = rbuilder.driver().await?; + let flashblocks_listener = rbuilder.spawn_flashblocks_listener(); + + let tx1 = driver + .create_transaction() + .random_valid_transfer() + .with_bundle( + BundleOpts::default() + .with_flashblock_number_max(2) + .with_flashblock_number_min(2), + ) + .send() + .await?; + + let _block = driver.build_new_block_with_current_timestamp(None).await?; + + // It ends up in the 2nd flashblock + assert_eq!( + 2, + flashblocks_listener + .find_transaction_flashblock(tx1.tx_hash()) + .unwrap(), + "Transaction should be in the 2nd flashblock" + ); + + let flashblocks = flashblocks_listener.get_flashblocks(); + assert_eq!(6, flashblocks.len(), "Flashblocks length should be 6"); + + flashblocks_listener.stop().await +} + +#[rb_test(flashblocks, args = OpRbuilderArgs { + chain_block_time: 1000, + flashblocks: FlashblocksArgs { + enabled: true, + flashblocks_port: 1239, + flashblocks_addr: "127.0.0.1".into(), + flashblocks_block_time: 200, + flashblocks_leeway_time: 100, + flashblocks_fixed: false, + flashblocks_calculate_state_root: false, + ..Default::default() + }, + ..Default::default() +})] +async fn test_flashblocks_no_state_root_calculation(rbuilder: LocalInstance) -> eyre::Result<()> { + use alloy_primitives::B256; + + let driver = rbuilder.driver().await?; + + // Send a transaction to ensure block has some activity + let _tx = driver + .create_transaction() + .random_valid_transfer() + .send() + .await?; + + // Build a block with current timestamp (not historical) and calculate_state_root: false + let block = driver.build_new_block_with_current_timestamp(None).await?; + + // Verify that flashblocks are still produced (block should have transactions) + assert!( + block.transactions.len() > 2, + "Block should contain transactions" + ); // deposit + builder tx + user tx + + // Verify that state root is not calculated (should be zero) + assert_eq!( + block.header.state_root, + B256::ZERO, + "State root should be zero when calculate_state_root is false" + ); Ok(()) } + +#[rb_test(flashblocks, args = OpRbuilderArgs { + chain_block_time: 1000, + enable_revert_protection: true, + flashblocks: FlashblocksArgs { + flashblocks_number_contract_address: Some(FLASHBLOCKS_NUMBER_ADDRESS), + ..Default::default() + }, + ..Default::default() +})] +async fn test_flashblocks_number_contract_builder_tx(rbuilder: LocalInstance) -> eyre::Result<()> { + let driver = rbuilder.driver().await?; + let flashblocks_listener = rbuilder.spawn_flashblocks_listener(); + let provider = rbuilder.provider().await?; + + // Deploy flashblocks number contract which will be in flashblocks 1 + let deploy_tx = driver + .create_transaction() + .deploy_flashblock_number_contract() + .with_bundle(BundleOpts::default()) + .send() + .await?; + + // Create valid transactions for flashblocks 2-4 + let user_transactions = create_flashblock_transactions(&driver, 2..5).await?; + + // Build block with deploy tx in first flashblock, and a random valid transfer in every other flashblock + let block = driver.build_new_block_with_current_timestamp(None).await?; + + // Verify contract deployment + let receipt = provider + .get_transaction_receipt(*deploy_tx.tx_hash()) + .await? + .expect("flashblock number contract deployment not mined"); + let contract_address = receipt + .inner + .contract_address + .expect("contract receipt does not contain flashblock number contract address"); + assert_eq!( + contract_address, FLASHBLOCKS_NUMBER_ADDRESS, + "Flashblocks number contract address mismatch" + ); + + // Verify first block structure + assert_eq!(block.transactions.len(), 10); + let txs = block + .transactions + .as_transactions() + .expect("transactions not in block"); + + // Verify builder txs (should be regular since builder tx is not registered yet) + verify_builder_txs( + &txs, + &[1, 2, 4, 6, 8], + Some(Address::ZERO), + "Should have regular builder tx", + ); + + // Verify deploy tx position + assert_eq!( + txs[3].inner.inner.tx_hash(), + *deploy_tx.tx_hash(), + "Deploy tx not in correct position" + ); + + // Verify user transactions + verify_user_tx_hashes(&txs, &[5, 7, 9], &user_transactions); + + // Initialize contract + let init_tx = driver + .create_transaction() + .init_flashblock_number_contract(true) + .with_to(contract_address) + .with_bundle(BundleOpts::default()) + .send() + .await?; + + // Mine initialization + driver.build_new_block_with_current_timestamp(None).await?; + provider + .get_transaction_receipt(*init_tx.tx_hash()) + .await? + .expect("init tx not mined"); + + // Create user transactions for flashblocks 1 - 5 + let user_transactions = create_flashblock_transactions(&driver, 1..5).await?; + + // Build second block after initialization which will call the flashblock number contract + // with builder registered + let block = driver.build_new_block_with_current_timestamp(None).await?; + assert_eq!(block.transactions.len(), 10); + let txs = block + .transactions + .as_transactions() + .expect("transactions not in block"); + + // Fallback block should have regular builder tx after deposit tx + assert_eq!( + txs[1].to(), + Some(Address::ZERO), + "Fallback block should have regular builder tx" + ); + + // Other builder txs should call the contract + verify_builder_txs( + &txs, + &[2, 4, 6, 8], + Some(contract_address), + "Should call flashblocks contract", + ); + + // Verify user transactions, 3 blocks in total built + verify_user_tx_hashes(&txs, &[3, 5, 7, 9], &user_transactions); + + // Verify flashblock number incremented correctly + let contract = FlashblocksNumber::new(contract_address, provider.clone()); + let current_number = contract.getFlashblockNumber().call().await?; + assert_eq!( + current_number, + U256::from(7), + "Flashblock number not incremented correctly" + ); + + // Verify flashblocks + let flashblocks = flashblocks_listener.get_flashblocks(); + assert_eq!(flashblocks.len(), 15); + + // Verify builder tx in each flashblock + for (i, flashblock) in flashblocks.iter().enumerate() { + // In fallback blocks, builder tx is the 2nd tx (index 1) + // In regular flashblocks, builder tx is the 1st tx (index 0) + let is_fallback = i % 5 == 0; + let tx_index = if is_fallback { 1 } else { 0 }; + + let tx_bytes = flashblock.diff.transactions.get(tx_index).expect(&format!( + "Flashblock {} should have tx at index {}", + i, tx_index + )); + let tx = OpTxEnvelope::decode_2718(&mut tx_bytes.as_ref()) + .expect("failed to decode transaction"); + + let expected_to = if i < 7 || i == 10 { + Some(Address::ZERO) + } else { + Some(contract_address) + }; + + assert_eq!( + tx.to(), + expected_to, + "Flashblock {} builder tx (at index {}) should have to = {:?}", + i, + tx_index, + expected_to + ); + } + + flashblocks_listener.stop().await?; + Ok(()) +} + +// Helper to create transactions for flashblocks +async fn create_flashblock_transactions( + driver: &ChainDriver, + range: std::ops::Range, +) -> eyre::Result> { + let mut txs = Vec::new(); + for i in range { + let tx = driver + .create_transaction() + .random_valid_transfer() + .with_bundle(BundleOpts::default().with_flashblock_number_min(i)) + .send() + .await?; + txs.push(*tx.tx_hash()); + } + Ok(txs) +} + +// Helper to verify builder transactions +fn verify_builder_txs( + block_txs: &[impl Transaction], + indices: &[usize], + expected_to: Option

, + msg: &str, +) { + for &idx in indices { + assert_eq!(block_txs[idx].to(), expected_to, "{} at index {}", msg, idx); + } +} + +// Helper to verify transaction matches +fn verify_user_tx_hashes( + block_txs: &[impl AsRef], + indices: &[usize], + expected_txs: &[TxHash], +) { + for (i, &idx) in indices.iter().enumerate() { + assert_eq!( + *block_txs[idx].as_ref().tx_hash(), + expected_txs[i], + "Transaction at index {} doesn't match", + idx + ); + } +} diff --git a/crates/op-rbuilder/src/tests/framework/artifacts/contracts/BlockBuilderPolicy.json b/crates/op-rbuilder/src/tests/framework/artifacts/contracts/BlockBuilderPolicy.json new file mode 100644 index 000000000..6d95e8330 --- /dev/null +++ b/crates/op-rbuilder/src/tests/framework/artifacts/contracts/BlockBuilderPolicy.json @@ -0,0 +1,687 @@ +{ + "abi": [ + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [ + { "name": "", "type": "string", "internalType": "string" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "VERIFY_BLOCK_BUILDER_PROOF_TYPEHASH", + "inputs": [], + "outputs": [ + { "name": "", "type": "bytes32", "internalType": "bytes32" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "addWorkloadToPolicy", + "inputs": [ + { + "name": "workloadId", + "type": "bytes32", + "internalType": "WorkloadId" + }, + { + "name": "commitHash", + "type": "string", + "internalType": "string" + }, + { + "name": "sourceLocators", + "type": "string[]", + "internalType": "string[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "computeStructHash", + "inputs": [ + { "name": "version", "type": "uint8", "internalType": "uint8" }, + { + "name": "blockContentHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { "name": "", "type": "bytes32", "internalType": "bytes32" } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "domainSeparator", + "inputs": [], + "outputs": [ + { "name": "", "type": "bytes32", "internalType": "bytes32" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "eip712Domain", + "inputs": [], + "outputs": [ + { + "name": "fields", + "type": "bytes1", + "internalType": "bytes1" + }, + { "name": "name", "type": "string", "internalType": "string" }, + { + "name": "version", + "type": "string", + "internalType": "string" + }, + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "verifyingContract", + "type": "address", + "internalType": "address" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "extensions", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getHashedTypeDataV4", + "inputs": [ + { + "name": "structHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { "name": "", "type": "bytes32", "internalType": "bytes32" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getWorkloadMetadata", + "inputs": [ + { + "name": "workloadId", + "type": "bytes32", + "internalType": "WorkloadId" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct IBlockBuilderPolicy.WorkloadMetadata", + "components": [ + { + "name": "commitHash", + "type": "string", + "internalType": "string" + }, + { + "name": "sourceLocators", + "type": "string[]", + "internalType": "string[]" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_initialOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "_registry", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isAllowedPolicy", + "inputs": [ + { + "name": "teeAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { "name": "allowed", "type": "bool", "internalType": "bool" }, + { "name": "", "type": "bytes32", "internalType": "WorkloadId" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "nonces", + "inputs": [ + { + "name": "teeAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "permitNonce", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { "name": "", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "permitVerifyBlockBuilderProof", + "inputs": [ + { "name": "version", "type": "uint8", "internalType": "uint8" }, + { + "name": "blockContentHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "eip712Sig", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [ + { "name": "", "type": "bytes32", "internalType": "bytes32" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "registry", + "inputs": [], + "outputs": [ + { "name": "", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "removeWorkloadFromPolicy", + "inputs": [ + { + "name": "workloadId", + "type": "bytes32", + "internalType": "WorkloadId" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "verifyBlockBuilderProof", + "inputs": [ + { "name": "version", "type": "uint8", "internalType": "uint8" }, + { + "name": "blockContentHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "workloadIdForTDRegistration", + "inputs": [ + { + "name": "registration", + "type": "tuple", + "internalType": "struct IFlashtestationRegistry.RegisteredTEE", + "components": [ + { + "name": "isValid", + "type": "bool", + "internalType": "bool" + }, + { + "name": "rawQuote", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "parsedReportBody", + "type": "tuple", + "internalType": "struct TD10ReportBody", + "components": [ + { + "name": "teeTcbSvn", + "type": "bytes16", + "internalType": "bytes16" + }, + { + "name": "mrSeam", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "mrsignerSeam", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "seamAttributes", + "type": "bytes8", + "internalType": "bytes8" + }, + { + "name": "tdAttributes", + "type": "bytes8", + "internalType": "bytes8" + }, + { + "name": "xFAM", + "type": "bytes8", + "internalType": "bytes8" + }, + { + "name": "mrTd", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "mrConfigId", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "mrOwner", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "mrOwnerConfig", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "rtMr0", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "rtMr1", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "rtMr2", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "rtMr3", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "reportData", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "extendedRegistrationData", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "quoteHash", + "type": "bytes32", + "internalType": "bytes32" + } + ] + } + ], + "outputs": [ + { "name": "", "type": "bytes32", "internalType": "WorkloadId" } + ], + "stateMutability": "pure" + }, + { + "type": "event", + "name": "BlockBuilderProofVerified", + "inputs": [ + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "workloadId", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + }, + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + }, + { + "name": "blockContentHash", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + }, + { + "name": "commitHash", + "type": "string", + "indexed": false, + "internalType": "string" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "EIP712DomainChanged", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RegistrySet", + "inputs": [ + { + "name": "registry", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "WorkloadAddedToPolicy", + "inputs": [ + { + "name": "workloadId", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "WorkloadRemovedFromPolicy", + "inputs": [ + { + "name": "workloadId", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { "type": "error", "name": "ECDSAInvalidSignature", "inputs": [] }, + { + "type": "error", + "name": "ECDSAInvalidSignatureLength", + "inputs": [ + { + "name": "length", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ECDSAInvalidSignatureS", + "inputs": [ + { "name": "s", "type": "bytes32", "internalType": "bytes32" } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { "type": "error", "name": "ERC1967NonPayable", "inputs": [] }, + { "type": "error", "name": "EmptyCommitHash", "inputs": [] }, + { "type": "error", "name": "EmptySourceLocators", "inputs": [] }, + { "type": "error", "name": "FailedCall", "inputs": [] }, + { "type": "error", "name": "InvalidInitialization", "inputs": [] }, + { + "type": "error", + "name": "InvalidNonce", + "inputs": [ + { + "name": "expected", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "provided", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { "type": "error", "name": "InvalidRegistry", "inputs": [] }, + { "type": "error", "name": "NotInitializing", "inputs": [] }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { "name": "slot", "type": "bytes32", "internalType": "bytes32" } + ] + }, + { + "type": "error", + "name": "UnauthorizedBlockBuilder", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + } + ] + }, + { "type": "error", "name": "WorkloadAlreadyInPolicy", "inputs": [] }, + { "type": "error", "name": "WorkloadNotInPolicy", "inputs": [] } + ], + "bytecode": { + "object": "0x60a0806040523460295730608052613263908161002e8239608051818181610a3801526110790152f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80632dd8abfe14611e4c578063485cc955146116b05780634d37fc7a146113365780634f1ef286146110105780634f3a415a14610ab057806352d1902d146109f35780635c40e542146109095780636931164e146108cd578063715018a6146107f3578063730169231461079b5780637b1039991461074a5780637dec71a9146106f95780637ecebe001461069657806384b0196e146104f15780638da5cb5b14610481578063abd45d21146102fc578063ad3cb1cc1461027b578063b33d59da14610237578063d2753561146101e8578063f2fde38b1461019f5763f698da2514610100575f80fd5b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57602061013861310e565b610140613178565b60405190838201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261019060c082612063565b519020604051908152f35b5f80fd5b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576101e66101d9611feb565b6101e1612d2c565b612b6a565b005b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576040610229610224611feb565b6127d1565b825191151582526020820152f35b3461019b5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576101e6610271611fad565b6024359033612c57565b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576102f86040516102ba604082612063565b600581527f352e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061215f565b0390f35b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576060602060405161033b81612047565b82815201526004355f525f60205260405f2060016040519161035c83612047565b61036581612695565b835201805461037381612349565b916103816040519384612063565b81835260208301905f5260205f205f915b838310610464576103c1868660208201908152604051928392602084525160406020850152606084019061215f565b9051907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838203016040840152815180825260208201916020808360051b8301019401925f915b8383106104155786860387f35b919395509193602080610452837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08660019603018752895161215f565b97019301930190928695949293610408565b60016020819261047385612695565b815201920192019190610392565b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10054158061066d575b1561060f576105b36105586124b1565b6105606125c2565b60206105c1604051926105738385612063565b5f84525f3681376040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e08588015260e087019061215f565b90858203604087015261215f565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b8281106105f857505050500390f35b8351855286955093810193928101926001016105e9565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610548565b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5773ffffffffffffffffffffffffffffffffffffffff6106e2611feb565b165f526002602052602060405f2054604051908152f35b3461019b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576020610742610735611fad565b6044359060243590612463565b604051908152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760206040517f93b3c192de39a93da71b94fb9fadb8e913f752a2e9ea950a33266a81fcbf2ffc8152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57610829612d2c565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760206107426004356123c6565b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57600435610943612d2c565b805f525f60205261095760405f20546122f8565b156109cb57805f525f602052600160405f2061097281612377565b018054905f8155816109a6575b827f56c387a9be1bf0e0e4f852c577a225db98e8253ad401d1b4ea73926f27d6af095f80a2005b5f5260205f20908101905b8181101561097f57806109c5600192612377565b016109b1565b7f22faf042000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610a885760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461019b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760043560243567ffffffffffffffff811161019b57610b02903690600401611fbd565b919060443567ffffffffffffffff811161019b573660238201121561019b5780600401359167ffffffffffffffff831161019b5760248360051b8301019036821161019b57610b4f612d2c565b8515610fe8578315610fc057845f525f602052610b6f60405f20546122f8565b610f9857610b8b9060405196610b8488612047565b36916120de565b8552610b9683612349565b92610ba46040519485612063565b83526024820191602084015b828410610f57575050505060208301908152815f525f60205260405f20925192835167ffffffffffffffff8111610e2057610beb82546122f8565b601f8111610f27575b506020601f8211600114610e85579080610c469260019596975f92610e7a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b81555b019051805190680100000000000000008211610e20578254828455808310610e4d575b50602001915f5260205f20915f905b828210610ca957847fcbb92e241e191fed6d0b0da0a918c7dcf595e77d868e2e3bf9e6b0b91589c7ad5f80a2005b805180519067ffffffffffffffff8211610e2057610cc786546122f8565b601f8111610de5575b50602090601f8311600114610d3f5792610d25836001959460209487965f92610d345750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b87555b01940191019092610c7b565b015190508b80610c14565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0831691875f52815f20925f5b818110610dcd5750936020936001969387969383889510610d96575b505050811b018755610d28565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558a8080610d89565b92936020600181928786015181550195019301610d6d565b610e1090875f5260205f20601f850160051c81019160208610610e16575b601f0160051c0190612361565b87610cd0565b9091508190610e03565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b835f528260205f2091820191015b818110610e685750610c6c565b80610e74600192612377565b01610e5b565b015190508780610c14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0821695835f52815f20965f5b818110610f0f5750916001959697918487959410610ed8575b505050811b018155610c49565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055868080610ecb565b83830151895560019098019760209384019301610eb2565b610f5190835f5260205f20601f840160051c81019160208510610e1657601f0160051c0190612361565b85610bf4565b833567ffffffffffffffff811161019b5782013660438201121561019b57602091610f8d839236906044602482013591016120de565b815201930192610bb0565b7f72477348000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f6890d9d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f8423f262000000000000000000000000000000000000000000000000000000005f5260045ffd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57611042611feb565b60243567ffffffffffffffff811161019b57611062903690600401612114565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168030149081156112f4575b50610a88576110b1612d2c565b73ffffffffffffffffffffffffffffffffffffffff8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa5f91816112c0575b5061113157837f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8592036112955750813b1561126a57807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115611239575f808360206101e695519101845af43d15611231573d91611215836120a4565b926112236040519485612063565b83523d5f602085013e6131bd565b6060916131bd565b50503461124257005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d6020116112ec575b816112dc60209383612063565b8101031261019b57519085611100565b3d91506112cf565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54161415836110a4565b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760043567ffffffffffffffff811161019b5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261019b57604051906113b08261200e565b8060040135801515810361019b578252602481013567ffffffffffffffff811161019b576113e49060043691840101612114565b6020830152604481013567ffffffffffffffff811161019b5781016101e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261019b57604051906114398261202a565b60048101357fffffffffffffffffffffffffffffffff000000000000000000000000000000008116810361019b578252602481013567ffffffffffffffff811161019b5761148d9060043691840101612114565b6020830152604481013567ffffffffffffffff811161019b576114b69060043691840101612114565b60408301526114c760648201612132565b60608301526114d860848201612132565b60808301526114e960a48201612132565b60a083015260c481013567ffffffffffffffff811161019b576115129060043691840101612114565b60c083015260e481013567ffffffffffffffff811161019b5761153b9060043691840101612114565b60e083015261010481013567ffffffffffffffff811161019b576115659060043691840101612114565b61010083015261012481013567ffffffffffffffff811161019b576115909060043691840101612114565b61012083015261014481013567ffffffffffffffff811161019b576115bb9060043691840101612114565b61014083015261016481013567ffffffffffffffff811161019b576115e69060043691840101612114565b61016083015261018481013567ffffffffffffffff811161019b576116119060043691840101612114565b6101808301526101a481013567ffffffffffffffff811161019b5761163c9060043691840101612114565b6101a08301526101c48101359067ffffffffffffffff821161019b5760046116679236920101612114565b6101c0820152604083015260648101359167ffffffffffffffff831161019b5760846107429261169f60209560043691840101612114565b6060840152013560808201526121a2565b3461019b5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576116e7611feb565b60243573ffffffffffffffffffffffffffffffffffffffff811680910361019b577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159267ffffffffffffffff821680159081611e44575b6001149081611e3a575b159081611e31575b50611e0957818460017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006117c19516177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055611db4575b506117b9613028565b6101e1613028565b6117c9613028565b6040918251926117d98185612063565b601284527f426c6f636b4275696c646572506f6c696379000000000000000000000000000060208501528051936118108286612063565b600185527f31000000000000000000000000000000000000000000000000000000000000006020860152611842613028565b61184a613028565b80519067ffffffffffffffff8211610e20576118867fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102546122f8565b601f8111611d47575b50602090601f8311600114611c67576118dc92915f9183610e7a5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102555b835167ffffffffffffffff8111610e205761193a7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103546122f8565b601f8111611bfa575b50602094601f8211600114611b1c576119939293949582915f92611b115750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100555f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101558215611ae957827fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015551917f27fe5f0c1c3b1ed427cc63d0f05759ffdecf9aec9e18d31ef366fc8a6cb5dc3b5f80a2611a5857005b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2917fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005560018152a1005b7f11a1e697000000000000000000000000000000000000000000000000000000005f5260045ffd5b015190508680610c14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216957fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f52805f20915f5b888110611be257508360019596979810611bab575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103556119b6565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055858080611b7e565b91926020600181928685015181550194019201611b69565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f52611c61907f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f840160051c81019160208510610e1657601f0160051c0190612361565b85611943565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08316917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f52815f20925f5b818110611d2f5750908460019594939210611cf8575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102556118ff565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055868080611ccb565b92936020600181928786015181550195019301611cb5565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f52611dae907f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f850160051c81019160208610610e1657601f0160051c0190612361565b8661188f565b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055846117b0565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501585611759565b303b159150611751565b859150611747565b3461019b5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57611e83611fad565b602435604435916064359267ffffffffffffffff841161019b57611ed7611ed1611eb4611ee0963690600401611fbd565b9190611ec9611ec4868989612463565b6123c6565b9236916120de565b90612d98565b90959195612dd2565b73ffffffffffffffffffffffffffffffffffffffff841690815f52600260205260405f2054808203611f7f5750505f52600260205260405f20928354937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8514611f525760016101e695019055612c57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f06427aeb000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6004359060ff8216820361019b57565b9181601f8401121561019b5782359167ffffffffffffffff831161019b576020838186019501011161019b57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019b57565b60a0810190811067ffffffffffffffff821117610e2057604052565b6101e0810190811067ffffffffffffffff821117610e2057604052565b6040810190811067ffffffffffffffff821117610e2057604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610e2057604052565b67ffffffffffffffff8111610e2057601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926120ea826120a4565b916120f86040519384612063565b82948184528183011161019b578281602093845f960137010152565b9080601f8301121561019b5781602061212f933591016120de565b90565b35907fffffffffffffffff0000000000000000000000000000000000000000000000008216820361019b57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6040015160c081015190610140810151610160820151916101808101516101a082015160e08301519060a08401517fffffffffffffffff0000000000000000000000000000000000000000000000001678030000000000000000000000000000000000000000000000001893608001517fffffffff2fffffff00000000000000000000000000000000000000000000000016926040519687966020880199805160208192018c5e880160208101915f83528051926020849201905e016020015f815281516020819301825e015f815281516020819301825e015f815281516020819301825e015f815281516020819301825e01917fffffffffffffffff0000000000000000000000000000000000000000000000001682526008820152037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0810182526010016122f29082612063565b51902090565b90600182811c9216801561233f575b602083101461231257565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691612307565b67ffffffffffffffff8111610e205760051b60200190565b81811061236c575050565b5f8155600101612361565b61238181546122f8565b908161238b575050565b81601f5f931160011461239d5750555b565b818352602083206123b991601f0160051c810190600101612361565b8082528160208120915555565b6042906123d161310e565b6123d9613178565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261242a60c082612063565b51902090604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b916040519160ff60208401947f93b3c192de39a93da71b94fb9fadb8e913f752a2e9ea950a33266a81fcbf2ffc865216604084015260608301526080820152608081526122f260a082612063565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10254916124e3836122f8565b80835292600181169081156125855750600114612507575b61239b92500383612063565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b81831061256957505090602061239b928201016124fb565b6020919350806001915483858901015201910190918492612551565b6020925061239b9491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b8201016124fb565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10354916125f4836122f8565b808352926001811690811561258557506001146126175761239b92500383612063565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b81831061267957505090602061239b928201016124fb565b6020919350806001915483858901015201910190918492612661565b9060405191825f8254926126a8846122f8565b808452936001811690811561271157506001146126cd575b5061239b92500383612063565b90505f9291925260205f20905f915b8183106126f557505090602061239b928201015f6126c0565b60209193508060019154838589010152019101909184926126dc565b6020935061239b9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f6126c0565b5190811515820361019b57565b81601f8201121561019b57805190612775826120a4565b926127836040519485612063565b8284526020838301011161019b57815f9260208093018386015e8301015290565b51907fffffffffffffffff0000000000000000000000000000000000000000000000008216820361019b57565b5f73ffffffffffffffffffffffffffffffffffffffff602481600154169360405194859384927f727310620000000000000000000000000000000000000000000000000000000084521660048301525afa908115612b5f575f9161286c575b5080511561286557612841906121a2565b805f525f60205261285560405f20546122f8565b61286057505f905f90565b600191565b505f905f90565b90503d805f833e61287d8183612063565b81019060408183031261019b5761289381612751565b5060208101519067ffffffffffffffff821161019b57019060a08282031261019b57604051916128c28361200e565b6128cb81612751565b8352602081015167ffffffffffffffff811161019b57826128ed91830161275e565b6020840152604081015167ffffffffffffffff811161019b5781016101e08184031261019b57604051906129208261202a565b80517fffffffffffffffffffffffffffffffff000000000000000000000000000000008116810361019b578252602081015167ffffffffffffffff811161019b578461296d91830161275e565b6020830152604081015167ffffffffffffffff811161019b578461299291830161275e565b60408301526129a3606082016127a4565b60608301526129b4608082016127a4565b60808301526129c560a082016127a4565b60a083015260c081015167ffffffffffffffff811161019b57846129ea91830161275e565b60c083015260e081015167ffffffffffffffff811161019b5784612a0f91830161275e565b60e083015261010081015167ffffffffffffffff811161019b5784612a3591830161275e565b61010083015261012081015167ffffffffffffffff811161019b5784612a5c91830161275e565b61012083015261014081015167ffffffffffffffff811161019b5784612a8391830161275e565b61014083015261016081015167ffffffffffffffff811161019b5784612aaa91830161275e565b61016083015261018081015167ffffffffffffffff811161019b5784612ad191830161275e565b6101808301526101a081015167ffffffffffffffff811161019b5784612af891830161275e565b6101a08301526101c08101519067ffffffffffffffff821161019b57612b209185910161275e565b6101c08201526040840152606081015167ffffffffffffffff811161019b57608092612b4d91830161275e565b6060840152015160808201525f612830565b6040513d5f823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff168015612c2b5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b91612c6183612eaa565b929015612cea57827f3fa039a23466a52e08acb25376ac7d81de184fa6549ffffb2fc920c47cb623ed949260ff612ce59373ffffffffffffffffffffffffffffffffffffffff965f525f602052612cba60405f20612695565b936040519788971687526020870152166040850152606084015260a0608084015260a083019061215f565b0390a1565b73ffffffffffffffffffffffffffffffffffffffff847f4c547670000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303612d6c57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b8151919060418303612dc857612dc19250602082015190606060408401519301515f1a9061307f565b9192909190565b50505f9160029190565b6004811015612e7d5780612de4575050565b60018103612e14577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b60028103612e4857507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600314612e525750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff600154166040517fa8af4ff500000000000000000000000000000000000000000000000000000000815260408160248173ffffffffffffffffffffffffffffffffffffffff8716958660048301525afa908115612b5f575f905f92612fe7575b5015612fde57815f52600360205260405f209160405193612f3f85612047565b60018454948587520154806020870152838515159182612fd4575b505015612f82575050505f525f602052612f7760405f20546122f8565b156128655751600191565b909250612f91919493506127d1565b93819291612fa0575b50509190565b60019060405192612fb084612047565b868452602084019182525f52600360205260405f2092518355519101555f80612f9a565b149050835f612f5a565b5050505f905f90565b9150506040813d604011613020575b8161300360409383612063565b8101031261019b57602061301682612751565b910151905f612f1f565b3d9150612ff6565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561305757565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411613103579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612b5f575f5173ffffffffffffffffffffffffffffffffffffffff8116156130f957905f905f90565b505f906001905f90565b5050505f9160039190565b6131166124b1565b8051908115613126576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156131535790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b6131806125c2565b8051908115613190576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156131535790565b906131fa57508051156131d257805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b8151158061324d575b61320b575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561320356fea164736f6c634300081c000a", + "sourceMap": "1951:12842:96:-:0;;;;;;;1171:4:51;1163:13;;1951:12842:96;;;;;;1163:13:51;1951:12842:96;;;;;;;;;;;;;;", + "linkReferences": {} + } +} diff --git a/crates/op-rbuilder/src/tests/framework/artifacts/contracts/FlashblocksNumberContract.json b/crates/op-rbuilder/src/tests/framework/artifacts/contracts/FlashblocksNumberContract.json new file mode 100644 index 000000000..1a3b1e6c7 --- /dev/null +++ b/crates/op-rbuilder/src/tests/framework/artifacts/contracts/FlashblocksNumberContract.json @@ -0,0 +1,450 @@ +{ + "abi": [ + { + "type": "function", + "name": "PERMIT_INCREMENT_TYPEHASH", + "inputs": [], + "outputs": [ + { "name": "", "type": "bytes32", "internalType": "bytes32" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [ + { "name": "", "type": "string", "internalType": "string" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "addBuilder", + "inputs": [ + { + "name": "builder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "computeStructHash", + "inputs": [ + { + "name": "currentFlashblockNumber", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { "name": "", "type": "bytes32", "internalType": "bytes32" } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "eip712Domain", + "inputs": [], + "outputs": [ + { + "name": "fields", + "type": "bytes1", + "internalType": "bytes1" + }, + { "name": "name", "type": "string", "internalType": "string" }, + { + "name": "version", + "type": "string", + "internalType": "string" + }, + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "verifyingContract", + "type": "address", + "internalType": "address" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "extensions", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "flashblockNumber", + "inputs": [], + "outputs": [ + { "name": "", "type": "uint256", "internalType": "uint256" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getFlashblockNumber", + "inputs": [], + "outputs": [ + { "name": "", "type": "uint256", "internalType": "uint256" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "hashTypedDataV4", + "inputs": [ + { + "name": "structHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { "name": "", "type": "bytes32", "internalType": "bytes32" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "incrementFlashblockNumber", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_owner", + "type": "address", + "internalType": "address" + }, + { + "name": "_initialBuilders", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isBuilder", + "inputs": [ + { "name": "", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { "name": "", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "permitIncrementFlashblockNumber", + "inputs": [ + { + "name": "currentFlashblockNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [ + { "name": "", "type": "bytes32", "internalType": "bytes32" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "removeBuilder", + "inputs": [ + { + "name": "builder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "BuilderAdded", + "inputs": [ + { + "name": "builder", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BuilderRemoved", + "inputs": [ + { + "name": "builder", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "EIP712DomainChanged", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "FlashblockIncremented", + "inputs": [ + { + "name": "newFlashblockIndex", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "AddressIsAlreadyABuilder", + "inputs": [ + { "name": "addr", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "BuilderDoesNotExist", + "inputs": [ + { "name": "addr", "type": "address", "internalType": "address" } + ] + }, + { "type": "error", "name": "ECDSAInvalidSignature", "inputs": [] }, + { + "type": "error", + "name": "ECDSAInvalidSignatureLength", + "inputs": [ + { + "name": "length", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ECDSAInvalidSignatureS", + "inputs": [ + { "name": "s", "type": "bytes32", "internalType": "bytes32" } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { "type": "error", "name": "ERC1967NonPayable", "inputs": [] }, + { "type": "error", "name": "FailedCall", "inputs": [] }, + { "type": "error", "name": "InvalidInitialization", "inputs": [] }, + { + "type": "error", + "name": "MismatchedFlashblockNumber", + "inputs": [ + { + "name": "expectedFlashblockNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "actualFlashblockNumber", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "NonBuilderAddress", + "inputs": [ + { "name": "addr", "type": "address", "internalType": "address" } + ] + }, + { "type": "error", "name": "NotInitializing", "inputs": [] }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { "name": "slot", "type": "bytes32", "internalType": "bytes32" } + ] + } + ], + "bytecode": { + "object": "0x60a0806040523460295730608052611f7d908161002e8239608051818181611013015261114c0152f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806325f5ffa41461147c5780633fd553e8146114455780634980f288146114095780634f1ef286146110e35780634f66ee131461108b57806352d1902d14610fce578063715018a614610ef457806384b0196e14610d4f5780638da5cb5b14610cdf578063946d920414610439578063a0a78ce01461025d578063ad3cb1cc146103b8578063b6b6b47514610350578063c91d762514610297578063e5b37c5d1461025d578063e7e3a27114610219578063ec9693861461012c5763f2fde38b146100df575f80fd5b346101285760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101285761012661011961156b565b6101216118a2565b6117b5565b005b5f80fd5b346101285760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101285773ffffffffffffffffffffffffffffffffffffffff61017861156b565b6101806118a2565b16805f52600160205260ff60405f205416156101ee57805f52600160205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690557fc5a4a43135540d5e0967677a1ed86bf147f7c0e7dd757a109f4cff74c945f92e5f80a2005b7f677fda95000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346101285760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610128576020610255600435611770565b604051908152f35b34610128575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101285760205f54604051908152f35b346101285760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101285760043560243567ffffffffffffffff8111610128576102e9903690600401611609565b905f548082036103215761012661031c6103138561030e61030987611770565b611692565b611c7c565b90929192611cb6565b61190e565b907f53b6b59a000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b346101285760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101285773ffffffffffffffffffffffffffffffffffffffff61039c61156b565b165f526001602052602060ff60405f2054166040519015158152f35b34610128575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610128576104356040516103f760408261158e565b600581527f352e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061164f565b0390f35b346101285760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101285761047061156b565b6024359067ffffffffffffffff821161012857366023830112156101285781600401359167ffffffffffffffff8311610a76578260051b9060208201936104ba604051958661158e565b8452602460208501928201019036821161012857602401915b818310610cb2575050507ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159167ffffffffffffffff821680159081610caa575b6001149081610ca0575b159081610c97575b50610c6f57818360017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006105969516177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610c1a575b5061058e611c25565b610121611c25565b61059e611c25565b6040908151926105ae838561158e565b601084527f466c617368626c6f636b4e756d6265720000000000000000000000000000000060208501528251936105e5848661158e565b600185527f31000000000000000000000000000000000000000000000000000000000000006020860152610617611c25565b61061f611c25565b80519067ffffffffffffffff8211610a7657819061065d7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102546119ee565b601f8111610b8d575b50602090601f8311600114610aae575f92610aa3575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916177fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102555b835167ffffffffffffffff8111610a76576107097fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103546119ee565b601f81116109f4575b50602094601f8211600114610916579481929394955f9261090b575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916177fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100555f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101555f5b8151811015610871578073ffffffffffffffffffffffffffffffffffffffff6107f36001938561172f565b51165f5281602052845f20827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff610845828561172f565b51167fc2dabef8a63ab48fcf728bbe8864a3fe01a9e19addc6ce314abd5b6f9a1dce665f80a2016107c8565b505061087957005b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2917fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00555160018152a1005b01519050858061072e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216957fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f52805f20915f5b8881106109dc575083600195969798106109a5575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10355610780565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055858080610978565b91926020600181928685015181550194019201610963565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c81019160208410610a6c575b601f0160051c01905b818110610a615750610712565b5f8155600101610a54565b9091508190610a4b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b01519050868061067c565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f52815f20925f5b818110610b755750908460019594939210610b3e575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102556106ce565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055868080610b11565b92936020600181928786015181550195019301610afb565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f529091507f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f840160051c81019160208510610c10575b90601f859493920160051c01905b818110610c025750610666565b5f8155849350600101610bf5565b9091508190610be7565b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005584610585565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158561052e565b303b159150610526565b84915061051c565b823573ffffffffffffffffffffffffffffffffffffffff81168103610128578152602092830192016104d3565b34610128575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012857602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b34610128575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610128577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580610ecb575b15610e6d57610e11610db6611a3f565b610dbe611b52565b6020610e1f60405192610dd1838561158e565b5f84525f3681376040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e08588015260e087019061164f565b90858203604087015261164f565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b828110610e5657505050500390f35b835185528695509381019392810192600101610e47565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610da6565b34610128575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012857610f2a6118a2565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610128575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101285773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036110635760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610128575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101285760206040517f51de50fd99b637d778db8fe7a8a1966ddae5530dd6e4d8f693ffb315c812a24d8152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101285761111561156b565b60243567ffffffffffffffff811161012857611135903690600401611609565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168030149081156113c7575b50611063576111846118a2565b73ffffffffffffffffffffffffffffffffffffffff8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa5f9181611393575b5061120457837f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8592036113685750813b1561133d57807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a281511561130c575f8083602061012695519101845af43d15611304573d916112e8836115cf565b926112f6604051948561158e565b83523d5f602085013e611ed7565b606091611ed7565b50503461131557005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d6020116113bf575b816113af6020938361158e565b81010312610128575190856111d3565b3d91506113a2565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141583611177565b346101285760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610128576020610255600435611692565b34610128575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610128576101263361190e565b346101285760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101285773ffffffffffffffffffffffffffffffffffffffff6114c861156b565b6114d06118a2565b16805f52600160205260ff60405f20541661154057805f52600160205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557fc2dabef8a63ab48fcf728bbe8864a3fe01a9e19addc6ce314abd5b6f9a1dce665f80a2005b7fc0b0858c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361012857565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610a7657604052565b67ffffffffffffffff8111610a7657601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f8201121561012857803590611620826115cf565b9261162e604051948561158e565b8284526020838301011161012857815f926020809301838601378301015290565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b60429061169d611e28565b6116a5611e92565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a081526116f660c08261158e565b51902090604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b80518210156117435760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b60405160208101917f51de50fd99b637d778db8fe7a8a1966ddae5530dd6e4d8f693ffb315c812a24d83526040820152604081526117af60608261158e565b51902090565b73ffffffffffffffffffffffffffffffffffffffff1680156118765773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633036118e257565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff16805f52600160205260ff60405f205416156119c357505f547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461199657602060017ffaddd0b06e793a583e92393ad3f98637e560462ee98db1f2888f141124ee64ca9201805f55604051908152a1565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7fdd9dbe80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90600182811c92168015611a35575b6020831014611a0857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916119fd565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025491611a71836119ee565b8083529260018116908115611b155750600114611a97575b611a959250038361158e565b565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310611af9575050906020611a9592820101611a89565b6020919350806001915483858901015201910190918492611ae1565b60209250611a959491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101611a89565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035491611b84836119ee565b8083529260018116908115611b155750600114611ba757611a959250038361158e565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310611c09575050906020611a9592820101611a89565b6020919350806001915483858901015201910190918492611bf1565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615611c5457565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b8151919060418303611cac57611ca59250602082015190606060408401519301515f1a90611d8e565b9192909190565b50505f9160029190565b6004811015611d615780611cc8575050565b60018103611cf8577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b60028103611d2c57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600314611d365750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411611e1d579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611e12575f5173ffffffffffffffffffffffffffffffffffffffff811615611e0857905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b611e30611a3f565b8051908115611e40576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100548015611e6d5790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b611e9a611b52565b8051908115611eaa576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101548015611e6d5790565b90611f145750805115611eec57602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611f67575b611f25575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15611f1d56fea164736f6c634300081c000a", + "sourceMap": "1449:6259:60:-:0;;;;;;;1171:4:22;1163:13;;1449:6259:60;;;;;;1163:13:22;1449:6259:60;;;;;;;;;;;;;;", + "linkReferences": {} + } +} diff --git a/crates/op-rbuilder/src/tests/framework/artifacts/contracts/FlashtestationRegistry.json b/crates/op-rbuilder/src/tests/framework/artifacts/contracts/FlashtestationRegistry.json new file mode 100644 index 000000000..d823e0c37 --- /dev/null +++ b/crates/op-rbuilder/src/tests/framework/artifacts/contracts/FlashtestationRegistry.json @@ -0,0 +1,641 @@ +{ + "abi": [ + { + "type": "function", + "name": "MAX_BYTES_SIZE", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "REGISTER_TYPEHASH", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "TD_REPORTDATA_LENGTH", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [{ "name": "", "type": "string", "internalType": "string" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "attestationContract", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IAttestation" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "computeStructHash", + "inputs": [ + { "name": "rawQuote", "type": "bytes", "internalType": "bytes" }, + { + "name": "extendedRegistrationData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "deadline", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "domainSeparator", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "eip712Domain", + "inputs": [], + "outputs": [ + { "name": "fields", "type": "bytes1", "internalType": "bytes1" }, + { "name": "name", "type": "string", "internalType": "string" }, + { "name": "version", "type": "string", "internalType": "string" }, + { "name": "chainId", "type": "uint256", "internalType": "uint256" }, + { + "name": "verifyingContract", + "type": "address", + "internalType": "address" + }, + { "name": "salt", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "extensions", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRegistration", + "inputs": [ + { "name": "teeAddress", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "", "type": "bool", "internalType": "bool" }, + { + "name": "", + "type": "tuple", + "internalType": "struct IFlashtestationRegistry.RegisteredTEE", + "components": [ + { "name": "isValid", "type": "bool", "internalType": "bool" }, + { "name": "rawQuote", "type": "bytes", "internalType": "bytes" }, + { + "name": "parsedReportBody", + "type": "tuple", + "internalType": "struct TD10ReportBody", + "components": [ + { + "name": "teeTcbSvn", + "type": "bytes16", + "internalType": "bytes16" + }, + { "name": "mrSeam", "type": "bytes", "internalType": "bytes" }, + { + "name": "mrsignerSeam", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "seamAttributes", + "type": "bytes8", + "internalType": "bytes8" + }, + { + "name": "tdAttributes", + "type": "bytes8", + "internalType": "bytes8" + }, + { "name": "xFAM", "type": "bytes8", "internalType": "bytes8" }, + { "name": "mrTd", "type": "bytes", "internalType": "bytes" }, + { + "name": "mrConfigId", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "mrOwner", "type": "bytes", "internalType": "bytes" }, + { + "name": "mrOwnerConfig", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "rtMr0", "type": "bytes", "internalType": "bytes" }, + { "name": "rtMr1", "type": "bytes", "internalType": "bytes" }, + { "name": "rtMr2", "type": "bytes", "internalType": "bytes" }, + { "name": "rtMr3", "type": "bytes", "internalType": "bytes" }, + { + "name": "reportData", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "extendedRegistrationData", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "quoteHash", + "type": "bytes32", + "internalType": "bytes32" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRegistrationStatus", + "inputs": [ + { "name": "teeAddress", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "isValid", "type": "bool", "internalType": "bool" }, + { "name": "quoteHash", "type": "bytes32", "internalType": "bytes32" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "hashTypedDataV4", + "inputs": [ + { "name": "structHash", "type": "bytes32", "internalType": "bytes32" } + ], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { "name": "owner", "type": "address", "internalType": "address" }, + { + "name": "_attestationContract", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "invalidateAttestation", + "inputs": [ + { "name": "teeAddress", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "invalidatePreviousSignature", + "inputs": [ + { "name": "_nonce", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "nonces", + "inputs": [ + { "name": "teeAddress", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "permitNonce", "type": "uint256", "internalType": "uint256" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [{ "name": "", "type": "address", "internalType": "address" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "permitRegisterTEEService", + "inputs": [ + { "name": "rawQuote", "type": "bytes", "internalType": "bytes" }, + { + "name": "extendedRegistrationData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "deadline", "type": "uint256", "internalType": "uint256" }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "registerTEEService", + "inputs": [ + { "name": "rawQuote", "type": "bytes", "internalType": "bytes" }, + { + "name": "extendedRegistrationData", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "registeredTEEs", + "inputs": [ + { "name": "teeAddress", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "isValid", "type": "bool", "internalType": "bool" }, + { "name": "rawQuote", "type": "bytes", "internalType": "bytes" }, + { + "name": "parsedReportBody", + "type": "tuple", + "internalType": "struct TD10ReportBody", + "components": [ + { + "name": "teeTcbSvn", + "type": "bytes16", + "internalType": "bytes16" + }, + { "name": "mrSeam", "type": "bytes", "internalType": "bytes" }, + { + "name": "mrsignerSeam", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "seamAttributes", + "type": "bytes8", + "internalType": "bytes8" + }, + { + "name": "tdAttributes", + "type": "bytes8", + "internalType": "bytes8" + }, + { "name": "xFAM", "type": "bytes8", "internalType": "bytes8" }, + { "name": "mrTd", "type": "bytes", "internalType": "bytes" }, + { "name": "mrConfigId", "type": "bytes", "internalType": "bytes" }, + { "name": "mrOwner", "type": "bytes", "internalType": "bytes" }, + { + "name": "mrOwnerConfig", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "rtMr0", "type": "bytes", "internalType": "bytes" }, + { "name": "rtMr1", "type": "bytes", "internalType": "bytes" }, + { "name": "rtMr2", "type": "bytes", "internalType": "bytes" }, + { "name": "rtMr3", "type": "bytes", "internalType": "bytes" }, + { "name": "reportData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "extendedRegistrationData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "quoteHash", "type": "bytes32", "internalType": "bytes32" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { "name": "newOwner", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "EIP712DomainChanged", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PreviousSignatureInvalidated", + "inputs": [ + { + "name": "teeAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "invalidatedNonce", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TEEServiceInvalidated", + "inputs": [ + { + "name": "teeAddress", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TEEServiceRegistered", + "inputs": [ + { + "name": "teeAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "rawQuote", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "alreadyExists", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { "name": "target", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "ByteSizeExceeded", + "inputs": [ + { "name": "size", "type": "uint256", "internalType": "uint256" } + ] + }, + { "type": "error", "name": "ECDSAInvalidSignature", "inputs": [] }, + { + "type": "error", + "name": "ECDSAInvalidSignatureLength", + "inputs": [ + { "name": "length", "type": "uint256", "internalType": "uint256" } + ] + }, + { + "type": "error", + "name": "ECDSAInvalidSignatureS", + "inputs": [{ "name": "s", "type": "bytes32", "internalType": "bytes32" }] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { "type": "error", "name": "ERC1967NonPayable", "inputs": [] }, + { + "type": "error", + "name": "ExpiredSignature", + "inputs": [ + { "name": "deadline", "type": "uint256", "internalType": "uint256" } + ] + }, + { "type": "error", "name": "FailedCall", "inputs": [] }, + { "type": "error", "name": "InvalidAttestationContract", "inputs": [] }, + { "type": "error", "name": "InvalidInitialization", "inputs": [] }, + { + "type": "error", + "name": "InvalidNonce", + "inputs": [ + { "name": "expected", "type": "uint256", "internalType": "uint256" }, + { "name": "provided", "type": "uint256", "internalType": "uint256" } + ] + }, + { + "type": "error", + "name": "InvalidQuote", + "inputs": [{ "name": "output", "type": "bytes", "internalType": "bytes" }] + }, + { + "type": "error", + "name": "InvalidQuoteLength", + "inputs": [ + { "name": "length", "type": "uint256", "internalType": "uint256" } + ] + }, + { + "type": "error", + "name": "InvalidRegistrationDataHash", + "inputs": [ + { "name": "expected", "type": "bytes32", "internalType": "bytes32" }, + { "name": "received", "type": "bytes32", "internalType": "bytes32" } + ] + }, + { + "type": "error", + "name": "InvalidReportDataLength", + "inputs": [ + { "name": "length", "type": "uint256", "internalType": "uint256" } + ] + }, + { + "type": "error", + "name": "InvalidTEEType", + "inputs": [ + { "name": "teeType", "type": "bytes4", "internalType": "bytes4" } + ] + }, + { + "type": "error", + "name": "InvalidTEEVersion", + "inputs": [ + { "name": "version", "type": "uint16", "internalType": "uint16" } + ] + }, + { "type": "error", "name": "NotInitializing", "inputs": [] }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { "name": "owner", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ] + }, + { "type": "error", "name": "ReentrancyGuardReentrantCall", "inputs": [] }, + { + "type": "error", + "name": "SignerMustMatchTEEAddress", + "inputs": [ + { "name": "signer", "type": "address", "internalType": "address" }, + { "name": "teeAddress", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "TEEIsStillValid", + "inputs": [ + { "name": "teeAddress", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "TEEServiceAlreadyInvalid", + "inputs": [ + { "name": "teeAddress", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "TEEServiceAlreadyRegistered", + "inputs": [ + { "name": "teeAddress", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "TEEServiceNotRegistered", + "inputs": [ + { "name": "teeAddress", "type": "address", "internalType": "address" } + ] + }, + { "type": "error", "name": "UUPSUnauthorizedCallContext", "inputs": [] }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { "name": "slot", "type": "bytes32", "internalType": "bytes32" } + ] + } + ], + "bytecode": { + "object": "0x60a0806040523460295730608052614e62908161002e8239608051818181610a320152610c3e0152f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630634434a146101845780630ac3302b1461017f57806322ba2bbf1461017a578063485cc955146101755780634980f288146101705780634f1ef2861461016b57806352d1902d146101665780636a5306a314610161578063715018a61461015c57806372731062146101575780637ecebe001461015257806384b0196e1461014d578063878111121461014857806387be6d4e146101435780638da5cb5b1461013e578063a8af4ff514610139578063aaae748e14610134578063ad3cb1cc1461012f578063e41689521461012a578063f2fde38b14610125578063f698da2514610120578063f745cb301461011b5763f9b68b3114610116575f80fd5b611ac7565b611a11565b61163a565b6115f3565b6115ba565b61153d565b611503565b611492565b611422565b6113d2565b611340565b611221565b611110565b61105d565b610ce6565b610c8e565b610bf9565b6109b7565b61083e565b6105bd565b6102e9565b610248565b6101bb565b9181601f840112156101b75782359167ffffffffffffffff83116101b757602083818601950101116101b757565b5f80fd5b346101b75760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75760043567ffffffffffffffff81116101b75761020a903690600401610189565b906024359067ffffffffffffffff82116101b757602092610232610240933690600401610189565b906044359260643594611c82565b604051908152f35b60a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75760043567ffffffffffffffff81116101b757610292903690600401610189565b60243567ffffffffffffffff81116101b7576102b2903690600401610189565b6084359391606435916044359167ffffffffffffffff87116101b7576102df6102e7973690600401610189565b969095611d01565b005b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75760043567ffffffffffffffff81116101b757610333903690600401610189565b60243567ffffffffffffffff81116101b757610353903690600401610189565b91909261035e612781565b61037861036c368484610981565b5161500081111561281a565b61038661036c368587610981565b6103c06103a75f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b5f60405180927f38d8480a00000000000000000000000000000000000000000000000000000000825281806103f988886004840161288b565b039134905af1908115610572575f905f9261054b575b508161041a9161289c565b61042390613349565b6101c081018051516104399060348110156128e5565b5161044390613526565b73ffffffffffffffffffffffffffffffffffffffff821696906104698333808b14612918565b610474368884610981565b805190602001208181149161048892612969565b610493368686610981565b80519060200120906104a582846136e1565b966104ae610926565b60018152946104be368989610981565b6020870152604086015236906104d392610981565b606084015260808301526105059073ffffffffffffffffffffffffffffffffffffffff165f52600160205260405f2090565b9061050f91612dce565b60405192839261051f9284612f62565b037f206fdb1a74851a8542447b8b6704db24a36b906a7297cc23c2b984dc357b997891a26102e76127f5565b61041a925061056c91503d805f833e61056481836108e5565b8101906126a7565b9161040f565b61272c565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b757565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101b757565b346101b75760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b7576105f4610577565b6105fc61059a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054919067ffffffffffffffff61064360ff604086901c16159467ffffffffffffffff1690565b1680159081610836575b600114908161082c575b159081610823575b506107fb576106e091836106d760017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61078057612071565b6106e657005b6107517fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b6107f6680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b612071565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f61065f565b303b159150610657565b84915061064d565b346101b75760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75760206102406004356123af565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60a0810190811067ffffffffffffffff8211176108c357604052565b61087a565b6101e0810190811067ffffffffffffffff8211176108c357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176108c357604052565b6040519061093560a0836108e5565b565b604051906109356101e0836108e5565b67ffffffffffffffff81116108c357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b92919261098d82610947565b9161099b60405193846108e5565b8294818452818301116101b7578281602093845f960137010152565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b7576109e9610577565b60243567ffffffffffffffff81116101b757366023820112156101b757610a1a903690602481600401359101610981565b9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610bb7575b50610b8f57610a6a612f92565b604051917f52d1902d00000000000000000000000000000000000000000000000000000000835260208360048173ffffffffffffffffffffffffffffffffffffffff86165afa5f9381610b5e575b50610aff577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff821660045260245ffd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8303610b31576102e79250613964565b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600483905260245ffd5b610b8191945060203d602011610b88575b610b7981836108e5565b810190612f83565b925f610ab8565b503d610b6f565b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610a5d565b346101b7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610b8f5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b346101b7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75760206040517f95b0f36aa3383d49f247995a06db7a3bd7d07a2e7fe943cfdfc72b826979736a8152f35b346101b7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b757610d1c612f92565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b816101c0610fa0610f8c610f78610f64610f50610f3c610f28610f16610e80610e6d610fb29d6101e060208f8190610e5d8582517fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b01519201526101e08d0190610dc0565b60408d01518c6040818403910152610dc0565b60608c8101517fffffffffffffffff00000000000000000000000000000000000000000000000016908c015260808c8101517fffffffffffffffff00000000000000000000000000000000000000000000000016908c015260a08c8101517fffffffffffffffff00000000000000000000000000000000000000000000000016908c015260c08c01518b820360c08d0152610dc0565b60e08b01518a820360e08c0152610dc0565b6101008a01518982036101008b0152610dc0565b6101208901518882036101208a0152610dc0565b610140880151878203610140890152610dc0565b610160870151868203610160880152610dc0565b610180860151858203610180870152610dc0565b6101a08501518482036101a0860152610dc0565b920151906101c0818403910152610dc0565b90565b90151581526040602082015281511515604082015260c06080611054611020610fed602087015160a0606088015260e0870190610dc0565b60408701517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08783030185880152610e03565b60608601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08683030160a0870152610dc0565b93015191015290565b346101b75760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75773ffffffffffffffffffffffffffffffffffffffff6110a9610577565b5f60806040516110b8816108a7565b828152606060208201526110ca61244c565b6040820152606080820152015216805f52600160205260ff60405f205416905f5260016020526110fc60405f206124b9565b9061110c60405192839283610fb5565b0390f35b346101b75760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75773ffffffffffffffffffffffffffffffffffffffff61115c610577565b165f526002602052602060405f2054604051908152f35b92939073ffffffffffffffffffffffffffffffffffffffff926111c76111d5927f0f00000000000000000000000000000000000000000000000000000000000000875260e0602088015260e0870190610dc0565b908582036040870152610dc0565b9360608401521660808201525f60a082015260c0818303910152602080835192838152019201905f5b81811061120b5750505090565b82518452602093840193909201916001016111fe565b346101b7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b7577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580611317575b156112b957611285612ffe565b61128d61310d565b9061110c60405161129f6020826108e5565b5f8082523660208301376040519384933091469186611173565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415611278565b346101b75760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b757600435335f52600260205261138c60405f20549182808214611fac565b335f52600260205260405f206113a28154612010565b90556040519081527faba960b001cf41ae7d1278e08bf0afa5081bfad043326cfe1e1d5ee266c9ac5260203392a2005b346101b7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b757602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346101b7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b757602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b346101b75760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75773ffffffffffffffffffffffffffffffffffffffff6114de610577565b165f5260016020526040805f20601060ff825416910154825191151582526020820152f35b346101b7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75760206040516150008152f35b346101b7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75761110c60405161157c6040826108e5565b600581527f352e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610dc0565b346101b7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b757602060405160348152f35b346101b75760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b7576102e761162d610577565b611635612f92565b612526565b346101b7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b757611670614cc3565b611678614d2d565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a081526116c960c0826108e5565b519020604051908152602090f35b90600182811c9216801561171e575b60208310146116f157565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916116e6565b5f9291815491611737836116d7565b808352926001811690811561178c575060011461175357505050565b5f9081526020812093945091925b838310611772575060209250010190565b600181602092949394548385870101520191019190611761565b905060209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b906109356117dc9260405193848092611728565b03836108e5565b906119c1600c6117f1610937565b93611826611800825460801b90565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000168652565b611832600182016117c8565b6020860152611843600282016117c8565b604086015261192d61190460038301546118896118608260c01b90565b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608a0152565b6118dc608082901b7fffffffffffffffff000000000000000000000000000000000000000000000000167fffffffffffffffff0000000000000000000000000000000000000000000000001660808a0152565b60401b7fffffffffffffffff0000000000000000000000000000000000000000000000001690565b7fffffffffffffffff0000000000000000000000000000000000000000000000001660a0870152565b611939600482016117c8565b60c086015261194a600582016117c8565b60e086015261195b600682016117c8565b61010086015261196d600782016117c8565b61012086015261197f600882016117c8565b610140860152611991600982016117c8565b6101608601526119a3600a82016117c8565b6101808601526119b5600b82016117c8565b6101a0860152016117c8565b6101c0830152565b959493906080936119f0611a0c946119fe9315158a5260a060208b015260a08a0190610dc0565b9088820360408a0152610e03565b908682036060880152610dc0565b930152565b346101b75760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75773ffffffffffffffffffffffffffffffffffffffff611a5d610577565b165f52600160205260405f2060ff81541661110c60405192611a8d84611a868160018501611728565b03856108e5565b611a99600282016117e3565b90601060405191611ab883611ab181600f8501611728565b03846108e5565b015491604051958695866119c9565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b757611bb2611afc610577565b611b04612781565b5f611b35611b308373ffffffffffffffffffffffffffffffffffffffff165f52600160205260405f2090565b6124b9565b611b5a83611b556020840193611b4f838651511515612613565b51151590565b61265d565b611b7b6103a7835473ffffffffffffffffffffffffffffffffffffffff1690565b90519060405180809681947f38d8480a0000000000000000000000000000000000000000000000000000000083526004830161271b565b039134905af180156105725781611be79173ffffffffffffffffffffffffffffffffffffffff945f91611c67575b5015612737565b611c3a611c128273ffffffffffffffffffffffffffffffffffffffff165f52600160205260405f2090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008154169055565b167f5bb0bbb0993a623e10dd3579bf5b9403deba943e0bfe950b740d60209c9135ef5f80a26102e76127f5565b611c7b91503d805f833e61056481836108e5565b505f611be0565b611c9590611ca493929694963691610981565b60208151910120943691610981565b60208151910120916040519260208401947f95b0f36aa3383d49f247995a06db7a3bd7d07a2e7fe943cfdfc72b826979736a865260408501526060840152608083015260a082015260a08152611cfb60c0826108e5565b51902090565b9396611d3e90611d388598611d30611d2b8a8d899a611d479a8a9e9a8e611d26612781565b611c82565b6123af565b923691610981565b906131de565b9093919361324f565b611d7773ffffffffffffffffffffffffffffffffffffffff831697885f52600260205260405f2054808214611fac565b804211611f815750855f52600260205260405f20611d958154612010565b9055611da561036c368686610981565b611db361036c368785610981565b611dd46103a75f5473ffffffffffffffffffffffffffffffffffffffff1690565b5f60405180927f38d8480a0000000000000000000000000000000000000000000000000000000082528180611e0d8a8a6004840161288b565b039134905af1908115610572575f905f92611f62575b5081611e2e9161289c565b611e3790613349565b916101c08301805151603481101590611e4f916128e5565b51611e5990613526565b90928373ffffffffffffffffffffffffffffffffffffffff8116809a1491611e8092612918565b611e8b368884610981565b8051906020012081811491611e9f92612969565b611eaa368686610981565b8051906020012090611ebc82846136e1565b96611ec5610926565b6001815294611ed5368989610981565b602087015260408601523690611eea92610981565b60608401526080830152611f1c9073ffffffffffffffffffffffffffffffffffffffff165f52600160205260405f2090565b90611f2691612dce565b604051928392611f369284612f62565b037f206fdb1a74851a8542447b8b6704db24a36b906a7297cc23c2b984dc357b997891a26109356127f5565b611e2e9250611f7b91503d805f833e61056481836108e5565b91611e23565b7fbd2a913c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b15611fb5575050565b7f06427aeb000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461203d5760010190565b611fe3565b1561204957565b7f72cd95d7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6120889092919261208061373f565b61163561373f565b60409182519261209881856108e5565b601684527f466c617368746573746174696f6e52656769737472790000000000000000000060208501526120ce815191826108e5565b600181527f3100000000000000000000000000000000000000000000000000000000000000602082015261210061373f565b61210861373f565b835167ffffffffffffffff81116108c35761214c816121477fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102546116d7565b6129b6565b6020601f821160011461229457916121b7826121de9373ffffffffffffffffffffffffffffffffffffffff969561093598995f92612289575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10255613796565b6122065f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10055565b61222e5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10155565b61223661373f565b61223e61373f565b1661224a811515612042565b73ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f55565b015190505f80612185565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216957f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d965f5b818110612397575092610935969773ffffffffffffffffffffffffffffffffffffffff969593600193836121de9710612360575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10255613796565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f8080612333565b838301518955600190980197602093840193016122ff565b6042906123ba614cc3565b6123c2614d2d565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261241360c0826108e5565b51902090604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b60405190612459826108c8565b60606101c0835f81528260208201528260408201525f838201525f60808201525f60a08201528260c08201528260e08201528261010082015282610120820152826101408201528261016082015282610180820152826101a08201520152565b906040516124c6816108a7565b60806010829460ff815416151584526040516124f0816124e98160018601611728565b03826108e5565b6020850152612501600282016117e3565b604085015260405161251a816124e981600f8601611728565b60608501520154910152565b73ffffffffffffffffffffffffffffffffffffffff1680156125e75773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b1561261b5750565b73ffffffffffffffffffffffffffffffffffffffff907fbb527454000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b156126655750565b73ffffffffffffffffffffffffffffffffffffffff907f138c0ee8000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b91906040838203126101b757825180151581036101b7579260208101519067ffffffffffffffff82116101b7570181601f820112156101b7578051906126ec82610947565b926126fa60405194856108e5565b828452602083830101116101b757815f9260208093018386015e8301015290565b906020610fb2928181520190610dc0565b6040513d5f823e3d90fd5b1561273f5750565b73ffffffffffffffffffffffffffffffffffffffff907f927b3443000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6127cd5760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b156128225750565b7f9e24c2f6000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b916020610fb293818152019161284d565b156128a45750565b6128e1906040519182917f64d10cb10000000000000000000000000000000000000000000000000000000083526020600484018181520190610dc0565b0390fd5b156128ed5750565b7f4fe16298000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b15612921575050565b9073ffffffffffffffffffffffffffffffffffffffff80927f38e0a7e5000000000000000000000000000000000000000000000000000000005f52166004521660245260445ffd5b15612972575050565b7fcc14da59000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b8181106129ab575050565b5f81556001016129a0565b90601f82116129c3575050565b610935917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f5260205f20906020601f840160051c83019310612a0e575b601f0160051c01906129a0565b9091508190612a01565b9190601f8111612a2757505050565b610935925f5260205f20906020601f840160051c83019310612a0e57601f0160051c01906129a0565b919091825167ffffffffffffffff81116108c357612a7881612a7284546116d7565b84612a18565b6020601f8211600114612ac9578190612ac59394955f926122895750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b9055565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0821690612afa845f5260205f2090565b915f5b818110612b5357509583600195969710612b1c575b505050811b019055565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f8080612b12565b9192602060018192868b015181550194019201612afd565b600c6101c061093593612bcf612ba182517fffffffffffffffffffffffffffffffff000000000000000000000000000000001690565b859060801c7fffffffffffffffffffffffffffffffff00000000000000000000000000000000825416179055565b612be0602082015160018601612a50565b612bf1604082015160028601612a50565b612d3760038501612c56612c2860608501517fffffffffffffffff0000000000000000000000000000000000000000000000001690565b829060c01c7fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055565b612cc7612c8660808501517fffffffffffffffff0000000000000000000000000000000000000000000000001690565b82547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff1660809190911c6fffffffffffffffff000000000000000016178255565b60a08301517fffffffffffffffff0000000000000000000000000000000000000000000000001681547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660409190911c77ffffffffffffffff0000000000000000000000000000000016179055565b612d4860c082015160048601612a50565b612d5960e082015160058601612a50565b612d6b61010082015160068601612a50565b612d7d61012082015160078601612a50565b612d8f61014082015160088601612a50565b612da161016082015160098601612a50565b612db3610180820151600a8601612a50565b612dc56101a0820151600b8601612a50565b01519101612a50565b90612e0781511515839060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b60018201602082015180519067ffffffffffffffff82116108c357612e3682612e3085546116d7565b85612a18565b602090601f8311600114612eb557826010959360809593612e89935f926122895750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b612e9d604082015160028601612b6b565b612eae6060820151600f8601612a50565b0151910155565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0831691612ee7855f5260205f2090565b925f5b818110612f4a5750926001928592601098966080989610612f13575b505050811b019055612e8c565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f8080612f06565b92936020600181928786015181550195019301612eea565b91602091612f7b9195949560408552604085019161284d565b931515910152565b908160209103126101b7575190565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303612fd257565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6040517fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10254815f61302e836116d7565b80835292600181169081156130d05750600114613052575b610fb2925003826108e5565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b8183106130b4575050906020610fb292820101613046565b602091935080600191548385880101520191019091839261309c565b60209250610fb29491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101613046565b6040517fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10354815f61313d836116d7565b80835292600181169081156130d0575060011461316057610fb2925003826108e5565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b8183106131c2575050906020610fb292820101613046565b60209193508060019154838588010152019101909183926131aa565b815191906041830361320e576132079250602082015190606060408401519301515f1a90613a95565b9192909190565b50505f9160029190565b6004111561322257565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b61325881613218565b80613261575050565b61326a81613218565b6001810361329a577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b6132a381613218565b600281036132d757507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b806132e3600392613218565b146132eb5750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b1561331e5750565b7fd915602a000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b61335161244c565b5080516002116101b7576133656002610947565b61337260405191826108e5565b600281526133806002610947565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602082019201368337816020840160025b60208110156134d857806134b957507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b51825182169119161790525190517fffff00000000000000000000000000000000000000000000000000000000000081169160028110613484575b505060f01c6004810361345957506134548161343e610fb293613b24565b805161344f90610255811015613316565b613cc9565b614af4565b7f940a5ec6000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fffff0000000000000000000000000000000000000000000000000000000000009250829060020360031b1b16165f80613420565b6134cd6134c86134d292614d72565b614dad565b614d80565b906133e5565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156133b357611fe3565b80516014116101b7576135396014610947565b9161354760405193846108e5565b601483526135556014610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501910136823760149381602085015b60208710156136945761360994959680155f1461367f57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b51825182169119161790525190517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116916014811061364a575b505060601c92613dd1565b60208151910151906020811061361d575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1690565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009250829060140360031b1b16165f806135fe565b6134cd6134c861368e92614d72565b906135c3565b90815181526020810180911161203d57906020810180911161203d57957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811161203d5795613588565b73ffffffffffffffffffffffffffffffffffffffff16805f526001602052601060405f2001548092146137145750151590565b7ffb5bab5b000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561376e57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90815167ffffffffffffffff81116108c3576137fc816137d67fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103546116d7565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103612a18565b602092601f821160011461386d57613849929382915f926122895750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10355565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216937f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75915f5b86811061394c5750836001959610613915575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10355565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f80806138eb565b919260206001819286850151815501940192016138d8565b90813b15613a535773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115613a2257613a1f91614c7f565b50565b505034613a2b57565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411613b19579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15610572575f5173ffffffffffffffffffffffffffffffffffffffff811615613b0f57905f905f90565b505f906001905f90565b5050505f9160039190565b9081516006116101b757613b386004610947565b613b4560405191826108e5565b60048152613b536004610947565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208201920136833760226004940182905b6020861015613c7c577fffffffff00000000000000000000000000000000000000000000000000000000949580155f14613c6757507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b51825182169119161790525190518281169160048110613c52575b5050167f81000000000000000000000000000000000000000000000000000000000000008103613c275750565b7fea75591a000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b839250829060040360031b1b16165f80613bfa565b6134cd6134c8613c7692614d72565b90613bdf565b90815181526020810180911161203d57906020810180911161203d57947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811161203d5794613b87565b8051610255116101b757613cde610248610947565b90613cec60405192836108e5565b6102488252613cfc610248610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208401910136823790602d016102485b6020811015613d835780613d6e57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b518251821691191617905290565b6134cd6134c8613d7d92614d72565b90613d60565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613d2e57611fe3565b80516034116101b757613de46020610947565b90613df260405192836108e5565b60208252613e006020610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060340160205b6020811015613e475780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613e3157611fe3565b80516010116101b757613ea86010610947565b90613eb660405192836108e5565b60108252613ec46010610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060200160105b6020811015613f0b5780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613ef557611fe3565b80516040116101b757613f6c6030610947565b90613f7a60405192836108e5565b60308252613f886030610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237603080920190915b6020811015613fd05780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613fba57611fe3565b80516070116101b7576140316030610947565b9061403f60405192836108e5565b6030825261404d6030610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060600160305b60208110156140945780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561407e57611fe3565b80516078116101b7576140f56008610947565b9061410360405192836108e5565b600882526141116008610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060900160085b60208110156141585780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561414257611fe3565b80516080116101b7576141b96008610947565b906141c760405192836108e5565b600882526141d56008610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060980160085b602081101561421c5780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561420657611fe3565b80516088116101b75761427d6008610947565b9061428b60405192836108e5565b600882526142996008610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060a00160085b60208110156142e05780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156142ca57611fe3565b805160b8116101b7576143416030610947565b9061434f60405192836108e5565b6030825261435d6030610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060a80160305b60208110156143a45780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561438e57611fe3565b805160e8116101b7576144056030610947565b9061441360405192836108e5565b603082526144216030610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060d80160305b60208110156144685780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561445257611fe3565b8051610118116101b7576144ca6030610947565b906144d860405192836108e5565b603082526144e66030610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101080160305b602081101561452e5780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561451857611fe3565b8051610148116101b7576145906030610947565b9061459e60405192836108e5565b603082526145ac6030610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101380160305b60208110156145f45780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156145de57611fe3565b8051610178116101b7576146566030610947565b9061466460405192836108e5565b603082526146726030610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101680160305b60208110156146ba5780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156146a457611fe3565b80516101a8116101b75761471c6030610947565b9061472a60405192836108e5565b603082526147386030610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101980160305b60208110156147805780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561476a57611fe3565b80516101d8116101b7576147e26030610947565b906147f060405192836108e5565b603082526147fe6030610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101c80160305b60208110156148465780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561483057611fe3565b8051610208116101b7576148a86030610947565b906148b660405192836108e5565b603082526148c46030610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101f80160305b602081101561490c5780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156148f657611fe3565b8051610248116101b75761496e6040610947565b9061497c60405192836108e5565b6040825261498a6040610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906102280160405b60208110156149d25780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156149bc57611fe3565b90602082519201517fffffffffffffffffffffffffffffffff0000000000000000000000000000000081169260108110614a58575050565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000929350829060100360031b1b161690565b90602082519201517fffffffffffffffff00000000000000000000000000000000000000000000000081169260088110614ac2575050565b7fffffffffffffffff000000000000000000000000000000000000000000000000929350829060080360031b1b161690565b906119c1614b0061244c565b92614b3b614b15614b1083613e95565b614a20565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000168552565b614b4481613f59565b6020850152614b528161401e565b6040850152614b94614b6b614b66836140e2565b614a8a565b7fffffffffffffffff000000000000000000000000000000000000000000000000166060860152565b614bcc614ba3614b66836141a6565b7fffffffffffffffff000000000000000000000000000000000000000000000000166080860152565b614c04614bdb614b668361426a565b7fffffffffffffffff0000000000000000000000000000000000000000000000001660a0860152565b614c0d8161432e565b60c0850152614c1b816143f2565b60e0850152614c29816144b6565b610100850152614c388161457c565b610120850152614c4781614642565b610140850152614c5681614708565b610160850152614c65816147ce565b610180850152614c7481614894565b6101a085015261495a565b5f80610fb293602081519101845af43d15614cbb573d91614c9f83610947565b92614cad60405194856108e5565b83523d5f602085013e614dbc565b606091614dbc565b614ccb612ffe565b8051908115614cdb576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100548015614d085790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b614d3561310d565b8051908115614d45576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101548015614d085790565b602003906020821161203d57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161203d57565b601f811161203d576101000a90565b90614df95750805115614dd157805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580614e4c575b614e0a575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15614e0256fea164736f6c634300081c000a", + "sourceMap": "1080:11972:97:-:0;;;;;;;1171:4:51;1163:13;;1080:11972:97;;;;;;1163:13:51;1080:11972:97;;;;;;;;;;;;;;", + "linkReferences": {} + } +} diff --git a/crates/op-rbuilder/src/tests/framework/artifacts/contracts/MockAutomataDcapAttestationFee.json b/crates/op-rbuilder/src/tests/framework/artifacts/contracts/MockAutomataDcapAttestationFee.json new file mode 100644 index 000000000..1ccf04a53 --- /dev/null +++ b/crates/op-rbuilder/src/tests/framework/artifacts/contracts/MockAutomataDcapAttestationFee.json @@ -0,0 +1,86 @@ +{ + "abi": [ + { + "type": "function", + "name": "baseFee", + "inputs": [], + "outputs": [ + { "name": "", "type": "uint256", "internalType": "uint256" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "quoteResults", + "inputs": [ + { "name": "", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [ + { "name": "success", "type": "bool", "internalType": "bool" }, + { "name": "output", "type": "bytes", "internalType": "bytes" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setBaseFee", + "inputs": [ + { + "name": "_baseFee", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setQuoteResult", + "inputs": [ + { + "name": "rawQuote", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "_success", "type": "bool", "internalType": "bool" }, + { "name": "_output", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "verifyAndAttestOnChain", + "inputs": [ + { "name": "rawQuote", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [ + { "name": "", "type": "bool", "internalType": "bool" }, + { "name": "", "type": "bytes", "internalType": "bytes" } + ], + "stateMutability": "payable" + }, + { + "type": "error", + "name": "InsufficientFee", + "inputs": [ + { + "name": "required", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "provided", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "bytecode": { + "object": "0x608080604052346015576106fa908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806338d8480a146103b957806346860698146103825780636ef25c3a1461034757806389e7a16d146102b957639321d73e14610050575f80fd5b346102b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b55760043567ffffffffffffffff81116102b55761009f90369060040161048d565b6024358015158091036102b5576044359167ffffffffffffffff83116102b55760206100d1600194369060040161056a565b94604051936100df8561050d565b845281840195865282604051938492833781015f8152030190209051151560ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00835416911617815501905190815167ffffffffffffffff81116102885761014782546105de565b601f8111610243575b50602092601f82116001146101aa57928192935f9261019f575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790555f80f35b015190505f8061016a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0821693835f52805f20915f5b86811061022b57508360019596106101f4575b505050811b019055005b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f80806101ea565b919260206001819286850151815501940192016101d7565b825f5260205f20601f830160051c8101916020841061027e575b601f0160051c01905b8181106102735750610150565b5f8155600101610266565b909150819061025d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80fd5b346102b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b55760043567ffffffffffffffff81116102b557602061030b8192369060040161056a565b604051928184925191829101835e81015f815203019020610333600160ff835416920161062f565b90610343604051928392836104bb565b0390f35b346102b5575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b5576020600154604051908152f35b346102b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b557600435600155005b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b55760043567ffffffffffffffff81116102b55761040390369060040161048d565b9060015480341061045e575060209082604051938492833781015f8152030190206104456001604051926104368461050d565b60ff815416151584520161062f565b90816020820152511515610343604051928392836104bb565b7fa458261b000000000000000000000000000000000000000000000000000000005f526004523460245260445ffd5b9181601f840112156102b55782359167ffffffffffffffff83116102b557602083818601950101116102b557565b90601f60206060947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093151585526040828601528051918291826040880152018686015e5f8582860101520116010190565b6040810190811067ffffffffffffffff82111761028857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761028857604052565b81601f820112156102b55780359067ffffffffffffffff821161028857604051926105bd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185610529565b828452602083830101116102b557815f926020809301838601378301015290565b90600182811c92168015610625575b60208310146105f857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916105ed565b9060405191825f825492610642846105de565b80845293600181169081156106ad5750600114610669575b5061066792500383610529565b565b90505f9291925260205f20905f915b818310610691575050906020610667928201015f61065a565b6020919350806001915483858901015201910190918492610678565b602093506106679592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f61065a56fea164736f6c634300081c000a", + "sourceMap": "865:844:109:-:0;;;;;;;;;;;;;;;;;", + "linkReferences": {} + } +} diff --git a/crates/op-rbuilder/src/tests/framework/artifacts/quote-output.bin b/crates/op-rbuilder/src/tests/framework/artifacts/quote-output.bin new file mode 100644 index 000000000..84b2c09b7 Binary files /dev/null and b/crates/op-rbuilder/src/tests/framework/artifacts/quote-output.bin differ diff --git a/crates/op-rbuilder/src/tests/framework/artifacts/test-quote.bin b/crates/op-rbuilder/src/tests/framework/artifacts/test-quote.bin new file mode 100644 index 000000000..057f9ed2d Binary files /dev/null and b/crates/op-rbuilder/src/tests/framework/artifacts/test-quote.bin differ diff --git a/crates/op-rbuilder/src/tests/framework/contracts.rs b/crates/op-rbuilder/src/tests/framework/contracts.rs new file mode 100644 index 000000000..5f9b24493 --- /dev/null +++ b/crates/op-rbuilder/src/tests/framework/contracts.rs @@ -0,0 +1,43 @@ +pub mod flashtestation_registry { + use crate::tests::framework::contracts::block_builder_policy::BlockBuilderPolicy::TD10ReportBody; + use alloy_sol_types::sol; + + sol!( + // https://github.com/flashbots/flashtestations/tree/7cc7f68492fe672a823dd2dead649793aac1f216 + #[sol(rpc, abi)] + FlashtestationRegistry, + "src/tests/framework/artifacts/contracts/FlashtestationRegistry.json", + ); +} + +pub mod block_builder_policy { + use crate::tests::framework::contracts::block_builder_policy::BlockBuilderPolicy::TD10ReportBody; + use alloy_sol_types::sol; + + sol!( + // https://github.com/flashbots/flashtestations/tree/7cc7f68492fe672a823dd2dead649793aac1f216 + #[sol(rpc, abi)] + BlockBuilderPolicy, + "src/tests/framework/artifacts/contracts/BlockBuilderPolicy.json", + ); +} + +pub mod flashblocks_number_contract { + use alloy_sol_types::sol; + sol!( + // https://github.com/Uniswap/flashblocks_number_contract/tree/c21ca0aedc3ff4d1eecf20cd55abeb984080bc78 + #[sol(rpc, abi)] + FlashblocksNumber, + "src/tests/framework/artifacts/contracts/FlashblocksNumberContract.json", + ); +} + +pub mod mock_dcap_attestation { + use alloy_sol_types::sol; + sol!( + // https://github.com/flashbots/flashtestations/tree/7cc7f68492fe672a823dd2dead649793aac1f216 + #[sol(rpc, abi)] + MockAutomataDcapAttestationFee, + "src/tests/framework/artifacts/contracts/MockAutomataDcapAttestationFee.json", + ); +} diff --git a/crates/op-rbuilder/src/tests/framework/driver.rs b/crates/op-rbuilder/src/tests/framework/driver.rs index 5f273c1c1..6e9f83f76 100644 --- a/crates/op-rbuilder/src/tests/framework/driver.rs +++ b/crates/op-rbuilder/src/tests/framework/driver.rs @@ -14,12 +14,10 @@ use rollup_boost::OpExecutionPayloadEnvelope; use super::{EngineApi, Ipc, LocalInstance, TransactionBuilder}; use crate::{ args::OpRbuilderArgs, - tests::{ExternalNode, Protocol}, + tests::{ExternalNode, Protocol, framework::DEFAULT_GAS_LIMIT}, tx_signer::Signer, }; -const DEFAULT_GAS_LIMIT: u64 = 10_000_000; - /// The ChainDriver is a type that allows driving the op builder node to build new blocks manually /// by calling the `build_new_block` method. It uses the Engine API to interact with the node /// and the provider to fetch blocks and transactions. diff --git a/crates/op-rbuilder/src/tests/framework/instance.rs b/crates/op-rbuilder/src/tests/framework/instance.rs index 45bf5e62e..7721ae2b0 100644 --- a/crates/op-rbuilder/src/tests/framework/instance.rs +++ b/crates/op-rbuilder/src/tests/framework/instance.rs @@ -4,12 +4,13 @@ use crate::{ primitives::reth::engine_api_builder::OpEngineApiBuilder, revert_protection::{EthApiExtServer, RevertProtectionExt}, tests::{ - EngineApi, Ipc, TransactionPoolObserver, create_test_db, - framework::{BUILDER_PRIVATE_KEY, driver::ChainDriver}, + EngineApi, Ipc, TransactionPoolObserver, builder_signer, create_test_db, + framework::driver::ChainDriver, }, tx::FBPooledTransaction, tx_signer::Signer, }; +use alloy_primitives::B256; use alloy_provider::{Identity, ProviderBuilder, RootProvider}; use clap::Parser; use core::{ @@ -20,10 +21,11 @@ use core::{ task::{Context, Poll}, time::Duration, }; -use futures::FutureExt; +use futures::{FutureExt, StreamExt}; use moka::future::Cache; use nanoid::nanoid; use op_alloy_network::Optimism; +use parking_lot::Mutex; use reth::{ args::{DatadirArgs, NetworkArgs, RpcServerArgs}, core::exit::NodeExitFuture, @@ -38,8 +40,12 @@ use reth_optimism_node::{ }; use reth_optimism_rpc::OpEthApiBuilder; use reth_transaction_pool::{AllTransactionsEvents, TransactionPool}; +use rollup_boost::FlashblocksPayloadV1; use std::sync::{Arc, LazyLock}; -use tokio::sync::oneshot; +use tokio::{sync::oneshot, task::JoinHandle}; +use tokio_tungstenite::{connect_async, tungstenite::Message}; +use tokio_util::sync::CancellationToken; +use tracing::warn; /// Represents a type that emulates a local in-process instance of the OP builder node. /// This node uses IPC as the communication channel for the RPC server Engine API. @@ -60,7 +66,7 @@ impl LocalInstance { /// This method does not prefund any accounts, so before sending any transactions /// make sure that sender accounts are funded. pub async fn new(args: OpRbuilderArgs) -> eyre::Result { - Self::new_with_config::

(args, default_node_config()).await + Box::pin(Self::new_with_config::

(args, default_node_config())).await } /// Creates a new local instance of the OP builder node with the given arguments, @@ -82,14 +88,7 @@ impl LocalInstance { let (txpool_ready_tx, txpool_ready_rx) = oneshot::channel::>(); - let signer = args.builder_signer.unwrap_or_else(|| { - Signer::try_from_secret( - BUILDER_PRIVATE_KEY - .parse() - .expect("Invalid builder private key"), - ) - .expect("Failed to create signer from private key") - }); + let signer = args.builder_signer.unwrap_or(builder_signer()); args.builder_signer = Some(signer); args.rollup_args.enable_tx_conditional = true; @@ -225,6 +224,10 @@ impl LocalInstance { format!("ws://{ipaddr}:{port}/") } + pub fn spawn_flashblocks_listener(&self) -> FlashblocksListener { + FlashblocksListener::new(self.flashblocks_ws_url()) + } + pub fn rpc_ipc(&self) -> &str { &self.config.rpc.ipcpath } @@ -345,3 +348,98 @@ fn pool_component(args: &OpRbuilderArgs) -> OpPoolBuilder { rollup_args.supervisor_safety_level, ) } + +/// A utility for listening to flashblocks WebSocket messages during tests. +/// +/// This provides a reusable way to capture and inspect flashblocks that are produced +/// during test execution, eliminating the need for duplicate WebSocket listening code. +pub struct FlashblocksListener { + pub flashblocks: Arc>>, + pub cancellation_token: CancellationToken, + pub handle: JoinHandle>, +} + +impl FlashblocksListener { + /// Create a new flashblocks listener that connects to the given WebSocket URL. + /// + /// The listener will automatically parse incoming messages as FlashblocksPayloadV1. + fn new(flashblocks_ws_url: String) -> Self { + let flashblocks = Arc::new(Mutex::new(Vec::new())); + let cancellation_token = CancellationToken::new(); + + let flashblocks_clone = flashblocks.clone(); + let cancellation_token_clone = cancellation_token.clone(); + + let handle = tokio::spawn(async move { + let (ws_stream, _) = connect_async(flashblocks_ws_url).await?; + let (_, mut read) = ws_stream.split(); + + loop { + tokio::select! { + _ = cancellation_token_clone.cancelled() => { + break Ok(()); + } + Some(Ok(Message::Text(text))) = read.next() => { + let fb = serde_json::from_str(&text).unwrap(); + warn!("GOT FB: {fb:#?}"); + flashblocks_clone.lock().push(fb); + } + } + } + }); + + Self { + flashblocks, + cancellation_token, + handle, + } + } + + /// Get a snapshot of all received flashblocks + pub fn get_flashblocks(&self) -> Vec { + self.flashblocks.lock().clone() + } + + /// Find a flashblock by index + pub fn find_flashblock(&self, index: u64) -> Option { + self.flashblocks + .lock() + .iter() + .find(|fb| fb.index == index) + .cloned() + } + + /// Check if any flashblock contains the given transaction hash + pub fn contains_transaction(&self, tx_hash: &B256) -> bool { + let tx_hash_str = format!("{tx_hash:#x}"); + self.flashblocks.lock().iter().any(|fb| { + if let Some(receipts) = fb.metadata.get("receipts") { + if let Some(receipts_obj) = receipts.as_object() { + return receipts_obj.contains_key(&tx_hash_str); + } + } + false + }) + } + + /// Find which flashblock index contains the given transaction hash + pub fn find_transaction_flashblock(&self, tx_hash: &B256) -> Option { + let tx_hash_str = format!("{tx_hash:#x}"); + self.flashblocks.lock().iter().find_map(|fb| { + if let Some(receipts) = fb.metadata.get("receipts") { + if let Some(receipts_obj) = receipts.as_object() { + if receipts_obj.contains_key(&tx_hash_str) { + return Some(fb.index); + } + } + } + None + }) + } + + /// Stop the listener and wait for it to complete + pub async fn stop(self) -> eyre::Result<()> { + self.cancellation_token.cancel(); + self.handle.await? + } +} diff --git a/crates/op-rbuilder/src/tests/framework/macros/src/lib.rs b/crates/op-rbuilder/src/tests/framework/macros/src/lib.rs index 64cb940ab..daa88c7e7 100644 --- a/crates/op-rbuilder/src/tests/framework/macros/src/lib.rs +++ b/crates/op-rbuilder/src/tests/framework/macros/src/lib.rs @@ -28,7 +28,7 @@ const BUILDER_VARIANTS: &[VariantInfo] = &[ { let mut args = #args; args.flashblocks.enabled = true; - args.flashblocks.flashblocks_port = 0; + args.flashblocks.flashblocks_port = crate::tests::get_available_port(); args } } @@ -38,7 +38,7 @@ const BUILDER_VARIANTS: &[VariantInfo] = &[ { let mut args = crate::args::OpRbuilderArgs::default(); args.flashblocks.enabled = true; - args.flashblocks.flashblocks_port = 0; + args.flashblocks.flashblocks_port = crate::tests::get_available_port(); args } } @@ -231,6 +231,16 @@ pub fn rb_test(args: TokenStream, input: TokenStream) -> TokenStream { generated_functions.push(quote! { #test_attribute async fn #test_name() -> eyre::Result<()> { + let subscriber = tracing_subscriber::fmt() + .with_env_filter(std::env::var("RUST_LOG") + .unwrap_or_else(|_| "info".to_string())) + .with_file(true) + .with_line_number(true) + .with_test_writer() + .finish(); + let _guard = tracing::subscriber::set_global_default(subscriber); + tracing::info!("{} start", stringify!(#test_name)); + let instance = #instance_init; #original_name(instance).await } diff --git a/crates/op-rbuilder/src/tests/framework/mod.rs b/crates/op-rbuilder/src/tests/framework/mod.rs index d9c7bf1fb..4e3171fb9 100644 --- a/crates/op-rbuilder/src/tests/framework/mod.rs +++ b/crates/op-rbuilder/src/tests/framework/mod.rs @@ -1,4 +1,5 @@ mod apis; +mod contracts; mod driver; mod external; mod instance; @@ -6,17 +7,20 @@ mod txs; mod utils; pub use apis::*; +pub use contracts::*; pub use driver::*; pub use external::*; pub use instance::*; pub use txs::*; pub use utils::*; -const BUILDER_PRIVATE_KEY: &str = +pub const BUILDER_PRIVATE_KEY: &str = "0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d"; -const FUNDED_PRIVATE_KEYS: &[&str] = - &["0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"]; +pub const FUNDED_PRIVATE_KEY: &str = + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"; + +pub const DEFAULT_GAS_LIMIT: u64 = 10_000_000; pub const DEFAULT_JWT_TOKEN: &str = "688f5d737bad920bdfb2fc2f488d6b6209eebda1dae949a8de91398d932c517a"; diff --git a/crates/op-rbuilder/src/tests/framework/txs.rs b/crates/op-rbuilder/src/tests/framework/txs.rs index 24a1748d6..e8133b05e 100644 --- a/crates/op-rbuilder/src/tests/framework/txs.rs +++ b/crates/op-rbuilder/src/tests/framework/txs.rs @@ -1,5 +1,6 @@ use crate::{ primitives::bundle::{Bundle, BundleResult}, + tests::funded_signer, tx::FBPooledTransaction, tx_signer::Signer, }; @@ -21,16 +22,46 @@ use tracing::debug; use alloy_eips::eip1559::MIN_PROTOCOL_BASE_FEE; -use super::FUNDED_PRIVATE_KEYS; - #[derive(Clone, Copy, Default)] pub struct BundleOpts { - pub block_number_min: Option, - pub block_number_max: Option, - pub flashblock_number_min: Option, - pub flashblock_number_max: Option, - pub min_timestamp: Option, - pub max_timestamp: Option, + block_number_min: Option, + block_number_max: Option, + flashblock_number_min: Option, + flashblock_number_max: Option, + min_timestamp: Option, + max_timestamp: Option, +} + +impl BundleOpts { + pub fn with_block_number_min(mut self, block_number_min: u64) -> Self { + self.block_number_min = Some(block_number_min); + self + } + + pub fn with_block_number_max(mut self, block_number_max: u64) -> Self { + self.block_number_max = Some(block_number_max); + self + } + + pub fn with_flashblock_number_min(mut self, flashblock_number_min: u64) -> Self { + self.flashblock_number_min = Some(flashblock_number_min); + self + } + + pub fn with_flashblock_number_max(mut self, flashblock_number_max: u64) -> Self { + self.flashblock_number_max = Some(flashblock_number_max); + self + } + + pub fn with_min_timestamp(mut self, min_timestamp: u64) -> Self { + self.min_timestamp = Some(min_timestamp); + self + } + + pub fn with_max_timestamp(mut self, max_timestamp: u64) -> Self { + self.max_timestamp = Some(max_timestamp); + self + } } #[derive(Clone)] @@ -42,7 +73,6 @@ pub struct TransactionBuilder { tx: TxEip1559, bundle_opts: Option, with_reverted_hash: bool, - key: Option, } impl TransactionBuilder { @@ -59,7 +89,6 @@ impl TransactionBuilder { }, bundle_opts: None, with_reverted_hash: false, - key: None, } } @@ -73,11 +102,6 @@ impl TransactionBuilder { self } - pub fn with_key(mut self, key: u64) -> Self { - self.key = Some(key); - self - } - pub fn with_value(mut self, value: u128) -> Self { self.tx.value = U256::from(value); self @@ -134,14 +158,7 @@ impl TransactionBuilder { } pub async fn build(mut self) -> Recovered { - let signer = self.signer.unwrap_or_else(|| { - Signer::try_from_secret( - FUNDED_PRIVATE_KEYS[self.key.unwrap_or(0) as usize] - .parse() - .expect("invalid hardcoded builder private key"), - ) - .expect("Failed to create signer from hardcoded private key") - }); + let signer = self.signer.unwrap_or(funded_signer()); let nonce = match self.nonce { Some(nonce) => nonce, @@ -197,8 +214,8 @@ impl TransactionBuilder { }, block_number_min: bundle_opts.block_number_min, block_number_max: bundle_opts.block_number_max, - flashblock_number_min: bundle_opts.block_number_min, - flashblock_number_max: bundle_opts.block_number_max, + flashblock_number_min: bundle_opts.flashblock_number_min, + flashblock_number_max: bundle_opts.flashblock_number_max, min_timestamp: bundle_opts.min_timestamp, max_timestamp: bundle_opts.max_timestamp, }; diff --git a/crates/op-rbuilder/src/tests/framework/utils.rs b/crates/op-rbuilder/src/tests/framework/utils.rs index 705a8d988..764b3fa31 100644 --- a/crates/op-rbuilder/src/tests/framework/utils.rs +++ b/crates/op-rbuilder/src/tests/framework/utils.rs @@ -1,10 +1,16 @@ use crate::{ - tests::{ONE_ETH, Protocol, framework::driver::ChainDriver}, + tests::{ + BUILDER_PRIVATE_KEY, Protocol, block_builder_policy::BlockBuilderPolicy, + flashblocks_number_contract::FlashblocksNumber, + flashtestation_registry::FlashtestationRegistry, framework::driver::ChainDriver, + mock_dcap_attestation::MockAutomataDcapAttestationFee, + }, tx_signer::Signer, }; use alloy_eips::Encodable2718; use alloy_primitives::{Address, B256, BlockHash, TxHash, TxKind, U256, hex}; use alloy_rpc_types_eth::{Block, BlockTransactionHashes}; +use alloy_sol_types::SolCall; use core::future::Future; use op_alloy_consensus::{OpTypedTransaction, TxDeposit}; use op_alloy_rpc_types::Transaction; @@ -15,14 +21,24 @@ use reth_db::{ }; use reth_node_core::{args::DatadirArgs, dirs::DataDirPath, node_config::NodeConfig}; use reth_optimism_chainspec::OpChainSpec; -use std::sync::Arc; +use std::{net::TcpListener, sync::Arc}; -use super::{FUNDED_PRIVATE_KEYS, TransactionBuilder}; +use super::{FUNDED_PRIVATE_KEY, TransactionBuilder}; pub trait TransactionBuilderExt { fn random_valid_transfer(self) -> Self; fn random_reverting_transaction(self) -> Self; fn random_big_transaction(self) -> Self; + // flashblocks number methods + fn deploy_flashblock_number_contract(self) -> Self; + fn init_flashblock_number_contract(self, register_builder: bool) -> Self; + // flashtestations methods + fn deploy_flashtestation_registry_contract(self) -> Self; + fn init_flashtestation_registry_contract(self, dcap_address: Address) -> Self; + fn deploy_builder_policy_contract(self) -> Self; + fn init_builder_policy_contract(self, registry_address: Address) -> Self; + fn deploy_mock_dcap_contract(self) -> Self; + fn add_mock_quote(self) -> Self; } impl TransactionBuilderExt for TransactionBuilder { @@ -34,15 +50,94 @@ impl TransactionBuilderExt for TransactionBuilder { self.with_create().with_input(hex!("60006000fd").into()) // PUSH1 0x00 PUSH1 0x00 REVERT } + // This transaction is big in the sense that it uses a lot of gas. The exact + // amount it uses is 86220 gas. fn random_big_transaction(self) -> Self { // PUSH13 0x63ffffffff60005260046000f3 PUSH1 0x00 MSTORE PUSH1 0x02 PUSH1 0x0d PUSH1 0x13 PUSH1 0x00 CREATE2 self.with_create() .with_input(hex!("6c63ffffffff60005260046000f36000526002600d60136000f5").into()) } + + fn deploy_flashblock_number_contract(self) -> Self { + self.with_create() + .with_input(FlashblocksNumber::BYTECODE.clone()) + .with_gas_limit(2_000_000) // deployment costs ~1.6 million gas + } + + fn init_flashblock_number_contract(self, register_builder: bool) -> Self { + let builder_signer = builder_signer(); + let owner = funded_signer(); + + let init_data = FlashblocksNumber::initializeCall { + _owner: owner.address, + _initialBuilders: if register_builder { + vec![builder_signer.address] + } else { + vec![] + }, + } + .abi_encode(); + + self.with_input(init_data.into()) + } + + fn deploy_flashtestation_registry_contract(self) -> Self { + self.with_create() + .with_input(FlashtestationRegistry::BYTECODE.clone()) + .with_gas_limit(1_000_000) + } + + fn init_flashtestation_registry_contract(self, dcap_address: Address) -> Self { + let owner = funded_signer(); + + let init_data = FlashtestationRegistry::initializeCall { + owner: owner.address, + _attestationContract: dcap_address, + } + .abi_encode(); + + self.with_input(init_data.into()) + } + + fn deploy_builder_policy_contract(self) -> Self { + self.with_create() + .with_input(BlockBuilderPolicy::BYTECODE.clone()) + .with_gas_limit(1_000_000) + } + + fn init_builder_policy_contract(self, registry_address: Address) -> Self { + let owner = funded_signer(); + + let init_data = BlockBuilderPolicy::initializeCall { + _initialOwner: owner.address, + _registry: registry_address, + } + .abi_encode(); + + self.with_input(init_data.into()) + } + + fn deploy_mock_dcap_contract(self) -> Self { + self.with_create() + .with_input(MockAutomataDcapAttestationFee::BYTECODE.clone()) + .with_gas_limit(1_000_000) + } + + fn add_mock_quote(self) -> Self { + let quote = MockAutomataDcapAttestationFee::setQuoteResultCall { + // quote from http://ns31695324.ip-141-94-163.eu:10080/attest for builder key + rawQuote: include_bytes!("./artifacts/test-quote.bin").into(), + _success: true, + // response from verifyAndAttestOnChain from the real automata dcap contract on + // unichain sepolia 0x95175096a9B74165BE0ac84260cc14Fc1c0EF5FF + _output: include_bytes!("./artifacts/quote-output.bin").into(), + } + .abi_encode(); + self.with_input(quote.into()).with_gas_limit(500_000) + } } pub trait ChainDriverExt { - fn fund_default_accounts(&self) -> impl Future>; fn fund_many( &self, addresses: Vec

, @@ -50,11 +145,6 @@ pub trait ChainDriverExt { ) -> impl Future>; fn fund(&self, address: Address, amount: u128) -> impl Future>; - fn first_funded_address(&self) -> Address { - FUNDED_PRIVATE_KEYS[0] - .parse() - .expect("Invalid funded private key") - } fn fund_accounts( &self, @@ -79,14 +169,6 @@ pub trait ChainDriverExt { } impl ChainDriverExt for ChainDriver

{ - async fn fund_default_accounts(&self) -> eyre::Result<()> { - for key in FUNDED_PRIVATE_KEYS { - let signer: Signer = key.parse()?; - self.fund(signer.address, ONE_ETH).await?; - } - Ok(()) - } - async fn fund_many(&self, addresses: Vec

, amount: u128) -> eyre::Result { let mut txs = Vec::with_capacity(addresses.len()); @@ -226,3 +308,32 @@ pub fn create_test_db(config: NodeConfig) -> Arc u16 { + TcpListener::bind("127.0.0.1:0") + .expect("Failed to bind to random port") + .local_addr() + .expect("Failed to get local address") + .port() +} + +pub fn builder_signer() -> Signer { + Signer::try_from_secret( + BUILDER_PRIVATE_KEY + .parse() + .expect("invalid hardcoded builder private key"), + ) + .expect("Failed to create signer from hardcoded builder private key") +} + +pub fn funded_signer() -> Signer { + Signer::try_from_secret( + FUNDED_PRIVATE_KEY + .parse() + .expect("invalid hardcoded funded private key"), + ) + .expect("Failed to create signer from hardcoded funded private key") +} diff --git a/crates/op-rbuilder/src/tests/gas_limiter.rs b/crates/op-rbuilder/src/tests/gas_limiter.rs new file mode 100644 index 000000000..00dfb0353 --- /dev/null +++ b/crates/op-rbuilder/src/tests/gas_limiter.rs @@ -0,0 +1,121 @@ +use crate::{ + args::OpRbuilderArgs, + gas_limiter::args::GasLimiterArgs, + tests::{ChainDriverExt, LocalInstance, TransactionBuilderExt}, +}; +use macros::rb_test; +use std::collections::HashSet; +use tracing::info; + +/// Integration test for the gas limiter functionality. +/// Tests that gas limits are properly enforced during actual block building +/// and transaction execution. +#[rb_test(args = OpRbuilderArgs { + gas_limiter: GasLimiterArgs { + gas_limiter_enabled: true, + max_gas_per_address: 200000, // 200k gas per address - low for testing + refill_rate_per_block: 100000, // 100k gas refill per block + cleanup_interval: 100, + }, + ..Default::default() +})] +async fn gas_limiter_blocks_excessive_usage(rbuilder: LocalInstance) -> eyre::Result<()> { + let driver = rbuilder.driver().await?; + + // Fund some accounts for testing + let funded_accounts = driver + .fund_accounts(2, 10_000_000_000_000_000_000u128) + .await?; // 10 ETH each + + // These transactions should not be throttled + let tx1 = driver + .create_transaction() + .with_signer(funded_accounts[0]) + .random_valid_transfer() + .send() + .await?; + + let tx2 = driver + .create_transaction() + .with_signer(funded_accounts[1]) + .random_valid_transfer() + .send() + .await?; + + // Build block and verify inclusion + let block = driver.build_new_block_with_current_timestamp(None).await?; + let tx_hashes: HashSet<_> = block.transactions.hashes().collect(); + + assert!(tx_hashes.contains(tx1.tx_hash()), "tx1 should be included"); + assert!(tx_hashes.contains(tx2.tx_hash()), "tx2 should be included"); + + // Send multiple big transactions from the same address - these should hit the gas limiter + let mut sent_txs = Vec::new(); + for i in 0..5 { + let big_tx = driver + .create_transaction() + .with_signer(funded_accounts[0]) + .random_big_transaction() + .send() + .await?; + sent_txs.push(*big_tx.tx_hash()); + info!( + "Sent big transaction {} from address {}", + i + 1, + funded_accounts[0].address + ); + } + + // Meanwhile, the other address should not be throttled + let legit_tx = driver + .create_transaction() + .with_signer(funded_accounts[1]) + .random_big_transaction() + .send() + .await?; + + let block = driver.build_new_block_with_current_timestamp(None).await?; + let tx_hashes: HashSet<_> = block.transactions.hashes().collect(); + + let included_count = sent_txs.iter().filter(|tx| tx_hashes.contains(*tx)).count(); + + // With gas limiting, we shouldn't get all 5 big transactions from the same + // address. We do this imprecise count because we haven't built a way of + // sending a tx that uses an exact amount of gas. + assert!( + included_count < 5, + "Gas limiter should have rejected some transactions, included: {}/5", + included_count + ); + assert!( + included_count > 0, + "Gas limiter should have allowed at least one transaction" + ); + + assert!( + tx_hashes.contains(legit_tx.tx_hash()), + "Transaction from different address should be included" + ); + + // After building new blocks, the limited address should get more capacity + for _ in 0..3 { + let _block = driver.build_new_block_with_current_timestamp(None).await?; + } + + let tx_after_refill = driver + .create_transaction() + .with_signer(funded_accounts[0]) + .random_valid_transfer() + .send() + .await?; + + let refill_block = driver.build_new_block_with_current_timestamp(None).await?; + let refill_tx_hashes: HashSet<_> = refill_block.transactions.hashes().collect(); + + assert!( + refill_tx_hashes.contains(tx_after_refill.tx_hash()), + "Transaction should succeed after refill" + ); + + Ok(()) +} diff --git a/crates/op-rbuilder/src/tests/mod.rs b/crates/op-rbuilder/src/tests/mod.rs index ecdda8bb2..f32eccb61 100644 --- a/crates/op-rbuilder/src/tests/mod.rs +++ b/crates/op-rbuilder/src/tests/mod.rs @@ -8,6 +8,9 @@ mod flashblocks; #[cfg(test)] mod data_availability; +#[cfg(test)] +mod gas_limiter; + #[cfg(test)] mod ordering; diff --git a/crates/op-rbuilder/src/tests/revert.rs b/crates/op-rbuilder/src/tests/revert.rs index 8037f996c..76e1c5b9b 100644 --- a/crates/op-rbuilder/src/tests/revert.rs +++ b/crates/op-rbuilder/src/tests/revert.rs @@ -31,10 +31,9 @@ async fn monitor_transaction_gc(rbuilder: LocalInstance) -> eyre::Result<()> { .create_transaction() .random_reverting_transaction() .with_signer(accounts[i].clone()) - .with_bundle(BundleOpts { - block_number_max: Some(latest_block_number + i as u64 + 1), - ..Default::default() - }) + .with_bundle( + BundleOpts::default().with_block_number_max(latest_block_number + i as u64 + 1), + ) .send() .await?; pending_txn.push(txn); @@ -141,10 +140,7 @@ async fn bundle(rbuilder: LocalInstance) -> eyre::Result<()> { .includes(valid_bundle.tx_hash()) ); - let bundle_opts = BundleOpts { - block_number_max: Some(4), - ..Default::default() - }; + let bundle_opts = BundleOpts::default().with_block_number_max(4); let reverted_bundle = driver .create_transaction() @@ -183,10 +179,7 @@ async fn bundle_min_block_number(rbuilder: LocalInstance) -> eyre::Result<()> { .create_transaction() .with_revert() // the transaction reverts but it is included in the block .with_reverted_hash() - .with_bundle(BundleOpts { - block_number_min: Some(2), - ..Default::default() - }) + .with_bundle(BundleOpts::default().with_block_number_min(2)) .send() .await?; @@ -201,11 +194,11 @@ async fn bundle_min_block_number(rbuilder: LocalInstance) -> eyre::Result<()> { .create_transaction() .with_revert() .with_reverted_hash() - .with_bundle(BundleOpts { - block_number_max: Some(4), - block_number_min: Some(4), - ..Default::default() - }) + .with_bundle( + BundleOpts::default() + .with_block_number_max(4) + .with_block_number_min(4), + ) .send() .await?; @@ -232,10 +225,7 @@ async fn bundle_min_timestamp(rbuilder: LocalInstance) -> eyre::Result<()> { .create_transaction() .with_revert() // the transaction reverts but it is included in the block .with_reverted_hash() - .with_bundle(BundleOpts { - min_timestamp: Some(initial_timestamp + 2), - ..Default::default() - }) + .with_bundle(BundleOpts::default().with_min_timestamp(initial_timestamp + 2)) .send() .await?; @@ -261,84 +251,121 @@ async fn bundle_range_limits(rbuilder: LocalInstance) -> eyre::Result<()> { async fn send_bundle( driver: &ChainDriver, - block_number_max: Option, - block_number_min: Option, + bundle: BundleOpts, ) -> eyre::Result> { - driver - .create_transaction() - .with_bundle(BundleOpts { - block_number_max, - block_number_min, - ..Default::default() - }) - .send() - .await + driver.create_transaction().with_bundle(bundle).send().await } // Max block cannot be a past block - assert!(send_bundle(&driver, Some(1), None).await.is_err()); + assert!( + send_bundle(&driver, BundleOpts::default().with_block_number_max(1)) + .await + .is_err() + ); // Bundles are valid if their max block in in between the current block and the max block range let current_block = 2; let next_valid_block = current_block + 1; for i in next_valid_block..next_valid_block + MAX_BLOCK_RANGE_BLOCKS { - assert!(send_bundle(&driver, Some(i), None).await.is_ok()); + assert!( + send_bundle(&driver, BundleOpts::default().with_block_number_max(i)) + .await + .is_ok() + ); } // A bundle with a block out of range is invalid assert!( send_bundle( &driver, - Some(next_valid_block + MAX_BLOCK_RANGE_BLOCKS + 1), - None + BundleOpts::default() + .with_block_number_max(next_valid_block + MAX_BLOCK_RANGE_BLOCKS + 1) ) .await .is_err() ); // A bundle with a min block number higher than the max block is invalid - assert!(send_bundle(&driver, Some(1), Some(2)).await.is_err()); + assert!( + send_bundle( + &driver, + BundleOpts::default() + .with_block_number_max(1) + .with_block_number_min(2) + ) + .await + .is_err() + ); // A bundle with a min block number lower or equal to the current block is valid assert!( - send_bundle(&driver, Some(next_valid_block), Some(current_block)) - .await - .is_ok() + send_bundle( + &driver, + BundleOpts::default() + .with_block_number_max(next_valid_block) + .with_block_number_min(current_block) + ) + .await + .is_ok() ); assert!( - send_bundle(&driver, Some(next_valid_block), Some(0)) - .await - .is_ok() + send_bundle( + &driver, + BundleOpts::default().with_block_number_max(next_valid_block) + ) + .await + .is_ok() ); // A bundle with a min block equal to max block is valid assert!( - send_bundle(&driver, Some(next_valid_block), Some(next_valid_block)) - .await - .is_ok() + send_bundle( + &driver, + BundleOpts::default() + .with_block_number_max(next_valid_block) + .with_block_number_min(next_valid_block) + ) + .await + .is_ok() ); // Test min-only cases (no max specified) // A bundle with only min block that's within the default range is valid let default_max = current_block + MAX_BLOCK_RANGE_BLOCKS; assert!( - send_bundle(&driver, None, Some(current_block)) - .await - .is_ok() + send_bundle( + &driver, + BundleOpts::default().with_block_number_min(current_block) + ) + .await + .is_ok() ); assert!( - send_bundle(&driver, None, Some(default_max - 1)) - .await - .is_ok() + send_bundle( + &driver, + BundleOpts::default().with_block_number_min(default_max - 1) + ) + .await + .is_ok() + ); + assert!( + send_bundle( + &driver, + BundleOpts::default().with_block_number_min(default_max) + ) + .await + .is_ok() ); - assert!(send_bundle(&driver, None, Some(default_max)).await.is_ok()); // A bundle with only min block that exceeds the default max range is invalid assert!( - send_bundle(&driver, None, Some(default_max + 1)) - .await - .is_err() + send_bundle( + &driver, + BundleOpts::default().with_block_number_min(default_max + 1) + ) + .await + .is_err() ); Ok(()) @@ -387,10 +414,7 @@ async fn check_transaction_receipt_status_message(rbuilder: LocalInstance) -> ey let reverting_tx = driver .create_transaction() .random_reverting_transaction() - .with_bundle(BundleOpts { - block_number_max: Some(3), - ..Default::default() - }) + .with_bundle(BundleOpts::default().with_block_number_max(3)) .send() .await?; let tx_hash = reverting_tx.tx_hash(); diff --git a/crates/op-rbuilder/src/tx.rs b/crates/op-rbuilder/src/tx.rs index 7626fff1d..64f7e43f5 100644 --- a/crates/op-rbuilder/src/tx.rs +++ b/crates/op-rbuilder/src/tx.rs @@ -293,8 +293,8 @@ impl MaybeConditionalTransaction for FBPooledTransaction { FBPooledTransaction { inner: self.inner.with_conditional(conditional), reverted_hashes: self.reverted_hashes, - flashblock_number_min: None, - flashblock_number_max: None, + flashblock_number_min: self.flashblock_number_min, + flashblock_number_max: self.flashblock_number_max, } } } diff --git a/crates/op-rbuilder/src/tx_signer.rs b/crates/op-rbuilder/src/tx_signer.rs index 71ef7a4b5..6b8c86d90 100644 --- a/crates/op-rbuilder/src/tx_signer.rs +++ b/crates/op-rbuilder/src/tx_signer.rs @@ -2,6 +2,7 @@ use std::str::FromStr; use alloy_consensus::SignableTransaction; use alloy_primitives::{Address, B256, Signature, U256}; +use k256::sha2::Sha256; use op_alloy_consensus::OpTypedTransaction; use reth_optimism_primitives::OpTransactionSigned; use reth_primitives::Recovered; @@ -73,7 +74,7 @@ impl FromStr for Signer { } } -pub fn generate_ethereum_keypair() -> (SecretKey, PublicKey, Address) { +pub fn generate_signer() -> Signer { let secp = Secp256k1::new(); // Generate cryptographically secure random private key @@ -85,7 +86,11 @@ pub fn generate_ethereum_keypair() -> (SecretKey, PublicKey, Address) { // Derive Ethereum address let address = public_key_to_address(&public_key); - (private_key, public_key, address) + Signer { + address, + pubkey: public_key, + secret: private_key, + } } /// Converts a public key to an Ethereum address @@ -100,6 +105,27 @@ pub fn public_key_to_address(public_key: &PublicKey) -> Address { Address::from_slice(&hash[12..32]) } +// Generate a key deterministically from a seed for debug and testing +// Do not use in production +pub fn generate_key_from_seed(seed: &str) -> Signer { + // Hash the seed + let mut hasher = Sha256::new(); + hasher.update(seed.as_bytes()); + let hash = hasher.finalize(); + + // Create signing key + let secp = Secp256k1::new(); + let private_key = SecretKey::from_slice(&hash).expect("Failed to create private key"); + let public_key = PublicKey::from_secret_key(&secp, &private_key); + let address = public_key_to_address(&public_key); + + Signer { + address, + pubkey: public_key, + secret: private_key, + } +} + #[cfg(test)] mod test { use super::*;