diff --git a/.github/TEMPO_NIGHTLY_FAILURE_TEMPLATE.md b/.github/TEMPO_NIGHTLY_FAILURE_TEMPLATE.md
new file mode 100644
index 0000000000000..8f72899c63611
--- /dev/null
+++ b/.github/TEMPO_NIGHTLY_FAILURE_TEMPLATE.md
@@ -0,0 +1,10 @@
+---
+title: "bug: tempo nightly workflow failed"
+labels: P-high, T-bug
+---
+
+The nightly Tempo workflow (mainnet and testnet checks) has failed. This indicates a regression in Foundry's Tempo support or an issue with the Tempo mainnet/testnet endpoints.
+
+Check the [tempo nightly workflow page]({{ env.WORKFLOW_URL }}) for details.
+
+This issue was raised by the workflow at `.github/workflows/ci-tempo.yml`.
diff --git a/.github/scripts/matrices.py b/.github/scripts/matrices.py
index b60ea7048884d..727fa08893881 100755
--- a/.github/scripts/matrices.py
+++ b/.github/scripts/matrices.py
@@ -68,10 +68,10 @@ def __init__(
profile = os.environ.get("PROFILE")
is_pr = os.environ.get("EVENT_NAME") == "pull_request"
t_linux_x86 = Target(
- "depot-ubuntu-latest-16", "x86_64-unknown-linux-gnu", "linux-amd64"
+ "ubuntu-latest-16", "x86_64-unknown-linux-gnu", "linux-amd64"
)
t_linux_arm = Target(
- "depot-ubuntu-latest-arm-16", "aarch64-unknown-linux-gnu", "linux-aarch64"
+ "ubuntu-latest-arm-16", "aarch64-unknown-linux-gnu", "linux-aarch64"
)
t_macos = Target("depot-macos-latest", "aarch64-apple-darwin", "macosx-aarch64")
t_windows = Target("depot-windows-latest-16", "x86_64-pc-windows-msvc", "windows-amd64")
diff --git a/.github/workflows/bump-tempo.yml b/.github/workflows/bump-tempo.yml
deleted file mode 100644
index ffbd68d772d81..0000000000000
--- a/.github/workflows/bump-tempo.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-name: Bump Tempo Dependencies
-
-permissions: {}
-
-on:
- schedule:
- # Run daily at 00:00 UTC
- - cron: "0 0 * * *"
- workflow_dispatch:
-
-jobs:
- bump-tempo:
- runs-on: ubuntu-latest
- permissions:
- contents: write
- pull-requests: write
- steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- with:
- fetch-depth: 0
-
- - name: Bump tempo dependencies
- id: bump
- env:
- GH_TOKEN: ${{ github.token }}
- run: ./.github/scripts/bump-tempo.sh
-
- - name: Create Pull Request
- if: steps.bump.outputs.updated == 'true'
- env:
- GH_TOKEN: ${{ github.token }}
- LATEST_REV: ${{ steps.bump.outputs.latest_rev }}
- CHANGELOG_FILE: ${{ steps.bump.outputs.changelog }}
- run: |
- BRANCH_NAME="deps/bump-tempo-${LATEST_REV:0:7}"
-
- # Skip if a PR already exists for this branch
- EXISTING_PR=$(gh pr list --head "$BRANCH_NAME" --state open --json number --jq '.[0].number')
- if [[ -n "$EXISTING_PR" ]]; then
- echo "PR #${EXISTING_PR} already exists for ${BRANCH_NAME}, skipping."
- exit 0
- fi
-
- # Configure git
- git config user.name "github-actions[bot]"
- git config user.email "github-actions[bot]@users.noreply.github.com"
-
- # Create and push branch (force-push in case a stale branch exists from a prior failed run)
- git checkout -b "$BRANCH_NAME"
- git add Cargo.toml Cargo.lock
- git commit -m "chore(deps): bump tempo dependencies to ${LATEST_REV:0:7}"
- git push --force-with-lease origin "$BRANCH_NAME"
-
- # Create PR
- gh pr create \
- --title "chore(deps): bump tempo dependencies to ${LATEST_REV:0:7}" \
- --body-file "$CHANGELOG_FILE" \
- --base main \
- --head "$BRANCH_NAME"
diff --git a/.github/workflows/ci-mpp.yml b/.github/workflows/ci-mpp.yml
deleted file mode 100644
index 3a608b6500a90..0000000000000
--- a/.github/workflows/ci-mpp.yml
+++ /dev/null
@@ -1,60 +0,0 @@
-name: CI MPP
-
-permissions: {}
-
-on:
- push:
- branches: [master]
- pull_request:
- workflow_dispatch:
-
-concurrency:
- group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
- cancel-in-progress: true
-
-env:
- CARGO_TERM_COLOR: always
- RUSTC_WRAPPER: "sccache"
-
-jobs:
- mpp-check:
- runs-on: depot-ubuntu-latest
- timeout-minutes: 60
- permissions:
- contents: read
- steps:
- # Checkout the repository
- - uses: actions/checkout@v6
- with:
- persist-credentials: false
- - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # master
- with:
- toolchain: stable
-
- - uses: mozilla-actions/sccache-action@7d986dd989559c6ecdb630a3fd2557667be217ad # v0.0.9
- - uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2
-
- # Build and install binaries
- - name: Build and install Foundry binaries
- run: |
- cargo build --profile dev --locked -p forge -p cast -p anvil -p chisel
- echo "${{ github.workspace }}/target/debug" >> "$GITHUB_PATH"
-
- - name: Run MPP e2e test
- env:
- TEMPO_PRIVATE_KEY: ${{ secrets.TEMPO_PRIVATE_KEY }}
- TEMPO_KEYS_TOML_B64: ${{ secrets.TEMPO_KEYS_TOML_B64 }}
- MPP_API_KEY: ${{ secrets.MPP_API_KEY }}
- MPP_DEPOSIT: "1000000"
- TEMPO_AUTO_FUND: "1"
- run: |
- if [ -n "${TEMPO_PRIVATE_KEY:-}" ]; then
- echo "::notice::Using TEMPO_PRIVATE_KEY for MPP e2e"
- elif [ -n "${TEMPO_KEYS_TOML_B64:-}" ]; then
- mkdir -p ~/.tempo/wallet
- echo "$TEMPO_KEYS_TOML_B64" | tr -d '[:space:]' | base64 -d > ~/.tempo/wallet/keys.toml
- else
- echo "::warning::TEMPO_PRIVATE_KEY or TEMPO_KEYS_TOML_B64 secret not set, skipping MPP e2e"
- exit 0
- fi
- ./.github/scripts/tempo-mpp.sh "$(which cast | xargs dirname)"
diff --git a/.github/workflows/ci-tempo.yml b/.github/workflows/ci-tempo.yml
deleted file mode 100644
index 06451b8428ea6..0000000000000
--- a/.github/workflows/ci-tempo.yml
+++ /dev/null
@@ -1,122 +0,0 @@
-name: CI Tempo
-
-permissions: {}
-
-on:
- push:
- branches: [master]
- pull_request:
- workflow_dispatch:
- inputs:
- network:
- description: "Tempo network to check"
- required: true
- type: choice
- options:
- - testnet
- - devnet
- - mainnet
- - all
- scripts:
- description: "Which scripts to run"
- required: false
- type: choice
- default: "both"
- options:
- - check
- - deploy
- - both
-
-concurrency:
- group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
- cancel-in-progress: true
-
-env:
- CARGO_TERM_COLOR: always
- RUSTC_WRAPPER: "sccache"
-
-jobs:
- tempo-check:
- runs-on: depot-ubuntu-latest
- timeout-minutes: 60
- permissions:
- contents: read
- steps:
- # Checkout the repository
- - uses: actions/checkout@v6
- with:
- persist-credentials: false
- - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # master
- with:
- toolchain: stable
-
- - uses: mozilla-actions/sccache-action@7d986dd989559c6ecdb630a3fd2557667be217ad # v0.0.9
- - uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2
-
- # Build and install binaries
- - name: Build and install Foundry binaries
- run: |
- cargo build --profile dev --locked -p forge -p cast -p anvil -p chisel
- echo "${{ github.workspace }}/target/debug" >> "$GITHUB_PATH"
-
- # TODO: re-enable once devnet is up and stable
- # - name: Run Tempo check on devnet
- # if: |
- # github.event_name == 'pull_request' ||
- # github.event.inputs.network == 'devnet' ||
- # github.event.inputs.network == 'all'
- # env:
- # ETH_RPC_URL: ${{ secrets.TEMPO_DEVNET_RPC_URL }}
- # SCRIPTS: ${{ github.event.inputs.scripts || 'both' }}
- # run: |
- # if [ "$SCRIPTS" = "check" ] || [ "$SCRIPTS" = "both" ]; then
- # ./.github/scripts/tempo-check.sh
- # fi
- # if [ "$SCRIPTS" = "deploy" ] || [ "$SCRIPTS" = "both" ]; then
- # ./.github/scripts/tempo-deploy.sh
- # fi
-
- # TODO: re-enable once devnet is up and stable
- # - name: Run Tempo wallet tests on devnet
- # if: |
- # github.event_name == 'pull_request' ||
- # github.event.inputs.network == 'devnet' ||
- # github.event.inputs.network == 'all'
- # env:
- # ETH_RPC_URL: ${{ secrets.TEMPO_DEVNET_RPC_URL }}
- # run: ./.github/scripts/tempo-wallet.sh
-
- - name: Run Tempo check on testnet
- if: |
- github.event_name == 'pull_request' ||
- github.event.inputs.network == 'testnet' ||
- github.event.inputs.network == 'all'
- env:
- ETH_RPC_URL: ${{ secrets.TEMPO_TESTNET_RPC_URL }}
- VERIFIER_URL: ${{ secrets.VERIFIER_URL }}
- SCRIPTS: ${{ github.event.inputs.scripts || 'both' }}
- run: |
- if [ "$SCRIPTS" = "check" ] || [ "$SCRIPTS" = "both" ]; then
- ./.github/scripts/tempo-check.sh
- fi
- if [ "$SCRIPTS" = "deploy" ] || [ "$SCRIPTS" = "both" ]; then
- ./.github/scripts/tempo-deploy.sh
- fi
-
- - name: Run Tempo check on mainnet
- if: |
- github.event.inputs.network == 'mainnet' ||
- github.event.inputs.network == 'all'
- env:
- ETH_RPC_URL: ${{ secrets.TEMPO_MAINNET_RPC_URL }}
- TEMPO_FEE_TOKEN: "0x20c0000000000000000000000000000000000000"
- VERIFIER_URL: ${{ secrets.VERIFIER_URL }}
- PRIVATE_KEY: ${{ secrets.THROW_AWAY_MAINNET_PKEY }}
- SCRIPTS: ${{ github.event.inputs.scripts || 'both' }}
- run: |
- if [ "$SCRIPTS" = "check" ] || [ "$SCRIPTS" = "both" ]; then
- ./.github/scripts/tempo-check.sh
- fi
- if [ "$SCRIPTS" = "deploy" ] || [ "$SCRIPTS" = "both" ]; then
- ./.github/scripts/tempo-deploy.sh
- fi
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 9eb90a76cdbfd..3437887f04c15 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -3,9 +3,8 @@ name: CI
permissions: {}
on:
- push:
- branches: [master]
pull_request:
+ merge_group:
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
@@ -23,10 +22,7 @@ jobs:
contents: read
with:
profile: default
- secrets:
- ETHERSCAN_API_KEY: ${{ secrets.ETHERSCAN_API_KEY }}
- ARBITRUM_RPC: ${{ secrets.ARBITRUM_RPC }}
- ETH_SEPOLIA_RPC: ${{ secrets.ETH_SEPOLIA_RPC }}
+ secrets: inherit
docs:
uses: ./.github/workflows/docs.yml
@@ -34,42 +30,54 @@ jobs:
contents: read
pages: write
id-token: write
+ secrets: inherit
doctest:
- runs-on: depot-ubuntu-latest
+ runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
contents: read
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@v6
with:
persist-credentials: false
- uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # master
with:
toolchain: stable
- - uses: rui314/setup-mold@9c9c13bf4c3f1adef0cc596abc155580bcb04444 # v1
+ - uses: rui314/setup-mold@725a8794d15fc7563f59595bd9556495c0564878 # v1
- uses: mozilla-actions/sccache-action@7d986dd989559c6ecdb630a3fd2557667be217ad # v0.0.9
- - uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
- - run: cargo test --workspace --doc --locked
+ - uses: Swatinem/rust-cache@f13886b937689c021905a6b90929199931d60db1 # v2
+ - name: Generate GitHub App token (cross-repo cargo auth)
+ id: app-token
+ uses: actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b # v2.1.4
+ with:
+ app-id: ${{ secrets.APP_ID }}
+ private-key: ${{ secrets.APP_PRIVATE_KEY }}
+ owner: ${{ github.repository_owner }}
+ - name: Configure git for private cargo deps
+ env:
+ GH_TOKEN: ${{ steps.app-token.outputs.token }}
+ run: git config --global url."https://x-access-token:${GH_TOKEN}@github.com/".insteadOf "https://github.com/"
+ - run: cargo test --workspace --doc
typos:
- runs-on: depot-ubuntu-latest
+ runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
contents: read
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@v6
with:
persist-credentials: false
- - uses: crate-ci/typos@cf5f1c29a8ac336af8568821ec41919923b05a83 # v1.45.1
+ - uses: crate-ci/typos@2d0ce569feab1f8752f1dde43cc2f2aa53236e06 # v1
shellcheck:
- runs-on: depot-ubuntu-latest
+ runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: read
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@v6
with:
persist-credentials: false
- name: Shellcheck
@@ -77,32 +85,43 @@ jobs:
run: ./.github/scripts/shellcheck.sh
clippy:
- runs-on: depot-ubuntu-latest
+ runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
contents: read
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@v6
with:
persist-credentials: false
- uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # master
with:
toolchain: nightly
components: clippy
- - uses: rui314/setup-mold@9c9c13bf4c3f1adef0cc596abc155580bcb04444 # v1
+ - uses: rui314/setup-mold@725a8794d15fc7563f59595bd9556495c0564878 # v1
- uses: mozilla-actions/sccache-action@7d986dd989559c6ecdb630a3fd2557667be217ad # v0.0.9
- - uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
- - run: cargo clippy --workspace --all-targets --all-features --locked
+ - uses: Swatinem/rust-cache@f13886b937689c021905a6b90929199931d60db1 # v2
+ - name: Generate GitHub App token (cross-repo cargo auth)
+ id: app-token
+ uses: actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b # v2.1.4
+ with:
+ app-id: ${{ secrets.APP_ID }}
+ private-key: ${{ secrets.APP_PRIVATE_KEY }}
+ owner: ${{ github.repository_owner }}
+ - name: Configure git for private cargo deps
+ env:
+ GH_TOKEN: ${{ steps.app-token.outputs.token }}
+ run: git config --global url."https://x-access-token:${GH_TOKEN}@github.com/".insteadOf "https://github.com/"
+ - run: cargo clippy --workspace --all-targets --all-features
env:
RUSTFLAGS: -Dwarnings
rustfmt:
- runs-on: depot-ubuntu-latest
+ runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
contents: read
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@v6
with:
persist-credentials: false
- uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # master
@@ -112,28 +131,91 @@ jobs:
- run: cargo fmt --all --check
forge-fmt:
- runs-on: depot-ubuntu-latest
+ runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
contents: read
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@v6
with:
persist-credentials: false
- uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # master
with:
toolchain: stable
- - uses: rui314/setup-mold@9c9c13bf4c3f1adef0cc596abc155580bcb04444 # v1
+ - uses: rui314/setup-mold@725a8794d15fc7563f59595bd9556495c0564878 # v1
- uses: mozilla-actions/sccache-action@7d986dd989559c6ecdb630a3fd2557667be217ad # v0.0.9
- - uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
+ - uses: Swatinem/rust-cache@f13886b937689c021905a6b90929199931d60db1 # v2
+ - name: Generate GitHub App token (cross-repo cargo auth)
+ id: app-token
+ uses: actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b # v2.1.4
+ with:
+ app-id: ${{ secrets.APP_ID }}
+ private-key: ${{ secrets.APP_PRIVATE_KEY }}
+ owner: ${{ github.repository_owner }}
+ - name: Configure git for private cargo deps
+ env:
+ GH_TOKEN: ${{ steps.app-token.outputs.token }}
+ run: git config --global url."https://x-access-token:${GH_TOKEN}@github.com/".insteadOf "https://github.com/"
- name: forge fmt
shell: bash
run: ./.github/scripts/format.sh --check
+ crate-checks:
+ runs-on: ubuntu-latest
+ timeout-minutes: 30
+ permissions:
+ contents: read
+ steps:
+ - uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+ - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # master
+ with:
+ toolchain: stable
+ - uses: rui314/setup-mold@725a8794d15fc7563f59595bd9556495c0564878 # v1
+ - uses: taiki-e/install-action@763e3324d4fd026c9bd284c504378585777a87d5 # v2
+ with:
+ tool: cargo-hack
+ - uses: mozilla-actions/sccache-action@7d986dd989559c6ecdb630a3fd2557667be217ad # v0.0.9
+ - uses: Swatinem/rust-cache@f13886b937689c021905a6b90929199931d60db1 # v2
+ - name: Generate GitHub App token (cross-repo cargo auth)
+ id: app-token
+ uses: actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b # v2.1.4
+ with:
+ app-id: ${{ secrets.APP_ID }}
+ private-key: ${{ secrets.APP_PRIVATE_KEY }}
+ owner: ${{ github.repository_owner }}
+ - name: Configure git for private cargo deps
+ env:
+ GH_TOKEN: ${{ steps.app-token.outputs.token }}
+ run: git config --global url."https://x-access-token:${GH_TOKEN}@github.com/".insteadOf "https://github.com/"
+ - run: cargo hack check
+
deny:
- uses: tempoxyz/ci/.github/workflows/deny.yml@268b3ce142717ff86c58fbbcc3abc3f109f0fb8d # main
+ runs-on: ubuntu-latest
+ timeout-minutes: 15
permissions:
contents: read
+ steps:
+ - uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+ - name: Generate GitHub App token (cross-repo cargo auth)
+ id: app-token
+ uses: actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b # v2.1.4
+ with:
+ app-id: ${{ secrets.APP_ID }}
+ private-key: ${{ secrets.APP_PRIVATE_KEY }}
+ owner: ${{ github.repository_owner }}
+ - name: Configure git for private cargo deps
+ env:
+ GH_TOKEN: ${{ steps.app-token.outputs.token }}
+ run: git config --global url."https://x-access-token:${GH_TOKEN}@github.com/".insteadOf "https://github.com/"
+ - uses: mozilla-actions/sccache-action@7d986dd989559c6ecdb630a3fd2557667be217ad # v0.0.9
+ - uses: taiki-e/install-action@763e3324d4fd026c9bd284c504378585777a87d5 # v2
+ with:
+ tool: cargo-deny
+ - run: cargo deny --all-features check
codeql:
name: analyze (${{ matrix.language }})
@@ -150,16 +232,16 @@ jobs:
build-mode: none
steps:
- name: Checkout repository
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ uses: actions/checkout@v6
with:
persist-credentials: false
- name: Initialize CodeQL
- uses: github/codeql-action/init@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
+ uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
+ uses: github/codeql-action/analyze@v4
with:
category: "/language:${{matrix.language}}"
@@ -175,6 +257,7 @@ jobs:
- clippy
- rustfmt
- forge-fmt
+ - crate-checks
- deny
- codeql
timeout-minutes: 30
diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml
index b97a99d5310a4..5c5b4f5b442e5 100644
--- a/.github/workflows/docker-publish.yml
+++ b/.github/workflows/docker-publish.yml
@@ -6,7 +6,7 @@ on:
workflow_dispatch:
inputs:
tag_name:
- default: nightly-dev
+ default: nightly
description: The tag we're building for
type: string
workflow_call:
@@ -24,27 +24,27 @@ env:
IMAGE_NAME: ${{ github.repository }}
# Keep in sync with `release.yml`.
- RUST_PROFILE: dist
- RUST_FEATURES: aws-kms,gcp-kms,turnkey,cli,asm-keccak,js-tracer
+ RUST_PROFILE: maxperf
+ RUST_FEATURES: aws-kms,gcp-kms,turnkey,cli,asm-keccak,js-tracer,credible
jobs:
build:
name: build and push
- runs-on: depot-ubuntu-latest
+ runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
packages: write
timeout-minutes: 60
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@v6
with:
persist-credentials: false
# Login against a Docker registry except on PR
# https://github.com/docker/login-action
- name: Login into registry ${{ env.REGISTRY }}
- uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
+ uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
@@ -54,32 +54,26 @@ jobs:
# https://github.com/docker/metadata-action
- name: Extract Docker metadata
id: meta
- uses: docker/metadata-action@030e881283bb7a6894de51c315a6bfe6a94e05cf # v6.0.0
+ uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051 # v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- # Derive Docker tags from inputs.tag_name:
- # - v{major}.{minor}.{patch}: tagged as :v1.2.3, :v1.2, :v1, and :latest
- # - nightly-{SHA}: tagged as :nightly-{SHA} and :nightly
- # - anything else: tagged as-is
+ # Creates an additional 'latest' or 'nightly' tag
+ # If the job is triggered via cron schedule, tag nightly and nightly-{SHA}
+ # If the job is triggered via workflow dispatch and on a master branch, tag branch and latest
+ # Otherwise, just tag as the branch name
- name: Finalize Docker Metadata
id: docker_tagging
run: |
- TAG="${{ inputs.tag_name }}"
- REGISTRY="${{ env.REGISTRY }}"
- IMAGE="${{ env.IMAGE_NAME }}"
-
- if [[ "$TAG" =~ ^v([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
- MAJOR="v${BASH_REMATCH[1]}"
- MINOR="v${BASH_REMATCH[1]}.${BASH_REMATCH[2]}"
- printf "version tag release, assigning %s, %s, %s, and latest tags\n" "$TAG" "$MINOR" "$MAJOR"
- printf "docker_tags=%s/%s:%s,%s/%s:%s,%s/%s:%s,%s/%s:latest\n" "$REGISTRY" "$IMAGE" "$TAG" "$REGISTRY" "$IMAGE" "$MINOR" "$REGISTRY" "$IMAGE" "$MAJOR" "$REGISTRY" "$IMAGE" >> "$GITHUB_OUTPUT"
- elif [[ "$TAG" =~ ^nightly- ]]; then
- printf "nightly release, assigning %s and nightly tags\n" "$TAG"
- printf "docker_tags=%s/%s:%s,%s/%s:nightly\n" "$REGISTRY" "$IMAGE" "$TAG" "$REGISTRY" "$IMAGE" >> "$GITHUB_OUTPUT"
+ if [[ "${{ github.event_name }}" == "schedule" ]]; then
+ printf "cron trigger, assigning nightly tag\n"
+ printf "docker_tags=%s/%s:nightly,%s/%s:nightly-%s\n" "${{ env.REGISTRY }}" "${{ env.IMAGE_NAME }}" "${{ env.REGISTRY }}" "${{ env.IMAGE_NAME }}" "$GITHUB_SHA" >> "$GITHUB_OUTPUT"
+ elif [[ "${GITHUB_REF##*/}" == "main" ]] || [[ "${GITHUB_REF##*/}" == "master" ]]; then
+ printf "manual trigger from master/main branch, assigning latest tag\n"
+ printf "docker_tags=%s/%s:%s,%s/%s:latest\n" "${{ env.REGISTRY }}" "${{ env.IMAGE_NAME }}" "${GITHUB_REF##*/}" "${{ env.REGISTRY }}" "${{ env.IMAGE_NAME }}" >> "$GITHUB_OUTPUT"
else
- printf "tagging as %s\n" "$TAG"
- printf "docker_tags=%s/%s:%s\n" "$REGISTRY" "$IMAGE" "$TAG" >> "$GITHUB_OUTPUT"
+ printf "Neither scheduled nor manual release from main branch. Just tagging as branch name\n"
+ printf "docker_tags=%s/%s:%s\n" "${{ env.REGISTRY }}" "${{ env.IMAGE_NAME }}" "${GITHUB_REF##*/}" >> "$GITHUB_OUTPUT"
fi
# Log docker metadata to explicitly know what is being pushed
@@ -89,10 +83,10 @@ jobs:
printf "LABELS -> %s\n" "${{ steps.meta.outputs.labels }}"
- name: Set up Depot CLI
- uses: depot/setup-action@15c09a5f77a0840ad4bce955686522a257853461 # v1.7.1
+ uses: depot/setup-action@b0b1ea4f69e92ebf5dea3f8713a1b0c37b2126a5 # v1
- name: Build and push Foundry image
- uses: depot/build-push-action@5f3b3c2e5a00f0093de47f657aeaefcedff27d18 # v1.17.0
+ uses: depot/build-push-action@9785b135c3c76c33db102e45be96a25ab55cd507 # v1
with:
build-args: |
RUST_PROFILE=${{ env.RUST_PROFILE }}
@@ -105,4 +99,3 @@ jobs:
labels: ${{ steps.meta.outputs.labels }}
platforms: linux/amd64,linux/arm64
push: true
- no-cache: true
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 45d00708394f5..a18a7f2805dfd 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -18,7 +18,7 @@ env:
jobs:
docs:
- runs-on: depot-ubuntu-latest
+ runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
contents: read
@@ -30,6 +30,17 @@ jobs:
with:
toolchain: nightly
- uses: rui314/setup-mold@9c9c13bf4c3f1adef0cc596abc155580bcb04444 # v1
+ - name: Generate GitHub App token (cross-repo cargo auth)
+ id: app-token
+ uses: actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b # v2.1.4
+ with:
+ app-id: ${{ secrets.APP_ID }}
+ private-key: ${{ secrets.APP_PRIVATE_KEY }}
+ owner: ${{ github.repository_owner }}
+ - name: Configure git for private cargo deps
+ env:
+ GH_TOKEN: ${{ steps.app-token.outputs.token }}
+ run: git config --global url."https://x-access-token:${GH_TOKEN}@github.com/".insteadOf "https://github.com/"
- name: Build documentation
run: cargo doc --workspace --all-features --no-deps --document-private-items --locked
env:
@@ -46,7 +57,7 @@ jobs:
deploy-docs:
if: github.ref_name == 'master' && github.event_name == 'push'
needs: [docs]
- runs-on: depot-ubuntu-latest
+ runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
pages: write
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index fc1d6923da812..e7ac9bff2e350 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -5,6 +5,9 @@ permissions: {}
on:
push:
tags:
+ - "stable"
+ - "rc"
+ - "rc-*"
- "v*.*.*"
schedule:
- cron: "0 6 * * *"
@@ -15,8 +18,10 @@ env:
IS_NIGHTLY: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }}
# Keep in sync with `docker-publish.yml`.
- RUST_PROFILE: dist
- RUST_FEATURES: aws-kms,gcp-kms,turnkey,cli,asm-keccak,js-tracer
+ RUST_PROFILE: maxperf
+ RUST_FEATURES: aws-kms,gcp-kms,turnkey,cli,asm-keccak,js-tracer,credible
+
+ LAST_STABLE_VERSION: "v1.5.0"
jobs:
prepare:
@@ -31,7 +36,7 @@ jobs:
release_name: ${{ steps.release_info.outputs.release_name }}
changelog: ${{ steps.build_changelog.outputs.changelog }}
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@v6
with:
persist-credentials: false
fetch-depth: 0
@@ -42,17 +47,9 @@ jobs:
if [[ ${IS_NIGHTLY} == 'true' ]]; then
printf 'tag_name=%s\n' "nightly-${GITHUB_SHA}" >> "$GITHUB_OUTPUT"
printf 'release_name=%s\n' "Nightly ($(date '+%Y-%m-%d'))" >> "$GITHUB_OUTPUT"
- # Find the previous nightly tag for changelog generation,
- # sorted by tag creation date (most recent first).
- PREV_NIGHTLY=$(git tag -l 'nightly-*' --sort=-creatordate | head -n1)
- printf 'from_tag=%s\n' "$PREV_NIGHTLY" >> "$GITHUB_OUTPUT"
else
printf 'tag_name=%s\n' "$GITHUB_REF_NAME" >> "$GITHUB_OUTPUT"
printf 'release_name=%s\n' "$GITHUB_REF_NAME" >> "$GITHUB_OUTPUT"
- # Find the previous stable release tag (v*.*.*) for changelog generation,
- # skipping the current tag so we diff from the last stable release.
- PREV_STABLE=$(git tag -l 'v*.*.*' --sort=-v:refname | grep -v "^${GITHUB_REF_NAME}$" | head -n1)
- printf 'from_tag=%s\n' "$PREV_STABLE" >> "$GITHUB_OUTPUT"
fi
# Creates a `nightly-SHA` tag for this specific nightly
@@ -61,7 +58,7 @@ jobs:
# the changelog.
- name: Create build-specific nightly tag
if: ${{ env.IS_NIGHTLY == 'true' }}
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
+ uses: actions/github-script@v8
env:
TAG_NAME: ${{ steps.release_info.outputs.tag_name }}
with:
@@ -71,47 +68,14 @@ jobs:
- name: Build changelog
id: build_changelog
- uses: mikepenz/release-changelog-builder-action@bcae7115752d4ed746ff92feb666574428a79415 # v6.2
+ uses: mikepenz/release-changelog-builder-action@439f79b5b5428107c7688c1d2b0e8bacc9b8792c # v6
with:
configuration: "./.github/changelog.json"
- fromTag: ${{ steps.release_info.outputs.from_tag || '' }}
+ fromTag: ${{ env.IS_NIGHTLY == 'true' && 'nightly' || env.STABLE_VERSION }}
toTag: ${{ steps.release_info.outputs.tag_name }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- # Create the GitHub release as a draft up-front so that all matrix jobs
- # only upload assets to an existing draft. With immutable releases
- # enabled, an immutable release is sealed when it is published, so all
- # assets must be attached before that. Stable releases are then left as
- # a draft for a maintainer to publish manually; nightlies are auto-
- # published by the `publish-nightly` job at the end of the workflow.
- - name: Create draft release
- env:
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- GH_REPO: ${{ github.repository }}
- TAG_NAME: ${{ steps.release_info.outputs.tag_name }}
- RELEASE_NAME: ${{ steps.release_info.outputs.release_name }}
- CHANGELOG: ${{ steps.build_changelog.outputs.changelog }}
- shell: bash
- run: |
- set -euo pipefail
- if release_json="$(gh release view "$TAG_NAME" --json isDraft 2>/dev/null)"; then
- is_draft="$(printf '%s' "$release_json" | grep -o '"isDraft":[^,}]*' | cut -d: -f2 | tr -d ' ')"
- if [[ "$is_draft" == "true" ]]; then
- echo "Draft release $TAG_NAME already exists; reusing it."
- exit 0
- fi
- echo "::error::Release $TAG_NAME is already published; cannot upload more assets to an immutable release."
- exit 1
- fi
- notes_file="$(mktemp)"
- printf '%s' "$CHANGELOG" > "$notes_file"
- flags=(--draft --verify-tag --title "$RELEASE_NAME" --notes-file "$notes_file")
- if [[ "$IS_NIGHTLY" == "true" ]]; then
- flags+=(--prerelease)
- fi
- gh release create "$TAG_NAME" "${flags[@]}"
-
release-docker:
name: Release Docker
needs: prepare
@@ -123,10 +87,6 @@ jobs:
with:
tag_name: ${{ needs.prepare.outputs.tag_name }}
- # This job uploads assets to the draft release created in `prepare`.
- # Stable releases stay as drafts for a maintainer to publish manually;
- # nightlies are auto-published by the `publish-nightly` job below. Either
- # way, GitHub's immutable-releases setting seals the release at publish.
release:
permissions:
id-token: write
@@ -181,14 +141,19 @@ jobs:
platform: win32
arch: amd64
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@v6
with:
persist-credentials: false
- uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # master
with:
toolchain: stable
targets: ${{ matrix.target }}
- - uses: rui314/setup-mold@9c9c13bf4c3f1adef0cc596abc155580bcb04444 # v1
+ - uses: rui314/setup-mold@725a8794d15fc7563f59595bd9556495c0564878 # v1
+
+ - uses: mozilla-actions/sccache-action@7d986dd989559c6ecdb630a3fd2557667be217ad # v0.0.9
+ if: ${{ contains(matrix.runner, 'depot') }}
+ - run: printf 'RUSTC_WRAPPER=sccache\n' >> "$GITHUB_ENV"
+ if: ${{ contains(matrix.runner, 'depot') }}
- name: Apple M1 setup
if: matrix.target == 'aarch64-apple-darwin'
@@ -198,7 +163,7 @@ jobs:
- name: cross setup
if: contains(matrix.target, 'musl')
- uses: taiki-e/cache-cargo-install-action@f9eed3e4680f27610dc6d8c67be1b88593f7dade # v3.0.6
+ uses: taiki-e/cache-cargo-install-action@7447f04c51f2ba27ca35e7f1e28fab848c5b3ba7 # v2
with:
git: https://github.com/cross-rs/cross
rev: baf457efc2555225af47963475bd70e8d2f5993f
@@ -214,7 +179,7 @@ jobs:
shell: bash
run: |
set -eo pipefail
- flags=(--locked --target $TARGET --profile $RUST_PROFILE --bins
+ flags=(--target $TARGET --profile $RUST_PROFILE --bins
--no-default-features --features "$RUST_FEATURES")
# `jemalloc` is not fully supported on MSVC or aarch64 Linux.
@@ -267,7 +232,7 @@ jobs:
printf "foundry_attestation=%s\n" "foundry_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.attestation.txt" >> "$GITHUB_OUTPUT"
- name: Upload build artifacts
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
+ uses: actions/upload-artifact@v6
with:
retention-days: 1
name: ${{ steps.artifacts.outputs.file_name }}
@@ -295,7 +260,7 @@ jobs:
- name: Binaries attestation
id: attestation
- uses: actions/attest-build-provenance@a2bbfa25375fe432b6a289bc6b6cd05ecd0c4c32 # v4.1.0
+ uses: actions/attest-build-provenance@v3
with:
subject-path: |
${{ env.anvil_bin_path }}
@@ -312,59 +277,77 @@ jobs:
set -euo pipefail
printf '%s\n' "$ATTESTATION_URL" > "$FOUNDRY_ATTESTATION"
- # Upload assets to the draft release created in `prepare`. Stable
- # releases stay as drafts after this workflow finishes; a maintainer
- # publishes them manually. Nightlies are auto-published below.
- - name: Upload assets to draft release
- env:
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- GH_REPO: ${{ github.repository }}
- TAG_NAME: ${{ needs.prepare.outputs.tag_name }}
- FILE_NAME: ${{ steps.artifacts.outputs.file_name }}
- FOUNDRY_ATTESTATION: ${{ steps.artifacts.outputs.foundry_attestation }}
- FOUNDRY_MAN: ${{ steps.man.outputs.foundry_man }}
- shell: bash
- run: |
- set -euo pipefail
- files=("$FILE_NAME" "$FOUNDRY_ATTESTATION")
- if [[ -n "${FOUNDRY_MAN:-}" ]]; then
- files+=("$FOUNDRY_MAN")
- fi
- gh release upload "$TAG_NAME" "${files[@]}" --clobber
+ # Creates the release for this specific version
+ - name: Create release
+ uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0
+ with:
+ name: ${{ needs.prepare.outputs.release_name }}
+ tag_name: ${{ needs.prepare.outputs.tag_name }}
+ prerelease: ${{ env.IS_NIGHTLY == 'true' }}
+ body: ${{ needs.prepare.outputs.changelog }}
+ files: |
+ ${{ steps.artifacts.outputs.file_name }}
+ ${{ steps.artifacts.outputs.foundry_attestation }}
+ ${{ steps.man.outputs.foundry_man }}
+
+ # If this is a nightly release, it also updates the release
+ # tagged `nightly` for compatibility with `foundryup`
+ - name: Update nightly release
+ if: ${{ env.IS_NIGHTLY == 'true' }}
+ uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0
+ with:
+ name: "Nightly"
+ tag_name: "nightly"
+ prerelease: true
+ body: ${{ needs.prepare.outputs.changelog }}
+ files: |
+ ${{ steps.artifacts.outputs.file_name }}
+ ${{ steps.artifacts.outputs.foundry_attestation }}
+ ${{ steps.man.outputs.foundry_man }}
- # Auto-publish nightly releases once all assets have been uploaded so that
- # foundryup and other consumers see them immediately. Stable releases are
- # left as drafts for a maintainer to publish manually.
- publish-nightly:
- name: Publish nightly release
+ cleanup:
+ name: Release cleanup
runs-on: ubuntu-latest
- needs: [prepare, release-docker, release]
- if: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }}
+ timeout-minutes: 30
permissions:
contents: write
+ needs: release
+ if: always()
steps:
- - name: Publish release
- env:
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- GH_REPO: ${{ github.repository }}
- TAG_NAME: ${{ needs.prepare.outputs.tag_name }}
- shell: bash
- run: gh release edit "$TAG_NAME" --draft=false
+ - uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+
+ # Moves the `nightly` tag to `HEAD`
+ - name: Move nightly tag
+ if: ${{ env.IS_NIGHTLY == 'true' }}
+ uses: actions/github-script@v8
+ with:
+ script: |
+ const moveTag = require('./.github/scripts/move-tag.js')
+ await moveTag({ github, context }, 'nightly')
+
+ - name: Delete old nightlies
+ uses: actions/github-script@v8
+ with:
+ script: |
+ const prunePrereleases = require('./.github/scripts/prune-prereleases.js')
+ await prunePrereleases({github, context})
# If any of the jobs fail, this will create a high-priority issue to signal so.
issue:
name: Open an issue
runs-on: ubuntu-latest
- needs: [prepare, release-docker, release, publish-nightly]
+ needs: [prepare, release-docker, release, cleanup]
if: failure()
permissions:
contents: read
issues: write
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@v6
with:
persist-credentials: false
- - uses: JasonEtco/create-an-issue@1b14a70e4d8dc185e5cc76d3bec9eab20257b2c5 # v2.9.2
+ - uses: JasonEtco/create-an-issue@1b14a70e4d8dc185e5cc76d3bec9eab20257b2c5 # v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
WORKFLOW_URL: |
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index eaa46c8e79f7c..b9861afb5760b 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -110,11 +110,21 @@ jobs:
${{ runner.os }}-foundry-${{ matrix.name }}-
- uses: mozilla-actions/sccache-action@7d986dd989559c6ecdb630a3fd2557667be217ad # v0.0.9
- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
+ - name: Generate GitHub App token (cross-repo cargo auth)
+ id: app-token
+ uses: actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b # v2.1.4
+ with:
+ app-id: ${{ secrets.APP_ID }}
+ private-key: ${{ secrets.APP_PRIVATE_KEY }}
+ owner: ${{ github.repository_owner }}
- name: Setup Git config
+ env:
+ GH_TOKEN: ${{ steps.app-token.outputs.token }}
run: |
git config --global user.name "GitHub Actions Bot"
git config --global user.email "<>"
git config --global url."https://github.com/".insteadOf "git@github.com:"
+ git config --global url."https://x-access-token:${GH_TOKEN}@github.com/".insteadOf "https://github.com/"
- name: Test
env:
SVM_TARGET_PLATFORM: ${{ matrix.svm_target_platform }}
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000000000..c4a84884ee1d8
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,4 @@
+[submodule "testdata/lib/credible-std"]
+path = testdata/lib/credible-std
+url = https://github.com/phylaxsystems/credible-std.git
+branch = feat/update-assertion-interface
diff --git a/Cargo.lock b/Cargo.lock
index 71d56653d7a20..76b03ecc7ec47 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -77,21 +77,21 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
[[package]]
name = "alloy"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a547705d5c1b42575a0542bae2ba45bc62a6154be86611afaef1c0ab5c38598e"
+checksum = "d8010fc7e9e8643ef4e758cdccf3eef26734594aedf88a9d5ed35e51837d42ef"
dependencies = [
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-contract",
"alloy-core",
- "alloy-eips 2.0.1",
- "alloy-genesis",
+ "alloy-eips 2.0.4",
+ "alloy-genesis 2.0.4",
"alloy-network",
"alloy-provider",
"alloy-pubsub",
"alloy-rpc-client",
"alloy-rpc-types",
- "alloy-serde 2.0.1",
+ "alloy-serde 2.0.4",
"alloy-signer",
"alloy-signer-local",
"alloy-transport",
@@ -116,16 +116,43 @@ dependencies = [
[[package]]
name = "alloy-consensus"
-version = "2.0.1"
+version = "1.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f16daaf7e1f95f62c6c3bf8a3fc3d78b08ae9777810c0bb5e94966c7cd57ef0"
+dependencies = [
+ "alloy-eips 1.8.3",
+ "alloy-primitives",
+ "alloy-rlp",
+ "alloy-serde 1.8.3",
+ "alloy-trie",
+ "alloy-tx-macros 1.8.3",
+ "auto_impl",
+ "borsh",
+ "c-kzg",
+ "derive_more",
+ "either",
+ "k256",
+ "once_cell",
+ "rand 0.8.5",
+ "secp256k1 0.30.0",
+ "serde",
+ "serde_json",
+ "serde_with",
+ "thiserror 2.0.18",
+]
+
+[[package]]
+name = "alloy-consensus"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae8c24c95e90c1608c2d91cff1b451d796474168d3310ccc8b7cd12502ca8169"
+checksum = "e3d64da86c616b5092ea64eea648f311bbd58630a0b384c42d699175d6f9122b"
dependencies = [
- "alloy-eips 2.0.1",
+ "alloy-eips 2.0.4",
"alloy-primitives",
"alloy-rlp",
- "alloy-serde 2.0.1",
+ "alloy-serde 2.0.4",
"alloy-trie",
- "alloy-tx-macros",
+ "alloy-tx-macros 2.0.4",
"auto_impl",
"borsh",
"c-kzg",
@@ -133,7 +160,7 @@ dependencies = [
"either",
"k256",
"once_cell",
- "rand 0.8.6",
+ "rand 0.8.5",
"secp256k1 0.30.0",
"serde",
"serde_json",
@@ -143,33 +170,47 @@ dependencies = [
[[package]]
name = "alloy-consensus-any"
-version = "2.0.1"
+version = "1.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "118998d9015332ab1b4720ae1f1e3009491966a0349938a1f43ff45a8a4c6299"
+dependencies = [
+ "alloy-consensus 1.8.3",
+ "alloy-eips 1.8.3",
+ "alloy-primitives",
+ "alloy-rlp",
+ "alloy-serde 1.8.3",
+ "serde",
+]
+
+[[package]]
+name = "alloy-consensus-any"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d211ad0ef468a70a7a829e49683ff59ad25f02b4ab3764344c4c2663329a52c"
+checksum = "8fd98696ca3617d3a9ba1a6f2011880cbfd5618228dab6400c9f8bca457859a8"
dependencies = [
- "alloy-consensus",
- "alloy-eips 2.0.1",
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
"alloy-primitives",
"alloy-rlp",
- "alloy-serde 2.0.1",
+ "alloy-serde 2.0.4",
"serde",
]
[[package]]
name = "alloy-contract"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c59d55233ac14aa7fa6bcdcad45ba305e90c556065e0947cd9f243c4469e7c2d"
+checksum = "de3df0aadc569a8b277808a7d0ad0e421180654ea36a3c59e9ed2bb968c9a1cd"
dependencies = [
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-dyn-abi",
"alloy-json-abi",
"alloy-network",
- "alloy-network-primitives",
+ "alloy-network-primitives 2.0.4",
"alloy-primitives",
"alloy-provider",
"alloy-pubsub",
- "alloy-rpc-types-eth",
+ "alloy-rpc-types-eth 2.0.4",
"alloy-sol-types",
"alloy-transport",
"futures",
@@ -208,7 +249,7 @@ dependencies = [
"proptest",
"serde",
"serde_json",
- "winnow 0.7.15",
+ "winnow 0.7.14",
]
[[package]]
@@ -238,12 +279,12 @@ dependencies = [
[[package]]
name = "alloy-eip5792"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "250ba1168b8a049185a68c4dfa7f2a6a4046bd26fcc8c68632caeb216a5e12dc"
+checksum = "1ceb16e7fe5a95825305f218ccd356665f848831f94ce2bbf55339bf5d21e88a"
dependencies = [
"alloy-primitives",
- "alloy-serde 2.0.1",
+ "alloy-serde 2.0.4",
"serde",
"serde_json",
]
@@ -265,14 +306,16 @@ dependencies = [
[[package]]
name = "alloy-eip7928"
-version = "0.3.3"
+version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8222b1d88f9a6d03be84b0f5e76bb60cd83991b43ad8ab6477f0e4a7809b98d"
+checksum = "6b827a6d7784fe3eb3489d40699407a4cdcce74271421a01bdffe60cf573bb16"
dependencies = [
"alloy-primitives",
"alloy-rlp",
"borsh",
+ "once_cell",
"serde",
+ "thiserror 2.0.18",
]
[[package]]
@@ -300,9 +343,9 @@ dependencies = [
[[package]]
name = "alloy-eips"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae69eaa5096b47ffe97e6a5d6bde7e7fa2dec106af22a9315621d11039c3de3c"
+checksum = "64c0456f5f7a4497e9342d20f528e30f5288ddfa0d6a012bd5044afee46cd8a0"
dependencies = [
"alloy-eip2124",
"alloy-eip2930",
@@ -310,7 +353,7 @@ dependencies = [
"alloy-eip7928",
"alloy-primitives",
"alloy-rlp",
- "alloy-serde 2.0.1",
+ "alloy-serde 2.0.4",
"auto_impl",
"borsh",
"c-kzg",
@@ -325,9 +368,9 @@ dependencies = [
[[package]]
name = "alloy-ens"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34a8c1330ad33c95b5958573bca9a1ad0b419a51d76bb4c521556fbba8539b8d"
+checksum = "d5638cbbffb318d440fdb009de019090d8d117dae40de9d10cdb29891ea59eb9"
dependencies = [
"alloy-contract",
"alloy-primitives",
@@ -339,16 +382,36 @@ dependencies = [
[[package]]
name = "alloy-evm"
-version = "0.33.2"
+version = "0.33.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f092eb6af80456e4ab41c9722e777d791335bc9c00b11bc3db7bf29a432dfd0"
+dependencies = [
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
+ "alloy-hardforks",
+ "alloy-primitives",
+ "alloy-rpc-types-engine",
+ "alloy-rpc-types-eth 2.0.4",
+ "alloy-sol-types",
+ "auto_impl",
+ "derive_more",
+ "revm",
+ "thiserror 2.0.18",
+ "tracing",
+]
+
+[[package]]
+name = "alloy-evm"
+version = "0.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6fc4b83cb672156663e6094d098beb509965b7fe684bb3d6e44bb9ca2e9ae714"
+checksum = "c1ceeea6dcbbcd4e546b27700763a6f6c3b3fee30054209884f521078b6fda4f"
dependencies = [
- "alloy-consensus",
- "alloy-eips 2.0.1",
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
"alloy-hardforks",
"alloy-primitives",
"alloy-rpc-types-engine",
- "alloy-rpc-types-eth",
+ "alloy-rpc-types-eth 2.0.4",
"alloy-sol-types",
"auto_impl",
"derive_more",
@@ -359,13 +422,28 @@ dependencies = [
[[package]]
name = "alloy-genesis"
-version = "2.0.1"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39789db0b3f3bbef0e6549c87bc6842b73886ebabee1405b6941685b1cc34083"
+checksum = "bbf9480307b09d22876efb67d30cadd9013134c21f3a17ec9f93fd7536d38024"
dependencies = [
- "alloy-eips 2.0.1",
+ "alloy-eips 1.8.3",
+ "alloy-primitives",
+ "alloy-serde 1.8.3",
+ "alloy-trie",
+ "borsh",
+ "serde",
+ "serde_with",
+]
+
+[[package]]
+name = "alloy-genesis"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a71ff8b55d2b8aa05259f474cae7dea0e4991724dc18936b81cb23ec492a0c2a"
+dependencies = [
+ "alloy-eips 2.0.4",
"alloy-primitives",
- "alloy-serde 2.0.1",
+ "alloy-serde 2.0.4",
"alloy-trie",
"borsh",
"serde",
@@ -400,9 +478,9 @@ dependencies = [
[[package]]
name = "alloy-json-rpc"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "662b525af73e86b2167dae923261c8edf440ba7e1426b30a8b993177bc214c02"
+checksum = "19e352478b756bad5d7203148e4b461861282ea2ded3da406ba24868b52cd098"
dependencies = [
"alloy-primitives",
"alloy-sol-types",
@@ -415,19 +493,19 @@ dependencies = [
[[package]]
name = "alloy-network"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c657c2d9751d3c7d94990554b231e5372c3c2e4bad842806280b6151a0d6a05d"
+checksum = "ed08ae169869e08370ed121612e0d3dadac33d1a256e9f2465926b23f0bd7d95"
dependencies = [
- "alloy-consensus",
- "alloy-consensus-any",
- "alloy-eips 2.0.1",
+ "alloy-consensus 2.0.4",
+ "alloy-consensus-any 2.0.4",
+ "alloy-eips 2.0.4",
"alloy-json-rpc",
- "alloy-network-primitives",
+ "alloy-network-primitives 2.0.4",
"alloy-primitives",
"alloy-rpc-types-any",
- "alloy-rpc-types-eth",
- "alloy-serde 2.0.1",
+ "alloy-rpc-types-eth 2.0.4",
+ "alloy-serde 2.0.4",
"alloy-signer",
"alloy-sol-types",
"async-trait",
@@ -441,14 +519,27 @@ dependencies = [
[[package]]
name = "alloy-network-primitives"
-version = "2.0.1"
+version = "1.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb82711d59a43fdfd79727c99f270b974c784ec4eb5728a0d0d22f26716c87ef"
+dependencies = [
+ "alloy-consensus 1.8.3",
+ "alloy-eips 1.8.3",
+ "alloy-primitives",
+ "alloy-serde 1.8.3",
+ "serde",
+]
+
+[[package]]
+name = "alloy-network-primitives"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59e7c4bb0ebbd6d7406d2808968f43c0d5186c69c5e58cedcbee7380f4cd1fcf"
+checksum = "02e6c7ad28afe348a9a9c5624b67ee5b3607b8de98d5816b3056ecdfa6fa2697"
dependencies = [
- "alloy-consensus",
- "alloy-eips 2.0.1",
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
"alloy-primitives",
- "alloy-serde 2.0.1",
+ "alloy-serde 2.0.4",
"serde",
]
@@ -457,9 +548,9 @@ name = "alloy-op-evm"
version = "0.31.0"
source = "git+https://github.com/ethereum-optimism/optimism?rev=42f5117c2e7de0614cd3b96f274d0a3078f9701c#42f5117c2e7de0614cd3b96f274d0a3078f9701c"
dependencies = [
- "alloy-consensus",
- "alloy-eips 2.0.1",
- "alloy-evm",
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
+ "alloy-evm 0.33.3",
"alloy-op-hardforks",
"alloy-primitives",
"auto_impl",
@@ -503,7 +594,7 @@ dependencies = [
"paste",
"proptest",
"proptest-derive",
- "rand 0.9.4",
+ "rand 0.9.2",
"rapidhash",
"ruint",
"rustc-hash",
@@ -513,22 +604,22 @@ dependencies = [
[[package]]
name = "alloy-provider"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4fea0fc2628cdbc851aaa333124f9d8ab9f567ab8d4c20202819db13aa1a534"
+checksum = "93a7c17472b55482d4734154c2f5ed13f72e03f6752cebb927f6a2d8b52e646c"
dependencies = [
"alloy-chains",
- "alloy-consensus",
- "alloy-eips 2.0.1",
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
"alloy-json-rpc",
"alloy-network",
- "alloy-network-primitives",
+ "alloy-network-primitives 2.0.4",
"alloy-primitives",
"alloy-pubsub",
"alloy-rpc-client",
"alloy-rpc-types-anvil",
"alloy-rpc-types-debug",
- "alloy-rpc-types-eth",
+ "alloy-rpc-types-eth 2.0.4",
"alloy-rpc-types-trace",
"alloy-rpc-types-txpool",
"alloy-signer",
@@ -547,7 +638,7 @@ dependencies = [
"lru",
"parking_lot",
"pin-project",
- "reqwest 0.13.2",
+ "reqwest 0.13.3",
"serde",
"serde_json",
"thiserror 2.0.18",
@@ -559,9 +650,9 @@ dependencies = [
[[package]]
name = "alloy-pubsub"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "edc7b42e514613c717887dc77bb58d35e845557ebd63a18c3f92a77094e4891f"
+checksum = "a8d86958b02bca85103d64fa60d7b364a8b017c6e40f2b02c3f50ca22964a738"
dependencies = [
"alloy-json-rpc",
"alloy-primitives",
@@ -603,9 +694,9 @@ dependencies = [
[[package]]
name = "alloy-rpc-client"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5ee7b51752c68fb95f21705e402700750e692b1d21ccc294ac48fadc8655d53"
+checksum = "5beb5c2fe6b960c8e8b038e69fd502a90a2e930afa4770efb748b163b0767729"
dependencies = [
"alloy-json-rpc",
"alloy-primitives",
@@ -616,7 +707,7 @@ dependencies = [
"alloy-transport-ws",
"futures",
"pin-project",
- "reqwest 0.13.2",
+ "reqwest 0.13.3",
"serde",
"serde_json",
"tokio",
@@ -629,55 +720,55 @@ dependencies = [
[[package]]
name = "alloy-rpc-types"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8fa76988f54105ad4398828e8aaf1a39b3f07f91fb79091529056689514ee8c2"
+checksum = "4ee1257a278f6d293e05c5162c5940a1561b1aa85ded0028b464c81de37ebfa5"
dependencies = [
"alloy-primitives",
"alloy-rpc-types-anvil",
"alloy-rpc-types-debug",
"alloy-rpc-types-engine",
- "alloy-rpc-types-eth",
+ "alloy-rpc-types-eth 2.0.4",
"alloy-rpc-types-trace",
"alloy-rpc-types-txpool",
- "alloy-serde 2.0.1",
+ "alloy-serde 2.0.4",
"serde",
]
[[package]]
name = "alloy-rpc-types-anvil"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d276bea4e92e4991269d31b9abd3e722eed2565b82036478a4416adb8dd4992"
+checksum = "df32156f085e74eac942b6103744be49b817c302341aaa8cb0c1c88dc29228d9"
dependencies = [
"alloy-primitives",
- "alloy-rpc-types-eth",
- "alloy-serde 2.0.1",
+ "alloy-rpc-types-eth 2.0.4",
+ "alloy-serde 2.0.4",
"serde",
]
[[package]]
name = "alloy-rpc-types-any"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f1a9a3bda9be7f6515316eb792710532411878bbfc88934973f4b371376b00d"
+checksum = "6a234bfbdf7a76c3d13808f729af5321852de3dedcaa6fc6d5f54787aaf54c6a"
dependencies = [
- "alloy-consensus-any",
- "alloy-network-primitives",
+ "alloy-consensus-any 2.0.4",
+ "alloy-network-primitives 2.0.4",
"alloy-primitives",
- "alloy-rpc-types-eth",
- "alloy-serde 2.0.1",
+ "alloy-rpc-types-eth 2.0.4",
+ "alloy-serde 2.0.4",
"serde",
"serde_json",
]
[[package]]
name = "alloy-rpc-types-beacon"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "caf5d68ddca890854fb78291cbde06115473ded00b2337d0f815e92c0c1f8003"
+checksum = "296450f5e76bece0116c939b9437b0421a5da9c5d40031bf4cf9b38d3d94e475"
dependencies = [
- "alloy-eips 2.0.1",
+ "alloy-eips 2.0.4",
"alloy-primitives",
"alloy-rpc-types-engine",
"derive_more",
@@ -689,9 +780,9 @@ dependencies = [
[[package]]
name = "alloy-rpc-types-debug"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea21739e232c221779741eba7e7b9bc19ad8ff777b72736647ae519f5c9f6f33"
+checksum = "0ab075ac1c25bcf697f133b7cd92e2fb26afe213e872ef79fdf77f0d7bcb3793"
dependencies = [
"alloy-primitives",
"alloy-rlp",
@@ -702,37 +793,58 @@ dependencies = [
[[package]]
name = "alloy-rpc-types-engine"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f05338cfb4ee5508ff76f01c88142cab8a4579db74b7d9432936c26e4f11374"
+checksum = "73b12366c96f4013e1aeebc96c6b56e5f33f07853c42ea2f485045c0c157a4a1"
dependencies = [
- "alloy-consensus",
- "alloy-eips 2.0.1",
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
"alloy-primitives",
"alloy-rlp",
- "alloy-serde 2.0.1",
+ "alloy-serde 2.0.4",
"derive_more",
"ethereum_ssz",
"ethereum_ssz_derive",
"jsonwebtoken",
- "rand 0.8.6",
+ "rand 0.8.5",
"serde",
"strum",
]
[[package]]
name = "alloy-rpc-types-eth"
-version = "2.0.1"
+version = "1.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59c095f92c4e1ff4981d89e9aa02d5f98c762a1980ab66bec49c44be11349da2"
+dependencies = [
+ "alloy-consensus 1.8.3",
+ "alloy-consensus-any 1.8.3",
+ "alloy-eips 1.8.3",
+ "alloy-network-primitives 1.8.3",
+ "alloy-primitives",
+ "alloy-rlp",
+ "alloy-serde 1.8.3",
+ "alloy-sol-types",
+ "itertools 0.14.0",
+ "serde",
+ "serde_json",
+ "serde_with",
+ "thiserror 2.0.18",
+]
+
+[[package]]
+name = "alloy-rpc-types-eth"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dda4ece0050154ab278241aeffade58916b04f38254832e8cb6e4671c6e72ed2"
+checksum = "56a282daf869eeb7383d3d5c2deb35b0b3fb45ecb329513af4090fc61245ee18"
dependencies = [
- "alloy-consensus",
- "alloy-consensus-any",
- "alloy-eips 2.0.1",
- "alloy-network-primitives",
+ "alloy-consensus 2.0.4",
+ "alloy-consensus-any 2.0.4",
+ "alloy-eips 2.0.4",
+ "alloy-network-primitives 2.0.4",
"alloy-primitives",
"alloy-rlp",
- "alloy-serde 2.0.1",
+ "alloy-serde 2.0.4",
"alloy-sol-types",
"itertools 0.14.0",
"serde",
@@ -743,13 +855,13 @@ dependencies = [
[[package]]
name = "alloy-rpc-types-trace"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f5905ac3663b0859d67b82d912acce20887d20682a0cadde79c8a763b133a515"
+checksum = "6184b5d14152b68b0bb8beb621339d94f0b761a37958bb365fbf7c00922125c2"
dependencies = [
"alloy-primitives",
- "alloy-rpc-types-eth",
- "alloy-serde 2.0.1",
+ "alloy-rpc-types-eth 2.0.4",
+ "alloy-serde 2.0.4",
"serde",
"serde_json",
"thiserror 2.0.18",
@@ -757,13 +869,13 @@ dependencies = [
[[package]]
name = "alloy-rpc-types-txpool"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7fbf71892d4df9cae8d35dc96f15d522384bb93806205465e2c8c012b7f0a34"
+checksum = "f00b631c361e7c7baaf4f1f5a9877730f3507fed2acb9d4b34841b8184b2ec28"
dependencies = [
"alloy-primitives",
- "alloy-rpc-types-eth",
- "alloy-serde 2.0.1",
+ "alloy-rpc-types-eth 2.0.4",
+ "alloy-serde 2.0.4",
"serde",
]
@@ -780,9 +892,9 @@ dependencies = [
[[package]]
name = "alloy-serde"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "beaa5c581a67e2743d95b4849eb9cfeb90866429cdaa6d8f6b75eb988b2d0cd9"
+checksum = "a0eada2558e921b39dfcead33c487364df9b31374f5733c1c9d2c891c4529933"
dependencies = [
"alloy-primitives",
"serde",
@@ -791,9 +903,9 @@ dependencies = [
[[package]]
name = "alloy-signer"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5da9ae50f9b48d7b4e2e5cde87175257be7e5e56909a7794720597c1d9806f6"
+checksum = "41eb29f7a8adcd8941fbb8e134022a133e6f8dfd345f2e3b7109599f8a7dca08"
dependencies = [
"alloy-dyn-abi",
"alloy-primitives",
@@ -808,11 +920,11 @@ dependencies = [
[[package]]
name = "alloy-signer-aws"
-version = "2.0.0"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7a57d1e72b1f9b11e5e71ebdab0569cb02277a462bbea6793fcaebfcd794ae9"
+checksum = "1258987fbc82716b5153ec7bb95a8a295e7640871b8f03d8ec7c4000dc80c215"
dependencies = [
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-network",
"alloy-primitives",
"alloy-signer",
@@ -827,11 +939,11 @@ dependencies = [
[[package]]
name = "alloy-signer-gcp"
-version = "2.0.0"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35b27f20b5298b76a5a3b7cdbe6bdb184ab1ebd6e120e00dad748867673f5c90"
+checksum = "7ffc2a49bca5b73c6964711b57452f6c36a6bcb7f845ab7e9ad05b5a828d0161"
dependencies = [
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-network",
"alloy-primitives",
"alloy-signer",
@@ -845,11 +957,11 @@ dependencies = [
[[package]]
name = "alloy-signer-ledger"
-version = "2.0.0"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e9c7acc40ffbfd37d4113eb619863099f3235d78d044006a1eecb94d8b0b2f1a"
+checksum = "94e11ddaddfb98c1ddce737dc440225565b0ae0987ac9ad5e59a85db5904878c"
dependencies = [
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-dyn-abi",
"alloy-network",
"alloy-primitives",
@@ -865,11 +977,11 @@ dependencies = [
[[package]]
name = "alloy-signer-local"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49b794002d57fd2f71b4c87298a41ca24dfc0f2cf6630d95106a477e451747ba"
+checksum = "bef839e7ce9b59aa60fa9a175e97986c6145c888d643b0f1fb0a3e7b8e56a2e2"
dependencies = [
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-network",
"alloy-primitives",
"alloy-signer",
@@ -878,18 +990,18 @@ dependencies = [
"coins-bip39",
"eth-keystore",
"k256",
- "rand 0.8.6",
+ "rand 0.8.5",
"thiserror 2.0.18",
"zeroize",
]
[[package]]
name = "alloy-signer-trezor"
-version = "2.0.0"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "40a09a865ae9e1f05478429ef0d935b16467f35c6e0b02cb10f23f66a3b33fc3"
+checksum = "44eb341d0013784da6a39e5bbdc11b95d6744993b12a1c3fd55df795a850dd42"
dependencies = [
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-network",
"alloy-primitives",
"alloy-signer",
@@ -902,11 +1014,11 @@ dependencies = [
[[package]]
name = "alloy-signer-turnkey"
-version = "2.0.0"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44bb8218544ab635281f1be180a1cfd9b5d549db686faa7e85b3b2c10969819e"
+checksum = "82ff16b4166fb90bbe79bd1e49244824fb3cadc6b8cd11e9c8a002c1f8c07492"
dependencies = [
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-network",
"alloy-primitives",
"alloy-signer",
@@ -974,7 +1086,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6df77fea9d6a2a75c0ef8d2acbdfd92286cc599983d3175ccdc170d3433d249"
dependencies = [
"serde",
- "winnow 0.7.15",
+ "winnow 0.7.14",
]
[[package]]
@@ -991,9 +1103,9 @@ dependencies = [
[[package]]
name = "alloy-transport"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19dec9bfb59647254afdecbb5ddcddd7ba02edcd48ffa40510bddfbed0be1634"
+checksum = "3ac7a80c0bac3e44559d53d002e34c461dc2f23262b42cafec019bc70551abbe"
dependencies = [
"alloy-json-rpc",
"auto_impl",
@@ -1014,14 +1126,14 @@ dependencies = [
[[package]]
name = "alloy-transport-http"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2035f3c4d6bee20624da2dcf765d469b292398e48d766ffade61b0fcf8b4d45d"
+checksum = "eed3ed3300a998f88639ed619fdbbd88bd82865e00c6a8ecb796c99eb12358f6"
dependencies = [
"alloy-json-rpc",
"alloy-transport",
"itertools 0.14.0",
- "reqwest 0.13.2",
+ "reqwest 0.13.3",
"serde_json",
"tower",
"tracing",
@@ -1030,9 +1142,9 @@ dependencies = [
[[package]]
name = "alloy-transport-ipc"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cfad7aa9206fcb831ae401b6a1c893a402b8eed74f9c8ffbb7a7323afb0d9a4c"
+checksum = "1075d9d30fd4d71e50000fd4afb19ed2664ceab20c2a29f3889a6e988329e02d"
dependencies = [
"alloy-json-rpc",
"alloy-pubsub",
@@ -1050,9 +1162,9 @@ dependencies = [
[[package]]
name = "alloy-transport-ws"
-version = "2.0.1"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5aa8ff49386df3e008b73c7fb0a5479410e8493fdb86a8b916877a16e8aead9"
+checksum = "0e3bff84b2b2a46eb34cc522dc3f889a2867c70be90a377421429b662b3ec4ce"
dependencies = [
"alloy-pubsub",
"alloy-transport",
@@ -1085,9 +1197,21 @@ dependencies = [
[[package]]
name = "alloy-tx-macros"
-version = "2.0.1"
+version = "1.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d69722eddcdf1ce096c3ab66cf8116999363f734eb36fe94a148f4f71c85da84"
+dependencies = [
+ "darling 0.23.0",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "alloy-tx-macros"
+version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3520337f3d3d063a7fe20f47aaa62d695e3dc0372b34f601560dee24e76988b9"
+checksum = "99fce0350197dcd4ba4e9a7dd43915d908c0eb0e7352755791709a705e1c76b6"
dependencies = [
"darling 0.23.0",
"proc-macro2",
@@ -1111,18 +1235,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "710e8eae58854cdc1790fcb56cca04d712a17be849eeb81da2a724bf4bae2bc4"
dependencies = [
"anstyle",
- "unicode-width 0.2.2",
+ "unicode-width 0.2.0",
]
[[package]]
name = "annotate-snippets"
-version = "0.12.15"
+version = "0.12.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92570a3f9c98e7e84df84b71d0965ac99b1871fcd75a3773a3bd1bad13f64cf7"
+checksum = "96401ca08501972288ecbcde33902fce858bf73fbcbdf91dab8c3a9544e106bb"
dependencies = [
"anstyle",
"memchr",
- "unicode-width 0.2.2",
+ "unicode-width 0.2.0",
]
[[package]]
@@ -1132,22 +1256,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a"
dependencies = [
"anstyle",
- "anstyle-parse 0.2.7",
- "anstyle-query",
- "anstyle-wincon",
- "colorchoice",
- "is_terminal_polyfill",
- "utf8parse",
-]
-
-[[package]]
-name = "anstream"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d"
-dependencies = [
- "anstyle",
- "anstyle-parse 1.0.0",
+ "anstyle-parse",
"anstyle-query",
"anstyle-wincon",
"colorchoice",
@@ -1157,15 +1266,15 @@ dependencies = [
[[package]]
name = "anstyle"
-version = "1.0.14"
+version = "1.0.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000"
+checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78"
[[package]]
name = "anstyle-lossy"
-version = "1.1.5"
+version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9ca7d0f520afcd6d817970d0b2d5fd7c630c75e7783cae046b8b8a783c5befa"
+checksum = "04d3a5dc826f84d0ea11882bb8054ff7f3d482602e11bb181101303a279ea01f"
dependencies = [
"anstyle",
]
@@ -1179,15 +1288,6 @@ dependencies = [
"utf8parse",
]
-[[package]]
-name = "anstyle-parse"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e"
-dependencies = [
- "utf8parse",
-]
-
[[package]]
name = "anstyle-query"
version = "1.1.5"
@@ -1199,15 +1299,15 @@ dependencies = [
[[package]]
name = "anstyle-svg"
-version = "0.1.12"
+version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e22d9f3dea8bbda97c75bd0f0203e23f1e190d6d6f27a40e10063946dc4d4362"
+checksum = "26b9ec8c976eada1b0f9747a3d7cc4eae3bef10613e443746e7487f26c872fde"
dependencies = [
"anstyle",
"anstyle-lossy",
- "anstyle-parse 0.2.7",
+ "anstyle-parse",
"html-escape",
- "unicode-width 0.2.2",
+ "unicode-width 0.2.0",
]
[[package]]
@@ -1223,15 +1323,15 @@ dependencies = [
[[package]]
name = "anvil"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-chains",
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-contract",
"alloy-dyn-abi",
- "alloy-eips 2.0.1",
- "alloy-evm",
- "alloy-genesis",
+ "alloy-eips 2.0.4",
+ "alloy-evm 0.33.3",
+ "alloy-genesis 2.0.4",
"alloy-network",
"alloy-op-evm",
"alloy-primitives",
@@ -1240,8 +1340,8 @@ dependencies = [
"alloy-rlp",
"alloy-rpc-types",
"alloy-rpc-types-beacon",
- "alloy-rpc-types-eth",
- "alloy-serde 2.0.1",
+ "alloy-rpc-types-eth 2.0.4",
+ "alloy-serde 2.0.4",
"alloy-signer",
"alloy-signer-local",
"alloy-sol-types",
@@ -1270,13 +1370,13 @@ dependencies = [
"futures",
"hyper",
"itertools 0.14.0",
- "op-alloy-consensus",
+ "op-alloy-consensus 0.24.0",
"op-alloy-rpc-types",
"op-revm",
"parking_lot",
- "rand 0.8.6",
- "rand 0.9.4",
- "reqwest 0.13.2",
+ "rand 0.8.5",
+ "rand 0.9.2",
+ "reqwest 0.13.3",
"revm",
"revm-inspectors",
"serde",
@@ -1291,28 +1391,28 @@ dependencies = [
"thiserror 2.0.18",
"tokio",
"tracing",
- "tracing-subscriber 0.3.23",
+ "tracing-subscriber 0.3.22",
"yansi",
]
[[package]]
name = "anvil-core"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-dyn-abi",
"alloy-eip5792",
- "alloy-eips 2.0.1",
+ "alloy-eips 2.0.4",
"alloy-network",
"alloy-primitives",
"alloy-rlp",
"alloy-rpc-types",
- "alloy-serde 2.0.1",
+ "alloy-serde 2.0.4",
"bytes",
"foundry-common",
"foundry-evm",
"foundry-primitives",
- "rand 0.9.4",
+ "rand 0.9.2",
"revm",
"serde",
"serde_json",
@@ -1321,7 +1421,7 @@ dependencies = [
[[package]]
name = "anvil-rpc"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"serde",
"serde_json",
@@ -1329,7 +1429,7 @@ dependencies = [
[[package]]
name = "anvil-server"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"anvil-rpc",
"async-trait",
@@ -1630,7 +1730,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c"
dependencies = [
"num-traits",
- "rand 0.8.6",
+ "rand 0.8.5",
]
[[package]]
@@ -1640,7 +1740,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185"
dependencies = [
"num-traits",
- "rand 0.8.6",
+ "rand 0.8.5",
]
[[package]]
@@ -1650,7 +1750,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a"
dependencies = [
"num-traits",
- "rand 0.8.6",
+ "rand 0.8.5",
]
[[package]]
@@ -1678,14 +1778,80 @@ dependencies = [
"term",
]
+[[package]]
+name = "assertion-da-client"
+version = "1.4.0"
+source = "git+https://github.com/phylaxsystems/credible-sdk.git?branch=lea%2Feng-3169-featcredible-sdk-update-revm-and-alloy-dependencies#7812d7d33e20f176ce64bfa4111003b9fb0ccbc2"
+dependencies = [
+ "alloy-primitives",
+ "assertion-da-core",
+ "http 1.4.0",
+ "reqwest 0.12.26",
+ "serde",
+ "serde_json",
+ "thiserror 2.0.18",
+ "tokio",
+ "tokio-util",
+ "url",
+]
+
+[[package]]
+name = "assertion-da-core"
+version = "1.4.0"
+source = "git+https://github.com/phylaxsystems/credible-sdk.git?branch=lea%2Feng-3169-featcredible-sdk-update-revm-and-alloy-dependencies#7812d7d33e20f176ce64bfa4111003b9fb0ccbc2"
+dependencies = [
+ "alloy-primitives",
+ "serde",
+]
+
+[[package]]
+name = "assertion-executor"
+version = "1.4.0"
+source = "git+https://github.com/phylaxsystems/credible-sdk.git?branch=lea%2Feng-3169-featcredible-sdk-update-revm-and-alloy-dependencies#7812d7d33e20f176ce64bfa4111003b9fb0ccbc2"
+dependencies = [
+ "alloy-chains",
+ "alloy-consensus 2.0.4",
+ "alloy-evm 0.34.0",
+ "alloy-network",
+ "alloy-network-primitives 2.0.4",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-rpc-types",
+ "alloy-signer",
+ "alloy-sol-types",
+ "assertion-da-client",
+ "bincode",
+ "bumpalo",
+ "bytes",
+ "dashmap",
+ "eip-common",
+ "enum-as-inner",
+ "metrics",
+ "op-revm",
+ "rapidhash",
+ "rayon",
+ "reth-db",
+ "reth-db-api 1.11.2",
+ "reth-libmdbx",
+ "revm",
+ "serde",
+ "serde_json",
+ "sled",
+ "strum",
+ "thiserror 2.0.18",
+ "tokio",
+ "tracing",
+]
+
[[package]]
name = "async-compression"
-version = "0.4.41"
+version = "0.4.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d0f9ee0f6e02ffd7ad5816e9464499fba7b3effd01123b515c41d1697c43dad1"
+checksum = "98ec5f6c2f8bc326c994cb9e241cc257ddaba9afa8555a43cffbb5dd86efaa37"
dependencies = [
"compression-codecs",
"compression-core",
+ "futures-core",
"pin-project-lite",
"tokio",
]
@@ -1793,9 +1959,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
[[package]]
name = "aws-config"
-version = "1.8.15"
+version = "1.8.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11493b0bad143270fb8ad284a096dd529ba91924c5409adeac856cc1bf047dbc"
+checksum = "96571e6996817bf3d58f6b569e4b9fd2e9d2fcf9f7424eed07b2ce9bb87535e5"
dependencies = [
"aws-credential-types",
"aws-runtime",
@@ -1813,7 +1979,7 @@ dependencies = [
"fastrand",
"hex",
"http 1.4.0",
- "sha1",
+ "ring",
"time",
"tokio",
"tracing",
@@ -1823,9 +1989,9 @@ dependencies = [
[[package]]
name = "aws-credential-types"
-version = "1.2.14"
+version = "1.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f20799b373a1be121fe3005fba0c2090af9411573878f224df44b42727fcaf7"
+checksum = "3cd362783681b15d136480ad555a099e82ecd8e2d10a841e14dfd0078d67fee3"
dependencies = [
"aws-smithy-async",
"aws-smithy-runtime-api",
@@ -1835,9 +2001,9 @@ dependencies = [
[[package]]
name = "aws-lc-rs"
-version = "1.16.3"
+version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ec6fb3fe69024a75fa7e1bfb48aa6cf59706a101658ea01bfd33b2b248a038f"
+checksum = "5ec2f1fc3ec205783a5da9a7e6c1509cc69dedf09a1949e412c1e18469326d00"
dependencies = [
"aws-lc-sys",
"untrusted 0.7.1",
@@ -1846,9 +2012,9 @@ dependencies = [
[[package]]
name = "aws-lc-sys"
-version = "0.40.0"
+version = "0.41.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f50037ee5e1e41e7b8f9d161680a725bd1626cb6f8c7e901f91f942850852fe7"
+checksum = "1a2f9779ce85b93ab6170dd940ad0169b5766ff848247aff13bb788b832fe3f4"
dependencies = [
"cc",
"cmake",
@@ -1858,9 +2024,9 @@ dependencies = [
[[package]]
name = "aws-runtime"
-version = "1.7.2"
+version = "1.5.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fc0651c57e384202e47153c1260b84a9936e19803d747615edf199dc3b98d17"
+checksum = "d81b5b2898f6798ad58f484856768bca817e3cd9de0974c24ae0f1113fe88f1b"
dependencies = [
"aws-credential-types",
"aws-sigv4",
@@ -1871,28 +2037,26 @@ dependencies = [
"aws-smithy-types",
"aws-types",
"bytes",
- "bytes-utils",
"fastrand",
- "http 1.4.0",
- "http-body 1.0.1",
+ "http 0.2.12",
+ "http-body 0.4.6",
"percent-encoding",
"pin-project-lite",
"tracing",
- "uuid 1.23.1",
+ "uuid 1.19.0",
]
[[package]]
name = "aws-sdk-kms"
-version = "1.104.0"
+version = "1.97.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c41ae6a33da941457e89075ef8ca5b4870c8009fe4dceeba82fce2f30f313ac6"
+checksum = "b35a6be02a6fd3618c701a49a4dac4282658d18ccfcdcc8ac3b6c2fb4317e4fa"
dependencies = [
"aws-credential-types",
"aws-runtime",
"aws-smithy-async",
"aws-smithy-http",
"aws-smithy-json",
- "aws-smithy-observability",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
"aws-smithy-types",
@@ -1900,23 +2064,21 @@ dependencies = [
"bytes",
"fastrand",
"http 0.2.12",
- "http 1.4.0",
"regex-lite",
"tracing",
]
[[package]]
name = "aws-sdk-sso"
-version = "1.97.0"
+version = "1.91.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9aadc669e184501caaa6beafb28c6267fc1baef0810fb58f9b205485ca3f2567"
+checksum = "8ee6402a36f27b52fe67661c6732d684b2635152b676aa2babbfb5204f99115d"
dependencies = [
"aws-credential-types",
"aws-runtime",
"aws-smithy-async",
"aws-smithy-http",
"aws-smithy-json",
- "aws-smithy-observability",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
"aws-smithy-types",
@@ -1924,23 +2086,21 @@ dependencies = [
"bytes",
"fastrand",
"http 0.2.12",
- "http 1.4.0",
"regex-lite",
"tracing",
]
[[package]]
name = "aws-sdk-ssooidc"
-version = "1.99.0"
+version = "1.93.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1342a7db8f358d3de0aed2007a0b54e875458e39848d54cc1d46700b2bfcb0a8"
+checksum = "a45a7f750bbd170ee3677671ad782d90b894548f4e4ae168302c57ec9de5cb3e"
dependencies = [
"aws-credential-types",
"aws-runtime",
"aws-smithy-async",
"aws-smithy-http",
"aws-smithy-json",
- "aws-smithy-observability",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
"aws-smithy-types",
@@ -1948,23 +2108,21 @@ dependencies = [
"bytes",
"fastrand",
"http 0.2.12",
- "http 1.4.0",
"regex-lite",
"tracing",
]
[[package]]
name = "aws-sdk-sts"
-version = "1.101.0"
+version = "1.95.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab41ad64e4051ecabeea802d6a17845a91e83287e1dd249e6963ea1ba78c428a"
+checksum = "55542378e419558e6b1f398ca70adb0b2088077e79ad9f14eb09441f2f7b2164"
dependencies = [
"aws-credential-types",
"aws-runtime",
"aws-smithy-async",
"aws-smithy-http",
"aws-smithy-json",
- "aws-smithy-observability",
"aws-smithy-query",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
@@ -1973,16 +2131,15 @@ dependencies = [
"aws-types",
"fastrand",
"http 0.2.12",
- "http 1.4.0",
"regex-lite",
"tracing",
]
[[package]]
name = "aws-sigv4"
-version = "1.4.2"
+version = "1.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0b660013a6683ab23797778e21f1f854744fdf05f68204b4cca4c8c04b5d1f4"
+checksum = "69e523e1c4e8e7e8ff219d732988e22bfeae8a1cafdbe6d9eca1546fa080be7c"
dependencies = [
"aws-credential-types",
"aws-smithy-http",
@@ -2002,9 +2159,9 @@ dependencies = [
[[package]]
name = "aws-smithy-async"
-version = "1.2.14"
+version = "1.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2ffcaf626bdda484571968400c326a244598634dc75fd451325a54ad1a59acfc"
+checksum = "9ee19095c7c4dda59f1697d028ce704c24b2d33c6718790c7f1d5a3015b4107c"
dependencies = [
"futures-util",
"pin-project-lite",
@@ -2013,9 +2170,9 @@ dependencies = [
[[package]]
name = "aws-smithy-http"
-version = "0.63.6"
+version = "0.62.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba1ab2dc1c2c3749ead27180d333c42f11be8b0e934058fb4b2258ee8dbe5231"
+checksum = "826141069295752372f8203c17f28e30c464d22899a43a0c9fd9c458d469c88b"
dependencies = [
"aws-smithy-runtime-api",
"aws-smithy-types",
@@ -2023,9 +2180,9 @@ dependencies = [
"bytes-utils",
"futures-core",
"futures-util",
+ "http 0.2.12",
"http 1.4.0",
- "http-body 1.0.1",
- "http-body-util",
+ "http-body 0.4.6",
"percent-encoding",
"pin-project-lite",
"pin-utils",
@@ -2034,9 +2191,9 @@ dependencies = [
[[package]]
name = "aws-smithy-http-client"
-version = "1.1.12"
+version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a2f165a7feee6f263028b899d0a181987f4fa7179a6411a32a439fba7c5f769"
+checksum = "59e62db736db19c488966c8d787f52e6270be565727236fd5579eaa301e7bc4a"
dependencies = [
"aws-smithy-async",
"aws-smithy-runtime-api",
@@ -2058,27 +2215,27 @@ dependencies = [
[[package]]
name = "aws-smithy-json"
-version = "0.62.5"
+version = "0.61.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9648b0bb82a2eedd844052c6ad2a1a822d1f8e3adee5fbf668366717e428856a"
+checksum = "49fa1213db31ac95288d981476f78d05d9cbb0353d22cdf3472cc05bb02f6551"
dependencies = [
"aws-smithy-types",
]
[[package]]
name = "aws-smithy-observability"
-version = "0.2.6"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a06c2315d173edbf1920da8ba3a7189695827002e4c0fc961973ab1c54abca9c"
+checksum = "17f616c3f2260612fe44cede278bafa18e73e6479c4e393e2c4518cf2a9a228a"
dependencies = [
"aws-smithy-runtime-api",
]
[[package]]
name = "aws-smithy-query"
-version = "0.60.15"
+version = "0.60.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a56d79744fb3edb5d722ef79d86081e121d3b9422cb209eb03aea6aa4f21ebd"
+checksum = "ae5d689cf437eae90460e944a58b5668530d433b4ff85789e69d2f2a556e057d"
dependencies = [
"aws-smithy-types",
"urlencoding",
@@ -2086,9 +2243,9 @@ dependencies = [
[[package]]
name = "aws-smithy-runtime"
-version = "1.11.1"
+version = "1.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0504b1ab12debb5959e5165ee5fe97dd387e7aa7ea6a477bfd7635dfe769a4f5"
+checksum = "65fda37911905ea4d3141a01364bc5509a0f32ae3f3b22d6e330c0abfb62d247"
dependencies = [
"aws-smithy-async",
"aws-smithy-http",
@@ -2102,7 +2259,6 @@ dependencies = [
"http 1.4.0",
"http-body 0.4.6",
"http-body 1.0.1",
- "http-body-util",
"pin-project-lite",
"pin-utils",
"tokio",
@@ -2111,12 +2267,11 @@ dependencies = [
[[package]]
name = "aws-smithy-runtime-api"
-version = "1.12.0"
+version = "1.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b71a13df6ada0aafbf21a73bdfcdf9324cfa9df77d96b8446045be3cde61b42e"
+checksum = "ab0d43d899f9e508300e587bf582ba54c27a452dd0a9ea294690669138ae14a2"
dependencies = [
"aws-smithy-async",
- "aws-smithy-runtime-api-macros",
"aws-smithy-types",
"bytes",
"http 0.2.12",
@@ -2128,21 +2283,10 @@ dependencies = [
]
[[package]]
-name = "aws-smithy-runtime-api-macros"
-version = "1.0.0"
+name = "aws-smithy-types"
+version = "1.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d7396fd9500589e62e460e987ecb671bad374934e55ec3b5f498cc7a8a8a7b7"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.117",
-]
-
-[[package]]
-name = "aws-smithy-types"
-version = "1.4.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d73dbfbaa8e4bc57b9045137680b958d274823509a360abfd8e1d514d40c95c"
+checksum = "905cb13a9895626d49cf2ced759b062d913834c7482c38e49557eac4e6193f01"
dependencies = [
"base64-simd",
"bytes",
@@ -2163,18 +2307,18 @@ dependencies = [
[[package]]
name = "aws-smithy-xml"
-version = "0.60.15"
+version = "0.60.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ce02add1aa3677d022f8adf81dcbe3046a95f17a1b1e8979c145cd21d3d22b3"
+checksum = "11b2f670422ff42bf7065031e72b45bc52a3508bd089f743ea90731ca2b6ea57"
dependencies = [
"xmlparser",
]
[[package]]
name = "aws-types"
-version = "1.3.14"
+version = "1.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "47c8323699dd9b3c8d5b3c13051ae9cdef58fd179957c882f8374dd8725962d9"
+checksum = "1d980627d2dd7bfc32a3c025685a033eeab8d365cc840c631ef59d1b8f428164"
dependencies = [
"aws-credential-types",
"aws-smithy-async",
@@ -2186,9 +2330,9 @@ dependencies = [
[[package]]
name = "axum"
-version = "0.8.9"
+version = "0.8.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90"
+checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8"
dependencies = [
"axum-core",
"base64 0.22.1",
@@ -2213,7 +2357,7 @@ dependencies = [
"sha1",
"sync_wrapper",
"tokio",
- "tokio-tungstenite 0.29.0",
+ "tokio-tungstenite 0.28.0",
"tower",
"tower-layer",
"tower-service",
@@ -2222,9 +2366,9 @@ dependencies = [
[[package]]
name = "axum-core"
-version = "0.5.6"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1"
+checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22"
dependencies = [
"bytes",
"futures-core",
@@ -2251,7 +2395,7 @@ dependencies = [
"miniz_oxide",
"object",
"rustc-demangle",
- "windows-link",
+ "windows-link 0.2.1",
]
[[package]]
@@ -2284,9 +2428,9 @@ dependencies = [
[[package]]
name = "base64ct"
-version = "1.8.3"
+version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06"
+checksum = "0e050f626429857a27ddccb31e0aca21356bfa709c04041aefddac081a8f068a"
[[package]]
name = "bech32"
@@ -2300,6 +2444,33 @@ version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7"
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[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.12.1",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 2.0.117",
+]
+
[[package]]
name = "bit-set"
version = "0.8.0"
@@ -2339,9 +2510,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
-version = "2.11.1"
+version = "2.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
+checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
dependencies = [
"serde_core",
]
@@ -2361,9 +2532,9 @@ dependencies = [
[[package]]
name = "blake3"
-version = "1.8.4"
+version = "1.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d2d5991425dfd0785aed03aedcf0b321d61975c9b5b3689c774a2610ae0b51e"
+checksum = "0aa83c34e62843d924f905e0f5c866eb1dd6545fc4d719e803d9ba6030371fce"
dependencies = [
"arrayref",
"arrayvec",
@@ -2424,11 +2595,11 @@ dependencies = [
[[package]]
name = "boa_ast"
-version = "0.21.1"
+version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6339a700715bda376f5ea65c76e8fe8fc880930d8b0638cea68e7f3da6538e0a"
+checksum = "bc119a5ad34c3f459062a96907f53358989b173d104258891bb74f95d93747e8"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"boa_interner",
"boa_macros",
"boa_string",
@@ -2439,13 +2610,13 @@ dependencies = [
[[package]]
name = "boa_engine"
-version = "0.21.1"
+version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1521be326f8a5c8887e95d4ce7f002917a002a23f7b93b9a6a2bf50ed4157824"
+checksum = "e637ec52ea66d76b0ca86180c259d6c7bb6e6a6e14b2f36b85099306d8b00cc3"
dependencies = [
"aligned-vec",
"arrayvec",
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"boa_ast",
"boa_gc",
"boa_interner",
@@ -2473,7 +2644,7 @@ dependencies = [
"num_enum",
"paste",
"portable-atomic",
- "rand 0.9.4",
+ "rand 0.9.2",
"regress",
"rustc-hash",
"ryu-js",
@@ -2491,9 +2662,9 @@ dependencies = [
[[package]]
name = "boa_gc"
-version = "0.21.1"
+version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17323a98cf2e631afacf1a6d659c1212c48a68bacfa85afab0a66ade80582e51"
+checksum = "f1179f690cbfcbe5364cceee5f1cb577265bb6f07b0be6f210aabe270adcf9da"
dependencies = [
"boa_macros",
"boa_string",
@@ -2503,9 +2674,9 @@ dependencies = [
[[package]]
name = "boa_interner"
-version = "0.21.1"
+version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20510b8b02bcde9b0a01cf34c0c308c56156503d1d91cdab4c8cfbd292b747ea"
+checksum = "9626505d33dc63d349662437297df1d3afd9d5fc4a2b3ad34e5e1ce879a78848"
dependencies = [
"boa_gc",
"boa_macros",
@@ -2519,9 +2690,9 @@ dependencies = [
[[package]]
name = "boa_macros"
-version = "0.21.1"
+version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5822cb4f146d243060e588bc5a5f2e709683fdad3d7111f42c48e6b5c921d23d"
+checksum = "7f36418a46544b152632c141b0a0b7a453cd69ca150caeef83aee9e2f4b48b7d"
dependencies = [
"cfg-if",
"cow-utils",
@@ -2533,11 +2704,11 @@ dependencies = [
[[package]]
name = "boa_parser"
-version = "0.21.1"
+version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35bd957fa9fa93e3a001a8aba5a5cd40c2bbfde486378be4c4b472fd304aaddb"
+checksum = "02f99bf5b684f0de946378fcfe5f38c3a0fbd51cbf83a0f39ff773a0e218541f"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"boa_ast",
"boa_interner",
"boa_macros",
@@ -2551,9 +2722,9 @@ dependencies = [
[[package]]
name = "boa_string"
-version = "0.21.1"
+version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca2da1d7f4a76fd9040788a122f0d807910800a7b86f5952e9244848c36511de"
+checksum = "45ce9d7aa5563a2e14eab111e2ae1a06a69a812f6c0c3d843196c9d03fbef440"
dependencies = [
"fast-float2",
"itoa",
@@ -2590,20 +2761,19 @@ dependencies = [
[[package]]
name = "borsh"
-version = "1.6.1"
+version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cfd1e3f8955a5d7de9fab72fc8373fade9fb8a703968cb200ae3dc6cf08e185a"
+checksum = "d1da5ab77c1437701eeff7c88d968729e7766172279eab0676857b3d63af7a6f"
dependencies = [
"borsh-derive",
- "bytes",
"cfg_aliases",
]
[[package]]
name = "borsh-derive"
-version = "1.6.1"
+version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfcfdc083699101d5a7965e49925975f2f55060f94f9a05e7187be95d530ca59"
+checksum = "0686c856aa6aac0c4498f936d7d6a02df690f614c03e4d906d1018062b5c5e2c"
dependencies = [
"once_cell",
"proc-macro-crate",
@@ -2641,9 +2811,9 @@ dependencies = [
[[package]]
name = "bumpalo"
-version = "3.20.2"
+version = "3.19.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
+checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510"
[[package]]
name = "byte-slice-cast"
@@ -2653,9 +2823,9 @@ checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d"
[[package]]
name = "bytemuck"
-version = "1.25.0"
+version = "1.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec"
+checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4"
dependencies = [
"bytemuck_derive",
]
@@ -2711,6 +2881,15 @@ dependencies = [
"serde",
]
+[[package]]
+name = "cache-advisor"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f89ab55ca4e6a46a0740a1c5346db1ad66e4a76598bbfa060dc3259935a7450"
+dependencies = [
+ "crossbeam-queue",
+]
+
[[package]]
name = "camino"
version = "1.2.2"
@@ -2745,15 +2924,15 @@ dependencies = [
[[package]]
name = "cast"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-chains",
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-contract",
"alloy-dyn-abi",
- "alloy-eips 2.0.1",
+ "alloy-eips 2.0.4",
"alloy-ens",
- "alloy-evm",
+ "alloy-evm 0.33.3",
"alloy-hardforks",
"alloy-json-abi",
"alloy-json-rpc",
@@ -2763,7 +2942,7 @@ dependencies = [
"alloy-rlp",
"alloy-rpc-types",
"alloy-rpc-types-beacon",
- "alloy-serde 2.0.1",
+ "alloy-serde 2.0.4",
"alloy-signer",
"alloy-signer-local",
"alloy-sol-types",
@@ -2790,11 +2969,11 @@ dependencies = [
"foundry-wallets",
"futures",
"itertools 0.14.0",
- "op-alloy-consensus",
+ "op-alloy-consensus 0.24.0",
"op-alloy-flz",
"op-alloy-network",
- "rand 0.8.6",
- "rand 0.9.4",
+ "rand 0.8.5",
+ "rand 0.9.2",
"rayon",
"regex",
"revm",
@@ -2822,9 +3001,9 @@ dependencies = [
[[package]]
name = "cc"
-version = "1.2.60"
+version = "1.2.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20"
+checksum = "9f50d563227a1c37cc0a263f64eca3334388c01c5e4c4861a9def205c614383c"
dependencies = [
"find-msvc-tools",
"jobserver",
@@ -2838,6 +3017,15 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
[[package]]
name = "cfg-if"
version = "1.0.4"
@@ -2876,7 +3064,7 @@ dependencies = [
[[package]]
name = "chisel"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-dyn-abi",
"alloy-json-abi",
@@ -2894,7 +3082,7 @@ dependencies = [
"foundry-solang-parser",
"foundry-test-utils",
"itertools 0.14.0",
- "reqwest 0.13.2",
+ "reqwest 0.13.3",
"rexpect",
"rustyline",
"semver 1.0.28",
@@ -2904,23 +3092,23 @@ dependencies = [
"tempfile",
"time",
"tracing",
- "tracing-subscriber 0.3.23",
+ "tracing-subscriber 0.3.22",
"walkdir",
"yansi",
]
[[package]]
name = "chrono"
-version = "0.4.44"
+version = "0.4.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0"
+checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
dependencies = [
"iana-time-zone",
"js-sys",
"num-traits",
"serde",
"wasm-bindgen",
- "windows-link",
+ "windows-link 0.2.1",
]
[[package]]
@@ -2961,11 +3149,22 @@ dependencies = [
"zeroize",
]
+[[package]]
+name = "clang-sys"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
[[package]]
name = "clap"
-version = "4.6.1"
+version = "4.5.53"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51"
+checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8"
dependencies = [
"clap_builder",
"clap_derive",
@@ -2983,33 +3182,33 @@ dependencies = [
[[package]]
name = "clap_builder"
-version = "4.6.0"
+version = "4.5.53"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f"
+checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00"
dependencies = [
- "anstream 1.0.0",
+ "anstream",
"anstyle",
"clap_lex",
"strsim",
"terminal_size",
"unicase",
- "unicode-width 0.2.2",
+ "unicode-width 0.2.0",
]
[[package]]
name = "clap_complete"
-version = "4.6.2"
+version = "4.5.62"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3ff7a1dccbdd8b078c2bdebff47e404615151534d5043da397ec50286816f9cb"
+checksum = "004eef6b14ce34759aa7de4aea3217e368f463f46a3ed3764ca4b5a4404003b4"
dependencies = [
"clap",
]
[[package]]
name = "clap_complete_nushell"
-version = "4.6.0"
+version = "4.5.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fbb9e9715d29a754b468591be588f6b926f5b0a1eb6a8b62acabeb66ff84d897"
+checksum = "685bc86fd34b7467e0532a4f8435ab107960d69a243785ef0275e571b35b641a"
dependencies = [
"clap",
"clap_complete",
@@ -3017,9 +3216,9 @@ dependencies = [
[[package]]
name = "clap_derive"
-version = "4.6.1"
+version = "4.5.49"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9"
+checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671"
dependencies = [
"heck",
"proc-macro2",
@@ -3029,17 +3228,17 @@ dependencies = [
[[package]]
name = "clap_lex"
-version = "1.1.0"
+version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
+checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d"
[[package]]
name = "clearscreen"
-version = "4.0.6"
+version = "4.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d669bb552908e336ad5681789752033b45566b7e591aeaac7a614e58e5d6d8f2"
+checksum = "85a8ab73a1c02b0c15597b22e09c7dc36e63b2f601f9d1e83ac0c3decd38b1ae"
dependencies = [
- "nix 0.31.2",
+ "nix 0.29.0",
"terminfo",
"thiserror 2.0.18",
"which",
@@ -3048,9 +3247,9 @@ dependencies = [
[[package]]
name = "cliclack"
-version = "0.3.8"
+version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aa510b739c618c679375ea9c5af44ce9f591289546e874ad5910e7ce7df79844"
+checksum = "2381872509dfa50d8b92b92a5da8367ba68458ab9494be4134b57ad6ca26295f"
dependencies = [
"console 0.15.11",
"indicatif",
@@ -3071,9 +3270,9 @@ dependencies = [
[[package]]
name = "cmake"
-version = "0.1.58"
+version = "0.1.57"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678"
+checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d"
dependencies = [
"cc",
]
@@ -3111,7 +3310,7 @@ dependencies = [
"hmac",
"once_cell",
"pbkdf2 0.12.2",
- "rand 0.8.6",
+ "rand 0.8.5",
"sha2 0.10.9",
"thiserror 1.0.69",
]
@@ -3186,15 +3385,15 @@ dependencies = [
[[package]]
name = "colorchoice"
-version = "1.0.5"
+version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570"
+checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
[[package]]
name = "colored"
-version = "3.1.1"
+version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34"
+checksum = "fde0e0ec90c9dfb3b4b1a0891a7dcd0e2bffde2f7efed5fe7c9bb00e5bfb915e"
dependencies = [
"windows-sys 0.59.0",
]
@@ -3211,13 +3410,13 @@ dependencies = [
[[package]]
name = "comfy-table"
-version = "7.2.2"
+version = "7.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "958c5d6ecf1f214b4c2bbbbf6ab9523a864bd136dcf71a7e8904799acfe1ad47"
+checksum = "b03b7db8e0b4b2fdad6c551e634134e99ec000e5c8c3b6856c65e8bbaded7a3b"
dependencies = [
"crossterm",
"unicode-segmentation",
- "unicode-width 0.2.2",
+ "unicode-width 0.2.0",
]
[[package]]
@@ -3236,7 +3435,7 @@ dependencies = [
"cfg-if",
"commonware-macros",
"paste",
- "rand 0.8.6",
+ "rand 0.8.5",
"rand_chacha 0.3.1",
"thiserror 2.0.18",
]
@@ -3263,11 +3462,11 @@ dependencies = [
"ctutils",
"ecdsa",
"ed25519-consensus",
- "getrandom 0.2.17",
+ "getrandom 0.2.16",
"num-rational",
"num-traits",
"p256",
- "rand 0.8.6",
+ "rand 0.8.5",
"rand_chacha 0.3.1",
"rand_core 0.6.4",
"sha2 0.10.9",
@@ -3296,7 +3495,7 @@ dependencies = [
"proc-macro2",
"quote",
"syn 2.0.117",
- "toml",
+ "toml 0.9.10+spec-1.1.0",
]
[[package]]
@@ -3335,7 +3534,7 @@ dependencies = [
"commonware-codec",
"commonware-macros",
"futures",
- "getrandom 0.2.17",
+ "getrandom 0.2.16",
"hashbrown 0.16.1",
"num-bigint",
"num-integer",
@@ -3343,7 +3542,7 @@ dependencies = [
"num-traits",
"parking_lot",
"pin-project",
- "rand 0.8.6",
+ "rand 0.8.5",
"thiserror 2.0.18",
"tokio",
"zeroize",
@@ -3365,9 +3564,9 @@ dependencies = [
[[package]]
name = "compression-codecs"
-version = "0.4.37"
+version = "0.4.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eb7b51a7d9c967fc26773061ba86150f19c50c0d65c887cb1fbe295fd16619b7"
+checksum = "b0f7ac3e5b97fdce45e8922fb05cae2c37f7bbd63d30dd94821dacfd8f3f2bf2"
dependencies = [
"compression-core",
"flate2",
@@ -3380,6 +3579,17 @@ version = "0.4.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75984efb6ed102a0d42db99afb6c1948f0380d1d91808d5529916e6c08b49d8d"
+[[package]]
+name = "concurrent-map"
+version = "5.0.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6542c565fbcba786db59307d7840f0bf5cd9e0aba6502755337e15f0e06fd65"
+dependencies = [
+ "ebr",
+ "serde",
+ "stack-map",
+]
+
[[package]]
name = "concurrent-queue"
version = "2.5.0"
@@ -3398,19 +3608,20 @@ dependencies = [
"encode_unicode",
"libc",
"once_cell",
- "unicode-width 0.2.2",
+ "unicode-width 0.2.0",
"windows-sys 0.59.0",
]
[[package]]
name = "console"
-version = "0.16.3"
+version = "0.16.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d64e8af5551369d19cf50138de61f1c42074ab970f74e99be916646777f8fc87"
+checksum = "03e45a4a8926227e4197636ba97a9fc9b00477e9f4bd711395687c5f0734bec4"
dependencies = [
"encode_unicode",
"libc",
- "unicode-width 0.2.2",
+ "once_cell",
+ "unicode-width 0.2.0",
"windows-sys 0.61.2",
]
@@ -3426,9 +3637,9 @@ dependencies = [
[[package]]
name = "const-hex"
-version = "1.18.1"
+version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "531185e432bb31db1ecda541e9e7ab21468d4d844ad7505e0546a49b4945d49b"
+checksum = "3bb320cac8a0750d7f25280aa97b09c26edfe161164238ecbbb31092b079e735"
dependencies = [
"cfg-if",
"cpufeatures 0.2.17",
@@ -3442,14 +3653,19 @@ version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
+[[package]]
+name = "const-oid"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c"
+
[[package]]
name = "const_format"
-version = "0.2.36"
+version = "0.2.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4481a617ad9a412be3b97c5d403fef8ed023103368908b9c50af598ff467cc1e"
+checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad"
dependencies = [
"const_format_proc_macros",
- "konst",
]
[[package]]
@@ -3478,6 +3694,16 @@ dependencies = [
"unicode-segmentation",
]
+[[package]]
+name = "cordyceps"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "688d7fbb8092b8de775ef2536f36c8c31f2bc4006ece2e8d8ad2d17d00ce0a2a"
+dependencies = [
+ "loom",
+ "tracing",
+]
+
[[package]]
name = "core-foundation"
version = "0.9.4"
@@ -3596,6 +3822,15 @@ dependencies = [
"crossbeam-utils",
]
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115"
+dependencies = [
+ "crossbeam-utils",
+]
+
[[package]]
name = "crossbeam-utils"
version = "0.8.21"
@@ -3608,7 +3843,7 @@ version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"crossterm_winapi",
"derive_more",
"document-features",
@@ -3660,9 +3895,9 @@ dependencies = [
[[package]]
name = "crypto-common"
-version = "0.2.1"
+version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710"
+checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453"
dependencies = [
"hybrid-array",
]
@@ -3678,12 +3913,12 @@ dependencies = [
[[package]]
name = "ctrlc"
-version = "3.5.2"
+version = "3.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e0b1fab2ae45819af2d0731d60f2afe17227ebb1a1538a236da84c93e9a60162"
+checksum = "73736a89c4aff73035ba2ed2e565061954da00d4970fc9ac25dcc85a2a20d790"
dependencies = [
"dispatch2",
- "nix 0.31.2",
+ "nix 0.30.1",
"windows-sys 0.61.2",
]
@@ -3745,6 +3980,16 @@ dependencies = [
"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]]
name = "darling"
version = "0.23.0"
@@ -3769,6 +4014,20 @@ dependencies = [
"syn 2.0.117",
]
+[[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",
+ "strsim",
+ "syn 2.0.117",
+]
+
[[package]]
name = "darling_core"
version = "0.23.0"
@@ -3794,6 +4053,17 @@ dependencies = [
"syn 2.0.117",
]
+[[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.117",
+]
+
[[package]]
name = "darling_macro"
version = "0.23.0"
@@ -3822,9 +4092,9 @@ dependencies = [
[[package]]
name = "data-encoding"
-version = "2.10.0"
+version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea"
+checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
[[package]]
name = "der"
@@ -3832,16 +4102,16 @@ version = "0.7.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
dependencies = [
- "const-oid",
+ "const-oid 0.9.6",
"pem-rfc7468",
"zeroize",
]
[[package]]
name = "deranged"
-version = "0.5.8"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
+checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587"
dependencies = [
"powerfmt",
"serde_core",
@@ -3860,9 +4130,9 @@ dependencies = [
[[package]]
name = "derive-where"
-version = "1.6.1"
+version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d08b3a0bcc0d079199cd476b2cae8435016ec11d1c0986c6901c5ac223041534"
+checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f"
dependencies = [
"proc-macro2",
"quote",
@@ -3940,11 +4210,17 @@ version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25f104b501bf2364e78d0d3974cbc774f738f5865306ed128e1e0d7499c0ad96"
dependencies = [
- "console 0.16.3",
+ "console 0.16.2",
"shell-words",
"zeroize",
]
+[[package]]
+name = "diatomic-waker"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab03c107fafeb3ee9f5925686dbb7a73bc76e3932abb0d2b365cb64b169cf04c"
+
[[package]]
name = "diff"
version = "0.1.13"
@@ -3967,19 +4243,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
dependencies = [
"block-buffer 0.10.4",
- "const-oid",
+ "const-oid 0.9.6",
"crypto-common 0.1.7",
"subtle",
]
[[package]]
name = "digest"
-version = "0.11.2"
+version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4850db49bf08e663084f7fb5c87d202ef91a3907271aff24a94eb97ff039153c"
+checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2"
dependencies = [
"block-buffer 0.12.0",
- "crypto-common 0.2.1",
+ "const-oid 0.10.2",
+ "crypto-common 0.2.2",
]
[[package]]
@@ -4005,11 +4282,11 @@ dependencies = [
[[package]]
name = "dispatch2"
-version = "0.3.1"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38"
+checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"block2",
"libc",
"objc2",
@@ -4028,9 +4305,9 @@ dependencies = [
[[package]]
name = "doctest-file"
-version = "1.1.1"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2db04e74f0a9a93103b50e90b96024c9b2bdca8bce6a632ec71b88736d3d359"
+checksum = "aac81fa3e28d21450aa4d2ac065992ba96a1d7303efbce51a95f4fd175b67562"
[[package]]
name = "document-features"
@@ -4085,6 +4362,15 @@ dependencies = [
"syn 2.0.117",
]
+[[package]]
+name = "ebr"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b1ea3b18359d566f360eaf811a2d69bc6c8eb6faaeecc8839975633860a076e"
+dependencies = [
+ "shared-local-state",
+]
+
[[package]]
name = "ecdsa"
version = "0.16.9"
@@ -4129,9 +4415,19 @@ dependencies = [
[[package]]
name = "ego-tree"
-version = "0.10.0"
+version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2972feb8dffe7bc8c5463b1dacda1b0dfbed3710e50f977d965429692d74cd8"
+checksum = "b04dc5a38e4f151a79d9f2451ae6037fb6eaf5cba34771f44781f80e508498e3"
+
+[[package]]
+name = "eip-common"
+version = "1.4.0"
+source = "git+https://github.com/phylaxsystems/credible-sdk.git?branch=lea%2Feng-3169-featcredible-sdk-update-revm-and-alloy-dependencies#7812d7d33e20f176ce64bfa4111003b9fb0ccbc2"
+dependencies = [
+ "alloy-eips 2.0.4",
+ "alloy-primitives",
+ "revm",
+]
[[package]]
name = "either"
@@ -4177,22 +4473,22 @@ dependencies = [
[[package]]
name = "email-address-parser"
-version = "2.0.2"
+version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e981c3b50d728bb498dd0f860a7228ef17e19efef5cc2c6e30d78ebce13bcaa7"
+checksum = "7fe19a4967eca30062be4abaf813d929ba48b3bfb21830367f7e1baae37f213a"
dependencies = [
"console_error_panic_hook",
"pest",
"pest_derive",
- "quick-xml 0.39.2",
+ "quick-xml 0.18.1",
"wasm-bindgen",
]
[[package]]
name = "ena"
-version = "0.14.4"
+version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eabffdaee24bd1bf95c5ef7cec31260444317e72ea56c4c91750e8b7ee58d5f1"
+checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5"
dependencies = [
"log",
]
@@ -4218,6 +4514,18 @@ version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
+[[package]]
+name = "enum-as-inner"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
[[package]]
name = "enum-ordinalize"
version = "4.3.2"
@@ -4240,21 +4548,27 @@ dependencies = [
[[package]]
name = "env_filter"
-version = "1.0.1"
+version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f6eef"
+checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2"
dependencies = [
"log",
"regex",
]
+[[package]]
+name = "env_home"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7f84e12ccf0a7ddc17a6c41c93326024c42920d7ee630d04950e6926645c0fe"
+
[[package]]
name = "env_logger"
-version = "0.11.10"
+version = "0.11.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a"
+checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f"
dependencies = [
- "anstream 1.0.0",
+ "anstream",
"anstyle",
"env_filter",
"jiff",
@@ -4289,9 +4603,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
[[package]]
name = "erased-serde"
-version = "0.4.10"
+version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec"
+checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3"
dependencies = [
"serde",
"serde_core",
@@ -4326,7 +4640,7 @@ dependencies = [
"hex",
"hmac",
"pbkdf2 0.11.0",
- "rand 0.8.6",
+ "rand 0.8.5",
"scrypt",
"serde",
"serde_json",
@@ -4351,13 +4665,13 @@ dependencies = [
[[package]]
name = "ethereum_ssz"
-version = "0.10.3"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "368a4a4e4273b0135111fe9464e35465067766a8f664615b5a86338b73864407"
+checksum = "7e8cd8c4f47dfb947dbfe3cdf2945ae1da808dbedc592668658e827a12659ba1"
dependencies = [
"alloy-primitives",
"ethereum_serde_utils",
- "itertools 0.14.0",
+ "itertools 0.13.0",
"serde",
"serde_derive",
"smallvec",
@@ -4366,9 +4680,9 @@ dependencies = [
[[package]]
name = "ethereum_ssz_derive"
-version = "0.10.3"
+version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2cd82c68120c89361e1a457245cf212f7d9f541bffaffed530c8f2d54a160b2"
+checksum = "daf022360bdbe9456eda5f35718a50476d5b2a0d51a97ed4eae27420737a6fba"
dependencies = [
"darling 0.23.0",
"proc-macro2",
@@ -4399,9 +4713,9 @@ dependencies = [
[[package]]
name = "evmole"
-version = "0.8.4"
+version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61e332670cb19161dee3f15ae86bfb5e4361bb1716d7c1995bd309b5360cb630"
+checksum = "6b62c02aa0474cf6c68610ee424dc5feddbe004ea48632c14d237fefa3d893a3"
dependencies = [
"alloy-dyn-abi",
"alloy-primitives",
@@ -4438,9 +4752,9 @@ checksum = "f8eb564c5c7423d25c886fb561d1e4ee69f72354d16918afa32c08811f6b6a55"
[[package]]
name = "fastrand"
-version = "2.4.1"
+version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
+checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
[[package]]
name = "fastrlp"
@@ -4464,6 +4778,12 @@ dependencies = [
"bytes",
]
+[[package]]
+name = "fault-injection"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e3d175246dec3fddef3b1fcd57acdb023e4c562d032e9eccc5f246da3d7fed3"
+
[[package]]
name = "fd-lock"
version = "4.0.4"
@@ -4503,24 +4823,24 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d"
[[package]]
name = "figment2"
-version = "0.11.4"
+version = "0.11.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4380ce44915a6227efbb61e3885bc1c8e99fb9820f5db612abfac2c5cfc46871"
+checksum = "87d63dee16df12076c7770919713c0b92f4e1c85eac828dc2ade0b6c998f016b"
dependencies = [
"atomic",
"parking_lot",
"serde",
"tempfile",
- "toml_edit 0.23.10+spec-1.0.0",
+ "toml_edit 0.25.11+spec-1.1.0",
"uncased",
"version_check",
]
[[package]]
name = "find-msvc-tools"
-version = "0.1.9"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
+checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844"
[[package]]
name = "fixed-hash"
@@ -4529,7 +4849,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534"
dependencies = [
"byteorder",
- "rand 0.8.6",
+ "rand 0.8.5",
"rustc-hex",
"static_assertions",
]
@@ -4563,13 +4883,13 @@ checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
[[package]]
name = "flate2"
-version = "1.1.9"
+version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c"
+checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb"
dependencies = [
"crc32fast",
+ "libz-rs-sys",
"miniz_oxide",
- "zlib-rs",
]
[[package]]
@@ -4602,16 +4922,16 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
[[package]]
name = "font-awesome-as-a-crate"
-version = "0.3.0"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "932dcfbd51320af5f27f1ba02d2e567dec332cac7d2c221ba45d8e767264c4dc"
+checksum = "b40fbe89eb7639971503bf5f17bd31c41338e8f92e03c5744d07f2e03d43f679"
[[package]]
name = "forge"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-chains",
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-dyn-abi",
"alloy-hardforks",
"alloy-json-abi",
@@ -4659,10 +4979,10 @@ dependencies = [
"path-slash",
"proptest",
"quick-junit",
- "rand 0.9.4",
+ "rand 0.9.2",
"rayon",
"regex",
- "reqwest 0.13.2",
+ "reqwest 0.13.3",
"revm",
"semver 1.0.28",
"serde",
@@ -4678,7 +4998,7 @@ dependencies = [
"tempo-alloy",
"thiserror 2.0.18",
"tokio",
- "toml_edit 0.24.1+spec-1.1.0",
+ "toml_edit 0.24.0+spec-1.1.0",
"tower-http",
"tracing",
"url",
@@ -4690,7 +5010,7 @@ dependencies = [
[[package]]
name = "forge-doc"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-primitives",
"derive_more",
@@ -4708,13 +5028,13 @@ dependencies = [
"serde_json",
"solar-compiler",
"thiserror 2.0.18",
- "toml",
+ "toml 0.9.10+spec-1.1.0",
"tracing",
]
[[package]]
name = "forge-fmt"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"foundry-common",
"foundry-config",
@@ -4723,12 +5043,12 @@ dependencies = [
"similar",
"snapbox",
"solar-compiler",
- "toml",
+ "toml 0.9.10+spec-1.1.0",
]
[[package]]
name = "forge-lint"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"eyre",
"foundry-common",
@@ -4742,13 +5062,13 @@ dependencies = [
[[package]]
name = "forge-script"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-chains",
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-dyn-abi",
- "alloy-eips 2.0.1",
- "alloy-evm",
+ "alloy-eips 2.0.4",
+ "alloy-evm 0.33.3",
"alloy-json-abi",
"alloy-network",
"alloy-primitives",
@@ -4790,7 +5110,7 @@ dependencies = [
[[package]]
name = "forge-script-sequence"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-network",
"alloy-primitives",
@@ -4806,7 +5126,7 @@ dependencies = [
[[package]]
name = "forge-sol-macro-gen"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-sol-macro-expander",
"alloy-sol-macro-input",
@@ -4821,11 +5141,11 @@ dependencies = [
[[package]]
name = "forge-verify"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-dyn-abi",
- "alloy-evm",
+ "alloy-evm 0.33.3",
"alloy-json-abi",
"alloy-primitives",
"alloy-provider",
@@ -4844,7 +5164,7 @@ dependencies = [
"futures",
"itertools 0.14.0",
"regex",
- "reqwest 0.13.2",
+ "reqwest 0.13.3",
"revm",
"semver 1.0.28",
"serde",
@@ -4867,7 +5187,7 @@ dependencies = [
[[package]]
name = "foundry-bench"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"chrono",
"clap",
@@ -4884,15 +5204,15 @@ dependencies = [
[[package]]
name = "foundry-block-explorers"
-version = "0.23.0"
+version = "0.23.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c41211d5c69c92070d2e2174eff99ffb259d0d568d2e4f789d2a7251b4416ccd"
+checksum = "786287256b3da26184e25d66685d33fd208d0b6e2098895cf7e880f3ce18eca1"
dependencies = [
"alloy-chains",
"alloy-json-abi",
"alloy-primitives",
"foundry-compilers",
- "reqwest 0.13.2",
+ "reqwest 0.13.3",
"semver 1.0.28",
"serde",
"serde_json",
@@ -4902,14 +5222,14 @@ dependencies = [
[[package]]
name = "foundry-cheatcodes"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-chains",
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-dyn-abi",
"alloy-ens",
- "alloy-evm",
- "alloy-genesis",
+ "alloy-evm 0.33.3",
+ "alloy-genesis 2.0.4",
"alloy-json-abi",
"alloy-network",
"alloy-primitives",
@@ -4919,6 +5239,7 @@ dependencies = [
"alloy-signer",
"alloy-signer-local",
"alloy-sol-types",
+ "assertion-executor",
"base64 0.22.1",
"dialoguer",
"ecdsa",
@@ -4932,6 +5253,7 @@ dependencies = [
"foundry-evm-core",
"foundry-evm-fuzz",
"foundry-evm-traces",
+ "foundry-fork-db",
"foundry-wallets",
"itertools 0.14.0",
"jsonpath_lib",
@@ -4940,7 +5262,7 @@ dependencies = [
"p256",
"parking_lot",
"proptest",
- "rand 0.9.4",
+ "rand 0.9.2",
"revm",
"revm-inspectors",
"semver 1.0.28",
@@ -4948,29 +5270,29 @@ dependencies = [
"serde_json",
"solar-compiler",
"thiserror 2.0.18",
- "toml",
+ "toml 0.9.10+spec-1.1.0",
"tracing",
"walkdir",
]
[[package]]
name = "foundry-cheatcodes-spec"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-sol-types",
"foundry-macros",
- "schemars 1.2.1",
+ "schemars 1.1.0",
"serde",
"serde_json",
]
[[package]]
name = "foundry-cli"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-chains",
"alloy-dyn-abi",
- "alloy-eips 2.0.1",
+ "alloy-eips 2.0.4",
"alloy-ens",
"alloy-json-abi",
"alloy-network",
@@ -5011,14 +5333,14 @@ dependencies = [
"tikv-jemallocator",
"tokio",
"tracing",
- "tracing-subscriber 0.3.23",
+ "tracing-subscriber 0.3.22",
"tracing-tracy",
"yansi",
]
[[package]]
name = "foundry-cli-markdown"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"clap",
"pretty_assertions",
@@ -5026,12 +5348,12 @@ dependencies = [
[[package]]
name = "foundry-common"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-chains",
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-dyn-abi",
- "alloy-eips 2.0.1",
+ "alloy-eips 2.0.4",
"alloy-json-abi",
"alloy-json-rpc",
"alloy-network",
@@ -5047,7 +5369,7 @@ dependencies = [
"alloy-transport",
"alloy-transport-ipc",
"alloy-transport-ws",
- "anstream 0.6.21",
+ "anstream",
"anstyle",
"axum",
"chrono",
@@ -5072,7 +5394,7 @@ dependencies = [
"op-alloy-rpc-types",
"path-slash",
"regex",
- "reqwest 0.13.2",
+ "reqwest 0.13.3",
"revm",
"rustls",
"semver 1.0.28",
@@ -5085,7 +5407,7 @@ dependencies = [
"thiserror 2.0.18",
"tokio",
"tokio-tungstenite 0.28.0",
- "toml",
+ "toml 0.9.10+spec-1.1.0",
"tower",
"tracing",
"url",
@@ -5096,19 +5418,19 @@ dependencies = [
[[package]]
name = "foundry-common-fmt"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-dyn-abi",
"alloy-network",
"alloy-primitives",
"alloy-rpc-types",
- "alloy-serde 2.0.1",
+ "alloy-serde 2.0.4",
"chrono",
"comfy-table",
"eyre",
"foundry-macros",
- "op-alloy-consensus",
+ "op-alloy-consensus 0.24.0",
"op-alloy-rpc-types",
"revm",
"serde",
@@ -5134,7 +5456,7 @@ dependencies = [
"fs_extra",
"itertools 0.14.0",
"path-slash",
- "rand 0.9.4",
+ "rand 0.9.2",
"rayon",
"semver 1.0.28",
"serde",
@@ -5146,7 +5468,7 @@ dependencies = [
"tempfile",
"thiserror 2.0.18",
"tracing",
- "winnow 0.7.15",
+ "winnow 0.7.14",
"yansi",
]
@@ -5219,7 +5541,7 @@ dependencies = [
[[package]]
name = "foundry-config"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-chains",
"alloy-primitives",
@@ -5249,8 +5571,8 @@ dependencies = [
"soldeer-core",
"tempfile",
"thiserror 2.0.18",
- "toml",
- "toml_edit 0.24.1+spec-1.1.0",
+ "toml 0.9.10+spec-1.1.0",
+ "toml_edit 0.24.0+spec-1.1.0",
"tracing",
"unit-prefix",
"walkdir",
@@ -5259,7 +5581,7 @@ dependencies = [
[[package]]
name = "foundry-debugger"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-primitives",
"crossterm",
@@ -5277,7 +5599,7 @@ dependencies = [
[[package]]
name = "foundry-evm"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-dyn-abi",
"alloy-json-abi",
@@ -5309,12 +5631,12 @@ dependencies = [
"thiserror 2.0.18",
"tokio",
"tracing",
- "uuid 1.23.1",
+ "uuid 1.19.0",
]
[[package]]
name = "foundry-evm-abi"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-primitives",
"alloy-sol-types",
@@ -5326,13 +5648,13 @@ dependencies = [
[[package]]
name = "foundry-evm-core"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-chains",
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-dyn-abi",
- "alloy-evm",
- "alloy-genesis",
+ "alloy-evm 0.33.3",
+ "alloy-genesis 2.0.4",
"alloy-hardforks",
"alloy-json-abi",
"alloy-network",
@@ -5341,7 +5663,7 @@ dependencies = [
"alloy-provider",
"alloy-rlp",
"alloy-rpc-types",
- "alloy-serde 2.0.1",
+ "alloy-serde 2.0.4",
"alloy-sol-types",
"anvil",
"auto_impl",
@@ -5356,7 +5678,7 @@ dependencies = [
"foundry-test-utils",
"futures",
"itertools 0.14.0",
- "op-alloy-consensus",
+ "op-alloy-consensus 0.24.0",
"op-alloy-network",
"op-alloy-rpc-types",
"op-revm",
@@ -5378,7 +5700,7 @@ dependencies = [
[[package]]
name = "foundry-evm-coverage"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-primitives",
"eyre",
@@ -5394,7 +5716,7 @@ dependencies = [
[[package]]
name = "foundry-evm-fuzz"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-dyn-abi",
"alloy-json-abi",
@@ -5409,7 +5731,7 @@ dependencies = [
"itertools 0.14.0",
"parking_lot",
"proptest",
- "rand 0.9.4",
+ "rand 0.9.2",
"revm",
"serde",
"solar-compiler",
@@ -5419,7 +5741,7 @@ dependencies = [
[[package]]
name = "foundry-evm-hardforks"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-chains",
"alloy-hardforks",
@@ -5434,11 +5756,11 @@ dependencies = [
[[package]]
name = "foundry-evm-networks"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-chains",
- "alloy-eips 2.0.1",
- "alloy-evm",
+ "alloy-eips 2.0.4",
+ "alloy-evm 0.33.3",
"alloy-op-hardforks",
"alloy-primitives",
"clap",
@@ -5450,11 +5772,11 @@ dependencies = [
[[package]]
name = "foundry-evm-sancov"
-version = "1.6.0"
+version = "1.7.1"
[[package]]
name = "foundry-evm-traces"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-dyn-abi",
"alloy-json-abi",
@@ -5472,15 +5794,13 @@ dependencies = [
"itertools 0.14.0",
"memchr",
"rayon",
- "reqwest 0.13.2",
+ "reqwest 0.13.3",
"revm",
"revm-inspectors",
"serde",
"serde_json",
"solar-compiler",
"tempfile",
- "tempo-contracts",
- "tempo-precompiles",
"tokio",
"tracing",
"yansi",
@@ -5506,12 +5826,12 @@ dependencies = [
"tokio",
"tracing",
"url",
- "zstd",
+ "zstd 0.13.3",
]
[[package]]
name = "foundry-linking"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-primitives",
"foundry-compilers",
@@ -5522,7 +5842,7 @@ dependencies = [
[[package]]
name = "foundry-macros"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"proc-macro-error2",
"proc-macro2",
@@ -5532,21 +5852,21 @@ dependencies = [
[[package]]
name = "foundry-primitives"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
- "alloy-consensus",
- "alloy-evm",
+ "alloy-consensus 2.0.4",
+ "alloy-evm 0.33.3",
"alloy-network",
"alloy-op-evm",
"alloy-primitives",
"alloy-provider",
"alloy-rlp",
"alloy-rpc-types",
- "alloy-rpc-types-eth",
- "alloy-serde 2.0.1",
+ "alloy-rpc-types-eth 2.0.4",
+ "alloy-serde 2.0.4",
"alloy-signer",
"derive_more",
- "op-alloy-consensus",
+ "op-alloy-consensus 0.24.0",
"op-alloy-rpc-types",
"op-revm",
"revm",
@@ -5573,7 +5893,7 @@ dependencies = [
[[package]]
name = "foundry-test-utils"
-version = "1.6.0"
+version = "1.7.1"
dependencies = [
"alloy-chains",
"alloy-primitives",
@@ -5586,16 +5906,16 @@ dependencies = [
"foundry-config",
"idna_adapter",
"parking_lot",
- "rand 0.9.4",
+ "rand 0.9.2",
"regex",
- "reqwest 0.13.2",
+ "reqwest 0.13.3",
"serde_json",
"snapbox",
"svm-rs",
"tempfile",
"tokio",
"tracing",
- "tracing-subscriber 0.3.23",
+ "tracing-subscriber 0.3.22",
"ui_test",
]
@@ -5605,7 +5925,7 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3f2cc1ff7ea002addf41bd9c5785cd34f6a7b9658998c50035cc860ffebc3a9"
dependencies = [
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-dyn-abi",
"alloy-network",
"alloy-primitives",
@@ -5633,21 +5953,28 @@ dependencies = [
"tempo-primitives",
"thiserror 2.0.18",
"tokio",
- "toml",
+ "toml 0.9.10+spec-1.1.0",
"tower",
"tower-http",
"tracing",
- "uuid 1.23.1",
+ "uuid 1.19.0",
"webbrowser",
]
[[package]]
name = "fragile"
-version = "2.1.0"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619"
+
+[[package]]
+name = "fs2"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8878864ba14bb86e818a412bfd6f18f9eabd4ec0f008a28e8f7eb61db532fcf9"
+checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
dependencies = [
- "futures-core",
+ "libc",
+ "winapi",
]
[[package]]
@@ -5665,6 +5992,12 @@ dependencies = [
"libc",
]
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
[[package]]
name = "funty"
version = "2.0.0"
@@ -5672,20 +6005,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
[[package]]
-name = "futf"
-version = "0.1.5"
+name = "futures"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
-dependencies = [
- "mac",
- "new_debug_unreachable",
-]
-
-[[package]]
-name = "futures"
-version = "0.3.32"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d"
+checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
dependencies = [
"futures-channel",
"futures-core",
@@ -5696,11 +6019,24 @@ dependencies = [
"futures-util",
]
+[[package]]
+name = "futures-buffered"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8e0e1f38ec07ba4abbde21eed377082f17ccb988be9d988a5adbf4bafc118fd"
+dependencies = [
+ "cordyceps",
+ "diatomic-waker",
+ "futures-core",
+ "pin-project-lite",
+ "spin",
+]
+
[[package]]
name = "futures-channel"
-version = "0.3.32"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d"
+checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
dependencies = [
"futures-core",
"futures-sink",
@@ -5708,28 +6044,30 @@ dependencies = [
[[package]]
name = "futures-concurrency"
-version = "7.7.1"
+version = "7.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "175cd8cca9e1d45b87f18ffa75088f2099e3c4fe5e2f83e42de112560bea8ea6"
+checksum = "0eb68017df91f2e477ed4bea586c59eaecaa47ed885a770d0444e21e62572cd2"
dependencies = [
"fixedbitset",
+ "futures-buffered",
"futures-core",
"futures-lite",
"pin-project",
+ "slab",
"smallvec",
]
[[package]]
name = "futures-core"
-version = "0.3.32"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
+checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
[[package]]
name = "futures-executor"
-version = "0.3.32"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d"
+checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
dependencies = [
"futures-core",
"futures-task",
@@ -5738,9 +6076,9 @@ dependencies = [
[[package]]
name = "futures-io"
-version = "0.3.32"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718"
+checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
[[package]]
name = "futures-lite"
@@ -5757,9 +6095,9 @@ dependencies = [
[[package]]
name = "futures-macro"
-version = "0.3.32"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b"
+checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
"proc-macro2",
"quote",
@@ -5768,21 +6106,21 @@ dependencies = [
[[package]]
name = "futures-sink"
-version = "0.3.32"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893"
+checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
[[package]]
name = "futures-task"
-version = "0.3.32"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
+checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
[[package]]
name = "futures-util"
-version = "0.3.32"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
+checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
dependencies = [
"futures-channel",
"futures-core",
@@ -5792,6 +6130,7 @@ dependencies = [
"futures-task",
"memchr",
"pin-project-lite",
+ "pin-utils",
"slab",
]
@@ -5814,9 +6153,9 @@ dependencies = [
"hyper",
"jsonwebtoken",
"once_cell",
- "prost 0.14.3",
- "prost-types 0.14.3",
- "reqwest 0.13.2",
+ "prost 0.14.1",
+ "prost-types 0.14.1",
+ "reqwest 0.13.3",
"secret-vault-value",
"serde",
"serde_json",
@@ -5840,8 +6179,8 @@ dependencies = [
"libc",
"log",
"rustversion",
- "windows-link",
- "windows-result",
+ "windows-link 0.1.3",
+ "windows-result 0.3.4",
]
[[package]]
@@ -5857,9 +6196,9 @@ dependencies = [
[[package]]
name = "getrandom"
-version = "0.2.17"
+version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
+checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
dependencies = [
"cfg-if",
"js-sys",
@@ -5945,9 +6284,9 @@ dependencies = [
[[package]]
name = "h2"
-version = "0.4.13"
+version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54"
+checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386"
dependencies = [
"atomic-waker",
"bytes",
@@ -5975,9 +6314,9 @@ dependencies = [
[[package]]
name = "handlebars"
-version = "6.4.0"
+version = "6.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b3f9296c208515b87bd915a2f5d1163d4b3f863ba83337d7713cf478055948e"
+checksum = "d43ccdfe15a81ab0a8af639e90254227c9a46afd9c5f5b6ec7efaa345c4b0f00"
dependencies = [
"derive_builder",
"log",
@@ -6026,9 +6365,9 @@ dependencies = [
[[package]]
name = "hashbrown"
-version = "0.17.0"
+version = "0.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51"
+checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
[[package]]
name = "hashlink"
@@ -6107,9 +6446,9 @@ dependencies = [
[[package]]
name = "html5ever"
-version = "0.36.1"
+version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6452c4751a24e1b99c3260d505eaeee76a050573e61f30ac2c924ddc7236f01e"
+checksum = "46a1761807faccc9a19e86944bbf40610014066306f96edcdedc2fb714bcb7b8"
dependencies = [
"log",
"markup5ever",
@@ -6190,18 +6529,18 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
[[package]]
name = "hybrid-array"
-version = "0.4.10"
+version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3944cf8cf766b40e2a1a333ee5e9b563f854d5fa49d6a8ca2764e97c6eddb214"
+checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da"
dependencies = [
"typenum",
]
[[package]]
name = "hyper"
-version = "1.9.0"
+version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca"
+checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11"
dependencies = [
"atomic-waker",
"bytes",
@@ -6214,6 +6553,7 @@ dependencies = [
"httpdate",
"itoa",
"pin-project-lite",
+ "pin-utils",
"smallvec",
"tokio",
"want",
@@ -6221,19 +6561,20 @@ dependencies = [
[[package]]
name = "hyper-rustls"
-version = "0.27.9"
+version = "0.27.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f"
+checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58"
dependencies = [
"http 1.4.0",
"hyper",
"hyper-util",
"rustls",
"rustls-native-certs",
+ "rustls-pki-types",
"tokio",
"tokio-rustls",
"tower-service",
- "webpki-roots 1.0.7",
+ "webpki-roots 1.0.4",
]
[[package]]
@@ -6251,13 +6592,14 @@ dependencies = [
[[package]]
name = "hyper-util"
-version = "0.1.20"
+version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0"
+checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f"
dependencies = [
"base64 0.22.1",
"bytes",
"futures-channel",
+ "futures-core",
"futures-util",
"http 1.4.0",
"http-body 1.0.1",
@@ -6276,9 +6618,9 @@ dependencies = [
[[package]]
name = "iana-time-zone"
-version = "0.1.65"
+version = "0.1.64"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470"
+checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb"
dependencies = [
"android_system_properties",
"core-foundation-sys",
@@ -6286,7 +6628,7 @@ dependencies = [
"js-sys",
"log",
"wasm-bindgen",
- "windows-core",
+ "windows-core 0.62.2",
]
[[package]]
@@ -6313,9 +6655,9 @@ dependencies = [
[[package]]
name = "icu_locale_core"
-version = "2.2.0"
+version = "2.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29"
+checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6"
dependencies = [
"displaydoc",
"litemap",
@@ -6372,9 +6714,9 @@ checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632"
[[package]]
name = "icu_provider"
-version = "2.2.0"
+version = "2.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421"
+checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614"
dependencies = [
"displaydoc",
"icu_locale_core",
@@ -6497,20 +6839,20 @@ checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
dependencies = [
"arbitrary",
"equivalent",
- "hashbrown 0.17.0",
+ "hashbrown 0.17.1",
"serde",
"serde_core",
]
[[package]]
name = "indicatif"
-version = "0.18.4"
+version = "0.18.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25470f23803092da7d239834776d653104d551bc4d7eacaf31e6837854b8e9eb"
+checksum = "9375e112e4b463ec1b1c6c011953545c65a30164fbab5b581df32b3abf0dcb88"
dependencies = [
- "console 0.16.3",
+ "console 0.16.2",
"portable-atomic",
- "unicode-width 0.2.2",
+ "unicode-width 0.2.0",
"unit-prefix",
"web-time",
]
@@ -6526,27 +6868,37 @@ dependencies = [
[[package]]
name = "inferno"
-version = "0.12.6"
+version = "0.12.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90807d610575744524d9bdc69f3885d96f0e6c3354565b0828354a7ff2a262b8"
+checksum = "d35223c50fdd26419a4ccea2c73be68bd2b29a3d7d6123ffe101c17f4c20a52a"
dependencies = [
"ahash",
"itoa",
"log",
"num-format",
"once_cell",
- "quick-xml 0.39.2",
+ "quick-xml 0.38.4",
"rgb",
"str_stack",
]
+[[package]]
+name = "inline-array"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4213ac9a8f085582112110fbf2a49b64c4394e3c609dbcbcca6f5f33c009651"
+dependencies = [
+ "concurrent-map",
+ "serde",
+]
+
[[package]]
name = "inotify"
-version = "0.11.1"
+version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd5b3eaf1a28b758ac0faa5a4254e8ab2705605496f1b1f3fbbc3988ad73d199"
+checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"inotify-sys",
"libc",
]
@@ -6571,11 +6923,11 @@ dependencies = [
[[package]]
name = "instability"
-version = "0.3.12"
+version = "0.3.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5eb2d60ef19920a3a9193c3e371f726ec1dafc045dac788d0fb3704272458971"
+checksum = "6778b0196eefee7df739db78758e5cf9b37412268bfa5650bfeed028aed20d9c"
dependencies = [
- "darling 0.23.0",
+ "darling 0.20.11",
"indoc",
"proc-macro2",
"quote",
@@ -6584,9 +6936,9 @@ dependencies = [
[[package]]
name = "interprocess"
-version = "2.4.0"
+version = "2.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6be5e5c847dbdb44564bd85294740d031f4f8aeb3464e5375ef7141f7538db69"
+checksum = "d941b405bd2322993887859a8ee6ac9134945a24ec5ec763a8a962fc64dfec2d"
dependencies = [
"doctest-file",
"futures-core",
@@ -6621,15 +6973,15 @@ dependencies = [
[[package]]
name = "ipnet"
-version = "2.12.0"
+version = "2.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2"
+checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
[[package]]
name = "iri-string"
-version = "0.7.12"
+version = "0.7.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf4e20"
+checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397"
dependencies = [
"memchr",
"serde",
@@ -6690,15 +7042,15 @@ dependencies = [
[[package]]
name = "itoa"
-version = "1.0.18"
+version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
+checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
[[package]]
name = "jiff"
-version = "0.2.23"
+version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359"
+checksum = "49cce2b81f2098e7e3efc35bc2e0a6b7abec9d34128283d7a26fa8f32a6dbb35"
dependencies = [
"jiff-static",
"log",
@@ -6709,9 +7061,9 @@ dependencies = [
[[package]]
name = "jiff-static"
-version = "0.2.23"
+version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4"
+checksum = "980af8b43c3ad5d8d349ace167ec8170839f753a42d233ba19e08afe1850fa69"
dependencies = [
"proc-macro2",
"quote",
@@ -6727,7 +7079,7 @@ dependencies = [
"cesu8",
"cfg-if",
"combine",
- "jni-sys 0.3.1",
+ "jni-sys 0.3.0",
"log",
"thiserror 1.0.69",
"walkdir",
@@ -6748,7 +7100,7 @@ dependencies = [
"simd_cesu8",
"thiserror 2.0.18",
"walkdir",
- "windows-link",
+ "windows-link 0.2.1",
]
[[package]]
@@ -6766,12 +7118,9 @@ dependencies = [
[[package]]
name = "jni-sys"
-version = "0.3.1"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258"
-dependencies = [
- "jni-sys 0.4.1",
-]
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
[[package]]
name = "jni-sys"
@@ -6804,9 +7153,9 @@ dependencies = [
[[package]]
name = "js-sys"
-version = "0.3.95"
+version = "0.3.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca"
+checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11"
dependencies = [
"cfg-if",
"futures-util",
@@ -6839,18 +7188,20 @@ dependencies = [
[[package]]
name = "jsonwebtoken"
-version = "10.3.0"
+version = "10.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0529410abe238729a60b108898784df8984c87f6054c9c4fcacc47e4803c1ce1"
+checksum = "eba32bfb4ffdeaca3e34431072faf01745c9b26d25504aa7a6cf5684334fc4fc"
dependencies = [
+ "aws-lc-rs",
"base64 0.22.1",
- "getrandom 0.2.17",
+ "getrandom 0.2.16",
"js-sys",
"pem",
"serde",
"serde_json",
"signature",
"simple_asn1",
+ "zeroize",
]
[[package]]
@@ -6870,9 +7221,9 @@ dependencies = [
[[package]]
name = "kasuari"
-version = "0.4.12"
+version = "0.4.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bde5057d6143cc94e861d90f591b9303d6716c6b9602309150bd068853c10899"
+checksum = "8fe90c1150662e858c7d5f945089b7517b0a80d8bf7ba4b1b5ffc984e7230a5b"
dependencies = [
"hashbrown 0.16.1",
"portable-atomic",
@@ -6881,38 +7232,23 @@ dependencies = [
[[package]]
name = "keccak"
-version = "0.1.6"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653"
+checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654"
dependencies = [
"cpufeatures 0.2.17",
]
[[package]]
name = "keccak-asm"
-version = "0.1.6"
+version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa468878266ad91431012b3e5ef1bf9b170eab22883503a318d46857afa4579a"
+checksum = "1766b89733097006f3a1388a02849865d6bc98c89273cb622e29fdd209922183"
dependencies = [
"digest 0.10.7",
"sha3-asm",
]
-[[package]]
-name = "konst"
-version = "0.2.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "128133ed7824fcd73d6e7b17957c5eb7bacb885649bd8c69708b2331a10bcefb"
-dependencies = [
- "konst_macro_rules",
-]
-
-[[package]]
-name = "konst_macro_rules"
-version = "0.2.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4933f3f57a8e9d9da04db23fb153356ecaf00cbd14aee46279c33dc80925c37"
-
[[package]]
name = "kqueue"
version = "1.1.1"
@@ -6984,15 +7320,25 @@ checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760"
[[package]]
name = "libc"
-version = "0.2.185"
+version = "0.2.186"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
+
+[[package]]
+name = "libloading"
+version = "0.8.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f"
+checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
+dependencies = [
+ "cfg-if",
+ "windows-link 0.2.1",
+]
[[package]]
name = "libm"
-version = "0.2.16"
+version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
+checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
[[package]]
name = "libmimalloc-sys"
@@ -7006,10 +7352,11 @@ dependencies = [
[[package]]
name = "libredox"
-version = "0.1.16"
+version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c"
+checksum = "df15f6eac291ed1cf25865b1ee60399f57e7c227e7f51bdbd4c5270396a9ed50"
dependencies = [
+ "bitflags 2.10.0",
"libc",
]
@@ -7036,13 +7383,22 @@ dependencies = [
"vcpkg",
]
+[[package]]
+name = "libz-rs-sys"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15413ef615ad868d4d65dce091cb233b229419c7c0c4bcaa746c0901c49ff39c"
+dependencies = [
+ "zlib-rs",
+]
+
[[package]]
name = "line-clipping"
-version = "0.3.7"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f50e8f47623268b5407192d26876c4d7f89d686ca130fdc53bced4814cd29f8"
+checksum = "5f4de44e98ddbf09375cbf4d17714d18f39195f4f4894e8524501726fd9a8a4a"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
]
[[package]]
@@ -7053,9 +7409,9 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
[[package]]
name = "litemap"
-version = "0.8.2"
+version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
+checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77"
[[package]]
name = "litrs"
@@ -7091,7 +7447,7 @@ dependencies = [
"generator",
"scoped-tls",
"tracing",
- "tracing-subscriber 0.3.23",
+ "tracing-subscriber 0.3.22",
]
[[package]]
@@ -7110,10 +7466,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
[[package]]
-name = "mac"
-version = "0.1.1"
+name = "lz4_flex"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90071f8077f8e40adfc4b7fe9cd495ce316263f19e75c2211eeff3fdf475a3d9"
+
+[[package]]
+name = "mach2"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
+checksum = "6a1b95cd5421ec55b445b5ae102f5ea0e768de1f82bd3001e11f426c269c3aea"
+dependencies = [
+ "libc",
+]
[[package]]
name = "macro-string"
@@ -7128,9 +7493,9 @@ dependencies = [
[[package]]
name = "markup5ever"
-version = "0.36.1"
+version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c3294c4d74d0742910f8c7b466f44dda9eb2d5742c1e430138df290a1e8451c"
+checksum = "7122d987ec5f704ee56f6e5b41a7d93722e9aae27ae07cafa4036c4d3f9757de"
dependencies = [
"log",
"tendril",
@@ -7154,23 +7519,23 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3"
[[package]]
name = "mdbook-core"
-version = "0.5.2"
+version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39a3873d4afac65583f1acb56ff058df989d5b4a2464bb02c785549727d307ee"
+checksum = "6fc1c4da7fd9e2e412f3891428f9468fab890ed159723ed0892bb85a049ac1c1"
dependencies = [
"anyhow",
"regex",
"serde",
"serde_json",
- "toml",
+ "toml 1.1.2+spec-1.1.0",
"tracing",
]
[[package]]
name = "mdbook-driver"
-version = "0.5.2"
+version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a229930b29a9908560883e1f386eae25d8a971d259a80f49916a50627f04a42d"
+checksum = "2068566fc3c100cfd19f4a13e4e0eb4fdcd2250cfd0aa633ec25102b1c98d53e"
dependencies = [
"anyhow",
"indexmap 2.14.0",
@@ -7185,16 +7550,16 @@ dependencies = [
"serde_json",
"shlex",
"tempfile",
- "toml",
+ "toml 1.1.2+spec-1.1.0",
"topological-sort",
"tracing",
]
[[package]]
name = "mdbook-html"
-version = "0.5.2"
+version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9dee80c03c65e3212fb528b8c9be5568a6a85cf795d03cf9fd6ba39ad52069ca"
+checksum = "85ed2140251689f928615f0a5615413eb072eb28e003d179257aa4f034c95513"
dependencies = [
"anyhow",
"ego-tree",
@@ -7211,15 +7576,15 @@ dependencies = [
"regex",
"serde",
"serde_json",
- "sha2 0.10.9",
+ "sha2 0.11.0",
"tracing",
]
[[package]]
name = "mdbook-markdown"
-version = "0.5.2"
+version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07c41bf35212f5d8b83e543aa6a4887dc5709c8489c5fb9ed00f1b51ce1a2cc6"
+checksum = "2cb3ca9eadf02ce206118a0b9c264718723d669b110c01a720fa9a0786f30642"
dependencies = [
"pulldown-cmark",
"regex",
@@ -7228,9 +7593,9 @@ dependencies = [
[[package]]
name = "mdbook-preprocessor"
-version = "0.5.2"
+version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d87bf40be0597f26f0822f939a64f02bf92c4655ba04490aadbf83601a013bb"
+checksum = "8eff7b4afaafd664a649a03b8891ad8199aef359a35b911ad6c31acab38ed209"
dependencies = [
"anyhow",
"mdbook-core",
@@ -7240,9 +7605,9 @@ dependencies = [
[[package]]
name = "mdbook-renderer"
-version = "0.5.2"
+version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93ed59f225b3ae4283c56bea633db83184627a090d892908bd66990c68e10b43"
+checksum = "e607259410d53aa5cdaf5b6c1c6b3fd61f2e0f0523ebf457d34cd4f0b71e2a88"
dependencies = [
"anyhow",
"mdbook-core",
@@ -7252,9 +7617,9 @@ dependencies = [
[[package]]
name = "mdbook-summary"
-version = "0.5.2"
+version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c00d85b291d67a69c92e939450390fe34d6ea418a868c8f7b42f0b300af35a7b"
+checksum = "cae8a734e5e35b0bc145b46d01fd27e266ba647dcdb9b8c907cb6a29eca9122b"
dependencies = [
"anyhow",
"mdbook-core",
@@ -7270,6 +7635,15 @@ version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
+[[package]]
+name = "memmap2"
+version = "0.9.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3"
+dependencies = [
+ "libc",
+]
+
[[package]]
name = "memoffset"
version = "0.7.1"
@@ -7309,6 +7683,17 @@ dependencies = [
"portable-atomic",
]
+[[package]]
+name = "metrics-derive"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "161ab904c2c62e7bda0f7562bf22f96440ca35ff79e66c800cbac298f2f4f5ec"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
[[package]]
name = "miette"
version = "7.6.0"
@@ -7374,9 +7759,9 @@ dependencies = [
[[package]]
name = "mio"
-version = "1.2.0"
+version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1"
+checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc"
dependencies = [
"libc",
"log",
@@ -7444,8 +7829,8 @@ dependencies = [
"hex",
"hmac",
"http 1.4.0",
- "rand 0.9.4",
- "reqwest 0.12.28",
+ "rand 0.9.2",
+ "reqwest 0.12.26",
"serde",
"serde_json",
"serde_json_canonicalizer",
@@ -7456,7 +7841,7 @@ dependencies = [
"time",
"tokio",
"tokio-tungstenite 0.26.2",
- "uuid 1.23.1",
+ "uuid 1.19.0",
]
[[package]]
@@ -7477,7 +7862,7 @@ version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c012d14ef788ab066a347d19e3dda699916c92293b05b85ba2c76b8c82d2830"
dependencies = [
- "uuid 1.23.1",
+ "uuid 1.19.0",
]
[[package]]
@@ -7504,11 +7889,11 @@ dependencies = [
[[package]]
name = "nix"
-version = "0.30.1"
+version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
+checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"cfg-if",
"cfg_aliases",
"libc",
@@ -7516,11 +7901,11 @@ dependencies = [
[[package]]
name = "nix"
-version = "0.31.2"
+version = "0.30.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d6d0705320c1e6ba1d912b5e37cf18071b6c2e9b7fa8215a1e8a7651966f5d3"
+checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"cfg-if",
"cfg_aliases",
"libc",
@@ -7563,7 +7948,7 @@ version = "8.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"fsevent-sys",
"inotify",
"kqueue",
@@ -7577,11 +7962,17 @@ dependencies = [
[[package]]
name = "notify-types"
-version = "2.1.0"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d"
+
+[[package]]
+name = "ntapi"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42b8cfee0e339a0337359f3c88165702ac6e600dc01c0cc9579a92d62b08477a"
+checksum = "c3b335231dfd352ffb0f8017f3b6027a4917f7df785ea2143d8af2adc66980ae"
dependencies = [
- "bitflags 2.11.1",
+ "winapi",
]
[[package]]
@@ -7629,9 +8020,9 @@ dependencies = [
[[package]]
name = "num-conv"
-version = "0.2.1"
+version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967"
+checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441"
[[package]]
name = "num-format"
@@ -7711,9 +8102,9 @@ dependencies = [
[[package]]
name = "num_enum"
-version = "0.7.6"
+version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26"
+checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c"
dependencies = [
"num_enum_derive",
"rustversion",
@@ -7721,9 +8112,9 @@ dependencies = [
[[package]]
name = "num_enum_derive"
-version = "0.7.6"
+version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8"
+checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7"
dependencies = [
"proc-macro-crate",
"proc-macro2",
@@ -7756,13 +8147,22 @@ dependencies = [
[[package]]
name = "objc2"
-version = "0.6.4"
+version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f"
+checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05"
dependencies = [
"objc2-encode",
]
+[[package]]
+name = "objc2-core-foundation"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536"
+dependencies = [
+ "bitflags 2.10.0",
+]
+
[[package]]
name = "objc2-encode"
version = "4.1.0"
@@ -7775,10 +8175,20 @@ version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"objc2",
]
+[[package]]
+name = "objc2-io-kit"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15"
+dependencies = [
+ "libc",
+ "objc2-core-foundation",
+]
+
[[package]]
name = "object"
version = "0.37.3"
@@ -7790,9 +8200,9 @@ dependencies = [
[[package]]
name = "once_cell"
-version = "1.21.4"
+version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
+checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
dependencies = [
"critical-section",
"portable-atomic",
@@ -7806,12 +8216,12 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
[[package]]
name = "once_map"
-version = "0.4.24"
+version = "0.4.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b685c8311c9171d1bd2895222965d25616b2de2cb5819dd3504ed9250df9fecd"
+checksum = "29eefd5038c9eee9e788d90966d6b5578dd3f88363a91edaec117a7ae0adc2d5"
dependencies = [
"ahash",
- "hashbrown 0.17.0",
+ "hashbrown 0.16.1",
"parking_lot",
"stable_deref_trait",
]
@@ -7821,29 +8231,45 @@ name = "op-alloy"
version = "0.24.0"
source = "git+https://github.com/ethereum-optimism/optimism?rev=42f5117c2e7de0614cd3b96f274d0a3078f9701c#42f5117c2e7de0614cd3b96f274d0a3078f9701c"
dependencies = [
- "op-alloy-consensus",
+ "op-alloy-consensus 0.24.0",
"op-alloy-network",
"op-alloy-provider",
"op-alloy-rpc-types",
"op-alloy-rpc-types-engine",
]
+[[package]]
+name = "op-alloy-consensus"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "736381a95471d23e267263cfcee9e1d96d30b9754a94a2819148f83379de8a86"
+dependencies = [
+ "alloy-consensus 1.8.3",
+ "alloy-eips 1.8.3",
+ "alloy-primitives",
+ "alloy-rlp",
+ "alloy-serde 1.8.3",
+ "derive_more",
+ "serde",
+ "thiserror 2.0.18",
+]
+
[[package]]
name = "op-alloy-consensus"
version = "0.24.0"
source = "git+https://github.com/ethereum-optimism/optimism?rev=42f5117c2e7de0614cd3b96f274d0a3078f9701c#42f5117c2e7de0614cd3b96f274d0a3078f9701c"
dependencies = [
- "alloy-consensus",
- "alloy-eips 2.0.1",
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
"alloy-network",
"alloy-primitives",
"alloy-rlp",
- "alloy-rpc-types-eth",
- "alloy-serde 2.0.1",
+ "alloy-rpc-types-eth 2.0.4",
+ "alloy-serde 2.0.4",
"bytes",
"derive_more",
- "reth-codecs",
- "reth-zstd-compressors",
+ "reth-codecs 0.3.0",
+ "reth-zstd-compressors 0.3.1",
"serde",
"serde_with",
"thiserror 2.0.18",
@@ -7860,11 +8286,11 @@ name = "op-alloy-network"
version = "0.24.0"
source = "git+https://github.com/ethereum-optimism/optimism?rev=42f5117c2e7de0614cd3b96f274d0a3078f9701c#42f5117c2e7de0614cd3b96f274d0a3078f9701c"
dependencies = [
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-network",
"alloy-provider",
- "alloy-rpc-types-eth",
- "op-alloy-consensus",
+ "alloy-rpc-types-eth 2.0.4",
+ "op-alloy-consensus 0.24.0",
"op-alloy-rpc-types",
]
@@ -7887,15 +8313,15 @@ name = "op-alloy-rpc-types"
version = "0.24.0"
source = "git+https://github.com/ethereum-optimism/optimism?rev=42f5117c2e7de0614cd3b96f274d0a3078f9701c#42f5117c2e7de0614cd3b96f274d0a3078f9701c"
dependencies = [
- "alloy-consensus",
- "alloy-eips 2.0.1",
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
"alloy-network",
- "alloy-network-primitives",
+ "alloy-network-primitives 2.0.4",
"alloy-primitives",
- "alloy-rpc-types-eth",
- "alloy-serde 2.0.1",
+ "alloy-rpc-types-eth 2.0.4",
+ "alloy-serde 2.0.4",
"derive_more",
- "op-alloy-consensus",
+ "op-alloy-consensus 0.24.0",
"reth-rpc-traits",
"serde",
"serde_json",
@@ -7907,16 +8333,16 @@ name = "op-alloy-rpc-types-engine"
version = "0.24.0"
source = "git+https://github.com/ethereum-optimism/optimism?rev=42f5117c2e7de0614cd3b96f274d0a3078f9701c#42f5117c2e7de0614cd3b96f274d0a3078f9701c"
dependencies = [
- "alloy-consensus",
- "alloy-eips 2.0.1",
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
"alloy-primitives",
"alloy-rlp",
"alloy-rpc-types-engine",
- "alloy-serde 2.0.1",
+ "alloy-serde 2.0.4",
"derive_more",
"ethereum_ssz",
"ethereum_ssz_derive",
- "op-alloy-consensus",
+ "op-alloy-consensus 0.24.0",
"serde",
"sha2 0.10.9",
"snap",
@@ -7941,20 +8367,20 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381"
[[package]]
name = "opener"
-version = "0.8.4"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2fa337e0cf13357c13ef1dc108df1333eb192f75fc170bea03fcf1fd404c2ee"
+checksum = "cb9024962ab91e00c89d2a14352a8d0fc1a64346bf96f1839b45c09149564e47"
dependencies = [
"bstr",
"normpath",
- "windows-sys 0.61.2",
+ "windows-sys 0.60.2",
]
[[package]]
name = "openssl-probe"
-version = "0.2.1"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
+checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
[[package]]
name = "option-ext"
@@ -7970,9 +8396,9 @@ checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e"
[[package]]
name = "owo-colors"
-version = "4.3.0"
+version = "4.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d211803b9b6b570f68772237e415a029d5a50c65d382910b879fb19d3271f94d"
+checksum = "9c6901729fa79e91a0913333229e9ca5dc725089d1c363b2f4b4760709dc4a52"
[[package]]
name = "p256"
@@ -7987,6 +8413,22 @@ dependencies = [
"sha2 0.10.9",
]
+[[package]]
+name = "page_size"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30d5b2194ed13191c1999ae0704b7839fb18384fa22e49b57eeaa97d79ce40da"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "pagetable"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69b57830c885fc057ecbf2f1f99f0427c3d102cf2ee5e80a52c09948d45a460e"
+
[[package]]
name = "parity-scale-codec"
version = "3.7.5"
@@ -8042,7 +8484,7 @@ dependencies = [
"libc",
"redox_syscall",
"smallvec",
- "windows-link",
+ "windows-link 0.2.1",
]
[[package]]
@@ -8103,9 +8545,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
[[package]]
name = "pest"
-version = "2.8.6"
+version = "2.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662"
+checksum = "cbcfd20a6d4eeba40179f05735784ad32bdaef05ce8e8af05f180d45bb3e7e22"
dependencies = [
"memchr",
"ucd-trie",
@@ -8113,9 +8555,9 @@ dependencies = [
[[package]]
name = "pest_derive"
-version = "2.8.6"
+version = "2.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77"
+checksum = "51f72981ade67b1ca6adc26ec221be9f463f2b5839c7508998daa17c23d94d7f"
dependencies = [
"pest",
"pest_generator",
@@ -8123,9 +8565,9 @@ dependencies = [
[[package]]
name = "pest_generator"
-version = "2.8.6"
+version = "2.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f"
+checksum = "dee9efd8cdb50d719a80088b76f81aec7c41ed6d522ee750178f83883d271625"
dependencies = [
"pest",
"pest_meta",
@@ -8136,9 +8578,9 @@ dependencies = [
[[package]]
name = "pest_meta"
-version = "2.8.6"
+version = "2.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220"
+checksum = "bf1d70880e76bdc13ba52eafa6239ce793d85c8e43896507e43dd8984ff05b82"
dependencies = [
"pest",
"sha2 0.10.9",
@@ -8212,7 +8654,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
dependencies = [
"phf_shared 0.11.3",
- "rand 0.8.6",
+ "rand 0.8.5",
]
[[package]]
@@ -8271,18 +8713,18 @@ dependencies = [
[[package]]
name = "pin-project"
-version = "1.1.11"
+version = "1.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517"
+checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a"
dependencies = [
"pin-project-internal",
]
[[package]]
name = "pin-project-internal"
-version = "1.1.11"
+version = "1.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6"
+checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
dependencies = [
"proc-macro2",
"quote",
@@ -8291,9 +8733,9 @@ dependencies = [
[[package]]
name = "pin-project-lite"
-version = "0.2.17"
+version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
+checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
[[package]]
name = "pin-utils"
@@ -8313,9 +8755,9 @@ dependencies = [
[[package]]
name = "pkg-config"
-version = "0.3.33"
+version = "0.3.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e"
+checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
[[package]]
name = "poly1305"
@@ -8330,24 +8772,24 @@ dependencies = [
[[package]]
name = "portable-atomic"
-version = "1.13.1"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
+checksum = "f59e70c4aef1e55797c2e8fd94a4f2a973fc972cfde0e0b05f683667b0cd39dd"
[[package]]
name = "portable-atomic-util"
-version = "0.2.7"
+version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618"
+checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507"
dependencies = [
"portable-atomic",
]
[[package]]
name = "potential_utf"
-version = "0.1.5"
+version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564"
+checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77"
dependencies = [
"zerovec",
]
@@ -8375,9 +8817,9 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
[[package]]
name = "predicates"
-version = "3.1.4"
+version = "3.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ada8f2932f28a27ee7b70dd6c1c39ea0675c55a36879ab92f3a715eaa1e63cfe"
+checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573"
dependencies = [
"anstyle",
"predicates-core",
@@ -8385,15 +8827,15 @@ dependencies = [
[[package]]
name = "predicates-core"
-version = "1.0.10"
+version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cad38746f3166b4031b1a0d39ad9f954dd291e7854fcc0eed52ee41a0b50d144"
+checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa"
[[package]]
name = "predicates-tree"
-version = "1.0.13"
+version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d0de1b847b39c8131db0467e9df1ff60e6d0562ab8e9a16e568ad0fdb372e2f2"
+checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c"
dependencies = [
"predicates-core",
"termtree",
@@ -8451,11 +8893,11 @@ dependencies = [
[[package]]
name = "proc-macro-crate"
-version = "3.5.0"
+version = "3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f"
+checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983"
dependencies = [
- "toml_edit 0.25.11+spec-1.1.0",
+ "toml_edit 0.23.10+spec-1.0.0",
]
[[package]]
@@ -8482,38 +8924,38 @@ dependencies = [
[[package]]
name = "proc-macro2"
-version = "1.0.106"
+version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
+checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
dependencies = [
"unicode-ident",
]
[[package]]
name = "process-wrap"
-version = "9.1.0"
+version = "8.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2e842efad9119158434d193c6682e2ebee4b44d6ad801d7b349623b3f57cdf55"
+checksum = "a3ef4f2f0422f23a82ec9f628ea2acd12871c81a9362b02c43c1aa86acfc3ba1"
dependencies = [
"futures",
"indexmap 2.14.0",
- "nix 0.31.2",
+ "nix 0.30.1",
"tokio",
"tracing",
- "windows",
+ "windows 0.61.3",
]
[[package]]
name = "proptest"
-version = "1.11.0"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744"
+checksum = "bee689443a2bd0a16ab0348b52ee43e3b2d1b1f931c8aa5c9f8de4c86fbe8c40"
dependencies = [
"bit-set",
"bit-vec",
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"num-traits",
- "rand 0.9.4",
+ "rand 0.9.2",
"rand_chacha 0.9.0",
"rand_xorshift",
"regex-syntax",
@@ -8545,12 +8987,12 @@ dependencies = [
[[package]]
name = "prost"
-version = "0.14.3"
+version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568"
+checksum = "7231bd9b3d3d33c86b58adbac74b5ec0ad9f496b19d22801d773636feaa95f3d"
dependencies = [
"bytes",
- "prost-derive 0.14.3",
+ "prost-derive 0.14.1",
]
[[package]]
@@ -8568,9 +9010,9 @@ dependencies = [
[[package]]
name = "prost-derive"
-version = "0.14.3"
+version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b"
+checksum = "9120690fafc389a67ba3803df527d0ec9cbbc9cc45e4cc20b332996dfb672425"
dependencies = [
"anyhow",
"itertools 0.12.1",
@@ -8590,11 +9032,11 @@ dependencies = [
[[package]]
name = "prost-types"
-version = "0.14.3"
+version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7"
+checksum = "b9b4db3d6da204ed77bb26ba83b6122a73aeb2e87e25fbf7ad2e84c4ccbf8f72"
dependencies = [
- "prost 0.14.3",
+ "prost 0.14.1",
]
[[package]]
@@ -8619,11 +9061,11 @@ dependencies = [
[[package]]
name = "pulldown-cmark"
-version = "0.13.3"
+version = "0.13.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c3a14896dfa883796f1cb410461aef38810ea05f2b2c33c5aded3649095fdad"
+checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"memchr",
"pulldown-cmark-escape",
"unicase",
@@ -8668,23 +9110,23 @@ dependencies = [
"quick-xml 0.38.4",
"strip-ansi-escapes",
"thiserror 2.0.18",
- "uuid 1.23.1",
+ "uuid 1.19.0",
]
[[package]]
name = "quick-xml"
-version = "0.38.4"
+version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c"
+checksum = "3cc440ee4802a86e357165021e3e255a9143724da31db1e2ea540214c96a0f82"
dependencies = [
"memchr",
]
[[package]]
name = "quick-xml"
-version = "0.39.2"
+version = "0.38.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "958f21e8e7ceb5a1aa7fa87fab28e7c75976e0bfe7e23ff069e0a260f894067d"
+checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c"
dependencies = [
"memchr",
]
@@ -8711,15 +9153,15 @@ dependencies = [
[[package]]
name = "quinn-proto"
-version = "0.11.14"
+version = "0.11.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098"
+checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31"
dependencies = [
"aws-lc-rs",
"bytes",
"getrandom 0.3.4",
"lru-slab",
- "rand 0.9.4",
+ "rand 0.9.2",
"ring",
"rustc-hash",
"rustls",
@@ -8747,9 +9189,9 @@ dependencies = [
[[package]]
name = "quote"
-version = "1.0.45"
+version = "1.0.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
+checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
dependencies = [
"proc-macro2",
]
@@ -8784,9 +9226,22 @@ dependencies = [
[[package]]
name = "rand"
-version = "0.8.6"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
+dependencies = [
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.3.1",
+ "rdrand",
+ "winapi",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
dependencies = [
"libc",
"rand_chacha 0.3.1",
@@ -8796,12 +9251,12 @@ dependencies = [
[[package]]
name = "rand"
-version = "0.9.4"
+version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea"
+checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
dependencies = [
"rand_chacha 0.9.0",
- "rand_core 0.9.5",
+ "rand_core 0.9.3",
"serde",
]
@@ -8822,44 +9277,59 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
dependencies = [
"ppv-lite86",
- "rand_core 0.9.5",
+ "rand_core 0.9.3",
]
[[package]]
name = "rand_core"
-version = "0.6.4"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
dependencies = [
- "getrandom 0.2.17",
+ "rand_core 0.4.2",
]
[[package]]
name = "rand_core"
-version = "0.9.5"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
-dependencies = [
- "getrandom 0.3.4",
- "serde",
-]
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
[[package]]
-name = "rand_xorshift"
-version = "0.4.0"
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
+dependencies = [
+ "getrandom 0.3.4",
+ "serde",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a"
dependencies = [
- "rand_core 0.9.5",
+ "rand_core 0.9.3",
]
[[package]]
name = "rapidhash"
-version = "4.4.1"
+version = "4.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5e48930979c155e2f33aa36ab3119b5ee81332beb6482199a8ecd6029b80b59"
+checksum = "2988730ee014541157f48ce4dcc603940e00915edc3c7f9a8d78092256bb2493"
dependencies = [
- "rand 0.9.4",
+ "rand 0.9.2",
"rustversion",
]
@@ -8881,7 +9351,7 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ef8dea09a92caaf73bff7adb70b76162e5937524058a7e5bff37869cbbec293"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"compact_str",
"hashbrown 0.16.1",
"indoc",
@@ -8892,7 +9362,7 @@ dependencies = [
"thiserror 2.0.18",
"unicode-segmentation",
"unicode-truncate",
- "unicode-width 0.2.2",
+ "unicode-width 0.2.0",
]
[[package]]
@@ -8913,7 +9383,7 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7dbfa023cd4e604c2553483820c5fe8aa9d71a42eea5aa77c6e7f35756612db"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"hashbrown 0.16.1",
"indoc",
"instability",
@@ -8923,7 +9393,7 @@ dependencies = [
"strum",
"time",
"unicode-segmentation",
- "unicode-width 0.2.2",
+ "unicode-width 0.2.0",
]
[[package]]
@@ -8932,14 +9402,14 @@ version = "11.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
]
[[package]]
name = "rayon"
-version = "1.12.0"
+version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d"
+checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f"
dependencies = [
"either",
"rayon-core",
@@ -8955,6 +9425,15 @@ dependencies = [
"crossbeam-utils",
]
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
[[package]]
name = "recvmsg"
version = "1.0.0"
@@ -8967,7 +9446,7 @@ version = "0.5.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
]
[[package]]
@@ -8976,7 +9455,7 @@ version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac"
dependencies = [
- "getrandom 0.2.17",
+ "getrandom 0.2.16",
"libredox",
"thiserror 2.0.18",
]
@@ -9015,9 +9494,9 @@ dependencies = [
[[package]]
name = "regex-automata"
-version = "0.4.14"
+version = "0.4.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
+checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c"
dependencies = [
"aho-corasick",
"memchr",
@@ -9026,15 +9505,15 @@ dependencies = [
[[package]]
name = "regex-lite"
-version = "0.1.9"
+version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973"
+checksum = "8d942b98df5e658f56f20d592c7f868833fe38115e65c33003d8cd224b0155da"
[[package]]
name = "regex-syntax"
-version = "0.8.10"
+version = "0.8.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
+checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
[[package]]
name = "regress"
@@ -9046,11 +9525,20 @@ dependencies = [
"memchr",
]
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
[[package]]
name = "reqwest"
-version = "0.12.28"
+version = "0.12.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147"
+checksum = "3b4c14b2d9afca6a60277086b0cc6a6ae0b568f6f7916c943a8cdc79f8be240f"
dependencies = [
"base64 0.22.1",
"bytes",
@@ -9088,14 +9576,14 @@ dependencies = [
"wasm-bindgen-futures",
"wasm-streams 0.4.2",
"web-sys",
- "webpki-roots 1.0.7",
+ "webpki-roots 1.0.4",
]
[[package]]
name = "reqwest"
-version = "0.13.2"
+version = "0.13.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801"
+checksum = "62e0021ea2c22aed41653bc7e1419abb2c97e038ff2c33d0e1309e49a97deec0"
dependencies = [
"base64 0.22.1",
"bytes",
@@ -9141,17 +9629,17 @@ version = "2.1.0"
source = "git+https://github.com/paradigmxyz/reth?rev=7839f3d#7839f3d876b32842b059ca8171242b807ba1fc80"
dependencies = [
"alloy-chains",
- "alloy-consensus",
- "alloy-eips 2.0.1",
- "alloy-evm",
- "alloy-genesis",
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
+ "alloy-evm 0.33.3",
+ "alloy-genesis 2.0.4",
"alloy-primitives",
"alloy-trie",
"auto_impl",
"derive_more",
"reth-ethereum-forks",
"reth-network-peers",
- "reth-primitives-traits",
+ "reth-primitives-traits 0.3.0",
"serde_json",
]
@@ -9160,16 +9648,34 @@ name = "reth-codecs"
version = "0.3.0"
source = "git+https://github.com/paradigmxyz/reth-core?rev=6b12498#6b12498871bc1b1d42c6dcf28968c271660de8c0"
dependencies = [
- "alloy-consensus",
- "alloy-eips 2.0.1",
- "alloy-genesis",
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
+ "alloy-genesis 2.0.4",
"alloy-primitives",
"alloy-trie",
"bytes",
"modular-bitfield",
"parity-scale-codec",
- "reth-codecs-derive",
- "reth-zstd-compressors",
+ "reth-codecs-derive 0.3.0",
+ "reth-zstd-compressors 0.3.0",
+ "serde",
+]
+
+[[package]]
+name = "reth-codecs"
+version = "1.11.2"
+source = "git+https://github.com/paradigmxyz/reth?tag=v1.11.2#793a3d5fb3e3413e9ecc9b024a5e26672e61e7c3"
+dependencies = [
+ "alloy-consensus 1.8.3",
+ "alloy-eips 1.8.3",
+ "alloy-genesis 1.8.3",
+ "alloy-primitives",
+ "alloy-trie",
+ "bytes",
+ "modular-bitfield",
+ "op-alloy-consensus 0.23.1",
+ "reth-codecs-derive 1.11.2",
+ "reth-zstd-compressors 1.11.2",
"serde",
]
@@ -9183,16 +9689,26 @@ dependencies = [
"syn 2.0.117",
]
+[[package]]
+name = "reth-codecs-derive"
+version = "1.11.2"
+source = "git+https://github.com/paradigmxyz/reth?tag=v1.11.2#793a3d5fb3e3413e9ecc9b024a5e26672e61e7c3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
[[package]]
name = "reth-consensus"
version = "2.1.0"
source = "git+https://github.com/paradigmxyz/reth?rev=7839f3d#7839f3d876b32842b059ca8171242b807ba1fc80"
dependencies = [
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-primitives",
"auto_impl",
"reth-execution-types",
- "reth-primitives-traits",
+ "reth-primitives-traits 0.3.0",
"thiserror 2.0.18",
]
@@ -9201,12 +9717,63 @@ name = "reth-consensus-common"
version = "2.1.0"
source = "git+https://github.com/paradigmxyz/reth?rev=7839f3d#7839f3d876b32842b059ca8171242b807ba1fc80"
dependencies = [
- "alloy-consensus",
- "alloy-eips 2.0.1",
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
"alloy-primitives",
"reth-chainspec",
"reth-consensus",
- "reth-primitives-traits",
+ "reth-primitives-traits 0.3.0",
+]
+
+[[package]]
+name = "reth-db"
+version = "1.11.2"
+source = "git+https://github.com/paradigmxyz/reth?tag=v1.11.2#793a3d5fb3e3413e9ecc9b024a5e26672e61e7c3"
+dependencies = [
+ "alloy-primitives",
+ "derive_more",
+ "eyre",
+ "metrics",
+ "page_size",
+ "reth-db-api 1.11.2",
+ "reth-fs-util",
+ "reth-libmdbx",
+ "reth-metrics",
+ "reth-nippy-jar",
+ "reth-static-file-types 1.11.2",
+ "reth-storage-errors 1.11.2",
+ "reth-tracing",
+ "rustc-hash",
+ "strum",
+ "sysinfo",
+ "thiserror 2.0.18",
+ "tracing",
+]
+
+[[package]]
+name = "reth-db-api"
+version = "1.11.2"
+source = "git+https://github.com/paradigmxyz/reth?tag=v1.11.2#793a3d5fb3e3413e9ecc9b024a5e26672e61e7c3"
+dependencies = [
+ "alloy-consensus 1.8.3",
+ "alloy-genesis 1.8.3",
+ "alloy-primitives",
+ "arrayvec",
+ "bytes",
+ "derive_more",
+ "metrics",
+ "modular-bitfield",
+ "parity-scale-codec",
+ "reth-codecs 1.11.2",
+ "reth-db-models 1.11.2",
+ "reth-ethereum-primitives 1.11.2",
+ "reth-primitives-traits 1.11.2",
+ "reth-prune-types 1.11.2",
+ "reth-stages-types 1.11.2",
+ "reth-storage-errors 1.11.2",
+ "reth-trie-common 1.11.2",
+ "roaring",
+ "serde",
]
[[package]]
@@ -9214,36 +9781,50 @@ name = "reth-db-api"
version = "2.1.0"
source = "git+https://github.com/paradigmxyz/reth?rev=7839f3d#7839f3d876b32842b059ca8171242b807ba1fc80"
dependencies = [
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-primitives",
"arrayvec",
"bytes",
"derive_more",
"metrics",
"modular-bitfield",
- "reth-codecs",
- "reth-db-models",
- "reth-ethereum-primitives",
- "reth-primitives-traits",
- "reth-prune-types",
- "reth-stages-types",
- "reth-storage-errors",
- "reth-trie-common",
+ "reth-codecs 0.3.0",
+ "reth-db-models 2.1.0",
+ "reth-ethereum-primitives 2.1.0",
+ "reth-primitives-traits 0.3.0",
+ "reth-prune-types 2.1.0",
+ "reth-stages-types 2.1.0",
+ "reth-storage-errors 2.1.0",
+ "reth-trie-common 2.1.0",
"roaring",
"serde",
]
+[[package]]
+name = "reth-db-models"
+version = "1.11.2"
+source = "git+https://github.com/paradigmxyz/reth?tag=v1.11.2#793a3d5fb3e3413e9ecc9b024a5e26672e61e7c3"
+dependencies = [
+ "alloy-eips 1.8.3",
+ "alloy-primitives",
+ "bytes",
+ "modular-bitfield",
+ "reth-codecs 1.11.2",
+ "reth-primitives-traits 1.11.2",
+ "serde",
+]
+
[[package]]
name = "reth-db-models"
version = "2.1.0"
source = "git+https://github.com/paradigmxyz/reth?rev=7839f3d#7839f3d876b32842b059ca8171242b807ba1fc80"
dependencies = [
- "alloy-eips 2.0.1",
+ "alloy-eips 2.0.4",
"alloy-primitives",
"bytes",
"modular-bitfield",
- "reth-codecs",
- "reth-primitives-traits",
+ "reth-codecs 0.3.0",
+ "reth-primitives-traits 0.3.0",
"serde",
]
@@ -9252,14 +9833,14 @@ name = "reth-ethereum-consensus"
version = "2.1.0"
source = "git+https://github.com/paradigmxyz/reth?rev=7839f3d#7839f3d876b32842b059ca8171242b807ba1fc80"
dependencies = [
- "alloy-consensus",
- "alloy-eips 2.0.1",
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
"alloy-primitives",
"reth-chainspec",
"reth-consensus",
"reth-consensus-common",
"reth-execution-types",
- "reth-primitives-traits",
+ "reth-primitives-traits 0.3.0",
"tracing",
]
@@ -9276,17 +9857,36 @@ dependencies = [
"rustc-hash",
]
+[[package]]
+name = "reth-ethereum-primitives"
+version = "1.11.2"
+source = "git+https://github.com/paradigmxyz/reth?tag=v1.11.2#793a3d5fb3e3413e9ecc9b024a5e26672e61e7c3"
+dependencies = [
+ "alloy-consensus 1.8.3",
+ "alloy-eips 1.8.3",
+ "alloy-primitives",
+ "alloy-rlp",
+ "alloy-rpc-types-eth 1.8.3",
+ "alloy-serde 1.8.3",
+ "modular-bitfield",
+ "reth-codecs 1.11.2",
+ "reth-primitives-traits 1.11.2",
+ "reth-zstd-compressors 1.11.2",
+ "serde",
+ "serde_with",
+]
+
[[package]]
name = "reth-ethereum-primitives"
version = "2.1.0"
source = "git+https://github.com/paradigmxyz/reth?rev=7839f3d#7839f3d876b32842b059ca8171242b807ba1fc80"
dependencies = [
- "alloy-consensus",
- "alloy-eips 2.0.1",
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
"alloy-primitives",
- "alloy-rpc-types-eth",
- "reth-codecs",
- "reth-primitives-traits",
+ "alloy-rpc-types-eth 2.0.4",
+ "reth-codecs 0.3.0",
+ "reth-primitives-traits 0.3.0",
"serde",
]
@@ -9295,9 +9895,9 @@ name = "reth-evm"
version = "2.1.0"
source = "git+https://github.com/paradigmxyz/reth?rev=7839f3d#7839f3d876b32842b059ca8171242b807ba1fc80"
dependencies = [
- "alloy-consensus",
- "alloy-eips 2.0.1",
- "alloy-evm",
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
+ "alloy-evm 0.33.3",
"alloy-primitives",
"auto_impl",
"derive_more",
@@ -9305,10 +9905,10 @@ dependencies = [
"rayon",
"reth-execution-errors",
"reth-execution-types",
- "reth-primitives-traits",
+ "reth-primitives-traits 0.3.0",
"reth-storage-api",
- "reth-storage-errors",
- "reth-trie-common",
+ "reth-storage-errors 2.1.0",
+ "reth-trie-common 2.1.0",
"revm",
]
@@ -9317,18 +9917,18 @@ name = "reth-evm-ethereum"
version = "2.1.0"
source = "git+https://github.com/paradigmxyz/reth?rev=7839f3d#7839f3d876b32842b059ca8171242b807ba1fc80"
dependencies = [
- "alloy-consensus",
- "alloy-eips 2.0.1",
- "alloy-evm",
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
+ "alloy-evm 0.33.3",
"alloy-primitives",
"alloy-rpc-types-engine",
"reth-chainspec",
"reth-ethereum-forks",
- "reth-ethereum-primitives",
+ "reth-ethereum-primitives 2.1.0",
"reth-evm",
"reth-execution-types",
- "reth-primitives-traits",
- "reth-storage-errors",
+ "reth-primitives-traits 0.3.0",
+ "reth-storage-errors 2.1.0",
"revm",
]
@@ -9337,11 +9937,11 @@ name = "reth-execution-errors"
version = "2.1.0"
source = "git+https://github.com/paradigmxyz/reth?rev=7839f3d#7839f3d876b32842b059ca8171242b807ba1fc80"
dependencies = [
- "alloy-evm",
+ "alloy-evm 0.33.3",
"alloy-primitives",
"alloy-rlp",
"nybbles",
- "reth-storage-errors",
+ "reth-storage-errors 2.1.0",
"thiserror 2.0.18",
]
@@ -9350,20 +9950,64 @@ name = "reth-execution-types"
version = "2.1.0"
source = "git+https://github.com/paradigmxyz/reth?rev=7839f3d#7839f3d876b32842b059ca8171242b807ba1fc80"
dependencies = [
- "alloy-consensus",
- "alloy-eips 2.0.1",
- "alloy-evm",
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
+ "alloy-evm 0.33.3",
"alloy-primitives",
"alloy-rlp",
"derive_more",
- "reth-ethereum-primitives",
- "reth-primitives-traits",
- "reth-trie-common",
+ "reth-ethereum-primitives 2.1.0",
+ "reth-primitives-traits 0.3.0",
+ "reth-trie-common 2.1.0",
"revm",
"serde",
"serde_with",
]
+[[package]]
+name = "reth-fs-util"
+version = "1.11.2"
+source = "git+https://github.com/paradigmxyz/reth?tag=v1.11.2#793a3d5fb3e3413e9ecc9b024a5e26672e61e7c3"
+dependencies = [
+ "serde",
+ "serde_json",
+ "thiserror 2.0.18",
+]
+
+[[package]]
+name = "reth-libmdbx"
+version = "1.11.2"
+source = "git+https://github.com/paradigmxyz/reth?tag=v1.11.2#793a3d5fb3e3413e9ecc9b024a5e26672e61e7c3"
+dependencies = [
+ "bitflags 2.10.0",
+ "byteorder",
+ "dashmap",
+ "derive_more",
+ "parking_lot",
+ "reth-mdbx-sys",
+ "smallvec",
+ "thiserror 2.0.18",
+ "tracing",
+]
+
+[[package]]
+name = "reth-mdbx-sys"
+version = "1.11.2"
+source = "git+https://github.com/paradigmxyz/reth?tag=v1.11.2#793a3d5fb3e3413e9ecc9b024a5e26672e61e7c3"
+dependencies = [
+ "bindgen",
+ "cc",
+]
+
+[[package]]
+name = "reth-metrics"
+version = "1.11.2"
+source = "git+https://github.com/paradigmxyz/reth?tag=v1.11.2#793a3d5fb3e3413e9ecc9b024a5e26672e61e7c3"
+dependencies = [
+ "metrics",
+ "metrics-derive",
+]
+
[[package]]
name = "reth-network-peers"
version = "2.1.0"
@@ -9377,17 +10021,34 @@ dependencies = [
"url",
]
+[[package]]
+name = "reth-nippy-jar"
+version = "1.11.2"
+source = "git+https://github.com/paradigmxyz/reth?tag=v1.11.2#793a3d5fb3e3413e9ecc9b024a5e26672e61e7c3"
+dependencies = [
+ "anyhow",
+ "bincode",
+ "derive_more",
+ "lz4_flex",
+ "memmap2",
+ "reth-fs-util",
+ "serde",
+ "thiserror 2.0.18",
+ "tracing",
+ "zstd 0.13.3",
+]
+
[[package]]
name = "reth-primitives-traits"
version = "0.3.0"
source = "git+https://github.com/paradigmxyz/reth-core?rev=6b12498#6b12498871bc1b1d42c6dcf28968c271660de8c0"
dependencies = [
- "alloy-consensus",
- "alloy-eips 2.0.1",
- "alloy-genesis",
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
+ "alloy-genesis 2.0.4",
"alloy-primitives",
"alloy-rlp",
- "alloy-rpc-types-eth",
+ "alloy-rpc-types-eth 2.0.4",
"alloy-trie",
"byteorder",
"bytes",
@@ -9396,13 +10057,58 @@ dependencies = [
"modular-bitfield",
"once_cell",
"quanta",
- "reth-codecs",
- "revm-bytecode",
- "revm-primitives",
- "revm-state",
+ "reth-codecs 0.3.0",
+ "revm-bytecode 10.0.0",
+ "revm-primitives 23.0.0",
+ "revm-state 11.0.1",
+ "secp256k1 0.30.0",
+ "serde",
+ "thiserror 2.0.18",
+]
+
+[[package]]
+name = "reth-primitives-traits"
+version = "1.11.2"
+source = "git+https://github.com/paradigmxyz/reth?tag=v1.11.2#793a3d5fb3e3413e9ecc9b024a5e26672e61e7c3"
+dependencies = [
+ "alloy-consensus 1.8.3",
+ "alloy-eips 1.8.3",
+ "alloy-genesis 1.8.3",
+ "alloy-primitives",
+ "alloy-rlp",
+ "alloy-rpc-types-eth 1.8.3",
+ "alloy-trie",
+ "auto_impl",
+ "byteorder",
+ "bytes",
+ "dashmap",
+ "derive_more",
+ "modular-bitfield",
+ "once_cell",
+ "op-alloy-consensus 0.23.1",
+ "reth-codecs 1.11.2",
+ "revm-bytecode 8.0.0",
+ "revm-primitives 22.1.0",
+ "revm-state 9.0.0",
"secp256k1 0.30.0",
"serde",
+ "serde_with",
+ "thiserror 2.0.18",
+]
+
+[[package]]
+name = "reth-prune-types"
+version = "1.11.2"
+source = "git+https://github.com/paradigmxyz/reth?tag=v1.11.2#793a3d5fb3e3413e9ecc9b024a5e26672e61e7c3"
+dependencies = [
+ "alloy-primitives",
+ "derive_more",
+ "modular-bitfield",
+ "reth-codecs 1.11.2",
+ "serde",
+ "strum",
"thiserror 2.0.18",
+ "tracing",
]
[[package]]
@@ -9413,7 +10119,7 @@ dependencies = [
"alloy-primitives",
"derive_more",
"modular-bitfield",
- "reth-codecs",
+ "reth-codecs 0.3.0",
"serde",
"strum",
"thiserror 2.0.18",
@@ -9427,9 +10133,9 @@ source = "git+https://github.com/paradigmxyz/reth?rev=7839f3d#7839f3d876b32842b0
dependencies = [
"alloy-primitives",
"alloy-rlp",
- "reth-primitives-traits",
+ "reth-primitives-traits 0.3.0",
"reth-storage-api",
- "reth-storage-errors",
+ "reth-storage-errors 2.1.0",
"revm",
]
@@ -9438,17 +10144,17 @@ name = "reth-rpc-convert"
version = "2.1.0"
source = "git+https://github.com/paradigmxyz/reth?rev=7839f3d#7839f3d876b32842b059ca8171242b807ba1fc80"
dependencies = [
- "alloy-consensus",
- "alloy-evm",
+ "alloy-consensus 2.0.4",
+ "alloy-evm 0.33.3",
"alloy-json-rpc",
"alloy-network",
"alloy-primitives",
- "alloy-rpc-types-eth",
+ "alloy-rpc-types-eth 2.0.4",
"auto_impl",
"dyn-clone",
"jsonrpsee-types",
"reth-evm",
- "reth-primitives-traits",
+ "reth-primitives-traits 0.3.0",
"reth-rpc-traits",
"thiserror 2.0.18",
]
@@ -9456,18 +10162,30 @@ dependencies = [
[[package]]
name = "reth-rpc-traits"
version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b766da61ec7c46596386b4bc88d9b57d1939d3da2bc9e927567a8a23650e5ce9"
+source = "git+https://github.com/paradigmxyz/reth-core?rev=6b12498#6b12498871bc1b1d42c6dcf28968c271660de8c0"
dependencies = [
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-network",
"alloy-primitives",
- "alloy-rpc-types-eth",
+ "alloy-rpc-types-eth 2.0.4",
"alloy-signer",
- "reth-primitives-traits",
+ "reth-primitives-traits 0.3.0",
"thiserror 2.0.18",
]
+[[package]]
+name = "reth-stages-types"
+version = "1.11.2"
+source = "git+https://github.com/paradigmxyz/reth?tag=v1.11.2#793a3d5fb3e3413e9ecc9b024a5e26672e61e7c3"
+dependencies = [
+ "alloy-primitives",
+ "bytes",
+ "modular-bitfield",
+ "reth-codecs 1.11.2",
+ "reth-trie-common 1.11.2",
+ "serde",
+]
+
[[package]]
name = "reth-stages-types"
version = "2.1.0"
@@ -9476,11 +10194,24 @@ dependencies = [
"alloy-primitives",
"bytes",
"modular-bitfield",
- "reth-codecs",
- "reth-trie-common",
+ "reth-codecs 0.3.0",
+ "reth-trie-common 2.1.0",
"serde",
]
+[[package]]
+name = "reth-static-file-types"
+version = "1.11.2"
+source = "git+https://github.com/paradigmxyz/reth?tag=v1.11.2#793a3d5fb3e3413e9ecc9b024a5e26672e61e7c3"
+dependencies = [
+ "alloy-primitives",
+ "derive_more",
+ "fixed-map",
+ "reth-stages-types 1.11.2",
+ "serde",
+ "strum",
+]
+
[[package]]
name = "reth-static-file-types"
version = "2.1.0"
@@ -9489,7 +10220,7 @@ dependencies = [
"alloy-primitives",
"derive_more",
"fixed-map",
- "reth-stages-types",
+ "reth-stages-types 2.1.0",
"serde",
"strum",
"tracing",
@@ -9500,61 +10231,115 @@ name = "reth-storage-api"
version = "2.1.0"
source = "git+https://github.com/paradigmxyz/reth?rev=7839f3d#7839f3d876b32842b059ca8171242b807ba1fc80"
dependencies = [
- "alloy-consensus",
- "alloy-eips 2.0.1",
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
"alloy-primitives",
"alloy-rpc-types-engine",
"auto_impl",
"reth-chainspec",
- "reth-db-models",
- "reth-ethereum-primitives",
+ "reth-db-models 2.1.0",
+ "reth-ethereum-primitives 2.1.0",
"reth-execution-types",
- "reth-primitives-traits",
- "reth-prune-types",
- "reth-stages-types",
- "reth-storage-errors",
- "reth-trie-common",
- "revm-database",
+ "reth-primitives-traits 0.3.0",
+ "reth-prune-types 2.1.0",
+ "reth-stages-types 2.1.0",
+ "reth-storage-errors 2.1.0",
+ "reth-trie-common 2.1.0",
+ "revm-database 13.0.1",
"serde_json",
]
+[[package]]
+name = "reth-storage-errors"
+version = "1.11.2"
+source = "git+https://github.com/paradigmxyz/reth?tag=v1.11.2#793a3d5fb3e3413e9ecc9b024a5e26672e61e7c3"
+dependencies = [
+ "alloy-eips 1.8.3",
+ "alloy-primitives",
+ "alloy-rlp",
+ "derive_more",
+ "reth-primitives-traits 1.11.2",
+ "reth-prune-types 1.11.2",
+ "reth-static-file-types 1.11.2",
+ "revm-database-interface 9.0.0",
+ "revm-state 9.0.0",
+ "thiserror 2.0.18",
+]
+
[[package]]
name = "reth-storage-errors"
version = "2.1.0"
source = "git+https://github.com/paradigmxyz/reth?rev=7839f3d#7839f3d876b32842b059ca8171242b807ba1fc80"
dependencies = [
- "alloy-eips 2.0.1",
+ "alloy-eips 2.0.4",
"alloy-primitives",
"alloy-rlp",
"derive_more",
- "reth-codecs",
- "reth-primitives-traits",
- "reth-prune-types",
- "reth-static-file-types",
- "revm-database-interface",
- "revm-state",
+ "reth-codecs 0.3.0",
+ "reth-primitives-traits 0.3.0",
+ "reth-prune-types 2.1.0",
+ "reth-static-file-types 2.1.0",
+ "revm-database-interface 11.0.1",
+ "revm-state 11.0.1",
"thiserror 2.0.18",
]
+[[package]]
+name = "reth-tracing"
+version = "1.11.2"
+source = "git+https://github.com/paradigmxyz/reth?tag=v1.11.2#793a3d5fb3e3413e9ecc9b024a5e26672e61e7c3"
+dependencies = [
+ "clap",
+ "eyre",
+ "rolling-file",
+ "tracing",
+ "tracing-appender",
+ "tracing-journald",
+ "tracing-logfmt",
+ "tracing-samply",
+ "tracing-subscriber 0.3.22",
+]
+
+[[package]]
+name = "reth-trie-common"
+version = "1.11.2"
+source = "git+https://github.com/paradigmxyz/reth?tag=v1.11.2#793a3d5fb3e3413e9ecc9b024a5e26672e61e7c3"
+dependencies = [
+ "alloy-consensus 1.8.3",
+ "alloy-primitives",
+ "alloy-rlp",
+ "alloy-rpc-types-eth 1.8.3",
+ "alloy-trie",
+ "arrayvec",
+ "bytes",
+ "derive_more",
+ "itertools 0.14.0",
+ "nybbles",
+ "reth-codecs 1.11.2",
+ "reth-primitives-traits 1.11.2",
+ "revm-database 10.0.0",
+ "serde",
+]
+
[[package]]
name = "reth-trie-common"
version = "2.1.0"
source = "git+https://github.com/paradigmxyz/reth?rev=7839f3d#7839f3d876b32842b059ca8171242b807ba1fc80"
dependencies = [
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-primitives",
"alloy-rlp",
- "alloy-rpc-types-eth",
- "alloy-serde 2.0.1",
+ "alloy-rpc-types-eth 2.0.4",
+ "alloy-serde 2.0.4",
"alloy-trie",
"arrayvec",
"bytes",
"derive_more",
"itertools 0.14.0",
"nybbles",
- "reth-codecs",
- "reth-primitives-traits",
- "revm-database",
+ "reth-codecs 0.3.0",
+ "reth-primitives-traits 0.3.0",
+ "revm-database 13.0.1",
"serde",
"serde_with",
]
@@ -9564,7 +10349,24 @@ name = "reth-zstd-compressors"
version = "0.3.0"
source = "git+https://github.com/paradigmxyz/reth-core?rev=6b12498#6b12498871bc1b1d42c6dcf28968c271660de8c0"
dependencies = [
- "zstd",
+ "zstd 0.13.3",
+]
+
+[[package]]
+name = "reth-zstd-compressors"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c12fafa33d2f420a9d39249a3e0357b1928d09429f30758b85280409092873b2"
+dependencies = [
+ "zstd 0.13.3",
+]
+
+[[package]]
+name = "reth-zstd-compressors"
+version = "1.11.2"
+source = "git+https://github.com/paradigmxyz/reth?tag=v1.11.2#793a3d5fb3e3413e9ecc9b024a5e26672e61e7c3"
+dependencies = [
+ "zstd 0.13.3",
]
[[package]]
@@ -9573,17 +10375,29 @@ version = "38.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "91202d39dbe8e8d10e9e8f2b76c30da68ecd1d25be69ba6d853ad0d03a3a398a"
dependencies = [
- "revm-bytecode",
+ "revm-bytecode 10.0.0",
"revm-context",
"revm-context-interface",
- "revm-database",
- "revm-database-interface",
+ "revm-database 13.0.1",
+ "revm-database-interface 11.0.1",
"revm-handler",
"revm-inspector",
"revm-interpreter",
"revm-precompile",
- "revm-primitives",
- "revm-state",
+ "revm-primitives 23.0.0",
+ "revm-state 11.0.1",
+]
+
+[[package]]
+name = "revm-bytecode"
+version = "8.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d1e5c1eaa44d39d537f668bc5c3409dc01e5c8be954da6c83370bbdf006457"
+dependencies = [
+ "bitvec",
+ "phf 0.13.1",
+ "revm-primitives 22.1.0",
+ "serde",
]
[[package]]
@@ -9594,7 +10408,7 @@ checksum = "bdbb3a3d735efa94c91f2ef6bf20a35f99a77bc78f3e25bd758336901bdf9661"
dependencies = [
"bitvec",
"phf 0.13.1",
- "revm-primitives",
+ "revm-primitives 23.0.0",
"serde",
]
@@ -9607,11 +10421,11 @@ dependencies = [
"bitvec",
"cfg-if",
"derive-where",
- "revm-bytecode",
+ "revm-bytecode 10.0.0",
"revm-context-interface",
- "revm-database-interface",
- "revm-primitives",
- "revm-state",
+ "revm-database-interface 11.0.1",
+ "revm-primitives 23.0.0",
+ "revm-state 11.0.1",
"serde",
]
@@ -9625,9 +10439,23 @@ dependencies = [
"alloy-eip7702",
"auto_impl",
"either",
- "revm-database-interface",
- "revm-primitives",
- "revm-state",
+ "revm-database-interface 11.0.1",
+ "revm-primitives 23.0.0",
+ "revm-state 11.0.1",
+ "serde",
+]
+
+[[package]]
+name = "revm-database"
+version = "10.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "529528d0b05fe646be86223032c3e77aa8b05caa2a35447d538c55965956a511"
+dependencies = [
+ "alloy-eips 1.8.3",
+ "revm-bytecode 8.0.0",
+ "revm-database-interface 9.0.0",
+ "revm-primitives 22.1.0",
+ "revm-state 9.0.0",
"serde",
]
@@ -9638,13 +10466,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c281a1f11d3bcb8c0bba1199ed6bcb001d1aeb3d4fb366819e14f88723989a4e"
dependencies = [
"alloy-eips 1.8.3",
- "revm-bytecode",
- "revm-database-interface",
- "revm-primitives",
- "revm-state",
+ "revm-bytecode 10.0.0",
+ "revm-database-interface 11.0.1",
+ "revm-primitives 23.0.0",
+ "revm-state 11.0.1",
"serde",
]
+[[package]]
+name = "revm-database-interface"
+version = "9.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7bf93ac5b91347c057610c0d96e923db8c62807e03f036762d03e981feddc1d"
+dependencies = [
+ "auto_impl",
+ "either",
+ "revm-primitives 22.1.0",
+ "revm-state 9.0.0",
+ "serde",
+ "thiserror 2.0.18",
+]
+
[[package]]
name = "revm-database-interface"
version = "11.0.1"
@@ -9653,8 +10495,8 @@ checksum = "d89efb9832a4e3742bb4ded5f7fe5bf905e8860e69427d4dfec153484fc6d304"
dependencies = [
"auto_impl",
"either",
- "revm-primitives",
- "revm-state",
+ "revm-primitives 23.0.0",
+ "revm-state 11.0.1",
"serde",
"thiserror 2.0.18",
]
@@ -9667,14 +10509,14 @@ checksum = "783e903d6922b7f5f9a940d1bb229530502d2924b1aed9d5ca5a94ebf065d460"
dependencies = [
"auto_impl",
"derive-where",
- "revm-bytecode",
+ "revm-bytecode 10.0.0",
"revm-context",
"revm-context-interface",
- "revm-database-interface",
+ "revm-database-interface 11.0.1",
"revm-interpreter",
"revm-precompile",
- "revm-primitives",
- "revm-state",
+ "revm-primitives 23.0.0",
+ "revm-state 11.0.1",
"serde",
]
@@ -9687,11 +10529,11 @@ dependencies = [
"auto_impl",
"either",
"revm-context",
- "revm-database-interface",
+ "revm-database-interface 11.0.1",
"revm-handler",
"revm-interpreter",
- "revm-primitives",
- "revm-state",
+ "revm-primitives 23.0.0",
+ "revm-state 11.0.1",
"serde",
"serde_json",
]
@@ -9703,7 +10545,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "731b682530a732ef9c189ef831589128e2ce34d4a306c956322ae2dffe009715"
dependencies = [
"alloy-primitives",
- "alloy-rpc-types-eth",
+ "alloy-rpc-types-eth 2.0.4",
"alloy-rpc-types-trace",
"alloy-sol-types",
"anstyle",
@@ -9722,10 +10564,10 @@ version = "35.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ece9f41b69658c15d748288a4dbdfc06a63f3ce93d983af440de3f1631dce6a"
dependencies = [
- "revm-bytecode",
+ "revm-bytecode 10.0.0",
"revm-context-interface",
- "revm-primitives",
- "revm-state",
+ "revm-primitives 23.0.0",
+ "revm-state 11.0.1",
"serde",
]
@@ -9748,12 +10590,24 @@ dependencies = [
"k256",
"p256",
"revm-context-interface",
- "revm-primitives",
+ "revm-primitives 23.0.0",
"ripemd",
"secp256k1 0.31.1",
"sha2 0.10.9",
]
+[[package]]
+name = "revm-primitives"
+version = "22.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfb5ce6cf18b118932bcdb7da05cd9c250f2cb9f64131396b55f3fe3537c35"
+dependencies = [
+ "alloy-primitives",
+ "num_enum",
+ "once_cell",
+ "serde",
+]
+
[[package]]
name = "revm-primitives"
version = "23.0.0"
@@ -9766,6 +10620,19 @@ dependencies = [
"serde",
]
+[[package]]
+name = "revm-state"
+version = "9.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "311720d4f0f239b041375e7ddafdbd20032a33b7bae718562ea188e188ed9fd3"
+dependencies = [
+ "alloy-eip7928",
+ "bitflags 2.10.0",
+ "revm-bytecode 8.0.0",
+ "revm-primitives 22.1.0",
+ "serde",
+]
+
[[package]]
name = "revm-state"
version = "11.0.1"
@@ -9773,9 +10640,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c32490ed687dba31c3c882beb8c20408bdd30ef96690d8f145b0ee9a87040bfe"
dependencies = [
"alloy-eip7928",
- "bitflags 2.11.1",
- "revm-bytecode",
- "revm-primitives",
+ "bitflags 2.10.0",
+ "revm-bytecode 10.0.0",
+ "revm-primitives 23.0.0",
"serde",
]
@@ -9803,9 +10670,9 @@ dependencies = [
[[package]]
name = "rgb"
-version = "0.8.53"
+version = "0.8.52"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "47b34b781b31e5d73e9fbc8689c70551fd1ade9a19e3e28cfec8580a79290cc4"
+checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce"
dependencies = [
"bytemuck",
]
@@ -9818,7 +10685,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
dependencies = [
"cc",
"cfg-if",
- "getrandom 0.2.17",
+ "getrandom 0.2.16",
"libc",
"untrusted 0.9.0",
"windows-sys 0.52.0",
@@ -9845,14 +10712,23 @@ dependencies = [
[[package]]
name = "roaring"
-version = "0.11.3"
+version = "0.11.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ba9ce64a8f45d7fc86358410bb1a82e8c987504c0d4900e9141d69a9f26c885"
+checksum = "1dedc5658c6ecb3bdb5ef5f3295bb9253f42dcf3fd1402c03f6b1f7659c3c4a9"
dependencies = [
"bytemuck",
"byteorder",
]
+[[package]]
+name = "rolling-file"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8395b4f860856b740f20a296ea2cd4d823e81a2658cf05ef61be22916026a906"
+dependencies = [
+ "chrono",
+]
+
[[package]]
name = "rpassword"
version = "7.4.0"
@@ -9866,19 +10742,19 @@ dependencies = [
[[package]]
name = "rtoolbox"
-version = "0.0.4"
+version = "0.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "327b72899159dfae8060c51a1f6aebe955245bcd9cc4997eed0f623caea022e4"
+checksum = "a7cc970b249fbe527d6e02e0a227762c9108b2f49d81094fe357ffc6d14d7f6f"
dependencies = [
"libc",
- "windows-sys 0.59.0",
+ "windows-sys 0.52.0",
]
[[package]]
name = "ruint"
-version = "1.17.2"
+version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c141e807189ad38a07276942c6623032d3753c8859c146104ac2e4d68865945a"
+checksum = "a68df0380e5c9d20ce49534f292a36a7514ae21350726efe1865bdb1fa91d278"
dependencies = [
"alloy-rlp",
"arbitrary",
@@ -9894,8 +10770,8 @@ dependencies = [
"parity-scale-codec",
"primitive-types",
"proptest",
- "rand 0.8.6",
- "rand 0.9.4",
+ "rand 0.8.5",
+ "rand 0.9.2",
"rlp",
"ruint-macro",
"serde_core",
@@ -9925,7 +10801,7 @@ version = "0.35.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a22715a5d6deef63c637207afbe68d0c72c3f8d0022d7cf9714c442d6157606b"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"fallible-iterator",
"fallible-streaming-iterator",
"hashlink",
@@ -9935,17 +10811,17 @@ dependencies = [
[[package]]
name = "rustc-demangle"
-version = "0.1.27"
+version = "0.1.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d"
+checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
[[package]]
name = "rustc-hash"
-version = "2.1.2"
+version = "2.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe"
+checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
dependencies = [
- "rand 0.8.6",
+ "rand 0.8.5",
]
[[package]]
@@ -9999,7 +10875,7 @@ version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"errno",
"libc",
"linux-raw-sys",
@@ -10008,9 +10884,9 @@ dependencies = [
[[package]]
name = "rustls"
-version = "0.23.38"
+version = "0.23.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69f9466fb2c14ea04357e91413efb882e2a6d4a406e625449bc0a5d360d53a21"
+checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f"
dependencies = [
"aws-lc-rs",
"log",
@@ -10024,9 +10900,9 @@ dependencies = [
[[package]]
name = "rustls-native-certs"
-version = "0.8.3"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63"
+checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923"
dependencies = [
"openssl-probe",
"rustls-pki-types",
@@ -10036,9 +10912,9 @@ dependencies = [
[[package]]
name = "rustls-pki-types"
-version = "1.14.0"
+version = "1.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd"
+checksum = "21e6f2ab2928ca4291b86736a8bd920a277a399bba1589409d72154ff87c1282"
dependencies = [
"web-time",
"zeroize",
@@ -10046,13 +10922,13 @@ dependencies = [
[[package]]
name = "rustls-platform-verifier"
-version = "0.6.2"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784"
+checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0"
dependencies = [
"core-foundation 0.10.1",
"core-foundation-sys",
- "jni 0.21.1",
+ "jni 0.22.4",
"log",
"once_cell",
"rustls",
@@ -10073,9 +10949,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f"
[[package]]
name = "rustls-webpki"
-version = "0.103.13"
+version = "0.103.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e"
+checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52"
dependencies = [
"aws-lc-rs",
"ring",
@@ -10107,7 +10983,7 @@ version = "17.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e902948a25149d50edc1a8e0141aad50f54e22ba83ff988cf8f7c9ef07f50564"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"cfg-if",
"clipboard-win",
"fd-lock",
@@ -10118,16 +10994,16 @@ dependencies = [
"nix 0.30.1",
"radix_trie",
"unicode-segmentation",
- "unicode-width 0.2.2",
+ "unicode-width 0.2.0",
"utf8parse",
"windows-sys 0.60.2",
]
[[package]]
name = "ryu"
-version = "1.0.23"
+version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
+checksum = "62049b2877bf12821e8f9ad256ee38fdc31db7387ec2d3b3f403024de2034aea"
[[package]]
name = "ryu-js"
@@ -10164,9 +11040,9 @@ dependencies = [
[[package]]
name = "schannel"
-version = "0.1.29"
+version = "0.1.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939"
+checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1"
dependencies = [
"windows-sys 0.61.2",
]
@@ -10185,9 +11061,9 @@ dependencies = [
[[package]]
name = "schemars"
-version = "1.2.1"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc"
+checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289"
dependencies = [
"dyn-clone",
"ref-cast",
@@ -10198,9 +11074,9 @@ dependencies = [
[[package]]
name = "schemars_derive"
-version = "1.2.1"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d115b50f4aaeea07e79c1912f645c7513d81715d0420f8bc77a18c6260b307f"
+checksum = "301858a4023d78debd2353c7426dc486001bddc91ae31a76fb1f55132f7e2633"
dependencies = [
"proc-macro2",
"quote",
@@ -10254,7 +11130,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252"
dependencies = [
"bitcoin_hashes",
- "rand 0.8.6",
+ "rand 0.8.5",
"secp256k1-sys 0.10.1",
"serde",
]
@@ -10266,7 +11142,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c3c81b43dc2d8877c216a3fccf76677ee1ebccd429566d3e67447290d0c42b2"
dependencies = [
"bitcoin_hashes",
- "rand 0.9.4",
+ "rand 0.9.2",
"secp256k1-sys 0.11.0",
]
@@ -10301,11 +11177,11 @@ dependencies = [
[[package]]
name = "security-framework"
-version = "3.7.0"
+version = "3.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d"
+checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"core-foundation 0.10.1",
"core-foundation-sys",
"libc",
@@ -10314,9 +11190,9 @@ dependencies = [
[[package]]
name = "security-framework-sys"
-version = "2.17.0"
+version = "2.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3"
+checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0"
dependencies = [
"core-foundation-sys",
"libc",
@@ -10423,9 +11299,9 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.149"
+version = "1.0.150"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
+checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9"
dependencies = [
"indexmap 2.14.0",
"itoa",
@@ -10480,9 +11356,9 @@ dependencies = [
[[package]]
name = "serde_with"
-version = "3.18.0"
+version = "3.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f"
+checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7"
dependencies = [
"base64 0.22.1",
"chrono",
@@ -10490,7 +11366,7 @@ dependencies = [
"indexmap 1.9.3",
"indexmap 2.14.0",
"schemars 0.9.0",
- "schemars 1.2.1",
+ "schemars 1.1.0",
"serde_core",
"serde_json",
"serde_with_macros",
@@ -10499,11 +11375,11 @@ dependencies = [
[[package]]
name = "serde_with_macros"
-version = "3.18.0"
+version = "3.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3db8978e608f1fe7357e211969fd9abdcae80bac1ba7a3369bb7eb6b404eb65"
+checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c"
dependencies = [
- "darling 0.23.0",
+ "darling 0.21.3",
"proc-macro2",
"quote",
"syn 2.0.117",
@@ -10562,7 +11438,7 @@ checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4"
dependencies = [
"cfg-if",
"cpufeatures 0.3.0",
- "digest 0.11.2",
+ "digest 0.11.3",
]
[[package]]
@@ -10577,9 +11453,9 @@ dependencies = [
[[package]]
name = "sha3-asm"
-version = "0.1.6"
+version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59cbb88c189d6352cc8ae96a39d19c7ecad8f7330b29461187f2587fdc2988d5"
+checksum = "9f3f15d4e239ebe08413eed880e0f9b5af4b40ee0472543320efa91d488e96a7"
dependencies = [
"cc",
"cfg-if",
@@ -10594,6 +11470,15 @@ dependencies = [
"lazy_static",
]
+[[package]]
+name = "shared-local-state"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a50ccb2f45251772ed15abfd1e5f10a305288187b1582ab2e4295b29bbb4929"
+dependencies = [
+ "parking_lot",
+]
+
[[package]]
name = "shell-words"
version = "1.1.1"
@@ -10629,11 +11514,10 @@ dependencies = [
[[package]]
name = "signal-hook-registry"
-version = "1.4.8"
+version = "1.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b"
+checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad"
dependencies = [
- "errno",
"libc",
]
@@ -10649,9 +11533,9 @@ dependencies = [
[[package]]
name = "simd-adler32"
-version = "0.3.9"
+version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214"
+checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2"
[[package]]
name = "simd_cesu8"
@@ -10691,9 +11575,9 @@ dependencies = [
[[package]]
name = "simple_asn1"
-version = "0.6.4"
+version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d585997b0ac10be3c5ee635f1bab02d512760d14b7c468801ac8a01d9ae5f1d"
+checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb"
dependencies = [
"num-bigint",
"num-traits",
@@ -10703,15 +11587,42 @@ dependencies = [
[[package]]
name = "siphasher"
-version = "1.0.2"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e"
+checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
[[package]]
name = "slab"
-version = "0.4.12"
+version = "0.4.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
+checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
+
+[[package]]
+name = "sled"
+version = "1.0.0-alpha.124"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "863ddb1887c62f8dad18635f6096876c648923e61962057058f92228fee2308f"
+dependencies = [
+ "bincode",
+ "cache-advisor",
+ "concurrent-map",
+ "crc32fast",
+ "crossbeam-channel",
+ "crossbeam-queue",
+ "ebr",
+ "fault-injection",
+ "fnv",
+ "fs2",
+ "inline-array",
+ "log",
+ "pagetable",
+ "parking_lot",
+ "rayon",
+ "serde",
+ "stack-map",
+ "tempdir",
+ "zstd 0.12.4",
+]
[[package]]
name = "small_btree"
@@ -10745,11 +11656,11 @@ checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b"
[[package]]
name = "snapbox"
-version = "0.6.24"
+version = "0.6.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c1abc378119f77310836665f8523018532cf7e3faeb3b10b01da5a7321bf8e1"
+checksum = "96fa1ce81be900d083b30ec2d481e6658c2acfaa2cfc7be45ccc2cc1b820edb3"
dependencies = [
- "anstream 0.6.21",
+ "anstream",
"anstyle",
"anstyle-svg",
"normalize-line-endings",
@@ -10766,17 +11677,17 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b750c344002d7cc69afb9da00ebd9b5c0f8ac2eb7d115d9d45d5b5f47718d74"
dependencies = [
- "anstream 0.6.21",
+ "anstream",
]
[[package]]
name = "socket2"
-version = "0.6.3"
+version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
+checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881"
dependencies = [
"libc",
- "windows-sys 0.61.2",
+ "windows-sys 0.60.2",
]
[[package]]
@@ -10838,8 +11749,8 @@ name = "solar-interface"
version = "0.1.8"
source = "git+https://github.com/paradigmxyz/solar?rev=530f129#530f129b1b2d7138df973dd71d2fc1e592b593d7"
dependencies = [
- "annotate-snippets 0.12.15",
- "anstream 0.6.21",
+ "annotate-snippets 0.12.5",
+ "anstream",
"anstyle",
"derive_more",
"dunce",
@@ -10858,7 +11769,7 @@ dependencies = [
"solar-macros",
"thiserror 2.0.18",
"tracing",
- "unicode-width 0.2.2",
+ "unicode-width 0.2.0",
]
[[package]]
@@ -10877,7 +11788,7 @@ version = "0.1.8"
source = "git+https://github.com/paradigmxyz/solar?rev=530f129#530f129b1b2d7138df973dd71d2fc1e592b593d7"
dependencies = [
"alloy-primitives",
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"bumpalo",
"itertools 0.12.1",
"memchr",
@@ -10899,7 +11810,7 @@ source = "git+https://github.com/paradigmxyz/solar?rev=530f129#530f129b1b2d7138d
dependencies = [
"alloy-json-abi",
"alloy-primitives",
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"bumpalo",
"derive_more",
"either",
@@ -10954,7 +11865,7 @@ dependencies = [
"path-slash",
"rayon",
"regex",
- "reqwest 0.12.28",
+ "reqwest 0.12.26",
"sanitize-filename",
"semver 1.0.28",
"serde",
@@ -10963,7 +11874,7 @@ dependencies = [
"thiserror 2.0.18",
"tokio",
"toml_edit 0.23.10+spec-1.0.0",
- "uuid 1.23.1",
+ "uuid 1.19.0",
"zip",
"zip-extract",
]
@@ -11001,6 +11912,15 @@ version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
+[[package]]
+name = "stack-map"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b49d6d36fee60faad91e23603db2356677b58ec2429237b39d5c60c26868f37c"
+dependencies = [
+ "serde",
+]
+
[[package]]
name = "static_assertions"
version = "1.1.0"
@@ -11099,15 +12019,15 @@ checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142"
[[package]]
name = "sval"
-version = "2.18.0"
+version = "2.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2eb9318255ebd817902d7e279d8f8e39b35b1b9954decd5eb9ea0e30e5fd2b6a"
+checksum = "502b8906c4736190684646827fbab1e954357dfe541013bbd7994d033d53a1ca"
[[package]]
name = "sval_buffer"
-version = "2.18.0"
+version = "2.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12571299185e653fdb0fbfe36cd7f6529d39d4e747a60b15a3f34574b7b97c61"
+checksum = "c4b854348b15b6c441bdd27ce9053569b016a0723eab2d015b1fd8e6abe4f708"
dependencies = [
"sval",
"sval_ref",
@@ -11115,18 +12035,18 @@ dependencies = [
[[package]]
name = "sval_dynamic"
-version = "2.18.0"
+version = "2.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39526f24e997706c0de7f03fb7371f7f5638b66a504ded508e20ad173d0a3677"
+checksum = "a0bd9e8b74410ddad37c6962587c5f9801a2caadba9e11f3f916ee3f31ae4a1f"
dependencies = [
"sval",
]
[[package]]
name = "sval_fmt"
-version = "2.18.0"
+version = "2.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "933dd3bb26965d682280fcc49400ac2a05036f4ee1e6dbd61bf8402d5a5c3a54"
+checksum = "6fe17b8deb33a9441280b4266c2d257e166bafbaea6e66b4b34ca139c91766d9"
dependencies = [
"itoa",
"ryu",
@@ -11135,9 +12055,9 @@ dependencies = [
[[package]]
name = "sval_json"
-version = "2.18.0"
+version = "2.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a0cda08f6d5c9948024a6551077557b1fdcc3880ff2f20ae839667d2ec2d87ed"
+checksum = "854addb048a5bafb1f496c98e0ab5b9b581c3843f03ca07c034ae110d3b7c623"
dependencies = [
"itoa",
"ryu",
@@ -11146,9 +12066,9 @@ dependencies = [
[[package]]
name = "sval_nested"
-version = "2.18.0"
+version = "2.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "88d49d5e6c1f9fd0e53515819b03a97ca4eb1bff5c8ee097c43391c09ecfb19f"
+checksum = "96cf068f482108ff44ae8013477cb047a1665d5f1a635ad7cf79582c1845dce9"
dependencies = [
"sval",
"sval_buffer",
@@ -11157,18 +12077,18 @@ dependencies = [
[[package]]
name = "sval_ref"
-version = "2.18.0"
+version = "2.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14f876c5a78405375b4e19cbb9554407513b59c93dea12dc6a4af4e1d30899ca"
+checksum = "ed02126365ffe5ab8faa0abd9be54fbe68d03d607cd623725b0a71541f8aaa6f"
dependencies = [
"sval",
]
[[package]]
name = "sval_serde"
-version = "2.18.0"
+version = "2.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f9ccd3b7f7200239a655e517dd3fd48d960b9111ad24bd6a5e055bef17607c7"
+checksum = "a263383c6aa2076c4ef6011d3bae1b356edf6ea2613e3d8e8ebaa7b57dd707d5"
dependencies = [
"serde_core",
"sval",
@@ -11177,13 +12097,13 @@ dependencies = [
[[package]]
name = "svm-rs"
-version = "0.5.24"
+version = "0.5.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "230df06b463c7251e4d1b39b1b3e6f25a9b3a42630179053a1e5f919e6e15534"
+checksum = "4572dd9845e37ca0293acb5fe591a7f61b51f1b7b62d3dc6fb8e99e2664f3755"
dependencies = [
"const-hex",
"dirs",
- "reqwest 0.13.2",
+ "reqwest 0.13.3",
"semver 1.0.28",
"serde",
"serde_json",
@@ -11196,9 +12116,9 @@ dependencies = [
[[package]]
name = "svm-rs-builds"
-version = "0.5.24"
+version = "0.5.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b271921143e5b12947a526de464db02b00363919d582a7ea712374840f928328"
+checksum = "c1ebe77b200f965e8dbec3ef1d8337e974179ca1ecaa9fc28f67288d6b438159"
dependencies = [
"const-hex",
"semver 1.0.28",
@@ -11206,6 +12126,12 @@ dependencies = [
"svm-rs",
]
+[[package]]
+name = "symlink"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7973cce6668464ea31f176d85b13c7ab3bba2cb3b77a2ed26abd7801688010a"
+
[[package]]
name = "syn"
version = "1.0.109"
@@ -11260,13 +12186,27 @@ dependencies = [
"syn 2.0.117",
]
+[[package]]
+name = "sysinfo"
+version = "0.38.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92ab6a2f8bfe508deb3c6406578252e491d299cbbf3bc0529ecc3313aee4a52f"
+dependencies = [
+ "libc",
+ "memchr",
+ "ntapi",
+ "objc2-core-foundation",
+ "objc2-io-kit",
+ "windows 0.62.2",
+]
+
[[package]]
name = "system-configuration"
-version = "0.7.0"
+version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b"
+checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"core-foundation 0.9.4",
"system-configuration-sys",
]
@@ -11293,6 +12233,16 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+[[package]]
+name = "tempdir"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
+dependencies = [
+ "rand 0.4.6",
+ "remove_dir_all",
+]
+
[[package]]
name = "tempfile"
version = "3.27.0"
@@ -11311,14 +12261,14 @@ name = "tempo-alloy"
version = "1.6.0"
source = "git+https://github.com/tempoxyz/tempo?rev=1e5a82dff207e2cbd6cecdcfb8ff3cd2e39baa69#1e5a82dff207e2cbd6cecdcfb8ff3cd2e39baa69"
dependencies = [
- "alloy-consensus",
+ "alloy-consensus 2.0.4",
"alloy-contract",
- "alloy-eips 2.0.1",
+ "alloy-eips 2.0.4",
"alloy-network",
"alloy-primitives",
"alloy-provider",
- "alloy-rpc-types-eth",
- "alloy-serde 2.0.1",
+ "alloy-rpc-types-eth 2.0.4",
+ "alloy-serde 2.0.4",
"alloy-signer-local",
"alloy-sol-types",
"alloy-transport",
@@ -11338,9 +12288,9 @@ name = "tempo-chainspec"
version = "1.5.3"
source = "git+https://github.com/tempoxyz/tempo?rev=1e5a82dff207e2cbd6cecdcfb8ff3cd2e39baa69#1e5a82dff207e2cbd6cecdcfb8ff3cd2e39baa69"
dependencies = [
- "alloy-eips 2.0.1",
- "alloy-evm",
- "alloy-genesis",
+ "alloy-eips 2.0.4",
+ "alloy-evm 0.33.3",
+ "alloy-genesis 2.0.4",
"alloy-hardforks",
"alloy-primitives",
"once_cell",
@@ -11357,14 +12307,14 @@ name = "tempo-consensus"
version = "1.6.0"
source = "git+https://github.com/tempoxyz/tempo?rev=1e5a82dff207e2cbd6cecdcfb8ff3cd2e39baa69#1e5a82dff207e2cbd6cecdcfb8ff3cd2e39baa69"
dependencies = [
- "alloy-consensus",
- "alloy-evm",
+ "alloy-consensus 2.0.4",
+ "alloy-evm 0.33.3",
"alloy-primitives",
"reth-chainspec",
"reth-consensus",
"reth-consensus-common",
"reth-ethereum-consensus",
- "reth-primitives-traits",
+ "reth-primitives-traits 0.3.0",
"tempo-chainspec",
"tempo-primitives",
"thiserror 2.0.18",
@@ -11386,8 +12336,8 @@ name = "tempo-evm"
version = "1.6.0"
source = "git+https://github.com/tempoxyz/tempo?rev=1e5a82dff207e2cbd6cecdcfb8ff3cd2e39baa69#1e5a82dff207e2cbd6cecdcfb8ff3cd2e39baa69"
dependencies = [
- "alloy-consensus",
- "alloy-evm",
+ "alloy-consensus 2.0.4",
+ "alloy-evm 0.33.3",
"alloy-primitives",
"alloy-rlp",
"commonware-codec",
@@ -11397,7 +12347,7 @@ dependencies = [
"reth-consensus",
"reth-evm",
"reth-evm-ethereum",
- "reth-primitives-traits",
+ "reth-primitives-traits 0.3.0",
"reth-revm",
"tempo-chainspec",
"tempo-consensus",
@@ -11414,7 +12364,7 @@ version = "1.6.0"
source = "git+https://github.com/tempoxyz/tempo?rev=1e5a82dff207e2cbd6cecdcfb8ff3cd2e39baa69#1e5a82dff207e2cbd6cecdcfb8ff3cd2e39baa69"
dependencies = [
"alloy",
- "alloy-evm",
+ "alloy-evm 0.33.3",
"commonware-codec",
"commonware-cryptography",
"derive_more",
@@ -11444,13 +12394,13 @@ name = "tempo-primitives"
version = "1.6.0"
source = "git+https://github.com/tempoxyz/tempo?rev=1e5a82dff207e2cbd6cecdcfb8ff3cd2e39baa69#1e5a82dff207e2cbd6cecdcfb8ff3cd2e39baa69"
dependencies = [
- "alloy-consensus",
- "alloy-eips 2.0.1",
+ "alloy-consensus 2.0.4",
+ "alloy-eips 2.0.4",
"alloy-network",
"alloy-primitives",
"alloy-rlp",
- "alloy-rpc-types-eth",
- "alloy-serde 2.0.1",
+ "alloy-rpc-types-eth 2.0.4",
+ "alloy-serde 2.0.4",
"aws-lc-rs",
"base64 0.22.1",
"derive_more",
@@ -11458,10 +12408,10 @@ dependencies = [
"modular-bitfield",
"once_cell",
"p256",
- "reth-codecs",
- "reth-db-api",
- "reth-ethereum-primitives",
- "reth-primitives-traits",
+ "reth-codecs 0.3.0",
+ "reth-db-api 2.1.0",
+ "reth-ethereum-primitives 2.1.0",
+ "reth-primitives-traits 0.3.0",
"reth-rpc-convert",
"revm",
"serde",
@@ -11475,8 +12425,8 @@ name = "tempo-revm"
version = "1.6.0"
source = "git+https://github.com/tempoxyz/tempo?rev=1e5a82dff207e2cbd6cecdcfb8ff3cd2e39baa69#1e5a82dff207e2cbd6cecdcfb8ff3cd2e39baa69"
dependencies = [
- "alloy-consensus",
- "alloy-evm",
+ "alloy-consensus 2.0.4",
+ "alloy-evm 0.33.3",
"alloy-primitives",
"alloy-sol-types",
"auto_impl",
@@ -11495,12 +12445,11 @@ dependencies = [
[[package]]
name = "tendril"
-version = "0.4.3"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
+checksum = "c4790fc369d5a530f4b544b094e31388b9b3a37c0f4652ade4505945f5660d24"
dependencies = [
- "futf",
- "mac",
+ "new_debug_unreachable",
"utf-8",
]
@@ -11515,12 +12464,12 @@ dependencies = [
[[package]]
name = "terminal_size"
-version = "0.4.4"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "230a1b821ccbd75b185820a1f1ff7b14d21da1e442e22c0863ea5f08771a8874"
+checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0"
dependencies = [
"rustix",
- "windows-sys 0.59.0",
+ "windows-sys 0.60.2",
]
[[package]]
@@ -11549,14 +12498,14 @@ checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057"
dependencies = [
"smawk",
"unicode-linebreak",
- "unicode-width 0.2.2",
+ "unicode-width 0.2.0",
]
[[package]]
name = "thin-vec"
-version = "0.2.16"
+version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "259cdf8ed4e4aca6f1e9d011e10bd53f524a2d0637d7b28450f6c64ac298c4c6"
+checksum = "144f754d318415ac792f9d69fc87abbbfc043ce2ef041c60f16ad828f638717d"
[[package]]
name = "thiserror"
@@ -11644,6 +12593,7 @@ checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c"
dependencies = [
"deranged",
"itoa",
+ "js-sys",
"libc",
"num-conv",
"num_threads",
@@ -11671,9 +12621,9 @@ dependencies = [
[[package]]
name = "tinystr"
-version = "0.8.3"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d"
+checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869"
dependencies = [
"displaydoc",
"serde_core",
@@ -11682,9 +12632,9 @@ dependencies = [
[[package]]
name = "tinyvec"
-version = "1.11.0"
+version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3"
+checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa"
dependencies = [
"tinyvec_macros",
]
@@ -11697,9 +12647,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
-version = "1.52.1"
+version = "1.50.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6"
+checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d"
dependencies = [
"bytes",
"libc",
@@ -11714,9 +12664,9 @@ dependencies = [
[[package]]
name = "tokio-macros"
-version = "2.7.0"
+version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496"
+checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
dependencies = [
"proc-macro2",
"quote",
@@ -11735,9 +12685,9 @@ dependencies = [
[[package]]
name = "tokio-stream"
-version = "0.1.18"
+version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70"
+checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047"
dependencies = [
"futures-core",
"pin-project-lite",
@@ -11773,23 +12723,11 @@ dependencies = [
"webpki-roots 0.26.11",
]
-[[package]]
-name = "tokio-tungstenite"
-version = "0.29.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f72a05e828585856dacd553fba484c242c46e391fb0e58917c942ee9202915c"
-dependencies = [
- "futures-util",
- "log",
- "tokio",
- "tungstenite 0.29.0",
-]
-
[[package]]
name = "tokio-util"
-version = "0.7.18"
+version = "0.7.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098"
+checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594"
dependencies = [
"bytes",
"futures-core",
@@ -11800,9 +12738,9 @@ dependencies = [
[[package]]
name = "toml"
-version = "0.9.12+spec-1.1.0"
+version = "0.9.10+spec-1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863"
+checksum = "0825052159284a1a8b4d6c0c86cbc801f2da5afd2b225fa548c72f2e74002f48"
dependencies = [
"indexmap 2.14.0",
"serde_core",
@@ -11810,7 +12748,22 @@ dependencies = [
"toml_datetime 0.7.5+spec-1.1.0",
"toml_parser",
"toml_writer",
- "winnow 0.7.15",
+ "winnow 0.7.14",
+]
+
+[[package]]
+name = "toml"
+version = "1.1.2+spec-1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee"
+dependencies = [
+ "indexmap 2.14.0",
+ "serde_core",
+ "serde_spanned",
+ "toml_datetime 1.1.1+spec-1.1.0",
+ "toml_parser",
+ "toml_writer",
+ "winnow 1.0.3",
]
[[package]]
@@ -11843,20 +12796,20 @@ dependencies = [
"toml_datetime 0.7.5+spec-1.1.0",
"toml_parser",
"toml_writer",
- "winnow 0.7.15",
+ "winnow 0.7.14",
]
[[package]]
name = "toml_edit"
-version = "0.24.1+spec-1.1.0"
+version = "0.24.0+spec-1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "01f2eadbbc6b377a847be05f60791ef1058d9f696ecb51d2c07fe911d8569d8e"
+checksum = "8c740b185920170a6d9191122cafef7010bd6270a3824594bff6784c04d7f09e"
dependencies = [
"indexmap 2.14.0",
"toml_datetime 0.7.5+spec-1.1.0",
"toml_parser",
"toml_writer",
- "winnow 0.7.15",
+ "winnow 0.7.14",
]
[[package]]
@@ -11866,9 +12819,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b"
dependencies = [
"indexmap 2.14.0",
+ "serde_core",
+ "serde_spanned",
"toml_datetime 1.1.1+spec-1.1.0",
"toml_parser",
- "winnow 1.0.1",
+ "winnow 1.0.3",
]
[[package]]
@@ -11877,7 +12832,7 @@ version = "1.1.2+spec-1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526"
dependencies = [
- "winnow 1.0.1",
+ "winnow 1.0.3",
]
[[package]]
@@ -11888,9 +12843,9 @@ checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db"
[[package]]
name = "tonic"
-version = "0.14.5"
+version = "0.14.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fec7c61a0695dc1887c1b53952990f3ad2e3a31453e1f49f10e75424943a93ec"
+checksum = "ac2a5518c70fa84342385732db33fb3f44bc4cc748936eb5833d2df34d6445ef"
dependencies = [
"async-trait",
"axum",
@@ -11914,17 +12869,17 @@ dependencies = [
"tower-layer",
"tower-service",
"tracing",
- "webpki-roots 1.0.7",
+ "webpki-roots 1.0.4",
]
[[package]]
name = "tonic-prost"
-version = "0.14.5"
+version = "0.14.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a55376a0bbaa4975a3f10d009ad763d8f4108f067c7c2e74f3001fb49778d309"
+checksum = "50849f68853be452acf590cde0b146665b8d507b3b8af17261df47e02c209ea0"
dependencies = [
"bytes",
- "prost 0.14.3",
+ "prost 0.14.1",
"tonic",
]
@@ -11936,9 +12891,9 @@ checksum = "ea68304e134ecd095ac6c3574494fc62b909f416c4fca77e440530221e549d3d"
[[package]]
name = "tower"
-version = "0.5.3"
+version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4"
+checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
dependencies = [
"futures-core",
"futures-util",
@@ -11960,7 +12915,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8"
dependencies = [
"async-compression",
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"bytes",
"futures-core",
"futures-util",
@@ -12006,6 +12961,19 @@ dependencies = [
"tracing-core",
]
+[[package]]
+name = "tracing-appender"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "050686193eb999b4bb3bc2acfa891a13da00f79734704c4b8b4ef1a10b368a3c"
+dependencies = [
+ "crossbeam-channel",
+ "symlink",
+ "thiserror 2.0.18",
+ "time",
+ "tracing-subscriber 0.3.22",
+]
+
[[package]]
name = "tracing-attributes"
version = "0.1.31"
@@ -12034,7 +13002,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b1581020d7a273442f5b45074a6a57d5757ad0a47dac0e9f0bd57b81936f3db"
dependencies = [
"tracing",
- "tracing-subscriber 0.3.23",
+ "tracing-subscriber 0.3.22",
+]
+
+[[package]]
+name = "tracing-journald"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d3a81ed245bfb62592b1e2bc153e77656d94ee6a0497683a65a12ccaf2438d0"
+dependencies = [
+ "libc",
+ "tracing-core",
+ "tracing-subscriber 0.3.22",
]
[[package]]
@@ -12048,6 +13027,44 @@ dependencies = [
"tracing-core",
]
+[[package]]
+name = "tracing-logfmt"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b1f47d22deb79c3f59fcf2a1f00f60cbdc05462bf17d1cd356c1fefa3f444bd"
+dependencies = [
+ "time",
+ "tracing",
+ "tracing-core",
+ "tracing-subscriber 0.3.22",
+]
+
+[[package]]
+name = "tracing-samply"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c175f7ecc002b6ef04776a39f440503e4e788790ddbdbfac8259b7a069526334"
+dependencies = [
+ "cfg-if",
+ "itoa",
+ "libc",
+ "mach2",
+ "memmap2",
+ "smallvec",
+ "tracing-core",
+ "tracing-subscriber 0.3.22",
+]
+
+[[package]]
+name = "tracing-serde"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1"
+dependencies = [
+ "serde",
+ "tracing-core",
+]
+
[[package]]
name = "tracing-subscriber"
version = "0.2.25"
@@ -12059,20 +13076,23 @@ dependencies = [
[[package]]
name = "tracing-subscriber"
-version = "0.3.23"
+version = "0.3.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319"
+checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e"
dependencies = [
"matchers",
"nu-ansi-term",
"once_cell",
"regex-automata",
+ "serde",
+ "serde_json",
"sharded-slab",
"smallvec",
"thread_local",
"tracing",
"tracing-core",
"tracing-log",
+ "tracing-serde",
]
[[package]]
@@ -12082,15 +13102,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0eaa1852afa96e0fe9e44caa53dc0bd2d9d05e0f2611ce09f97f8677af56e4ba"
dependencies = [
"tracing-core",
- "tracing-subscriber 0.3.23",
+ "tracing-subscriber 0.3.22",
"tracy-client",
]
[[package]]
name = "tracy-client"
-version = "0.18.4"
+version = "0.18.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4f6fc3baeac5d86ab90c772e9e30620fc653bf1864295029921a15ef478e6a5"
+checksum = "91d722a05fe49b31fef971c4732a7d4aa6a18283d9ba46abddab35f484872947"
dependencies = [
"loom",
"once_cell",
@@ -12100,9 +13120,9 @@ dependencies = [
[[package]]
name = "tracy-client-sys"
-version = "0.28.0"
+version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5f7c95348f20c1c913d72157b3c6dee6ea3e30b3d19502c5a7f6d3f160dacbf"
+checksum = "2fb391ac70462b3097a755618fbf9c8f95ecc1eb379a414f7b46f202ed10db1f"
dependencies = [
"cc",
"windows-targets 0.52.6",
@@ -12139,7 +13159,7 @@ dependencies = [
"http 1.4.0",
"httparse",
"log",
- "rand 0.9.4",
+ "rand 0.9.2",
"sha1",
"thiserror 2.0.18",
"utf-8",
@@ -12156,7 +13176,7 @@ dependencies = [
"http 1.4.0",
"httparse",
"log",
- "rand 0.9.4",
+ "rand 0.9.2",
"rustls",
"rustls-pki-types",
"sha1",
@@ -12164,22 +13184,6 @@ dependencies = [
"utf-8",
]
-[[package]]
-name = "tungstenite"
-version = "0.29.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8"
-dependencies = [
- "bytes",
- "data-encoding",
- "http 1.4.0",
- "httparse",
- "log",
- "rand 0.9.4",
- "sha1",
- "thiserror 2.0.18",
-]
-
[[package]]
name = "turnkey_api_key_stamper"
version = "0.6.2"
@@ -12205,7 +13209,7 @@ dependencies = [
"mime",
"prost 0.12.6",
"prost-types 0.12.6",
- "reqwest 0.12.28",
+ "reqwest 0.12.26",
"serde",
"serde_json",
"serde_with",
@@ -12222,9 +13226,9 @@ checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c"
[[package]]
name = "typenum"
-version = "1.19.0"
+version = "1.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
+checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de"
[[package]]
name = "ucd-trie"
@@ -12287,9 +13291,9 @@ dependencies = [
[[package]]
name = "unicase"
-version = "2.9.0"
+version = "2.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142"
+checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
[[package]]
name = "unicode-bidi"
@@ -12299,9 +13303,9 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5"
[[package]]
name = "unicode-ident"
-version = "1.0.24"
+version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
+checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
[[package]]
name = "unicode-joining-type"
@@ -12326,9 +13330,9 @@ dependencies = [
[[package]]
name = "unicode-segmentation"
-version = "1.13.2"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c"
+checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
[[package]]
name = "unicode-truncate"
@@ -12338,7 +13342,7 @@ checksum = "16b380a1238663e5f8a691f9039c73e1cdae598a30e9855f541d29b08b53e9a5"
dependencies = [
"itertools 0.14.0",
"unicode-segmentation",
- "unicode-width 0.2.2",
+ "unicode-width 0.2.0",
]
[[package]]
@@ -12349,9 +13353,9 @@ checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
[[package]]
name = "unicode-width"
-version = "0.2.2"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
+checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd"
[[package]]
name = "unicode-xid"
@@ -12389,15 +13393,14 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
[[package]]
name = "url"
-version = "2.5.8"
+version = "2.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"
+checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
dependencies = [
"form_urlencoded",
"idna",
"percent-encoding",
"serde",
- "serde_derive",
]
[[package]]
@@ -12442,17 +13445,17 @@ version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
dependencies = [
- "getrandom 0.2.17",
+ "getrandom 0.2.16",
"serde",
]
[[package]]
name = "uuid"
-version = "1.23.1"
+version = "1.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76"
+checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a"
dependencies = [
- "getrandom 0.4.2",
+ "getrandom 0.3.4",
"js-sys",
"serde_core",
"wasm-bindgen",
@@ -12508,9 +13511,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
[[package]]
name = "vergen"
-version = "10.0.0-beta.6"
+version = "10.0.0-beta.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "174a690eb3293a5666442b0738d080df9ea6b9e03782bbe78875c89ff914a77c"
+checksum = "2d7cb4a83971db3f6ae36f0aa41eaf5985d2e2b469581fa755c132f9c2a1ec89"
dependencies = [
"anyhow",
"bon",
@@ -12521,9 +13524,9 @@ dependencies = [
[[package]]
name = "vergen-gitcl"
-version = "10.0.0-beta.6"
+version = "10.0.0-beta.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f628f4acc90a5c1a8136495eaf5f9ef94e03c174d6fb2e6de691bc58fc721ee"
+checksum = "bba14c9676943b2899cea2ed7ea194b89b3d13564a3c93a61882a978b123a41c"
dependencies = [
"anyhow",
"bon",
@@ -12535,9 +13538,9 @@ dependencies = [
[[package]]
name = "vergen-lib"
-version = "10.0.0-beta.6"
+version = "10.0.0-beta.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "390d0442b660baedd7a6f60d2af01bd8967e0d7fe69cd15e13c82c811d82b709"
+checksum = "fb684e6d170ef15a9b3c20561779a50ba8c806f8acdaff47c0a2c5c4c6cadd43"
dependencies = [
"anyhow",
"bon",
@@ -12602,11 +13605,11 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
name = "wasip2"
-version = "1.0.2+wasi-0.2.9"
+version = "1.0.1+wasi-0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5"
+checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
dependencies = [
- "wit-bindgen",
+ "wit-bindgen 0.46.0",
]
[[package]]
@@ -12615,14 +13618,14 @@ version = "0.4.0+wasi-0.3.0-rc-2026-01-06"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5"
dependencies = [
- "wit-bindgen",
+ "wit-bindgen 0.51.0",
]
[[package]]
name = "wasm-bindgen"
-version = "0.2.118"
+version = "0.2.122"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89"
+checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409"
dependencies = [
"cfg-if",
"once_cell",
@@ -12633,9 +13636,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-futures"
-version = "0.4.68"
+version = "0.4.72"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f371d383f2fb139252e0bfac3b81b265689bf45b6874af544ffa4c975ac1ebf8"
+checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -12643,9 +13646,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.118"
+version = "0.2.122"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed"
+checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -12653,9 +13656,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.118"
+version = "0.2.122"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904"
+checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e"
dependencies = [
"bumpalo",
"proc-macro2",
@@ -12666,9 +13669,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.118"
+version = "0.2.122"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129"
+checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437"
dependencies = [
"unicode-ident",
]
@@ -12727,7 +13730,7 @@ version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"hashbrown 0.15.5",
"indexmap 2.14.0",
"semver 1.0.28",
@@ -12749,14 +13752,13 @@ dependencies = [
[[package]]
name = "watchexec"
-version = "8.2.0"
+version = "8.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3de3c4a47a75176b13fc7b3f421a80a55b13cab5b3200547774f9b25d43a79a0"
+checksum = "bc35794a21139060aca512393e9b1a225fe48fc11edee65c84d6d76b25a53331"
dependencies = [
"async-priority-channel",
"atomic-take",
"futures",
- "libc",
"miette",
"normalize-path",
"notify",
@@ -12766,14 +13768,13 @@ dependencies = [
"watchexec-events",
"watchexec-signals",
"watchexec-supervisor",
- "windows-sys 0.59.0",
]
[[package]]
name = "watchexec-events"
-version = "6.1.0"
+version = "6.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad87c046fa1050d22100e7d234db2cbf6ffd020b0ae2deff4bef6faa8f71ac44"
+checksum = "9c4a8973a20c7d30198a12272519163168a9ba8b687693ec9d1f027b75b860d1"
dependencies = [
"notify-types",
"watchexec-signals",
@@ -12781,9 +13782,9 @@ dependencies = [
[[package]]
name = "watchexec-signals"
-version = "5.0.1"
+version = "5.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3fd4537617a323437550d34c73a6aeeb1b489bbcc526e63f044ca3e59347101f"
+checksum = "377729679262964c27e6a28f360a84b7aedb172b59841301c1c77922305dfd83"
dependencies = [
"miette",
"nix 0.30.1",
@@ -12792,9 +13793,9 @@ dependencies = [
[[package]]
name = "watchexec-supervisor"
-version = "5.2.0"
+version = "5.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a710aaac2dfcfb8a2e117c2f5e926bf10c533345f468f2017160c5f0e9ee0c53"
+checksum = "92a45c50ea6b2795f3d070ad621618c8737bb98f6bc2eb4847e8e8e2ce2f446c"
dependencies = [
"futures",
"process-wrap",
@@ -12806,9 +13807,9 @@ dependencies = [
[[package]]
name = "web-sys"
-version = "0.3.95"
+version = "0.3.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f2dfbb17949fa2088e5d39408c48368947b86f7834484e87b73de55bc14d97d"
+checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -12826,9 +13827,9 @@ dependencies = [
[[package]]
name = "web_atoms"
-version = "0.2.3"
+version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57a9779e9f04d2ac1ce317aee707aa2f6b773afba7b931222bff6983843b1576"
+checksum = "d7cff6eef815df1834fd250e3a2ff436044d82a9f1bc1980ca1dbdf07effc538"
dependencies = [
"phf 0.13.1",
"phf_codegen 0.13.1",
@@ -12838,12 +13839,12 @@ dependencies = [
[[package]]
name = "webbrowser"
-version = "1.2.1"
+version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fc95580916af1e68ff6a7be07446fc5db73ebf71cf092de939bbf5f7e189f72"
+checksum = "00f1243ef785213e3a32fa0396093424a3a6ea566f9948497e5a2309261a4c97"
dependencies = [
"core-foundation 0.10.1",
- "jni 0.22.4",
+ "jni 0.21.1",
"log",
"ndk-context",
"objc2",
@@ -12867,25 +13868,27 @@ version = "0.26.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9"
dependencies = [
- "webpki-roots 1.0.7",
+ "webpki-roots 1.0.4",
]
[[package]]
name = "webpki-roots"
-version = "1.0.7"
+version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d"
+checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e"
dependencies = [
"rustls-pki-types",
]
[[package]]
name = "which"
-version = "8.0.2"
+version = "8.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81995fafaaaf6ae47a7d0cc83c67caf92aeb7e5331650ae6ff856f7c0c60c459"
+checksum = "d3fabb953106c3c8eea8306e4393700d7657561cb43122571b172bbfb7c7ba1d"
dependencies = [
- "libc",
+ "env_home",
+ "rustix",
+ "winsafe",
]
[[package]]
@@ -12925,16 +13928,38 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+[[package]]
+name = "windows"
+version = "0.61.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
+dependencies = [
+ "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.62.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580"
dependencies = [
- "windows-collections",
- "windows-core",
- "windows-future",
- "windows-numerics",
+ "windows-collections 0.3.2",
+ "windows-core 0.62.2",
+ "windows-future 0.3.2",
+ "windows-numerics 0.3.1",
+]
+
+[[package]]
+name = "windows-collections"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
+dependencies = [
+ "windows-core 0.61.2",
]
[[package]]
@@ -12943,7 +13968,20 @@ version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610"
dependencies = [
- "windows-core",
+ "windows-core 0.62.2",
+]
+
+[[package]]
+name = "windows-core"
+version = "0.61.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3"
+dependencies = [
+ "windows-implement",
+ "windows-interface",
+ "windows-link 0.1.3",
+ "windows-result 0.3.4",
+ "windows-strings 0.4.2",
]
[[package]]
@@ -12954,9 +13992,20 @@ checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
dependencies = [
"windows-implement",
"windows-interface",
- "windows-link",
- "windows-result",
- "windows-strings",
+ "windows-link 0.2.1",
+ "windows-result 0.4.1",
+ "windows-strings 0.5.1",
+]
+
+[[package]]
+name = "windows-future"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
+dependencies = [
+ "windows-core 0.61.2",
+ "windows-link 0.1.3",
+ "windows-threading 0.1.0",
]
[[package]]
@@ -12965,9 +14014,9 @@ version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb"
dependencies = [
- "windows-core",
- "windows-link",
- "windows-threading",
+ "windows-core 0.62.2",
+ "windows-link 0.2.1",
+ "windows-threading 0.2.1",
]
[[package]]
@@ -12992,20 +14041,36 @@ dependencies = [
"syn 2.0.117",
]
+[[package]]
+name = "windows-link"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
+
[[package]]
name = "windows-link"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
+[[package]]
+name = "windows-numerics"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
+dependencies = [
+ "windows-core 0.61.2",
+ "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",
- "windows-link",
+ "windows-core 0.62.2",
+ "windows-link 0.2.1",
]
[[package]]
@@ -13014,9 +14079,18 @@ version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720"
dependencies = [
- "windows-link",
- "windows-result",
- "windows-strings",
+ "windows-link 0.2.1",
+ "windows-result 0.4.1",
+ "windows-strings 0.5.1",
+]
+
+[[package]]
+name = "windows-result"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
+dependencies = [
+ "windows-link 0.1.3",
]
[[package]]
@@ -13025,7 +14099,16 @@ version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
dependencies = [
- "windows-link",
+ "windows-link 0.2.1",
+]
+
+[[package]]
+name = "windows-strings"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
+dependencies = [
+ "windows-link 0.1.3",
]
[[package]]
@@ -13034,7 +14117,7 @@ version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
dependencies = [
- "windows-link",
+ "windows-link 0.2.1",
]
[[package]]
@@ -13079,7 +14162,7 @@ version = "0.61.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
dependencies = [
- "windows-link",
+ "windows-link 0.2.1",
]
[[package]]
@@ -13119,7 +14202,7 @@ version = "0.53.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
dependencies = [
- "windows-link",
+ "windows-link 0.2.1",
"windows_aarch64_gnullvm 0.53.1",
"windows_aarch64_msvc 0.53.1",
"windows_i686_gnu 0.53.1",
@@ -13130,13 +14213,22 @@ dependencies = [
"windows_x86_64_msvc 0.53.1",
]
+[[package]]
+name = "windows-threading"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
+dependencies = [
+ "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",
+ "windows-link 0.2.1",
]
[[package]]
@@ -13279,22 +14371,34 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
[[package]]
name = "winnow"
-version = "0.7.15"
+version = "0.7.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945"
+checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829"
dependencies = [
"memchr",
]
[[package]]
name = "winnow"
-version = "1.0.1"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5"
+checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1"
dependencies = [
"memchr",
]
+[[package]]
+name = "winsafe"
+version = "0.0.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904"
+
+[[package]]
+name = "wit-bindgen"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
+
[[package]]
name = "wit-bindgen"
version = "0.51.0"
@@ -13353,7 +14457,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
dependencies = [
"anyhow",
- "bitflags 2.11.1",
+ "bitflags 2.10.0",
"indexmap 2.14.0",
"log",
"serde",
@@ -13391,9 +14495,9 @@ checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936"
[[package]]
name = "writeable"
-version = "0.6.3"
+version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4"
+checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9"
[[package]]
name = "ws_stream_wasm"
@@ -13464,9 +14568,9 @@ dependencies = [
[[package]]
name = "yoke"
-version = "0.8.2"
+version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca"
+checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954"
dependencies = [
"stable_deref_trait",
"yoke-derive",
@@ -13475,9 +14579,9 @@ dependencies = [
[[package]]
name = "yoke-derive"
-version = "0.8.2"
+version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e"
+checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d"
dependencies = [
"proc-macro2",
"quote",
@@ -13487,18 +14591,18 @@ dependencies = [
[[package]]
name = "zerocopy"
-version = "0.8.48"
+version = "0.8.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9"
+checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
-version = "0.8.48"
+version = "0.8.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4"
+checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a"
dependencies = [
"proc-macro2",
"quote",
@@ -13507,18 +14611,18 @@ dependencies = [
[[package]]
name = "zerofrom"
-version = "0.1.7"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df"
+checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
dependencies = [
"zerofrom-derive",
]
[[package]]
name = "zerofrom-derive"
-version = "0.1.7"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1"
+checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
dependencies = [
"proc-macro2",
"quote",
@@ -13537,9 +14641,9 @@ dependencies = [
[[package]]
name = "zeroize_derive"
-version = "1.4.3"
+version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e"
+checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
dependencies = [
"proc-macro2",
"quote",
@@ -13548,21 +14652,20 @@ dependencies = [
[[package]]
name = "zerotrie"
-version = "0.2.4"
+version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf"
+checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851"
dependencies = [
"displaydoc",
"yoke",
"zerofrom",
- "zerovec",
]
[[package]]
name = "zerovec"
-version = "0.11.6"
+version = "0.11.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239"
+checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002"
dependencies = [
"serde",
"yoke",
@@ -13572,9 +14675,9 @@ dependencies = [
[[package]]
name = "zerovec-derive"
-version = "0.11.3"
+version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555"
+checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3"
dependencies = [
"proc-macro2",
"quote",
@@ -13608,9 +14711,9 @@ dependencies = [
[[package]]
name = "zlib-rs"
-version = "0.6.3"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513"
+checksum = "51f936044d677be1a1168fae1d03b583a285a5dd9d8cbf7b24c23aa1fc775235"
[[package]]
name = "zmij"
@@ -13630,13 +14733,32 @@ dependencies = [
"simd-adler32",
]
+[[package]]
+name = "zstd"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c"
+dependencies = [
+ "zstd-safe 6.0.6",
+]
+
[[package]]
name = "zstd"
version = "0.13.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a"
dependencies = [
- "zstd-safe",
+ "zstd-safe 7.2.4",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "6.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581"
+dependencies = [
+ "libc",
+ "zstd-sys",
]
[[package]]
diff --git a/Cargo.toml b/Cargo.toml
index c27286e7d6ba0..cecab8087061e 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -33,7 +33,7 @@ members = [
resolver = "2"
[workspace.package]
-version = "1.6.0"
+version = "1.7.1"
edition = "2024"
rust-version = "1.89"
authors = ["Foundry Contributors"]
@@ -591,6 +591,7 @@ rexpect = { git = "https://github.com/rust-cli/rexpect", rev = "2ed0b1898d7edaf6
## reth-core
reth-primitives-traits = { git = "https://github.com/paradigmxyz/reth-core", rev = "6b12498" }
+reth-rpc-traits = { git = "https://github.com/paradigmxyz/reth-core", rev = "6b12498" }
reth-codecs = { git = "https://github.com/paradigmxyz/reth-core", rev = "6b12498" }
reth-codecs-derive = { git = "https://github.com/paradigmxyz/reth-core", rev = "6b12498" }
reth-zstd-compressors = { git = "https://github.com/paradigmxyz/reth-core", rev = "6b12498" }
diff --git a/README.md b/README.md
index c9f0a45c57b0a..7933cc1c3ea08 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,16 @@
+# Phoundry
+
+### Phoundry is a minimalfork of Foundry that is customized to support the cheat codes used in the Credible Layer
+
[![Github Actions][gha-badge]][gha-url] [![Telegram Chat][tg-badge]][tg-url] [![Telegram Support][tg-support-badge]][tg-support-url]
+
-[gha-badge]: https://img.shields.io/github/actions/workflow/status/foundry-rs/foundry/test.yml?branch=master&style=flat-square
+[gha-badge]: https://img.shields.io/github/actions/workflow/status/foundry-rs/foundry/test.yml?branch=master
[gha-url]: https://github.com/foundry-rs/foundry/actions
[tg-badge]: https://img.shields.io/endpoint?color=neon&logo=telegram&label=chat&style=flat-square&url=https%3A%2F%2Ftg.sumanjay.workers.dev%2Ffoundry_rs
[tg-url]: https://t.me/foundry_rs
@@ -14,7 +19,6 @@
**[Install](https://getfoundry.sh/getting-started/installation)**
| [Docs][foundry-docs]
-| [Benchmarks](https://www.getfoundry.sh/benchmarks)
| [Developer Guidelines](./docs/dev/README.md)
| [Contributing](./CONTRIBUTING.md)
| [Crate Docs](https://foundry-rs.github.io/foundry)
@@ -23,72 +27,358 @@
---
-Blazing fast, portable and modular toolkit for Ethereum application development, written in Rust.
+### Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust
+
+Foundry consists of:
+
+- [**Forge**](#forge): Build, test, fuzz, debug and deploy [Solidity][solidity] contracts, like Hardhat, Brownie, Ape.
+- [**Cast**](#cast): A Swiss Army knife for interacting with EVM smart contracts, sending transactions and getting chain data.
+- [**Anvil**](#anvil): Fast local Ethereum development node, akin to Hardhat Network, Tenderly.
+- [**Chisel**](#chisel): Fast, utilitarian, and verbose Solidity REPL.
-- [**Forge**](https://getfoundry.sh/forge) — Build, test, fuzz, debug and deploy Solidity contracts.
-- [**Cast**](https://getfoundry.sh/cast) — Swiss Army knife for interacting with EVM smart contracts, sending transactions and getting chain data.
-- [**Anvil**](https://getfoundry.sh/anvil) — Fast local Ethereum development node.
-- [**Chisel**](https://getfoundry.sh/chisel) — Fast, utilitarian and verbose Solidity REPL.
+**Need help getting started with Foundry? Read the [📖 Foundry Docs][foundry-docs]!**

+## Features
+
+- **High-Performance Compilation**
+
+ - **Fast and Flexible**: Automatically detects and installs the required Solidity compiler version.
+ - **Solidity and Vyper Support**: Fully supports both Solidity and Vyper out-of-the-box.
+ - **Incremental Compilation**: Re-compiles only changed files, saving time.
+ - **Parallelized Pipeline**: Leverages multi-core systems for ultra-fast builds.
+ - **Broad Compatibility**: Supports non-standard directory structures, including [Hardhat repos](https://twitter.com/gakonst/status/1461289225337421829).
+
+- **Advanced Testing**
+
+ - **No Context Switching**: Write tests directly in Solidity.
+ - **Fuzz Testing**: Quickly identify edge cases with input shrinking and counter-example generation.
+ - **Invariant Testing**: Ensure complex system properties hold across a wide range of inputs.
+ - **Debugging Made Easy**: Use [forge-std](https://github.com/foundry-rs/forge-std)'s `console.sol` for flexible debug logging.
+ - **Interactive Debugger**: Step through your Solidity code with Foundry's interactive debugger, making it easy to pinpoint issues.
+
+- **Powerful Runtime Features**
+
+ - **RPC Forking**: Fast and efficient remote RPC forking backed by [Alloy][alloy].
+ - **Lightweight & Portable**: No dependency on Nix or other package managers for installation.
+
+- **Streamlined CI/CD**
+
+ - **Optimized CI**: Accelerate builds, run tests and execute scripts using [Foundry's GitHub action][foundry-gha].
+
## Installation
-```sh
+Getting started is very easy:
+
+Install `foundryup`:
+
+```
curl -L https://foundry.paradigm.xyz | bash
+```
+
+Next, run `foundryup`.
+
+It will automatically install the latest version of the precompiled binaries: [`forge`](#forge), [`cast`](#cast), [`anvil`](#anvil), and [`chisel`](#chisel).
+
+```
foundryup
```
-See the [installation guide](https://getfoundry.sh/getting-started/installation) for more details.
+**Done!**
+
+For additional details see the [installation guide](https://getfoundry.sh/getting-started/installation) in the [Foundry Docs][foundry-docs].
+
+If you're experiencing any issues while installing, check out [Getting Help](#getting-help) and the [FAQ](https://getfoundry.sh/faq).
-## Getting Started
+## How Fast?
-Initialize a new project, build and test:
+Forge is quite fast at both compiling (leveraging `solc` with [foundry-compilers]) and testing.
+
+See the benchmarks below. Older benchmarks against [DappTools][dapptools] can be found in the [v0.2.0 announcement post][benchmark-post] and in the [Convex Shutdown Simulation][convex] repository.
+
+### Testing Benchmarks
+
+| Project | Type | [Forge 1.0][foundry-1.0] | [Forge 0.2][foundry-0.2] | DappTools | Speedup |
+| --------------------------------------------- | -------------------- | ------------------------ | ------------------------ | --------- | -------------- |
+| [vectorized/solady][solady] | Unit / Fuzz | 0.9s | 2.3s | - | 2.6x |
+| [morpho-org/morpho-blue][morpho-blue] | Invariant | 0.7s | 1m43s | - | 147.1x |
+| [morpho-org/morpho-blue-oracles][morpho-blue] | Integration (Cold) | 6.1s | 6.3s | - | 1.04x |
+| [morpho-org/morpho-blue-oracles][morpho-blue] | Integration (Cached) | 0.6s | 0.9s | - | 1.50x |
+| [transmissions11/solmate][solmate] | Unit / Fuzz | 2.7s | 2.8s | 6m34s | 1.03x / 140.0x |
+| [reflexer-labs/geb][geb] | Unit / Fuzz | 0.2s | 0.4s | 23s | 2.0x / 57.5x |
+
+_In the above benchmarks, compilation was always skipped_
+
+**Takeaway: Forge dramatically outperforms the competition, delivering blazing-fast execution speeds while continuously expanding its robust feature set.**
+
+### Compilation Benchmarks
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+**Takeaway: Forge compilation is consistently faster than Hardhat by a factor of `2.1x` to `5.2x`, depending on the amount of caching involved.**
+
+## Forge
+
+Forge helps you build, test, fuzz, debug and deploy Solidity contracts.
+
+The best way to understand Forge is to simply try it (in less than 30 seconds!).
+
+First, let's initialize a new `counter` example repository:
+
+```sh
+forge init counter
+```
+
+Next `cd` into `counter` and build :
```sh
-forge init counter && cd counter
forge build
+```
+
+```console
+[⠊] Compiling...
+[⠔] Compiling 27 files with Solc 0.8.28
+[⠒] Solc 0.8.28 finished in 452.13ms
+Compiler run successful!
+```
+
+Let's [test](https://getfoundry.sh/forge/tests#tests) our contracts:
+
+```sh
forge test
```
-Interact with a live network:
+```console
+[⠊] Compiling...
+No files changed, compilation skipped
+
+Ran 2 tests for test/Counter.t.sol:CounterTest
+[PASS] testFuzz_SetNumber(uint256) (runs: 256, μ: 31121, ~: 31277)
+[PASS] test_Increment() (gas: 31293)
+Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 5.35ms (4.86ms CPU time)
+
+Ran 1 test suite in 5.91ms (5.35ms CPU time): 2 tests passed, 0 failed, 0 skipped (2 total tests)
+```
+
+Finally, let's run our deployment script:
+
+```sh
+forge script script/Counter.s.sol
+```
+
+```console
+[⠊] Compiling...
+No files changed, compilation skipped
+Script ran successfully.
+Gas used: 109037
+
+If you wish to simulate on-chain transactions pass a RPC URL.
+```
+
+Run `forge --help` to explore the full list of available subcommands and their usage.
+
+More documentation can be found in the [forge](https://getfoundry.sh/forge/overview) section of the Foundry Docs.
+
+## Cast
+
+Cast is a Swiss Army knife for interacting with Ethereum applications from the command line.
+
+Here are a few examples of what you can do:
+
+**Check the latest block on Ethereum Mainnet**:
```sh
cast block-number --rpc-url https://eth.merkle.io
+```
+
+**Check the Ether balance of `vitalik.eth`**
+
+```sh
cast balance vitalik.eth --ether --rpc-url https://eth.merkle.io
```
-Fork mainnet locally:
+**Replay and trace a transaction**
+
+```sh
+cast run 0x9c32042f5e997e27e67f82583839548eb19dc78c4769ad6218657c17f2a5ed31 --rpc-url https://eth.merkle.io
+```
+
+Optionally, pass `--etherscan-api-key
` to decode transaction traces using verified source maps, providing more detailed and human-readable information.
+
+---
+
+Run `cast --help` to explore the full list of available subcommands and their usage.
+
+More documentation can be found in the [cast](https://getfoundry.sh/cast/overview) section of the Foundry Docs.
+
+## Anvil
+
+Anvil is a fast local Ethereum development node.
+
+Let's fork Ethereum mainnet at the latest block:
```sh
anvil --fork-url https://eth.merkle.io
```
-Read the [Foundry Docs][foundry-docs] to learn more.
+You can use those same `cast` subcommands against your `anvil` instance:
+
+```sh
+cast block-number
+```
+
+---
+
+Run `anvil --help` to explore the full list of available features and their usage.
+
+More documentation can be found in the [anvil](https://getfoundry.sh/anvil/overview) section of the Foundry Docs.
+
+## Chisel
+
+Chisel is a fast, utilitarian, and verbose Solidity REPL.
+
+To use Chisel, simply type `chisel`.
+
+```sh
+chisel
+```
+
+From here, start writing Solidity code! Chisel will offer verbose feedback on each input.
+
+Create a variable `a` and query it:
+
+```console
+➜ uint256 a = 123;
+➜ a
+Type: uint256
+├ Hex: 0x7b
+├ Hex (full word): 0x000000000000000000000000000000000000000000000000000000000000007b
+└ Decimal: 123
+```
+
+Finally, run `!source` to see `a` was applied:
+
+```solidity
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.28;
+
+import {Vm} from "forge-std/Vm.sol";
+
+contract REPL {
+ Vm internal constant vm = Vm(address(uint160(uint256(keccak256("hevm cheat code")))));
+
+ /// @notice REPL contract entry point
+ function run() public {
+ uint256 a = 123;
+ }
+}
+```
+
+---
+
+Run `chisel --help` to explore the full list of available features and their usage.
+
+More documentation can be found in the [chisel](https://getfoundry.sh/chisel/overview) section of the Foundry Docs.
+
+## Configuration
+
+Foundry is highly configurable, allowing you to tailor it to your needs. Configuration is managed via a file called [`foundry.toml`](./crates/config) located in the root of your project or any parent directory. For a full list of configuration options, refer to the [config package documentation](./crates/config/README.md#all-options).
+
+**Profiles and Namespaces**
+
+- Configuration can be organized into **profiles**, which are arbitrarily namespaced for flexibility.
+- The default profile is named `default`. Learn more in the [Default Profile section](./crates/config/README.md#default-profile).
+- To select a different profile, set the `FOUNDRY_PROFILE` environment variable.
+- Override specific settings using environment variables prefixed with `FOUNDRY_` (e.g., `FOUNDRY_SRC`).
+
+---
+
+You can find additional [setup and configurations guides](https://getfoundry.sh/config/overview) in the [Foundry Docs][foundry-docs] and in the [config crate](./crates/config/README.md):
+
+- [Configuring with `foundry.toml`](https://getfoundry.sh/config/overview)
+- [Setting up VSCode][vscode-setup]
+- [Shell autocompletions][shell-setup]
## Contributing
-Contributions are welcome and highly appreciated. To get started, check out the [contributing guidelines](./CONTRIBUTING.md).
+See our [contributing guidelines](./CONTRIBUTING.md).
+
+## Getting Help
-Join our [Telegram][tg-url] to chat about the development of Foundry.
+First, see if the answer to your question can be found in the [Foundry Docs][foundry-docs], or in the relevant crate.
-## Support
+If the answer is not there:
-Having trouble? Check the [Foundry Docs][foundry-docs], join the [support Telegram][tg-support-url], or [open an issue](https://github.com/foundry-rs/foundry/issues/new).
+- Join the [support Telegram][tg-support-url] to get help, or
+- Open a [discussion](https://github.com/foundry-rs/foundry/discussions/new) with your question, or
+- Open an issue with [the bug](https://github.com/foundry-rs/foundry/issues/new)
-#### License
+If you want to contribute, or follow along with contributor discussion, you can use our [main telegram](https://t.me/foundry_rs) to chat with us about the development of Foundry!
-
-Licensed under either of Apache License, Version
-2.0 or MIT license at your option.
-
+## License
-
+Licensed under either of [Apache License](./LICENSE-APACHE), Version
+2.0 or [MIT License](./LICENSE-MIT) at your option.
-
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in these crates by you, as defined in the Apache-2.0 license,
shall be dual licensed as above, without any additional terms or conditions.
-
+## How to update upstream
+
+The default branch of this repository is `main`.
+
+To update the upstream repository, run the following commands:
+
+```terminal
+git remote add upstream https://github.com/foundry-rs/foundry.git
+git fetch upstream
+git checkout main
+# Backup branch
+git checkout -b upstream-update
+git checkout main
+git rebase upstream/master
+git push --force-with-lease origin main
+```
+
+## Acknowledgements
+
+- Foundry is a clean-room rewrite of the testing framework [DappTools][dapptools]. None of this would have been possible without the DappHub team's work over the years.
+- [Matthias Seitz](https://twitter.com/mattsse_): Created [ethers-solc] (now [foundry-compilers]) which is the backbone of our compilation pipeline, as well as countless contributions to ethers, in particular the `abigen` macros.
+- [Rohit Narurkar](https://twitter.com/rohitnarurkar): Created the Rust Solidity version manager [svm-rs](https://github.com/roynalnaruto/svm-rs) which we use to auto-detect and manage multiple Solidity versions.
+- [Brock Elmore](https://twitter.com/brockjelmore): For extending the VM's cheatcodes and implementing [structured call tracing](https://github.com/foundry-rs/foundry/pull/192), a critical feature for debugging smart contract calls.
+- Thank you to [Depot](https://depot.dev) for sponsoring us with their fast GitHub runners and sccache, which we use in CI to reduce build and test times significantly.
+- All the other [contributors](https://github.com/foundry-rs/foundry/graphs/contributors) to the [ethers-rs](https://github.com/gakonst/ethers-rs), [alloy][alloy] & [foundry](https://github.com/foundry-rs/foundry) repositories and chatrooms.
+
+[solidity]: https://soliditylang.org/
[foundry-docs]: https://getfoundry.sh
+[foundry-gha]: https://github.com/foundry-rs/foundry-toolchain
+[foundry-compilers]: https://github.com/foundry-rs/compilers
+[ethers-solc]: https://github.com/gakonst/ethers-rs/tree/master/ethers-solc/
+[solady]: https://github.com/Vectorized/solady
+[openzeppelin]: https://github.com/OpenZeppelin/openzeppelin-contracts/tree/release-v5.1
+[morpho-blue]: https://github.com/morpho-org/morpho-blue
+[solmate]: https://github.com/transmissions11/solmate/
+[geb]: https://github.com/reflexer-labs/geb
+[benchmark-post]: https://www.paradigm.xyz/2022/03/foundry-02#blazing-fast-compilation--testing
+[convex]: https://github.com/mds1/convex-shutdown-simulation
+[vscode-setup]: https://getfoundry.sh/config/vscode.html
+[shell-setup]: https://getfoundry.sh/config/shell-autocompletion.html
+[foundry-0.2]: https://github.com/foundry-rs/foundry/releases/tag/nightly-5b7e4cb3c882b28f3c32ba580de27ce7381f415a
+[foundry-1.0]: https://github.com/foundry-rs/foundry/releases/tag/nightly-59f354c179f4e7f6d7292acb3d068815c79286d1
+[dapptools]: https://github.com/dapphub/dapptools
+[alloy]: https://github.com/alloy-rs/alloy
diff --git a/SECURITY.md b/SECURITY.md
index d84327cc18e91..6296066db5e73 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -3,3 +3,112 @@
## Reporting a Vulnerability
Contact [security@tempo.xyz](mailto:security@tempo.xyz).
+
+## Verifying Releases
+
+Every official Foundry release ships with multiple, independent integrity
+artifacts. All signing is keyless via [Sigstore](https://www.sigstore.dev/) —
+no Foundry-managed key material is involved, and every signature is recorded
+in the public [Rekor](https://docs.sigstore.dev/logging/overview/) transparency
+log. The signing identity is the GitHub Actions OIDC token of this repository's
+`release.yml` / `docker-publish.yml` workflows.
+
+### Per-release artifacts
+
+For each `foundry___.{tar.gz,zip}` archive on the
+[releases page](https://github.com/foundry-rs/foundry/releases), the same
+release also publishes:
+
+| Suffix | Purpose |
+| --- | --- |
+| `.sha256` | SHA-256 checksum of the archive (`sha256sum` format) |
+| `.sigstore.json` | Cosign keyless signature bundle (cert + signature + Rekor proof) over the archive |
+| `.spdx.json` | SPDX 2.3 SBOM of the source workspace used for the build |
+| `.attestation.txt` | URL of the GitHub artifact-attestation summary |
+
+In addition, GitHub stores SLSA build-provenance and SBOM attestations against
+the archive's digest; these are queryable via `gh attestation` without
+downloading anything else.
+
+### Verifying an archive
+
+Pick whichever toolchain you have available — they verify the same signatures.
+
+#### Option 1: GitHub CLI (simplest)
+
+```bash
+gh attestation verify foundry_v1.4.0_linux_amd64.tar.gz \
+ --repo foundry-rs/foundry
+```
+
+This computes the file's digest, fetches the matching attestation from GitHub,
+and verifies the Sigstore signature plus the SLSA provenance predicate. Add
+`--signer-workflow foundry-rs/foundry/.github/workflows/release.yml` to also
+require the workflow identity.
+
+To verify the SBOM attestation specifically:
+
+```bash
+gh attestation verify foundry_v1.4.0_linux_amd64.tar.gz \
+ --repo foundry-rs/foundry \
+ --predicate-type 'https://spdx.dev/Document/v2.3'
+```
+
+#### Option 2: Cosign (offline-friendly)
+
+Download the archive and its `.sigstore.json` bundle from the release page,
+then:
+
+```bash
+cosign verify-blob \
+ --bundle foundry_v1.4.0_linux_amd64.sigstore.json \
+ --certificate-identity-regexp '^https://github.com/foundry-rs/foundry/\.github/workflows/release\.yml@.*' \
+ --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
+ foundry_v1.4.0_linux_amd64.tar.gz
+```
+
+For nightly builds the certificate identity points at `refs/heads/master`
+instead of a tag; the regex above matches both.
+
+#### Option 3: Plain checksum (integrity only)
+
+```bash
+sha256sum -c foundry_v1.4.0_linux_amd64.sha256 # GNU coreutils
+shasum -a 256 -c foundry_v1.4.0_linux_amd64.sha256 # macOS
+```
+
+This proves the bytes match what was uploaded, but says nothing about who
+uploaded them. Combine with one of the verifications above for end-to-end
+trust.
+
+### Verifying the Docker image
+
+Container signatures and attestations are pushed as OCI referrers to GHCR, so
+no separate files need to be downloaded.
+
+```bash
+# Cosign keyless signature on the image
+cosign verify ghcr.io/foundry-rs/foundry:v1.4.0 \
+ --certificate-identity-regexp '^https://github.com/foundry-rs/foundry/\.github/workflows/(release|docker-publish)\.yml@.*' \
+ --certificate-oidc-issuer 'https://token.actions.githubusercontent.com'
+
+# SLSA build-provenance attestation
+gh attestation verify oci://ghcr.io/foundry-rs/foundry:v1.4.0 \
+ --repo foundry-rs/foundry
+
+# Inspect the buildx-attached SBOM and provenance
+docker buildx imagetools inspect ghcr.io/foundry-rs/foundry:v1.4.0 \
+ --format '{{ json .SBOM }}'
+docker buildx imagetools inspect ghcr.io/foundry-rs/foundry:v1.4.0 \
+ --format '{{ json .Provenance }}'
+```
+
+To pin to an immutable digest (recommended for reproducible deployments):
+
+```bash
+docker pull ghcr.io/foundry-rs/foundry:v1.4.0
+DIGEST=$(docker buildx imagetools inspect ghcr.io/foundry-rs/foundry:v1.4.0 --format '{{ .Manifest.Digest }}')
+cosign verify "ghcr.io/foundry-rs/foundry@${DIGEST}" \
+ --certificate-identity-regexp '^https://github.com/foundry-rs/foundry/\.github/workflows/(release|docker-publish)\.yml@.*' \
+ --certificate-oidc-issuer 'https://token.actions.githubusercontent.com'
+```
diff --git a/crates/anvil/Cargo.toml b/crates/anvil/Cargo.toml
index b664266450d07..83d147f942f3d 100644
--- a/crates/anvil/Cargo.toml
+++ b/crates/anvil/Cargo.toml
@@ -139,3 +139,4 @@ cmd = [
"tokio/signal",
]
js-tracer = ["revm-inspectors/js-tracer"]
+credible = ["foundry-evm/credible"]
diff --git a/crates/anvil/src/eth/pool/transactions.rs b/crates/anvil/src/eth/pool/transactions.rs
index df65822e1eab3..5280987483dd7 100644
--- a/crates/anvil/src/eth/pool/transactions.rs
+++ b/crates/anvil/src/eth/pool/transactions.rs
@@ -123,10 +123,10 @@ impl PoolTransaction {
impl fmt::Debug for PoolTransaction {
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(fmt, "Transaction {{ ")?;
- write!(fmt, "hash: {:?}, ", &self.pending_transaction.hash())?;
+ write!(fmt, "hash: {:?}, ", self.pending_transaction.hash())?;
write!(fmt, "requires: [{}], ", hex_fmt_many(self.requires.iter()))?;
write!(fmt, "provides: [{}], ", hex_fmt_many(self.provides.iter()))?;
- write!(fmt, "raw tx: {:?}", &self.pending_transaction)?;
+ write!(fmt, "raw tx: {:?}", self.pending_transaction)?;
write!(fmt, "}}")?;
Ok(())
}
diff --git a/crates/cast/Cargo.toml b/crates/cast/Cargo.toml
index dc5be77a244da..8546c9560c780 100644
--- a/crates/cast/Cargo.toml
+++ b/crates/cast/Cargo.toml
@@ -109,3 +109,4 @@ aws-kms = ["foundry-wallets/aws-kms"]
gcp-kms = ["foundry-wallets/gcp-kms"]
turnkey = ["foundry-wallets/turnkey"]
isolate-by-default = ["foundry-config/isolate-by-default"]
+credible = ["foundry-evm/credible"]
diff --git a/crates/cast/src/cmd/keychain.rs b/crates/cast/src/cmd/keychain.rs
index 8b7d80786dfad..c952b58369e1c 100644
--- a/crates/cast/src/cmd/keychain.rs
+++ b/crates/cast/src/cmd/keychain.rs
@@ -646,7 +646,7 @@ async fn run_remaining_limit(
};
if shell::is_json() {
- sh_println!("{}", serde_json::to_string(&remaining.to_string())?)?;
+ sh_println!("{}", serde_json::json!({ "remaining": remaining.to_string() }))?;
} else {
sh_println!("{remaining}")?;
}
diff --git a/crates/cast/src/cmd/wallet/mod.rs b/crates/cast/src/cmd/wallet/mod.rs
index 8e0dd8dd3ed8c..b2378d8bfdc58 100644
--- a/crates/cast/src/cmd/wallet/mod.rs
+++ b/crates/cast/src/cmd/wallet/mod.rs
@@ -779,8 +779,7 @@ flag to set your key via:
)?;
let address = wallet.address();
let success_message = format!(
- "`{}` keystore was saved successfully. Address: {:?}",
- &account_name, address,
+ "`{account_name}` keystore was saved successfully. Address: {address:?}",
);
sh_println!("{}", success_message.green())?;
}
@@ -815,7 +814,7 @@ flag to set your key via:
format!("Failed to remove keystore file at {}", keystore_path.display())
})?;
- let success_message = format!("`{}` keystore was removed successfully.", &name);
+ let success_message = format!("`{name}` keystore was removed successfully.");
sh_println!("{}", success_message.green())?;
}
Self::PrivateKey {
@@ -886,8 +885,7 @@ flag to set your key via:
let private_key = B256::from_slice(&wallet.credential().to_bytes());
- let success_message =
- format!("{}'s private key is: {}", &account_name, private_key);
+ let success_message = format!("{account_name}'s private key is: {private_key}");
sh_println!("{}", success_message.green())?;
}
@@ -945,10 +943,9 @@ flag to set your key via:
Some(&account_name),
)?;
+ let address = wallet.address();
let success_message = format!(
- "Password for keystore `{}` was changed successfully. Address: {:?}",
- &account_name,
- wallet.address(),
+ "Password for keystore `{account_name}` was changed successfully. Address: {address:?}",
);
sh_println!("{}", success_message.green())?;
}
diff --git a/crates/cast/src/lib.rs b/crates/cast/src/lib.rs
index ce5572acebc13..3f446b1fbedf0 100644
--- a/crates/cast/src/lib.rs
+++ b/crates/cast/src/lib.rs
@@ -246,7 +246,7 @@ impl + Clone + Unpin, N: Network> Cast {
let mut s =
vec![format!("gas used: {}", access_list.gas_used), "access list:".to_string()];
for al in access_list.access_list.0 {
- s.push(format!("- address: {}", &al.address.to_checksum(None)));
+ s.push(format!("- address: {}", al.address.to_checksum(None)));
if !al.storage_keys.is_empty() {
s.push(" keys:".to_string());
for key in al.storage_keys {
diff --git a/crates/cast/tests/cli/main.rs b/crates/cast/tests/cli/main.rs
index da33a34d849db..2ca1bda09c9da 100644
--- a/crates/cast/tests/cli/main.rs
+++ b/crates/cast/tests/cli/main.rs
@@ -3203,7 +3203,7 @@ Nothing to compile
.stdout_eq(str![[r#"
Executing previous transactions from the block.
Traces:
- [..] → new @0x5FbDB2315678afecb367f032d93F642f64180aa3
+ [13711] → new @0x5FbDB2315678afecb367f032d93F642f64180aa3
├─ emit topic 0: 0xa7263295d3a687d750d1fd377b5df47de69d7db8decc745aaa4bbee44dc1688d
│ data: 0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266
└─ ← [Return] 62 bytes of code
@@ -3286,7 +3286,7 @@ forgetest_async!(show_state_changes_in_traces, |prj, cmd| {
.stdout_eq(str![[r#"
Executing previous transactions from the block.
Traces:
- [..] 0x5FbDB2315678afecb367f032d93F642f64180aa3::setNumber(111)
+ [22492] ::setNumber(111)
├─ storage changes:
│ @ 0: 0 → 111
└─ ← [Stop]
@@ -3568,7 +3568,7 @@ contract Counter {
.assert_success()
.stdout_eq(str![[r#"
Traces:
- [2402] 0x5FbDB2315678afecb367f032d93F642f64180aa3::number()
+ [2402] ::number()
└─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000001234
@@ -3611,7 +3611,7 @@ Transaction successfully executed.
.assert_success()
.stdout_eq(str![[r#"
Traces:
- [747] 0x5FbDB2315678afecb367f032d93F642f64180aa3::getBalance(0x5FbDB2315678afecb367f032d93F642f64180aa3)
+ [747] ::getBalance(: [0x5FbDB2315678afecb367f032d93F642f64180aa3])
└─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000001111
@@ -3699,7 +3699,7 @@ Error: Transaction failed.
.assert_success()
.stdout_eq(str![[r#"
Traces:
- [2402] 0x5FbDB2315678afecb367f032d93F642f64180aa3::number1()
+ [2402] ::number1()
└─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000002222
@@ -3744,7 +3744,7 @@ Transaction successfully executed.
.assert_success()
.stdout_eq(str![[r#"
Traces:
- [2402] 0x5FbDB2315678afecb367f032d93F642f64180aa3::number1()
+ [2402] ::number1()
└─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000002222
@@ -3978,14 +3978,18 @@ Error: Failed to estimate gas: server returned an error response: error code 3:
});
//
-casttest!(estimate_base_da, |_prj, cmd| {
- cmd.args(["da-estimate", "30558838", "-r", "https://mainnet.base.org/"])
- .assert_success()
- .stdout_eq(str![[r#"
+casttest!(
+ #[ignore = "mainnet.base.org no longer returns transactions for this historical block"]
+ estimate_base_da,
+ |_prj, cmd| {
+ cmd.args(["da-estimate", "30558838", "-r", "https://mainnet.base.org/"])
+ .assert_success()
+ .stdout_eq(str![[r#"
Estimated data availability size for block 30558838 with 225 transactions: 52916546100
"#]]);
-});
+ }
+);
//
casttest!(cast_call_return_array_of_tuples, |_prj, cmd| {
@@ -4815,7 +4819,7 @@ forgetest_async!(cast_send_with_data, |prj, cmd| {
.stdout_eq(str![[r#"
Executing previous transactions from the block.
Traces:
- [..] 0x5FbDB2315678afecb367f032d93F642f64180aa3::setNumber(111)
+ [22492] ::setNumber(111)
├─ storage changes:
│ @ 0: 0 → 111
└─ ← [Stop]
diff --git a/crates/cheatcodes/Cargo.toml b/crates/cheatcodes/Cargo.toml
index 659fec7f1a333..f7313a99f4372 100644
--- a/crates/cheatcodes/Cargo.toml
+++ b/crates/cheatcodes/Cargo.toml
@@ -14,7 +14,17 @@ exclude.workspace = true
[lints]
workspace = true
+[features]
+default = []
+credible = ["dep:assertion-executor"]
+
+[build-dependencies]
+
[dependencies]
+foundry-fork-db.workspace = true
+# tracks the credible-sdk ENG-3169 rebase branch during the revm/alloy bump
+assertion-executor = { git = "https://github.com/phylaxsystems/credible-sdk.git", branch = "lea/eng-3169-featcredible-sdk-update-revm-and-alloy-dependencies", features = ["phoundry"], optional = true }
+
foundry-cheatcodes-spec.workspace = true
foundry-common.workspace = true
foundry-compilers.workspace = true
diff --git a/crates/cheatcodes/assets/cheatcodes.json b/crates/cheatcodes/assets/cheatcodes.json
index 7d6cb9e481502..1a3ddcd3b9d3b 100644
--- a/crates/cheatcodes/assets/cheatcodes.json
+++ b/crates/cheatcodes/assets/cheatcodes.json
@@ -864,7 +864,7 @@
"func": {
"id": "assertApproxEqAbsDecimal_1",
"description": "Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`.\nFormats values with decimals in failure message. Includes error message into revert string on failure.",
- "declaration": "function assertApproxEqAbsDecimal(uint256 left, uint256 right, uint256 maxDelta, uint256 decimals, string calldata error) external pure;",
+ "declaration": "function assertApproxEqAbsDecimal(uint256 left, uint256 right, uint256 maxDelta, uint256 decimals, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertApproxEqAbsDecimal(uint256,uint256,uint256,uint256,string)",
@@ -904,7 +904,7 @@
"func": {
"id": "assertApproxEqAbsDecimal_3",
"description": "Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`.\nFormats values with decimals in failure message. Includes error message into revert string on failure.",
- "declaration": "function assertApproxEqAbsDecimal(int256 left, int256 right, uint256 maxDelta, uint256 decimals, string calldata error) external pure;",
+ "declaration": "function assertApproxEqAbsDecimal(int256 left, int256 right, uint256 maxDelta, uint256 decimals, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertApproxEqAbsDecimal(int256,int256,uint256,uint256,string)",
@@ -944,7 +944,7 @@
"func": {
"id": "assertApproxEqAbs_1",
"description": "Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`.\nIncludes error message into revert string on failure.",
- "declaration": "function assertApproxEqAbs(uint256 left, uint256 right, uint256 maxDelta, string calldata error) external pure;",
+ "declaration": "function assertApproxEqAbs(uint256 left, uint256 right, uint256 maxDelta, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertApproxEqAbs(uint256,uint256,uint256,string)",
@@ -984,7 +984,7 @@
"func": {
"id": "assertApproxEqAbs_3",
"description": "Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`.\nIncludes error message into revert string on failure.",
- "declaration": "function assertApproxEqAbs(int256 left, int256 right, uint256 maxDelta, string calldata error) external pure;",
+ "declaration": "function assertApproxEqAbs(int256 left, int256 right, uint256 maxDelta, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertApproxEqAbs(int256,int256,uint256,string)",
@@ -1024,7 +1024,7 @@
"func": {
"id": "assertApproxEqRelDecimal_1",
"description": "Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`.\n`maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%\nFormats values with decimals in failure message. Includes error message into revert string on failure.",
- "declaration": "function assertApproxEqRelDecimal(uint256 left, uint256 right, uint256 maxPercentDelta, uint256 decimals, string calldata error) external pure;",
+ "declaration": "function assertApproxEqRelDecimal(uint256 left, uint256 right, uint256 maxPercentDelta, uint256 decimals, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertApproxEqRelDecimal(uint256,uint256,uint256,uint256,string)",
@@ -1064,7 +1064,7 @@
"func": {
"id": "assertApproxEqRelDecimal_3",
"description": "Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`.\n`maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%\nFormats values with decimals in failure message. Includes error message into revert string on failure.",
- "declaration": "function assertApproxEqRelDecimal(int256 left, int256 right, uint256 maxPercentDelta, uint256 decimals, string calldata error) external pure;",
+ "declaration": "function assertApproxEqRelDecimal(int256 left, int256 right, uint256 maxPercentDelta, uint256 decimals, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertApproxEqRelDecimal(int256,int256,uint256,uint256,string)",
@@ -1104,7 +1104,7 @@
"func": {
"id": "assertApproxEqRel_1",
"description": "Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`.\n`maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%\nIncludes error message into revert string on failure.",
- "declaration": "function assertApproxEqRel(uint256 left, uint256 right, uint256 maxPercentDelta, string calldata error) external pure;",
+ "declaration": "function assertApproxEqRel(uint256 left, uint256 right, uint256 maxPercentDelta, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertApproxEqRel(uint256,uint256,uint256,string)",
@@ -1144,7 +1144,7 @@
"func": {
"id": "assertApproxEqRel_3",
"description": "Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`.\n`maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%\nIncludes error message into revert string on failure.",
- "declaration": "function assertApproxEqRel(int256 left, int256 right, uint256 maxPercentDelta, string calldata error) external pure;",
+ "declaration": "function assertApproxEqRel(int256 left, int256 right, uint256 maxPercentDelta, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertApproxEqRel(int256,int256,uint256,string)",
@@ -1184,7 +1184,7 @@
"func": {
"id": "assertEqDecimal_1",
"description": "Asserts that two `uint256` values are equal, formatting them with decimals in failure message.\nIncludes error message into revert string on failure.",
- "declaration": "function assertEqDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;",
+ "declaration": "function assertEqDecimal(uint256 left, uint256 right, uint256 decimals, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertEqDecimal(uint256,uint256,uint256,string)",
@@ -1224,7 +1224,7 @@
"func": {
"id": "assertEqDecimal_3",
"description": "Asserts that two `int256` values are equal, formatting them with decimals in failure message.\nIncludes error message into revert string on failure.",
- "declaration": "function assertEqDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;",
+ "declaration": "function assertEqDecimal(int256 left, int256 right, uint256 decimals, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertEqDecimal(int256,int256,uint256,string)",
@@ -1264,7 +1264,7 @@
"func": {
"id": "assertEq_1",
"description": "Asserts that two `bool` values are equal and includes error message into revert string on failure.",
- "declaration": "function assertEq(bool left, bool right, string calldata error) external pure;",
+ "declaration": "function assertEq(bool left, bool right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertEq(bool,bool,string)",
@@ -1304,7 +1304,7 @@
"func": {
"id": "assertEq_11",
"description": "Asserts that two `string` values are equal and includes error message into revert string on failure.",
- "declaration": "function assertEq(string calldata left, string calldata right, string calldata error) external pure;",
+ "declaration": "function assertEq(string calldata left, string calldata right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertEq(string,string,string)",
@@ -1344,7 +1344,7 @@
"func": {
"id": "assertEq_13",
"description": "Asserts that two `bytes` values are equal and includes error message into revert string on failure.",
- "declaration": "function assertEq(bytes calldata left, bytes calldata right, string calldata error) external pure;",
+ "declaration": "function assertEq(bytes calldata left, bytes calldata right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertEq(bytes,bytes,string)",
@@ -1384,7 +1384,7 @@
"func": {
"id": "assertEq_15",
"description": "Asserts that two arrays of `bool` values are equal and includes error message into revert string on failure.",
- "declaration": "function assertEq(bool[] calldata left, bool[] calldata right, string calldata error) external pure;",
+ "declaration": "function assertEq(bool[] calldata left, bool[] calldata right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertEq(bool[],bool[],string)",
@@ -1424,7 +1424,7 @@
"func": {
"id": "assertEq_17",
"description": "Asserts that two arrays of `uint256` values are equal and includes error message into revert string on failure.",
- "declaration": "function assertEq(uint256[] calldata left, uint256[] calldata right, string calldata error) external pure;",
+ "declaration": "function assertEq(uint256[] calldata left, uint256[] calldata right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertEq(uint256[],uint256[],string)",
@@ -1464,7 +1464,7 @@
"func": {
"id": "assertEq_19",
"description": "Asserts that two arrays of `int256` values are equal and includes error message into revert string on failure.",
- "declaration": "function assertEq(int256[] calldata left, int256[] calldata right, string calldata error) external pure;",
+ "declaration": "function assertEq(int256[] calldata left, int256[] calldata right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertEq(int256[],int256[],string)",
@@ -1524,7 +1524,7 @@
"func": {
"id": "assertEq_21",
"description": "Asserts that two arrays of `address` values are equal and includes error message into revert string on failure.",
- "declaration": "function assertEq(address[] calldata left, address[] calldata right, string calldata error) external pure;",
+ "declaration": "function assertEq(address[] calldata left, address[] calldata right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertEq(address[],address[],string)",
@@ -1564,7 +1564,7 @@
"func": {
"id": "assertEq_23",
"description": "Asserts that two arrays of `bytes32` values are equal and includes error message into revert string on failure.",
- "declaration": "function assertEq(bytes32[] calldata left, bytes32[] calldata right, string calldata error) external pure;",
+ "declaration": "function assertEq(bytes32[] calldata left, bytes32[] calldata right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertEq(bytes32[],bytes32[],string)",
@@ -1604,7 +1604,7 @@
"func": {
"id": "assertEq_25",
"description": "Asserts that two arrays of `string` values are equal and includes error message into revert string on failure.",
- "declaration": "function assertEq(string[] calldata left, string[] calldata right, string calldata error) external pure;",
+ "declaration": "function assertEq(string[] calldata left, string[] calldata right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertEq(string[],string[],string)",
@@ -1644,7 +1644,7 @@
"func": {
"id": "assertEq_27",
"description": "Asserts that two arrays of `bytes` values are equal and includes error message into revert string on failure.",
- "declaration": "function assertEq(bytes[] calldata left, bytes[] calldata right, string calldata error) external pure;",
+ "declaration": "function assertEq(bytes[] calldata left, bytes[] calldata right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertEq(bytes[],bytes[],string)",
@@ -1664,7 +1664,7 @@
"func": {
"id": "assertEq_3",
"description": "Asserts that two `uint256` values are equal and includes error message into revert string on failure.",
- "declaration": "function assertEq(uint256 left, uint256 right, string calldata error) external pure;",
+ "declaration": "function assertEq(uint256 left, uint256 right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertEq(uint256,uint256,string)",
@@ -1704,7 +1704,7 @@
"func": {
"id": "assertEq_5",
"description": "Asserts that two `int256` values are equal and includes error message into revert string on failure.",
- "declaration": "function assertEq(int256 left, int256 right, string calldata error) external pure;",
+ "declaration": "function assertEq(int256 left, int256 right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertEq(int256,int256,string)",
@@ -1744,7 +1744,7 @@
"func": {
"id": "assertEq_7",
"description": "Asserts that two `address` values are equal and includes error message into revert string on failure.",
- "declaration": "function assertEq(address left, address right, string calldata error) external pure;",
+ "declaration": "function assertEq(address left, address right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertEq(address,address,string)",
@@ -1784,7 +1784,7 @@
"func": {
"id": "assertEq_9",
"description": "Asserts that two `bytes32` values are equal and includes error message into revert string on failure.",
- "declaration": "function assertEq(bytes32 left, bytes32 right, string calldata error) external pure;",
+ "declaration": "function assertEq(bytes32 left, bytes32 right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertEq(bytes32,bytes32,string)",
@@ -1824,7 +1824,7 @@
"func": {
"id": "assertFalse_1",
"description": "Asserts that the given condition is false and includes error message into revert string on failure.",
- "declaration": "function assertFalse(bool condition, string calldata error) external pure;",
+ "declaration": "function assertFalse(bool condition, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertFalse(bool,string)",
@@ -1864,7 +1864,7 @@
"func": {
"id": "assertGeDecimal_1",
"description": "Compares two `uint256` values. Expects first value to be greater than or equal to second.\nFormats values with decimals in failure message. Includes error message into revert string on failure.",
- "declaration": "function assertGeDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;",
+ "declaration": "function assertGeDecimal(uint256 left, uint256 right, uint256 decimals, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertGeDecimal(uint256,uint256,uint256,string)",
@@ -1904,7 +1904,7 @@
"func": {
"id": "assertGeDecimal_3",
"description": "Compares two `int256` values. Expects first value to be greater than or equal to second.\nFormats values with decimals in failure message. Includes error message into revert string on failure.",
- "declaration": "function assertGeDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;",
+ "declaration": "function assertGeDecimal(int256 left, int256 right, uint256 decimals, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertGeDecimal(int256,int256,uint256,string)",
@@ -1944,7 +1944,7 @@
"func": {
"id": "assertGe_1",
"description": "Compares two `uint256` values. Expects first value to be greater than or equal to second.\nIncludes error message into revert string on failure.",
- "declaration": "function assertGe(uint256 left, uint256 right, string calldata error) external pure;",
+ "declaration": "function assertGe(uint256 left, uint256 right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertGe(uint256,uint256,string)",
@@ -1984,7 +1984,7 @@
"func": {
"id": "assertGe_3",
"description": "Compares two `int256` values. Expects first value to be greater than or equal to second.\nIncludes error message into revert string on failure.",
- "declaration": "function assertGe(int256 left, int256 right, string calldata error) external pure;",
+ "declaration": "function assertGe(int256 left, int256 right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertGe(int256,int256,string)",
@@ -2024,7 +2024,7 @@
"func": {
"id": "assertGtDecimal_1",
"description": "Compares two `uint256` values. Expects first value to be greater than second.\nFormats values with decimals in failure message. Includes error message into revert string on failure.",
- "declaration": "function assertGtDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;",
+ "declaration": "function assertGtDecimal(uint256 left, uint256 right, uint256 decimals, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertGtDecimal(uint256,uint256,uint256,string)",
@@ -2064,7 +2064,7 @@
"func": {
"id": "assertGtDecimal_3",
"description": "Compares two `int256` values. Expects first value to be greater than second.\nFormats values with decimals in failure message. Includes error message into revert string on failure.",
- "declaration": "function assertGtDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;",
+ "declaration": "function assertGtDecimal(int256 left, int256 right, uint256 decimals, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertGtDecimal(int256,int256,uint256,string)",
@@ -2104,7 +2104,7 @@
"func": {
"id": "assertGt_1",
"description": "Compares two `uint256` values. Expects first value to be greater than second.\nIncludes error message into revert string on failure.",
- "declaration": "function assertGt(uint256 left, uint256 right, string calldata error) external pure;",
+ "declaration": "function assertGt(uint256 left, uint256 right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertGt(uint256,uint256,string)",
@@ -2144,7 +2144,7 @@
"func": {
"id": "assertGt_3",
"description": "Compares two `int256` values. Expects first value to be greater than second.\nIncludes error message into revert string on failure.",
- "declaration": "function assertGt(int256 left, int256 right, string calldata error) external pure;",
+ "declaration": "function assertGt(int256 left, int256 right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertGt(int256,int256,string)",
@@ -2184,7 +2184,7 @@
"func": {
"id": "assertLeDecimal_1",
"description": "Compares two `uint256` values. Expects first value to be less than or equal to second.\nFormats values with decimals in failure message. Includes error message into revert string on failure.",
- "declaration": "function assertLeDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;",
+ "declaration": "function assertLeDecimal(uint256 left, uint256 right, uint256 decimals, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertLeDecimal(uint256,uint256,uint256,string)",
@@ -2224,7 +2224,7 @@
"func": {
"id": "assertLeDecimal_3",
"description": "Compares two `int256` values. Expects first value to be less than or equal to second.\nFormats values with decimals in failure message. Includes error message into revert string on failure.",
- "declaration": "function assertLeDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;",
+ "declaration": "function assertLeDecimal(int256 left, int256 right, uint256 decimals, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertLeDecimal(int256,int256,uint256,string)",
@@ -2264,7 +2264,7 @@
"func": {
"id": "assertLe_1",
"description": "Compares two `uint256` values. Expects first value to be less than or equal to second.\nIncludes error message into revert string on failure.",
- "declaration": "function assertLe(uint256 left, uint256 right, string calldata error) external pure;",
+ "declaration": "function assertLe(uint256 left, uint256 right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertLe(uint256,uint256,string)",
@@ -2304,7 +2304,7 @@
"func": {
"id": "assertLe_3",
"description": "Compares two `int256` values. Expects first value to be less than or equal to second.\nIncludes error message into revert string on failure.",
- "declaration": "function assertLe(int256 left, int256 right, string calldata error) external pure;",
+ "declaration": "function assertLe(int256 left, int256 right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertLe(int256,int256,string)",
@@ -2344,7 +2344,7 @@
"func": {
"id": "assertLtDecimal_1",
"description": "Compares two `uint256` values. Expects first value to be less than second.\nFormats values with decimals in failure message. Includes error message into revert string on failure.",
- "declaration": "function assertLtDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;",
+ "declaration": "function assertLtDecimal(uint256 left, uint256 right, uint256 decimals, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertLtDecimal(uint256,uint256,uint256,string)",
@@ -2384,7 +2384,7 @@
"func": {
"id": "assertLtDecimal_3",
"description": "Compares two `int256` values. Expects first value to be less than second.\nFormats values with decimals in failure message. Includes error message into revert string on failure.",
- "declaration": "function assertLtDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;",
+ "declaration": "function assertLtDecimal(int256 left, int256 right, uint256 decimals, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertLtDecimal(int256,int256,uint256,string)",
@@ -2424,7 +2424,7 @@
"func": {
"id": "assertLt_1",
"description": "Compares two `uint256` values. Expects first value to be less than second.\nIncludes error message into revert string on failure.",
- "declaration": "function assertLt(uint256 left, uint256 right, string calldata error) external pure;",
+ "declaration": "function assertLt(uint256 left, uint256 right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertLt(uint256,uint256,string)",
@@ -2464,7 +2464,7 @@
"func": {
"id": "assertLt_3",
"description": "Compares two `int256` values. Expects first value to be less than second.\nIncludes error message into revert string on failure.",
- "declaration": "function assertLt(int256 left, int256 right, string calldata error) external pure;",
+ "declaration": "function assertLt(int256 left, int256 right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertLt(int256,int256,string)",
@@ -2504,7 +2504,7 @@
"func": {
"id": "assertNotEqDecimal_1",
"description": "Asserts that two `uint256` values are not equal, formatting them with decimals in failure message.\nIncludes error message into revert string on failure.",
- "declaration": "function assertNotEqDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;",
+ "declaration": "function assertNotEqDecimal(uint256 left, uint256 right, uint256 decimals, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertNotEqDecimal(uint256,uint256,uint256,string)",
@@ -2544,7 +2544,7 @@
"func": {
"id": "assertNotEqDecimal_3",
"description": "Asserts that two `int256` values are not equal, formatting them with decimals in failure message.\nIncludes error message into revert string on failure.",
- "declaration": "function assertNotEqDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;",
+ "declaration": "function assertNotEqDecimal(int256 left, int256 right, uint256 decimals, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertNotEqDecimal(int256,int256,uint256,string)",
@@ -2584,7 +2584,7 @@
"func": {
"id": "assertNotEq_1",
"description": "Asserts that two `bool` values are not equal and includes error message into revert string on failure.",
- "declaration": "function assertNotEq(bool left, bool right, string calldata error) external pure;",
+ "declaration": "function assertNotEq(bool left, bool right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertNotEq(bool,bool,string)",
@@ -2624,7 +2624,7 @@
"func": {
"id": "assertNotEq_11",
"description": "Asserts that two `string` values are not equal and includes error message into revert string on failure.",
- "declaration": "function assertNotEq(string calldata left, string calldata right, string calldata error) external pure;",
+ "declaration": "function assertNotEq(string calldata left, string calldata right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertNotEq(string,string,string)",
@@ -2664,7 +2664,7 @@
"func": {
"id": "assertNotEq_13",
"description": "Asserts that two `bytes` values are not equal and includes error message into revert string on failure.",
- "declaration": "function assertNotEq(bytes calldata left, bytes calldata right, string calldata error) external pure;",
+ "declaration": "function assertNotEq(bytes calldata left, bytes calldata right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertNotEq(bytes,bytes,string)",
@@ -2704,7 +2704,7 @@
"func": {
"id": "assertNotEq_15",
"description": "Asserts that two arrays of `bool` values are not equal and includes error message into revert string on failure.",
- "declaration": "function assertNotEq(bool[] calldata left, bool[] calldata right, string calldata error) external pure;",
+ "declaration": "function assertNotEq(bool[] calldata left, bool[] calldata right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertNotEq(bool[],bool[],string)",
@@ -2744,7 +2744,7 @@
"func": {
"id": "assertNotEq_17",
"description": "Asserts that two arrays of `uint256` values are not equal and includes error message into revert string on failure.",
- "declaration": "function assertNotEq(uint256[] calldata left, uint256[] calldata right, string calldata error) external pure;",
+ "declaration": "function assertNotEq(uint256[] calldata left, uint256[] calldata right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertNotEq(uint256[],uint256[],string)",
@@ -2784,7 +2784,7 @@
"func": {
"id": "assertNotEq_19",
"description": "Asserts that two arrays of `int256` values are not equal and includes error message into revert string on failure.",
- "declaration": "function assertNotEq(int256[] calldata left, int256[] calldata right, string calldata error) external pure;",
+ "declaration": "function assertNotEq(int256[] calldata left, int256[] calldata right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertNotEq(int256[],int256[],string)",
@@ -2844,7 +2844,7 @@
"func": {
"id": "assertNotEq_21",
"description": "Asserts that two arrays of `address` values are not equal and includes error message into revert string on failure.",
- "declaration": "function assertNotEq(address[] calldata left, address[] calldata right, string calldata error) external pure;",
+ "declaration": "function assertNotEq(address[] calldata left, address[] calldata right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertNotEq(address[],address[],string)",
@@ -2884,7 +2884,7 @@
"func": {
"id": "assertNotEq_23",
"description": "Asserts that two arrays of `bytes32` values are not equal and includes error message into revert string on failure.",
- "declaration": "function assertNotEq(bytes32[] calldata left, bytes32[] calldata right, string calldata error) external pure;",
+ "declaration": "function assertNotEq(bytes32[] calldata left, bytes32[] calldata right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertNotEq(bytes32[],bytes32[],string)",
@@ -2924,7 +2924,7 @@
"func": {
"id": "assertNotEq_25",
"description": "Asserts that two arrays of `string` values are not equal and includes error message into revert string on failure.",
- "declaration": "function assertNotEq(string[] calldata left, string[] calldata right, string calldata error) external pure;",
+ "declaration": "function assertNotEq(string[] calldata left, string[] calldata right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertNotEq(string[],string[],string)",
@@ -2964,7 +2964,7 @@
"func": {
"id": "assertNotEq_27",
"description": "Asserts that two arrays of `bytes` values are not equal and includes error message into revert string on failure.",
- "declaration": "function assertNotEq(bytes[] calldata left, bytes[] calldata right, string calldata error) external pure;",
+ "declaration": "function assertNotEq(bytes[] calldata left, bytes[] calldata right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertNotEq(bytes[],bytes[],string)",
@@ -2984,7 +2984,7 @@
"func": {
"id": "assertNotEq_3",
"description": "Asserts that two `uint256` values are not equal and includes error message into revert string on failure.",
- "declaration": "function assertNotEq(uint256 left, uint256 right, string calldata error) external pure;",
+ "declaration": "function assertNotEq(uint256 left, uint256 right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertNotEq(uint256,uint256,string)",
@@ -3024,7 +3024,7 @@
"func": {
"id": "assertNotEq_5",
"description": "Asserts that two `int256` values are not equal and includes error message into revert string on failure.",
- "declaration": "function assertNotEq(int256 left, int256 right, string calldata error) external pure;",
+ "declaration": "function assertNotEq(int256 left, int256 right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertNotEq(int256,int256,string)",
@@ -3064,7 +3064,7 @@
"func": {
"id": "assertNotEq_7",
"description": "Asserts that two `address` values are not equal and includes error message into revert string on failure.",
- "declaration": "function assertNotEq(address left, address right, string calldata error) external pure;",
+ "declaration": "function assertNotEq(address left, address right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertNotEq(address,address,string)",
@@ -3104,7 +3104,7 @@
"func": {
"id": "assertNotEq_9",
"description": "Asserts that two `bytes32` values are not equal and includes error message into revert string on failure.",
- "declaration": "function assertNotEq(bytes32 left, bytes32 right, string calldata error) external pure;",
+ "declaration": "function assertNotEq(bytes32 left, bytes32 right, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertNotEq(bytes32,bytes32,string)",
@@ -3144,7 +3144,7 @@
"func": {
"id": "assertTrue_1",
"description": "Asserts that the given condition is true and includes error message into revert string on failure.",
- "declaration": "function assertTrue(bool condition, string calldata error) external pure;",
+ "declaration": "function assertTrue(bool condition, string calldata err) external pure;",
"visibility": "external",
"mutability": "pure",
"signature": "assertTrue(bool,string)",
@@ -3160,6 +3160,26 @@
"status": "stable",
"safety": "safe"
},
+ {
+ "func": {
+ "id": "assertion",
+ "description": "Used to execute assertion against the next call or contract creation.\nWill revert if the assertion is not triggered.",
+ "declaration": "function assertion(address adopter, bytes calldata createData, bytes4 fnSelector) external;",
+ "visibility": "external",
+ "mutability": "",
+ "signature": "assertion(address,bytes,bytes4)",
+ "selector": "0x85f59e0e",
+ "selectorBytes": [
+ 133,
+ 245,
+ 158,
+ 14
+ ]
+ },
+ "group": "credible",
+ "status": "stable",
+ "safety": "safe"
+ },
{
"func": {
"id": "assume",
diff --git a/crates/cheatcodes/assets/cheatcodes.schema.json b/crates/cheatcodes/assets/cheatcodes.schema.json
index c98cfb69357bd..33ea6ccc367f2 100644
--- a/crates/cheatcodes/assets/cheatcodes.schema.json
+++ b/crates/cheatcodes/assets/cheatcodes.schema.json
@@ -226,6 +226,13 @@
"Group": {
"description": "Cheatcode groups.\nInitially derived and modified from inline comments in [`forge-std`'s `Vm.sol`][vmsol].\n\n[vmsol]: https://github.com/foundry-rs/forge-std/blob/dcb0d52bc4399d37a6545848e3b8f9d03c77b98d/src/Vm.sol",
"oneOf": [
+ {
+ "description": "Cheatcodes that are related to the Phylax Credible Layer\n\nExamples: `assertion`.\n\nSafety: safe",
+ "type": "string",
+ "enum": [
+ "credible"
+ ]
+ },
{
"description": "Cheatcodes that read from, or write to the current EVM execution state.\n\nExamples: any of the `record` cheatcodes, `chainId`, `coinbase`.\n\nSafety: ambiguous, depends on whether the cheatcode is read-only or not.",
"type": "string",
@@ -429,4 +436,4 @@
]
}
}
-}
\ No newline at end of file
+}
diff --git a/crates/cheatcodes/spec/src/cheatcode.rs b/crates/cheatcodes/spec/src/cheatcode.rs
index 89cfb31f1df32..84e5d6bafc381 100644
--- a/crates/cheatcodes/spec/src/cheatcode.rs
+++ b/crates/cheatcodes/spec/src/cheatcode.rs
@@ -68,6 +68,12 @@ pub enum Status<'a> {
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub enum Group {
+ /// Cheatcodes that are related to the Phylax Credible Layer
+ ///
+ /// Examples: `assertion`.
+ ///
+ /// Safety: safe
+ Credible,
/// Cheatcodes that read from, or write to the current EVM execution state.
///
/// Examples: any of the `record` cheatcodes, `chainId`, `coinbase`.
@@ -137,6 +143,7 @@ impl Group {
/// `None`.
pub const fn safety(self) -> Option {
match self {
+ Self::Credible => Some(Safety::Safe),
Self::Evm | Self::Testing => None,
Self::Scripting
| Self::Filesystem
@@ -152,6 +159,7 @@ impl Group {
/// Returns this value as a string.
pub const fn as_str(self) -> &'static str {
match self {
+ Self::Credible => "credible",
Self::Evm => "evm",
Self::Testing => "testing",
Self::Scripting => "scripting",
diff --git a/crates/cheatcodes/spec/src/vm.rs b/crates/cheatcodes/spec/src/vm.rs
index 65f181f6b0e35..d223706ac174c 100644
--- a/crates/cheatcodes/spec/src/vm.rs
+++ b/crates/cheatcodes/spec/src/vm.rs
@@ -19,6 +19,13 @@ sol! {
#[derive(Debug, Cheatcode)] // Keep this list small to avoid unnecessary bloat.
#[sol(abi)]
interface Vm {
+
+ /// Used to execute assertion against the next call or contract creation.
+ /// Will revert if the assertion is not triggered.
+ #[cheatcode(group = Credible, safety = Safe)]
+ function assertion(address adopter, bytes calldata createData, bytes4 fnSelector) external;
+
+
// ======== Types ========
/// Error thrown by cheatcodes.
@@ -1243,7 +1250,7 @@ interface Vm {
/// Asserts that the given condition is true and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertTrue(bool condition, string calldata error) external pure;
+ function assertTrue(bool condition, string calldata err) external pure;
/// Asserts that the given condition is false.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1251,7 +1258,7 @@ interface Vm {
/// Asserts that the given condition is false and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertFalse(bool condition, string calldata error) external pure;
+ function assertFalse(bool condition, string calldata err) external pure;
/// Asserts that two `bool` values are equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1259,7 +1266,7 @@ interface Vm {
/// Asserts that two `bool` values are equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertEq(bool left, bool right, string calldata error) external pure;
+ function assertEq(bool left, bool right, string calldata err) external pure;
/// Asserts that two `uint256` values are equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1267,7 +1274,7 @@ interface Vm {
/// Asserts that two `uint256` values are equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertEq(uint256 left, uint256 right, string calldata error) external pure;
+ function assertEq(uint256 left, uint256 right, string calldata err) external pure;
/// Asserts that two `int256` values are equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1275,7 +1282,7 @@ interface Vm {
/// Asserts that two `int256` values are equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertEq(int256 left, int256 right, string calldata error) external pure;
+ function assertEq(int256 left, int256 right, string calldata err) external pure;
/// Asserts that two `address` values are equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1283,7 +1290,7 @@ interface Vm {
/// Asserts that two `address` values are equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertEq(address left, address right, string calldata error) external pure;
+ function assertEq(address left, address right, string calldata err) external pure;
/// Asserts that two `bytes32` values are equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1291,7 +1298,7 @@ interface Vm {
/// Asserts that two `bytes32` values are equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertEq(bytes32 left, bytes32 right, string calldata error) external pure;
+ function assertEq(bytes32 left, bytes32 right, string calldata err) external pure;
/// Asserts that two `string` values are equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1299,7 +1306,7 @@ interface Vm {
/// Asserts that two `string` values are equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertEq(string calldata left, string calldata right, string calldata error) external pure;
+ function assertEq(string calldata left, string calldata right, string calldata err) external pure;
/// Asserts that two `bytes` values are equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1307,7 +1314,7 @@ interface Vm {
/// Asserts that two `bytes` values are equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertEq(bytes calldata left, bytes calldata right, string calldata error) external pure;
+ function assertEq(bytes calldata left, bytes calldata right, string calldata err) external pure;
/// Asserts that two arrays of `bool` values are equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1315,7 +1322,7 @@ interface Vm {
/// Asserts that two arrays of `bool` values are equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertEq(bool[] calldata left, bool[] calldata right, string calldata error) external pure;
+ function assertEq(bool[] calldata left, bool[] calldata right, string calldata err) external pure;
/// Asserts that two arrays of `uint256 values are equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1323,7 +1330,7 @@ interface Vm {
/// Asserts that two arrays of `uint256` values are equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertEq(uint256[] calldata left, uint256[] calldata right, string calldata error) external pure;
+ function assertEq(uint256[] calldata left, uint256[] calldata right, string calldata err) external pure;
/// Asserts that two arrays of `int256` values are equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1331,7 +1338,7 @@ interface Vm {
/// Asserts that two arrays of `int256` values are equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertEq(int256[] calldata left, int256[] calldata right, string calldata error) external pure;
+ function assertEq(int256[] calldata left, int256[] calldata right, string calldata err) external pure;
/// Asserts that two arrays of `address` values are equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1339,7 +1346,7 @@ interface Vm {
/// Asserts that two arrays of `address` values are equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertEq(address[] calldata left, address[] calldata right, string calldata error) external pure;
+ function assertEq(address[] calldata left, address[] calldata right, string calldata err) external pure;
/// Asserts that two arrays of `bytes32` values are equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1347,7 +1354,7 @@ interface Vm {
/// Asserts that two arrays of `bytes32` values are equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertEq(bytes32[] calldata left, bytes32[] calldata right, string calldata error) external pure;
+ function assertEq(bytes32[] calldata left, bytes32[] calldata right, string calldata err) external pure;
/// Asserts that two arrays of `string` values are equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1355,7 +1362,7 @@ interface Vm {
/// Asserts that two arrays of `string` values are equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertEq(string[] calldata left, string[] calldata right, string calldata error) external pure;
+ function assertEq(string[] calldata left, string[] calldata right, string calldata err) external pure;
/// Asserts that two arrays of `bytes` values are equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1363,7 +1370,7 @@ interface Vm {
/// Asserts that two arrays of `bytes` values are equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertEq(bytes[] calldata left, bytes[] calldata right, string calldata error) external pure;
+ function assertEq(bytes[] calldata left, bytes[] calldata right, string calldata err) external pure;
/// Asserts that two `uint256` values are equal, formatting them with decimals in failure message.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1372,7 +1379,7 @@ interface Vm {
/// Asserts that two `uint256` values are equal, formatting them with decimals in failure message.
/// Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertEqDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;
+ function assertEqDecimal(uint256 left, uint256 right, uint256 decimals, string calldata err) external pure;
/// Asserts that two `int256` values are equal, formatting them with decimals in failure message.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1381,7 +1388,7 @@ interface Vm {
/// Asserts that two `int256` values are equal, formatting them with decimals in failure message.
/// Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertEqDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;
+ function assertEqDecimal(int256 left, int256 right, uint256 decimals, string calldata err) external pure;
/// Asserts that two `bool` values are not equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1389,7 +1396,7 @@ interface Vm {
/// Asserts that two `bool` values are not equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertNotEq(bool left, bool right, string calldata error) external pure;
+ function assertNotEq(bool left, bool right, string calldata err) external pure;
/// Asserts that two `uint256` values are not equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1397,7 +1404,7 @@ interface Vm {
/// Asserts that two `uint256` values are not equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertNotEq(uint256 left, uint256 right, string calldata error) external pure;
+ function assertNotEq(uint256 left, uint256 right, string calldata err) external pure;
/// Asserts that two `int256` values are not equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1405,7 +1412,7 @@ interface Vm {
/// Asserts that two `int256` values are not equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertNotEq(int256 left, int256 right, string calldata error) external pure;
+ function assertNotEq(int256 left, int256 right, string calldata err) external pure;
/// Asserts that two `address` values are not equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1413,7 +1420,7 @@ interface Vm {
/// Asserts that two `address` values are not equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertNotEq(address left, address right, string calldata error) external pure;
+ function assertNotEq(address left, address right, string calldata err) external pure;
/// Asserts that two `bytes32` values are not equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1421,7 +1428,7 @@ interface Vm {
/// Asserts that two `bytes32` values are not equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertNotEq(bytes32 left, bytes32 right, string calldata error) external pure;
+ function assertNotEq(bytes32 left, bytes32 right, string calldata err) external pure;
/// Asserts that two `string` values are not equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1429,7 +1436,7 @@ interface Vm {
/// Asserts that two `string` values are not equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertNotEq(string calldata left, string calldata right, string calldata error) external pure;
+ function assertNotEq(string calldata left, string calldata right, string calldata err) external pure;
/// Asserts that two `bytes` values are not equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1437,7 +1444,7 @@ interface Vm {
/// Asserts that two `bytes` values are not equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertNotEq(bytes calldata left, bytes calldata right, string calldata error) external pure;
+ function assertNotEq(bytes calldata left, bytes calldata right, string calldata err) external pure;
/// Asserts that two arrays of `bool` values are not equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1445,7 +1452,7 @@ interface Vm {
/// Asserts that two arrays of `bool` values are not equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertNotEq(bool[] calldata left, bool[] calldata right, string calldata error) external pure;
+ function assertNotEq(bool[] calldata left, bool[] calldata right, string calldata err) external pure;
/// Asserts that two arrays of `uint256` values are not equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1453,7 +1460,7 @@ interface Vm {
/// Asserts that two arrays of `uint256` values are not equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertNotEq(uint256[] calldata left, uint256[] calldata right, string calldata error) external pure;
+ function assertNotEq(uint256[] calldata left, uint256[] calldata right, string calldata err) external pure;
/// Asserts that two arrays of `int256` values are not equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1461,7 +1468,7 @@ interface Vm {
/// Asserts that two arrays of `int256` values are not equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertNotEq(int256[] calldata left, int256[] calldata right, string calldata error) external pure;
+ function assertNotEq(int256[] calldata left, int256[] calldata right, string calldata err) external pure;
/// Asserts that two arrays of `address` values are not equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1469,7 +1476,7 @@ interface Vm {
/// Asserts that two arrays of `address` values are not equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertNotEq(address[] calldata left, address[] calldata right, string calldata error) external pure;
+ function assertNotEq(address[] calldata left, address[] calldata right, string calldata err) external pure;
/// Asserts that two arrays of `bytes32` values are not equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1477,7 +1484,7 @@ interface Vm {
/// Asserts that two arrays of `bytes32` values are not equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertNotEq(bytes32[] calldata left, bytes32[] calldata right, string calldata error) external pure;
+ function assertNotEq(bytes32[] calldata left, bytes32[] calldata right, string calldata err) external pure;
/// Asserts that two arrays of `string` values are not equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1485,7 +1492,7 @@ interface Vm {
/// Asserts that two arrays of `string` values are not equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertNotEq(string[] calldata left, string[] calldata right, string calldata error) external pure;
+ function assertNotEq(string[] calldata left, string[] calldata right, string calldata err) external pure;
/// Asserts that two arrays of `bytes` values are not equal.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1493,7 +1500,7 @@ interface Vm {
/// Asserts that two arrays of `bytes` values are not equal and includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertNotEq(bytes[] calldata left, bytes[] calldata right, string calldata error) external pure;
+ function assertNotEq(bytes[] calldata left, bytes[] calldata right, string calldata err) external pure;
/// Asserts that two `uint256` values are not equal, formatting them with decimals in failure message.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1502,7 +1509,7 @@ interface Vm {
/// Asserts that two `uint256` values are not equal, formatting them with decimals in failure message.
/// Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertNotEqDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;
+ function assertNotEqDecimal(uint256 left, uint256 right, uint256 decimals, string calldata err) external pure;
/// Asserts that two `int256` values are not equal, formatting them with decimals in failure message.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1511,7 +1518,7 @@ interface Vm {
/// Asserts that two `int256` values are not equal, formatting them with decimals in failure message.
/// Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertNotEqDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;
+ function assertNotEqDecimal(int256 left, int256 right, uint256 decimals, string calldata err) external pure;
/// Compares two `uint256` values. Expects first value to be greater than second.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1520,7 +1527,7 @@ interface Vm {
/// Compares two `uint256` values. Expects first value to be greater than second.
/// Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertGt(uint256 left, uint256 right, string calldata error) external pure;
+ function assertGt(uint256 left, uint256 right, string calldata err) external pure;
/// Compares two `int256` values. Expects first value to be greater than second.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1529,7 +1536,7 @@ interface Vm {
/// Compares two `int256` values. Expects first value to be greater than second.
/// Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertGt(int256 left, int256 right, string calldata error) external pure;
+ function assertGt(int256 left, int256 right, string calldata err) external pure;
/// Compares two `uint256` values. Expects first value to be greater than second.
/// Formats values with decimals in failure message.
@@ -1539,7 +1546,7 @@ interface Vm {
/// Compares two `uint256` values. Expects first value to be greater than second.
/// Formats values with decimals in failure message. Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertGtDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;
+ function assertGtDecimal(uint256 left, uint256 right, uint256 decimals, string calldata err) external pure;
/// Compares two `int256` values. Expects first value to be greater than second.
/// Formats values with decimals in failure message.
@@ -1549,7 +1556,7 @@ interface Vm {
/// Compares two `int256` values. Expects first value to be greater than second.
/// Formats values with decimals in failure message. Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertGtDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;
+ function assertGtDecimal(int256 left, int256 right, uint256 decimals, string calldata err) external pure;
/// Compares two `uint256` values. Expects first value to be greater than or equal to second.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1558,7 +1565,7 @@ interface Vm {
/// Compares two `uint256` values. Expects first value to be greater than or equal to second.
/// Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertGe(uint256 left, uint256 right, string calldata error) external pure;
+ function assertGe(uint256 left, uint256 right, string calldata err) external pure;
/// Compares two `int256` values. Expects first value to be greater than or equal to second.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1567,7 +1574,7 @@ interface Vm {
/// Compares two `int256` values. Expects first value to be greater than or equal to second.
/// Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertGe(int256 left, int256 right, string calldata error) external pure;
+ function assertGe(int256 left, int256 right, string calldata err) external pure;
/// Compares two `uint256` values. Expects first value to be greater than or equal to second.
/// Formats values with decimals in failure message.
@@ -1577,7 +1584,7 @@ interface Vm {
/// Compares two `uint256` values. Expects first value to be greater than or equal to second.
/// Formats values with decimals in failure message. Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertGeDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;
+ function assertGeDecimal(uint256 left, uint256 right, uint256 decimals, string calldata err) external pure;
/// Compares two `int256` values. Expects first value to be greater than or equal to second.
/// Formats values with decimals in failure message.
@@ -1587,7 +1594,7 @@ interface Vm {
/// Compares two `int256` values. Expects first value to be greater than or equal to second.
/// Formats values with decimals in failure message. Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertGeDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;
+ function assertGeDecimal(int256 left, int256 right, uint256 decimals, string calldata err) external pure;
/// Compares two `uint256` values. Expects first value to be less than second.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1596,7 +1603,7 @@ interface Vm {
/// Compares two `uint256` values. Expects first value to be less than second.
/// Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertLt(uint256 left, uint256 right, string calldata error) external pure;
+ function assertLt(uint256 left, uint256 right, string calldata err) external pure;
/// Compares two `int256` values. Expects first value to be less than second.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1605,7 +1612,7 @@ interface Vm {
/// Compares two `int256` values. Expects first value to be less than second.
/// Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertLt(int256 left, int256 right, string calldata error) external pure;
+ function assertLt(int256 left, int256 right, string calldata err) external pure;
/// Compares two `uint256` values. Expects first value to be less than second.
/// Formats values with decimals in failure message.
@@ -1615,7 +1622,7 @@ interface Vm {
/// Compares two `uint256` values. Expects first value to be less than second.
/// Formats values with decimals in failure message. Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertLtDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;
+ function assertLtDecimal(uint256 left, uint256 right, uint256 decimals, string calldata err) external pure;
/// Compares two `int256` values. Expects first value to be less than second.
/// Formats values with decimals in failure message.
@@ -1625,7 +1632,7 @@ interface Vm {
/// Compares two `int256` values. Expects first value to be less than second.
/// Formats values with decimals in failure message. Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertLtDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;
+ function assertLtDecimal(int256 left, int256 right, uint256 decimals, string calldata err) external pure;
/// Compares two `uint256` values. Expects first value to be less than or equal to second.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1634,7 +1641,7 @@ interface Vm {
/// Compares two `uint256` values. Expects first value to be less than or equal to second.
/// Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertLe(uint256 left, uint256 right, string calldata error) external pure;
+ function assertLe(uint256 left, uint256 right, string calldata err) external pure;
/// Compares two `int256` values. Expects first value to be less than or equal to second.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1643,7 +1650,7 @@ interface Vm {
/// Compares two `int256` values. Expects first value to be less than or equal to second.
/// Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertLe(int256 left, int256 right, string calldata error) external pure;
+ function assertLe(int256 left, int256 right, string calldata err) external pure;
/// Compares two `uint256` values. Expects first value to be less than or equal to second.
/// Formats values with decimals in failure message.
@@ -1653,7 +1660,7 @@ interface Vm {
/// Compares two `uint256` values. Expects first value to be less than or equal to second.
/// Formats values with decimals in failure message. Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertLeDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;
+ function assertLeDecimal(uint256 left, uint256 right, uint256 decimals, string calldata err) external pure;
/// Compares two `int256` values. Expects first value to be less than or equal to second.
/// Formats values with decimals in failure message.
@@ -1663,7 +1670,7 @@ interface Vm {
/// Compares two `int256` values. Expects first value to be less than or equal to second.
/// Formats values with decimals in failure message. Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertLeDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;
+ function assertLeDecimal(int256 left, int256 right, uint256 decimals, string calldata err) external pure;
/// Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1672,7 +1679,7 @@ interface Vm {
/// Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`.
/// Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertApproxEqAbs(uint256 left, uint256 right, uint256 maxDelta, string calldata error) external pure;
+ function assertApproxEqAbs(uint256 left, uint256 right, uint256 maxDelta, string calldata err) external pure;
/// Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`.
#[cheatcode(group = Testing, safety = Safe)]
@@ -1681,7 +1688,7 @@ interface Vm {
/// Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`.
/// Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertApproxEqAbs(int256 left, int256 right, uint256 maxDelta, string calldata error) external pure;
+ function assertApproxEqAbs(int256 left, int256 right, uint256 maxDelta, string calldata err) external pure;
/// Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`.
/// Formats values with decimals in failure message.
@@ -1696,7 +1703,7 @@ interface Vm {
uint256 right,
uint256 maxDelta,
uint256 decimals,
- string calldata error
+ string calldata err
) external pure;
/// Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`.
@@ -1712,7 +1719,7 @@ interface Vm {
int256 right,
uint256 maxDelta,
uint256 decimals,
- string calldata error
+ string calldata err
) external pure;
/// Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`.
@@ -1724,7 +1731,7 @@ interface Vm {
/// `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%
/// Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertApproxEqRel(uint256 left, uint256 right, uint256 maxPercentDelta, string calldata error) external pure;
+ function assertApproxEqRel(uint256 left, uint256 right, uint256 maxPercentDelta, string calldata err) external pure;
/// Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`.
/// `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%
@@ -1735,7 +1742,7 @@ interface Vm {
/// `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%
/// Includes error message into revert string on failure.
#[cheatcode(group = Testing, safety = Safe)]
- function assertApproxEqRel(int256 left, int256 right, uint256 maxPercentDelta, string calldata error) external pure;
+ function assertApproxEqRel(int256 left, int256 right, uint256 maxPercentDelta, string calldata err) external pure;
/// Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`.
/// `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%
@@ -1757,7 +1764,7 @@ interface Vm {
uint256 right,
uint256 maxPercentDelta,
uint256 decimals,
- string calldata error
+ string calldata err
) external pure;
/// Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`.
@@ -1780,7 +1787,7 @@ interface Vm {
int256 right,
uint256 maxPercentDelta,
uint256 decimals,
- string calldata error
+ string calldata err
) external pure;
/// Returns true if the current Foundry version is greater than or equal to the given version.
diff --git a/crates/cheatcodes/src/credible.rs b/crates/cheatcodes/src/credible.rs
new file mode 100644
index 0000000000000..ae108a2eeb634
--- /dev/null
+++ b/crates/cheatcodes/src/credible.rs
@@ -0,0 +1,510 @@
+use crate::{Cheatcode, Cheatcodes, CheatcodesExecutor, CheatsCtxt, Result, Vm::*};
+use alloy_primitives::{Bytes, FixedBytes, TxKind};
+use assertion_executor::{
+ ExecutorConfig,
+ db::{DatabaseCommit, DatabaseRef, fork_db::ForkDb},
+ primitives::{
+ AccountInfo, Address, AssertionFunctionExecutionResult, B256, Bytecode, ExecutionResult,
+ TxEnv, TxValidationResult, U256,
+ },
+ store::{AssertionState, AssertionStore},
+};
+use foundry_evm_core::{
+ decode::RevertDecoder,
+ env::FoundryContextExt,
+ evm::{FoundryContextFor, FoundryEvmNetwork},
+};
+use foundry_fork_db::DatabaseError;
+use revm::{
+ Database,
+ context::{Block, BlockEnv, ContextTr, JournalTr, Transaction},
+};
+use std::{
+ cmp::max,
+ collections::HashSet,
+ sync::{Arc, Mutex},
+};
+
+use revm::primitives::eip7825::TX_GAS_LIMIT_CAP;
+
+/// Wrapper around DatabaseExt so assertion-executor can clone and share the active database.
+struct ThreadSafeDb<'db, DB: Database + Send> {
+ db: Arc>,
+}
+
+impl + Send> Clone for ThreadSafeDb<'_, DB> {
+ fn clone(&self) -> Self {
+ Self { db: self.db.clone() }
+ }
+}
+
+impl + Send> std::fmt::Debug for ThreadSafeDb<'_, DB> {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ write!(f, "ThreadSafeDb")
+ }
+}
+
+impl<'db, DB: Database + Send> ThreadSafeDb<'db, DB> {
+ pub fn new(db: &'db mut DB) -> Self {
+ Self { db: Arc::new(Mutex::new(db)) }
+ }
+}
+
+impl + Send> DatabaseRef for ThreadSafeDb<'_, DB> {
+ type Error = DatabaseError;
+
+ fn basic_ref(
+ &self,
+ address: Address,
+ ) -> Result, ::Error> {
+ self.db.lock().unwrap().basic(address)
+ }
+
+ fn code_by_hash_ref(&self, code_hash: B256) -> Result::Error> {
+ self.db.lock().unwrap().code_by_hash(code_hash)
+ }
+
+ fn storage_ref(
+ &self,
+ address: Address,
+ index: U256,
+ ) -> Result::Error> {
+ self.db.lock().unwrap().storage(address, index)
+ }
+
+ fn block_hash_ref(&self, number: u64) -> Result::Error> {
+ self.db.lock().unwrap().block_hash(number)
+ }
+}
+
+impl Cheatcode for assertionCall {
+ fn apply_stateful(&self, ccx: &mut CheatsCtxt<'_, '_, FEN>) -> Result {
+ let Self { adopter, createData: create_data, fnSelector: fn_selector } = self;
+
+ ensure!(
+ ccx.state.assertion.is_none(),
+ "you must call another function prior to setting another assertion"
+ );
+ let assertion = Assertion {
+ adopter: *adopter,
+ create_data: create_data.to_vec(),
+ fn_selector: *fn_selector,
+ depth: ccx.ecx.journal().depth(),
+ };
+
+ ccx.state.assertion = Some(assertion);
+ Ok(Default::default())
+ }
+}
+
+#[derive(Debug, Clone)]
+pub struct Assertion {
+ pub adopter: Address,
+ pub create_data: Vec,
+ pub fn_selector: FixedBytes<4>,
+ pub depth: usize,
+}
+
+pub struct TxAttributes {
+ pub value: U256,
+ pub data: Bytes,
+ pub caller: Address,
+ pub kind: TxKind,
+ pub gas_limit: u64,
+}
+
+/// Maximum gas allowed for assertion execution (300k gas).
+/// Assertions exceeding this limit will cause the test to fail.
+const ASSERTION_GAS_LIMIT: u64 = 300_000;
+
+/// Checks if the assertion gas usage is within the allowed limit.
+/// Returns a detailed log message if the limit is exceeded, None otherwise.
+fn check_assertion_gas_limit(gas_used: u64) -> Option {
+ (gas_used > ASSERTION_GAS_LIMIT).then(|| {
+ let over_by = gas_used - ASSERTION_GAS_LIMIT;
+ let over_percent = (over_by as f64 / ASSERTION_GAS_LIMIT as f64) * 100.0;
+ format!(
+ "Assertion used {gas_used} gas, exceeding limit of {ASSERTION_GAS_LIMIT} by {over_by} ({over_percent:.1}% over)"
+ )
+ })
+}
+
+fn build_tx_env(
+ tx_attributes: TxAttributes,
+ base_tx_env: &impl Transaction,
+ chain_id: u64,
+ nonce: u64,
+) -> TxEnv {
+ let tx_gas_limit = tx_attributes.gas_limit.min(TX_GAS_LIMIT_CAP);
+ TxEnv {
+ tx_type: base_tx_env.tx_type(),
+ caller: tx_attributes.caller,
+ gas_limit: tx_gas_limit,
+ gas_price: base_tx_env.gas_price(),
+ chain_id: Some(chain_id),
+ value: tx_attributes.value,
+ data: tx_attributes.data,
+ kind: tx_attributes.kind,
+ nonce,
+ gas_priority_fee: base_tx_env.max_priority_fee_per_gas(),
+ blob_hashes: base_tx_env.blob_versioned_hashes().to_vec(),
+ max_fee_per_blob_gas: base_tx_env.max_fee_per_blob_gas(),
+ ..Default::default()
+ }
+}
+
+fn build_block_env(block: &impl Block) -> BlockEnv {
+ BlockEnv {
+ number: block.number(),
+ beneficiary: block.beneficiary(),
+ timestamp: block.timestamp(),
+ gas_limit: block.gas_limit(),
+ basefee: block.basefee(),
+ difficulty: block.difficulty(),
+ prevrandao: block.prevrandao(),
+ blob_excess_gas_and_price: block.blob_excess_gas_and_price(),
+ ..Default::default()
+ }
+}
+
+/// Used to handle assertion execution in inspector in calls after the cheatcode was called.
+pub fn execute_assertion(
+ assertion: &Assertion,
+ tx_attributes: TxAttributes,
+ ecx: &mut FoundryContextFor<'_, FEN>,
+ executor: &mut dyn CheatcodesExecutor,
+ cheats: &mut Cheatcodes,
+) -> Result<(), crate::Error> {
+ let spec_id = ecx.cfg().spec.into();
+ let block = build_block_env(ecx.block());
+ let chain_id = ecx.cfg().chain_id;
+ let nonce = ecx
+ .journal_mut()
+ .load_account(tx_attributes.caller)
+ .map(|acc| acc.data.info.nonce)
+ .unwrap_or(0);
+
+ // Prepare assertion store
+ let config = ExecutorConfig {
+ spec_id,
+ chain_id,
+ assertion_gas_limit: TX_GAS_LIMIT_CAP,
+ assertion_evaluation_enabled: true,
+ };
+
+ let store = AssertionStore::new_ephemeral();
+
+ if assertion.create_data.is_empty() {
+ bail!("Assertion bytecode is empty");
+ }
+
+ let mut assertion_state =
+ AssertionState::new_active(&Bytes::from_iter(assertion.create_data.clone()), &config)
+ .expect("Failed to create assertion state");
+
+ // Filter triggers to only keep those matching our fn_selector
+ assertion_state.trigger_recorder.triggers.retain(|_, fn_selectors| {
+ if fn_selectors.contains(&assertion.fn_selector) {
+ *fn_selectors = HashSet::from_iter([assertion.fn_selector]);
+ true
+ } else {
+ false
+ }
+ });
+
+ store.insert(assertion.adopter, assertion_state).expect("Failed to store assertions");
+
+ let tx_env = build_tx_env(tx_attributes, ecx.tx(), chain_id, nonce);
+
+ let mut assertion_executor = config.build(store);
+
+ let (raw_db, journal_inner) = ecx.db_journal_inner_mut();
+ let state = journal_inner.state.clone();
+ let db = ThreadSafeDb::new(raw_db);
+
+ // Commit current journal state so that it is available for assertions and triggering tx
+ let mut fork_db = ForkDb::new(db.clone());
+ fork_db.commit(state);
+
+ // Odysseas: This is a hack to use the new unified codepath for validate_transaction_ext_db
+ // Effectively, we are applying the transaction in a clone of the currently running database
+ // which is then used by the fork_db.
+ // TODO: Remove this once we have a proper way to handle this.
+ let mut ext_db = revm::database::WrapDatabaseRef(fork_db.clone());
+
+ let tx_validation: TxValidationResult = assertion_executor
+ .validate_transaction_ext_db(block, &tx_env, &mut fork_db, &mut ext_db)
+ .map_err(|e| format!("Assertion Executor Error: {e:#?}"))?;
+
+ // if transaction execution reverted, log the revert reason
+ if !tx_validation.result_and_state.result.is_success() {
+ bail!(format!(
+ "Mock Transaction Reverted: {}",
+ decode_invalidated_assertion(&tx_validation.result_and_state.result)
+ ));
+ }
+
+ // else get information about the assertion execution
+ let total_assertion_gas = tx_validation.total_assertions_gas();
+ let total_assertions_ran = tx_validation.total_assertion_funcs_ran();
+ let tx_gas_used = tx_validation.result_and_state.result.tx_gas_used();
+
+ if total_assertions_ran != 1 {
+ // If assertions were not executed, we need to update expect revert depth to
+ // allow for matching on this revert condition, as we will not execute against
+ // test evm in this case.
+ journal_inner.checkpoint();
+
+ if let Some(expected) = &mut cheats.expected_revert {
+ expected.max_depth = max(journal_inner.depth, expected.max_depth);
+ }
+ bail!("Expected 1 assertion to be executed, but {total_assertions_ran} were executed.");
+ }
+
+ //Expect is safe because we validate above that 1 assertion was ran.
+ let assertion_contract = tx_validation
+ .assertions_executions
+ .first()
+ .expect("Expected 1 assertion to be executed, but got 0");
+
+ let assertion_fn_result = assertion_contract
+ .assertion_fns_results
+ .first()
+ .expect("Expected 1 assertion to be executed, but got 0");
+
+ if !assertion_fn_result.console_logs.is_empty() {
+ executor.console_log("Assertion function logs: ");
+ for log in &assertion_fn_result.console_logs {
+ executor.console_log(log);
+ }
+ }
+
+ executor.console_log(&format!(
+ "Transaction gas cost: {tx_gas_used}\n Assertion gas cost: {total_assertion_gas}"
+ ));
+
+ if !tx_validation.is_valid() {
+ // If invalidated, we don't execute against test evm, so we must update expected depth
+ // for expect revert cheatcode.
+ journal_inner.checkpoint();
+
+ if let Some(expected) = &mut cheats.expected_revert {
+ expected.max_depth = max(journal_inner.depth, expected.max_depth);
+ }
+
+ let (msg, result) = match &assertion_fn_result.result {
+ AssertionFunctionExecutionResult::AssertionContractDeployFailure(r) => {
+ ("Assertion contract deploy failed", r)
+ }
+ AssertionFunctionExecutionResult::AssertionExecutionResult(r) => {
+ ("Assertion function reverted", r)
+ }
+ };
+ executor.console_log(&format!("{msg}: {}", decode_invalidated_assertion(result)));
+ return Err(crate::Error::from(result.output().unwrap_or_default().clone()));
+ }
+
+ if let Some(log_msg) = check_assertion_gas_limit(total_assertion_gas) {
+ executor.console_log(&log_msg);
+ bail!("Assertion exceeded gas limit");
+ }
+
+ Ok(())
+}
+
+/// Decodes revert data from an assertion execution result.
+/// Uses foundry's RevertDecoder to handle all revert types:
+/// - Error(string) from revert()/require()
+/// - Panic(uint256) from assert()/overflow/etc
+/// - Custom errors
+/// - Raw bytes as fallback
+fn decode_invalidated_assertion(result: &ExecutionResult) -> String {
+ match result {
+ ExecutionResult::Success { .. } => {
+ "Tried to decode invalidated assertion, but result was success. \
+ This is a bug in phoundry. Please report to the Phylax team."
+ .to_string()
+ }
+ ExecutionResult::Revert { output, .. } => RevertDecoder::default().decode(output, None),
+ ExecutionResult::Halt { reason, .. } => {
+ format!("Halt reason: {reason:#?}")
+ }
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use alloy_sol_types::{Revert, SolError};
+ use assertion_executor::primitives::HaltReason;
+ use revm::context_interface::result::{Output, ResultGas, SuccessReason};
+
+ #[test]
+ fn test_decode_revert_error_success() {
+ let result = ExecutionResult::Success {
+ gas: ResultGas::new_with_state_gas(0, 0, 0, 0),
+ logs: vec![],
+ output: Output::Call(Bytes::new()),
+ reason: SuccessReason::Return,
+ };
+ let decoded = decode_invalidated_assertion(&result);
+ assert!(decoded.contains("bug in phoundry"));
+ }
+
+ #[test]
+ fn test_decode_revert_error_revert() {
+ let revert_reason = "Something is a bit fky wuky";
+ let revert_output = Revert::new((revert_reason.to_string(),)).abi_encode();
+ let result = ExecutionResult::Revert {
+ output: revert_output.into(),
+ gas: ResultGas::new_with_state_gas(0, 0, 0, 0),
+ logs: vec![],
+ };
+ let decoded = decode_invalidated_assertion(&result);
+ assert_eq!(decoded, revert_reason);
+ }
+
+ #[test]
+ fn test_decode_revert_panic() {
+ // Panic(uint256) with code 0x01 (assertion failed)
+ let panic_output = alloy_sol_types::Panic::from(0x01).abi_encode();
+ let result = ExecutionResult::Revert {
+ output: panic_output.into(),
+ gas: ResultGas::new_with_state_gas(0, 0, 0, 0),
+ logs: vec![],
+ };
+ let decoded = decode_invalidated_assertion(&result);
+ assert!(decoded.contains("Panic") || decoded.contains("panic"));
+ }
+
+ #[test]
+ fn test_decode_revert_raw_bytes() {
+ // Raw bytes that don't match any known format
+ let raw_bytes = vec![0xde, 0xad, 0xbe, 0xef];
+ let result = ExecutionResult::Revert {
+ output: raw_bytes.into(),
+ gas: ResultGas::new_with_state_gas(0, 0, 0, 0),
+ logs: vec![],
+ };
+ let decoded = decode_invalidated_assertion(&result);
+ // Should contain hex representation
+ assert!(decoded.contains("deadbeef") || decoded.contains("custom error"));
+ }
+
+ #[test]
+ fn test_decode_revert_error_halt() {
+ let halt_reason = HaltReason::CallTooDeep;
+ let result = ExecutionResult::Halt {
+ reason: halt_reason,
+ gas: ResultGas::new_with_state_gas(0, 0, 0, 0),
+ logs: vec![],
+ };
+ let decoded = decode_invalidated_assertion(&result);
+ assert_eq!(decoded, "Halt reason: CallTooDeep");
+ }
+
+ #[test]
+ fn test_build_tx_env_uses_base_gas_fields() {
+ let base_tx_env = TxEnv {
+ gas_limit: 50_000,
+ gas_price: 123,
+ gas_priority_fee: Some(7),
+ tx_type: 2,
+ ..Default::default()
+ };
+ let tx_attributes = TxAttributes {
+ value: U256::from(1),
+ data: Bytes::from(vec![0x01, 0x02]),
+ caller: Address::from([0x11; 20]),
+ kind: TxKind::Call(Address::from([0x22; 20])),
+ gas_limit: 40_000,
+ };
+ let tx_env = build_tx_env(tx_attributes, &base_tx_env, 1, 9);
+
+ assert_eq!(tx_env.gas_limit, 40_000);
+ assert_eq!(tx_env.gas_price, 123);
+ assert_eq!(tx_env.gas_priority_fee, Some(7));
+ assert_eq!(tx_env.tx_type, 2);
+ assert_eq!(tx_env.chain_id, Some(1));
+ assert_eq!(tx_env.nonce, 9);
+ assert_eq!(tx_env.caller, Address::from([0x11; 20]));
+ assert_eq!(tx_env.value, U256::from(1));
+ assert_eq!(tx_env.data, Bytes::from(vec![0x01, 0x02]));
+ assert_eq!(tx_env.kind, TxKind::Call(Address::from([0x22; 20])));
+ }
+
+ #[test]
+ fn test_build_tx_env_caps_gas_limit() {
+ let base_tx_env = TxEnv {
+ gas_limit: TX_GAS_LIMIT_CAP.saturating_add(1),
+ gas_price: 1,
+ ..Default::default()
+ };
+ let tx_attributes = TxAttributes {
+ value: U256::ZERO,
+ data: Bytes::new(),
+ caller: Address::from([0x33; 20]),
+ kind: TxKind::Call(Address::from([0x44; 20])),
+ gas_limit: TX_GAS_LIMIT_CAP.saturating_add(1),
+ };
+ let tx_env = build_tx_env(tx_attributes, &base_tx_env, 1, 0);
+
+ assert_eq!(tx_env.gas_limit, TX_GAS_LIMIT_CAP);
+ }
+
+ #[test]
+ fn test_assertion_gas_limit_constant() {
+ // Ensure the gas limit is set to the expected value (300k)
+ assert_eq!(ASSERTION_GAS_LIMIT, 300_000);
+ }
+
+ #[test]
+ fn test_check_gas_limit_under() {
+ // Gas usage under limit should return None
+ assert!(check_assertion_gas_limit(100_000).is_none());
+ assert!(check_assertion_gas_limit(299_999).is_none());
+ }
+
+ #[test]
+ fn test_check_gas_limit_exact() {
+ // Gas usage exactly at limit should return None
+ assert!(check_assertion_gas_limit(300_000).is_none());
+ }
+
+ #[test]
+ fn test_check_gas_limit_over() {
+ // Gas usage over limit should return error message with details
+ let result = check_assertion_gas_limit(450_000);
+ assert!(result.is_some());
+ let msg = result.unwrap();
+ // Should contain: gas used, limit, absolute over, percentage
+ assert!(msg.contains("450000"), "should contain gas used");
+ assert!(msg.contains("300000"), "should contain limit");
+ assert!(msg.contains("150000"), "should contain absolute over amount");
+ assert!(msg.contains("50.0%"), "should contain percentage over");
+ }
+
+ #[test]
+ fn test_check_gas_limit_over_small() {
+ // Just 1 gas over the limit
+ let result = check_assertion_gas_limit(300_001);
+ assert!(result.is_some());
+ let msg = result.unwrap();
+ assert!(msg.contains("300001"));
+ assert!(msg.contains("by 1"));
+ assert!(msg.contains("0.0%")); // 1/300000 ≈ 0.0003%
+ }
+
+ #[test]
+ fn test_check_gas_limit_zero() {
+ // Zero gas should be fine
+ assert!(check_assertion_gas_limit(0).is_none());
+ }
+
+ #[test]
+ fn test_check_gas_limit_max() {
+ // Max u64 should definitely exceed
+ let result = check_assertion_gas_limit(u64::MAX);
+ assert!(result.is_some());
+ }
+}
diff --git a/crates/cheatcodes/src/inspector.rs b/crates/cheatcodes/src/inspector.rs
index b22f76714dd0f..78acecf8be6fa 100644
--- a/crates/cheatcodes/src/inspector.rs
+++ b/crates/cheatcodes/src/inspector.rs
@@ -44,7 +44,7 @@ use foundry_evm_core::{
},
};
use foundry_evm_traces::{
- TracingInspector, TracingInspectorConfig, identifier::SignaturesIdentifier,
+ CallTraceArena, TracingInspector, TracingInspectorConfig, identifier::SignaturesIdentifier,
};
use foundry_wallets::wallet_multi::MultiWallet;
use itertools::Itertools;
@@ -464,6 +464,10 @@ pub struct Cheatcodes {
/// Expected revert information
pub expected_revert: Option,
+ /// Assertion information (only available with `credible` feature)
+ #[cfg(feature = "credible")]
+ pub assertion: Option,
+
/// Assume next call can revert and discard fuzz run if it does.
pub assume_no_revert: Option,
@@ -558,6 +562,11 @@ pub struct Cheatcodes {
/// Ignored traces.
pub ignored_traces: IgnoredTraces,
+ /// Assertion traces collected during assertion execution.
+ assertion_traces: Vec,
+ /// Trigger call traces collected during assertion execution.
+ assertion_trigger_traces: Vec,
+
/// Addresses with arbitrary storage.
pub arbitrary_storage: Option,
@@ -607,6 +616,8 @@ impl Cheatcodes {
mocked_functions: Default::default(),
expected_calls: Default::default(),
expected_emits: Default::default(),
+ #[cfg(feature = "credible")]
+ assertion: Default::default(),
expected_creates: Default::default(),
allowed_mem_writes: Default::default(),
broadcast: Default::default(),
@@ -623,6 +634,8 @@ impl Cheatcodes {
intercept_next_create_call: Default::default(),
test_runner: Default::default(),
ignored_traces: Default::default(),
+ assertion_traces: Default::default(),
+ assertion_trigger_traces: Default::default(),
arbitrary_storage: Default::default(),
deprecated: Default::default(),
wallets: Default::default(),
@@ -654,6 +667,32 @@ impl Cheatcodes {
self.wallets = Some(wallets);
}
+ /// Stores assertion traces collected during execution.
+ pub fn push_assertion_traces(&mut self, traces: I)
+ where
+ I: IntoIterator- ,
+ {
+ self.assertion_traces.extend(traces);
+ }
+
+ /// Stores trigger call traces collected during assertion execution.
+ pub fn push_assertion_trigger_traces
(&mut self, traces: I)
+ where
+ I: IntoIterator- ,
+ {
+ self.assertion_trigger_traces.extend(traces);
+ }
+
+ /// Drains assertion traces for inclusion in test output.
+ pub fn take_assertion_traces(&mut self) -> Vec
{
+ std::mem::take(&mut self.assertion_traces)
+ }
+
+ /// Drains trigger call traces for inclusion in test output.
+ pub fn take_assertion_trigger_traces(&mut self) -> Vec {
+ std::mem::take(&mut self.assertion_trigger_traces)
+ }
+
/// Adds a delegation to the active delegations list.
pub fn add_delegation(&mut self, authorization: SignedAuthorization) {
self.active_delegations.push(authorization);
@@ -856,42 +895,6 @@ impl Cheatcodes {
}
}
- // Handle mocked calls
- if let Some(mocks) = self.mocked_calls.get_mut(&call.bytecode_address) {
- let ctx = MockCallDataContext {
- calldata: call.input.bytes(ecx),
- value: call.transfer_value(),
- };
-
- if let Some(return_data_queue) = match mocks.get_mut(&ctx) {
- Some(queue) => Some(queue),
- None => mocks
- .iter_mut()
- .find(|(mock, _)| {
- call.input.bytes(ecx).get(..mock.calldata.len()) == Some(&mock.calldata[..])
- && mock.value.is_none_or(|value| Some(value) == call.transfer_value())
- })
- .map(|(_, v)| v),
- } && let Some(return_data) = if return_data_queue.len() == 1 {
- // If the mocked calls stack has a single element in it, don't empty it
- return_data_queue.front().map(|x| x.to_owned())
- } else {
- // Else, we pop the front element
- return_data_queue.pop_front()
- } {
- return Some(CallOutcome {
- result: InterpreterResult {
- result: return_data.ret_type,
- output: return_data.data,
- gas,
- },
- memory_offset: call.return_memory_offset.clone(),
- was_precompile_called: true,
- precompile_call_logs: vec![],
- });
- }
- }
-
// Apply our prank
if let Some(prank) = &self.get_prank(curr_depth) {
// Apply delegate call, `call.caller`` will not equal `prank.prank_caller`
@@ -932,6 +935,72 @@ impl Cheatcodes {
}
}
+ // Handle mocked calls
+ if let Some(mocks) = self.mocked_calls.get_mut(&call.bytecode_address) {
+ let ctx = MockCallDataContext {
+ calldata: call.input.bytes(ecx),
+ value: call.transfer_value(),
+ };
+
+ if let Some(return_data_queue) = match mocks.get_mut(&ctx) {
+ Some(queue) => Some(queue),
+ None => mocks
+ .iter_mut()
+ .find(|(mock, _)| {
+ call.input.bytes(ecx).get(..mock.calldata.len()) == Some(&mock.calldata[..])
+ && mock.value.is_none_or(|value| Some(value) == call.transfer_value())
+ })
+ .map(|(_, v)| v),
+ } && let Some(return_data) = return_data_queue.front().map(|x| x.to_owned())
+ {
+ if let Some(value) = call.transfer_value() {
+ let checkpoint = ecx.journal_mut().checkpoint();
+ match ecx.journal_mut().transfer_loaded(
+ call.transfer_from(),
+ call.transfer_to(),
+ value,
+ ) {
+ None => {
+ if return_data.ret_type.is_ok() {
+ ecx.journal_mut().checkpoint_commit();
+ } else {
+ ecx.journal_mut().checkpoint_revert(checkpoint);
+ }
+ }
+ Some(err) => {
+ ecx.journal_mut().checkpoint_revert(checkpoint);
+ return Some(CallOutcome {
+ result: InterpreterResult {
+ result: err.into(),
+ output: Bytes::new(),
+ gas,
+ },
+ memory_offset: call.return_memory_offset.clone(),
+ was_precompile_called: false,
+ precompile_call_logs: vec![],
+ });
+ }
+ }
+ }
+
+ // If the mocked calls stack has a single element in it, don't empty it
+ if return_data_queue.len() > 1 {
+ return_data_queue.pop_front();
+ }
+
+ return Some(CallOutcome {
+ result: InterpreterResult {
+ result: return_data.ret_type,
+ output: return_data.data,
+ gas,
+ },
+ memory_offset: call.return_memory_offset.clone(),
+ was_precompile_called: true,
+ precompile_call_logs: vec![],
+ });
+ }
+ }
+
// Apply EIP-2930 access list
self.apply_accesslist(ecx);
@@ -1098,6 +1167,37 @@ impl Cheatcodes {
}]);
}
+ #[cfg(feature = "credible")]
+ if let Some(assertion) = self.assertion.take() {
+ let tx_attributes = crate::credible::TxAttributes {
+ value: call.call_value(),
+ data: call.input.bytes(ecx),
+ caller: call.caller,
+ kind: TxKind::Call(call.target_address),
+ gas_limit: call.gas_limit,
+ };
+
+ return match crate::credible::execute_assertion(
+ &assertion,
+ tx_attributes,
+ ecx,
+ executor,
+ self,
+ ) {
+ Ok(()) => None,
+ Err(err) => Some(CallOutcome {
+ result: InterpreterResult {
+ result: InstructionResult::Revert,
+ output: err.abi_encode().into(),
+ gas,
+ },
+ memory_offset: call.return_memory_offset.clone(),
+ was_precompile_called: false,
+ precompile_call_logs: vec![],
+ }),
+ };
+ }
+
None
}
@@ -1497,6 +1597,21 @@ impl Inspector> for Cheatcode
}
}
+ // this will ensure we don't have false positives when trying to diagnose reverts in fork
+ // mode
+ let diag = self.fork_revert_diagnostic.take();
+
+ // If the call already reverted, preserve that primary failure and skip post-call
+ // expect* validation so it cannot overwrite the original revert.
+ if outcome.result.is_revert() {
+ // if there's a revert and a previous call was diagnosed as fork related revert then we
+ // can return a better error here
+ if let Some(err) = diag {
+ outcome.result.output = Error::encode(err.to_error_msg(&self.labels));
+ }
+ return;
+ }
+
// At the end of the call,
// we need to check if we've found all the emits.
// We know we've found all the expected emits in the right order
@@ -1574,19 +1689,6 @@ impl Inspector> for Cheatcode
self.expected_emits.clear()
}
- // this will ensure we don't have false positives when trying to diagnose reverts in fork
- // mode
- let diag = self.fork_revert_diagnostic.take();
-
- // if there's a revert and a previous call was diagnosed as fork related revert then we can
- // return a better error here
- if outcome.result.is_revert()
- && let Some(err) = diag
- {
- outcome.result.output = Error::encode(err.to_error_msg(&self.labels));
- return;
- }
-
// try to diagnose reverts in multi-fork mode where a call is made to an address that does
// not exist
if let TxKind::Call(test_contract) = ecx.tx().kind() {
@@ -1830,6 +1932,35 @@ impl Inspector> for Cheatcode
}]);
}
+ #[cfg(feature = "credible")]
+ if let Some(assertion) = self.assertion.take() {
+ let tx_attributes = crate::credible::TxAttributes {
+ value: input.value(),
+ data: input.init_code(),
+ caller: input.caller(),
+ kind: TxKind::Create,
+ gas_limit: input.gas_limit(),
+ };
+
+ return match crate::credible::execute_assertion(
+ &assertion,
+ tx_attributes,
+ ecx,
+ &mut TransparentCheatcodesExecutor,
+ self,
+ ) {
+ Ok(()) => None,
+ Err(err) => Some(CreateOutcome {
+ result: InterpreterResult {
+ result: InstructionResult::Revert,
+ output: err.abi_encode().into(),
+ gas,
+ },
+ address: None,
+ }),
+ };
+ }
+
None
}
@@ -1867,10 +1998,23 @@ impl Inspector> for Cheatcode
}
// Handle expected reverts
- if let Some(expected_revert) = &self.expected_revert
+ if let Some(expected_revert) = &mut self.expected_revert
&& curr_depth <= expected_revert.depth
&& matches!(expected_revert.kind, ExpectedRevertKind::Default)
{
+ // Mirror the logic in `call_end`: when an expected reverter address is set
+ // and we don't yet have one (or we're matching multiple reverts), record the
+ // would-be deployed address as the reverter. revm guarantees `outcome.address`
+ // is `Some(_)` whenever the constructor actually ran (including the revert
+ // case); it is only `None` for pre-frame rejection (depth/balance/nonce),
+ // for which a reverter address is meaningless.
+ if outcome.result.is_revert()
+ && expected_revert.reverter.is_some()
+ && (expected_revert.reverted_by.is_none() || expected_revert.count > 1)
+ && let Some(addr) = outcome.address
+ {
+ expected_revert.reverted_by = Some(addr);
+ }
let mut expected_revert = std::mem::take(&mut self.expected_revert).unwrap();
return match revert_handlers::handle_expect_revert(
false,
diff --git a/crates/cheatcodes/src/lib.rs b/crates/cheatcodes/src/lib.rs
index f3e922e5c14b4..d06c8850bb9d3 100644
--- a/crates/cheatcodes/src/lib.rs
+++ b/crates/cheatcodes/src/lib.rs
@@ -66,6 +66,29 @@ mod toml;
mod utils;
+#[cfg(feature = "credible")]
+pub mod credible;
+
+/// Stub implementation when the `credible` feature is disabled.
+/// `vm.assertion()` is kept in the ABI but reverts with a clear error at runtime.
+#[cfg(not(feature = "credible"))]
+mod credible_stub {
+ use crate::{Cheatcode, CheatsCtxt, Result, Vm::*};
+ use foundry_evm_core::evm::FoundryEvmNetwork;
+
+ impl Cheatcode for assertionCall {
+ fn apply_stateful(
+ &self,
+ _ccx: &mut CheatsCtxt<'_, '_, FEN>,
+ ) -> Result {
+ bail!(
+ "vm.assertion() requires Phylax-built forge with the `credible` feature enabled. \
+ Install from: https://github.com/phylaxsystems/phoundry"
+ )
+ }
+ }
+}
+
/// Cheatcode implementation.
pub(crate) trait Cheatcode: CheatcodeDef {
/// Applies this cheatcode to the given state.
diff --git a/crates/cheatcodes/src/test/assert.rs b/crates/cheatcodes/src/test/assert.rs
index 632ba8e04245b..12d625768a0c9 100644
--- a/crates/cheatcodes/src/test/assert.rs
+++ b/crates/cheatcodes/src/test/assert.rs
@@ -164,7 +164,7 @@ impl EqRelAssertionError {
format_units_uint(&f.left, decimals),
format_units_uint(&f.right, decimals),
format_delta_percent(&f.max_delta),
- &f.real_delta,
+ f.real_delta,
),
Self::Overflow => self.to_string(),
}
@@ -179,7 +179,7 @@ impl EqRelAssertionError {
format_units_int(&f.left, decimals),
format_units_int(&f.right, decimals),
format_delta_percent(&f.max_delta),
- &f.real_delta,
+ f.real_delta,
),
Self::Overflow => self.to_string(),
}
@@ -222,9 +222,9 @@ fn handle_assertion_result_mono(
/// Implements [crate::Cheatcode] for pairs of cheatcodes.
///
/// Accepts a list of pairs of cheatcodes, where the first cheatcode is the one that doesn't contain
-/// a custom error message, and the second one contains it at `error` field.
+/// a custom error message, and the second one contains it at `err` field.
///
-/// Passed `args` are the common arguments for both cheatcode structs (excluding `error` field).
+/// Passed `args` are the common arguments for both cheatcode structs (excluding `err` field).
///
/// Macro also accepts an optional closure that formats the error returned by the assertion.
macro_rules! impl_assertions {
@@ -267,10 +267,12 @@ macro_rules! impl_assertions {
ccx: &mut CheatsCtxt<'_, '_, FEN>,
executor: &mut dyn CheatcodesExecutor,
) -> Result {
- let Self { $($arg,)* error } = self;
+ let Self { $($arg,)* err } = self;
match $body {
Ok(()) => Ok(Default::default()),
- Err(err) => handle_assertion_result(ccx, executor, err, $error_formatter, Some(error))
+ Err(assertion_err) => {
+ handle_assertion_result(ccx, executor, assertion_err, $error_formatter, Some(err))
+ }
}
}
}
diff --git a/crates/cheatcodes/src/version.rs b/crates/cheatcodes/src/version.rs
index fb722c2814baa..2b8f81518a621 100644
--- a/crates/cheatcodes/src/version.rs
+++ b/crates/cheatcodes/src/version.rs
@@ -20,7 +20,14 @@ impl Cheatcode for foundryVersionAtLeastCall {
}
fn foundry_version_cmp(version: &str) -> Result {
- version_cmp(SEMVER_VERSION.split('-').next().unwrap(), version)
+ version_cmp(strip_semver_metadata(SEMVER_VERSION), version)
+}
+
+/// Strips pre-release (e.g. `-nightly`, `-dev`) and build metadata
+/// (e.g. `+..`) from a version string
+/// so we compare on `MAJOR.MINOR.PATCH` only.
+fn strip_semver_metadata(version: &str) -> &str {
+ version.split(['-', '+']).next().unwrap()
}
fn version_cmp(version_a: &str, version_b: &str) -> Result {
@@ -42,3 +49,61 @@ fn parse_version(version: &str) -> Result {
}
Ok(version)
}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn strips_build_metadata_only() {
+ // Tagged release: `1.7.1+..`
+ assert_eq!(strip_semver_metadata("1.7.1+abc1234567.1737036656.release"), "1.7.1");
+ }
+
+ #[test]
+ fn strips_pre_release_and_build_metadata() {
+ // Nightly: `1.7.1-nightly+..`
+ assert_eq!(strip_semver_metadata("1.7.1-nightly+abc1234567.1737036656.release"), "1.7.1");
+ // Dev: `1.7.1-dev+..`
+ assert_eq!(strip_semver_metadata("1.7.1-dev+abc1234567.1737036656.debug"), "1.7.1");
+ }
+
+ #[test]
+ fn strips_plain_version() {
+ assert_eq!(strip_semver_metadata("1.7.1"), "1.7.1");
+ }
+
+ #[test]
+ fn version_cmp_orders_correctly() {
+ assert_eq!(version_cmp("1.7.1", "1.7.1").unwrap(), Ordering::Equal);
+ assert_eq!(version_cmp("1.7.1", "1.7.0").unwrap(), Ordering::Greater);
+ assert_eq!(version_cmp("1.7.1", "1.7.2").unwrap(), Ordering::Less);
+ assert_eq!(version_cmp("1.7.1", "0.0.1").unwrap(), Ordering::Greater);
+ assert_eq!(version_cmp("1.7.1", "99.0.0").unwrap(), Ordering::Less);
+ }
+
+ #[test]
+ fn parse_version_rejects_pre_release_and_build_metadata() {
+ // User-supplied versions must be plain `MAJOR.MINOR.PATCH`.
+ assert!(parse_version("1.7.1-nightly").is_err());
+ assert!(parse_version("1.7.1+abc").is_err());
+ assert!(parse_version("not-a-version").is_err());
+ assert!(parse_version("1.7.1").is_ok());
+ }
+
+ #[test]
+ fn cmp_works_against_full_semver_version_strings() {
+ // Simulate comparing each shape of `SEMVER_VERSION` against a user-supplied version.
+ for current in [
+ "1.7.1+abc1234567.1737036656.release",
+ "1.7.1-nightly+abc1234567.1737036656.release",
+ "1.7.1-dev+abc1234567.1737036656.debug",
+ "1.7.1",
+ ] {
+ let stripped = strip_semver_metadata(current);
+ assert_eq!(version_cmp(stripped, "1.7.1").unwrap(), Ordering::Equal);
+ assert_eq!(version_cmp(stripped, "1.7.0").unwrap(), Ordering::Greater);
+ assert_eq!(version_cmp(stripped, "1.7.2").unwrap(), Ordering::Less);
+ }
+ }
+}
diff --git a/crates/chisel/Cargo.toml b/crates/chisel/Cargo.toml
index e9a1936013272..618d869f0f99e 100644
--- a/crates/chisel/Cargo.toml
+++ b/crates/chisel/Cargo.toml
@@ -70,3 +70,4 @@ asm-keccak = ["alloy-primitives/asm-keccak"]
jemalloc = ["foundry-cli/jemalloc"]
mimalloc = ["foundry-cli/mimalloc"]
tracy-allocator = ["foundry-cli/tracy-allocator"]
+credible = ["foundry-evm/credible"]
diff --git a/crates/chisel/src/executor.rs b/crates/chisel/src/executor.rs
index da2c7f4caff02..8d8122e05868e 100644
--- a/crates/chisel/src/executor.rs
+++ b/crates/chisel/src/executor.rs
@@ -384,8 +384,8 @@ fn format_event_definition(event_definition: &pt::EventDefinition) -> Result Result>()
diff --git a/crates/cli/src/opts/evm.rs b/crates/cli/src/opts/evm.rs
index 87f14e2039606..4fc437c7232f8 100644
--- a/crates/cli/src/opts/evm.rs
+++ b/crates/cli/src/opts/evm.rs
@@ -307,6 +307,17 @@ mod tests {
assert_eq!(val, &Value::from(1000u64));
}
+ #[test]
+ fn rpc_url_arg_does_not_read_eth_rpc_url_env() {
+ use clap::CommandFactory;
+
+ let command = EvmArgs::command();
+ let rpc_url =
+ command.get_arguments().find(|arg| arg.get_id() == "rpc_url").expect("rpc_url arg");
+
+ assert!(rpc_url.get_env().is_none());
+ }
+
#[test]
fn can_parse_chain_id() {
let args = EvmArgs {
diff --git a/crates/cli/src/opts/global.rs b/crates/cli/src/opts/global.rs
index fee75a5d34e87..aa70b88267a4e 100644
--- a/crates/cli/src/opts/global.rs
+++ b/crates/cli/src/opts/global.rs
@@ -1,8 +1,5 @@
use clap::{ArgAction, Parser};
-use foundry_common::{
- shell::{ColorChoice, OutputFormat, OutputMode, Shell, Verbosity},
- version::{IS_NIGHTLY_VERSION, NIGHTLY_VERSION_WARNING_MESSAGE},
-};
+use foundry_common::shell::{ColorChoice, OutputFormat, OutputMode, Shell, Verbosity};
use serde::{Deserialize, Serialize};
/// Global arguments for the CLI.
@@ -79,14 +76,6 @@ impl GlobalArgs {
self.force_init_thread_pool()?;
}
- // Display a warning message if the current version is not stable.
- if IS_NIGHTLY_VERSION
- && !self.json
- && std::env::var_os("FOUNDRY_DISABLE_NIGHTLY_WARNING").is_none()
- {
- let _ = sh_warn!("{}", NIGHTLY_VERSION_WARNING_MESSAGE);
- }
-
Ok(())
}
diff --git a/crates/cli/src/opts/rpc.rs b/crates/cli/src/opts/rpc.rs
index 8c37860446683..3438b57ed054a 100644
--- a/crates/cli/src/opts/rpc.rs
+++ b/crates/cli/src/opts/rpc.rs
@@ -66,8 +66,20 @@ impl figment::Provider for RpcOpts {
impl RpcOpts {
/// Returns the RPC endpoint.
pub fn url<'a>(&'a self, config: Option<&'a Config>) -> Result>> {
+ self.url_with_env(config, std::env::var("ETH_RPC_URL").ok())
+ }
+
+ fn url_with_env<'a>(
+ &'a self,
+ config: Option<&'a Config>,
+ env_url: Option,
+ ) -> Result>> {
if self.flashbots {
Ok(Some(Cow::Borrowed(FLASHBOTS_URL)))
+ } else if let Some(url) = self.common.rpc_url.as_deref() {
+ Ok(Some(Cow::Borrowed(url)))
+ } else if let Some(url) = env_url {
+ Ok(Some(Cow::Owned(url)))
} else {
self.common.url(config)
}
@@ -85,6 +97,9 @@ impl RpcOpts {
pub fn dict(&self) -> Dict {
let mut dict = self.common.dict();
+ if let Ok(Some(url)) = self.url(None) {
+ dict.insert("eth_rpc_url".into(), url.into_owned().into());
+ }
if self.flashbots {
dict.insert("eth_rpc_url".into(), FLASHBOTS_URL.into());
}
@@ -199,6 +214,7 @@ impl figment::Provider for EthereumOpts {
#[cfg(test)]
mod tests {
use super::*;
+ use clap::CommandFactory;
#[test]
fn parse_etherscan_opts() {
@@ -223,4 +239,41 @@ mod tests {
let id: u64 = chain_id.deserialize().expect("chain_id should deserialize as u64");
assert_eq!(id, 9745);
}
+
+ #[test]
+ fn rpc_url_arg_does_not_read_eth_rpc_url_env() {
+ let command = RpcOpts::command();
+ let rpc_url =
+ command.get_arguments().find(|arg| arg.get_id() == "rpc_url").expect("rpc_url arg");
+
+ assert!(rpc_url.get_env().is_none());
+ }
+
+ #[test]
+ fn rpc_url_resolves_eth_rpc_url_env() {
+ let args = RpcOpts::default();
+ let url = args
+ .url_with_env(None, Some("http://127.0.0.1:8545".to_string()))
+ .expect("url")
+ .expect("url");
+
+ assert_eq!(url.as_ref(), "http://127.0.0.1:8545");
+ }
+
+ #[test]
+ fn explicit_rpc_url_takes_precedence_over_eth_rpc_url_env() {
+ let args = RpcOpts {
+ common: RpcCommonOpts {
+ rpc_url: Some("http://127.0.0.1:8546".to_string()),
+ ..Default::default()
+ },
+ ..Default::default()
+ };
+ let url = args
+ .url_with_env(None, Some("http://127.0.0.1:8545".to_string()))
+ .expect("url")
+ .expect("url");
+
+ assert_eq!(url.as_ref(), "http://127.0.0.1:8546");
+ }
}
diff --git a/crates/cli/src/opts/rpc_common.rs b/crates/cli/src/opts/rpc_common.rs
index 05b98582fa88f..9c6285857f8cf 100644
--- a/crates/cli/src/opts/rpc_common.rs
+++ b/crates/cli/src/opts/rpc_common.rs
@@ -13,14 +13,10 @@ use serde::Serialize;
use std::borrow::Cow;
/// Common RPC-related options shared across CLI commands.
-///
-/// This struct holds fields that both [`super::RpcOpts`] (cast) and
-/// [`super::EvmArgs`] (forge/script) need, eliminating duplication and
-/// making the two structs composable.
#[derive(Clone, Debug, Default, Serialize, Parser)]
pub struct RpcCommonOpts {
/// The RPC endpoint.
- #[arg(short, long, visible_alias = "fork-url", env = "ETH_RPC_URL")]
+ #[arg(short, long, visible_alias = "fork-url", value_name = "URL")]
#[serde(rename = "eth_rpc_url", skip_serializing_if = "Option::is_none")]
pub rpc_url: Option,
@@ -80,12 +76,7 @@ impl figment::Provider for RpcCommonOpts {
impl RpcCommonOpts {
/// Returns the RPC endpoint URL, resolving from CLI args or config.
pub fn url<'a>(&'a self, config: Option<&'a Config>) -> Result>> {
- let url = match (self.rpc_url.as_deref(), config) {
- (Some(url), _) => Some(Cow::Borrowed(url)),
- (None, Some(config)) => config.get_rpc_url().transpose()?,
- (None, None) => None,
- };
- Ok(url)
+ resolve_rpc_url(self.rpc_url.as_deref(), config)
}
/// Builds a figment-compatible dictionary from these options.
@@ -112,3 +103,16 @@ impl RpcCommonOpts {
dict
}
}
+
+/// Resolves an RPC URL from an explicit CLI value or config.
+pub fn resolve_rpc_url<'a>(
+ rpc_url: Option<&'a str>,
+ config: Option<&'a Config>,
+) -> Result >> {
+ let url = match (rpc_url, config) {
+ (Some(url), _) => Some(Cow::Borrowed(url)),
+ (None, Some(config)) => config.get_rpc_url().transpose()?,
+ (None, None) => None,
+ };
+ Ok(url)
+}
diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml
index 51115fb4a0bae..2d7f721d3789b 100644
--- a/crates/common/Cargo.toml
+++ b/crates/common/Cargo.toml
@@ -34,7 +34,7 @@ alloy-signer.workspace = true
alloy-pubsub.workspace = true
alloy-rpc-client.workspace = true
alloy-rpc-types = { workspace = true, features = ["eth", "engine"] }
-alloy-rpc-types-engine = { workspace = true, features = ["jwt"] }
+alloy-rpc-types-engine = { workspace = true, features = ["jwt-aws-lc-rs"] }
alloy-sol-types.workspace = true
alloy-transport-ipc.workspace = true
alloy-transport-ws.workspace = true
diff --git a/crates/common/build.rs b/crates/common/build.rs
index d89e23be850f4..9afa01b5757ef 100644
--- a/crates/common/build.rs
+++ b/crates/common/build.rs
@@ -15,16 +15,13 @@ fn main() -> Result<(), Box> {
let sha_short = &sha[..10];
let tag_name = try_env_var("TAG_NAME").unwrap_or_else(|| String::from("dev"));
- let is_nightly = tag_name.contains("nightly");
- let version_suffix = if is_nightly { "nightly" } else { &tag_name };
+ let version = release_version(&env_var("CARGO_PKG_VERSION"), &tag_name);
+ let is_nightly = tag_name.starts_with("nightly");
if is_nightly {
println!("cargo:rustc-env=FOUNDRY_IS_NIGHTLY_VERSION=true");
}
- let pkg_version = env_var("CARGO_PKG_VERSION");
- let version = format!("{pkg_version}-{version_suffix}");
-
// `PROFILE` captures only release or debug. Get the actual name from the out directory.
let out_dir = PathBuf::from(env_var("OUT_DIR"));
let profile = out_dir.components().rev().nth(3).unwrap().as_os_str().to_str().unwrap();
@@ -87,6 +84,19 @@ fn env_var(name: &str) -> String {
try_env_var(name).unwrap()
}
+fn release_version(pkg_version: &str, tag_name: &str) -> String {
+ if let Some(version) = tag_name.strip_prefix('v') {
+ return version.to_owned();
+ }
+
+ // Normalize `nightly-` to `nightly` so tarball and Docker nightly
+ // artifacts produce the same version string. The commit identifier is
+ // already included in the SemVer build metadata (after `+`).
+ let normalized = if tag_name.starts_with("nightly-") { "nightly" } else { tag_name };
+
+ format!("{pkg_version}-{normalized}")
+}
+
fn try_env_var(name: &str) -> Option {
println!("cargo:rerun-if-env-changed={name}");
std::env::var(name).ok()
diff --git a/crates/common/src/contracts.rs b/crates/common/src/contracts.rs
index 895b16b3b4532..12d2aea5b1287 100644
--- a/crates/common/src/contracts.rs
+++ b/crates/common/src/contracts.rs
@@ -411,7 +411,7 @@ impl ContractsByArtifact {
let mut funcs = BTreeMap::new();
let mut events = BTreeMap::new();
let mut errors_abi = JsonAbi::new();
- for (_name, contract) in self.iter() {
+ for contract in self.values() {
for func in contract.abi.functions() {
funcs.insert(func.selector(), func.clone());
}
diff --git a/crates/config/src/lib.rs b/crates/config/src/lib.rs
index 4934503ea66c4..46062ee95dace 100644
--- a/crates/config/src/lib.rs
+++ b/crates/config/src/lib.rs
@@ -847,12 +847,15 @@ impl Config {
// Check if the selected profile exists.
if config.profiles.contains(&selected_profile) {
config.profile = selected_profile;
- } else if strict_profile {
- return Err(ExtractConfigError::new(Error::from(format!(
- "selected profile `{selected_profile}` does not exist"
- ))));
} else {
- // Fall back to default profile for nested lib configs.
+ // Fall back to the default profile. In strict mode (top-level loads), emit a warning
+ // so users are informed when an unknown profile (e.g. via `FOUNDRY_PROFILE`) is
+ // selected; the silent fallback is reserved for nested lib configs.
+ if strict_profile {
+ config
+ .warnings
+ .push(Warning::UnknownProfile { profile: selected_profile.to_string() });
+ }
config.profile = Self::DEFAULT_PROFILE;
}
@@ -1922,14 +1925,24 @@ impl Config {
fn _with_root(root: &Path) -> Self {
// autodetect paths
let paths = ProjectPathsConfig::builder().build_with_root::<()>(root);
- let artifacts: PathBuf = paths.artifacts.file_name().unwrap().into();
+ let default = Self::default();
+ let src = if root.join("src").exists() || root.join("contracts").exists() {
+ ProjectPathsConfig::find_source_dir(root).file_name().unwrap().into()
+ } else {
+ default.src.clone()
+ };
+ let out = if root.join("out").exists() || root.join("artifacts").exists() {
+ ProjectPathsConfig::find_artifacts_dir(root).file_name().unwrap().into()
+ } else {
+ default.out.clone()
+ };
Self {
root: paths.root,
- src: paths.sources.file_name().unwrap().into(),
- out: artifacts.clone(),
+ src,
+ out: out.clone(),
libs: paths.libraries.into_iter().map(|lib| lib.file_name().unwrap().into()).collect(),
- fs_permissions: FsPermissions::new([PathPermission::read(artifacts)]),
- ..Self::default()
+ fs_permissions: FsPermissions::new([PathPermission::read(out)]),
+ ..default
}
}
@@ -2626,20 +2639,20 @@ impl Default for Config {
Self {
profile: Self::DEFAULT_PROFILE,
profiles: vec![Self::DEFAULT_PROFILE],
- fs_permissions: FsPermissions::new([PathPermission::read("out")]),
+ fs_permissions: FsPermissions::new([PathPermission::read("assertions/out")]),
isolate: cfg!(feature = "isolate-by-default"),
root: root_default(),
extends: None,
- src: "src".into(),
- test: "test".into(),
- script: "script".into(),
- out: "out".into(),
+ src: "assertions/src".into(),
+ test: "assertions/test".into(),
+ script: "assertions/script".into(),
+ out: "assertions/out".into(),
libs: vec!["lib".into()],
cache: true,
dynamic_test_linking: false,
- cache_path: "cache".into(),
- broadcast: "broadcast".into(),
- snapshots: "snapshots".into(),
+ cache_path: "assertions/cache".into(),
+ broadcast: "assertions/broadcast".into(),
+ snapshots: "assertions/snapshots".into(),
gas_snapshot_check: false,
gas_snapshot_emit: true,
allow_paths: vec![],
@@ -2669,11 +2682,11 @@ impl Default for Config {
path_pattern: None,
path_pattern_inverse: None,
coverage_pattern_inverse: None,
- test_failures_file: "cache/test-failures".into(),
+ test_failures_file: "assertions/cache/test-failures".into(),
threads: None,
show_progress: false,
- fuzz: FuzzConfig::new("cache/fuzz".into()),
- invariant: InvariantConfig::new("cache/invariant".into()),
+ fuzz: FuzzConfig::new("assertions/cache/fuzz".into()),
+ invariant: InvariantConfig::new("assertions/cache/invariant".into()),
always_use_create_2_factory: false,
ffi: false,
live_logs: false,
@@ -2861,19 +2874,35 @@ impl BasicConfig {
///
/// This serializes to a table with the name of the profile
pub fn to_string_pretty(&self) -> Result {
- let mut value = toml::Value::try_from(self)?;
+ let mut profile_body = toml::Value::try_from(self)?;
if let Some(ref network) = self.network
- && let toml::Value::Table(ref mut table) = value
+ && let toml::Value::Table(ref mut table) = profile_body
{
- table.insert(network.clone(), toml::Value::Boolean(true));
+ table.insert("network".to_string(), toml::Value::String(network.clone()));
+ }
+
+ let mut profile_section = toml::value::Table::new();
+ profile_section.insert(self.profile.to_string(), profile_body);
+
+ let mut document = toml::value::Table::new();
+ document.insert("profile".to_string(), toml::Value::Table(profile_section));
+
+ if self.network.as_deref() == Some("tempo") {
+ let mut endpoints = toml::value::Table::new();
+ endpoints.insert(
+ "tempo".to_string(),
+ toml::Value::String("https://rpc.tempo.xyz/".to_string()),
+ );
+ endpoints.insert(
+ "moderato".to_string(),
+ toml::Value::String("https://rpc.moderato.tempo.xyz/".to_string()),
+ );
+ document.insert("rpc_endpoints".to_string(), toml::Value::Table(endpoints));
}
- let s = toml::to_string_pretty(&value)?;
+
+ let body = toml::to_string_pretty(&toml::Value::Table(document))?;
Ok(format!(
- "\
-[profile.{}]
-{s}
-# See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options\n",
- self.profile
+ "{body}\n# See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options\n"
))
}
}
@@ -3083,7 +3112,7 @@ mod tests {
figment::Jail::expect_with(|_| {
let config = Config::default();
let paths_config = config.project_paths::();
- assert_eq!(paths_config.tests, PathBuf::from(r"test"));
+ assert_eq!(paths_config.tests, PathBuf::from(r"assertions/test"));
Ok(())
});
}
@@ -4963,7 +4992,7 @@ mod tests {
InvariantConfig {
runs: 512,
depth: 10,
- failure_persist_dir: Some(PathBuf::from("cache/invariant")),
+ failure_persist_dir: Some(PathBuf::from("assertions/cache/invariant")),
..Default::default()
}
);
@@ -6678,6 +6707,55 @@ mod tests {
});
}
+ #[test]
+ fn no_unknown_key_warning_for_network_field() {
+ // Regression test: `network` is a flattened `Option` field of `NetworkConfigs`. It must
+ // not trigger an unknown-key warning, regardless of whether it is set.
+ figment::Jail::expect_with(|jail| {
+ jail.create_file(
+ "foundry.toml",
+ r#"
+ [profile.default]
+ network = "tempo"
+ "#,
+ )?;
+
+ let cfg = Config::load().unwrap();
+ assert!(
+ !cfg.warnings.iter().any(
+ |w| matches!(w, crate::Warning::UnknownKey { key, .. } if key == "network")
+ ),
+ "did not expect UnknownKey warning for `network`, got: {:?}",
+ cfg.warnings
+ );
+ Ok(())
+ });
+ }
+
+ #[test]
+ fn no_unknown_key_warning_for_legacy_tempo_alias() {
+ // Regression test: the legacy `tempo = true` alias must keep working without warnings.
+ figment::Jail::expect_with(|jail| {
+ jail.create_file(
+ "foundry.toml",
+ r#"
+ [profile.default]
+ tempo = true
+ "#,
+ )?;
+
+ let cfg = Config::load().unwrap();
+ assert!(
+ !cfg.warnings
+ .iter()
+ .any(|w| matches!(w, crate::Warning::UnknownKey { key, .. } if key == "tempo")),
+ "did not expect UnknownKey warning for `tempo`, got: {:?}",
+ cfg.warnings
+ );
+ Ok(())
+ });
+ }
+
#[test]
fn fails_on_ambiguous_version_in_compilation_restrictions() {
figment::Jail::expect_with(|jail| {
@@ -7024,9 +7102,9 @@ mod tests {
});
}
- // Test for issue #12844: FOUNDRY_PROFILE=nonexistent should fail
+ // Test for issue #12844: FOUNDRY_PROFILE=nonexistent should warn and fall back to default.
#[test]
- fn fails_on_unknown_profile() {
+ fn warns_on_unknown_profile() {
figment::Jail::expect_with(|jail| {
jail.create_file(
"foundry.toml",
@@ -7037,11 +7115,15 @@ mod tests {
)?;
jail.set_env("FOUNDRY_PROFILE", "nonexistent");
- let err = Config::load().expect_err("expected unknown profile to fail");
- let err_msg = err.to_string();
+ let cfg = Config::load().expect("expected unknown profile to fall back to default");
+ assert_eq!(cfg.profile, Config::DEFAULT_PROFILE);
assert!(
- err_msg.contains("selected profile `nonexistent` does not exist"),
- "Expected error about nonexistent profile, got: {err_msg}"
+ cfg.warnings.iter().any(|w| matches!(
+ w,
+ crate::Warning::UnknownProfile { profile } if profile == "nonexistent"
+ )),
+ "Expected UnknownProfile warning, got: {:?}",
+ cfg.warnings
);
Ok(())
diff --git a/crates/config/src/providers/ext.rs b/crates/config/src/providers/ext.rs
index 6423e37a4f2fa..bd382fd435d30 100644
--- a/crates/config/src/providers/ext.rs
+++ b/crates/config/src/providers/ext.rs
@@ -365,24 +365,28 @@ impl Provider for DappHardhatDirProvider<'_> {
fn data(&self) -> Result, Error> {
let mut dict = Dict::new();
- dict.insert(
- "src".to_string(),
- ProjectPathsConfig::find_source_dir(self.0)
- .file_name()
- .unwrap()
- .to_string_lossy()
- .to_string()
- .into(),
- );
- dict.insert(
- "out".to_string(),
- ProjectPathsConfig::find_artifacts_dir(self.0)
- .file_name()
- .unwrap()
- .to_string_lossy()
- .to_string()
- .into(),
- );
+ if self.0.join("src").exists() || self.0.join("contracts").exists() {
+ dict.insert(
+ "src".to_string(),
+ ProjectPathsConfig::find_source_dir(self.0)
+ .file_name()
+ .unwrap()
+ .to_string_lossy()
+ .to_string()
+ .into(),
+ );
+ }
+ if self.0.join("out").exists() || self.0.join("artifacts").exists() {
+ dict.insert(
+ "out".to_string(),
+ ProjectPathsConfig::find_artifacts_dir(self.0)
+ .file_name()
+ .unwrap()
+ .to_string_lossy()
+ .to_string()
+ .into(),
+ );
+ }
// detect libs folders:
// if `lib` _and_ `node_modules` exists: include both
diff --git a/crates/config/src/providers/warnings.rs b/crates/config/src/providers/warnings.rs
index 930066b29cf73..ff1d0b35def47 100644
--- a/crates/config/src/providers/warnings.rs
+++ b/crates/config/src/providers/warnings.rs
@@ -38,7 +38,10 @@ const DOC_KEYS: &[&str] = &["out", "title", "book", "homepage", "repository", "p
const RESERVED_KEYS: &[&str] = &["extends"];
/// Keys kept for backward compatibility that should not trigger unknown key warnings.
-const BACKWARD_COMPATIBLE_KEYS: &[&str] = &["solc_version"];
+///
+/// `tempo` and `optimism` are legacy aliases for `network = "tempo"` / `network = "optimism"` —
+/// still accepted on input but no longer serialized in the default config.
+const BACKWARD_COMPATIBLE_KEYS: &[&str] = &["solc_version", "tempo", "optimism"];
/// Generate warnings for unknown sections and deprecated keys
pub struct WarningsProvider {
diff --git a/crates/config/src/warning.rs b/crates/config/src/warning.rs
index 1c1518f5d7cc7..32a1183208892 100644
--- a/crates/config/src/warning.rs
+++ b/crates/config/src/warning.rs
@@ -64,6 +64,12 @@ pub enum Warning {
/// The config file where the key was found
source: String,
},
+ /// The selected profile (via `FOUNDRY_PROFILE` or otherwise) does not exist in the config.
+ /// Falls back to the default profile.
+ UnknownProfile {
+ /// The selected profile that does not exist
+ profile: String,
+ },
}
impl fmt::Display for Warning {
@@ -117,6 +123,12 @@ impl fmt::Display for Warning {
"Found unknown `{key}` config key in section `{section}` defined in {source}."
)
}
+ Self::UnknownProfile { profile } => {
+ write!(
+ f,
+ "Selected profile `{profile}` does not exist; falling back to the default profile."
+ )
+ }
}
}
}
diff --git a/crates/doc/src/writer/as_doc.rs b/crates/doc/src/writer/as_doc.rs
index 1502322ac87f4..c4cc5bd07a234 100644
--- a/crates/doc/src/writer/as_doc.rs
+++ b/crates/doc/src/writer/as_doc.rs
@@ -75,8 +75,8 @@ impl AsDoc for CommentsRef<'_> {
writer.writeln_raw(format!(
"{}{}: {}",
if customs.len() == 1 { "" } else { "- " },
- &c.tag,
- &c.value
+ c.tag,
+ c.value
))?;
writer.writeln()?;
}
diff --git a/crates/evm/core/src/backend/mod.rs b/crates/evm/core/src/backend/mod.rs
index 5c5fe29c3154c..b1708ebb85abd 100644
--- a/crates/evm/core/src/backend/mod.rs
+++ b/crates/evm/core/src/backend/mod.rs
@@ -82,7 +82,7 @@ pub type JournaledState = JournalInner;
/// An extension trait that allows us to easily extend the `revm::Inspector` capabilities
#[auto_impl::auto_impl(&mut)]
pub trait DatabaseExt:
- Database + DatabaseCommit + Debug
+ Database + DatabaseCommit + Debug + Send
{
/// Creates a new state snapshot at the current point of execution.
///
diff --git a/crates/evm/core/src/decode.rs b/crates/evm/core/src/decode.rs
index 0cfd56a44219c..b836023a968b7 100644
--- a/crates/evm/core/src/decode.rs
+++ b/crates/evm/core/src/decode.rs
@@ -223,8 +223,8 @@ fn trimmed_hex(s: &[u8]) -> String {
} else {
format!(
"{}…{} ({} bytes)",
- &hex::encode(&s[..n / 2]),
- &hex::encode(&s[s.len() - n / 2..]),
+ hex::encode(&s[..n / 2]),
+ hex::encode(&s[s.len() - n / 2..]),
s.len(),
)
}
diff --git a/crates/evm/core/src/fork/database.rs b/crates/evm/core/src/fork/database.rs
index aefa0e2ee9741..2284823047ca6 100644
--- a/crates/evm/core/src/fork/database.rs
+++ b/crates/evm/core/src/fork/database.rs
@@ -212,13 +212,18 @@ pub struct ForkDbStateSnapshot {
}
impl ForkDbStateSnapshot {
- fn get_storage(&self, address: Address, index: U256) -> Option {
- self.local
- .cache
- .accounts
- .get(&address)
- .and_then(|account| account.storage.get(&index))
- .copied()
+ /// Lookup storage in `state_snapshot`, then fall back to the backend (remote RPC).
+ fn storage_from_snapshot_or_backend(
+ &self,
+ address: Address,
+ index: U256,
+ ) -> Result {
+ // Check state_snapshot.storage first (data fetched by SharedBackend / disk cache).
+ if let Some(val) = self.state_snapshot.storage.get(&address).and_then(|s| s.get(&index)) {
+ return Ok(*val);
+ }
+ // Fall back to the underlying backend (SharedBackend → remote RPC).
+ DatabaseRef::storage_ref(&self.local, address, index)
}
}
@@ -250,15 +255,9 @@ impl DatabaseRef for ForkDbStateSnapshot {
match self.local.cache.accounts.get(&address) {
Some(account) => match account.storage.get(&index) {
Some(entry) => Ok(*entry),
- None => match self.get_storage(address, index) {
- None => DatabaseRef::storage_ref(&self.local, address, index),
- Some(storage) => Ok(storage),
- },
- },
- None => match self.get_storage(address, index) {
- None => DatabaseRef::storage_ref(&self.local, address, index),
- Some(storage) => Ok(storage),
+ None => self.storage_from_snapshot_or_backend(address, index),
},
+ None => self.storage_from_snapshot_or_backend(address, index),
}
}
@@ -303,4 +302,28 @@ mod tests {
assert!(loaded.is_some());
assert_eq!(loaded.unwrap(), info);
}
+
+ /// Verifies that `ForkDbStateSnapshot::storage_ref` reads from `state_snapshot.storage`
+ /// when the slot is missing from `local.cache.accounts`. Without this lookup the call
+ /// would fall through to the backend and return the unrelated remote value.
+ #[tokio::test(flavor = "multi_thread")]
+ async fn fork_db_state_snapshot_reads_storage_from_snapshot() {
+ let rpc = foundry_test_utils::rpc::next_http_rpc_endpoint();
+ let provider = get_http_provider(rpc.clone());
+ let meta = BlockchainDbMeta::new(BlockEnv::default(), rpc);
+ let db = BlockchainDb::new(meta, None);
+ let backend = SharedBackend::spawn_backend(Arc::new(provider), db, None).await;
+
+ let address = Address::random();
+ let slot = U256::from(42u64);
+ let expected = U256::from(0xdeadbeefu64);
+
+ let mut state_snapshot = StateSnapshot::default();
+ state_snapshot.storage.entry(address).or_default().insert(slot, expected);
+
+ let snapshot = ForkDbStateSnapshot { local: CacheDB::new(backend), state_snapshot };
+
+ let got = DatabaseRef::storage_ref(&snapshot, address, slot).unwrap();
+ assert_eq!(got, expected);
+ }
}
diff --git a/crates/evm/evm/Cargo.toml b/crates/evm/evm/Cargo.toml
index 70bce50a89882..050c430c9a0e7 100644
--- a/crates/evm/evm/Cargo.toml
+++ b/crates/evm/evm/Cargo.toml
@@ -13,6 +13,10 @@ repository.workspace = true
[lints]
workspace = true
+[features]
+default = []
+credible = ["foundry-cheatcodes/credible"]
+
[dependencies]
foundry-cheatcodes.workspace = true
foundry-common.workspace = true
diff --git a/crates/evm/evm/src/executors/invariant/mod.rs b/crates/evm/evm/src/executors/invariant/mod.rs
index 27d8e6a0ed588..e02cdbc393ee6 100644
--- a/crates/evm/evm/src/executors/invariant/mod.rs
+++ b/crates/evm/evm/src/executors/invariant/mod.rs
@@ -736,7 +736,7 @@ impl<'a, FEN: FoundryEvmNetwork> InvariantExecutor<'a, FEN> {
if !msg.is_empty() {
msg.push_str(", ");
}
- msg.push_str(&format!("{}", &corpus_manager.metrics));
+ msg.push_str(&format!("{}", corpus_manager.metrics));
}
progress.set_message(msg);
}
diff --git a/crates/evm/evm/src/inspectors/stack.rs b/crates/evm/evm/src/inspectors/stack.rs
index addaddc180efd..2a3bce3dac89e 100644
--- a/crates/evm/evm/src/inspectors/stack.rs
+++ b/crates/evm/evm/src/inspectors/stack.rs
@@ -1291,6 +1291,15 @@ impl Inspector>
&& !self.in_inner_context
&& ecx.journal().depth() == 1
{
+ // In isolation mode, transact_inner returns None for the address on revert; pre-compute
+ // the would-be deployed address so create_end can enforce expected_revert reverter
+ // checks.
+ let precomputed_address = ecx
+ .journal()
+ .evm_state()
+ .get(&create.caller())
+ .map(|acc| create.caller().create(acc.info.nonce));
+
let (result, address) = self.transact_inner(
ecx,
TxKind::Create,
@@ -1299,6 +1308,8 @@ impl Inspector>
create.gas_limit(),
create.value(),
);
+ let address =
+ address.or_else(|| if result.is_revert() { precomputed_address } else { None });
return Some(CreateOutcome { result, address });
}
diff --git a/crates/evm/fuzz/src/lib.rs b/crates/evm/fuzz/src/lib.rs
index 44d71fb6deee3..e64d7abc5add3 100644
--- a/crates/evm/fuzz/src/lib.rs
+++ b/crates/evm/fuzz/src/lib.rs
@@ -229,7 +229,7 @@ impl fmt::Display for BaseCounterExample {
if let Some(sig) = &self.signature {
write!(f, "calldata={sig}")?
} else {
- write!(f, "calldata={}", &self.calldata)?
+ write!(f, "calldata={}", self.calldata)?
}
if let Some(args) = &self.args {
diff --git a/crates/evm/networks/src/lib.rs b/crates/evm/networks/src/lib.rs
index 4672deff353d0..303b9ca8b7a13 100644
--- a/crates/evm/networks/src/lib.rs
+++ b/crates/evm/networks/src/lib.rs
@@ -59,22 +59,25 @@ impl From for NetworkVariant {
}
}
-#[derive(Clone, Debug, Default, Parser, Serialize, Deserialize, Copy, PartialEq, Eq)]
+#[derive(Clone, Debug, Default, Parser, Deserialize, Copy, PartialEq, Eq)]
pub struct NetworkConfigs {
/// Enable a specific network family.
#[arg(help_heading = "Networks", long, short, num_args = 1, value_name = "NETWORK", value_enum, conflicts_with_all = ["celo", "optimism", "tempo"])]
- #[serde(skip_serializing_if = "Option::is_none")]
+ #[serde(default)]
network: Option,
/// Enable Celo network features.
#[arg(help_heading = "Networks", long, conflicts_with_all = ["network", "optimism", "tempo"])]
celo: bool,
/// Enable Optimism network features (deprecated: use --network optimism).
#[arg(long, hide = true, conflicts_with_all = ["network", "celo", "tempo"])]
- // Skipped from configs (forge) as there is no feature to be added yet.
- #[serde(skip)]
+ // Deserialize-only legacy alias: accepted in foundry.toml but never serialized — the
+ // canonical form is `network = "optimism"`.
+ #[serde(default)]
optimism: bool,
/// Enable Tempo network features (deprecated: use --network tempo).
#[arg(long, hide = true, conflicts_with_all = ["network", "celo", "optimism"])]
+ // Deserialize-only legacy alias: accepted in foundry.toml but never serialized — the
+ // canonical form is `network = "tempo"`.
#[serde(default)]
tempo: bool,
/// Whether to bypass prevrandao.
@@ -83,6 +86,21 @@ pub struct NetworkConfigs {
bypass_prevrandao: bool,
}
+// Custom `Serialize` impl: always emits the *resolved* network as the canonical
+// `network = "..."` field, and never emits the legacy `tempo` / `optimism` aliases. This avoids
+// confusing output like `network = "tempo"` next to `tempo = false`, and ensures `tempo = true`
+// in foundry.toml round-trips as `network = "tempo"`.
+impl Serialize for NetworkConfigs {
+ fn serialize(&self, serializer: S) -> Result {
+ use serde::ser::SerializeStruct;
+ let mut s = serializer.serialize_struct("NetworkConfigs", 3)?;
+ s.serialize_field("network", &self.resolved_network())?;
+ s.serialize_field("celo", &self.celo)?;
+ s.serialize_field("bypass_prevrandao", &self.bypass_prevrandao)?;
+ s.end()
+ }
+}
+
impl NetworkConfigs {
pub fn with_optimism() -> Self {
Self { network: Some(NetworkVariant::Optimism), optimism: true, ..Default::default() }
@@ -311,6 +329,17 @@ mod tests {
assert!(cfg.is_tempo());
}
+ #[test]
+ fn serde_serializes_legacy_alias_as_canonical_network() {
+ // Legacy `tempo = true` should serialize as the canonical `network = "tempo"`,
+ // and the legacy `tempo` / `optimism` keys must not appear in the output.
+ let cfg = NetworkConfigs { tempo: true, ..Default::default() };
+ let json = serde_json::to_value(cfg).unwrap();
+ assert_eq!(json["network"], serde_json::json!("tempo"));
+ assert!(json.get("tempo").is_none(), "legacy `tempo` key should not be serialized");
+ assert!(json.get("optimism").is_none(), "legacy `optimism` key should not be serialized");
+ }
+
#[test]
fn serde_new_network_field_deserialized() {
let json_tempo = r#"{"network": "tempo", "celo": false, "bypass_prevrandao": false}"#;
diff --git a/crates/evm/traces/Cargo.toml b/crates/evm/traces/Cargo.toml
index 90d2db724cebc..0d31cfca6a7ae 100644
--- a/crates/evm/traces/Cargo.toml
+++ b/crates/evm/traces/Cargo.toml
@@ -32,9 +32,6 @@ alloy-primitives = { workspace = true, features = [
alloy-sol-types.workspace = true
revm-inspectors.workspace = true
-tempo-contracts.workspace = true
-tempo-precompiles.workspace = true
-
async-trait.workspace = true
eyre.workspace = true
futures.workspace = true
diff --git a/crates/evm/traces/src/decoder/mod.rs b/crates/evm/traces/src/decoder/mod.rs
index a47c90c116d0b..04f9f684b9c90 100644
--- a/crates/evm/traces/src/decoder/mod.rs
+++ b/crates/evm/traces/src/decoder/mod.rs
@@ -18,22 +18,13 @@ use foundry_evm_core::{
constants::{CALLER, CHEATCODE_ADDRESS, DEFAULT_CREATE2_DEPLOYER, HARDHAT_CONSOLE_ADDRESS},
decode::RevertDecoder,
precompiles::{
- BLAKE_2F, BLS12_G1ADD, BLS12_G1MSM, BLS12_G2ADD, BLS12_G2MSM, BLS12_MAP_FP_TO_G1,
- BLS12_MAP_FP2_TO_G2, BLS12_PAIRING_CHECK, EC_ADD, EC_MUL, EC_PAIRING, EC_RECOVER, IDENTITY,
- MOD_EXP, P256_VERIFY, POINT_EVALUATION, RIPEMD_160, SHA_256,
+ BLAKE_2F, EC_ADD, EC_MUL, EC_PAIRING, EC_RECOVER, IDENTITY, MOD_EXP, POINT_EVALUATION,
+ RIPEMD_160, SHA_256,
},
};
use itertools::Itertools;
use revm_inspectors::tracing::types::{DecodedCallLog, DecodedCallTrace};
use std::{collections::BTreeMap, sync::OnceLock};
-use tempo_contracts::precompiles::{
- IAccountKeychain, IFeeManager, IStablecoinDEX, ITIP20Factory, ITIP403Registry, IValidatorConfig,
-};
-use tempo_precompiles::{
- ACCOUNT_KEYCHAIN_ADDRESS, NONCE_PRECOMPILE_ADDRESS, PATH_USD_ADDRESS, STABLECOIN_DEX_ADDRESS,
- TIP_FEE_MANAGER_ADDRESS, TIP20_FACTORY_ADDRESS, TIP403_REGISTRY_ADDRESS,
- VALIDATOR_CONFIG_ADDRESS, nonce::INonce, tip20::ITIP20,
-};
mod precompiles;
@@ -102,17 +93,17 @@ impl CallTraceDecoderBuilder {
self
}
- /// Sets the chain ID for network-specific precompile detection.
+ /// Sets the debug identifier for the decoder.
#[inline]
- pub const fn with_chain_id(mut self, chain_id: Option) -> Self {
- self.decoder.chain_id = chain_id;
+ pub fn with_debug_identifier(mut self, identifier: DebugTraceIdentifier) -> Self {
+ self.decoder.debug_identifier = Some(identifier);
self
}
- /// Sets the debug identifier for the decoder.
+ /// Sets the chain ID for chain-specific precompile decoding.
#[inline]
- pub fn with_debug_identifier(mut self, identifier: DebugTraceIdentifier) -> Self {
- self.decoder.debug_identifier = Some(identifier);
+ pub const fn with_chain_id(mut self, chain_id: Option) -> Self {
+ self.decoder.chain_id = chain_id;
self
}
@@ -167,7 +158,7 @@ pub struct CallTraceDecoder {
/// Disable showing of labels.
pub disable_labels: bool,
- /// The chain ID, used to determine network-specific precompiles.
+ /// Chain ID used for chain-specific precompile decoding.
pub chain_id: Option,
}
@@ -202,23 +193,6 @@ impl CallTraceDecoder {
(EC_PAIRING, "ECPairing".to_string()),
(BLAKE_2F, "Blake2F".to_string()),
(POINT_EVALUATION, "PointEvaluation".to_string()),
- (BLS12_G1ADD, "BLS12_G1ADD".to_string()),
- (BLS12_G1MSM, "BLS12_G1MSM".to_string()),
- (BLS12_G2ADD, "BLS12_G2ADD".to_string()),
- (BLS12_G2MSM, "BLS12_G2MSM".to_string()),
- (BLS12_PAIRING_CHECK, "BLS12_PAIRING_CHECK".to_string()),
- (BLS12_MAP_FP_TO_G1, "BLS12_MAP_FP_TO_G1".to_string()),
- (BLS12_MAP_FP2_TO_G2, "BLS12_MAP_FP2_TO_G2".to_string()),
- (P256_VERIFY, "P256VERIFY".to_string()),
- // Tempo
- (TIP_FEE_MANAGER_ADDRESS, "FeeManager".to_string()),
- (TIP403_REGISTRY_ADDRESS, "TIP403Registry".to_string()),
- (TIP20_FACTORY_ADDRESS, "TIP20Factory".to_string()),
- (STABLECOIN_DEX_ADDRESS, "StablecoinDex".to_string()),
- (NONCE_PRECOMPILE_ADDRESS, "Nonce".to_string()),
- (VALIDATOR_CONFIG_ADDRESS, "ValidatorConfig".to_string()),
- (ACCOUNT_KEYCHAIN_ADDRESS, "AccountKeychain".to_string()),
- (PATH_USD_ADDRESS, "PathUSD".to_string()),
]),
receive_contracts: Default::default(),
fallback_contracts: Default::default(),
@@ -227,29 +201,11 @@ impl CallTraceDecoder {
functions: console::hh::abi::functions()
.into_values()
.chain(Vm::abi::functions().into_values())
- // Tempo
- .chain(IFeeManager::abi::functions().into_values())
- .chain(ITIP20::abi::functions().into_values())
- .chain(ITIP403Registry::abi::functions().into_values())
- .chain(ITIP20Factory::abi::functions().into_values())
- .chain(IStablecoinDEX::abi::functions().into_values())
- .chain(INonce::abi::functions().into_values())
- .chain(IValidatorConfig::abi::functions().into_values())
- .chain(IAccountKeychain::abi::functions().into_values())
.flatten()
.map(|func| (func.selector(), vec![func]))
.collect(),
events: console::ds::abi::events()
.into_values()
- // Tempo
- .chain(IFeeManager::abi::events().into_values())
- .chain(ITIP20::abi::events().into_values())
- .chain(ITIP403Registry::abi::events().into_values())
- .chain(ITIP20Factory::abi::events().into_values())
- .chain(IStablecoinDEX::abi::events().into_values())
- .chain(INonce::abi::events().into_values())
- .chain(IValidatorConfig::abi::events().into_values())
- .chain(IAccountKeychain::abi::events().into_values())
.flatten()
.map(|event| ((event.selector(), indexed_inputs(&event)), vec![event]))
.collect(),
@@ -261,7 +217,6 @@ impl CallTraceDecoder {
debug_identifier: None,
disable_labels: false,
-
chain_id: None,
}
}
@@ -277,7 +232,6 @@ impl CallTraceDecoder {
self.receive_contracts.clear();
self.fallback_contracts.clear();
- self.non_fallback_contracts.clear();
}
/// Identify unknown addresses in the specified call trace using the specified identifier.
@@ -296,12 +250,6 @@ impl CallTraceDecoder {
identifier: &'a mut impl TraceIdentifier,
) -> Vec> {
let nodes = arena.nodes().iter().filter(|node| {
- // Skip precompile addresses, they will never resolve externally.
- if node.is_precompile()
- || precompiles::is_known_precompile(node.trace.address, self.chain_id)
- {
- return false;
- }
let address = &node.trace.address;
!self.labels.contains_key(address) || !self.contracts.contains_key(address)
});
@@ -377,7 +325,7 @@ impl CallTraceDecoder {
self.contracts.entry(address).or_insert(contract);
}
- if let Some(label) = label.filter(|s| !s.is_empty()) {
+ if let Some(label) = label {
self.labels.entry(address).or_insert(label);
}
@@ -565,28 +513,7 @@ impl CallTraceDecoder {
/// Custom decoding for cheatcode inputs.
fn decode_cheatcode_inputs(&self, func: &Function, data: &[u8]) -> Option> {
match func.name.as_str() {
- "expectRevert" => {
- let decoded = match data.get(SELECTOR_LEN..) {
- Some(data) => func.abi_decode_input(data).ok(),
- None => None,
- };
- let Some(decoded) = decoded else {
- return Some(vec![self.revert_decoder.decode(data, None)]);
- };
- let Some(first) = decoded.first() else {
- return Some(vec![self.revert_decoder.decode(data, None)]);
- };
- let expected_revert = match first {
- DynSolValue::Bytes(bytes) => bytes.as_slice(),
- DynSolValue::FixedBytes(word, size) => &word[..*size],
- _ => return None,
- };
- Some(
- std::iter::once(self.revert_decoder.decode(expected_revert, None))
- .chain(decoded.iter().skip(1).map(|value| self.format_value(value)))
- .collect(),
- )
- }
+ "expectRevert" => Some(vec![self.revert_decoder.decode(data, None)]),
"addr" | "createWallet" | "deriveKey" | "rememberKey" => {
// Redact private key in all cases
Some(vec!["".to_string()])
@@ -594,12 +521,14 @@ impl CallTraceDecoder {
"broadcast" | "startBroadcast" => {
// Redact private key if defined
// broadcast(uint256) / startBroadcast(uint256)
- (!func.inputs.is_empty() && func.inputs[0].ty == "uint256").then(|| vec!["".to_string()])
+ (!func.inputs.is_empty() && func.inputs[0].ty == "uint256")
+ .then(|| vec!["".to_string()])
}
"getNonce" => {
// Redact private key if defined
// getNonce(Wallet)
- (!func.inputs.is_empty() && func.inputs[0].ty == "tuple").then(|| vec!["".to_string()])
+ (!func.inputs.is_empty() && func.inputs[0].ty == "tuple")
+ .then(|| vec!["".to_string()])
}
"sign" | "signP256" => {
let mut decoded = func.abi_decode_input(&data[SELECTOR_LEN..]).ok()?;
@@ -622,6 +551,17 @@ impl CallTraceDecoder {
decoded[1] = DynSolValue::String("".to_string());
Some(decoded.iter().map(format_token).collect())
}
+ "assertion" => {
+ if self.verbosity >= 5 {
+ None
+ } else {
+ let mut decoded = func.abi_decode_input(&data[SELECTOR_LEN..]).ok()?;
+ if decoded.len() >= 2 {
+ decoded[1] = DynSolValue::String("".to_string());
+ }
+ Some(decoded.iter().map(format_token).collect())
+ }
+ }
"parseJson" |
"parseJsonUint" |
"parseJsonUintArray" |
@@ -985,113 +925,8 @@ mod tests {
fn test_should_redact() {
let decoder = CallTraceDecoder::new();
- let expected_revert_bytes4 = vec![0xde, 0xad, 0xbe, 0xef];
- let expect_revert_bytes4_data = Function::parse("expectRevert(bytes4)")
- .unwrap()
- .abi_encode_input(&[DynSolValue::FixedBytes(
- B256::right_padding_from(expected_revert_bytes4.as_slice()),
- 4,
- )])
- .unwrap();
-
- let expected_revert_bytes = hex!(
- "08c379a000000000000000000000000000000000000000000000000000000000\
- 0000002000000000000000000000000000000000000000000000000000000000\
- 00000004626f6f6d000000000000000000000000000000000000000000000000"
- )
- .to_vec();
- let expect_revert_bytes_data = Function::parse("expectRevert(bytes)")
- .unwrap()
- .abi_encode_input(&[DynSolValue::Bytes(expected_revert_bytes.clone())])
- .unwrap();
-
- let reverter = Address::from([0x11; 20]);
- let expect_revert_bytes4_address_data = Function::parse("expectRevert(bytes4,address)")
- .unwrap()
- .abi_encode_input(&[
- DynSolValue::FixedBytes(
- B256::right_padding_from(expected_revert_bytes4.as_slice()),
- 4,
- ),
- DynSolValue::Address(reverter),
- ])
- .unwrap();
-
- let count = 42_u64;
- let expect_revert_bytes_count_data = Function::parse("expectRevert(bytes,uint64)")
- .unwrap()
- .abi_encode_input(&[
- DynSolValue::Bytes(expected_revert_bytes.clone()),
- DynSolValue::Uint(alloy_primitives::U256::from(count), 64),
- ])
- .unwrap();
-
- let expect_revert_bytes_address_count_data =
- Function::parse("expectRevert(bytes,address,uint64)")
- .unwrap()
- .abi_encode_input(&[
- DynSolValue::Bytes(expected_revert_bytes.clone()),
- DynSolValue::Address(reverter),
- DynSolValue::Uint(alloy_primitives::U256::from(count), 64),
- ])
- .unwrap();
-
- let expect_revert_runtime_data = expected_revert_bytes4.clone();
-
// [function_signature, data, expected]
let cheatcode_input_test_cases = vec![
- // Should decode the expected revert payload, not full cheatcode calldata:
- (
- "expectRevert(bytes4)",
- expect_revert_bytes4_data,
- Some(vec![decoder.revert_decoder.decode(expected_revert_bytes4.as_slice(), None)]),
- ),
- (
- "expectRevert(bytes)",
- expect_revert_bytes_data,
- Some(vec![decoder.revert_decoder.decode(expected_revert_bytes.as_slice(), None)]),
- ),
- (
- "expectRevert(bytes4)",
- expect_revert_runtime_data.clone(),
- Some(vec![
- decoder.revert_decoder.decode(expect_revert_runtime_data.as_slice(), None),
- ]),
- ),
- (
- "expectRevert(bytes4,address)",
- expect_revert_bytes4_address_data,
- Some(vec![
- decoder.revert_decoder.decode(expected_revert_bytes4.as_slice(), None),
- decoder.format_value(&DynSolValue::Address(reverter)),
- ]),
- ),
- (
- "expectRevert(bytes,uint64)",
- expect_revert_bytes_count_data,
- Some(vec![
- decoder.revert_decoder.decode(expected_revert_bytes.as_slice(), None),
- decoder
- .format_value(&DynSolValue::Uint(alloy_primitives::U256::from(count), 64)),
- ]),
- ),
- (
- "expectRevert(bytes,address,uint64)",
- expect_revert_bytes_address_count_data,
- Some(vec![
- decoder.revert_decoder.decode(expected_revert_bytes.as_slice(), None),
- decoder.format_value(&DynSolValue::Address(reverter)),
- decoder
- .format_value(&DynSolValue::Uint(alloy_primitives::U256::from(count), 64)),
- ]),
- ),
- (
- "expectRevert()",
- expect_revert_runtime_data.clone(),
- Some(vec![
- decoder.revert_decoder.decode(expect_revert_runtime_data.as_slice(), None),
- ]),
- ),
// Should redact private key from traces in all cases:
("addr(uint256)", vec![], Some(vec!["".to_string()])),
("createWallet(string)", vec![], Some(vec!["".to_string()])),
@@ -1438,118 +1273,28 @@ mod tests {
}
}
- // A mock identifier that records which addresses it was asked to identify.
- struct RecordingIdentifier {
- queried: Vec,
- }
- impl TraceIdentifier for RecordingIdentifier {
- fn identify_addresses(&mut self, nodes: &[&CallTraceNode]) -> Vec> {
- self.queried.extend(nodes.iter().map(|n| n.trace.address));
- Vec::new()
- }
- }
-
#[test]
- fn test_identify_addresses_skips_evm_precompiles() {
- use foundry_evm_core::precompiles::SHA_256;
-
+ fn test_assertion_bytecode_redacted() {
let decoder = CallTraceDecoder::new();
+ let function = Function::parse("assertion(address,bytes,bytes4)").unwrap();
+ let address = Address::repeat_byte(0x11);
- let mut arena = CallTraceArena::default();
- let regular_addr = Address::from([0x42; 20]);
- arena.nodes_mut()[0].trace.address = regular_addr;
-
- // Standard EVM precompile flagged by the inspector.
- arena.nodes_mut().push(CallTraceNode {
- trace: CallTrace {
- address: SHA_256,
- depth: 1,
- maybe_precompile: Some(true),
- ..Default::default()
- },
- idx: 1,
- ..Default::default()
- });
-
- // Standard EVM precompile NOT flagged, caught by is_known_precompile.
- arena.nodes_mut().push(CallTraceNode {
- trace: CallTrace {
- address: SHA_256,
- depth: 1,
- maybe_precompile: None,
- ..Default::default()
- },
- idx: 2,
- ..Default::default()
- });
-
- let mut identifier = RecordingIdentifier { queried: Vec::new() };
- decoder.identify_addresses(&arena, &mut identifier);
-
- assert_eq!(identifier.queried, vec![regular_addr]);
- }
+ let mut selector_word = [0u8; 32];
+ selector_word[..4].copy_from_slice(&[0x12, 0x34, 0x56, 0x78]);
+ let selector = B256::from(selector_word);
- #[test]
- fn test_identify_addresses_skips_tempo_precompiles() {
- use foundry_evm_core::tempo::TEMPO_PRECOMPILE_ADDRESSES;
-
- // Decoder with Tempo chain ID (4217).
- let mut decoder = CallTraceDecoder::new().clone();
- decoder.chain_id = Some(4217);
-
- let mut arena = CallTraceArena::default();
- let regular_addr = Address::from([0x42; 20]);
- arena.nodes_mut()[0].trace.address = regular_addr;
-
- // Tempo precompile — not flagged by inspector, caught by is_known_precompile
- // only when chain_id is a Tempo chain.
- let tempo_precompile = TEMPO_PRECOMPILE_ADDRESSES[0];
- arena.nodes_mut().push(CallTraceNode {
- trace: CallTrace {
- address: tempo_precompile,
- depth: 1,
- maybe_precompile: None,
- ..Default::default()
- },
- idx: 1,
- ..Default::default()
- });
-
- let mut identifier = RecordingIdentifier { queried: Vec::new() };
- decoder.identify_addresses(&arena, &mut identifier);
-
- // On a Tempo chain, the Tempo precompile should be filtered out.
- assert_eq!(identifier.queried, vec![regular_addr]);
- }
-
- #[test]
- fn test_identify_addresses_does_not_skip_tempo_precompiles_on_other_chains() {
- use foundry_evm_core::tempo::TEMPO_PRECOMPILE_ADDRESSES;
-
- // Decoder with Ethereum mainnet chain ID (1).
- let mut decoder = CallTraceDecoder::new().clone();
- decoder.chain_id = Some(1);
-
- let mut arena = CallTraceArena::default();
- let regular_addr = Address::from([0x42; 20]);
- arena.nodes_mut()[0].trace.address = regular_addr;
-
- let tempo_precompile = TEMPO_PRECOMPILE_ADDRESSES[0];
- arena.nodes_mut().push(CallTraceNode {
- trace: CallTrace {
- address: tempo_precompile,
- depth: 1,
- maybe_precompile: None,
- ..Default::default()
- },
- idx: 1,
- ..Default::default()
- });
-
- let mut identifier = RecordingIdentifier { queried: Vec::new() };
- decoder.identify_addresses(&arena, &mut identifier);
+ let data = function
+ .abi_encode_input(&[
+ DynSolValue::Address(address),
+ DynSolValue::Bytes(vec![0xde, 0xad, 0xbe, 0xef]),
+ DynSolValue::FixedBytes(selector, 4),
+ ])
+ .unwrap();
- // On Ethereum, Tempo precompile addresses are regular contracts — should NOT be filtered.
- assert_eq!(identifier.queried, vec![regular_addr, tempo_precompile]);
+ let decoded = decoder.decode_cheatcode_inputs(&function, &data).expect("decoded inputs");
+ assert_eq!(decoded.len(), 3);
+ assert_eq!(decoded[0], format_token(&DynSolValue::Address(address)));
+ assert_eq!(decoded[1], "\"\"");
+ assert_eq!(decoded[2], format_token(&DynSolValue::FixedBytes(selector, 4)));
}
}
diff --git a/crates/evm/traces/src/lib.rs b/crates/evm/traces/src/lib.rs
index f9bf9c5e8471a..a392836fb2206 100644
--- a/crates/evm/traces/src/lib.rs
+++ b/crates/evm/traces/src/lib.rs
@@ -187,6 +187,22 @@ pub fn render_trace_arena(arena: &SparsedTraceArena) -> String {
render_trace_arena_inner(arena, false, false)
}
+/// Render a collection of call traces to a string with ANSI colors always enabled.
+///
+/// Use this when rendering traces outside of a TTY context (e.g. server-side) where
+/// `shell::color_choice()` would default to `Never`.
+pub fn render_trace_arena_with_colors(
+ arena: &SparsedTraceArena,
+ with_storage_changes: bool,
+) -> String {
+ let mut w = TraceWriter::new(Vec::::new())
+ .color_cheatcodes(true)
+ .use_colors(revm_inspectors::ColorChoice::Always)
+ .with_storage_changes(with_storage_changes);
+ w.write_arena(&arena.resolve_arena()).expect("Failed to write traces");
+ String::from_utf8(w.into_writer()).expect("trace writer wrote invalid UTF-8")
+}
+
/// Prunes trace depth if depth is provided as an argument
pub fn prune_trace_depth(arena: &mut CallTraceArena, depth: usize) {
for node in arena.nodes_mut() {
@@ -230,6 +246,8 @@ pub enum TraceKind {
Deployment,
Setup,
Execution,
+ AssertionTrigger,
+ Assertion,
}
impl TraceKind {
@@ -256,6 +274,22 @@ impl TraceKind {
pub const fn is_execution(self) -> bool {
matches!(self, Self::Execution)
}
+
+ /// Returns `true` if the trace kind is [`AssertionTrigger`].
+ ///
+ /// [`AssertionTrigger`]: TraceKind::AssertionTrigger
+ #[must_use]
+ pub const fn is_assertion_trigger(self) -> bool {
+ matches!(self, Self::AssertionTrigger)
+ }
+
+ /// Returns `true` if the trace kind is [`Assertion`].
+ ///
+ /// [`Assertion`]: TraceKind::Assertion
+ #[must_use]
+ pub const fn is_assertion(self) -> bool {
+ matches!(self, Self::Assertion)
+ }
}
/// Given a list of traces and artifacts, it returns a map connecting address to abi
diff --git a/crates/fmt/src/state/mod.rs b/crates/fmt/src/state/mod.rs
index 89a9bf152c8c2..4b986017b71dd 100644
--- a/crates/fmt/src/state/mod.rs
+++ b/crates/fmt/src/state/mod.rs
@@ -711,7 +711,7 @@ impl<'sess> State<'sess, '_> {
// Merge the lines and let the wrapper handle breaking if needed
let merged_line = format!(
"{current_line} {next_content}",
- next_content = &next_line[prefix.len()..].trim_start()
+ next_content = next_line[prefix.len()..].trim_start()
);
result.push(merged_line);
diff --git a/crates/forge/Cargo.toml b/crates/forge/Cargo.toml
index 064834d248d5f..77bee773e28f6 100644
--- a/crates/forge/Cargo.toml
+++ b/crates/forge/Cargo.toml
@@ -126,3 +126,4 @@ aws-kms = ["foundry-wallets/aws-kms"]
gcp-kms = ["foundry-wallets/gcp-kms"]
turnkey = ["foundry-wallets/turnkey"]
isolate-by-default = ["foundry-config/isolate-by-default"]
+credible = ["foundry-evm/credible"]
diff --git a/crates/forge/assets/tempo/MailTemplate.s.sol b/crates/forge/assets/tempo/MailTemplate.s.sol
index 27512efe4d5ec..45006f7cd0e06 100644
--- a/crates/forge/assets/tempo/MailTemplate.s.sol
+++ b/crates/forge/assets/tempo/MailTemplate.s.sol
@@ -14,7 +14,7 @@ contract MailScript is Script {
function run(string memory salt) public {
vm.startBroadcast();
- address feeToken = vm.envOr("TEMPO_FEE_TOKEN", StdTokens.ALPHA_USD_ADDRESS);
+ address feeToken = vm.envOr("TEMPO_FEE_TOKEN", StdTokens.PATH_USD_ADDRESS);
StdPrecompiles.TIP_FEE_MANAGER.setUserToken(feeToken);
ITIP20 token = ITIP20(
diff --git a/crates/forge/assets/tempo/MailTemplate.t.sol b/crates/forge/assets/tempo/MailTemplate.t.sol
index b1749db5df0bf..19760303860a1 100644
--- a/crates/forge/assets/tempo/MailTemplate.t.sol
+++ b/crates/forge/assets/tempo/MailTemplate.t.sol
@@ -17,7 +17,7 @@ contract MailTest is Test {
address public constant BOB = address(0x70997970C51812dc3A010C7d01b50e0d17dc79C8);
function setUp() public virtual {
- address feeToken = vm.envOr("TEMPO_FEE_TOKEN", StdTokens.ALPHA_USD_ADDRESS);
+ address feeToken = vm.envOr("TEMPO_FEE_TOKEN", StdTokens.PATH_USD_ADDRESS);
StdPrecompiles.TIP_FEE_MANAGER.setUserToken(feeToken);
token = ITIP20(
diff --git a/crates/forge/src/cmd/coverage.rs b/crates/forge/src/cmd/coverage.rs
index ea034bce87185..b8ce2a9b945b1 100644
--- a/crates/forge/src/cmd/coverage.rs
+++ b/crates/forge/src/cmd/coverage.rs
@@ -87,8 +87,11 @@ impl CoverageArgs {
config = self.load_config()?;
}
- // Set fuzz seed so coverage reports are deterministic
- config.fuzz.seed = Some(U256::from_be_bytes(STATIC_FUZZ_SEED));
+ // Default to a static fuzz seed so coverage reports are deterministic,
+ // but allow the user to override it via `--fuzz-seed` or `[fuzz] seed` in config.
+ if config.fuzz.seed.is_none() {
+ config.fuzz.seed = Some(U256::from_be_bytes(STATIC_FUZZ_SEED));
+ }
let (paths, mut output) = {
let (project, output) = self.build(&config)?;
diff --git a/crates/forge/src/cmd/create.rs b/crates/forge/src/cmd/create.rs
index 765bb64f95fdd..98564ec01ea67 100644
--- a/crates/forge/src/cmd/create.rs
+++ b/crates/forge/src/cmd/create.rs
@@ -408,15 +408,18 @@ impl CreateArgs {
// Apply user-provided gas, fee, nonce, and Tempo options.
self.tx.apply::(&mut deployer.tx, is_legacy);
- // For keychain mode, set key_id and nonce_key before gas estimation.
// Convert the CREATE into an AA-compatible call entry since Tempo AA
// transactions use a `calls` list instead of `to`+`input`.
+ if chain.is_tempo() {
+ deployer.tx.convert_create_to_call();
+ }
+
+ // For keychain mode, set key_id and nonce_key before gas estimation.
if let Some((_, ref ak)) = tempo_keychain {
deployer.tx.set_key_id(ak.key_address);
if deployer.tx.nonce_key().is_none() {
deployer.tx.set_nonce_key(U256::ZERO);
}
- deployer.tx.convert_create_to_call();
}
// Fetch defaults from provider for values not specified by user.
diff --git a/crates/forge/src/cmd/flatten.rs b/crates/forge/src/cmd/flatten.rs
index 3dc508d577cf9..3917b0418179f 100644
--- a/crates/forge/src/cmd/flatten.rs
+++ b/crates/forge/src/cmd/flatten.rs
@@ -26,7 +26,7 @@ pub struct FlattenArgs {
pub output: Option,
#[command(flatten)]
- project_paths: ProjectPathOpts,
+ pub project_paths: ProjectPathOpts,
}
impl FlattenArgs {
diff --git a/crates/forge/src/cmd/snapshot.rs b/crates/forge/src/cmd/snapshot.rs
index c8dc2ba72aae1..7c6fb51ce3266 100644
--- a/crates/forge/src/cmd/snapshot.rs
+++ b/crates/forge/src/cmd/snapshot.rs
@@ -99,8 +99,11 @@ impl GasSnapshotArgs {
}
pub async fn run(mut self) -> Result<()> {
- // Set fuzz seed so gas snapshots are deterministic
- self.test.fuzz_seed = Some(U256::from_be_bytes(STATIC_FUZZ_SEED));
+ // Default to a static fuzz seed so gas snapshots are deterministic,
+ // but allow the user to override it via `--fuzz-seed`.
+ if self.test.fuzz_seed.is_none() {
+ self.test.fuzz_seed = Some(U256::from_be_bytes(STATIC_FUZZ_SEED));
+ }
let outcome = self.test.compile_and_run().await?;
outcome.ensure_ok(false)?;
diff --git a/crates/forge/src/cmd/test/mod.rs b/crates/forge/src/cmd/test/mod.rs
index da300c429e37e..73437f40dea1a 100644
--- a/crates/forge/src/cmd/test/mod.rs
+++ b/crates/forge/src/cmd/test/mod.rs
@@ -6,7 +6,7 @@ use crate::{
multi_runner::matches_artifact,
result::{SuiteResult, TestOutcome, TestStatus},
traces::{
- CallTraceDecoderBuilder, InternalTraceMode, TraceKind,
+ CallTraceDecoderBuilder, InternalTraceMode, SparsedTraceArena, TraceKind,
debug::{ContractSources, DebugTraceIdentifier},
decode_trace_arena, folded_stack_trace,
identifier::SignaturesIdentifier,
@@ -59,6 +59,21 @@ use std::{
};
use yansi::Paint;
+fn label_assertion_trace(arena: &mut SparsedTraceArena) {
+ let Some(assertion_addr) = arena.nodes().first().map(|node| node.trace.address) else {
+ return;
+ };
+
+ for node in arena.nodes_mut() {
+ if node.trace.address == assertion_addr
+ && let Some(decoded) = node.trace.decoded.as_mut()
+ && decoded.label.is_none()
+ {
+ decoded.label = Some("Assertion".to_string());
+ }
+ }
+}
+
mod filter;
mod summary;
use crate::{result::TestKind, traces::render_trace_arena_inner};
@@ -704,6 +719,8 @@ impl TestArgs {
// Identify addresses and decode traces.
let mut decoded_traces = Vec::with_capacity(result.traces.len());
+ let mut decoded_trigger_traces = Vec::new();
+ let mut decoded_assertion_traces = Vec::new();
for (kind, arena) in &mut result.traces {
if identify_addresses {
decoder.identify(arena, &mut identifier);
@@ -718,6 +735,12 @@ impl TestArgs {
TraceKind::Execution => {
(verbosity == 3 && result.status.is_failure()) || verbosity >= 4
}
+ TraceKind::AssertionTrigger => {
+ (verbosity == 3 && result.status.is_failure()) || verbosity >= 4
+ }
+ TraceKind::Assertion => {
+ (verbosity == 3 && result.status.is_failure()) || verbosity >= 4
+ }
TraceKind::Setup => {
(verbosity == 4 && result.status.is_failure()) || verbosity >= 5
}
@@ -731,14 +754,60 @@ impl TestArgs {
prune_trace_depth(arena, trace_depth);
}
- decoded_traces.push(render_trace_arena_inner(arena, false, verbosity > 4));
+ if matches!(kind, TraceKind::Assertion) {
+ label_assertion_trace(arena);
+ decoded_assertion_traces.push(render_trace_arena_inner(
+ arena,
+ false,
+ verbosity > 4,
+ ));
+ } else if matches!(kind, TraceKind::AssertionTrigger) {
+ decoded_trigger_traces.push(render_trace_arena_inner(
+ arena,
+ false,
+ verbosity > 4,
+ ));
+ } else {
+ decoded_traces.push(render_trace_arena_inner(
+ arena,
+ false,
+ verbosity > 4,
+ ));
+ }
}
}
- if !silent && show_traces && !decoded_traces.is_empty() {
- sh_println!("Traces:")?;
- for trace in &decoded_traces {
- sh_println!("{trace}")?;
+ if !silent
+ && show_traces
+ && (!decoded_traces.is_empty()
+ || !decoded_trigger_traces.is_empty()
+ || !decoded_assertion_traces.is_empty())
+ {
+ if !decoded_traces.is_empty() {
+ sh_println!("Traces:")?;
+ for trace in &decoded_traces {
+ sh_println!("{trace}")?;
+ }
+ }
+
+ if !decoded_trigger_traces.is_empty() {
+ if !decoded_traces.is_empty() {
+ sh_println!()?;
+ }
+ sh_println!("Trigger Call:")?;
+ for trace in &decoded_trigger_traces {
+ sh_println!("{trace}")?;
+ }
+ }
+
+ if !decoded_assertion_traces.is_empty() {
+ if !decoded_traces.is_empty() || !decoded_trigger_traces.is_empty() {
+ sh_println!()?;
+ }
+ sh_println!("Assertion Traces:")?;
+ for trace in &decoded_assertion_traces {
+ sh_println!("{trace}")?;
+ }
}
}
@@ -905,7 +974,7 @@ impl TestArgs {
if let Some(gas_report) = gas_report {
let finalized = gas_report.finalize();
- sh_println!("{}", &finalized)?;
+ sh_println!("{finalized}")?;
outcome.gas_report = Some(finalized);
}
@@ -915,7 +984,7 @@ impl TestArgs {
if self.summary && !outcome.results.is_empty() {
let summary_report = TestSummaryReport::new(self.detailed, outcome.clone());
- sh_println!("{}", &summary_report)?;
+ sh_println!("{summary_report}")?;
}
// Reattach the task.
diff --git a/crates/forge/src/cmd/test/summary.rs b/crates/forge/src/cmd/test/summary.rs
index f8a72272af53c..a0123e896d0bf 100644
--- a/crates/forge/src/cmd/test/summary.rs
+++ b/crates/forge/src/cmd/test/summary.rs
@@ -25,9 +25,9 @@ impl TestSummaryReport {
impl Display for TestSummaryReport {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
if shell::is_json() {
- writeln!(f, "{}", &self.format_json_output(&self.is_detailed, &self.outcome))?;
+ writeln!(f, "{}", self.format_json_output(&self.is_detailed, &self.outcome))?;
} else {
- writeln!(f, "\n{}", &self.format_table_output(&self.is_detailed, &self.outcome))?;
+ writeln!(f, "\n{}", self.format_table_output(&self.is_detailed, &self.outcome))?;
}
Ok(())
}
diff --git a/crates/forge/src/gas_report.rs b/crates/forge/src/gas_report.rs
index 6c93dc03b28b5..58b11d98874ed 100644
--- a/crates/forge/src/gas_report.rs
+++ b/crates/forge/src/gas_report.rs
@@ -146,7 +146,7 @@ impl GasReport {
impl Display for GasReport {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
if shell::is_json() {
- writeln!(f, "{}", &self.format_json_output())?;
+ writeln!(f, "{}", self.format_json_output())?;
} else {
for (name, contract) in &self.contracts {
if contract.functions.is_empty() {
diff --git a/crates/forge/src/result.rs b/crates/forge/src/result.rs
index 66be289ef252d..b5d3671116819 100644
--- a/crates/forge/src/result.rs
+++ b/crates/forge/src/result.rs
@@ -16,7 +16,7 @@ use foundry_evm::{
decode::SkipReason,
executors::{RawCallResult, invariant::InvariantMetrics},
fuzz::{CounterExample, FuzzCase, FuzzFixtures, FuzzTestResult},
- traces::{CallTraceArena, CallTraceDecoder, TraceKind, Traces},
+ traces::{CallTraceArena, CallTraceDecoder, SparsedTraceArena, TraceKind, Traces},
};
use serde::{Deserialize, Serialize};
use std::{
@@ -618,7 +618,24 @@ impl TestResult {
self.duration = Duration::default();
self.gas_report_traces = Vec::new();
- if let Some(cheatcodes) = raw_call_result.cheatcodes {
+ if let Some(mut cheatcodes) = raw_call_result.cheatcodes {
+ let assertion_trigger_traces = cheatcodes.take_assertion_trigger_traces();
+ if !assertion_trigger_traces.is_empty() {
+ self.traces.extend(assertion_trigger_traces.into_iter().map(|arena| {
+ (
+ TraceKind::AssertionTrigger,
+ SparsedTraceArena { arena, ignored: Default::default() },
+ )
+ }));
+ }
+
+ let assertion_traces = cheatcodes.take_assertion_traces();
+ if !assertion_traces.is_empty() {
+ self.traces.extend(assertion_traces.into_iter().map(|arena| {
+ (TraceKind::Assertion, SparsedTraceArena { arena, ignored: Default::default() })
+ }));
+ }
+
self.breakpoints = cheatcodes.breakpoints;
self.gas_snapshots = cheatcodes.gas_snapshots;
self.deprecated_cheatcodes = cheatcodes.deprecated;
diff --git a/crates/forge/src/runner.rs b/crates/forge/src/runner.rs
index d924c416759a2..353d8b1f55cde 100644
--- a/crates/forge/src/runner.rs
+++ b/crates/forge/src/runner.rs
@@ -826,7 +826,7 @@ impl<'a, FEN: FoundryEvmNetwork> FunctionRunner<'a, FEN> {
);
if let Some(ref progress) = progress {
- progress.set_prefix(format!("{}\n{warn}\n", &func.name));
+ progress.set_prefix(format!("{}\n{warn}\n", func.name));
} else {
let _ = sh_warn!("{warn}");
}
diff --git a/crates/forge/tests/cli/backtrace.rs b/crates/forge/tests/cli/backtrace.rs
index 434fa4cb289ba..835bdde5eb808 100644
--- a/crates/forge/tests/cli/backtrace.rs
+++ b/crates/forge/tests/cli/backtrace.rs
@@ -290,7 +290,7 @@ forgetest!(test_library_backtrace, |prj, cmd| {
// Add foundry.toml configuration for linked library
let config = foundry_config::Config {
libraries: vec!["src/libraries/ExternalMathLib.sol:ExternalMathLib:0x1234567890123456789012345678901234567890".to_string()],
- ..Default::default()
+ ..foundry_test_utils::util::test_config_default()
};
prj.write_config(config);
diff --git a/crates/forge/tests/cli/cmd.rs b/crates/forge/tests/cli/cmd.rs
index d3f1503faf569..d9f6e6be77fef 100644
--- a/crates/forge/tests/cli/cmd.rs
+++ b/crates/forge/tests/cli/cmd.rs
@@ -298,6 +298,9 @@ forgetest!(
// checks that init works
forgetest!(can_init_repo_with_config, |prj, cmd| {
let foundry_toml = prj.root().join(Config::FILE_NAME);
+ // `TestProject::new` pre-writes a foundry.toml to match the project's PathStyle; remove it
+ // so this test exercises `forge init`'s empty-directory path.
+ let _ = fs::remove_file(&foundry_toml);
assert!(!foundry_toml.exists());
cmd.args(["init", "--force"])
@@ -916,11 +919,18 @@ Installing tempo-std in [..] (url: https://github.com/tempoxyz/tempo-std, tag: N
assert!(prj.root().join("foundry.toml").exists());
- // Verify foundry.toml contains `tempo = true` so subsequent commands auto-detect the network.
+ // Verify foundry.toml contains `network = "tempo"` so subsequent commands auto-detect the
+ // network.
let foundry_toml = std::fs::read_to_string(prj.root().join("foundry.toml")).unwrap();
assert!(
- foundry_toml.contains("tempo = true"),
- "foundry.toml should contain `tempo = true`, got:\n{foundry_toml}"
+ foundry_toml.contains("network = \"tempo\""),
+ "foundry.toml should contain `network = \"tempo\"`, got:\n{foundry_toml}"
+ );
+ assert!(
+ foundry_toml.contains("[rpc_endpoints]")
+ && foundry_toml.contains("tempo = \"https://rpc.tempo.xyz/\"")
+ && foundry_toml.contains("moderato = \"https://rpc.moderato.tempo.xyz/\""),
+ "foundry.toml should contain tempo rpc_endpoints, got:\n{foundry_toml}"
);
assert!(prj.root().join("lib/forge-std").exists());
@@ -1816,7 +1826,7 @@ forgetest!(gas_report_all_contracts, |prj, cmd| {
+=============================================================================================+
| Deployment Cost | Deployment Size | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
-| 133027 | 394 | | | | |
+| 133015 | 394 | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
@@ -1830,7 +1840,7 @@ forgetest!(gas_report_all_contracts, |prj, cmd| {
+=================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
-| 133243 | 395 | | | | |
+| 133219 | 395 | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
| | | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
@@ -1844,7 +1854,7 @@ forgetest!(gas_report_all_contracts, |prj, cmd| {
+=============================================================================================+
| Deployment Cost | Deployment Size | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
-| 133027 | 394 | | | | |
+| 133015 | 394 | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
@@ -1863,7 +1873,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
{
"contract": "src/Contracts.sol:ContractOne",
"deployment": {
- "gas": 133027,
+ "gas": 133015,
"size": 394
},
"functions": {
@@ -1879,7 +1889,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
{
"contract": "src/Contracts.sol:ContractThree",
"deployment": {
- "gas": 133243,
+ "gas": 133219,
"size": 395
},
"functions": {
@@ -1895,7 +1905,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
{
"contract": "src/Contracts.sol:ContractTwo",
"deployment": {
- "gas": 133027,
+ "gas": 133015,
"size": 394
},
"functions": {
@@ -1921,7 +1931,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
+=============================================================================================+
| Deployment Cost | Deployment Size | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
-| 133027 | 394 | | | | |
+| 133015 | 394 | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
@@ -1935,7 +1945,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
+=================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
-| 133243 | 395 | | | | |
+| 133219 | 395 | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
| | | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
@@ -1949,7 +1959,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
+=============================================================================================+
| Deployment Cost | Deployment Size | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
-| 133027 | 394 | | | | |
+| 133015 | 394 | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
@@ -1968,7 +1978,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
{
"contract": "src/Contracts.sol:ContractOne",
"deployment": {
- "gas": 133027,
+ "gas": 133015,
"size": 394
},
"functions": {
@@ -1984,7 +1994,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
{
"contract": "src/Contracts.sol:ContractThree",
"deployment": {
- "gas": 133243,
+ "gas": 133219,
"size": 395
},
"functions": {
@@ -2000,7 +2010,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
{
"contract": "src/Contracts.sol:ContractTwo",
"deployment": {
- "gas": 133027,
+ "gas": 133015,
"size": 394
},
"functions": {
@@ -2026,7 +2036,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
+=============================================================================================+
| Deployment Cost | Deployment Size | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
-| 133027 | 394 | | | | |
+| 133015 | 394 | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
@@ -2040,7 +2050,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
+=================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
-| 133243 | 395 | | | | |
+| 133219 | 395 | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
| | | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
@@ -2054,7 +2064,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
+=============================================================================================+
| Deployment Cost | Deployment Size | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
-| 133027 | 394 | | | | |
+| 133015 | 394 | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
@@ -2073,7 +2083,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
{
"contract": "src/Contracts.sol:ContractOne",
"deployment": {
- "gas": 133027,
+ "gas": 133015,
"size": 394
},
"functions": {
@@ -2089,7 +2099,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
{
"contract": "src/Contracts.sol:ContractThree",
"deployment": {
- "gas": 133243,
+ "gas": 133219,
"size": 395
},
"functions": {
@@ -2105,7 +2115,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
{
"contract": "src/Contracts.sol:ContractTwo",
"deployment": {
- "gas": 133027,
+ "gas": 133015,
"size": 394
},
"functions": {
@@ -2134,7 +2144,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
+=============================================================================================+
| Deployment Cost | Deployment Size | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
-| 133027 | 394 | | | | |
+| 133015 | 394 | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
@@ -2148,7 +2158,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
+=================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
-| 133243 | 395 | | | | |
+| 133219 | 395 | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
| | | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
@@ -2162,7 +2172,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
+=============================================================================================+
| Deployment Cost | Deployment Size | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
-| 133027 | 394 | | | | |
+| 133015 | 394 | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
@@ -2181,7 +2191,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
{
"contract": "src/Contracts.sol:ContractOne",
"deployment": {
- "gas": 133027,
+ "gas": 133015,
"size": 394
},
"functions": {
@@ -2197,7 +2207,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
{
"contract": "src/Contracts.sol:ContractThree",
"deployment": {
- "gas": 133243,
+ "gas": 133219,
"size": 395
},
"functions": {
@@ -2213,7 +2223,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
{
"contract": "src/Contracts.sol:ContractTwo",
"deployment": {
- "gas": 133027,
+ "gas": 133015,
"size": 394
},
"functions": {
@@ -2246,7 +2256,7 @@ forgetest!(gas_report_some_contracts, |prj, cmd| {
+=============================================================================================+
| Deployment Cost | Deployment Size | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
-| 133027 | 394 | | | | |
+| 133015 | 394 | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
@@ -2265,7 +2275,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
{
"contract": "src/Contracts.sol:ContractOne",
"deployment": {
- "gas": 133027,
+ "gas": 133015,
"size": 394
},
"functions": {
@@ -2293,7 +2303,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
+=============================================================================================+
| Deployment Cost | Deployment Size | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
-| 133027 | 394 | | | | |
+| 133015 | 394 | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
@@ -2312,7 +2322,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
{
"contract": "src/Contracts.sol:ContractTwo",
"deployment": {
- "gas": 133027,
+ "gas": 133015,
"size": 394
},
"functions": {
@@ -2340,7 +2350,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
+=================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
-| 133243 | 395 | | | | |
+| 133219 | 395 | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
| | | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
@@ -2359,7 +2369,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
{
"contract": "src/Contracts.sol:ContractThree",
"deployment": {
- "gas": 133243,
+ "gas": 133219,
"size": 395
},
"functions": {
@@ -2395,7 +2405,7 @@ forgetest!(gas_report_ignore_some_contracts, |prj, cmd| {
+=================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
-| 133243 | 395 | | | | |
+| 133219 | 395 | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
| | | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
@@ -2409,7 +2419,7 @@ forgetest!(gas_report_ignore_some_contracts, |prj, cmd| {
+=============================================================================================+
| Deployment Cost | Deployment Size | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
-| 133027 | 394 | | | | |
+| 133015 | 394 | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
@@ -2428,7 +2438,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
{
"contract": "src/Contracts.sol:ContractThree",
"deployment": {
- "gas": 133243,
+ "gas": 133219,
"size": 395
},
"functions": {
@@ -2444,7 +2454,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
{
"contract": "src/Contracts.sol:ContractTwo",
"deployment": {
- "gas": 133027,
+ "gas": 133015,
"size": 394
},
"functions": {
@@ -2476,7 +2486,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
+=============================================================================================+
| Deployment Cost | Deployment Size | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
-| 133027 | 394 | | | | |
+| 133015 | 394 | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
@@ -2490,7 +2500,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
+=================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
-| 133243 | 395 | | | | |
+| 133219 | 395 | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
| | | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
@@ -2509,7 +2519,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
{
"contract": "src/Contracts.sol:ContractOne",
"deployment": {
- "gas": 133027,
+ "gas": 133015,
"size": 394
},
"functions": {
@@ -2525,7 +2535,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
{
"contract": "src/Contracts.sol:ContractThree",
"deployment": {
- "gas": 133243,
+ "gas": 133219,
"size": 395
},
"functions": {
@@ -2565,7 +2575,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
+=============================================================================================+
| Deployment Cost | Deployment Size | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
-| 133027 | 394 | | | | |
+| 133015 | 394 | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
@@ -2579,7 +2589,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
+=================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
-| 133243 | 395 | | | | |
+| 133219 | 395 | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
| | | | | | |
|------------------------------------------+-----------------+--------+--------+--------+---------|
@@ -2593,7 +2603,7 @@ Ran 3 test suites [ELAPSED]: 3 tests passed, 0 failed, 0 skipped (3 total tests)
+=============================================================================================+
| Deployment Cost | Deployment Size | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
-| 133027 | 394 | | | | |
+| 133015 | 394 | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|----------------------------------------+-----------------+-------+--------+-------+---------|
@@ -2622,7 +2632,7 @@ Warning: ContractThree is listed in both 'gas_reports' and 'gas_reports_ignore'.
{
"contract": "src/Contracts.sol:ContractOne",
"deployment": {
- "gas": 133027,
+ "gas": 133015,
"size": 394
},
"functions": {
@@ -2638,7 +2648,7 @@ Warning: ContractThree is listed in both 'gas_reports' and 'gas_reports_ignore'.
{
"contract": "src/Contracts.sol:ContractThree",
"deployment": {
- "gas": 133243,
+ "gas": 133219,
"size": 395
},
"functions": {
@@ -2654,7 +2664,7 @@ Warning: ContractThree is listed in both 'gas_reports' and 'gas_reports_ignore'.
{
"contract": "src/Contracts.sol:ContractTwo",
"deployment": {
- "gas": 133027,
+ "gas": 133015,
"size": 394
},
"functions": {
@@ -3106,7 +3116,7 @@ contract NestedDeploy is Test {
+============================================================================================+
| Deployment Cost | Deployment Size | | | | |
|-------------------------------------------+-----------------+-----+--------+-----+---------|
-| 328961 | 1163 | | | | |
+| 328949 | 1163 | | | | |
|-------------------------------------------+-----------------+-----+--------+-----+---------|
| | | | | | |
|-------------------------------------------+-----------------+-----+--------+-----+---------|
@@ -3161,7 +3171,7 @@ Ran 1 test suite [ELAPSED]: 1 tests passed, 0 failed, 0 skipped (1 total tests)
{
"contract": "test/NestedDeployTest.sol:Parent",
"deployment": {
- "gas": 328961,
+ "gas": 328949,
"size": 1163
},
"functions": {
@@ -3918,7 +3928,7 @@ forgetest_init!(gas_report_include_tests, |prj, cmd| {
+=======================================================================================+
| Deployment Cost | Deployment Size | | | | |
|----------------------------------+-----------------+-------+--------+-------+---------|
-| 156813 | 509 | | | | |
+| 156801 | 509 | | | | |
|----------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|----------------------------------+-----------------+-------+--------+-------+---------|
@@ -3942,7 +3952,7 @@ forgetest_init!(gas_report_include_tests, |prj, cmd| {
|-----------------------------------------+-----------------+--------+--------+--------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|-----------------------------------------+-----------------+--------+--------+--------+---------|
-| setUp | 218902 | 218902 | 218902 | 218902 | 1 |
+| setUp | 218890 | 218890 | 218890 | 218890 | 1 |
|-----------------------------------------+-----------------+--------+--------+--------+---------|
| test_Increment | 51847 | 51847 | 51847 | 51847 | 1 |
╰-----------------------------------------+-----------------+--------+--------+--------+---------╯
@@ -3960,7 +3970,7 @@ Ran 1 test suite [ELAPSED]: 1 tests passed, 0 failed, 0 skipped (1 total tests)
| src/Counter.sol:Counter Contract | | | | | |
|----------------------------------|-----------------|-------|--------|-------|---------|
| Deployment Cost | Deployment Size | | | | |
-| 156813 | 509 | | | | |
+| 156801 | 509 | | | | |
| | | | | | |
| Function Name | Min | Avg | Median | Max | # Calls |
| increment | 43482 | 43482 | 43482 | 43482 | 1 |
@@ -3973,7 +3983,7 @@ Ran 1 test suite [ELAPSED]: 1 tests passed, 0 failed, 0 skipped (1 total tests)
| 1544498 | 7573 | | | | |
| | | | | | |
| Function Name | Min | Avg | Median | Max | # Calls |
-| setUp | 218902 | 218902 | 218902 | 218902 | 1 |
+| setUp | 218890 | 218890 | 218890 | 218890 | 1 |
| test_Increment | 51847 | 51847 | 51847 | 51847 | 1 |
@@ -3990,7 +4000,7 @@ Ran 1 test suite [ELAPSED]: 1 tests passed, 0 failed, 0 skipped (1 total tests)
{
"contract": "src/Counter.sol:Counter",
"deployment": {
- "gas": 156813,
+ "gas": 156801,
"size": 509
},
"functions": {
@@ -4026,10 +4036,10 @@ Ran 1 test suite [ELAPSED]: 1 tests passed, 0 failed, 0 skipped (1 total tests)
"functions": {
"setUp()": {
"calls": 1,
- "min": 218902,
- "mean": 218902,
- "median": 218902,
- "max": 218902
+ "min": 218890,
+ "mean": 218890,
+ "median": 218890,
+ "max": 218890
},
"test_Increment()": {
"calls": 1,
diff --git a/crates/forge/tests/cli/config.rs b/crates/forge/tests/cli/config.rs
index dca88ad1c2f63..c8a4014a6154a 100644
--- a/crates/forge/tests/cli/config.rs
+++ b/crates/forge/tests/cli/config.rs
@@ -16,7 +16,7 @@ use foundry_config::{
use foundry_evm::opts::EvmOpts;
use foundry_test_utils::{
foundry_compilers::artifacts::{EvmVersion, remappings::Remapping},
- util::{OTHER_SOLC_VERSION, OutputExt, TestCommand, pretty_err},
+ util::{OTHER_SOLC_VERSION, OutputExt, TestCommand, pretty_err, test_config_default},
};
use path_slash::PathBufExt;
use semver::VersionReq;
@@ -30,21 +30,21 @@ use std::{
};
const DEFAULT_CONFIG: &str = r#"[profile.default]
-src = "src"
-test = "test"
-script = "script"
-out = "out"
+src = "assertions/src"
+test = "assertions/test"
+script = "assertions/script"
+out = "assertions/out"
libs = ["lib"]
remappings = ["forge-std/=lib/forge-std/src/"]
auto_detect_remappings = true
libraries = []
cache = true
-cache_path = "cache"
+cache_path = "assertions/cache"
dynamic_test_linking = false
-snapshots = "snapshots"
+snapshots = "assertions/snapshots"
gas_snapshot_check = false
gas_snapshot_emit = true
-broadcast = "broadcast"
+broadcast = "assertions/broadcast"
allow_paths = []
include_paths = []
skip = []
@@ -72,7 +72,7 @@ ignored_error_codes = [
ignored_error_codes_from = []
ignored_warnings_from = []
deny = "never"
-test_failures_file = "cache/test-failures"
+test_failures_file = "assertions/cache/test-failures"
show_progress = false
ffi = false
live_logs = false
@@ -112,7 +112,6 @@ create2_deployer = "0x4e59b44847b379578588920ca78fbf26c0b4956c"
assertions_revert = true
legacy_assertions = false
celo = false
-tempo = false
bypass_prevrandao = false
transaction_timeout = 120
additional_compiler_profiles = []
@@ -125,7 +124,7 @@ endpoints = "all"
[[profile.default.fs_permissions]]
access = "read"
-path = "out"
+path = "assertions/out"
[fmt]
line_length = 120
@@ -198,7 +197,7 @@ corpus_min_size = 0
show_edge_coverage = false
sancov_edges = false
sancov_trace_cmp = false
-failure_persist_dir = "cache/fuzz"
+failure_persist_dir = "assertions/cache/fuzz"
show_logs = false
[invariant]
@@ -221,7 +220,7 @@ corpus_min_size = 0
show_edge_coverage = false
sancov_edges = false
sancov_trace_cmp = false
-failure_persist_dir = "cache/invariant"
+failure_persist_dir = "assertions/cache/invariant"
show_metrics = true
show_solidity = false
check_interval = 1
@@ -730,7 +729,10 @@ forgetest!(can_set_use_literal_content, |prj, cmd| {
//
forgetest!(enable_optimizer_when_runs_set, |prj, cmd| {
// explicitly set optimizer runs
- prj.update_config(|config| config.optimizer_runs = Some(1337));
+ prj.update_config(|config| {
+ config.optimizer = None;
+ config.optimizer_runs = Some(1337);
+ });
let config = cmd.config();
assert!(config.optimizer.unwrap());
@@ -908,7 +910,7 @@ forgetest_init!(can_prioritise_project_remappings, |prj, cmd| {
// This should be filtered out from final remappings as root project already has `@utils/`.
let nested = prj.paths().libraries[0].join("dep1");
pretty_err(&nested, fs::create_dir_all(&nested));
- let mut lib_config = Config::load_with_root(&nested).unwrap();
+ let mut lib_config = test_config_default();
lib_config.remappings = vec![
Remapping::from_str("@utils/libraries/=src/").unwrap().into(),
Remapping::from_str("@openzeppelin/contracts-upgradeable/=lib/openzeppelin-upgradeable/")
@@ -1201,10 +1203,10 @@ forgetest_init!(test_default_config, |prj, cmd| {
cmd.forge_fuse().args(["config", "--json"]).assert_success().stdout_eq(str![[r#"
{
- "src": "src",
- "test": "test",
- "script": "script",
- "out": "out",
+ "src": "assertions/src",
+ "test": "assertions/test",
+ "script": "assertions/script",
+ "out": "assertions/out",
"libs": [
"lib"
],
@@ -1214,12 +1216,12 @@ forgetest_init!(test_default_config, |prj, cmd| {
"auto_detect_remappings": true,
"libraries": [],
"cache": true,
- "cache_path": "cache",
+ "cache_path": "assertions/cache",
"dynamic_test_linking": false,
- "snapshots": "snapshots",
+ "snapshots": "assertions/snapshots",
"gas_snapshot_check": false,
"gas_snapshot_emit": true,
- "broadcast": "broadcast",
+ "broadcast": "assertions/broadcast",
"allow_paths": [],
"include_paths": [],
"skip": [],
@@ -1265,7 +1267,7 @@ forgetest_init!(test_default_config, |prj, cmd| {
"match_path": null,
"no_match_path": null,
"no_match_coverage": null,
- "test_failures_file": "cache/test-failures",
+ "test_failures_file": "assertions/cache/test-failures",
"threads": null,
"show_progress": false,
"fuzz": {
@@ -1287,7 +1289,7 @@ forgetest_init!(test_default_config, |prj, cmd| {
"show_edge_coverage": false,
"sancov_edges": false,
"sancov_trace_cmp": false,
- "failure_persist_dir": "cache/fuzz",
+ "failure_persist_dir": "assertions/cache/fuzz",
"show_logs": false,
"timeout": null
},
@@ -1312,7 +1314,7 @@ forgetest_init!(test_default_config, |prj, cmd| {
"show_edge_coverage": false,
"sancov_edges": false,
"sancov_trace_cmp": false,
- "failure_persist_dir": "cache/invariant",
+ "failure_persist_dir": "assertions/cache/invariant",
"show_metrics": true,
"timeout": null,
"show_solidity": false,
@@ -1422,7 +1424,7 @@ forgetest_init!(test_default_config, |prj, cmd| {
"fs_permissions": [
{
"access": "read",
- "path": "out"
+ "path": "assertions/out"
}
],
"isolate": false,
@@ -1437,8 +1439,8 @@ forgetest_init!(test_default_config, |prj, cmd| {
"soldeer": null,
"assertions_revert": true,
"legacy_assertions": false,
+ "network": null,
"celo": false,
- "tempo": false,
"bypass_prevrandao": false,
"transaction_timeout": 120,
"additional_compiler_profiles": [],
diff --git a/crates/forge/tests/cli/ext_integration.rs b/crates/forge/tests/cli/ext_integration.rs
index fbd84739635c5..b4ad3c2d0afc6 100644
--- a/crates/forge/tests/cli/ext_integration.rs
+++ b/crates/forge/tests/cli/ext_integration.rs
@@ -6,7 +6,7 @@ use foundry_test_utils::util::ExtTester;
//
#[test]
fn forge_std() {
- ExtTester::new("foundry-rs", "forge-std", "b69e66b0ff79924d487d49bf7fb47c9ec326acba")
+ ExtTester::new("foundry-rs", "forge-std", "8987040ede9553cea20c95ad40d0455930f9c8e0")
// Skip fork tests.
.args(["--nmc", "Fork"])
.verbosity(2)
diff --git a/crates/forge/tests/cli/failure_assertions.rs b/crates/forge/tests/cli/failure_assertions.rs
index 48a17c723b261..77d5a5e84cfbb 100644
--- a/crates/forge/tests/cli/failure_assertions.rs
+++ b/crates/forge/tests/cli/failure_assertions.rs
@@ -70,8 +70,13 @@ Suite result: FAILED. 0 passed; 7 failed; 0 skipped; [ELAPSED]
.stdout_eq(
r#"No files changed, compilation skipped
...
+[FAIL: Reverter != expected reverter: [..] != 0x000000000000000000000000000000000000dEaD] testShouldFailExpectPartialRevertWrongReverterTopLevelCreate() ([GAS])
+[FAIL: Reverter != expected reverter: [..] != [..]] testShouldFailExpectRevertNestedCreateInnerAddress() ([GAS])
+[FAIL: Reverter != expected reverter: [..] != 0x000000000000000000000000000000000000dEaD] testShouldFailExpectRevertWithBytesWrongReverterTopLevelCreate() ([GAS])
+[FAIL: Reverter != expected reverter: [..] != 0x000000000000000000000000000000000000dEaD] testShouldFailExpectRevertWrongReverterNestedCreate() ([GAS])
+[FAIL: Reverter != expected reverter: [..] != 0x000000000000000000000000000000000000dEaD] testShouldFailExpectRevertWrongReverterTopLevelCreate() ([GAS])
[FAIL: next call did not revert as expected] testShouldFailExpectRevertsNotOnImmediateNextCall() ([GAS])
-Suite result: FAILED. 0 passed; 1 failed; 0 skipped; [ELAPSED]
+Suite result: FAILED. 0 passed; 6 failed; 0 skipped; [ELAPSED]
...
"#,
);
diff --git a/crates/forge/tests/cli/inline_config.rs b/crates/forge/tests/cli/inline_config.rs
index 04fb2369d83b0..64e06f4ab7134 100644
--- a/crates/forge/tests/cli/inline_config.rs
+++ b/crates/forge/tests/cli/inline_config.rs
@@ -399,7 +399,7 @@ Ran 2 test suites [ELAPSED]: 4 tests passed, 0 failed, 0 skipped (4 total tests)
forgetest_init!(config_inline_hardfork_same_network_family, |prj, cmd| {
prj.write_config(foundry_config::Config {
hardfork: Some("tempo:T2".parse::().unwrap()),
- ..foundry_config::Config::default()
+ ..foundry_test_utils::util::test_config_default()
});
prj.add_test(
"inline.sol",
diff --git a/crates/forge/tests/cli/install.rs b/crates/forge/tests/cli/install.rs
index 35b785cb111de..d75356aefdcfb 100644
--- a/crates/forge/tests/cli/install.rs
+++ b/crates/forge/tests/cli/install.rs
@@ -5,7 +5,7 @@ use foundry_cli::utils::{Git, Submodules};
use foundry_compilers::artifacts::Remapping;
use foundry_config::Config;
use foundry_test_utils::util::{
- ExtTester, FORGE_STD_REVISION, TestCommand, pretty_err, read_string,
+ ExtTester, FORGE_STD_REVISION, TestCommand, pretty_err, read_string, test_config_default,
};
use semver::Version;
use std::{
@@ -422,7 +422,7 @@ Installing forge-5980-test in [..] (url: https://github.com/evalir/forge-5980-te
.unwrap()
.into(),
],
- ..Default::default()
+ ..test_config_default()
};
prj.write_config(config);
diff --git a/crates/forge/tests/cli/precompiles.rs b/crates/forge/tests/cli/precompiles.rs
index 505a6f7b04800..7e43d851bf6ba 100644
--- a/crates/forge/tests/cli/precompiles.rs
+++ b/crates/forge/tests/cli/precompiles.rs
@@ -163,7 +163,7 @@ Traces:
│ │ └─ ← [Return] 0x0000000000000000000000000000000011a9a0372b8f332d5c30de9ad14e50372a73fa4c45d5f2fa5097f2d6fb93bcac592f2e1711ac43db0519870c7d0ea41500000000000000000000000000000000092c0f994164a0719f51c24ba3788de240ff926b55f58c445116e8bc6a47cd63392fd4e8e22bdf9feaa96ee773222133
│ ├─ [..] PRECOMPILES::bls12MapFp2ToG2(0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) [staticcall]
│ │ └─ ← [Return] 0x00000000000000000000000000000000018320896ec9eef9d5e619848dc29ce266f413d02dd31d9b9d44ec0c79cd61f18b075ddba6d7bd20b7ff27a4b324bfce000000000000000000000000000000000a67d12118b5a35bb02d2e86b3ebfa7e23410db93de39fb06d7025fa95e96ffa428a7a27c3ae4dd4b40bd251ac658892000000000000000000000000000000000260e03644d1a2c321256b3246bad2b895cad13890cbe6f85df55106a0d334604fb143c7a042d878006271865bc359410000000000000000000000000000000004c69777a43f0bda07679d5805e63f18cf4e0e7c6112ac7f70266d199b4f76ae27c6269a3ceebdae30806e9a76aadf5c
- │ ├─ [..] P256VERIFY::fulfillBasicOrder_efficient_6GL6yc() [staticcall]
+ │ ├─ [6900] 0x0000000000000000000000000000000000000100::fulfillBasicOrder_efficient_6GL6yc() [staticcall]
│ │ └─ ← [Return]
│ └─ ← [Return] 62 bytes of code
└─ ← [Stop]
diff --git a/crates/forge/tests/cli/script.rs b/crates/forge/tests/cli/script.rs
index 242a0ebb4267f..b2df86da36497 100644
--- a/crates/forge/tests/cli/script.rs
+++ b/crates/forge/tests/cli/script.rs
@@ -1986,7 +1986,7 @@ contract SimpleScript is Script {
])
.assert_success()
.stdout_eq(str![[r#"
-{"logs":[],"returns":{"success":{"internal_type":"bool","value":"true"}},"success":true,"raw_logs":[],"traces":[["Deployment",{"arena":[{"parent":null,"children":[],"idx":0,"trace":{"depth":0,"success":true,"caller":"0x1804c8ab1f12e6bbf3894d4083f33e07309d1f38","address":"0x5b73c5498c1e3b4dba84de0f1833c4a029d90519","maybe_precompile":false,"selfdestruct_address":null,"selfdestruct_refund_target":null,"selfdestruct_transferred_value":null,"kind":"CREATE","value":"0x0","data":"[..]","output":"[..]","gas_used":"{...}","gas_limit":"{...}","gas_refund_counter":0,"status":"Return","steps":[],"decoded":{"label":"SimpleScript","return_data":null,"call_data":null}},"logs":[],"ordering":[]}]}],["Execution",{"arena":[{"parent":null,"children":[1,2],"idx":0,"trace":{"depth":0,"success":true,"caller":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","address":"0x5b73c5498c1e3b4dba84de0f1833c4a029d90519","maybe_precompile":null,"selfdestruct_address":null,"selfdestruct_refund_target":null,"selfdestruct_transferred_value":null,"kind":"CALL","value":"0x0","data":"0xc0406226","output":"0x0000000000000000000000000000000000000000000000000000000000000001","gas_used":"{...}","gas_limit":1073720760,"gas_refund_counter":0,"status":"Return","steps":[],"decoded":{"label":"SimpleScript","return_data":"true","call_data":{"signature":"run()","args":[]}}},"logs":[],"ordering":[{"Call":0},{"Call":1}]},{"parent":0,"children":[],"idx":1,"trace":{"depth":1,"success":true,"caller":"0x5b73c5498c1e3b4dba84de0f1833c4a029d90519","address":"0x7109709ecfa91a80626ff3989d68f67f5b1dd12d","maybe_precompile":null,"selfdestruct_address":null,"selfdestruct_refund_target":null,"selfdestruct_transferred_value":null,"kind":"CALL","value":"0x0","data":"0x7fb5297f","output":"0x","gas_used":"{...}","gas_limit":1056940999,"gas_refund_counter":0,"status":"Return","steps":[],"decoded":{"label":"VM","return_data":null,"call_data":{"signature":"startBroadcast()","args":[]}}},"logs":[],"ordering":[]},{"parent":0,"children":[],"idx":2,"trace":{"depth":1,"success":true,"caller":"0x5b73c5498c1e3b4dba84de0f1833c4a029d90519","address":"0x0000000000000000000000000000000000000000","maybe_precompile":null,"selfdestruct_address":null,"selfdestruct_refund_target":null,"selfdestruct_transferred_value":null,"kind":"CALL","value":"0x0","data":"0x","output":"0x","gas_used":"{...}","gas_limit":1056940650,"gas_refund_counter":0,"status":"Stop","steps":[],"decoded":{"label":null,"return_data":null,"call_data":null}},"logs":[],"ordering":[]}]}]],"gas_used":"{...}","labeled_addresses":{},"returned":"0x0000000000000000000000000000000000000000000000000000000000000001","address":null}
+{"logs":[],"returns":{"success":{"internal_type":"bool","value":"true"}},"success":true,"raw_logs":[],"traces":[["Deployment",{"arena":[{"parent":null,"children":[],"idx":0,"trace":{"depth":0,"success":true,"caller":"0x1804c8ab1f12e6bbf3894d4083f33e07309d1f38","address":"0x5b73c5498c1e3b4dba84de0f1833c4a029d90519","maybe_precompile":false,"selfdestruct_address":null,"selfdestruct_refund_target":null,"selfdestruct_transferred_value":null,"kind":"CREATE","value":"0x0","data":"[..]","output":"[..]","gas_used":"{...}","gas_limit":"{...}","gas_refund_counter":0,"status":"Return","steps":[],"decoded":{"label":"SimpleScript","return_data":null,"call_data":null}},"logs":[],"ordering":[]}]}],["Execution",{"arena":[{"parent":null,"children":[1,2],"idx":0,"trace":{"depth":0,"success":true,"caller":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","address":"0x5b73c5498c1e3b4dba84de0f1833c4a029d90519","maybe_precompile":null,"selfdestruct_address":null,"selfdestruct_refund_target":null,"selfdestruct_transferred_value":null,"kind":"CALL","value":"0x0","data":"0xc0406226","output":"0x0000000000000000000000000000000000000000000000000000000000000001","gas_used":"{...}","gas_limit":1073720760,"gas_refund_counter":0,"status":"Return","steps":[],"decoded":{"label":"SimpleScript","return_data":"true","call_data":{"signature":"run()","args":[]}}},"logs":[],"ordering":[{"Call":0},{"Call":1}]},{"parent":0,"children":[],"idx":1,"trace":{"depth":1,"success":true,"caller":"0x5b73c5498c1e3b4dba84de0f1833c4a029d90519","address":"0x7109709ecfa91a80626ff3989d68f67f5b1dd12d","maybe_precompile":null,"selfdestruct_address":null,"selfdestruct_refund_target":null,"selfdestruct_transferred_value":null,"kind":"CALL","value":"0x0","data":"0x7fb5297f","output":"0x","gas_used":"{...}","gas_limit":1056940999,"gas_refund_counter":0,"status":"Return","steps":[],"decoded":{"label":"VM","return_data":null,"call_data":{"signature":"startBroadcast()","args":[]}}},"logs":[],"ordering":[]},{"parent":0,"children":[],"idx":2,"trace":{"depth":1,"success":true,"caller":"0x5b73c5498c1e3b4dba84de0f1833c4a029d90519","address":"0x0000000000000000000000000000000000000000","maybe_precompile":null,"selfdestruct_address":null,"selfdestruct_refund_target":null,"selfdestruct_transferred_value":null,"kind":"CALL","value":"0x0","data":"0x","output":"0x","gas_used":"{...}","gas_limit":1056940650,"gas_refund_counter":0,"status":"Stop","steps":[],"decoded":{"label":"","return_data":null,"call_data":null}},"logs":[],"ordering":[]}]}]],"gas_used":"{...}","labeled_addresses":{},"returned":"0x0000000000000000000000000000000000000000000000000000000000000001","address":null}
{"chain":31337,"estimated_gas_price":"{...}","estimated_total_gas_used":"{...}","estimated_amount_required":"{...}","token_symbol":"ETH"}
{"chain":"anvil-hardhat","status":"success","tx_hash":"0x4f78afe915fceb282c7625a68eb350bc0bf78acb59ad893e5c62b710a37f3156","contract_address":null,"block_number":1,"gas_used":"{...}","gas_price":"{...}"}
{"status":"success","transactions":"[..]/broadcast/Foo.sol/31337/run-latest.json","sensitive":"[..]/cache/Foo.sol/31337/run-latest.json"}
@@ -2809,17 +2809,17 @@ Traces:
│ └─ ← [Return] 481 bytes of code
├─ [0] VM::signAndAttachDelegation(0x5FbDB2315678afecb367f032d93F642f64180aa3, "")
│ └─ ← [Return] (0, 0xd4301eb9f82f747137a5f2c3dc3a5c2d253917cf99ecdc0d49f7bb85313c3159, 0x786d354f0bbd456f44116ddd3aa50475e989d72d8396005e5b3a12cede83fb68, 4, 0x5FbDB2315678afecb367f032d93F642f64180aa3)
- ├─ [..] 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266::increment()
+ ├─ [22418] ::increment()
│ └─ ← [Stop]
- ├─ [..] 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266::increment()
+ ├─ [518] ::increment()
│ └─ ← [Stop]
├─ [0] VM::signAndAttachDelegation(0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512, "")
│ └─ ← [Return] (0, 0xaba9128338f7ff036a0d2ecb96d4f4376389005cd565f87aba33b312570af962, 0x69acbe0831fb8ca95338bc4b908dcfebaf7b81b0f770a12c073ceb07b89fbdf3, 7, 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512)
- ├─ [..] 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266::setNumber(0)
+ ├─ [492] ::setNumber(0)
│ └─ ← [Stop]
├─ [0] VM::signAndAttachDelegation(0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0, "")
│ └─ ← [Return] (1, 0x3a3427b66e589338ce7ea06135650708f9152e93e257b4a5ec6eb86a3e09a2ce, 0x444651c354c89fd3312aafb05948e12c0a16220827a5e467705253ab4d8aa8d3, 9, 0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0)
- ├─ [..] 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266::setNumber(0)
+ ├─ [492] ::setNumber(0)
│ └─ ← [Stop]
├─ [0] VM::stopBroadcast()
│ └─ ← [Return]
@@ -2841,16 +2841,16 @@ Simulated On-chain Traces:
[..] → new Counter@0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0
└─ ← [Return] 481 bytes of code
- [..] 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266::increment()
+ [22418] ::increment()
└─ ← [Stop]
- [..] 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266::increment()
+ [5318] ::increment()
└─ ← [Stop]
- [..] 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266::setNumber(0)
+ [5392] ::setNumber(0)
└─ ← [Stop]
- [..] 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266::setNumber(0)
+ [2592] ::setNumber(0)
└─ ← [Stop]
@@ -3241,7 +3241,7 @@ contract CounterScript is Script {
error: the following required arguments were not provided:
--broadcast
-Usage: [..] script --broadcast --verify --rpc-url [ARGS]...
+Usage: [..] script --broadcast --verify --rpc-url [ARGS]...
For more information, try '--help'.
diff --git a/crates/forge/tests/cli/test_cmd/invariant/common.rs b/crates/forge/tests/cli/test_cmd/invariant/common.rs
index fefd95def0412..107b387bb0ec5 100644
--- a/crates/forge/tests/cli/test_cmd/invariant/common.rs
+++ b/crates/forge/tests/cli/test_cmd/invariant/common.rs
@@ -2670,7 +2670,7 @@ contract InvariantWarp is Test {
[FAIL: max time]
[Sequence] (original: 3, shrunk: 1)
vm.warp(block.timestamp + 656868);
- vm.prank(0x00000000000000000000000000000000000012d2);
+ vm.prank(0x00000000000000000000000000000000000012d1);
Warp(0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f).increment();
invariant_warp() (runs: 0, calls: 0, reverts: 2)
...
diff --git a/crates/forge/tests/cli/test_cmd/invariant/mod.rs b/crates/forge/tests/cli/test_cmd/invariant/mod.rs
index 723b5bd789c8b..bbe65f2f2f2fa 100644
--- a/crates/forge/tests/cli/test_cmd/invariant/mod.rs
+++ b/crates/forge/tests/cli/test_cmd/invariant/mod.rs
@@ -422,9 +422,9 @@ Failing tests:
Encountered 1 failing test in test/InvariantSequenceLenTest.t.sol:InvariantSequenceLenTest
[FAIL: invariant increment failure]
[Sequence] (original: 3, shrunk: 3)
- sender=0x00000000000000000000000000000000000014aD addr=[src/Counter.sol:Counter]0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f calldata=increment() args=[]
+ sender=0x0000000000000000000000000000000000001490 addr=[src/Counter.sol:Counter]0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f calldata=increment() args=[]
sender=0x8ef7F804bAd9183981A366EA618d9D47D3124649 addr=[src/Counter.sol:Counter]0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f calldata=increment() args=[]
- sender=0x00000000000000000000000000000000000016Ac addr=[src/Counter.sol:Counter]0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f calldata=setNumber(uint256) args=[284406551521730736391345481857560031052359183671404042152984097777 [2.844e65]]
+ sender=0x00000000000000000000000000000000000016C5 addr=[src/Counter.sol:Counter]0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f calldata=setNumber(uint256) args=[284406551521730736391345481857560031052359183671404042152984097777 [2.844e65]]
invariant_increment() (runs: 0, calls: 0, reverts: 0)
Encountered a total of 1 failing tests, 0 tests succeeded
@@ -448,11 +448,11 @@ Failing tests:
Encountered 1 failing test in test/InvariantSequenceLenTest.t.sol:InvariantSequenceLenTest
[FAIL: invariant increment failure]
[Sequence] (original: 3, shrunk: 3)
- vm.prank(0x00000000000000000000000000000000000014aD);
+ vm.prank(0x0000000000000000000000000000000000001490);
Counter(0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f).increment();
vm.prank(0x8ef7F804bAd9183981A366EA618d9D47D3124649);
Counter(0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f).increment();
- vm.prank(0x00000000000000000000000000000000000016Ac);
+ vm.prank(0x00000000000000000000000000000000000016C5);
Counter(0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f).setNumber(284406551521730736391345481857560031052359183671404042152984097777);
invariant_increment() (runs: 0, calls: 0, reverts: 0)
@@ -476,9 +476,9 @@ Failing tests:
Encountered 1 failing test in test/InvariantSequenceLenTest.t.sol:InvariantSequenceLenTest
[FAIL: invariant increment failure]
[Sequence] (original: 3, shrunk: 3)
- sender=0x00000000000000000000000000000000000014aD addr=[src/Counter.sol:Counter]0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f calldata=increment() args=[]
+ sender=0x0000000000000000000000000000000000001490 addr=[src/Counter.sol:Counter]0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f calldata=increment() args=[]
sender=0x8ef7F804bAd9183981A366EA618d9D47D3124649 addr=[src/Counter.sol:Counter]0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f calldata=increment() args=[]
- sender=0x00000000000000000000000000000000000016Ac addr=[src/Counter.sol:Counter]0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f calldata=setNumber(uint256) args=[284406551521730736391345481857560031052359183671404042152984097777 [2.844e65]]
+ sender=0x00000000000000000000000000000000000016C5 addr=[src/Counter.sol:Counter]0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f calldata=setNumber(uint256) args=[284406551521730736391345481857560031052359183671404042152984097777 [2.844e65]]
invariant_increment() (runs: 1, calls: 1, reverts: 1)
Encountered a total of 1 failing tests, 0 tests succeeded
diff --git a/crates/forge/tests/cli/test_cmd/mod.rs b/crates/forge/tests/cli/test_cmd/mod.rs
index 14f49863815cd..db6c455e425de 100644
--- a/crates/forge/tests/cli/test_cmd/mod.rs
+++ b/crates/forge/tests/cli/test_cmd/mod.rs
@@ -6,7 +6,7 @@ use foundry_test_utils::{
TestCommand,
rpc::{self, rpc_endpoints},
str,
- util::{OTHER_SOLC_VERSION, OutputExt, SOLC_VERSION},
+ util::{OTHER_SOLC_VERSION, OutputExt, SOLC_VERSION, get_vyper},
};
use similar_asserts::assert_eq;
use std::{io::Write, path::PathBuf, str::FromStr};
@@ -35,12 +35,25 @@ fn setup_testdata_cmd(cmd: &mut TestCommand) {
}
}
drop(dotenv);
+
+ // `testdata` includes Vyper fixtures; keep this test hermetic if PATH lacks a working vyper.
+ let vyper = get_vyper();
+ if let Some(vyper_dir) = vyper.path.parent().filter(|path| !path.as_os_str().is_empty()) {
+ let path = std::env::var_os("PATH").unwrap_or_default();
+ let joined_path = std::env::join_paths(
+ std::iter::once(vyper_dir.to_path_buf()).chain(std::env::split_paths(&path)),
+ )
+ .unwrap();
+ cmd.env("PATH", joined_path);
+ }
}
/// Contracts excluded from the main `testdata` run because they depend on flaky external RPCs.
/// These are run separately by the `flaky_testdata` test below.
/// Format: pipe-separated regex alternation, e.g. `"Foo|Bar|Baz"`.
-const FLAKY_TESTDATA_CONTRACTS: &str = "Issue4640Test";
+const FLAKY_TESTDATA_CONTRACTS: &str = "Issue4640Test|Issue14212Test";
+/// Contracts that are not part of the default Foundry-compatible `testdata` run.
+const DEFAULT_TESTDATA_EXCLUDED_CONTRACTS: &str = "Issue4640Test|Issue14212Test|CredibleTest";
// Run `forge test` on `/testdata`.
forgetest!(testdata, |_prj, cmd| {
@@ -48,9 +61,9 @@ forgetest!(testdata, |_prj, cmd| {
let mut args = vec!["test"];
let nmc_isolate = format!(
- "--nmc=(LastCallGasDefaultTest|MockFunctionTest|WithSeed|StateDiff|GetStorageSlotsTest|RecordAccount|{FLAKY_TESTDATA_CONTRACTS})",
+ "--nmc=(LastCallGasDefaultTest|MockFunctionTest|WithSeed|StateDiff|GetStorageSlotsTest|RecordAccount|{DEFAULT_TESTDATA_EXCLUDED_CONTRACTS})",
);
- let nmc_default = format!("--nmc=({FLAKY_TESTDATA_CONTRACTS})");
+ let nmc_default = format!("--nmc=({DEFAULT_TESTDATA_EXCLUDED_CONTRACTS})");
if cfg!(feature = "isolate-by-default") {
args.push(&nmc_isolate);
} else {
diff --git a/crates/forge/tests/cli/test_cmd/repros.rs b/crates/forge/tests/cli/test_cmd/repros.rs
index 32bfe6a98a9fd..3803385b496ab 100644
--- a/crates/forge/tests/cli/test_cmd/repros.rs
+++ b/crates/forge/tests/cli/test_cmd/repros.rs
@@ -783,6 +783,66 @@ ParserError: Source "Missing.sol" not found: File not found. Searched the follow
"#]]);
});
+// https://github.com/foundry-rs/foundry/issues/10463
+forgetest_init!(issue_10463, |prj, cmd| {
+ prj.add_test(
+ "Issue10463.t.sol",
+ r#"
+import {Test} from "forge-std/Test.sol";
+
+contract Issue10463Test is Test {
+ event Foo();
+
+ error CustomError(uint256 code);
+
+ function revertingBefore(bool shouldRevert) external {
+ if (shouldRevert) revert();
+ emit Foo();
+ }
+
+ function revertingWithReason() external pure {
+ revert("revert reason");
+ }
+
+ function revertingWithCustomError() external pure {
+ revert CustomError(42);
+ }
+
+ function testExpectEmitPreservesRevertWhenCallRevertsBeforeLog() public {
+ vm.expectEmit();
+ emit Foo();
+
+ this.revertingBefore(true);
+ }
+
+ function testExpectEmitPreservesRevertReason() public {
+ vm.expectEmit();
+ emit Foo();
+
+ this.revertingWithReason();
+ }
+
+ function testExpectEmitPreservesCustomError() public {
+ vm.expectEmit();
+ emit Foo();
+
+ this.revertingWithCustomError();
+ }
+}
+"#,
+ );
+
+ cmd.arg("test").assert_failure().stdout_eq(str![[r#"
+...
+Ran 3 tests for test/Issue10463.t.sol:Issue10463Test
+[FAIL: CustomError(42)] testExpectEmitPreservesCustomError() ([GAS])
+[FAIL: revert reason] testExpectEmitPreservesRevertReason() ([GAS])
+[FAIL: EvmError: Revert] testExpectEmitPreservesRevertWhenCallRevertsBeforeLog() ([GAS])
+Suite result: FAILED. 0 passed; 3 failed; 0 skipped; [ELAPSED]
+...
+"#]]);
+});
+
// https://github.com/foundry-rs/foundry/issues/12803
// Test gas underflow prevention on Cancun (no EIP-7702 gas floor)
forgetest_init!(issue_12803_cancun, |prj, cmd| {
diff --git a/crates/forge/tests/fixtures/ExpectRevertFailures.t.sol b/crates/forge/tests/fixtures/ExpectRevertFailures.t.sol
index 7e482c6673155..838183a1b0b5e 100644
--- a/crates/forge/tests/fixtures/ExpectRevertFailures.t.sol
+++ b/crates/forge/tests/fixtures/ExpectRevertFailures.t.sol
@@ -233,6 +233,63 @@ contract ExpectRevertWithReverterFailureTest is DSTest {
aContract.doNotRevert();
aContract.callAndRevert();
}
+
+ //
+ // Regression: must fail because 0xdead is not the actual reverter when a
+ // top-level CREATE constructor reverts directly.
+ function testShouldFailExpectRevertWrongReverterTopLevelCreate() public {
+ vm.expectRevert(address(0xdead));
+ new DContract();
+ }
+
+ //
+ // Regression: must fail because the reverter address argument is enforced
+ // even when an exact-bytes pattern is also supplied for a top-level CREATE.
+ function testShouldFailExpectRevertWithBytesWrongReverterTopLevelCreate() public {
+ vm.expectRevert(abi.encodePacked("Reverted by DContract"), address(0xdead));
+ new DContract();
+ }
+
+ //
+ // Regression: must fail because the reverter address argument is enforced
+ // for `expectPartialRevert(bytes4, address)` against a top-level CREATE.
+ function testShouldFailExpectPartialRevertWrongReverterTopLevelCreate() public {
+ vm.expectPartialRevert(bytes4(keccak256("Error(string)")), address(0xdead));
+ new DContract();
+ }
+
+ //
+ // Regression: must fail when the innermost reverting frame is a nested
+ // CREATE and the reverter address argument does not match the would-be
+ // deployed address of the failed deployment.
+ function testShouldFailExpectRevertWrongReverterNestedCreate() public {
+ vm.expectRevert(address(0xdead));
+ new NestedDContractCreator();
+ }
+
+ //
+ // Regression: documents the intended semantics for nested CREATEs — the
+ // matched reverter is the *outer* would-be-deployed address (the contract
+ // whose deployment failed), NOT the innermost reverting CREATE's address.
+ // Supplying the inner address must fail.
+ function testShouldFailExpectRevertNestedCreateInnerAddress() public {
+ // Outer = NestedDContractCreator at this contract's next nonce.
+ // Inner = DContract created from inside the outer constructor (deployer
+ // is the outer, nonce 1).
+ address outer =
+ vm.computeCreateAddress(address(this), vm.getNonce(address(this)));
+ address inner = vm.computeCreateAddress(outer, 1);
+ vm.expectRevert(inner);
+ new NestedDContractCreator();
+ }
+}
+
+// Used by `testShouldFailExpectRevertWrongReverterNestedCreate`: a contract whose
+// constructor directly creates another contract that reverts.
+contract NestedDContractCreator {
+ constructor() {
+ new DContract();
+ }
}
contract ExpectRevertCountFailureTest is DSTest {
diff --git a/crates/script/src/execute.rs b/crates/script/src/execute.rs
index 627bcfffd3802..8ad50bb1709f1 100644
--- a/crates/script/src/execute.rs
+++ b/crates/script/src/execute.rs
@@ -450,6 +450,8 @@ impl PreSimulationState {
let should_include = match kind {
TraceKind::Setup => verbosity >= 5,
TraceKind::Execution => verbosity > 3,
+ TraceKind::AssertionTrigger => verbosity > 3,
+ TraceKind::Assertion => verbosity > 3,
_ => false,
} || !result.success;
diff --git a/crates/script/src/verify.rs b/crates/script/src/verify.rs
index ef10a1ce94082..fe1e9345fa23c 100644
--- a/crates/script/src/verify.rs
+++ b/crates/script/src/verify.rs
@@ -129,7 +129,7 @@ impl VerifyBundle {
path: Some(artifact.source.to_string_lossy().to_string()),
name: artifact
.name
- .strip_suffix(&format!(".{}", &artifact.profile))
+ .strip_suffix(&format!(".{}", artifact.profile))
.unwrap_or_else(|| &artifact.name)
.to_string(),
};
diff --git a/crates/test-utils/src/prj.rs b/crates/test-utils/src/prj.rs
index 96fa065317bec..462c5625f8975 100644
--- a/crates/test-utils/src/prj.rs
+++ b/crates/test-utils/src/prj.rs
@@ -22,7 +22,9 @@ use std::{
},
};
-use crate::util::{SOLC_VERSION, copy_dir_filtered, pretty_err};
+use crate::util::{
+ SOLC_VERSION, copy_dir_filtered, pretty_err, test_config_default, test_config_for_style,
+};
static CURRENT_DIR_LOCK: LazyLock> = LazyLock::new(|| Mutex::new(()));
@@ -177,8 +179,17 @@ impl TestProject {
/// to a logical grouping of tests.
pub fn new(name: &str, style: PathStyle) -> Self {
let id = NEXT_ID.fetch_add(1, Ordering::SeqCst);
- let project = pretty_err(name, TempProject::with_style(&format!("{name}-{id}"), style));
- Self::with_project(project)
+ let project =
+ pretty_err(name, TempProject::with_style(&format!("{name}-{id}"), style.clone()));
+ let this = Self::with_project(project);
+ // Write a foundry.toml so `forge` sees the same paths the TempProject scaffolds.
+ // Without this, Phylax's `assertions/*` defaults (Config::default()) take effect and
+ // `forge build|clean|...` look in directories the test never touches.
+ let config_path = this.config();
+ if !config_path.exists() {
+ this.write_config(test_config_for_style(style));
+ }
+ this
}
pub fn with_project(project: TempProject) -> Self {
@@ -245,7 +256,7 @@ impl TestProject {
.exists()
.then_some(())
.and_then(|()| Config::load_with_root(self.root()).ok())
- .unwrap_or_default();
+ .unwrap_or_else(test_config_default);
config.remappings.clear();
f(&mut config);
self.write_config(config);
diff --git a/crates/test-utils/src/util.rs b/crates/test-utils/src/util.rs
index d22e12736d832..8d245ba4e5d50 100644
--- a/crates/test-utils/src/util.rs
+++ b/crates/test-utils/src/util.rs
@@ -30,13 +30,48 @@ static TEMPLATE_LOCK: LazyLock =
LazyLock::new(|| env::temp_dir().join("foundry-forge-test-template.lock"));
/// The default Solc version used when compiling tests.
-pub const SOLC_VERSION: &str = "0.8.33";
+pub const SOLC_VERSION: &str = "0.8.35";
/// Another Solc version used when compiling tests.
///
/// Necessary to avoid downloading multiple versions.
pub const OTHER_SOLC_VERSION: &str = "0.8.26";
+/// Returns a [`Config`] suitable for tests: starts from [`Config::default()`] but overrides the
+/// Phylax `assertions/*` path defaults with upstream `src/`, `test/`, `script/`, ... matching
+/// what `forge init` and `foundry-compilers` scaffold on disk.
+pub fn test_config_default() -> Config {
+ test_config_for_style(foundry_compilers::PathStyle::Dapptools)
+}
+
+/// Like [`test_config_default`], but produces a config whose `src`/`out`/`libs` match the given
+/// `PathStyle` so that `forge` commands resolve the same locations as the `TempProject`.
+pub fn test_config_for_style(style: foundry_compilers::PathStyle) -> Config {
+ let (src, out, libs) = match style {
+ foundry_compilers::PathStyle::HardHat => {
+ ("contracts", "artifacts", vec!["node_modules".into()])
+ }
+ foundry_compilers::PathStyle::Dapptools => ("src", "out", vec!["lib".into()]),
+ };
+ Config {
+ src: src.into(),
+ test: "test".into(),
+ script: "script".into(),
+ out: out.into(),
+ fs_permissions: foundry_config::FsPermissions::new([
+ foundry_config::fs_permissions::PathPermission::read(out),
+ ]),
+ libs,
+ cache_path: "cache".into(),
+ broadcast: "broadcast".into(),
+ snapshots: "snapshots".into(),
+ test_failures_file: "cache/test-failures".into(),
+ fuzz: foundry_config::FuzzConfig::new("cache/fuzz".into()),
+ invariant: foundry_config::InvariantConfig::new("cache/invariant".into()),
+ ..Default::default()
+ }
+}
+
/// Initializes a project with `forge init` at the given path from a template directory.
///
/// This should be called after an empty project is created like in
@@ -84,7 +119,7 @@ pub fn initialize(target: &Path) {
cmd.args(["init", "--force", "--empty"]).assert_success();
prj.write_config(Config {
solc: Some(foundry_config::SolcReq::Version(SOLC_VERSION.parse().unwrap())),
- ..Default::default()
+ ..test_config_default()
});
// Checkout forge-std.
diff --git a/deny.toml b/deny.toml
index 1a0e1e8e53005..d33e9002050ca 100644
--- a/deny.toml
+++ b/deny.toml
@@ -7,10 +7,30 @@ yanked = "warn"
ignore = [
# https://rustsec.org/advisories/RUSTSEC-2024-0436 paste! is unmaintained
"RUSTSEC-2024-0436",
- # https://rustsec.org/advisories/RUSTSEC-2025-0141 bincode is unmaintained
+ # https://rustsec.org/advisories/RUSTSEC-2025-0141 bincode is unmaintained, need to transition all deps to wincode first
"RUSTSEC-2025-0141",
- # https://rustsec.org/advisories/RUSTSEC-2026-0097 rand is unsound with a custom logger
+ # https://rustsec.org/advisories/RUSTSEC-2023-0018 remove_dir_all vulnerability
+ # Transitive dep: sled -> assertion-executor. Not fixable until sled updates.
+ "RUSTSEC-2023-0018",
+ # https://rustsec.org/advisories/RUSTSEC-2025-0137 `reciprocal_mg10` OOB, unused
+ "RUSTSEC-2025-0137",
+ # https://rustsec.org/advisories/RUSTSEC-2018-0017 tempdir deprecated
+ # Transitive dep: sled -> assertion-executor. Not fixable until sled updates.
+ "RUSTSEC-2018-0017",
+ # https://rustsec.org/advisories/RUSTSEC-2026-0049 rustls-webpki CRL bypass — awaiting upstream update
+ "RUSTSEC-2026-0049",
+ # https://rustsec.org/advisories/RUSTSEC-2026-0097 rand unsoundness with custom logger — awaiting upstream update
"RUSTSEC-2026-0097",
+ # https://rustsec.org/advisories/RUSTSEC-2026-0012 keccak ARMv8 asm — off-by-default `asm` feature, not enabled
+ "RUSTSEC-2026-0012",
+ # https://rustsec.org/advisories/RUSTSEC-2026-0098 rustls-webpki URI name constraint — awaiting upstream update
+ "RUSTSEC-2026-0098",
+ # https://rustsec.org/advisories/RUSTSEC-2026-0099 rustls-webpki wildcard name constraint — awaiting upstream update
+ "RUSTSEC-2026-0099",
+ # https://rustsec.org/advisories/RUSTSEC-2026-0103 thin-vec IntoIter UAF — awaiting upstream update
+ "RUSTSEC-2026-0103",
+ # https://rustsec.org/advisories/RUSTSEC-2026-0104 rustls-webpki CRL panic — awaiting upstream update
+ "RUSTSEC-2026-0104",
]
# This section is considered when running `cargo deny check bans`.
@@ -23,7 +43,11 @@ multiple-versions = "allow"
wildcards = "allow"
highlight = "all"
# List of crates to deny
-deny = [{ name = "openssl" }]
+deny = [
+ # openssl is banned but allowed when wrapped by native-tls
+ # (transitive dep from assertion-executor -> alloy -> reqwest -> native-tls)
+ { name = "openssl", wrappers = ["native-tls"] },
+]
# Certain crates/versions that will be skipped when doing duplicate detection.
skip = []
# Similarly to `skip` allows you to skip certain crates during duplicate
@@ -65,12 +89,22 @@ exceptions = [
# CC0 is a permissive license but somewhat unclear status for source code
# so we prefer to not have dependencies using it
# https://tldrlegal.com/license/creative-commons-cc0-1.0-universal
+ { allow = ["CC0-1.0"], name = "tiny-keccak" },
{ allow = ["CC0-1.0"], name = "trezor-client" },
{ allow = ["CC0-1.0"], name = "notify" },
{ allow = ["CC0-1.0"], name = "dunce" },
{ allow = ["CC0-1.0"], name = "aurora-engine-modexp" },
- # Rendered mdBook HTML source code includes attribution as required by CC-BY-4.0
- { allow = ["CC-BY-4.0", "MIT"], name = "font-awesome-as-a-crate" },
+ # font-awesome icons embedded as a crate; CC-BY-4.0 applies to the icon set.
+ { allow = ["CC-BY-4.0"], name = "font-awesome-as-a-crate" },
+]
+
+# Crates from credible-sdk don't have license fields
+# These are internal/trusted dependencies - ignore unlicensed crates from these sources
+[licenses.private]
+ignore = true
+registries = []
+ignore-sources = [
+ "https://github.com/phylaxsystems/credible-sdk",
]
# copyleft = "deny"
@@ -98,20 +132,19 @@ unknown-registry = "warn"
# in the allow list is encountered
unknown-git = "deny"
allow-git = [
- "https://github.com/alloy-rs/alloy",
- "https://github.com/alloy-rs/evm",
- "https://github.com/foundry-rs/foundry-core",
- "https://github.com/paradigmxyz/revm-inspectors",
"https://github.com/paradigmxyz/solar",
- "https://github.com/bluealloy/revm",
# Only for tests.
"https://github.com/rust-cli/rexpect",
# Tempo
"https://github.com/tempoxyz/tempo",
+ # Tempo transitive: mpp-rs
"https://github.com/tempoxyz/mpp-rs",
# Transitive dependency of Tempo
"https://github.com/paradigmxyz/reth",
+ # reth-core split crates pinned for 1.7.1-compatible API
"https://github.com/paradigmxyz/reth-core",
- # Temporary: upstream OP crates until release is published.
+ # OP fork: op-revm / alloy-op-evm / alloy-op-hardforks / op-alloy-* aligned with phoundry 1.7.1
"https://github.com/ethereum-optimism/optimism",
+ # Assertion executor and its dependencies
+ "https://github.com/phylaxsystems/credible-sdk",
]
diff --git a/foundryup/README.md b/foundryup/README.md
index 29e91378929cc..2cf61f8725227 100644
--- a/foundryup/README.md
+++ b/foundryup/README.md
@@ -30,10 +30,10 @@ To install the latest **nightly** version:
foundryup --install nightly
```
-To install a specific version (e.g. `v1.6.0`):
+To install a specific version (e.g. `v1.7.0`):
```sh
-foundryup --install v1.6.0
+foundryup --install v1.7.0
```
To **list** all **versions** installed:
diff --git a/rust-toolchain.toml b/rust-toolchain.toml
new file mode 100644
index 0000000000000..14eb32bef3a5b
--- /dev/null
+++ b/rust-toolchain.toml
@@ -0,0 +1,3 @@
+[toolchain]
+channel = "nightly"
+components = ["rustfmt", "clippy"]
\ No newline at end of file
diff --git a/testdata/cheats/Vm.sol b/testdata/cheats/Vm.sol
new file mode 100644
index 0000000000000..63cf8a539f15e
--- /dev/null
+++ b/testdata/cheats/Vm.sol
@@ -0,0 +1,6 @@
+// SPDX-License-Identifier: MIT OR Apache-2.0
+pragma solidity >=0.6.2 <0.9.0;
+
+import {Vm as UtilsVm} from "../utils/Vm.sol";
+
+interface Vm is UtilsVm {}
diff --git a/testdata/default/cheats/Credible.t.sol b/testdata/default/cheats/Credible.t.sol
new file mode 100644
index 0000000000000..8385651cda41b
--- /dev/null
+++ b/testdata/default/cheats/Credible.t.sol
@@ -0,0 +1,64 @@
+// SPDX-License-Identifier: MIT OR Apache-2.0
+pragma solidity ^0.8.18;
+
+import "ds-test/test.sol";
+import "cheats/Vm.sol";
+import {Assertion} from "credible-std/Assertion.sol";
+
+contract MockAssertion is Assertion {
+ MockContract mockContract;
+
+ constructor(address mockContract_) {
+ mockContract = MockContract(mockContract_);
+ }
+
+ function fnSelectors() external pure override returns (bytes4[] memory selectors) {
+ selectors = new bytes4[](2);
+ selectors[0] = this.assertIsOne.selector;
+ selectors[1] = this.assertIsTwo.selector;
+ }
+
+ function assertIsOne() external view returns (bool) {
+ return mockContract.value() == 1;
+ }
+
+ function assertIsTwo() external view returns (bool) {
+ return mockContract.value() == 2;
+ }
+}
+
+contract MockContract {
+ uint256 public value = 1;
+
+ function increment() public {
+ value++;
+ }
+}
+
+contract CredibleTest is DSTest {
+ Vm constant vm = Vm(HEVM_ADDRESS);
+
+ address assertionAdopter;
+
+ address constant caller = address(0xdead);
+
+ function setUp() public {
+ assertionAdopter = address(new MockContract());
+ vm.deal(caller, 1 ether);
+ }
+
+ function testAssertionPass() public {
+ emit log_address(assertionAdopter);
+
+ bytes memory assertion = abi.encodePacked(type(MockAssertion).creationCode, abi.encode(assertionAdopter));
+
+ vm.assertion(assertionAdopter, assertion, MockAssertion.assertIsOne.selector);
+ assertTrue(MockContract(assertionAdopter).value() == 1);
+
+ MockContract(assertionAdopter).increment();
+ assertTrue(MockContract(assertionAdopter).value() == 2);
+
+ vm.assertion(assertionAdopter, assertion, MockAssertion.assertIsTwo.selector);
+ assertTrue(MockContract(assertionAdopter).value() == 2);
+ }
+}
diff --git a/testdata/default/cheats/ExpectRevert.t.sol b/testdata/default/cheats/ExpectRevert.t.sol
index 839d97962aa94..ae0c8ed844f5d 100644
--- a/testdata/default/cheats/ExpectRevert.t.sol
+++ b/testdata/default/cheats/ExpectRevert.t.sol
@@ -305,6 +305,91 @@ contract ExpectRevertWithReverterTest is Test {
vm.expectRevert(address(cContract));
aContract.createDContractThroughCContract();
}
+
+ //
+ // Regression: when the next operation is a top-level CREATE whose constructor
+ // reverts directly, the reverter address argument must be enforced (it used to
+ // be silently ignored). The matched reverter is the would-be-deployed address.
+ function testExpectRevertsWithReverterTopLevelCreate() public {
+ address expected = vm.computeCreateAddress(address(this), vm.getNonce(address(this)));
+ vm.expectRevert(expected);
+ new DContract();
+
+ expected = vm.computeCreateAddress(address(this), vm.getNonce(address(this)));
+ vm.expectRevert(abi.encodePacked("Reverted by DContract"), expected);
+ new DContract();
+ }
+
+ //
+ // Regression: when the next operation is a top-level CREATE whose constructor
+ // synchronously creates another contract that reverts (i.e. innermost frame is
+ // a CREATE), the matched reverter is the outer would-be-deployed address (the
+ // contract whose deployment failed).
+ function testExpectRevertsWithReverterNestedCreate() public {
+ address expected = vm.computeCreateAddress(address(this), vm.getNonce(address(this)));
+ vm.expectRevert(expected);
+ new NestedDContractCreator();
+ }
+
+ //
+ // Regression: `expectPartialRevert(bytes4, address)` overload must enforce
+ // the reverter address argument when matching a top-level CREATE revert.
+ function testExpectPartialRevertWithReverterTopLevelCreate() public {
+ address expected = vm.computeCreateAddress(address(this), vm.getNonce(address(this)));
+ // `Reverted by DContract` triggers Solidity's `Error(string)` selector.
+ vm.expectPartialRevert(bytes4(keccak256("Error(string)")), expected);
+ new DContract();
+ }
+
+ //
+ // Regression: `expectRevert(bytes4, address)` (exact 4-byte selector + reverter)
+ // overload must enforce the reverter address argument for a top-level CREATE.
+ function testExpectRevertWithBytes4SelectorAndReverterTopLevelCreate() public {
+ address expected = vm.computeCreateAddress(address(this), vm.getNonce(address(this)));
+ vm.expectRevert(DCustomErrorContract.CustomError.selector, expected);
+ new DCustomErrorContract();
+ }
+
+ //
+ // Regression: `expectRevert(address, uint64)` count-bearing overload must
+ // exercise the `count > 1` branch in `create_end`. Use CREATE2 with the same
+ // salt so both deploys would resolve to the same would-be address (each
+ // constructor reverts so no contract is ever actually placed there).
+ function testExpectRevertsWithReverterCountTopLevelCreate2() public {
+ bytes32 salt = bytes32(uint256(0x42));
+ address expected = vm.computeCreate2Address(salt, keccak256(type(DContract).creationCode), address(this));
+ vm.expectRevert(expected, 2);
+ new DContract{salt: salt}();
+ new DContract{salt: salt}();
+ }
+
+ //
+ // Regression: CREATE2 deploys must also enforce the reverter address argument.
+ function testExpectRevertsWithReverterTopLevelCreate2() public {
+ bytes32 salt = bytes32(uint256(0xC0FFEE));
+ address expected = vm.computeCreate2Address(salt, keccak256(type(DContract).creationCode), address(this));
+ vm.expectRevert(expected);
+ new DContract{salt: salt}();
+ }
+}
+
+// Used by `testExpectRevertsWithReverterNestedCreate`: a contract whose constructor
+// directly creates another contract that reverts.
+contract NestedDContractCreator {
+ constructor() {
+ new DContract();
+ }
+}
+
+// Used by `testExpectRevertWithBytes4SelectorAndReverterTopLevelCreate`: constructor
+// reverts with a parameter-less custom error so the full revert data is exactly the
+// 4-byte selector.
+contract DCustomErrorContract {
+ error CustomError();
+
+ constructor() {
+ revert CustomError();
+ }
}
contract ExpectRevertCount is Test {
diff --git a/testdata/default/cheats/Fork2.t.sol b/testdata/default/cheats/Fork2.t.sol
index 0941e508483fd..d83c0480b7e72 100644
--- a/testdata/default/cheats/Fork2.t.sol
+++ b/testdata/default/cheats/Fork2.t.sol
@@ -325,6 +325,7 @@ contract ForkTest is Test {
struct LegacyTransactionResult {
bytes32 blockHash;
bytes blockNumber;
+ bytes blockTimestamp;
bytes chainId;
address from;
bytes gas;
diff --git a/testdata/default/cheats/GetFoundryVersion.t.sol b/testdata/default/cheats/GetFoundryVersion.t.sol
index 6139b8b6b6a5e..f01b7cdd7d213 100644
--- a/testdata/default/cheats/GetFoundryVersion.t.sol
+++ b/testdata/default/cheats/GetFoundryVersion.t.sol
@@ -84,4 +84,55 @@ contract GetFoundryVersionTest is Test {
// Should return true for past versions
assertTrue(vm.foundryVersionAtLeast("0.2.0"));
}
+
+ /// Returns the `MAJOR.MINOR.PATCH` prefix of `vm.getFoundryVersion()`,
+ /// stripping any pre-release suffix (`-nightly`, `-dev`, …) and the
+ /// `+..` build metadata.
+ function _semverPrefix() internal view returns (string memory) {
+ string[] memory plusSplit = vm.split(vm.getFoundryVersion(), "+");
+ require(plusSplit.length == 2, "Invalid version format: Missing '+' separator");
+ string[] memory dashSplit = vm.split(plusSplit[0], "-");
+ return dashSplit[0];
+ }
+
+ function testGetFoundryVersionMajorMinorPatchIsParseable() public view {
+ // The MAJOR.MINOR.PATCH prefix must always be three numeric components,
+ // regardless of build kind (tagged release / nightly / dev).
+ string[] memory parts = vm.split(_semverPrefix(), ".");
+ require(parts.length == 3, "Invalid semver prefix: expected MAJOR.MINOR.PATCH");
+ // Each component must parse as a uint (this reverts on garbage).
+ vm.parseUint(parts[0]);
+ vm.parseUint(parts[1]);
+ vm.parseUint(parts[2]);
+ }
+
+ function testGetFoundryVersionBuildProfile() public view {
+ // The build profile must be present and non-empty (e.g. "debug", "release", "dist", …).
+ string[] memory plusSplit = vm.split(vm.getFoundryVersion(), "+");
+ string[] memory metadataComponents = vm.split(plusSplit[1], ".");
+ require(bytes(metadataComponents[2]).length > 0, "Build profile is empty");
+ }
+
+ function testFoundryVersionCmpAndAtLeastAreConsistent() public {
+ // `foundryVersionAtLeast(v)` must equal `foundryVersionCmp(v) >= 0` for any input.
+ string[3] memory probes = ["0.0.1", _semverPrefix(), "99.0.0"];
+ for (uint256 i = 0; i < probes.length; i++) {
+ assertEq(vm.foundryVersionAtLeast(probes[i]), vm.foundryVersionCmp(probes[i]) >= 0);
+ }
+ }
+
+ function testFoundryVersionCmpRejectsPreRelease() public {
+ vm._expectCheatcodeRevert();
+ vm.foundryVersionCmp("1.0.0-nightly");
+ }
+
+ function testFoundryVersionCmpRejectsBuildMetadata() public {
+ vm._expectCheatcodeRevert();
+ vm.foundryVersionCmp("1.0.0+abc1234567.1700000000.release");
+ }
+
+ function testFoundryVersionCmpRejectsInvalidVersion() public {
+ vm._expectCheatcodeRevert();
+ vm.foundryVersionCmp("not-a-version");
+ }
}
diff --git a/testdata/default/cheats/MockCall.t.sol b/testdata/default/cheats/MockCall.t.sol
index e2ac74d6f70fa..d8019ab4f6ee8 100644
--- a/testdata/default/cheats/MockCall.t.sol
+++ b/testdata/default/cheats/MockCall.t.sol
@@ -158,6 +158,35 @@ contract MockCallTest is Test {
assertEq(mock.pay{value: 50}(1), 100);
}
+ function testMockCallWithValueTransfersBalance() public {
+ Mock mock = new Mock();
+ uint256 value = 10;
+ vm.deal(address(this), value);
+
+ vm.mockCall(address(mock), value, abi.encodeWithSelector(mock.pay.selector), abi.encode(10));
+
+ assertEq(address(mock).balance, 0);
+ assertEq(mock.pay{value: value}(1), 10);
+ assertEq(address(mock).balance, value);
+ assertEq(address(this).balance, 0);
+ }
+
+ function testMockCallWithValueTransfersPrankedSenderBalance() public {
+ Mock mock = new Mock();
+ address sender = address(0xBEEF);
+ uint256 value = 10;
+ vm.deal(address(this), 0);
+ vm.deal(sender, value);
+
+ vm.mockCall(address(mock), value, abi.encodeWithSelector(mock.pay.selector), abi.encode(10));
+
+ vm.prank(sender);
+ assertEq(mock.pay{value: value}(1), 10);
+ assertEq(address(mock).balance, value);
+ assertEq(address(this).balance, 0);
+ assertEq(sender.balance, 0);
+ }
+
function testMockCallWithValueCalldataPrecedence() public {
Mock mock = new Mock();
@@ -279,17 +308,25 @@ contract MockCallRevertTest is Test {
function testMockCallRevertWithValue() public {
Mock mock = new Mock();
+ uint256 value = 10;
+ vm.deal(address(this), value);
- vm.mockCallRevert(address(mock), 10, abi.encodeWithSelector(mock.pay.selector), ERROR_MESSAGE);
+ vm.mockCallRevert(address(mock), value, abi.encodeWithSelector(mock.pay.selector), ERROR_MESSAGE);
assertEq(mock.pay(1), 1);
assertEq(mock.pay(2), 2);
- try mock.pay{value: 10}(1) {
+ uint256 initSenderBalance = address(this).balance;
+ uint256 initTargetBalance = address(mock).balance;
+
+ try mock.pay{value: value}(1) {
revert();
} catch (bytes memory err) {
require(keccak256(err) == keccak256(ERROR_MESSAGE));
}
+
+ assertEq(address(this).balance, initSenderBalance);
+ assertEq(address(mock).balance, initTargetBalance);
}
function testMockCallResetsMockCallRevert() public {
diff --git a/testdata/default/cheats/MockCalls.t.sol b/testdata/default/cheats/MockCalls.t.sol
index e0f5eef151db6..777543f28e361 100644
--- a/testdata/default/cheats/MockCalls.t.sol
+++ b/testdata/default/cheats/MockCalls.t.sol
@@ -28,13 +28,17 @@ contract MockCallsTest is Test {
mocks[0] = abi.encode(2 ether);
mocks[1] = abi.encode(1 ether);
mocks[2] = abi.encode(6.423 ether);
+ vm.deal(address(this), 3 ether);
vm.mockCalls(mockErc20, 1 ether, data, mocks);
(, bytes memory ret1) = mockErc20.call{value: 1 ether}(data);
assertEq(abi.decode(ret1, (uint256)), 2 ether);
+ assertEq(mockErc20.balance, 1 ether);
(, bytes memory ret2) = mockErc20.call{value: 1 ether}(data);
assertEq(abi.decode(ret2, (uint256)), 1 ether);
+ assertEq(mockErc20.balance, 2 ether);
(, bytes memory ret3) = mockErc20.call{value: 1 ether}(data);
assertEq(abi.decode(ret3, (uint256)), 6.423 ether);
+ assertEq(mockErc20.balance, 3 ether);
}
function testMockCalls() public {
diff --git a/testdata/forge-std-rev b/testdata/forge-std-rev
index b1716a0a12950..977c31eec5512 100644
--- a/testdata/forge-std-rev
+++ b/testdata/forge-std-rev
@@ -1 +1 @@
-8987040ede9553cea20c95ad40d0455930f9c8e0
\ No newline at end of file
+620536fa5277db4e3fd46772d5cbc1ea0696fb43
\ No newline at end of file
diff --git a/testdata/foundry.lock b/testdata/foundry.lock
new file mode 100644
index 0000000000000..979ae46488bea
--- /dev/null
+++ b/testdata/foundry.lock
@@ -0,0 +1,8 @@
+{
+ "lib/credible-std": {
+ "branch": {
+ "name": "feat/update-assertion-interface",
+ "rev": "04cd6ed6ce81b9eb09471e6a5b2512b833af4f9d"
+ }
+ }
+}
\ No newline at end of file
diff --git a/testdata/foundry.toml b/testdata/foundry.toml
index 6307668074860..0cbadeab61832 100644
--- a/testdata/foundry.toml
+++ b/testdata/foundry.toml
@@ -1,6 +1,11 @@
[profile.default]
src = "src"
test = "./"
+out = "out"
+cache_path = "cache"
+broadcast = "broadcast"
+snapshots = "snapshots"
+test_failures_file = "cache/test-failures"
optimizer = true
optimizer_runs = 200
via_ir = false
@@ -64,3 +69,7 @@ polkadotTestnet = "https://eth-rpc-testnet.polkadot.io"
kusama = "https://eth-rpc-kusama.polkadot.io"
polkadot = "https://eth-rpc.polkadot.io"
rpcEnvAlias = "${RPC_ENV_ALIAS}"
+
+[profile.credible]
+src = "./credible"
+test = "./credible"
diff --git a/testdata/lib/credible-std b/testdata/lib/credible-std
new file mode 160000
index 0000000000000..04cd6ed6ce81b
--- /dev/null
+++ b/testdata/lib/credible-std
@@ -0,0 +1 @@
+Subproject commit 04cd6ed6ce81b9eb09471e6a5b2512b833af4f9d
diff --git a/testdata/lib/ds-test/src/test.sol b/testdata/lib/ds-test/src/test.sol
new file mode 100644
index 0000000000000..02f5cea710014
--- /dev/null
+++ b/testdata/lib/ds-test/src/test.sol
@@ -0,0 +1,6 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+pragma solidity >=0.4.23;
+
+import {DSTest as UtilsDSTest} from "../../../utils/DSTest.sol";
+
+contract DSTest is UtilsDSTest {}
diff --git a/testdata/remappings.txt b/testdata/remappings.txt
new file mode 100644
index 0000000000000..ddd50dc64477e
--- /dev/null
+++ b/testdata/remappings.txt
@@ -0,0 +1,2 @@
+ds-test/=lib/ds-test/src/
+credible-std/=lib/credible-std/src/
diff --git a/testdata/utils/Vm.sol b/testdata/utils/Vm.sol
index d9f9b52821f52..94cf994dfb834 100644
--- a/testdata/utils/Vm.sol
+++ b/testdata/utils/Vm.sol
@@ -36,121 +36,122 @@ interface Vm {
function addr(uint256 privateKey) external pure returns (address keyAddr);
function allowCheatcodes(address account) external;
function assertApproxEqAbsDecimal(uint256 left, uint256 right, uint256 maxDelta, uint256 decimals) external pure;
- function assertApproxEqAbsDecimal(uint256 left, uint256 right, uint256 maxDelta, uint256 decimals, string calldata error) external pure;
+ function assertApproxEqAbsDecimal(uint256 left, uint256 right, uint256 maxDelta, uint256 decimals, string calldata err) external pure;
function assertApproxEqAbsDecimal(int256 left, int256 right, uint256 maxDelta, uint256 decimals) external pure;
- function assertApproxEqAbsDecimal(int256 left, int256 right, uint256 maxDelta, uint256 decimals, string calldata error) external pure;
+ function assertApproxEqAbsDecimal(int256 left, int256 right, uint256 maxDelta, uint256 decimals, string calldata err) external pure;
function assertApproxEqAbs(uint256 left, uint256 right, uint256 maxDelta) external pure;
- function assertApproxEqAbs(uint256 left, uint256 right, uint256 maxDelta, string calldata error) external pure;
+ function assertApproxEqAbs(uint256 left, uint256 right, uint256 maxDelta, string calldata err) external pure;
function assertApproxEqAbs(int256 left, int256 right, uint256 maxDelta) external pure;
- function assertApproxEqAbs(int256 left, int256 right, uint256 maxDelta, string calldata error) external pure;
+ function assertApproxEqAbs(int256 left, int256 right, uint256 maxDelta, string calldata err) external pure;
function assertApproxEqRelDecimal(uint256 left, uint256 right, uint256 maxPercentDelta, uint256 decimals) external pure;
- function assertApproxEqRelDecimal(uint256 left, uint256 right, uint256 maxPercentDelta, uint256 decimals, string calldata error) external pure;
+ function assertApproxEqRelDecimal(uint256 left, uint256 right, uint256 maxPercentDelta, uint256 decimals, string calldata err) external pure;
function assertApproxEqRelDecimal(int256 left, int256 right, uint256 maxPercentDelta, uint256 decimals) external pure;
- function assertApproxEqRelDecimal(int256 left, int256 right, uint256 maxPercentDelta, uint256 decimals, string calldata error) external pure;
+ function assertApproxEqRelDecimal(int256 left, int256 right, uint256 maxPercentDelta, uint256 decimals, string calldata err) external pure;
function assertApproxEqRel(uint256 left, uint256 right, uint256 maxPercentDelta) external pure;
- function assertApproxEqRel(uint256 left, uint256 right, uint256 maxPercentDelta, string calldata error) external pure;
+ function assertApproxEqRel(uint256 left, uint256 right, uint256 maxPercentDelta, string calldata err) external pure;
function assertApproxEqRel(int256 left, int256 right, uint256 maxPercentDelta) external pure;
- function assertApproxEqRel(int256 left, int256 right, uint256 maxPercentDelta, string calldata error) external pure;
+ function assertApproxEqRel(int256 left, int256 right, uint256 maxPercentDelta, string calldata err) external pure;
function assertEqDecimal(uint256 left, uint256 right, uint256 decimals) external pure;
- function assertEqDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;
+ function assertEqDecimal(uint256 left, uint256 right, uint256 decimals, string calldata err) external pure;
function assertEqDecimal(int256 left, int256 right, uint256 decimals) external pure;
- function assertEqDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;
+ function assertEqDecimal(int256 left, int256 right, uint256 decimals, string calldata err) external pure;
function assertEq(bool left, bool right) external pure;
- function assertEq(bool left, bool right, string calldata error) external pure;
+ function assertEq(bool left, bool right, string calldata err) external pure;
function assertEq(string calldata left, string calldata right) external pure;
- function assertEq(string calldata left, string calldata right, string calldata error) external pure;
+ function assertEq(string calldata left, string calldata right, string calldata err) external pure;
function assertEq(bytes calldata left, bytes calldata right) external pure;
- function assertEq(bytes calldata left, bytes calldata right, string calldata error) external pure;
+ function assertEq(bytes calldata left, bytes calldata right, string calldata err) external pure;
function assertEq(bool[] calldata left, bool[] calldata right) external pure;
- function assertEq(bool[] calldata left, bool[] calldata right, string calldata error) external pure;
+ function assertEq(bool[] calldata left, bool[] calldata right, string calldata err) external pure;
function assertEq(uint256[] calldata left, uint256[] calldata right) external pure;
- function assertEq(uint256[] calldata left, uint256[] calldata right, string calldata error) external pure;
+ function assertEq(uint256[] calldata left, uint256[] calldata right, string calldata err) external pure;
function assertEq(int256[] calldata left, int256[] calldata right) external pure;
- function assertEq(int256[] calldata left, int256[] calldata right, string calldata error) external pure;
+ function assertEq(int256[] calldata left, int256[] calldata right, string calldata err) external pure;
function assertEq(uint256 left, uint256 right) external pure;
function assertEq(address[] calldata left, address[] calldata right) external pure;
- function assertEq(address[] calldata left, address[] calldata right, string calldata error) external pure;
+ function assertEq(address[] calldata left, address[] calldata right, string calldata err) external pure;
function assertEq(bytes32[] calldata left, bytes32[] calldata right) external pure;
- function assertEq(bytes32[] calldata left, bytes32[] calldata right, string calldata error) external pure;
+ function assertEq(bytes32[] calldata left, bytes32[] calldata right, string calldata err) external pure;
function assertEq(string[] calldata left, string[] calldata right) external pure;
- function assertEq(string[] calldata left, string[] calldata right, string calldata error) external pure;
+ function assertEq(string[] calldata left, string[] calldata right, string calldata err) external pure;
function assertEq(bytes[] calldata left, bytes[] calldata right) external pure;
- function assertEq(bytes[] calldata left, bytes[] calldata right, string calldata error) external pure;
- function assertEq(uint256 left, uint256 right, string calldata error) external pure;
+ function assertEq(bytes[] calldata left, bytes[] calldata right, string calldata err) external pure;
+ function assertEq(uint256 left, uint256 right, string calldata err) external pure;
function assertEq(int256 left, int256 right) external pure;
- function assertEq(int256 left, int256 right, string calldata error) external pure;
+ function assertEq(int256 left, int256 right, string calldata err) external pure;
function assertEq(address left, address right) external pure;
- function assertEq(address left, address right, string calldata error) external pure;
+ function assertEq(address left, address right, string calldata err) external pure;
function assertEq(bytes32 left, bytes32 right) external pure;
- function assertEq(bytes32 left, bytes32 right, string calldata error) external pure;
+ function assertEq(bytes32 left, bytes32 right, string calldata err) external pure;
function assertFalse(bool condition) external pure;
- function assertFalse(bool condition, string calldata error) external pure;
+ function assertFalse(bool condition, string calldata err) external pure;
function assertGeDecimal(uint256 left, uint256 right, uint256 decimals) external pure;
- function assertGeDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;
+ function assertGeDecimal(uint256 left, uint256 right, uint256 decimals, string calldata err) external pure;
function assertGeDecimal(int256 left, int256 right, uint256 decimals) external pure;
- function assertGeDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;
+ function assertGeDecimal(int256 left, int256 right, uint256 decimals, string calldata err) external pure;
function assertGe(uint256 left, uint256 right) external pure;
- function assertGe(uint256 left, uint256 right, string calldata error) external pure;
+ function assertGe(uint256 left, uint256 right, string calldata err) external pure;
function assertGe(int256 left, int256 right) external pure;
- function assertGe(int256 left, int256 right, string calldata error) external pure;
+ function assertGe(int256 left, int256 right, string calldata err) external pure;
function assertGtDecimal(uint256 left, uint256 right, uint256 decimals) external pure;
- function assertGtDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;
+ function assertGtDecimal(uint256 left, uint256 right, uint256 decimals, string calldata err) external pure;
function assertGtDecimal(int256 left, int256 right, uint256 decimals) external pure;
- function assertGtDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;
+ function assertGtDecimal(int256 left, int256 right, uint256 decimals, string calldata err) external pure;
function assertGt(uint256 left, uint256 right) external pure;
- function assertGt(uint256 left, uint256 right, string calldata error) external pure;
+ function assertGt(uint256 left, uint256 right, string calldata err) external pure;
function assertGt(int256 left, int256 right) external pure;
- function assertGt(int256 left, int256 right, string calldata error) external pure;
+ function assertGt(int256 left, int256 right, string calldata err) external pure;
function assertLeDecimal(uint256 left, uint256 right, uint256 decimals) external pure;
- function assertLeDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;
+ function assertLeDecimal(uint256 left, uint256 right, uint256 decimals, string calldata err) external pure;
function assertLeDecimal(int256 left, int256 right, uint256 decimals) external pure;
- function assertLeDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;
+ function assertLeDecimal(int256 left, int256 right, uint256 decimals, string calldata err) external pure;
function assertLe(uint256 left, uint256 right) external pure;
- function assertLe(uint256 left, uint256 right, string calldata error) external pure;
+ function assertLe(uint256 left, uint256 right, string calldata err) external pure;
function assertLe(int256 left, int256 right) external pure;
- function assertLe(int256 left, int256 right, string calldata error) external pure;
+ function assertLe(int256 left, int256 right, string calldata err) external pure;
function assertLtDecimal(uint256 left, uint256 right, uint256 decimals) external pure;
- function assertLtDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;
+ function assertLtDecimal(uint256 left, uint256 right, uint256 decimals, string calldata err) external pure;
function assertLtDecimal(int256 left, int256 right, uint256 decimals) external pure;
- function assertLtDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;
+ function assertLtDecimal(int256 left, int256 right, uint256 decimals, string calldata err) external pure;
function assertLt(uint256 left, uint256 right) external pure;
- function assertLt(uint256 left, uint256 right, string calldata error) external pure;
+ function assertLt(uint256 left, uint256 right, string calldata err) external pure;
function assertLt(int256 left, int256 right) external pure;
- function assertLt(int256 left, int256 right, string calldata error) external pure;
+ function assertLt(int256 left, int256 right, string calldata err) external pure;
function assertNotEqDecimal(uint256 left, uint256 right, uint256 decimals) external pure;
- function assertNotEqDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;
+ function assertNotEqDecimal(uint256 left, uint256 right, uint256 decimals, string calldata err) external pure;
function assertNotEqDecimal(int256 left, int256 right, uint256 decimals) external pure;
- function assertNotEqDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;
+ function assertNotEqDecimal(int256 left, int256 right, uint256 decimals, string calldata err) external pure;
function assertNotEq(bool left, bool right) external pure;
- function assertNotEq(bool left, bool right, string calldata error) external pure;
+ function assertNotEq(bool left, bool right, string calldata err) external pure;
function assertNotEq(string calldata left, string calldata right) external pure;
- function assertNotEq(string calldata left, string calldata right, string calldata error) external pure;
+ function assertNotEq(string calldata left, string calldata right, string calldata err) external pure;
function assertNotEq(bytes calldata left, bytes calldata right) external pure;
- function assertNotEq(bytes calldata left, bytes calldata right, string calldata error) external pure;
+ function assertNotEq(bytes calldata left, bytes calldata right, string calldata err) external pure;
function assertNotEq(bool[] calldata left, bool[] calldata right) external pure;
- function assertNotEq(bool[] calldata left, bool[] calldata right, string calldata error) external pure;
+ function assertNotEq(bool[] calldata left, bool[] calldata right, string calldata err) external pure;
function assertNotEq(uint256[] calldata left, uint256[] calldata right) external pure;
- function assertNotEq(uint256[] calldata left, uint256[] calldata right, string calldata error) external pure;
+ function assertNotEq(uint256[] calldata left, uint256[] calldata right, string calldata err) external pure;
function assertNotEq(int256[] calldata left, int256[] calldata right) external pure;
- function assertNotEq(int256[] calldata left, int256[] calldata right, string calldata error) external pure;
+ function assertNotEq(int256[] calldata left, int256[] calldata right, string calldata err) external pure;
function assertNotEq(uint256 left, uint256 right) external pure;
function assertNotEq(address[] calldata left, address[] calldata right) external pure;
- function assertNotEq(address[] calldata left, address[] calldata right, string calldata error) external pure;
+ function assertNotEq(address[] calldata left, address[] calldata right, string calldata err) external pure;
function assertNotEq(bytes32[] calldata left, bytes32[] calldata right) external pure;
- function assertNotEq(bytes32[] calldata left, bytes32[] calldata right, string calldata error) external pure;
+ function assertNotEq(bytes32[] calldata left, bytes32[] calldata right, string calldata err) external pure;
function assertNotEq(string[] calldata left, string[] calldata right) external pure;
- function assertNotEq(string[] calldata left, string[] calldata right, string calldata error) external pure;
+ function assertNotEq(string[] calldata left, string[] calldata right, string calldata err) external pure;
function assertNotEq(bytes[] calldata left, bytes[] calldata right) external pure;
- function assertNotEq(bytes[] calldata left, bytes[] calldata right, string calldata error) external pure;
- function assertNotEq(uint256 left, uint256 right, string calldata error) external pure;
+ function assertNotEq(bytes[] calldata left, bytes[] calldata right, string calldata err) external pure;
+ function assertNotEq(uint256 left, uint256 right, string calldata err) external pure;
function assertNotEq(int256 left, int256 right) external pure;
- function assertNotEq(int256 left, int256 right, string calldata error) external pure;
+ function assertNotEq(int256 left, int256 right, string calldata err) external pure;
function assertNotEq(address left, address right) external pure;
- function assertNotEq(address left, address right, string calldata error) external pure;
+ function assertNotEq(address left, address right, string calldata err) external pure;
function assertNotEq(bytes32 left, bytes32 right) external pure;
- function assertNotEq(bytes32 left, bytes32 right, string calldata error) external pure;
+ function assertNotEq(bytes32 left, bytes32 right, string calldata err) external pure;
function assertTrue(bool condition) external pure;
- function assertTrue(bool condition, string calldata error) external pure;
+ function assertTrue(bool condition, string calldata err) external pure;
+ function assertion(address adopter, bytes calldata createData, bytes4 fnSelector) external;
function assume(bool condition) external pure;
function assumeNoRevert() external pure;
function assumeNoRevert(PotentialRevert calldata potentialRevert) external pure;