From ae4cb1b83fde7bce238d023e95dec70e2b729ea7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 30 Jul 2024 12:31:29 +0000 Subject: [PATCH 01/19] chore(aptos): Release 1.0.1 --- aptos/aptos-programs/Cargo.toml | 2 +- aptos/core/Cargo.toml | 2 +- aptos/light-client/Cargo.toml | 2 +- aptos/programs/epoch-change/Cargo.toml | 2 +- aptos/programs/inclusion/Cargo.toml | 2 +- aptos/proof-server/Cargo.toml | 2 +- aptos/solidity/fixture-generator/Cargo.toml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/aptos/aptos-programs/Cargo.toml b/aptos/aptos-programs/Cargo.toml index b6dc5e55..987a3dd3 100644 --- a/aptos/aptos-programs/Cargo.toml +++ b/aptos/aptos-programs/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aptos-programs" -version = "1.0.0" +version = "1.0.1" edition = "2021" [build-dependencies] diff --git a/aptos/core/Cargo.toml b/aptos/core/Cargo.toml index a171be93..567ba116 100644 --- a/aptos/core/Cargo.toml +++ b/aptos/core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aptos-lc-core" -version = "1.0.0" +version = "1.0.1" edition = "2021" license = "MIT OR Apache-2.0" homepage = "https://github.com/wormhole-foundation/example-zk-light-clients" diff --git a/aptos/light-client/Cargo.toml b/aptos/light-client/Cargo.toml index a047d2a1..cac78e42 100644 --- a/aptos/light-client/Cargo.toml +++ b/aptos/light-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aptos-lc" -version = "1.0.0" +version = "1.0.1" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/aptos/programs/epoch-change/Cargo.toml b/aptos/programs/epoch-change/Cargo.toml index c9be596f..79a7d93f 100644 --- a/aptos/programs/epoch-change/Cargo.toml +++ b/aptos/programs/epoch-change/Cargo.toml @@ -1,6 +1,6 @@ [workspace] [package] -version = "1.0.0" +version = "1.0.1" name = "epoch-change-program" edition = "2021" diff --git a/aptos/programs/inclusion/Cargo.toml b/aptos/programs/inclusion/Cargo.toml index dc507c50..4d9eabc5 100644 --- a/aptos/programs/inclusion/Cargo.toml +++ b/aptos/programs/inclusion/Cargo.toml @@ -1,6 +1,6 @@ [workspace] [package] -version = "1.0.0" +version = "1.0.1" name = "inclusion-program" edition = "2021" diff --git a/aptos/proof-server/Cargo.toml b/aptos/proof-server/Cargo.toml index 2b9f4360..e78e35b2 100644 --- a/aptos/proof-server/Cargo.toml +++ b/aptos/proof-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "proof-server" -version = "1.0.0" +version = "1.0.1" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/aptos/solidity/fixture-generator/Cargo.toml b/aptos/solidity/fixture-generator/Cargo.toml index 873ee075..9f36dafe 100644 --- a/aptos/solidity/fixture-generator/Cargo.toml +++ b/aptos/solidity/fixture-generator/Cargo.toml @@ -1,5 +1,5 @@ [package] -version = "1.0.0" +version = "1.0.1" name = "fixture-generator" edition = "2021" From 10b645516c184150c6eeb132b677e6d299f9d063 Mon Sep 17 00:00:00 2001 From: tchataigner Date: Thu, 4 Jul 2024 13:49:46 +0200 Subject: [PATCH 02/19] feat: bootstrap client (#75) * feat: fetch checkpoint and bootstrap Signed-off-by: Thomas Chataigner * docs: started doc for client * docs: rust doc * chore: clean deps + fmt + xclippy * refactor: simplify readability for serde methods * refactor: apply suggestion from review Co-authored-by: wwared * refactor: rename const var & check no leftover bytes * fix: fix base length for LightClientHeader --------- Signed-off-by: Thomas Chataigner Co-authored-by: wwared --- aptos/core/src/types/error.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/aptos/core/src/types/error.rs b/aptos/core/src/types/error.rs index e57e5e7a..a9a169f5 100644 --- a/aptos/core/src/types/error.rs +++ b/aptos/core/src/types/error.rs @@ -1,7 +1,6 @@ // Copyright (c) Yatima, Inc. // SPDX-License-Identifier: BUSL-1.1 -// SPDX-License-Identifier: BUSL-1.1 use thiserror::Error; /// Errors possible during signature verification. From 84442d233d291eb2f5f4189617e0473855205769 Mon Sep 17 00:00:00 2001 From: Samuel Burnham <45365069+samuelburnham@users.noreply.github.com> Date: Tue, 9 Jul 2024 10:33:38 -0400 Subject: [PATCH 03/19] ci: Add `cargo-deny` workflow (#79) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ci: Add `cargo-deny` workflow (WIP) * chore: use workspace dependencies * chore: Refactor uneeded dependencies in aptos core Cargo.toml - Removed `move-core-types` from workspace dependencies and the aptos feature in Cargo.toml file - Stripped `reqwest` from the dev-dependencies within the aptos/core module * fix: update deny.toml exceptions - Modified various Cargo.toml files within the aptos project to standardize the `edition` field and reference the workspace. - Added the "BUSL-1.1" license to multiple packages throughout the aptos codebase, including `proof-server`, `aptos-lc-core`, `aptos-programs`, `fixture-generator`, and `light-client`. - Updated the deny.toml file, removing redundant sections and updating the list of exceptions to allow `aptos-lc-core` to use the "BUSL-1.1" license. - Set edition 2021 in the workspace package configuration within the main aptos project's Cargo.toml. * chore: add exception for number_range * ci: fix deny action * ci: Use `ssh-key` input for `cargo-deny-action` * Test regular `cargo-deny` CLI * Ignore `aptos` advisories --------- Co-authored-by: François Garillot --- .github/workflows/rust.yml | 117 +++--- aptos/Cargo.lock | 135 +++---- aptos/Cargo.toml | 6 + aptos/aptos-programs/Cargo.toml | 4 +- aptos/core/Cargo.toml | 10 +- aptos/light-client/Cargo.toml | 4 +- .../signature-verification/Cargo.toml | 1 + aptos/programs/epoch-change/Cargo.toml | 1 + aptos/programs/inclusion/Cargo.toml | 1 + aptos/proof-server/Cargo.toml | 4 +- aptos/solidity/fixture-generator/Cargo.toml | 15 +- deny.toml | 366 ++++++++++++++++++ 12 files changed, 521 insertions(+), 143 deletions(-) create mode 100644 deny.toml diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index f044df40..b7ac6fc0 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -8,44 +8,40 @@ on: pull_request: types: [ opened, synchronize, reopened, ready_for_review ] -env: - CARGO_TERM_COLOR: always - # Disable incremental compilation. - # - # Incremental compilation is useful as part of an edit-build-test-edit cycle, - # as it lets the compiler avoid recompiling code that hasn't changed. However, - # on CI, we're not making small edits; we're almost always building the entire - # project from scratch. Thus, incremental compilation on CI actually - # introduces *additional* overhead to support making future builds - # faster...but no future builds will ever occur in any given CI environment. - # - # See https://matklad.github.io/2021/09/04/fast-rust-builds.html#ci-workflow - # for details. - CARGO_INCREMENTAL: 0 - # Allow more retries for network requests in cargo (downloading crates) and - # rustup (installing toolchains). This should help to reduce flaky CI failures - # from transient network timeouts or other issues. - CARGO_NET_RETRY: 10 - RUSTUP_MAX_RETRIES: 10 - # Don't emit giant backtraces in the CI logs. - RUST_BACKTRACE: short - concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true jobs: + # Detect changes in each light client crate + changes: + runs-on: ubuntu-latest + outputs: + # Expose matched filters as job 'packages' output variable + packages: ${{ steps.filter.outputs.changes }} + aptos: ${{ steps.filter.outputs.aptos }} + ethereum: ${{ steps.filter.outputs.ethereum }} + steps: + - uses: actions/checkout@v4 + - uses: dorny/paths-filter@v3 + id: filter + with: + filters: | + aptos: + - 'aptos/**' + ethereum: + - 'ethereum/**' + test: - runs-on: ${{ matrix.os }} + needs: changes + runs-on: buildjet-16vcpu-ubuntu-2204 + if: ${{ needs.changes.outputs.packages != '[]' && needs.changes.outputs.packages != '' }} strategy: matrix: - os: - - buildjet-16vcpu-ubuntu-2204 - package: - - "aptos" + # Parse JSON array containing names of all changed light client packages + # e.g. ['aptos', 'ethereum'] if both directories contain changes + package: ${{ fromJSON(needs.changes.outputs.packages) }} fail-fast: false - env: - CARGO_NET_GIT_FETCH_WITH_CLI: "true" steps: - uses: actions/checkout@v4 with: @@ -59,33 +55,31 @@ jobs: # make sure benches don't bit-rot - name: build benches run: | - cargo check --benches --features aptos + cargo check --benches --all-features working-directory: ${{ github.workspace }}/${{ matrix.package }}/light-client - name: Run cargo test in workspace run: | cargo nextest run --workspace --release --profile ci --all-features working-directory: ${{ github.workspace }}/${{ matrix.package }} - - name: Doctests - run: | - cargo test --doc - env: - RUSTFLAGS: "--cfg tokio_unstable" - working-directory: ${{ github.workspace }}/${{ matrix.package }} clippy: + needs: changes runs-on: buildjet-16vcpu-ubuntu-2204 + if: ${{ needs.changes.outputs.packages != '[]' && needs.changes.outputs.packages != '' }} strategy: matrix: - package: - - "aptos" - env: - CARGO_NET_GIT_FETCH_WITH_CLI: "true" + # Parse JSON array containing names of all changed light client packages + # e.g. ['aptos', 'ethereum'] if both directories contain changes + package: ${{ fromJSON(needs.changes.outputs.packages) }} steps: - uses: actions/checkout@v4 with: repository: lurk-lab/ci-workflows - uses: ./.github/actions/ci-env - uses: actions/checkout@v4 + with: + submodules: recursive + token: ${{ secrets.REPO_TOKEN }} - name: Setup CI uses: ./.github/actions/setup with: @@ -97,9 +91,19 @@ jobs: - name: cargo clippy run: cargo xclippy -D warnings working-directory: ${{ github.workspace }}/${{ matrix.package }} + - name: Doctests + run: | + cargo test --doc + working-directory: ${{ github.workspace }}/${{ matrix.package }} + - run: cargo install --locked cargo-deny + - name: Cargo-deny check + run: | + cargo deny --manifest-path ${{ matrix.package }}/Cargo.toml check solidity-unit-tests: + needs: changes runs-on: buildjet-16vcpu-ubuntu-2204 + if: needs.changes.outputs.aptos == 'true' steps: - uses: actions/checkout@v4 with: @@ -132,7 +136,14 @@ jobs: working-directory: ${{ github.workspace }}/aptos/solidity/contracts/ cycle-count-regression: + needs: changes runs-on: warp-ubuntu-latest-x64-32x + if: ${{ needs.changes.outputs.packages != '[]' && needs.changes.outputs.packages != '' }} + strategy: + matrix: + # Parse JSON array containing names of all changed light client packages + # e.g. ['aptos', 'ethereum'] if both directories contain changes + package: ${{ fromJSON(needs.changes.outputs.packages) }} steps: - uses: actions/checkout@v4 with: @@ -143,22 +154,34 @@ jobs: uses: ./.github/actions/setup with: pull_token: ${{ secrets.REPO_TOKEN }} + - name: Set env + run: | + if [[ "${{ matrix.package }}" == "aptos" ]]; then + # TODO: Remove hardcoded test names + TESTS="test_execute_inclusion test_execute_epoch_change test_execute_sig" + FEATURES="--features aptos" + elif [[ "${{ matrix.package }}" == "ethereum" ]]; then + # TODO: Add execution tests + TESTS="" + FEATURES="" + fi + echo "TESTS=$TESTS" | tee -a $GITHUB_ENV + echo "FEATURES=$FEATURES" | tee -a $GITHUB_ENV - name: Get cycle counts for PR id: get_cycles_pr run: | CYCLE_COUNTS='[]' set -o pipefail - # TODO: Remove hardcoded test names - for test_name in "test_execute_inclusion" "test_execute_epoch_change" "test_execute_sig"; do - cargo nextest run --verbose --release --profile ci --features aptos --package aptos-lc --no-capture -E "test($test_name)" 2>&1 | tee out.txt + for test_name in ${{ env.TESTS }}; do + cargo nextest run --verbose --release --profile ci ${{ env.FEATURES }} --package ${{ matrix.package }}-lc --no-capture -E "test($test_name)" 2>&1 | tee out.txt num_cycles=$(cat out.txt | grep -o 'finished execution clk = [0-9]\+' | awk -F'= ' '{ print $2 }') CYCLE_COUNTS=$(echo $CYCLE_COUNTS | jq -c ". += [{\"${test_name}\": \"$num_cycles\"}]") done set +o pipefail echo "CYCLE_COUNTS=$CYCLE_COUNTS" | tee -a "$GITHUB_OUTPUT" - working-directory: ${{ github.workspace }}/aptos/light-client + working-directory: ${{ github.workspace }}/${{ matrix.package }}/light-client env: RUST_LOG: debug - uses: actions/checkout@v4 @@ -175,8 +198,8 @@ jobs: set -o pipefail # TODO: Remove hardcoded test names - for test_name in "test_execute_inclusion" "test_execute_epoch_change" "test_execute_sig"; do - cargo nextest run --verbose --release --profile ci --features aptos --package aptos-lc --no-capture -E "test($test_name)" 2>&1 | tee out.txt + for test_name in ${{ env.TESTS }}; do + cargo nextest run --verbose --release --profile ci ${{ env.FEATURES }} --package ${{ matrix.package }}-lc --no-capture -E "test($test_name)" 2>&1 | tee out.txt num_cycles_base=$(cat out.txt | grep -o 'finished execution clk = [0-9]\+' | awk -F'= ' '{ print $2 }') num_cycles_pr=$(echo "$CYCLE_COUNTS" | jq ".[$counter] | to_entries | .[0].value") echo "$test_name summary" @@ -197,7 +220,7 @@ jobs: echo -e "$FAILING_TESTS" | tee -a $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT echo "WORKFLOW_URL=https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" | tee -a $GITHUB_ENV - working-directory: ${{ github.workspace }}/aptos/light-client + working-directory: ${{ github.workspace }}/${{ matrix.package }}/light-client env: RUST_LOG: debug - uses: actions/checkout@v4 diff --git a/aptos/Cargo.lock b/aptos/Cargo.lock index b1ec45ea..093c0c9b 100644 --- a/aptos/Cargo.lock +++ b/aptos/Cargo.lock @@ -337,7 +337,7 @@ dependencies = [ "bcs 0.1.4", "claims", "move-binary-format", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-vm-types", ] @@ -363,7 +363,7 @@ dependencies = [ "hex", "indoc", "move-binary-format", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "once_cell", "poem", "poem-openapi", @@ -406,7 +406,7 @@ dependencies = [ "derivative", "fail", "move-binary-format", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-vm-types", "num_cpus", "once_cell", @@ -430,7 +430,7 @@ dependencies = [ "dashmap", "itertools 0.12.1", "jemallocator", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "once_cell", "rand 0.7.3", "rayon", @@ -455,7 +455,7 @@ dependencies = [ "aptos-package-builder", "aptos-types", "bcs 0.1.4", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "once_cell", ] @@ -615,7 +615,7 @@ dependencies = [ "hex", "itertools 0.12.1", "lru", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "num-derive", "once_cell", "proptest", @@ -642,7 +642,7 @@ dependencies = [ "bcs 0.1.4", "bytes", "dashmap", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "serde", ] @@ -714,7 +714,7 @@ dependencies = [ "dashmap", "fail", "itertools 0.12.1", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "once_cell", "rayon", "serde", @@ -846,7 +846,7 @@ dependencies = [ "move-cli", "move-command-line-common", "move-compiler", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-docgen", "move-model", "move-package", @@ -879,7 +879,7 @@ version = "0.0.1" source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" dependencies = [ "either", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", ] [[package]] @@ -893,7 +893,7 @@ dependencies = [ "aptos-types", "aptos-vm-types", "move-binary-format", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-vm-types", ] @@ -910,7 +910,7 @@ dependencies = [ "handlebars", "inferno", "move-binary-format", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-vm-types", "regex", "serde_json", @@ -924,7 +924,7 @@ source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#1 dependencies = [ "aptos-gas-algebra", "aptos-global-constants", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-vm-types", "paste", "rand 0.7.3", @@ -1007,7 +1007,7 @@ dependencies = [ "goldenfile", "move-binary-format", "move-command-line-common", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-ir-compiler", "move-model", "move-vm-runtime", @@ -1059,11 +1059,9 @@ dependencies = [ "cfg-if", "getset", "hex", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.12.0)", "proptest", "rand 0.7.3", "rand_core 0.5.1", - "reqwest 0.12.5", "serde", "serde_bytes", "sha2 0.9.9", @@ -1127,7 +1125,7 @@ dependencies = [ "aptos-gas-meter", "aptos-types", "move-binary-format", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-vm-types", ] @@ -1147,7 +1145,7 @@ source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#1 dependencies = [ "aptos-gas-schedule", "aptos-native-interface", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-vm-runtime", "move-vm-types", "sha2 0.9.9", @@ -1171,7 +1169,7 @@ dependencies = [ "dashmap", "derivative", "move-binary-format", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-vm-types", "serde", ] @@ -1187,7 +1185,7 @@ dependencies = [ "bcs 0.1.4", "bytes", "move-binary-format", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-vm-runtime", "move-vm-types", "smallvec", @@ -1297,7 +1295,7 @@ dependencies = [ "aptos-vm", "move-binary-format", "move-bytecode-utils", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-resource-viewer", ] @@ -1315,7 +1313,7 @@ dependencies = [ "bcs 0.1.4", "bytes", "hex", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "reqwest 0.11.27", "serde", "serde_json", @@ -1393,7 +1391,7 @@ dependencies = [ "base64 0.13.1", "bcs 0.1.4", "ed25519-dalek-bip32", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "rand_core 0.5.1", "serde_json", "tiny-bip39", @@ -1409,7 +1407,7 @@ dependencies = [ "bcs 0.1.4", "clap 4.5.7", "heck 0.4.1", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "once_cell", "serde-generate", "serde-reflection", @@ -1515,7 +1513,7 @@ dependencies = [ "better_any", "bytes", "move-binary-format", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-table-extension", "move-vm-runtime", "move-vm-types", @@ -1573,7 +1571,7 @@ dependencies = [ "jsonwebtoken", "move-binary-format", "move-bytecode-verifier", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-table-extension", "move-vm-runtime", "move-vm-types", @@ -1660,7 +1658,7 @@ dependencies = [ "futures", "hex", "move-binary-format", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-vm-runtime", "move-vm-types", "num_cpus", @@ -1685,7 +1683,7 @@ dependencies = [ "aptos-vm-types", "bcs 0.1.4", "bytes", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-vm-runtime", "move-vm-types", "once_cell", @@ -1723,7 +1721,7 @@ dependencies = [ "claims", "either", "move-binary-format", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-vm-types", "rand 0.7.3", "serde", @@ -5989,7 +5987,7 @@ dependencies = [ "move-binary-format", "move-bytecode-verifier", "move-command-line-common", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-model", "serde", ] @@ -6002,7 +6000,7 @@ dependencies = [ "anyhow", "backtrace", "indexmap 1.9.3", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "ref-cast", "serde", "variant_count", @@ -6022,7 +6020,7 @@ dependencies = [ "bcs 0.1.4", "move-binary-format", "move-command-line-common", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-ir-types", "move-symbol-pool", "serde", @@ -6035,7 +6033,7 @@ source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#1 dependencies = [ "anyhow", "move-binary-format", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "petgraph", "serde-reflection", ] @@ -6048,7 +6046,7 @@ dependencies = [ "fail", "move-binary-format", "move-borrow-graph", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "petgraph", "serde", "typed-arena", @@ -6083,7 +6081,7 @@ dependencies = [ "move-command-line-common", "move-compiler", "move-compiler-v2", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-coverage", "move-disassembler", "move-docgen", @@ -6108,7 +6106,7 @@ dependencies = [ "difference", "dirs-next", "hex", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "num-bigint 0.3.3", "once_cell", "serde", @@ -6131,7 +6129,7 @@ dependencies = [ "move-bytecode-source-map", "move-bytecode-verifier", "move-command-line-common", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-ir-to-bytecode", "move-ir-types", "move-symbol-pool", @@ -6161,7 +6159,7 @@ dependencies = [ "move-bytecode-source-map", "move-command-line-common", "move-compiler", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-disassembler", "move-ir-types", "move-model", @@ -6172,28 +6170,6 @@ dependencies = [ "petgraph", ] -[[package]] -name = "move-core-types" -version = "0.0.4" -source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.12.0#a9146fa7ddac52c6c6fdc4ed15eeb4e3cf0f7bd6" -dependencies = [ - "anyhow", - "bcs 0.1.4", - "bytes", - "ethnum", - "hashbrown 0.14.5", - "hex", - "num", - "once_cell", - "primitive-types 0.10.1", - "rand 0.8.5", - "ref-cast", - "serde", - "serde_bytes", - "thiserror", - "uint", -] - [[package]] name = "move-core-types" version = "0.0.4" @@ -6232,7 +6208,7 @@ dependencies = [ "move-binary-format", "move-bytecode-source-map", "move-command-line-common", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-ir-types", "petgraph", "serde", @@ -6250,7 +6226,7 @@ dependencies = [ "move-bytecode-source-map", "move-command-line-common", "move-compiler", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-coverage", "move-ir-types", ] @@ -6266,7 +6242,7 @@ dependencies = [ "itertools 0.12.1", "log", "move-compiler", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-model", "once_cell", "regex", @@ -6280,7 +6256,7 @@ source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#1 dependencies = [ "anyhow", "move-command-line-common", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-model", "serde", ] @@ -6312,7 +6288,7 @@ dependencies = [ "move-binary-format", "move-bytecode-source-map", "move-command-line-common", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-ir-to-bytecode-syntax", "move-ir-types", "move-symbol-pool", @@ -6327,7 +6303,7 @@ dependencies = [ "anyhow", "hex", "move-command-line-common", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-ir-types", "move-symbol-pool", ] @@ -6339,7 +6315,7 @@ source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#1 dependencies = [ "hex", "move-command-line-common", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-symbol-pool", "once_cell", "serde", @@ -6360,7 +6336,7 @@ dependencies = [ "move-bytecode-source-map", "move-command-line-common", "move-compiler", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-disassembler", "move-ir-types", "move-symbol-pool", @@ -6387,7 +6363,7 @@ dependencies = [ "move-command-line-common", "move-compiler", "move-compiler-v2", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-docgen", "move-model", "move-symbol-pool", @@ -6447,7 +6423,7 @@ dependencies = [ "move-binary-format", "move-command-line-common", "move-compiler", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-model", "move-prover-bytecode-pipeline", "move-stackless-bytecode", @@ -6472,7 +6448,7 @@ dependencies = [ "itertools 0.12.1", "log", "move-binary-format", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-model", "move-stackless-bytecode", "serde", @@ -6487,7 +6463,7 @@ dependencies = [ "hex", "move-binary-format", "move-bytecode-utils", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "serde", ] @@ -6503,7 +6479,7 @@ dependencies = [ "itertools 0.12.1", "log", "move-binary-format", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-model", "num", "paste", @@ -6521,7 +6497,7 @@ dependencies = [ "move-binary-format", "move-command-line-common", "move-compiler", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-docgen", "move-errmapgen", "move-prover", @@ -6550,7 +6526,7 @@ dependencies = [ "better_any", "bytes", "move-binary-format", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-vm-runtime", "move-vm-types", "sha3 0.9.1", @@ -6572,7 +6548,7 @@ dependencies = [ "move-bytecode-utils", "move-command-line-common", "move-compiler", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-ir-types", "move-resource-viewer", "move-stdlib", @@ -6598,7 +6574,7 @@ dependencies = [ "lru", "move-binary-format", "move-bytecode-verifier", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-vm-types", "once_cell", "parking_lot", @@ -6618,7 +6594,7 @@ dependencies = [ "bytes", "move-binary-format", "move-bytecode-utils", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "move-vm-types", "once_cell", "serde", @@ -6633,7 +6609,7 @@ dependencies = [ "derivative", "itertools 0.12.1", "move-binary-format", - "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-core-types", "serde", "smallbitvec", "smallvec", @@ -8533,7 +8509,6 @@ dependencies = [ "base64 0.22.1", "bytes", "encoding_rs", - "futures-channel", "futures-core", "futures-util", "h2 0.4.5", diff --git a/aptos/Cargo.toml b/aptos/Cargo.toml index e1fdbc84..72db0d91 100644 --- a/aptos/Cargo.toml +++ b/aptos/Cargo.toml @@ -9,6 +9,10 @@ members = [ "solidity/fixture-generator", ] +[workspace.package] +edition = "2021" +repository = "https://github.com/lurk-lab/zk-light-clients" + [workspace.dependencies] anyhow = "1.0.79" aptos-crypto = { git = "https://github.com/aptos-labs/aptos-core/", tag = "aptos-node-v1.14.0" } @@ -53,6 +57,8 @@ sphinx-helper = { git = "ssh://git@github.com/lurk-lab/sphinx", tag = "v1.0.0" } sphinx-prover = { git = "ssh://git@github.com/lurk-lab/sphinx", tag = "v1.0.0" } tokio = "1.37" tokio-stream = "0.1" +alloy-sol-types = "0.7.2" +tracing = "0.1.40" # Match the forks used by the aptos crates [patch.crates-io] diff --git a/aptos/aptos-programs/Cargo.toml b/aptos/aptos-programs/Cargo.toml index 987a3dd3..c0548e3f 100644 --- a/aptos/aptos-programs/Cargo.toml +++ b/aptos/aptos-programs/Cargo.toml @@ -1,7 +1,9 @@ [package] name = "aptos-programs" version = "1.0.1" -edition = "2021" +edition = { workspace = true } +repository = { workspace = true } +license = "BUSL-1.1" [build-dependencies] glob = { workspace = true } diff --git a/aptos/core/Cargo.toml b/aptos/core/Cargo.toml index 567ba116..d779e20e 100644 --- a/aptos/core/Cargo.toml +++ b/aptos/core/Cargo.toml @@ -1,10 +1,9 @@ [package] name = "aptos-lc-core" version = "1.0.1" -edition = "2021" -license = "MIT OR Apache-2.0" -homepage = "https://github.com/wormhole-foundation/example-zk-light-clients" -repository = "https://github.com/wormhole-foundation/example-zk-light-clients" +edition = { workspace = true } +repository = { workspace = true } +license = "BUSL-1.1" [dependencies] anyhow = { workspace = true } @@ -31,7 +30,6 @@ aptos-temppath = { workspace = true, optional = true } aptos-types = { workspace = true, optional = true } aptos-vm = { workspace = true, optional = true } aptos-vm-genesis = { workspace = true, optional = true } -move-core-types = { workspace = true, optional = true } # Versions to fit aptos crate rand = { workspace = true, optional = true } rand_core = { workspace = true, optional = true } @@ -39,7 +37,6 @@ rand_core = { workspace = true, optional = true } [dev-dependencies] cfg-if = { workspace = true } proptest = { workspace = true } -reqwest = { workspace = true, features = ["blocking"] } [features] default = [] @@ -54,7 +51,6 @@ aptos = [ "dep:aptos-types", "dep:aptos-vm", "dep:aptos-vm-genesis", - "dep:move-core-types", "dep:rand", "dep:rand_core" ] diff --git a/aptos/light-client/Cargo.toml b/aptos/light-client/Cargo.toml index cac78e42..33107568 100644 --- a/aptos/light-client/Cargo.toml +++ b/aptos/light-client/Cargo.toml @@ -1,7 +1,9 @@ [package] name = "aptos-lc" version = "1.0.1" -edition = "2021" +edition = { workspace = true } +repository = { workspace = true } +license = "BUSL-1.1" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/aptos/programs/benchmarks/signature-verification/Cargo.toml b/aptos/programs/benchmarks/signature-verification/Cargo.toml index 20625396..e95518ea 100644 --- a/aptos/programs/benchmarks/signature-verification/Cargo.toml +++ b/aptos/programs/benchmarks/signature-verification/Cargo.toml @@ -3,6 +3,7 @@ version = "0.1.0" name = "signature-verification-program" edition = "2021" +license-file = "../../LICENSE.md" [dependencies] aptos-lc-core = { path = "../../../core", package = "aptos-lc-core", default-features = false } diff --git a/aptos/programs/epoch-change/Cargo.toml b/aptos/programs/epoch-change/Cargo.toml index 79a7d93f..b2d92bc5 100644 --- a/aptos/programs/epoch-change/Cargo.toml +++ b/aptos/programs/epoch-change/Cargo.toml @@ -3,6 +3,7 @@ version = "1.0.1" name = "epoch-change-program" edition = "2021" +license-file = "../../LICENSE.md" [dependencies] aptos-lc-core = { path = "../../core", package = "aptos-lc-core", default-features = false } diff --git a/aptos/programs/inclusion/Cargo.toml b/aptos/programs/inclusion/Cargo.toml index 4d9eabc5..19025c01 100644 --- a/aptos/programs/inclusion/Cargo.toml +++ b/aptos/programs/inclusion/Cargo.toml @@ -3,6 +3,7 @@ version = "1.0.1" name = "inclusion-program" edition = "2021" +license-file = "../../LICENSE.md" [dependencies] aptos-lc-core = { path = "../../core", package = "aptos-lc-core", default-features = false } diff --git a/aptos/proof-server/Cargo.toml b/aptos/proof-server/Cargo.toml index e78e35b2..df629afe 100644 --- a/aptos/proof-server/Cargo.toml +++ b/aptos/proof-server/Cargo.toml @@ -1,7 +1,9 @@ [package] name = "proof-server" version = "1.0.1" -edition = "2021" +edition = { workspace = true } +license = "BUSL-1.1" +repository = { workspace = true } # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/aptos/solidity/fixture-generator/Cargo.toml b/aptos/solidity/fixture-generator/Cargo.toml index 9f36dafe..a4698af4 100644 --- a/aptos/solidity/fixture-generator/Cargo.toml +++ b/aptos/solidity/fixture-generator/Cargo.toml @@ -1,7 +1,10 @@ [package] version = "1.0.1" name = "fixture-generator" -edition = "2021" +edition = { workspace = true } +license = "BUSL-1.1" +repository = { workspace = true } + [[bin]] name = "generate-fixture" @@ -11,8 +14,8 @@ path = "src/bin/main.rs" sphinx-sdk = { workspace = true } sphinx-prover = {workspace = true } aptos-lc = { path = "../../light-client", features = ["aptos"] } -serde_json = { version = "1.0", default-features = false, features = ["alloc"] } -serde = { version = "1.0", default-features = false, features = ["derive"] } -clap = { version = "4.0", features = ["derive", "env"] } -tracing = "0.1.40" -alloy-sol-types = "0.7.2" +serde_json = { workspace = true, features = ["alloc"] } +serde = { workspace = true, features = ["derive"] } +clap = { workspace = true, features = ["derive", "env"] } +tracing = { workspace = true } +alloy-sol-types = { workspace = true } diff --git a/deny.toml b/deny.toml new file mode 100644 index 00000000..c292beac --- /dev/null +++ b/deny.toml @@ -0,0 +1,366 @@ +# This template contains all of the possible sections and their default values + +# Note that all fields that take a lint level have these possible values: +# * deny - An error will be produced and the check will fail +# * warn - A warning will be produced, but the check will not fail +# * allow - No warning or error will be produced, though in some cases a note +# will be + +# The values provided in this template are the default values that will be used +# when any section or field is not specified in your own configuration + +# Root options + +# If 1 or more target triples (and optionally, target_features) are specified, +# only the specified targets will be checked when running `cargo deny check`. +# This means, if a particular package is only ever used as a target specific +# dependency, such as, for example, the `nix` crate only being used via the +# `target_family = "unix"` configuration, that only having windows targets in +# this list would mean the nix crate, as well as any of its exclusive +# dependencies not shared by any other crates, would be ignored, as the target +# list here is effectively saying which targets you are building for. +targets = [ + # The triple can be any string, but only the target triples built in to + # rustc (as of 1.40) can be checked against actual config expressions + #{ triple = "x86_64-unknown-linux-musl" }, + # You can also specify which target_features you promise are enabled for a + # particular target. target_features are currently not validated against + # the actual valid features supported by the target architecture. + #{ triple = "wasm32-unknown-unknown", features = ["atomics"] }, +] +# When creating the dependency graph used as the source of truth when checks are +# executed, this field can be used to prune crates from the graph, removing them +# from the view of cargo-deny. This is an extremely heavy hammer, as if a crate +# is pruned from the graph, all of its dependencies will also be pruned unless +# they are connected to another crate in the graph that hasn't been pruned, +# so it should be used with care. The identifiers are [Package ID Specifications] +# (https://doc.rust-lang.org/cargo/reference/pkgid-spec.html) +#exclude = [] +# If true, metadata will be collected with `--all-features`. Note that this can't +# be toggled off if true, if you want to conditionally enable `--all-features` it +# is recommended to pass `--all-features` on the cmd line instead +all-features = false +# If true, metadata will be collected with `--no-default-features`. The same +# caveat with `all-features` applies +no-default-features = false +# If set, these feature will be enabled when collecting metadata. If `--features` +# is specified on the cmd line they will take precedence over this option. +#features = [] +# When outputting inclusion graphs in diagnostics that include features, this +# option can be used to specify the depth at which feature edges will be added. +# This option is included since the graphs can be quite large and the addition +# of features from the crate(s) to all of the graph roots can be far too verbose. +# This option can be overridden via `--feature-depth` on the cmd line +feature-depth = 1 + +# This section is considered when running `cargo deny check advisories` +# More documentation for the advisories section can be found here: +# https://embarkstudios.github.io/cargo-deny/checks/advisories/cfg.html +[advisories] +# The path where the advisory database is cloned/fetched into +db-path = "~/.cargo/advisory-db" +# The url(s) of the advisory databases to use +db-urls = ["https://github.com/rustsec/advisory-db"] +# The lint level for security vulnerabilities +vulnerability = "deny" +# The lint level for unmaintained crates +unmaintained = "warn" +# The lint level for crates that have been yanked from their source registry +yanked = "warn" +# The lint level for crates with security notices. Note that as of +# 2019-12-17 there are no security notice advisories in +# https://github.com/rustsec/advisory-db +notice = "warn" +# A list of advisory IDs to ignore. Note that ignored advisories will still +# output a note when they are encountered. +# These vulnerabilities are all from `aptos-lab/aptos-core` dependencies, which means we are unable to patch them here +ignore = [ + # curve25519-dalek + "RUSTSEC-2024-0344", + # ed25519-dalek + "RUSTSEC-2022-0093", + # libgit2-sys + "RUSTSEC-2024-0013", + # rsa + # This vulnerability has not yet been patched + "RUSTSEC-2023-0071", +] +# Threshold for security vulnerabilities, any vulnerability with a CVSS score +# lower than the range specified will be ignored. Note that ignored advisories +# will still output a note when they are encountered. +# * None - CVSS Score 0.0 +# * Low - CVSS Score 0.1 - 3.9 +# * Medium - CVSS Score 4.0 - 6.9 +# * High - CVSS Score 7.0 - 8.9 +# * Critical - CVSS Score 9.0 - 10.0 +#severity-threshold = + +# If this is true, then cargo deny will use the git executable to fetch advisory database. +# If this is false, then it uses a built-in git library. +# Setting this to true can be helpful if you have special authentication requirements that cargo-deny does not support. +# See Git Authentication for more information about setting up git authentication. +git-fetch-with-cli = true + +# This section is considered when running `cargo deny check licenses` +# More documentation for the licenses section can be found here: +# https://embarkstudios.github.io/cargo-deny/checks/licenses/cfg.html +[licenses] +# The lint level for crates which do not have a detectable license +unlicensed = "deny" +# List of explicitly allowed licenses +# See https://spdx.org/licenses/ for list of possible licenses +# [possible values: any SPDX 3.11 short identifier (+ optional exception)]. +allow = [ + "MIT", + "BSL-1.0", + "0BSD", + "BSD-2-Clause", + "BSD-3-Clause", + "CC0-1.0", + "Apache-2.0", + "Apache-2.0 WITH LLVM-exception", + "Unicode-DFS-2016", + "ISC", + "Unlicense", + "OpenSSL", # ring, imported through ethers-rs + "MPL-2.0", + "Zlib", + "CDDL-1.0", + "MIT-0", +] +# List of explicitly disallowed licenses +# See https://spdx.org/licenses/ for list of possible licenses +# [possible values: any SPDX 3.11 short identifier (+ optional exception)]. +deny = [ + #"Nokia", +] +# Lint level for licenses considered copyleft +copyleft = "deny" +# Blanket approval or denial for OSI-approved or FSF Free/Libre licenses +# * both - The license will be approved if it is both OSI-approved *AND* FSF +# * either - The license will be approved if it is either OSI-approved *OR* FSF +# * osi-only - The license will be approved if is OSI-approved *AND NOT* FSF +# * fsf-only - The license will be approved if is FSF *AND NOT* OSI-approved +# * neither - This predicate is ignored and the default lint level is used +allow-osi-fsf-free = "neither" +# Lint level used when no other predicates are matched +# 1. License isn't in the allow or deny lists +# 2. License isn't copyleft +# 3. License isn't OSI/FSF, or allow-osi-fsf-free = "neither" +default = "deny" +# The confidence threshold for detecting a license from license text. +# The higher the value, the more closely the license text must be to the +# canonical license text of a valid SPDX license file. +# [possible values: any between 0.0 and 1.0]. +confidence-threshold = 0.8 +# Allow 1 or more licenses on a per-crate basis, so that particular licenses +# aren't accepted for every possible crate as with the normal allow list +exceptions = [ + # Each entry is the crate and version constraint, and its specific allow list. + { allow = ["BUSL-1.1"], crate = "aptos-lc" }, + { allow = ["BUSL-1.1"], crate = "aptos-lc-core" }, + { allow = ["BUSL-1.1"], crate = "aptos-programs" }, + { allow = ["BUSL-1.1"], crate = "fixture-generator" }, + { allow = ["BUSL-1.1"], crate = "proof-server" }, + # Remove as soon as https://github.com/aptos-labs/aptos-core/issues/13931 is fixed + { allow = ["GPL-3.0"], crate = "number_range"}, +] + +# Some crates don't have (easily) machine readable licensing information, +# adding a clarification entry for it allows you to manually specify the +# licensing information +#[[licenses.clarify]] +# The name of the crate the clarification applies to +#name = "ring" +# The optional version constraint for the crate +#version = "*" +# The SPDX expression for the license requirements of the crate +#expression = "MIT AND ISC AND OpenSSL" +# One or more files in the crate's source used as the "source of truth" for +# the license expression. If the contents match, the clarification will be used +# when running the license check, otherwise the clarification will be ignored +# and the crate will be checked normally, which may produce warnings or errors +# depending on the rest of your configuration +#license-files = [ + # Each entry is a crate relative path, and the (opaque) hash of its contents + #{ path = "LICENSE", hash = 0xbd0eed23 } +#] +[[licenses.clarify]] +name = "ring" +expression = "MIT AND ISC AND OpenSSL" +license-files = [ + { path = "LICENSE", hash = 0xbd0eed23 } +] + +[[licenses.clarify]] +name = "twirp" +expression = "MIT" +license-files = [ + { path = "../../LICENSE", hash = 0x001c7e6c } +] + +[[licenses.clarify]] +name = "zkhash" +expression = "MIT OR Apache-2.0" +license-files = [ + { path = "../LICENSE-APACHE", hash = 0x001c7e6c }, + { path = "../LICENSE-MIT", hash = 0x001c7e6c } +] + +[[licenses.clarify]] +name = "blake3-zkvm" +expression = "CC0-1.0" +license-files = [ + { path = "../LICENSE", hash = 0xcecda6c2 }, +] + + +[[licenses.clarify]] +name = "halo2" +expression = "MIT OR Apache-2.0" +license-files = [ + { path = "COPYING", hash = 0x106164e0 } +] + +# TODO: Fix the below `hash`es, they are dummy values +[[licenses.clarify]] +name = "abstract-domain-derive" +expression = "Apache-2.0" +license-files = [ + { path = "../../../../../LICENSE", hash = 0x001c7e6c } +] + +[[licenses.clarify]] +name = "aptos-abstract-gas-usage" +expression = "Apache-2.0" +license-files = [ + { path = "../../LICENSE", hash = 0x001c7e6c } +] + +[[licenses.clarify]] +name = "aptos-dkg" +expression = "Apache-2.0" +license-files = [ + { path = "../../LICENSE", hash = 0x001c7e6c } +] + +[licenses.private] +# If true, ignores workspace crates that aren't published, or are only +# published to private registries. +# To see how to mark a crate as unpublished (to the official registry), +# visit https://doc.rust-lang.org/cargo/reference/manifest.html#the-publish-field. +# TODO: This should prevent checking of local workspace crates, but `cargo deny check licenses` +# appears to check e.g. `aptos-lc` +ignore = true +# One or more private registries that you might publish crates to, if a crate +# is only published to private registries, and ignore is true, the crate will +# not have its license(s) checked +registries = [ + #"https://sekretz.com/registry +] +#allow = [ +# #{ name = "ansi_term", version = "=0.11.0" }, +# { name = "aptos-lc", version = "*" }, +# { name = "aptos-programs", version = "*" }, +# { name = "fixture-generator", version = "*" }, +# { name = "proof-server", version = "*" }, +#] + +# This section is considered when running `cargo deny check bans`. +# More documentation about the 'bans' section can be found here: +# https://embarkstudios.github.io/cargo-deny/checks/bans/cfg.html +[bans] +# Lint level for when multiple versions of the same crate are detected +multiple-versions = "warn" +# Lint level for when a crate version requirement is `*` +wildcards = "allow" +# The graph highlighting used when creating dotgraphs for crates +# with multiple versions +# * lowest-version - The path to the lowest versioned duplicate is highlighted +# * simplest-path - The path to the version with the fewest edges is highlighted +# * all - Both lowest-version and simplest-path are used +highlight = "all" +# The default lint level for `default` features for crates that are members of +# the workspace that is being checked. This can be overridden by allowing/denying +# `default` on a crate-by-crate basis if desired. +workspace-default-features = "allow" +# The default lint level for `default` features for external crates that are not +# members of the workspace. This can be overridden by allowing/denying `default` +# on a crate-by-crate basis if desired. +external-default-features = "allow" +# List of crates that are allowed. Use with care! +allow = [ + #{ name = "ansi_term", version = "=0.11.0" }, +] +# List of crates to deny +deny = [ + # Each entry the name of a crate and a version range. If version is + # not specified, all versions will be matched. + #{ name = "ansi_term", version = "=0.11.0" }, + # + # Wrapper crates can optionally be specified to allow the crate when it + # is a direct dependency of the otherwise banned crate + #{ name = "ansi_term", version = "=0.11.0", wrappers = [] }, + "dirs", # use https://crates.io/crates/home instead + "amcl", # use https://github.com/lurk-lab/bls12_381/ instead +] + +# List of features to allow/deny +# Each entry the name of a crate and a version range. If version is +# not specified, all versions will be matched. +#[[bans.features]] +#name = "reqwest" +# Features to not allow +#deny = ["json"] +# Features to allow +#allow = [ +# "rustls", +# "__rustls", +# "__tls", +# "hyper-rustls", +# "rustls", +# "rustls-pemfile", +# "rustls-tls-webpki-roots", +# "tokio-rustls", +# "webpki-roots", +#] +# If true, the allowed features must exactly match the enabled feature set. If +# this is set there is no point setting `deny` +#exact = true + +# Certain crates/versions that will be skipped when doing duplicate detection. +skip = [ + #{ name = "ansi_term", version = "=0.11.0" }, +] +# Similarly to `skip` allows you to skip certain crates during duplicate +# detection. Unlike skip, it also includes the entire tree of transitive +# dependencies starting at the specified crate, up to a certain depth, which is +# by default infinite. +skip-tree = [ + #{ name = "ansi_term", version = "=0.11.0", depth = 20 }, +] + +# This section is considered when running `cargo deny check sources`. +# More documentation about the 'sources' section can be found here: +# https://embarkstudios.github.io/cargo-deny/checks/sources/cfg.html +[sources] +# Lint level for what to happen when a crate from a crate registry that is not +# in the allow list is encountered +unknown-registry = "warn" +# Lint level for what to happen when a crate from a git repository that is not +# in the allow list is encountered +unknown-git = "warn" +# List of URLs for allowed crate registries. Defaults to the crates.io index +# if not specified. If it is specified but empty, no registries are allowed. +allow-registry = ["https://github.com/rust-lang/crates.io-index"] +# List of URLs for allowed Git repositories +allow-git = [] + +[sources.allow-org] +# 1 or more github.com organizations to allow git sources for +# TODO: Enforce the below? +# github = ["lurk-lab"] +# 1 or more gitlab.com organizations to allow git sources for +# gitlab = [""] +# 1 or more bitbucket.org organizations to allow git sources for +# bitbucket = [""] From 267871ce073cfd0cfa73830b1811bbefc6971e67 Mon Sep 17 00:00:00 2001 From: Samuel Burnham <45365069+samuelburnham@users.noreply.github.com> Date: Wed, 10 Jul 2024 02:57:50 -0400 Subject: [PATCH 04/19] ci: Update licenses (#86) --- .github/workflows/rust.yml | 3 +++ .github/workflows/switch-license.yml | 9 +++++++-- aptos/Cargo.toml | 1 + aptos/aptos-programs/Cargo.toml | 2 +- aptos/core/Cargo.toml | 2 +- aptos/light-client/Cargo.toml | 2 +- .../benchmarks/signature-verification/Cargo.toml | 2 +- aptos/programs/epoch-change/Cargo.toml | 2 +- aptos/programs/inclusion/Cargo.toml | 2 +- aptos/proof-server/Cargo.toml | 2 +- aptos/solidity/fixture-generator/Cargo.toml | 2 +- deny.toml | 3 +++ 12 files changed, 22 insertions(+), 10 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index b7ac6fc0..9a660956 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -99,6 +99,9 @@ jobs: - name: Cargo-deny check run: | cargo deny --manifest-path ${{ matrix.package }}/Cargo.toml check + - name: Cargo-deny check programs + run: | + find ${{ matrix.package }}/programs -type d -name "target" -prune -o -type f -name "Cargo.toml" -exec cargo deny --manifest-path {} check \; solidity-unit-tests: needs: changes diff --git a/.github/workflows/switch-license.yml b/.github/workflows/switch-license.yml index 0600f158..7ee3dfe7 100644 --- a/.github/workflows/switch-license.yml +++ b/.github/workflows/switch-license.yml @@ -22,6 +22,11 @@ jobs: run: | cp .github/workflows/assets/APACHE.md aptos/LICENSE.md + - name: Replace Cargo.toml licenses + run: | + sed -i 's/license = "BUSL-1.1"/license = "Apache-2.0"/g' "aptos/Cargo.toml" + find aptos/programs -type d -name "target" -prune -o -type f -name "Cargo.toml" -exec sed -i 's/license = "BUSL-1.1"/license = "Apache-2.0"/g' {} \; + - name: Replace SPDX license headers run: | find aptos -type f -exec sed -i 's|// SPDX-License-Identifier: BUSL-1.1|// SPDX-License-Identifier: Apache-2.0, MIT|g' {} \; @@ -36,7 +41,7 @@ jobs: run: | { echo 'PR_BODY< Date: Thu, 11 Jul 2024 05:06:15 -0400 Subject: [PATCH 05/19] ci: Update fixtures in nightly job (#92) * ci: Update fixtures on a nightly job * Parallelize and test flow * Test E2E * Prep for review * Set to 1 retention day instead of the default (90) * chore: Update fixtures (#94) Co-authored-by: samuelburnham <45365069+samuelburnham@users.noreply.github.com> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/workflows/fixtures.yml | 71 +++++++++++++++++++ .../plonk_fixtures/epoch_change_fixture.json | 4 +- .../src/plonk_fixtures/inclusion_fixture.json | 6 +- 3 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/fixtures.yml diff --git a/.github/workflows/fixtures.yml b/.github/workflows/fixtures.yml new file mode 100644 index 00000000..bef499b2 --- /dev/null +++ b/.github/workflows/fixtures.yml @@ -0,0 +1,71 @@ +# Rebuilds proof fixtures for Solidity and Move (TBD) for smart contract verification tests +# The fixtures are located in `aptos/solidity/contracts/src/plonk_fixtures` +# Then opens a pull request with the changes +# Note: This workflow takes over 30 minutes due to parallel E2E proof generation for `inclusion` and `epoch_change` +name: Update fixtures + +on: + workflow_dispatch: {} + # Once per day at 00:00 UTC + schedule: + - cron: "0 0 * * *" + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + generate-fixtures: + runs-on: warp-ubuntu-latest-x64-32x + strategy: + matrix: + fixture: [inclusion, epoch_change] + steps: + - uses: actions/checkout@v4 + with: + repository: lurk-lab/ci-workflows + - uses: ./.github/actions/ci-env + - uses: actions/checkout@v4 + - name: Setup CI + uses: ./.github/actions/setup + with: + pull_token: ${{ secrets.REPO_TOKEN }} + - name: Generate Solidity `inclusion` fixtures + run: | + cargo run --release -- --program ${{ matrix.fixture }} + working-directory: ${{ github.workspace }}/aptos/solidity/fixture-generator + - name: Check for diff + run: git diff + - name: Upload fixture artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.fixture }}_fixture + path: ${{ github.workspace }}/aptos/solidity/contracts/src/plonk_fixtures/${{ matrix.fixture }}_fixture.json + if-no-files-found: error + overwrite: true + retention-days: 1 + + create-pull-request: + needs: generate-fixtures + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Download inclusion fixture + uses: actions/download-artifact@v4 + with: + path: ${{ github.workspace }}/aptos/solidity/contracts/src/plonk_fixtures/ + pattern: "*_fixture" + merge-multiple: true + - name: Check for diff + run: git diff + - name: Create Pull Request + uses: peter-evans/create-pull-request@v6 + with: + branch: "ci-update-fixtures" + title: "chore: Update fixtures" + commit-message: "chore: Update fixtures" + labels: "automated-issue" + body: | + This is an automated PR updating the proof fixtures for Solidity and Move (TBD), which are used for smart contract verification tests. + + Workflow run: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} diff --git a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json index 8e68dbde..9517edb9 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json @@ -1,5 +1,5 @@ { "vkey": "0x00eea0650222f7e5bb6a2fe57c0e0e504d1df8b3d848d5116174a8703d228c94", "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ecc071f215064bfe6f1c24295135199ce6f6dec2974115fad50989e666915453ad", - "proof": "0x16536f25d0b8df778db5fc2a8aecff55863b9fb148bb99a00b8ecda8439098641d3354e32267a8501c25a399e72e9fd55dfc3cb19b12436751126986027af985105be2085b1e9512b5051b94c272143efc056bf8f2af175a196d70e1cf805baa1c475b29413224ac4aba2e8d8816f13dab4de1d34f69d671e75f7ab5aaa331ed04b203da2f9da209a1a5f2711682dc5f38f69775641a18ef74edf0ec333fb5030c322b15a953f0df182c98fe6fbab369800112b9923f69f27fa7833c59dfa2381e0ff8d0230d8f2003c49377f51367ecf158a8b85387ccb3803ac23e9fa14a84232c6da02d579b00b5fd74f38e6ef6b265cd62ee176557bc8d678596a5b7bb080eb301934e92ff7a45ea7630aac61e0d4ed582491cd3d12d2a2457543f4eee03038e88c5d0af0cef9a3fd4754fd97dba290c08173ae5513724d6aa70cec0a77714debe504d1c068644194b88248ca1cc80156ef403916ff576ee649870e5dce726796a12d4760588a398e019f1c7ad405580e82cd6bf7630d98c1d07b4c41c0c21ed66a0c0f26bd3c6a7746ed7445e644baac76ed6dfbf40c6d56460f56b97cf1ab3741a663b8517c204302c9bd2ce6c34695474484068350c763e372ccf9bc62917d036675b6684919b0bc458dae9f2c03fb8bf1059e85e99188268f1f1fd7e2a889bc9945036e63a3b83f77bb22da5c2057bba9549d7d0cffb1419cb7636c429c89319dcde6c8dc69fb5b9577d4ffca4e0b557d7a885f7af32075c67cc4413263033469f472231c2e6b2e8520e66c8f38744ee4cccb2948661dae364e1d749044202e7166a3d080faac8a404560fcc93553e180d5655b08d20341b89c2187c2e178fd065064fc7a6ef133c88648562ffc4cd18b97e689e06e59ad41672bb922c1778db85f5a498ab09ceb79664f3861f7174012cf9aa79d6d5bbe097c2bb5012092921367f888f00089cd8ad94daa1897d12e15dae4b17adf724762ad425f21645a27f36cf74031942cae24f7e138322e3a4e10bfccc5efd327315ef42a1f2194d3c8943b2fe3453a44003088d76202f5e4e8f434a8a72929d4ab66accef621b16bcd52a4b159660dc015a80887efe73d6a2dce89fd7bb2edae794a2d9c45a1fd380c345114059044001cd15001fd7e81040b4d25f8af0edbd73c62987a9a30e43624946ef6a83898c5530787b6bc30285c019133f3599baba3f55252d7ba9" -} + "proof": "0x2d9e9b1ff5a2ef621e93fc6644fe4bf105a5047623ea57d3abaee2f19c4e13df12688f60aa993a89a41f1b7370f2f8628c09a512b3d9de8077dab5ab8bdd760e0aab26a1f1e51fb59e388df7e0120341e6228fbb5ee4a042ab9cb9fb989abc2e16f4f6a44c681587eb779fb8850697b52057e8abbf9f0d50151ebb62c8cdecda16289de8ff6885778f0372bddd97db453483edb33a351b6bbfdad7908f56b2c7279d7d386b6547daadb601fbe0104dd99adfac31639afea88ecbc3c667f2a7d70853b1c86a25459449ca0867952f19dcf9595fe8e781ead89888d2807455595413ceb1c0fcd8dc84d6a4a7b44d2f55cab9a1126767e41b7f425f881cc374aefa21ed67c51eee57be7ced99d0425917d88fab6f73341e2c1e583140ed370973e621bb3d6c9314e90415728c06eeec6b202b9cea23c4c7f00c2dfef75aaf0ebd502c3c5231de7f6818e96752cc907e99eaa771f77e940ba5c637037fe803ed94142cf618897da36f19664b8a8647f8a56480e68dc03edf4a2fe66ea375621472b623a40c529eb86ad60b243d21503e2019651be1fee5a7219952b12983e2c065db0cf80122f81c0dd2df81818aabdc515b899483cc54305eca1d35db20c733ddaa2a967bcb734a10bb89d7ac4c5cbc043e2c345cc38be729348138938e04d57d99282519ad5633386065fb3b69b15f1731e146e2c92e9a4788581473640a57e1b61de3cf7da95ccf8d9e5eb49705e21ab0cea7038c1082277fae38cff3ccaff29711fc3f3df79eea7084eb323b02996ed2648bc7a1903ed2f14bea7969f08a813d20630d27635e2dcae92a44a620f9937b8e2965c7a710ff58ea6a7c6e60e3fb041c9d9c7d642ed6d6280d08ddf696ff8c4c122060f914b7737c3728e6426e9fe0026ed7118526f6bc862819bf4001ec3e69eaa3d761a9bca4e393c289563d33b222fea0486f5ee8d5dcc76ca25b0c294d5cd42b843f035c93d337135d3f8dd0620f1b5308ea23e2e2ca0acb9b7b0315c7864a061527e0b7b123fabfe1bedd4ec308db5cf82a3a297965dd5edcc87afccc8f37c90f27edb6f6c8658a24f75272de085f8f9a4317fcdb72dc24d5db8a62c0605ad65784bd1e3c11f66bc081c080da2e86a8211214390ecfc4485cc09f63271c630d5a5be32d0f94f2e82815b3fc5614a271c964e6b40a6d7507bdefa0fef2a456564c73acebbd718ada57dbd5f7bb" +} \ No newline at end of file diff --git a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json index 927fe14f..55d55cac 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json @@ -1,5 +1,5 @@ { "vkey": "0x00577bdce64983ba592ae451a43bf8bd57cc5f814df02e0ff0e2bb1c3c7c5af2", - "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ecc18c75854fc4b66a58dda3fd0ce5f839169d6af3375a33db32f96228ced033f3", - "proof": "0x064dff4b8e0f3606fd62691004e6da826916e1d306de9a3a6ec42e590f633dab2d8f4f35acdbf1c96df65817378d22559c807ee5865dcc7cb3f94992ad1e0af02f295558989b14cb713b33dcc8f5e9ce5afcf057f1cd6cb58ef1ed9c60b2b4730c64d4db30cd58b43176e75cb03bafd0c5e39cbea24e0aca3fc155bf6a7f8743122a885af3f58dddd63711db8f596dac53453704ceaf50a66fa505d8db98422422b4c6a11d32f7df896b0710f2a9c5b22dca8775fdc4aa952c7c77945c658b0b25f20098e2a8830f9d37c39a9932d639da7af7b8509829764a7959fc6ffc0c1707c6dea4f3207a71b39fea221f44e96f657a253acb67161ca317b64f5bc6ce1423de2d99b6e5741a95fcc6fa5042f9bc8bd4d5eb255f64fc1ca3fa7ff63cf278108167c677871fcb0cf27b57759dd685842dd78605b27c079579d518fdb85f532f29d116324372b3deecab80cdd739d021099fae9da7781a4b196dbe2386aaad1b1cb1286459be415298c7f2bf589e688b0b560d71eb7778165e48c5b89cad601ac255a5df7013689a15a96f1a30fd2cdb0175af281633fd263c452e5cd8b4be159d295d7845ffd62ecc204586b0d401fa4535d3abf5d665427e1cd38ecf6037016d3ba0780df154e287e61bb44e0cf49c36f41379ff7dd0d477f3ed2d9c8095029536f4d5f6485e31ebaae3e53682097c1b7d05dac5c17fb24082d900b95ef4140b7bdc730639c805e957c14c3218153dfe9644f4e81eb664cadded900c574d1898b07936470c4b45434fc62a893c111e8e50f85af6a8816b07dd64fd9875d122db4fc44ce9fb6b1bbfa3aca904180af186b207602ef590b964b9cd6131c434248e0eb84b2a1a62dd45e0c401fae8a6d73a6f320b7fb0019dbab63f791416310f0fbcfec55f8ddf5957171d7d3b81f81bf06c15b50cbc4c01d37471ba8f99c71abd61811de7f3c3d70acc092b32bc531a8125b2e6aa9fdbdd8fdbc5d5c8e14708ddcfd0cacfd9d6e49f5d9b620833c9f6fce4d607d710751d164ba41e62601614eba8b75dc887c488dd9fd03c88d04801c3ee9a4dec538194edfc34d94596010abaddacb42e65b4a02011311585fa81e3014a5982ead2da7d873d427eae18bc2cad270545015a5d8c93b205195615d9e8889847139d5bc4f992792a4ee05142175f22aac173d381adf575965f1780e11527cbee013166d8e2cfcc2ce231d97b" -} + "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ec76f0388ff2e4d6a514292ca4ca280b35c195cd9ad535ac97651e6e0d7e94fde3", + "proof": "0x24f2d3188a574642159e582be53e430d81299c7bf07d51a3feb961fa4305d87800620ddd57eec371af8e64513b79e212a2ebdeecb9ce2f6e29ecb48489648be20291cd7bb3af3419123b191188082c49c9f654a27af8debe0fc857902406f9c619b09adc38784b8a9427910fa349ca6c6145448d63eb74b1a7bb7faa4fa639bf2edd1003dac1f18e5b893e173cd2a15f7b85c5d1e2f49601955bded6c41b17de0a3fa046e09830ac796c305f047b5d970e8fda7e01d2e84f867dd6f1ebb2409524050e7551f4ad480df0ff2549b15e73453c903a8aef092f91ee695ed3e955e325ea2ca55295fd82e3dc9488217f0556ac3d805a565ec7de241b465912d24d882f000811612977c9805652fe3db29b2eb0f515f0b7ff96569dea6de4c2c9af0215e16a6ecd7d884ec30392e10dda753d02fa16519ee30b741a48ae3b92055e7d09642aa422971f2f616f49adb2a4afbe58c057e0c0e801074602383c27ee69121dd3b2f35b01d30aa0f4d543c77c04f4b1f29da5c11e9fdd6ce4bd405917fd2a03cae2efdf4844b4043d49a036b8c6962c71d84d213c54ca5ffa9f8f66101ef119b7a17801ad4e742383c3f5cf69351abab64098acc65bddb8a38f380db065960a0ae518006aa6113b2e3302983ab2bf5cb099f1da1b3c3ed2116bffac8ea6e324e3b206e2b6562fd212d41c164cbd51f56a36e23568c011e5d7f903691d1da019355c51c97dc387d33561f7047c440fc2df56a41f7c0da71b0aaac4fe3a3ef822068c74d9909e5128b8e38efc1d9efb41b11b7411581289a5a3f1d28e1668422158d1db5741322703ebcbaf92164f47ccbed9c3725183aa4d88d479c47d73ed0dc1007a9415b836dd9cabd2f932008e5771275c93f67fbfdcdeebc67e4358c32a5f25ff8795012340f329115b568ec042563d0d3bc1beb640f4526517006fc92e7eb0b448d4652102634bf168f28a10a81f9879ed7e82e842fdd7617100d0e714c03a65c35c6fa4bc4af963cbeb4d75bd452db69ee97cf3e343eb4280576c9117acbef522179b960799f6fc88e06f59821af4145284576139a70d266e26e02019587ab004e422e768fb361627d25b03f240363f38da387fe8166ad408d6b8b720dfd30f1a287eff776709c9b18caf0ecccb0af3d2314c5964e20c5946b4b4252367a748c36c27355b351b117d7310981c7eae530ea5e5988e70841c8141dc31" +} \ No newline at end of file From f2c427b1b7fbad5490a9b46879df7fd316a78cc1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 10:09:55 -0400 Subject: [PATCH 06/19] chore: Update fixtures (#95) Co-authored-by: tchataigner <9974198+tchataigner@users.noreply.github.com> --- .../contracts/src/plonk_fixtures/epoch_change_fixture.json | 2 +- .../contracts/src/plonk_fixtures/inclusion_fixture.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json index 9517edb9..8f3d2df9 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json @@ -1,5 +1,5 @@ { "vkey": "0x00eea0650222f7e5bb6a2fe57c0e0e504d1df8b3d848d5116174a8703d228c94", "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ecc071f215064bfe6f1c24295135199ce6f6dec2974115fad50989e666915453ad", - "proof": "0x2d9e9b1ff5a2ef621e93fc6644fe4bf105a5047623ea57d3abaee2f19c4e13df12688f60aa993a89a41f1b7370f2f8628c09a512b3d9de8077dab5ab8bdd760e0aab26a1f1e51fb59e388df7e0120341e6228fbb5ee4a042ab9cb9fb989abc2e16f4f6a44c681587eb779fb8850697b52057e8abbf9f0d50151ebb62c8cdecda16289de8ff6885778f0372bddd97db453483edb33a351b6bbfdad7908f56b2c7279d7d386b6547daadb601fbe0104dd99adfac31639afea88ecbc3c667f2a7d70853b1c86a25459449ca0867952f19dcf9595fe8e781ead89888d2807455595413ceb1c0fcd8dc84d6a4a7b44d2f55cab9a1126767e41b7f425f881cc374aefa21ed67c51eee57be7ced99d0425917d88fab6f73341e2c1e583140ed370973e621bb3d6c9314e90415728c06eeec6b202b9cea23c4c7f00c2dfef75aaf0ebd502c3c5231de7f6818e96752cc907e99eaa771f77e940ba5c637037fe803ed94142cf618897da36f19664b8a8647f8a56480e68dc03edf4a2fe66ea375621472b623a40c529eb86ad60b243d21503e2019651be1fee5a7219952b12983e2c065db0cf80122f81c0dd2df81818aabdc515b899483cc54305eca1d35db20c733ddaa2a967bcb734a10bb89d7ac4c5cbc043e2c345cc38be729348138938e04d57d99282519ad5633386065fb3b69b15f1731e146e2c92e9a4788581473640a57e1b61de3cf7da95ccf8d9e5eb49705e21ab0cea7038c1082277fae38cff3ccaff29711fc3f3df79eea7084eb323b02996ed2648bc7a1903ed2f14bea7969f08a813d20630d27635e2dcae92a44a620f9937b8e2965c7a710ff58ea6a7c6e60e3fb041c9d9c7d642ed6d6280d08ddf696ff8c4c122060f914b7737c3728e6426e9fe0026ed7118526f6bc862819bf4001ec3e69eaa3d761a9bca4e393c289563d33b222fea0486f5ee8d5dcc76ca25b0c294d5cd42b843f035c93d337135d3f8dd0620f1b5308ea23e2e2ca0acb9b7b0315c7864a061527e0b7b123fabfe1bedd4ec308db5cf82a3a297965dd5edcc87afccc8f37c90f27edb6f6c8658a24f75272de085f8f9a4317fcdb72dc24d5db8a62c0605ad65784bd1e3c11f66bc081c080da2e86a8211214390ecfc4485cc09f63271c630d5a5be32d0f94f2e82815b3fc5614a271c964e6b40a6d7507bdefa0fef2a456564c73acebbd718ada57dbd5f7bb" + "proof": "0x081a30b89f2c89b515180a6e81faa79f03e12496ba853377a9b372c4201dbbc914cd2657a273de5ac65568768ae06d855445019427febb097a64992c92378b6a23f8b01549169214354e2bd1aeeba3d3367dcb4ab6861d858da06f1dd2b2a5e4029d44460f523252fe09ed623194f5c4b14e5b1a76a96db3e3a0c08cc7a398a71df68264d74da325289eafda7fbcc07e3e1d0e6e068612edc62cb3d152f5786a19b15fd5469a86be6e392424d61ce6627067e410d34d7179331904d4028bbd950b9eb4731b93a17d062319bac73b6506401590b2bfa92074dd782e2d5eb187741277d877ac1d2b6ee65f9aa60e9ff49b66f0c6d9a13952d73416871679fbb53e1e6a06933a414f88df91a46836f2d62c9a1bdbf2b70379c30b9318167b4ea8841cf6675354ce807b6d19137b7f531b2ff817fa44871f94409d624ddade72026b0a6a5a92eed6dfe6b6acdb3653bf3c48326df5b41d32310c43cb5041a80e87141e51322bbc0660241b32adabc328cb3a3e7d79945ac364cf17e562bf59bfd73b1ac8536708f7b67b1a95024d62f0c55dab6311d99139b5d7cc4f4ecd21e40edb0a501224709e7631ccecfba1579e763cf6bd149388a0d96d06264525b7c9f7a02c2b90b65f39c1addad9fbf61c14a9e87765907d9cfb8c340d106a0098dd0d44252411ce17f1073cc67de5054c07a57ebc824e2441f3cdb7588191eef86e489927edcb1efac1d282f9194178463a2d21e188ceedf03e42c14eeddd415a278bbc2d8561db3efc520a7bb5ca924b609aa630ec133bb8a5a121ed830dd7c7bbbb450e3a8b6c490ba2ee6ab93d1645cc34bbfae6049f5eede0ec830de8083f5472c308fe81735443895a75022a0910d10a6785172c01e851ff048fc5221cae0b0d5b2e818af9679730f5156005b9e21ba85595931e974da10b9792300f20aa8d8b1c259bb30e0047f315b49d4575837cdfc7ce141e76ee2cbcefcc206676525f3167039603ba232812778e6bcdaa123175f3d9747a5202711e92d672029b01c4267c13023a44af998c13d9aacd32aa4f43395beaa5d22b74d47bff3cb671cc0346e50fa69b6260eac5a77b28650f13e8d3594e7f4252ae95801557114857ce00db7e07649bbc0dc66c8cfda20a75b4389ff4f1ea9da8daeaa1efa2874eaf9dd0e76c10e881573b4c1e5a9bf134bd2425a8cf335f307b864915919b39ade9b7857c2d" } \ No newline at end of file diff --git a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json index 55d55cac..1a48dc58 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json @@ -1,5 +1,5 @@ { "vkey": "0x00577bdce64983ba592ae451a43bf8bd57cc5f814df02e0ff0e2bb1c3c7c5af2", - "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ec76f0388ff2e4d6a514292ca4ca280b35c195cd9ad535ac97651e6e0d7e94fde3", - "proof": "0x24f2d3188a574642159e582be53e430d81299c7bf07d51a3feb961fa4305d87800620ddd57eec371af8e64513b79e212a2ebdeecb9ce2f6e29ecb48489648be20291cd7bb3af3419123b191188082c49c9f654a27af8debe0fc857902406f9c619b09adc38784b8a9427910fa349ca6c6145448d63eb74b1a7bb7faa4fa639bf2edd1003dac1f18e5b893e173cd2a15f7b85c5d1e2f49601955bded6c41b17de0a3fa046e09830ac796c305f047b5d970e8fda7e01d2e84f867dd6f1ebb2409524050e7551f4ad480df0ff2549b15e73453c903a8aef092f91ee695ed3e955e325ea2ca55295fd82e3dc9488217f0556ac3d805a565ec7de241b465912d24d882f000811612977c9805652fe3db29b2eb0f515f0b7ff96569dea6de4c2c9af0215e16a6ecd7d884ec30392e10dda753d02fa16519ee30b741a48ae3b92055e7d09642aa422971f2f616f49adb2a4afbe58c057e0c0e801074602383c27ee69121dd3b2f35b01d30aa0f4d543c77c04f4b1f29da5c11e9fdd6ce4bd405917fd2a03cae2efdf4844b4043d49a036b8c6962c71d84d213c54ca5ffa9f8f66101ef119b7a17801ad4e742383c3f5cf69351abab64098acc65bddb8a38f380db065960a0ae518006aa6113b2e3302983ab2bf5cb099f1da1b3c3ed2116bffac8ea6e324e3b206e2b6562fd212d41c164cbd51f56a36e23568c011e5d7f903691d1da019355c51c97dc387d33561f7047c440fc2df56a41f7c0da71b0aaac4fe3a3ef822068c74d9909e5128b8e38efc1d9efb41b11b7411581289a5a3f1d28e1668422158d1db5741322703ebcbaf92164f47ccbed9c3725183aa4d88d479c47d73ed0dc1007a9415b836dd9cabd2f932008e5771275c93f67fbfdcdeebc67e4358c32a5f25ff8795012340f329115b568ec042563d0d3bc1beb640f4526517006fc92e7eb0b448d4652102634bf168f28a10a81f9879ed7e82e842fdd7617100d0e714c03a65c35c6fa4bc4af963cbeb4d75bd452db69ee97cf3e343eb4280576c9117acbef522179b960799f6fc88e06f59821af4145284576139a70d266e26e02019587ab004e422e768fb361627d25b03f240363f38da387fe8166ad408d6b8b720dfd30f1a287eff776709c9b18caf0ecccb0af3d2314c5964e20c5946b4b4252367a748c36c27355b351b117d7310981c7eae530ea5e5988e70841c8141dc31" + "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ec0297f7c04d0af3dc881aa05990afd39e98a1aeacd5a99e0dc71f1fdd3123118c", + "proof": "0x2c0c9d3825e0647bea749302987db6f50b1e3edaacba9ee320da5ea487957c6505a968719240d4c6ff3d92514d46a929e1951e715920d6fb32b5ad216b190a4f12cb24b3615ac03808baa0940378bb9bbdfd04ae71cc1705e4ff707a3cdab23a20067c571291acb5ebb8a0b6d33c6485108a8541ec84b05fb7aaa70ddee22a6b05bcbd550bb3a4ea12ec57303691f7c5725a2e5d52875f50eae446241ccfe3db22d7401b207190f99056a58f9ffc6b26ca9fb45dc7f984cc6ebd9202e065cd272685cbc5cd4bf0f261b09f506b93c76e0a9367833b5829290bba0a1884581f8e060d58ace37adba18c511467ae2827eb0e75c0fa2988a52907baa5a2408b28731ae114c558eae421c56187e26d1a8e780e76185d96a9d3c1ce8f9d3fa63f9dea0d68c9f1f0da64d142f52d6873685adf472bde1a591d0b0bf4352096088e89e0284b02d9dc82e9bad44ba94d9b222c76bae6e36785d1ec38b8838a9c138992f401a09c2aa275af69853bd65fc185821a22ada3fefa3fc7db7a9007a9d23cdbd31aa0250203d9b855312283e0fa57f179420392001a0e8ca5962cdcfb409ef714025d14c2833e81d5a953b545022823e62f46ab5f62dcd22f72fc9c1dce05667c14c80b582498aae78dbcba386ffc297b4e99017e20ea8a7310c2e7bf3015eb7627a725fcf27a4a2cd1c921d3eee15368d9c5b69fd5d6deeceb0b9472b9aeac58245cc767efbfa2d0a64823b112a212f1a0e6e454c67ddfd8abc8ab5ceafcc17b2049eb0d8aa46d2bceffa41e75585ccfec99136e879e57da80efb3cf6da057060061cedd13c886c54b1609f9ca6b571f226112ba8d9a48d57c34143a86e320c72e0b2b0807efe546d8ca0d06ff8fa7157692b23eaaee8f02de1cafe18c5e4f6e13a3a41e408869524c0be885003a7515b481a6547787dd9a44aa72520f57aabd2ddc6f14cb417c08ace48b5956974a2505d7eba438e164a9297bcec7d6f62c9e14ad9f7b0f7e9d00914d4cd40cbf6a3279c9e114303847c83743d4acd85d134f048caa6b53c66c851d6fad4f6fc35d5c38c852f6698dd6b222eaa8aa5fb24d3f07a146a146959f9f6d913ec0f0de66dfc70aa2dbc268ae86d32745631af512b929fd22f4981c7c18920e5edc6e80ab503b96f5b66dc43bcea6fe2301da65de2d2098708bbea3e629a7304360f51ef596567da956c73f6e01cf2bd0db8c85c497" } \ No newline at end of file From 7653e1390c5b747ff57bb4a81da3e6d06f2bfc83 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 16:05:01 -0400 Subject: [PATCH 07/19] chore: Update fixtures (#98) Co-authored-by: tchataigner <9974198+tchataigner@users.noreply.github.com> --- .../contracts/src/plonk_fixtures/epoch_change_fixture.json | 2 +- .../contracts/src/plonk_fixtures/inclusion_fixture.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json index 8f3d2df9..5785b05c 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json @@ -1,5 +1,5 @@ { "vkey": "0x00eea0650222f7e5bb6a2fe57c0e0e504d1df8b3d848d5116174a8703d228c94", "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ecc071f215064bfe6f1c24295135199ce6f6dec2974115fad50989e666915453ad", - "proof": "0x081a30b89f2c89b515180a6e81faa79f03e12496ba853377a9b372c4201dbbc914cd2657a273de5ac65568768ae06d855445019427febb097a64992c92378b6a23f8b01549169214354e2bd1aeeba3d3367dcb4ab6861d858da06f1dd2b2a5e4029d44460f523252fe09ed623194f5c4b14e5b1a76a96db3e3a0c08cc7a398a71df68264d74da325289eafda7fbcc07e3e1d0e6e068612edc62cb3d152f5786a19b15fd5469a86be6e392424d61ce6627067e410d34d7179331904d4028bbd950b9eb4731b93a17d062319bac73b6506401590b2bfa92074dd782e2d5eb187741277d877ac1d2b6ee65f9aa60e9ff49b66f0c6d9a13952d73416871679fbb53e1e6a06933a414f88df91a46836f2d62c9a1bdbf2b70379c30b9318167b4ea8841cf6675354ce807b6d19137b7f531b2ff817fa44871f94409d624ddade72026b0a6a5a92eed6dfe6b6acdb3653bf3c48326df5b41d32310c43cb5041a80e87141e51322bbc0660241b32adabc328cb3a3e7d79945ac364cf17e562bf59bfd73b1ac8536708f7b67b1a95024d62f0c55dab6311d99139b5d7cc4f4ecd21e40edb0a501224709e7631ccecfba1579e763cf6bd149388a0d96d06264525b7c9f7a02c2b90b65f39c1addad9fbf61c14a9e87765907d9cfb8c340d106a0098dd0d44252411ce17f1073cc67de5054c07a57ebc824e2441f3cdb7588191eef86e489927edcb1efac1d282f9194178463a2d21e188ceedf03e42c14eeddd415a278bbc2d8561db3efc520a7bb5ca924b609aa630ec133bb8a5a121ed830dd7c7bbbb450e3a8b6c490ba2ee6ab93d1645cc34bbfae6049f5eede0ec830de8083f5472c308fe81735443895a75022a0910d10a6785172c01e851ff048fc5221cae0b0d5b2e818af9679730f5156005b9e21ba85595931e974da10b9792300f20aa8d8b1c259bb30e0047f315b49d4575837cdfc7ce141e76ee2cbcefcc206676525f3167039603ba232812778e6bcdaa123175f3d9747a5202711e92d672029b01c4267c13023a44af998c13d9aacd32aa4f43395beaa5d22b74d47bff3cb671cc0346e50fa69b6260eac5a77b28650f13e8d3594e7f4252ae95801557114857ce00db7e07649bbc0dc66c8cfda20a75b4389ff4f1ea9da8daeaa1efa2874eaf9dd0e76c10e881573b4c1e5a9bf134bd2425a8cf335f307b864915919b39ade9b7857c2d" + "proof": "0x160a89826f2655af86326d972f09b6ee8dac8b912bf98c8527865b01ad441700255f47eefd424d52556e1709d122398ed26ed3428ed6db198c50facb551a1145182ccb75e626fb5a8fcd41ab41e90a7c96eab7cd0fc1eaaac8dd506fdff77764147af6678dd75fbb54d978314d35c1d110e0e51d2158ebf996c1b15130fd16da0e699af750618252365beacdaf18cb391450dd6ff01d612102b3a0f8e2e31f6d0e7c9f2b0cc357e3e848eed511ac9ac43422ec42f4d3dd2de2505ffdc13adbd12bc1579594c0fa123bf7c71a6f8409b7d0b92075dfce5599098f8334770d39ab03bf29c6ac979f481ad87d2515755c1c6105c23c04d43dc6dda241d181a68f510af839045e4fd76b3f0804d5c1276bc0d96f14451db1de3c99ad1c10660b35151e92a92fb50ea85eb772dfbfa9877d4f9727506a1ef542a0708fa9e995df124f1534a3550be9ae332b4b031b942c364805167e9c661c127049759e69a0d98a960b4f82512a96ac4323f4a1c1a7a63be77a14b104017a2a8ce7fc501b96ca12b80b5f81c4aa24b16da57b6788ffbe8dc61db945903bcc3d5b130fe1df19157dee2eb20c2fbf11f1b1ee84a334edf5e3072df65433f51d09fd32ae2b8c5e834edc029885b8a091093181577ba5facda5b7e6a5f12d32f04afce6f1548af9389591286e6dc7bb36a9d8e42066aa7ab145c154b6936f60751ef3a33bb3e898fe81bd05eff1737ac7bcc1dbe1dda79c9f202aee1f9a6c499e8a4f2c09d54b17a8219f18948a4b1a94e17059c590536578a6ac494db2566e5020acbf7dc3b0e17b50be24bedee28dec470646713ac7957f1cad7189bb9b9cebe8059d5502323517d5ad26f9bcb49cda650f7fc05be33115f2d2ce586dd67ad89f24a27ffb7b250e2e3714b0f7b94f9ea98bea81c5cf047d368c4b60cd10a36f62061ecc54d573161bce2661f6dd998f438e82f18d8f05e1d746f06b29be07525990bbf17c3ab424a8bf273221eeaacb90fbac19b84635dc24f58c82e88fe46940c5804d57ac17cfde782330e856a46b4bccc7ac72f6e2fa94a16d518d707b0b96e10fc8facc3f51697012a371bb0f0a10425f94cf27075c0e6ea5e7bc9210f2840c0cca0a6679af793628a30094af6758fae4592fe7722e313a23a07a7381ec3312c13007a6629d588e03e40a5ed7da3a2c920ba40f26eb1fb5421662daa14f581979bb7366b70b22ec" } \ No newline at end of file diff --git a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json index 1a48dc58..fb7a3837 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json @@ -1,5 +1,5 @@ { "vkey": "0x00577bdce64983ba592ae451a43bf8bd57cc5f814df02e0ff0e2bb1c3c7c5af2", - "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ec0297f7c04d0af3dc881aa05990afd39e98a1aeacd5a99e0dc71f1fdd3123118c", - "proof": "0x2c0c9d3825e0647bea749302987db6f50b1e3edaacba9ee320da5ea487957c6505a968719240d4c6ff3d92514d46a929e1951e715920d6fb32b5ad216b190a4f12cb24b3615ac03808baa0940378bb9bbdfd04ae71cc1705e4ff707a3cdab23a20067c571291acb5ebb8a0b6d33c6485108a8541ec84b05fb7aaa70ddee22a6b05bcbd550bb3a4ea12ec57303691f7c5725a2e5d52875f50eae446241ccfe3db22d7401b207190f99056a58f9ffc6b26ca9fb45dc7f984cc6ebd9202e065cd272685cbc5cd4bf0f261b09f506b93c76e0a9367833b5829290bba0a1884581f8e060d58ace37adba18c511467ae2827eb0e75c0fa2988a52907baa5a2408b28731ae114c558eae421c56187e26d1a8e780e76185d96a9d3c1ce8f9d3fa63f9dea0d68c9f1f0da64d142f52d6873685adf472bde1a591d0b0bf4352096088e89e0284b02d9dc82e9bad44ba94d9b222c76bae6e36785d1ec38b8838a9c138992f401a09c2aa275af69853bd65fc185821a22ada3fefa3fc7db7a9007a9d23cdbd31aa0250203d9b855312283e0fa57f179420392001a0e8ca5962cdcfb409ef714025d14c2833e81d5a953b545022823e62f46ab5f62dcd22f72fc9c1dce05667c14c80b582498aae78dbcba386ffc297b4e99017e20ea8a7310c2e7bf3015eb7627a725fcf27a4a2cd1c921d3eee15368d9c5b69fd5d6deeceb0b9472b9aeac58245cc767efbfa2d0a64823b112a212f1a0e6e454c67ddfd8abc8ab5ceafcc17b2049eb0d8aa46d2bceffa41e75585ccfec99136e879e57da80efb3cf6da057060061cedd13c886c54b1609f9ca6b571f226112ba8d9a48d57c34143a86e320c72e0b2b0807efe546d8ca0d06ff8fa7157692b23eaaee8f02de1cafe18c5e4f6e13a3a41e408869524c0be885003a7515b481a6547787dd9a44aa72520f57aabd2ddc6f14cb417c08ace48b5956974a2505d7eba438e164a9297bcec7d6f62c9e14ad9f7b0f7e9d00914d4cd40cbf6a3279c9e114303847c83743d4acd85d134f048caa6b53c66c851d6fad4f6fc35d5c38c852f6698dd6b222eaa8aa5fb24d3f07a146a146959f9f6d913ec0f0de66dfc70aa2dbc268ae86d32745631af512b929fd22f4981c7c18920e5edc6e80ab503b96f5b66dc43bcea6fe2301da65de2d2098708bbea3e629a7304360f51ef596567da956c73f6e01cf2bd0db8c85c497" + "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ece6ca7aeeb0ee18e45c51fe9694ef34c6c14d3717d50f55a883a89a66094955d0", + "proof": "0x1a9b3dd0305428d51b93e8ff855bc534beb9066edc0bb338b22e85d7fbb28fff2c0299187fbd5caf5af49ab4cfc116e39f6b373f3283a81f4f6fe5bd6e9bf2720d041c5d01092f0b66d7673e612464b06d1176cbfd9f524f04652d08a965e91414f8423747938e16fdc028d9aa0b615f397b403ef999aa891b74886e6a06c719235fb438ae76a4ebe0105788707d4201d53234193547372e1199b643e85b248111cac130541ab0a85e37b4543949c98f556a66b978e00c68e65d0b62688f2cac1dffe84b938b25f1eb67955f7e297e4a30866735047d87bd4312df784ddf34c82864605b3af8b5238325513e23fba63751addcb2ee1d46eba2dfd90c73d7118a1c3fbfe2d164063ce78a81f01cdb627852284daa8a30b21a1177dedd160bea7c087fe5412e064279c401a12a722a2325ae787b4b215b42389033003f4512e8741211581db5751e33e0d15403f880ed4f48db7f8da2e17b5498918c189cb1501413ebcda5f64d80a5eb3158a036a24d3b9c31577c1066098cabd4a0e23ba43ea80e2143ec9cbf18d952b466d9ffdbf0b8cfbc225c4c8c3562f0acaa93e40f4cab135d9ab0b308f5f1e3c6180039304a481b7e5ab7544bae0dd616008e72584d1717fc10e55d9b5ec11550b211b9bb5d5bfd257ddc25d58674e37acf465b63245e233824b8ab517b651ac4103d41e608b0ff742bfbee7989c8bdca86a94f909f5d1892fd04bd818e65cd1cdff12d6b146b01372fb0ad6f227e421a4dd229943c05241e38fb1ab6e2e25e99a0fbf5ef89d9eba88db7e5a973eab36d6cbbe30791f222d068f45a2aa4b77f52945528cdcb9b20e6b608c2d93fef7c1d4fd13dcb20871954f885ee6fbb21014005eacff7d7743027a66c448689add56e38529326172c16ff0fb2d96d4aa1cf7fb59eb46a67323fb3d62821952a3c3fae011ec900251c199e7c1b821f04620114aaa39917b7c3bd65178a6b9291ad14092556763cda9d2558c8a32ca532f5ef4959f7887de35261396ae87caa5a09943f372ebbbdef270a4bd996db21ff6dc05fa5ca4fdb8fe9475957cb60e6f167b66381ff737deade08f8b968df02dff71e227034dd9205e515172bd36158fbdfe4d2043d379989a41697b1b704b8e27fbf6ff87a7b2830de1a278b23d0f0bdaf92d57a67944f49ad00c59d81b57a90c9d02e9061dad7b71973e5a9b46cad7c040015641a0b9ee4a9" } \ No newline at end of file From 4d4111c86c3cf78f495601c401d7cdfb0816fe7a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 18 Jul 2024 18:22:43 -0400 Subject: [PATCH 08/19] chore: Update fixtures (#107) Co-authored-by: tchataigner <9974198+tchataigner@users.noreply.github.com> --- .../contracts/src/plonk_fixtures/epoch_change_fixture.json | 2 +- .../contracts/src/plonk_fixtures/inclusion_fixture.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json index 5785b05c..fe97c78c 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json @@ -1,5 +1,5 @@ { "vkey": "0x00eea0650222f7e5bb6a2fe57c0e0e504d1df8b3d848d5116174a8703d228c94", "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ecc071f215064bfe6f1c24295135199ce6f6dec2974115fad50989e666915453ad", - "proof": "0x160a89826f2655af86326d972f09b6ee8dac8b912bf98c8527865b01ad441700255f47eefd424d52556e1709d122398ed26ed3428ed6db198c50facb551a1145182ccb75e626fb5a8fcd41ab41e90a7c96eab7cd0fc1eaaac8dd506fdff77764147af6678dd75fbb54d978314d35c1d110e0e51d2158ebf996c1b15130fd16da0e699af750618252365beacdaf18cb391450dd6ff01d612102b3a0f8e2e31f6d0e7c9f2b0cc357e3e848eed511ac9ac43422ec42f4d3dd2de2505ffdc13adbd12bc1579594c0fa123bf7c71a6f8409b7d0b92075dfce5599098f8334770d39ab03bf29c6ac979f481ad87d2515755c1c6105c23c04d43dc6dda241d181a68f510af839045e4fd76b3f0804d5c1276bc0d96f14451db1de3c99ad1c10660b35151e92a92fb50ea85eb772dfbfa9877d4f9727506a1ef542a0708fa9e995df124f1534a3550be9ae332b4b031b942c364805167e9c661c127049759e69a0d98a960b4f82512a96ac4323f4a1c1a7a63be77a14b104017a2a8ce7fc501b96ca12b80b5f81c4aa24b16da57b6788ffbe8dc61db945903bcc3d5b130fe1df19157dee2eb20c2fbf11f1b1ee84a334edf5e3072df65433f51d09fd32ae2b8c5e834edc029885b8a091093181577ba5facda5b7e6a5f12d32f04afce6f1548af9389591286e6dc7bb36a9d8e42066aa7ab145c154b6936f60751ef3a33bb3e898fe81bd05eff1737ac7bcc1dbe1dda79c9f202aee1f9a6c499e8a4f2c09d54b17a8219f18948a4b1a94e17059c590536578a6ac494db2566e5020acbf7dc3b0e17b50be24bedee28dec470646713ac7957f1cad7189bb9b9cebe8059d5502323517d5ad26f9bcb49cda650f7fc05be33115f2d2ce586dd67ad89f24a27ffb7b250e2e3714b0f7b94f9ea98bea81c5cf047d368c4b60cd10a36f62061ecc54d573161bce2661f6dd998f438e82f18d8f05e1d746f06b29be07525990bbf17c3ab424a8bf273221eeaacb90fbac19b84635dc24f58c82e88fe46940c5804d57ac17cfde782330e856a46b4bccc7ac72f6e2fa94a16d518d707b0b96e10fc8facc3f51697012a371bb0f0a10425f94cf27075c0e6ea5e7bc9210f2840c0cca0a6679af793628a30094af6758fae4592fe7722e313a23a07a7381ec3312c13007a6629d588e03e40a5ed7da3a2c920ba40f26eb1fb5421662daa14f581979bb7366b70b22ec" + "proof": "0x0ab2a3f76f07021cf8355041b0e80a079ea24e9fe36886d2f2b0fe9f6ca8c1d11460d09b1ce1d3cf50cd5cc0760669b8e8f5629fc0d426050d380152451cceb42b863aca64cbe9e67344a5f4851b78dfc55b157cfb75ac6df0a6e82b64487bf20cfa2c2a004cbaa685d0743c75f31afee3fa2b89a910c41d616a2a0c805cd4f8190e84bf17686dbb04c74b27ba0e79b46c06901c79931bcdd9e36c0aa192398f1b60a06cdcbeef2a2c0d7be5fdcc101cb9de1625966661f763b7f4d380f8c77b1aeca50fea9474242c8342665be9e2b36f99e589c61b5af219c72ac20d7a4f6d01f47105ead257b6a8d4cbad6f0025f9499da47b185a6a29be2a0976350fd3c52978a822a071e2c4828b7a1fdef0745a641e85f0a98d526ab811bc94846a17f220618a59cd47622fb2066de0817b53f74dbf9b496b6c9346ac9bf8ea3e50667d16500b36c88cc53c95a61989eae61bd2d7cabf39fa295d0e303c1ae04e14aa202c98c3188b2bae90cd20f7586a95abf55c943b669238561cd66ca1b4a31ab9d4121da63c61700abc8cd5dc10168781407667ccc4a5c14010bf62e9b969423b7011f55c5a114b4aa35b5b32a4371ec41a7e6c0a99bb8ed9928f1c81d38c1d65981ea57c37621be5cf357a0694051db17a310d87d81824a728960b20a29579ab5509713c982d7b5457bfd6cf995d2093b37070fa8d81e7f130ef35599a3bd6130c1bbec9cb0352e1986e59aa4a0480cdca6b0a280cbc0435dc005beec32483eb3a2c178b87931b1014a8b424cc19c992b5a6c17aa54b013f7401865edc52c1dec226c2b9aa2a25f98925a2171e5e63bb78cb13a30b6099c5cba62a8ff92265f7082a79086c6d603ab1e7e0950d707acb3bc6a929cc5dacd0102b3b7aa29253fac921e2a94b75536d62e6a6585c0f96974a236f2740fa0d249fb5ad4facfe3cc4d605901c9cf8931d8f2b87db2535a44f14e2c3e01ef4b98e8ea259c1decd2a4ee01e0406c20e0523faddd984577b94f688517d0d930346d18ed029331b8818e2f6168201bfb0ecc95d72b83957e916e5d79a5aaafbd2e6018fc9164b369cd732231dc4501b768ca50f25b7655a28ad83fd1bea600fa5e8cdd59c776adc17bd36890c30e071749d843cb7a1d2f964ad6e4a01d5595b848f5faef51c286a8b01e77015a5c0d1b9d05e0b287b288c582fb3dfd8d108370b7e1873630bb2aec4f4c869" } \ No newline at end of file diff --git a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json index fb7a3837..e3576386 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json @@ -1,5 +1,5 @@ { "vkey": "0x00577bdce64983ba592ae451a43bf8bd57cc5f814df02e0ff0e2bb1c3c7c5af2", - "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ece6ca7aeeb0ee18e45c51fe9694ef34c6c14d3717d50f55a883a89a66094955d0", - "proof": "0x1a9b3dd0305428d51b93e8ff855bc534beb9066edc0bb338b22e85d7fbb28fff2c0299187fbd5caf5af49ab4cfc116e39f6b373f3283a81f4f6fe5bd6e9bf2720d041c5d01092f0b66d7673e612464b06d1176cbfd9f524f04652d08a965e91414f8423747938e16fdc028d9aa0b615f397b403ef999aa891b74886e6a06c719235fb438ae76a4ebe0105788707d4201d53234193547372e1199b643e85b248111cac130541ab0a85e37b4543949c98f556a66b978e00c68e65d0b62688f2cac1dffe84b938b25f1eb67955f7e297e4a30866735047d87bd4312df784ddf34c82864605b3af8b5238325513e23fba63751addcb2ee1d46eba2dfd90c73d7118a1c3fbfe2d164063ce78a81f01cdb627852284daa8a30b21a1177dedd160bea7c087fe5412e064279c401a12a722a2325ae787b4b215b42389033003f4512e8741211581db5751e33e0d15403f880ed4f48db7f8da2e17b5498918c189cb1501413ebcda5f64d80a5eb3158a036a24d3b9c31577c1066098cabd4a0e23ba43ea80e2143ec9cbf18d952b466d9ffdbf0b8cfbc225c4c8c3562f0acaa93e40f4cab135d9ab0b308f5f1e3c6180039304a481b7e5ab7544bae0dd616008e72584d1717fc10e55d9b5ec11550b211b9bb5d5bfd257ddc25d58674e37acf465b63245e233824b8ab517b651ac4103d41e608b0ff742bfbee7989c8bdca86a94f909f5d1892fd04bd818e65cd1cdff12d6b146b01372fb0ad6f227e421a4dd229943c05241e38fb1ab6e2e25e99a0fbf5ef89d9eba88db7e5a973eab36d6cbbe30791f222d068f45a2aa4b77f52945528cdcb9b20e6b608c2d93fef7c1d4fd13dcb20871954f885ee6fbb21014005eacff7d7743027a66c448689add56e38529326172c16ff0fb2d96d4aa1cf7fb59eb46a67323fb3d62821952a3c3fae011ec900251c199e7c1b821f04620114aaa39917b7c3bd65178a6b9291ad14092556763cda9d2558c8a32ca532f5ef4959f7887de35261396ae87caa5a09943f372ebbbdef270a4bd996db21ff6dc05fa5ca4fdb8fe9475957cb60e6f167b66381ff737deade08f8b968df02dff71e227034dd9205e515172bd36158fbdfe4d2043d379989a41697b1b704b8e27fbf6ff87a7b2830de1a278b23d0f0bdaf92d57a67944f49ad00c59d81b57a90c9d02e9061dad7b71973e5a9b46cad7c040015641a0b9ee4a9" + "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ece0c349e7116c4aa4ba5a4b1832cc45808f7d89ecb4efe83fac1f24c758c0eca7", + "proof": "0x2db8d2a64af16f2fb0d2f82cfba3214b75a4775cefb8f39c7c71c74cf004006a13a147755f4bdd4a1fb21fd86c252394d3bdbc70073b7017c55700f0ea6e1ee51e71b343780113c20a5d0fe086a4ba277f2137c85c9daea3e287eb9b8fb2e4270f304d5d1d8b2c6db462f62d25e4ed2407b675cbdebf339074759a442c3a35bc2693769900cd1e61e605c4583e6978a1bf284269b4ccd5ae4a0843334f1fe7102d10661afbb249ba4a64c47339036af28c5d746eb48663e2572ba85d2b4d509207b7ce3a330a13b636b2676bbe8dc97e2b2899dcffe716ce3a5c589affb352d10033d67cba4cb92940fce53204fd8c06ff1b4344089633fcdd25afe127e5f85006549651ce0cdc0bcb46a864ec2b617670f8555fa630a33b26143fe1f26109a61198ceb16845059ed1544880ff5d7d83d6c4b7a73ef1c362ea1bccf0fde219ab2b9db243bda19739178ad58e3503e23f7918c74c35494fbe6654a75ddb25702218cdcc4aea1232aa0765cad209e033a776f491e27c5746a725bb9a8ce42e3163259cc7bd1cb9519ca680531854b3e042cb573b0df2efa09a9c1310537dc6d99b27809fe789a900cfe0d3bcd09bf02ef8022e5c39c25f3af8a2c1a87fbfe3bb540b6a38df67e677f983d29ef376f41a2597780df263d7e0b99cfc120fc1c59d9f00b522b4c0dd18aa89f4d30e4fdc37e07d426933ef8bca6455445e33c32614a018355650aad11620b4744963031d575cc9352300b7b0a258cd87874aadee27b4109244b97ee68b957f7a001c53e395e183e8ad91cb5b48bd6cd6202673c39f631d65f57e29e33270d00dbcf4005099bbe6c8e6947eb66da7afc15734768adde72adfd5f5b4e52b4cb9d5a7b879dca345d1b4c525e80b026e2122145578c83f220644a2ef5287787b804a6c5b2a6ee15518c36121f37c28831d4f9d87afac78ec05becde3a64266bb4d651d33f95c6294640f660b5c79367618369478275101392d935110c9c55b98483fe8fab055cc31c6b2a979f63e1e6e3efbf6f7ef8148140a3c85d4fb509dc004588cde7b28d75bab0eaa7e47dff5ec442d67e74a27ecd722b2697838731cc60ceabf191532bafaf61265121c93ff3efffc5275e1284a022b3ea544aa3c71bc5c755dd38697bdb4d689aa7d5853501e58d5d009c5586dfc004f15bb0de857e79c1c543eef33226b02859091ae9058c75b388bcaf40dcc8d" } \ No newline at end of file From d93e6859ae31df0e59a7742e31ced2dcd361b626 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 08:54:52 -0400 Subject: [PATCH 09/19] chore: Update fixtures (#114) Co-authored-by: tchataigner <9974198+tchataigner@users.noreply.github.com> --- .../contracts/src/plonk_fixtures/epoch_change_fixture.json | 2 +- .../contracts/src/plonk_fixtures/inclusion_fixture.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json index fe97c78c..f16b4fb5 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json @@ -1,5 +1,5 @@ { "vkey": "0x00eea0650222f7e5bb6a2fe57c0e0e504d1df8b3d848d5116174a8703d228c94", "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ecc071f215064bfe6f1c24295135199ce6f6dec2974115fad50989e666915453ad", - "proof": "0x0ab2a3f76f07021cf8355041b0e80a079ea24e9fe36886d2f2b0fe9f6ca8c1d11460d09b1ce1d3cf50cd5cc0760669b8e8f5629fc0d426050d380152451cceb42b863aca64cbe9e67344a5f4851b78dfc55b157cfb75ac6df0a6e82b64487bf20cfa2c2a004cbaa685d0743c75f31afee3fa2b89a910c41d616a2a0c805cd4f8190e84bf17686dbb04c74b27ba0e79b46c06901c79931bcdd9e36c0aa192398f1b60a06cdcbeef2a2c0d7be5fdcc101cb9de1625966661f763b7f4d380f8c77b1aeca50fea9474242c8342665be9e2b36f99e589c61b5af219c72ac20d7a4f6d01f47105ead257b6a8d4cbad6f0025f9499da47b185a6a29be2a0976350fd3c52978a822a071e2c4828b7a1fdef0745a641e85f0a98d526ab811bc94846a17f220618a59cd47622fb2066de0817b53f74dbf9b496b6c9346ac9bf8ea3e50667d16500b36c88cc53c95a61989eae61bd2d7cabf39fa295d0e303c1ae04e14aa202c98c3188b2bae90cd20f7586a95abf55c943b669238561cd66ca1b4a31ab9d4121da63c61700abc8cd5dc10168781407667ccc4a5c14010bf62e9b969423b7011f55c5a114b4aa35b5b32a4371ec41a7e6c0a99bb8ed9928f1c81d38c1d65981ea57c37621be5cf357a0694051db17a310d87d81824a728960b20a29579ab5509713c982d7b5457bfd6cf995d2093b37070fa8d81e7f130ef35599a3bd6130c1bbec9cb0352e1986e59aa4a0480cdca6b0a280cbc0435dc005beec32483eb3a2c178b87931b1014a8b424cc19c992b5a6c17aa54b013f7401865edc52c1dec226c2b9aa2a25f98925a2171e5e63bb78cb13a30b6099c5cba62a8ff92265f7082a79086c6d603ab1e7e0950d707acb3bc6a929cc5dacd0102b3b7aa29253fac921e2a94b75536d62e6a6585c0f96974a236f2740fa0d249fb5ad4facfe3cc4d605901c9cf8931d8f2b87db2535a44f14e2c3e01ef4b98e8ea259c1decd2a4ee01e0406c20e0523faddd984577b94f688517d0d930346d18ed029331b8818e2f6168201bfb0ecc95d72b83957e916e5d79a5aaafbd2e6018fc9164b369cd732231dc4501b768ca50f25b7655a28ad83fd1bea600fa5e8cdd59c776adc17bd36890c30e071749d843cb7a1d2f964ad6e4a01d5595b848f5faef51c286a8b01e77015a5c0d1b9d05e0b287b288c582fb3dfd8d108370b7e1873630bb2aec4f4c869" + "proof": "0x2ec91d21e2b1270291991559689fb5b0fbd573276484b483dc192de8ca82b11403debc3ed55422399c9d0ae72d4a46639c30e6b1bac068d0ac25b8e040fc6d0010986574c455d0c2282c9a48c19f9c91c1f1d709b978f1f3d1b50166f57aeece0d2713c5455be63ac739a0e270cb65c1bd91d306a153465adc5528183a5df25118eb2df059eb60f13f631b95ef68542eea2be1ac5f4a2f0b088cc2a88303a81f1fe403cce596bbbe1dc9ed2836c1132b764fcd93bef814b7e77b7c1e48ab4692116da1f5db6857fa868043100690ffbeec99e28bce54ef2fe3d8071ad5473d76054a23b5d0cf9d6733ef32929794805191b2493f6c06e7bbb9418ad92361ffc62154e449e2deccb20958d3e2d4e8a4a5c12527d0995f71f350fb7b907d694c1c1e8f8c4103be19cb3596a789c6919037b5bfe694bdb95bfdfa37290c2dc94b311768c6178584606c8fb0112f1d29b00dea64a7166d796b4702af249be54b1652205ae5aa3bc4fe7e8f2862b6e802c1028b5ff422dc6f3f207ab286f073bbe2c920bcae3afdc5b323fe95d56a67f53b095538dfe46ddbed611ad94a3f719870ca280f1fe6cf4798d2c696e2dc6702fbf28138d3a2d4ac0fe3f81f995f8251eb7e2c49d5552d9c24b3cc1a54fff1c381a7c6938972fa563dc6080e471bf2e35f0004c53b860659c85d3a2818e3edc02d03cc5a8982f0ee99a98fe5ae92de1bf1450e8a1f5ba4e1699870c42f4074bb43cd810c0dabbbd24cb4fef9754929a3b1e30fa799b495802b415f41ef3aededa04817d1b3fb0227db9241c3b14e0363a34406265033bb8f81630cb4abae64e5e34331384f6b65ec050f1905042d98695b3c0a2b3babdf0badffa966d1702c4f7fefa50fad15592d8aa2f695acf3b48f8be8174b4ff09b180234c6662eed4912bd8c60caef2f20d97c39b01be6cd19c79b3825835de90d968d3e767ecc3bee7be4a295280c0aa3bce57d859e262f69f181f813b6aea0113567c13c16490544b8dd398169d157a53180954240de6ea06ee939287ba42fbf8bbe2d425069ea0e0363dc93e066047614117d0015682cda9c0b820d3df46dcc0d32a90d48ba64f90872ab776cafb406a668fb32f2ff502dfb596b0351aefa04a892ef0e073566f35e5530e15273ffd337beb1621804d391cb047901a5f4e3f0599d62795b4bd020bbc7b67c2e3b3004a206eb28f6362cc4b256c2" } \ No newline at end of file diff --git a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json index e3576386..eb03feeb 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json @@ -1,5 +1,5 @@ { "vkey": "0x00577bdce64983ba592ae451a43bf8bd57cc5f814df02e0ff0e2bb1c3c7c5af2", - "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ece0c349e7116c4aa4ba5a4b1832cc45808f7d89ecb4efe83fac1f24c758c0eca7", - "proof": "0x2db8d2a64af16f2fb0d2f82cfba3214b75a4775cefb8f39c7c71c74cf004006a13a147755f4bdd4a1fb21fd86c252394d3bdbc70073b7017c55700f0ea6e1ee51e71b343780113c20a5d0fe086a4ba277f2137c85c9daea3e287eb9b8fb2e4270f304d5d1d8b2c6db462f62d25e4ed2407b675cbdebf339074759a442c3a35bc2693769900cd1e61e605c4583e6978a1bf284269b4ccd5ae4a0843334f1fe7102d10661afbb249ba4a64c47339036af28c5d746eb48663e2572ba85d2b4d509207b7ce3a330a13b636b2676bbe8dc97e2b2899dcffe716ce3a5c589affb352d10033d67cba4cb92940fce53204fd8c06ff1b4344089633fcdd25afe127e5f85006549651ce0cdc0bcb46a864ec2b617670f8555fa630a33b26143fe1f26109a61198ceb16845059ed1544880ff5d7d83d6c4b7a73ef1c362ea1bccf0fde219ab2b9db243bda19739178ad58e3503e23f7918c74c35494fbe6654a75ddb25702218cdcc4aea1232aa0765cad209e033a776f491e27c5746a725bb9a8ce42e3163259cc7bd1cb9519ca680531854b3e042cb573b0df2efa09a9c1310537dc6d99b27809fe789a900cfe0d3bcd09bf02ef8022e5c39c25f3af8a2c1a87fbfe3bb540b6a38df67e677f983d29ef376f41a2597780df263d7e0b99cfc120fc1c59d9f00b522b4c0dd18aa89f4d30e4fdc37e07d426933ef8bca6455445e33c32614a018355650aad11620b4744963031d575cc9352300b7b0a258cd87874aadee27b4109244b97ee68b957f7a001c53e395e183e8ad91cb5b48bd6cd6202673c39f631d65f57e29e33270d00dbcf4005099bbe6c8e6947eb66da7afc15734768adde72adfd5f5b4e52b4cb9d5a7b879dca345d1b4c525e80b026e2122145578c83f220644a2ef5287787b804a6c5b2a6ee15518c36121f37c28831d4f9d87afac78ec05becde3a64266bb4d651d33f95c6294640f660b5c79367618369478275101392d935110c9c55b98483fe8fab055cc31c6b2a979f63e1e6e3efbf6f7ef8148140a3c85d4fb509dc004588cde7b28d75bab0eaa7e47dff5ec442d67e74a27ecd722b2697838731cc60ceabf191532bafaf61265121c93ff3efffc5275e1284a022b3ea544aa3c71bc5c755dd38697bdb4d689aa7d5853501e58d5d009c5586dfc004f15bb0de857e79c1c543eef33226b02859091ae9058c75b388bcaf40dcc8d" + "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ec624f290d41a68fa0eb3d8e64fc249be0a115292bb166c407060600bd3ab07304", + "proof": "0x11de84aafca40510106a0be3228c1a99caa1af0ea32f2e665ab4678e6d35e539137adc9011ff96e4869ec1458e22cd2b9dedabd57d51241123bc23d90731d9582973a406ae4caa93fbfa2cb3730235860798efa59d4dc7e11dd0a75e4217637201158f2ba042a68b3b2a52910c09f19dc1f9bb72b161e22d6449424f65c4d836051120fae0e3c5aef698ce62ea47c68d6fa740d42a59b433a7a928b1a2cfbf2f10161fc3d2bb09da887bee987b3709656eed31fe6f401a9bdc9d036ce97754de1868c647343e64bfbbf8e11ffce6ac9d1cf8798d6be1db1208e776ce6dfcb5722dc53a5795aeccf2f80284739e327fff780d77d730eec55906d5371dad416a4a29bf1cfcaf848d82d58bf05c85c38ffe32bbf3e633f3fc84add7e1d50d381439026fc04105b103fa00120bbd7d2daed733ae7ad7cfd7af3b9a08f0866b31f6770d3bfaacd3cf32d67b818dfe633a8178e1c073d5caba4e4225914c34439b6fe323b3baecb6aba5e51e7b37b30cf29bc001984a1dbf5f3dca3845718a661ef7991300aed35292de53c8d0bde8d6f287a10fe04d9af8b94c8814f50d74d00f3a6b2afe4815560ba0578f02b58394832f7da63323e1fdc92df63b5155f52701efa30c8ce9b14749aa1fe91f20fe111741bb17917c22084a911655cfa9273cdb4fa01f9a7f4e5e0fc4607e33d88114d88b68416e88f672e7be50469f0baea0c4b97601f18471aaa6e4665d68867a84be30d047765535010a1bf6add9971a14fe91180319007d02a33be97f17c64844caab752b6c5b900880a45c15f7627fef9e02d9034053701b6db54942a29228d063e5081a20ced2ac0d0d82275bcbf8adfbd2981a5bf80e2822065ae01a3fad0a83dd8c4b50dad0a8a8d8b627b26733e801c49429d5765b50bbe9c786757b94b7fff864d987eda652ae657f27f356efe3f7582109c7d27f6dc56fe3edf6f5cbdba250aba1796b91b19a77b1ed1a76a50f742ac21dab1719f29e0d5ff72be5cdf827821320189e457898653004c415215f19d1d004ec4f70f1013f4755ad8ab0b879a9f610cfd86cbcc2e78da0ff1944de4d2a641543af3c398388f5646260e841fd8e9d63ff75b74a7e8edff7b8fde809d0e4eb2912a9c85bab01292b4d4027f357a0c391c65dbba1c5862cadb5888749a84c260cbbfcc2b32462b5251988011d51e67163c995b5aab28a1966b719453af19350" } \ No newline at end of file From 2474fef48a098bc537e3353bfb242738e97ada86 Mon Sep 17 00:00:00 2001 From: Artem Storozhuk Date: Mon, 22 Jul 2024 20:14:09 +0200 Subject: [PATCH 10/19] feat: Wrapper contract with additional LC protocol-specific checks (#111) * feat: Add stub for Wrapper contract * feat: Refactoring * feat: Add logic for updating the signer hash * chore: Fix compiler warnings * chore: Add access control to signer hash setter * feat: Include block_id, key and value into inclusion program output * chore: Update wrapper contract testing * feat: Use block hash as unique block identifier * chore: Requested changes --- .gitmodules | 3 + aptos/Cargo.lock | 8 +- .../benchmarks/signature-verification-program | Bin 348728 -> 348812 bytes .../artifacts/epoch-change-program | Bin 362240 -> 362328 bytes .../artifacts/inclusion-program | Bin 375104 -> 375512 bytes aptos/core/src/types/block_info.rs | 1 + aptos/core/src/types/ledger_info.rs | 4 + aptos/docs/src/design/inclusion_proof.md | 3 + aptos/docs/src/design/overview.md | 2 +- aptos/light-client/benches/inclusion.rs | 24 +++ aptos/light-client/src/inclusion.rs | 9 + aptos/programs/inclusion/src/main.rs | 21 ++- aptos/solidity/contracts/lib/forge-std | 2 +- .../contracts/lib/openzeppelin-contracts | 1 + aptos/solidity/contracts/lib/sphinx-contracts | 2 +- aptos/solidity/contracts/remappings.txt | 1 + aptos/solidity/contracts/src/EpochChange.sol | 15 -- aptos/solidity/contracts/src/Inclusion.sol | 15 -- aptos/solidity/contracts/src/Wrapper.sol | 109 ++++++++++++ .../src/plonk_fixtures/inclusion_fixture.json | 8 +- .../contracts/test/test_lc_proofs.sol | 104 ----------- .../contracts/test/test_lc_proofs.t.sol | 162 ++++++++++++++++++ 22 files changed, 342 insertions(+), 152 deletions(-) create mode 160000 aptos/solidity/contracts/lib/openzeppelin-contracts delete mode 100644 aptos/solidity/contracts/src/EpochChange.sol delete mode 100644 aptos/solidity/contracts/src/Inclusion.sol create mode 100644 aptos/solidity/contracts/src/Wrapper.sol delete mode 100644 aptos/solidity/contracts/test/test_lc_proofs.sol create mode 100644 aptos/solidity/contracts/test/test_lc_proofs.t.sol diff --git a/.gitmodules b/.gitmodules index f0832068..fac182b3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -6,3 +6,6 @@ [submodule "aptos/solidity/contracts/lib/sphinx-contracts"] path = aptos/solidity/contracts/lib/sphinx-contracts url = https://github.com/lurk-lab/sphinx-contracts +[submodule "aptos/solidity/contracts/lib/openzeppelin-contracts"] + path = aptos/solidity/contracts/lib/openzeppelin-contracts + url = https://github.com/openzeppelin/openzeppelin-contracts diff --git a/aptos/Cargo.lock b/aptos/Cargo.lock index 093c0c9b..a0065d4a 100644 --- a/aptos/Cargo.lock +++ b/aptos/Cargo.lock @@ -7026,9 +7026,9 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.64" +version = "0.10.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" dependencies = [ "bitflags 2.5.0", "cfg-if", @@ -7058,9 +7058,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.102" +version = "0.9.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" dependencies = [ "cc", "libc", diff --git a/aptos/aptos-programs/artifacts/benchmarks/signature-verification-program b/aptos/aptos-programs/artifacts/benchmarks/signature-verification-program index 6c0e19b2832e508870de3b7cfad80b448ddb1a25..6a161dd9f1094e37e475aec72ced59a493f9edcc 100755 GIT binary patch delta 89717 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 RbXmrKqsw!=+cjFp{{w!qtla589JXJFcv0 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 diff --git a/aptos/aptos-programs/artifacts/epoch-change-program b/aptos/aptos-programs/artifacts/epoch-change-program index 133ab6caf6d00a77effd4fd3fb5d931450ae7015..efe596bd30109bbd384577b760eb382f6f830901 100755 GIT binary patch delta 90145 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 G{{9c?Hx+gO delta 91696 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 HekA=Ds4}ZJ delta 105044 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 z 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 diff --git a/aptos/core/src/types/block_info.rs b/aptos/core/src/types/block_info.rs index 2c471539..baf9be14 100644 --- a/aptos/core/src/types/block_info.rs +++ b/aptos/core/src/types/block_info.rs @@ -34,6 +34,7 @@ pub struct BlockInfo { /// The consensus protocol is executed in rounds, which monotonically increase per epoch. round: Round, /// The identifier (hash) of the block. + #[getset(get_copy = "pub")] id: HashValue, /// The accumulator root hash after executing this block. #[getset(get_copy = "pub")] diff --git a/aptos/core/src/types/ledger_info.rs b/aptos/core/src/types/ledger_info.rs index a5851ec1..7d2632c0 100644 --- a/aptos/core/src/types/ledger_info.rs +++ b/aptos/core/src/types/ledger_info.rs @@ -101,6 +101,10 @@ impl LedgerInfo { self.commit_info.executed_state_id() } + pub fn block_id(&self) -> HashValue { + self.commit_info.id() + } + /// Returns the version of the `LedgerInfo`. /// /// # Returns diff --git a/aptos/docs/src/design/inclusion_proof.md b/aptos/docs/src/design/inclusion_proof.md index c9e58b8b..d150a783 100644 --- a/aptos/docs/src/design/inclusion_proof.md +++ b/aptos/docs/src/design/inclusion_proof.md @@ -43,3 +43,6 @@ end of this document): - **Current `ValidatorVerifier` Hash:** The current validator verifier hash, used to validate the incoming data. - **State Root Hash:** The root hash of the state, derived from the `TransactionInfo::state_checkpoint`. +- **Unique Block Identifier:** The identifier of the current block. +- **Merkle-tree key:** The key that identifies the place/position of the leaf being checked for in the merkle tree. +- **Merkle-tree value:** The hash of the actual value at the position of the merkle tree leaf. diff --git a/aptos/docs/src/design/overview.md b/aptos/docs/src/design/overview.md index 17fc97b1..84ac78f1 100644 --- a/aptos/docs/src/design/overview.md +++ b/aptos/docs/src/design/overview.md @@ -27,6 +27,6 @@ The current Verifying Key Hashes which uniquely identify the specific RISC-V bin [`aptos/aptos-programs/artifacts/`](https://github.com/lurk-lab/zk-light-clients/tree/dev/aptos/aptos-programs/artifacts) directory are: * `epoch_change`: `0x00eea0650222f7e5bb6a2fe57c0e0e504d1df8b3d848d5116174a8703d228c94` -* `inclusion`: `0x00577bdce64983ba592ae451a43bf8bd57cc5f814df02e0ff0e2bb1c3c7c5af2` +* `inclusion`: `0x00336c570224c00161ca7b3c275c24f3968aa09086c31d09d98691bce109f4f6` These values are also present in and used by the [solidity fixtures](../benchmark/on_chain.md). diff --git a/aptos/light-client/benches/inclusion.rs b/aptos/light-client/benches/inclusion.rs index f6426cfe..ce6a05ab 100644 --- a/aptos/light-client/benches/inclusion.rs +++ b/aptos/light-client/benches/inclusion.rs @@ -22,6 +22,7 @@ use aptos_lc::inclusion::{ }; use aptos_lc_core::aptos_test_utils::wrapper::AptosWrapper; use aptos_lc_core::crypto::hash::CryptoHash; +use aptos_lc_core::types::ledger_info::LedgerInfo; use aptos_lc_core::types::trusted_state::TrustedState; use aptos_lc_core::types::validator::ValidatorVerifier; use serde::Serialize; @@ -166,6 +167,29 @@ fn main() { "Merkle root hash mismatch" ); + let block_hash: [u8; 32] = inclusion_proof.public_values.read(); + let lates_li = proving_assets.transaction_proof_assets.latest_li(); + let expected_block_id = LedgerInfo::from_bytes(lates_li).unwrap().block_id(); + assert_eq!( + block_hash.to_vec(), + expected_block_id.to_vec(), + "Block hash mismatch" + ); + + let key: [u8; 32] = inclusion_proof.public_values.read(); + assert_eq!( + key.to_vec(), + proving_assets.sparse_merkle_proof_assets.leaf_key(), + "Merkle tree key mismatch" + ); + + let value: [u8; 32] = inclusion_proof.public_values.read(); + assert_eq!( + value.to_vec(), + proving_assets.sparse_merkle_proof_assets.leaf_hash(), + "Merkle tree value mismatch" + ); + let start_verifying = Instant::now(); proving_assets.verify(black_box(&inclusion_proof)); let verifying_time = start_verifying.elapsed(); diff --git a/aptos/light-client/src/inclusion.rs b/aptos/light-client/src/inclusion.rs index 81b02ec5..b2ac3b7e 100644 --- a/aptos/light-client/src/inclusion.rs +++ b/aptos/light-client/src/inclusion.rs @@ -157,6 +157,9 @@ pub fn generate_keys(client: &ProverClient) -> (SphinxProvingKey, SphinxVerifyin struct InclusionOutput { validator_verifier_hash: [u8; 32], state_hash: [u8; 32], + block_hash: [u8; 32], + key: [u8; 32], + value: [u8; 32], } #[allow(dead_code)] @@ -185,12 +188,18 @@ fn prove_inclusion( // Read output. let validator_verifier_hash = proof.public_values.read::<[u8; 32]>(); let state_hash = proof.public_values.read::<[u8; 32]>(); + let block_hash = proof.public_values.read::<[u8; 32]>(); + let key = proof.public_values.read::<[u8; 32]>(); + let value = proof.public_values.read::<[u8; 32]>(); Ok(( proof, InclusionOutput { validator_verifier_hash, state_hash, + block_hash, + key, + value, }, )) } diff --git a/aptos/programs/inclusion/src/main.rs b/aptos/programs/inclusion/src/main.rs index bc4d06d8..7fa7ed43 100644 --- a/aptos/programs/inclusion/src/main.rs +++ b/aptos/programs/inclusion/src/main.rs @@ -29,6 +29,7 @@ pub fn main() { // Latest verified validator verifier & hash let verified_validator_verifier = sphinx_zkvm::io::read::>(); + sphinx_zkvm::precompiles::unconstrained! { println!("cycle-tracker-end: read_inputs"); } @@ -49,13 +50,9 @@ pub fn main() { sphinx_zkvm::precompiles::unconstrained! { println!("cycle-tracker-start: verify_transaction_inclusion"); } - let expected_root_hash = HashValue::from_slice( - latest_li - .ledger_info() - .transaction_accumulator_hash() - .as_ref(), - ) - .unwrap(); + + let expected_root_hash = latest_li.ledger_info().transaction_accumulator_hash(); + transaction_proof .verify(expected_root_hash, transaction_hash, transaction_index) .expect("verify: could not verify proof"); @@ -100,4 +97,14 @@ pub fn main() { // Commit the state root hash sphinx_zkvm::io::commit(reconstructed_root_hash.as_ref()); + + // Commit current block id + let block_hash = latest_li.ledger_info().block_id(); + sphinx_zkvm::io::commit(block_hash.as_ref()); + + // Commit key + sphinx_zkvm::io::commit(&key); + + // Commit leaf value hash + sphinx_zkvm::io::commit(&leaf_value_hash); } diff --git a/aptos/solidity/contracts/lib/forge-std b/aptos/solidity/contracts/lib/forge-std index 19891e6a..c28115db 160000 --- a/aptos/solidity/contracts/lib/forge-std +++ b/aptos/solidity/contracts/lib/forge-std @@ -1 +1 @@ -Subproject commit 19891e6a0b5474b9ea6827ddb90bb9388f7acfc0 +Subproject commit c28115db8d90ebffb41953cf83aac63130f4bd40 diff --git a/aptos/solidity/contracts/lib/openzeppelin-contracts b/aptos/solidity/contracts/lib/openzeppelin-contracts new file mode 160000 index 00000000..b73bcb23 --- /dev/null +++ b/aptos/solidity/contracts/lib/openzeppelin-contracts @@ -0,0 +1 @@ +Subproject commit b73bcb231fb6f5e7bc973edc75ab7f6c812a2255 diff --git a/aptos/solidity/contracts/lib/sphinx-contracts b/aptos/solidity/contracts/lib/sphinx-contracts index 29f0ef71..57b8995c 160000 --- a/aptos/solidity/contracts/lib/sphinx-contracts +++ b/aptos/solidity/contracts/lib/sphinx-contracts @@ -1 +1 @@ -Subproject commit 29f0ef71249dd18c965c35001854ac3784343f0d +Subproject commit 57b8995c9b281281180fa5d9aa5db7909ea8f95a diff --git a/aptos/solidity/contracts/remappings.txt b/aptos/solidity/contracts/remappings.txt index c40de20e..869d17ea 100644 --- a/aptos/solidity/contracts/remappings.txt +++ b/aptos/solidity/contracts/remappings.txt @@ -1,2 +1,3 @@ forge-std/=lib/forge-std/src/ sphinx-contracts/=lib/sphinx-contracts/contracts/src/ +openzeppelin/=lib/openzeppelin-contracts/contracts/ diff --git a/aptos/solidity/contracts/src/EpochChange.sol b/aptos/solidity/contracts/src/EpochChange.sol deleted file mode 100644 index 9096e8e5..00000000 --- a/aptos/solidity/contracts/src/EpochChange.sol +++ /dev/null @@ -1,15 +0,0 @@ -pragma solidity ^0.8.25; - -import {SphinxVerifier as SphinxPlonkVerifier} from "sphinx-contracts/SphinxVerifier.sol"; - -contract EpochChange is SphinxPlonkVerifier { - bytes32 public epochChangeProgramVkey; - - constructor(bytes32 _epochChangeProgramVkey) { - epochChangeProgramVkey = _epochChangeProgramVkey; - } - - function verifyProof(bytes memory proof, bytes memory publicValues) public view { - this.verifyProof(epochChangeProgramVkey, publicValues, proof); - } -} diff --git a/aptos/solidity/contracts/src/Inclusion.sol b/aptos/solidity/contracts/src/Inclusion.sol deleted file mode 100644 index 8a34321d..00000000 --- a/aptos/solidity/contracts/src/Inclusion.sol +++ /dev/null @@ -1,15 +0,0 @@ -pragma solidity ^0.8.25; - -import {SphinxVerifier as SphinxPlonkVerifier} from "sphinx-contracts/SphinxVerifier.sol"; - -contract Inclusion is SphinxPlonkVerifier { - bytes32 public inclusionProgramVkey; - - constructor(bytes32 _inclusionProgramVkey) { - inclusionProgramVkey = _inclusionProgramVkey; - } - - function verifyProof(bytes memory proof, bytes memory publicValues) public view { - this.verifyProof(inclusionProgramVkey, publicValues, proof); - } -} diff --git a/aptos/solidity/contracts/src/Wrapper.sol b/aptos/solidity/contracts/src/Wrapper.sol new file mode 100644 index 00000000..ab072ee8 --- /dev/null +++ b/aptos/solidity/contracts/src/Wrapper.sol @@ -0,0 +1,109 @@ +pragma solidity ^0.8.25; + +import {console} from "forge-std/Test.sol"; +import {SphinxVerifier as SphinxPlonkVerifier} from "sphinx-contracts/SphinxVerifier.sol"; +import "openzeppelin/access/Ownable.sol"; + +struct SphinxProofFixture { + bytes proof; + bytes publicValues; + bytes32 vkey; +} + +contract Wrapper is SphinxPlonkVerifier, Ownable(msg.sender) { + error ErrorUnexpectedSignerHash(); + error ErrorUnexpectedInclusionFixture(); + error ErrorUnexpectedEpochChangeFixture(); + + bytes32 private signerHash; + + constructor(bytes32 signerHash_) { + signerHash = signerHash_; + } + + function setSignerHash(bytes32 newSignerHash) public onlyOwner { + signerHash = newSignerHash; + } + + function getSignerHash() public view returns (bytes32) { + return signerHash; + } + + function verifyInclusion(SphinxProofFixture memory fixture) public view { + if (fixture.publicValues.length != 32 + 32 + 32 + 32 + 32) { + revert ErrorUnexpectedInclusionFixture(); + } + + // it reverts execution if core verification fails, so no special handling is required + this.verifyProof(fixture.vkey, fixture.publicValues, fixture.proof); + + uint256 offset = 0; + uint256 i = 0; + + bytes memory signerHashFixture = new bytes(32); + for (i = 0; i < 32; i++) { + signerHashFixture[i] = fixture.publicValues[i]; + } + offset += 32; + + bytes memory merkleRootHash = new bytes(32); + for (i = 0; i < 32; i++) { + merkleRootHash[i] = fixture.publicValues[i + offset]; + } + offset += 32; + + bytes memory blockId = new bytes(32); + for (i = 0; i < 32; i++) { + blockId[i] = fixture.publicValues[i + offset]; + } + offset += 32; + + bytes memory key = new bytes(32); + for (i = 0; i < 32; i++) { + key[i] = fixture.publicValues[i + offset]; + } + offset += 32; + + bytes memory value = new bytes(32); + for (i = 0; i < 32; i++) { + value[i] = fixture.publicValues[i + offset]; + } + + if (signerHash != bytes32(signerHashFixture)) { + revert ErrorUnexpectedSignerHash(); + } + + console.log("merkle root hash is: ", uint256(bytes32(merkleRootHash))); + console.log("block identifier is: ", uint256(bytes32(blockId))); + console.log("key is: ", uint256(bytes32(key))); + console.log("value is: ", uint256(bytes32(value))); + + // allow funds transfer + } + + function verifyEpochChange(SphinxProofFixture memory fixture) public { + if (fixture.publicValues.length != 64) { + revert ErrorUnexpectedEpochChangeFixture(); + } + + // it reverts execution if core verification fails, so no special handling is required + this.verifyProof(fixture.vkey, fixture.publicValues, fixture.proof); + + // extract previous and new signer hashes from public values (we are safe here as input validation is performed in the core contract) + bytes memory prevSignerHash = new bytes(32); + bytes memory newSignerHash = new bytes(32); + uint256 offset = 32; + uint256 length = 32; + for (uint8 i = 0; i < length; i++) { + prevSignerHash[i] = fixture.publicValues[i]; + newSignerHash[i] = fixture.publicValues[i + offset]; + } + + if (signerHash != bytes32(prevSignerHash)) { + revert ErrorUnexpectedSignerHash(); + } + + // update signer hash + setSignerHash(bytes32(newSignerHash)); + } +} diff --git a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json index eb03feeb..36b21c4b 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json @@ -1,5 +1,5 @@ { - "vkey": "0x00577bdce64983ba592ae451a43bf8bd57cc5f814df02e0ff0e2bb1c3c7c5af2", - "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ec624f290d41a68fa0eb3d8e64fc249be0a115292bb166c407060600bd3ab07304", - "proof": "0x11de84aafca40510106a0be3228c1a99caa1af0ea32f2e665ab4678e6d35e539137adc9011ff96e4869ec1458e22cd2b9dedabd57d51241123bc23d90731d9582973a406ae4caa93fbfa2cb3730235860798efa59d4dc7e11dd0a75e4217637201158f2ba042a68b3b2a52910c09f19dc1f9bb72b161e22d6449424f65c4d836051120fae0e3c5aef698ce62ea47c68d6fa740d42a59b433a7a928b1a2cfbf2f10161fc3d2bb09da887bee987b3709656eed31fe6f401a9bdc9d036ce97754de1868c647343e64bfbbf8e11ffce6ac9d1cf8798d6be1db1208e776ce6dfcb5722dc53a5795aeccf2f80284739e327fff780d77d730eec55906d5371dad416a4a29bf1cfcaf848d82d58bf05c85c38ffe32bbf3e633f3fc84add7e1d50d381439026fc04105b103fa00120bbd7d2daed733ae7ad7cfd7af3b9a08f0866b31f6770d3bfaacd3cf32d67b818dfe633a8178e1c073d5caba4e4225914c34439b6fe323b3baecb6aba5e51e7b37b30cf29bc001984a1dbf5f3dca3845718a661ef7991300aed35292de53c8d0bde8d6f287a10fe04d9af8b94c8814f50d74d00f3a6b2afe4815560ba0578f02b58394832f7da63323e1fdc92df63b5155f52701efa30c8ce9b14749aa1fe91f20fe111741bb17917c22084a911655cfa9273cdb4fa01f9a7f4e5e0fc4607e33d88114d88b68416e88f672e7be50469f0baea0c4b97601f18471aaa6e4665d68867a84be30d047765535010a1bf6add9971a14fe91180319007d02a33be97f17c64844caab752b6c5b900880a45c15f7627fef9e02d9034053701b6db54942a29228d063e5081a20ced2ac0d0d82275bcbf8adfbd2981a5bf80e2822065ae01a3fad0a83dd8c4b50dad0a8a8d8b627b26733e801c49429d5765b50bbe9c786757b94b7fff864d987eda652ae657f27f356efe3f7582109c7d27f6dc56fe3edf6f5cbdba250aba1796b91b19a77b1ed1a76a50f742ac21dab1719f29e0d5ff72be5cdf827821320189e457898653004c415215f19d1d004ec4f70f1013f4755ad8ab0b879a9f610cfd86cbcc2e78da0ff1944de4d2a641543af3c398388f5646260e841fd8e9d63ff75b74a7e8edff7b8fde809d0e4eb2912a9c85bab01292b4d4027f357a0c391c65dbba1c5862cadb5888749a84c260cbbfcc2b32462b5251988011d51e67163c995b5aab28a1966b719453af19350" -} \ No newline at end of file + "vkey": "0x00336c570224c00161ca7b3c275c24f3968aa09086c31d09d98691bce109f4f6", + "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ec717bd53077eee994cd150d2994d1e1a3ecc0a9b5ec143aa17cfa820e290928d2020202020202020202020202020202020202020202020202020202020202020244fa02feb400a383b1824df6198c7e30cbf60a21838efa46fedf35f760fdf25839d1a3ec2b5d09aee31c1c0c380eef28744673ea3ab7e9d065baccc8d1874ca1", + "proof": "0x038b51043b1100b9d843cfce0a187cfb6bdf1c9f95c531a065749250f9fb2b5f22a99c0775cf63ed37751929792f71e45c14e6e86a94301321a948f21afec25216f332964272112ea57a3440458c1752615d9cbf90b3bbdecf96ad7d7e4bc8c006075a2aab1850765195d0cd057ab7e2ed6cdeede1fdc1d555ef8e3be7b5ac6e06d78255881841702018d850baf20f57ed4395b39e28756ebf2de8e3d25cbf851eefa1f4bbfd4da30ebadab2950ba527bfdf7c5dcda9d40975da8747629e37130718641b94820c27991fded6ae02be1c8cda723774e7f276581c5cf2472ec98f15a2231bbf3a522266b8b4bea49e831cfc4232a8685f2e87b776b719d51efc4219e82921304948426e8e99379848a316f2b15545b23a3fb72163cd2fdd9a5311134b258a6fd45500c55a41fb25dde2faa87cf9fc1278c4ccd40f75e2ead5472709d0173c96cf3941d0398283631ec928c7e971d08481f12fb7c18ebd0f98a88919686d2df9d6fb4727a5b25a0a2845c7bf82f2a2ef2660ab7f4d351149ce7a8a19a82828d73db702539816a894adea73dd658fb7f498b0dae0b175395e41318313aabf1453a2488238c55d4e3c8d0c47fd0aced1d16c61a6b7ae911c60161fcc22389d2536842f635bc3ce974dfa4619df73c05f02ff8679cdfac0f1fda17aad15b54d7a122b17183bc4bdcdd6da90b722db1ffb5da82d3b258c42cc484cf47e26ea75684e725e4fc2061eae3fc11bf28abde59268e5223811aac68af73e8f1b0ba32fcb3e1964ad2db05cddf8a8f6ba3ca46f6a5b03a686f9270a5d553b1fcf194824420f1c617ce53ca02fcf16cc6e1dbadb2bdf70ab79c350016a3494e79418bf53323c07a6b87c9f86feb392ea4bc82d9b2414ddf0813d29e39456cb35b30ab043b3b0898da9db35cd7b406b00f60c3b0067a8eb69b1de0b3664ea4f1ea4201e01db7b2f15f1837862b401a5491d85503ca94773d8bb6e08d7fa6f7ea55d2f717bbaedf65a69ba016292ea374e2960fa864cc3fb2b14ed682a89875748530ff6ec21cb76771a2dac515c8d995259388926b358488dc9ac3e4b7c72452eb806ce36f7d4d017e56c7f4c47d624f7332013e0b426a4ac55330d7e392d305884302ff0704f077d1814901c97f9658cf7dfa3e392fa5d075cba39c765d51bd0e727e37314b9804c67527a7466999dad5a41b26fc49461809991cdbbe8f0218940" +} diff --git a/aptos/solidity/contracts/test/test_lc_proofs.sol b/aptos/solidity/contracts/test/test_lc_proofs.sol deleted file mode 100644 index e3aa5d74..00000000 --- a/aptos/solidity/contracts/test/test_lc_proofs.sol +++ /dev/null @@ -1,104 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.25; - -import {Test, console} from "forge-std/Test.sol"; -import {stdJson} from "forge-std/StdJson.sol"; -import {Inclusion} from "../src/Inclusion.sol"; -import {EpochChange} from "../src/EpochChange.sol"; - -struct SphinxProofFixtureJson { - bytes proof; - bytes publicValues; - bytes32 vkey; -} - -contract SolidityVerificationTest is Test { - using stdJson for string; - - Inclusion public inclusion; - EpochChange public epochChange; - - function loadPlonkInclusionFixture() public view returns (SphinxProofFixtureJson memory) { - string memory root = vm.projectRoot(); - string memory path = string.concat(root, "/src/plonk_fixtures/inclusion_fixture.json"); - string memory json = vm.readFile(path); - bytes memory jsonBytes = json.parseRaw("."); - return abi.decode(jsonBytes, (SphinxProofFixtureJson)); - } - - function loadPlonkEpochChangeFixture() public view returns (SphinxProofFixtureJson memory) { - string memory root = vm.projectRoot(); - string memory path = string.concat(root, "/src/plonk_fixtures/epoch_change_fixture.json"); - string memory json = vm.readFile(path); - bytes memory jsonBytes = json.parseRaw("."); - return abi.decode(jsonBytes, (SphinxProofFixtureJson)); - } - - function setUp() public { - SphinxProofFixtureJson memory plonkInclusionFixture = loadPlonkInclusionFixture(); - inclusion = new Inclusion(plonkInclusionFixture.vkey); - - SphinxProofFixtureJson memory plonkEpochChangeFixture = loadPlonkEpochChangeFixture(); - epochChange = new EpochChange(plonkEpochChangeFixture.vkey); - } - - function testValidInclusionProofPlonk() public view { - SphinxProofFixtureJson memory fixture = loadPlonkInclusionFixture(); - uint256 gasCost = gasleft(); - inclusion.verifyProof(fixture.proof, fixture.publicValues); - console.log("gas cost: ", gasCost - gasleft()); - } - - function testValidEpochChangeProofPlonk() public view { - SphinxProofFixtureJson memory fixture = loadPlonkEpochChangeFixture(); - uint256 gasCost = gasleft(); - epochChange.verifyProof(fixture.proof, fixture.publicValues); - console.log("gas cost: ", gasCost - gasleft()); - } - - // Negative tests with a fake proof - function testFail_FakeProofInclusion() public view { - SphinxProofFixtureJson memory fixture = loadPlonkInclusionFixture(); - bytes memory fakeProof = new bytes(fixture.proof.length); - inclusion.verifyProof(fakeProof, fixture.publicValues); - } - - function testFail_FakeProofEpochChange() public view { - SphinxProofFixtureJson memory fixture = loadPlonkEpochChangeFixture(); - bytes memory fakeProof = new bytes(fixture.proof.length); - epochChange.verifyProof(fakeProof, fixture.publicValues); - } - - // Negative tests with a fake public values (currently failing, need to be enabled if porting v1.0.7-testnet contracts of SP1 to Sphinx) - function _testFail_FakePublicValuesInclusion() public view { - console.log("running testFail_FakePublicValuesInclusion"); - SphinxProofFixtureJson memory fixture = loadPlonkInclusionFixture(); - - bytes memory fakePublicValues = new bytes(fixture.proof.length + 100); - - inclusion.verifyProof(fixture.proof, fakePublicValues); - } - - function _testFail_FakePublicValuesEpochChange() public view { - SphinxProofFixtureJson memory fixture = loadPlonkEpochChangeFixture(); - bytes memory fakePublicValues = new bytes(fixture.proof.length); - epochChange.verifyProof(fixture.proof, fakePublicValues); - } - - // Negative tests with a wrong vk (currently failing, need to be enabled if porting v1.0.7-testnet contracts of SP1 to Sphinx) - function _testFail_WrongVkValuesInclusion() public { - SphinxProofFixtureJson memory plonkEpochChangeFixture = loadPlonkEpochChangeFixture(); - inclusion = new Inclusion(plonkEpochChangeFixture.vkey); // take key of epoch_change program - - SphinxProofFixtureJson memory fixture = loadPlonkInclusionFixture(); - inclusion.verifyProof(fixture.proof, fixture.publicValues); - } - - function _testFail_WrongVkValuesEpochChange() public { - SphinxProofFixtureJson memory plonkInclusionFixture = loadPlonkInclusionFixture(); - epochChange = new EpochChange(plonkInclusionFixture.vkey); // take key of inclusion program - - SphinxProofFixtureJson memory fixture = loadPlonkEpochChangeFixture(); - epochChange.verifyProof(fixture.proof, fixture.publicValues); - } -} diff --git a/aptos/solidity/contracts/test/test_lc_proofs.t.sol b/aptos/solidity/contracts/test/test_lc_proofs.t.sol new file mode 100644 index 00000000..e15d3206 --- /dev/null +++ b/aptos/solidity/contracts/test/test_lc_proofs.t.sol @@ -0,0 +1,162 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.25; + +import {Test} from "forge-std/Test.sol"; +import {stdJson} from "forge-std/StdJson.sol"; +import {Wrapper, SphinxProofFixture} from "../src/Wrapper.sol"; +import {SphinxVerifier} from "sphinx-contracts/SphinxVerifier.sol"; + +contract SolidityVerificationTest is Test { + using stdJson for string; + + uint256 private constant TestValidSignerHash = 0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ec; + uint256 private constant TestUpdatedSignerHash = 0xc071f215064bfe6f1c24295135199ce6f6dec2974115fad50989e666915453ad; + + // valid epoch change fixture for testing purposes + bytes private TestEpochChangeVkey = + abi.encodePacked(hex"00eea0650222f7e5bb6a2fe57c0e0e504d1df8b3d848d5116174a8703d228c94"); + bytes private TestEpochChangePublicValues = abi.encodePacked( + hex"205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ecc071f215064bfe6f1c24295135199ce6f6dec2974115fad50989e666915453ad" + ); + bytes private TestEpochChangeProof = abi.encodePacked( + hex"0ab2a3f76f07021cf8355041b0e80a079ea24e9fe36886d2f2b0fe9f6ca8c1d11460d09b1ce1d3cf50cd5cc0760669b8e8f5629fc0d426050d380152451cceb42b863aca64cbe9e67344a5f4851b78dfc55b157cfb75ac6df0a6e82b64487bf20cfa2c2a004cbaa685d0743c75f31afee3fa2b89a910c41d616a2a0c805cd4f8190e84bf17686dbb04c74b27ba0e79b46c06901c79931bcdd9e36c0aa192398f1b60a06cdcbeef2a2c0d7be5fdcc101cb9de1625966661f763b7f4d380f8c77b1aeca50fea9474242c8342665be9e2b36f99e589c61b5af219c72ac20d7a4f6d01f47105ead257b6a8d4cbad6f0025f9499da47b185a6a29be2a0976350fd3c52978a822a071e2c4828b7a1fdef0745a641e85f0a98d526ab811bc94846a17f220618a59cd47622fb2066de0817b53f74dbf9b496b6c9346ac9bf8ea3e50667d16500b36c88cc53c95a61989eae61bd2d7cabf39fa295d0e303c1ae04e14aa202c98c3188b2bae90cd20f7586a95abf55c943b669238561cd66ca1b4a31ab9d4121da63c61700abc8cd5dc10168781407667ccc4a5c14010bf62e9b969423b7011f55c5a114b4aa35b5b32a4371ec41a7e6c0a99bb8ed9928f1c81d38c1d65981ea57c37621be5cf357a0694051db17a310d87d81824a728960b20a29579ab5509713c982d7b5457bfd6cf995d2093b37070fa8d81e7f130ef35599a3bd6130c1bbec9cb0352e1986e59aa4a0480cdca6b0a280cbc0435dc005beec32483eb3a2c178b87931b1014a8b424cc19c992b5a6c17aa54b013f7401865edc52c1dec226c2b9aa2a25f98925a2171e5e63bb78cb13a30b6099c5cba62a8ff92265f7082a79086c6d603ab1e7e0950d707acb3bc6a929cc5dacd0102b3b7aa29253fac921e2a94b75536d62e6a6585c0f96974a236f2740fa0d249fb5ad4facfe3cc4d605901c9cf8931d8f2b87db2535a44f14e2c3e01ef4b98e8ea259c1decd2a4ee01e0406c20e0523faddd984577b94f688517d0d930346d18ed029331b8818e2f6168201bfb0ecc95d72b83957e916e5d79a5aaafbd2e6018fc9164b369cd732231dc4501b768ca50f25b7655a28ad83fd1bea600fa5e8cdd59c776adc17bd36890c30e071749d843cb7a1d2f964ad6e4a01d5595b848f5faef51c286a8b01e77015a5c0d1b9d05e0b287b288c582fb3dfd8d108370b7e1873630bb2aec4f4c869" + ); + + // valid inclusion fixture for testing purposes + bytes private TestInclusionVkey = + abi.encodePacked(hex"0049db69bb4f4f06cddfb1aa47738ec568589ecb72cce157064391dab5bf749b"); + bytes private TestInclusionPublicValues = abi.encodePacked( + hex"205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ec4921987f359fc1f9482c493bf7378db9fca188451b56fe3007ec8c0105d7c2a9020202020202020202020202020202020202020202020202020202020202020244fa02feb400a383b1824df6198c7e30cbf60a21838efa46fedf35f760fdf25839d1a3ec2b5d09aee31c1c0c380eef28744673ea3ab7e9d065baccc8d1874ca1" + ); + bytes private TestInclusionProof = abi.encodePacked( + hex"19766fbbd87b34a85a37d4553e46adbdefe3d1633ef632c4b3a3dd1cfffb88c623c58ea58729fba3e2d139921d026f80c35c352cfada675f68caa33f5fadafae2c90327aa4b63e76fb8e3cfdfa4dd77e1f7a739bff6c2056378be4a8c2a298850972c1299d56ca6500d1590c074f50c5508c7123fc79b594aa2752b3417821242c094a1df1918b7e42b1d63ef7ce475a2212a24b6c0e4b364a50fd9f259348192930efcd1ec69a0bf4c57d0152bfb77c06493960940735109948865814b508f32acb9dac228c3708b66e17894b65749e0093c6d1bc3efce4dab0e10efd0cb6a00609f7c720e1298aea5fcc0d54ae838c592079b6243e19856a86e619a7217c371b42efdf4853f99e80dbccabb4a6c15404360b606ad684787e207472096b34f81b36e6214b2ecb98a1897f701096aa0cea17ebe12cc01274b78f64dbb385e7e12cfa34313e39c5d7749d78c55b5aa86e1b91eb129d83b63915cb3651772a20f81f2f24cbbe4259192b106742d272409c701a0e16f39e9a1895aa69038f51c34709b18c22ef8af33aa72aac809e4bcf028da2f19506973bf3ada9345e3d760d4a2d40cd9354fbb88b5cb2185b3a0438c9450b822c6809b7029dedcf0a4101c4701d5cfd4cb0c5ca526f2b7a3f8eca95473e666cb8a7db1f54e5c5765c49e4c5132e2b17ab8ebe6262ca821de5e00fcf24bdf06b3a93856fb7933835a18b849cda1d32d128b4c05318b9c08c08b39777bbd9e66d89aae1ff6b675a07fea86a8dd71f9a3c8db30779f58c79a2ab32e7f423fd4896d235c4df610a13792693911b351c240dbf6a1c87cdb5287d5eee80491b1fe322e54e4cb596612573d2a63689c2278a84e391193bc3a6ddab48f522b819d067e77a7f0df1ca4538e401cfec706c0cc2ab73e04805b7ea000bd647a67d4d701de3fc7812c2b5aa22854d9a7d39212742d4b51e4122308e6249b1601b5098ec2926480fca1abb4f7e57c66a846ee203898982369346dd5cdd8d16ed498a663a0ed8c07e0aa1064358363bf282a0d70fdd7328163b0624eeb6981ebe70e9a0c4afffbb09d896b068f8b54e7e4a0d62081e6124a36ec5a174ced54f63e2b75d96d7438395f8ee86195e35b619a29a341b1e44cb366a1d505a7c1b6579e1f0963631df08410ddf88fc44a5540c7296b6273ac8f322f54a991abcd4e9a4a8b174888bfd23b0748bcd5a31d48c1aaa93dc" + ); + + Wrapper wrapper; + + function setUp() public { + bytes32 signer_hash = bytes32(TestValidSignerHash); + wrapper = new Wrapper(signer_hash); + } + + function loadPlonkInclusionFixture() public view returns (SphinxProofFixture memory) { + string memory root = vm.projectRoot(); + string memory path = string.concat(root, "/src/plonk_fixtures/inclusion_fixture.json"); + string memory json = vm.readFile(path); + bytes memory jsonBytes = json.parseRaw("."); + return abi.decode(jsonBytes, (SphinxProofFixture)); + } + + function loadPlonkEpochChangeFixture() public view returns (SphinxProofFixture memory) { + string memory root = vm.projectRoot(); + string memory path = string.concat(root, "/src/plonk_fixtures/epoch_change_fixture.json"); + string memory json = vm.readFile(path); + bytes memory jsonBytes = json.parseRaw("."); + return abi.decode(jsonBytes, (SphinxProofFixture)); + } + + function testValidEpochChangeProofCore() public { + SphinxProofFixture memory fixture = loadPlonkEpochChangeFixture(); + SphinxVerifier core = new SphinxVerifier(); + core.verifyProof(fixture.vkey, fixture.publicValues, fixture.proof); + } + + function testValidInclusionProofCore() public { + SphinxProofFixture memory fixture = loadPlonkInclusionFixture(); + SphinxVerifier core = new SphinxVerifier(); + core.verifyProof(fixture.vkey, fixture.publicValues, fixture.proof); + } + + function testValidInclusionProofPlonk() public view { + SphinxProofFixture memory fixture; + fixture.vkey = bytes32(TestInclusionVkey); + fixture.publicValues = TestInclusionPublicValues; + fixture.proof = TestInclusionProof; + + uint256 gasCost = gasleft(); + wrapper.verifyInclusion(fixture); + require(gasCost - gasleft() < 500000, "Too big gas cost"); + } + + function testValidEpochChangeProofPlonk() public { + SphinxProofFixture memory fixture; + fixture.vkey = bytes32(TestEpochChangeVkey); + fixture.publicValues = TestEpochChangePublicValues; + fixture.proof = TestEpochChangeProof; + + uint256 gasCost = gasleft(); + wrapper.verifyEpochChange(fixture); + require(gasCost - gasleft() < 500000, "Too big gas cost"); + } + + // Negative tests with a fake proof + function testFail_FakeProofInclusion() public view { + SphinxProofFixture memory fixture = loadPlonkInclusionFixture(); + bytes memory fakeProof = new bytes(fixture.proof.length); + fixture.proof = fakeProof; + wrapper.verifyInclusion(fixture); + } + + function testFail_FakeProofEpochChange() public { + SphinxProofFixture memory fixture = loadPlonkEpochChangeFixture(); + bytes memory fakeProof = new bytes(fixture.proof.length); + fixture.proof = fakeProof; + wrapper.verifyEpochChange(fixture); + } + + function testFail_FakePublicValuesInclusion() public view { + SphinxProofFixture memory fixture = loadPlonkInclusionFixture(); + bytes memory fakePublicValues = new bytes(fixture.proof.length + 100); + fixture.publicValues = fakePublicValues; + wrapper.verifyInclusion(fixture); + } + + function testFail_FakePublicValuesEpochChange() public { + SphinxProofFixture memory fixture = loadPlonkEpochChangeFixture(); + bytes memory fakePublicValues = new bytes(fixture.proof.length); + fixture.publicValues = fakePublicValues; + wrapper.verifyEpochChange(fixture); + } + + // Negative tests with a wrong vk (currently failing, need to be enabled if porting v1.0.7-testnet contracts of SP1 to Sphinx) + function testFail_WrongVkValuesInclusion() public view { + SphinxProofFixture memory epochChangeFixture = loadPlonkEpochChangeFixture(); + SphinxProofFixture memory inclusionFixture = loadPlonkInclusionFixture(); + SphinxProofFixture memory inner = inclusionFixture; + inner.vkey = epochChangeFixture.vkey; + // taking vk from epoch change for proof / public values from inclusion + wrapper.verifyInclusion(inner); + } + + function testFail_WrongVkValuesEpochChange() public { + SphinxProofFixture memory inclusionFixture = loadPlonkInclusionFixture(); + SphinxProofFixture memory epochChangefixture = loadPlonkEpochChangeFixture(); + SphinxProofFixture memory inner = epochChangefixture; + inner.vkey = inclusionFixture.vkey; + // taking vk from inclusion for proof / public values from epoch change + wrapper.verifyEpochChange(inner); + } + + function testFailInvalidSignerHashInclusion() public view { + SphinxProofFixture memory fixture = loadPlonkInclusionFixture(); + // alter signer hash which is first 32 bytes + fixture.publicValues[0] = 0xff; + wrapper.verifyInclusion(fixture); + } + + function testFailInvalidSignerHashEpochChange() public { + SphinxProofFixture memory fixture = loadPlonkEpochChangeFixture(); + // alter signer hash which is first 32 bytes + fixture.publicValues[0] = 0xff; + wrapper.verifyEpochChange(fixture); + } + + function testEpochChangeSignerHashUpdate() public { + SphinxProofFixture memory fixture = loadPlonkEpochChangeFixture(); + // use altered public values to make test pass + fixture.publicValues = TestEpochChangePublicValues; + require(wrapper.getSignerHash() == bytes32(TestValidSignerHash), "Unexpected value of signer hash during setup"); + wrapper.verifyEpochChange(fixture); + require(wrapper.getSignerHash() == bytes32(TestUpdatedSignerHash), "Signer hash was not updated"); + } +} From 10ab012ffc37306f675892517fdc079117d28fd9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 24 Jul 2024 10:42:02 -0400 Subject: [PATCH 11/19] chore: Update fixtures (#116) Co-authored-by: tchataigner <9974198+tchataigner@users.noreply.github.com> --- .../contracts/src/plonk_fixtures/epoch_change_fixture.json | 4 ++-- .../contracts/src/plonk_fixtures/inclusion_fixture.json | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json index f16b4fb5..e31eb798 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json @@ -1,5 +1,5 @@ { - "vkey": "0x00eea0650222f7e5bb6a2fe57c0e0e504d1df8b3d848d5116174a8703d228c94", + "vkey": "0x008f0133dc5a02eb31ac769e9e3a2f34da1af34c963bf3ee9a058982a2978cc9", "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ecc071f215064bfe6f1c24295135199ce6f6dec2974115fad50989e666915453ad", - "proof": "0x2ec91d21e2b1270291991559689fb5b0fbd573276484b483dc192de8ca82b11403debc3ed55422399c9d0ae72d4a46639c30e6b1bac068d0ac25b8e040fc6d0010986574c455d0c2282c9a48c19f9c91c1f1d709b978f1f3d1b50166f57aeece0d2713c5455be63ac739a0e270cb65c1bd91d306a153465adc5528183a5df25118eb2df059eb60f13f631b95ef68542eea2be1ac5f4a2f0b088cc2a88303a81f1fe403cce596bbbe1dc9ed2836c1132b764fcd93bef814b7e77b7c1e48ab4692116da1f5db6857fa868043100690ffbeec99e28bce54ef2fe3d8071ad5473d76054a23b5d0cf9d6733ef32929794805191b2493f6c06e7bbb9418ad92361ffc62154e449e2deccb20958d3e2d4e8a4a5c12527d0995f71f350fb7b907d694c1c1e8f8c4103be19cb3596a789c6919037b5bfe694bdb95bfdfa37290c2dc94b311768c6178584606c8fb0112f1d29b00dea64a7166d796b4702af249be54b1652205ae5aa3bc4fe7e8f2862b6e802c1028b5ff422dc6f3f207ab286f073bbe2c920bcae3afdc5b323fe95d56a67f53b095538dfe46ddbed611ad94a3f719870ca280f1fe6cf4798d2c696e2dc6702fbf28138d3a2d4ac0fe3f81f995f8251eb7e2c49d5552d9c24b3cc1a54fff1c381a7c6938972fa563dc6080e471bf2e35f0004c53b860659c85d3a2818e3edc02d03cc5a8982f0ee99a98fe5ae92de1bf1450e8a1f5ba4e1699870c42f4074bb43cd810c0dabbbd24cb4fef9754929a3b1e30fa799b495802b415f41ef3aededa04817d1b3fb0227db9241c3b14e0363a34406265033bb8f81630cb4abae64e5e34331384f6b65ec050f1905042d98695b3c0a2b3babdf0badffa966d1702c4f7fefa50fad15592d8aa2f695acf3b48f8be8174b4ff09b180234c6662eed4912bd8c60caef2f20d97c39b01be6cd19c79b3825835de90d968d3e767ecc3bee7be4a295280c0aa3bce57d859e262f69f181f813b6aea0113567c13c16490544b8dd398169d157a53180954240de6ea06ee939287ba42fbf8bbe2d425069ea0e0363dc93e066047614117d0015682cda9c0b820d3df46dcc0d32a90d48ba64f90872ab776cafb406a668fb32f2ff502dfb596b0351aefa04a892ef0e073566f35e5530e15273ffd337beb1621804d391cb047901a5f4e3f0599d62795b4bd020bbc7b67c2e3b3004a206eb28f6362cc4b256c2" + "proof": "0x10bced43b4c53f8e0bb3e73494ccd44acd9e439bb1770a9a6e75f6b06524acab243bf2fc840732fd2ebea37862bbb1475aa1d9038618bfd1c548c1a14dd0da6205d7d0deb63300accb5e4687013ac4346358221a65fc7dc4040e20e0c2b7b0d714a155bba599565a820a572e9c0fdc6cdd91bd4ae30588b90e6f367f0718e29b18e739d23fe6bef18ae5d04673636d816d199832d3d920dd67c50651257c122723a7bb7115e8dbea8af8869eff3469a50c8a02563832c2d7abf851eb8b5329ba0c22bf8c83da95b8dab27d848a369b573b23f14424e8216a02a93aaefa5425922a7e5602aac650e57e1cd2cd9af98d732d4b02af268d0fc1e106536accb6ba63297bbe706e588f1ab4e8fc7306952555b0fd298a6e459c775eef4c87b04a26dc2191a876e432889c3bb0a3b93af083c8036444af28e595e6b53784681d8307d61bfacc48e53d34a5829f7834fea7c5c0ae95de94bfbbea3b9ff7d00d7e14ca1b0d88ad8cc443b0b75620cce3c80915fb60512c61edd3db8aba8d6a19d95ce8f610d198fc97c4227cd744d034949d703f189d64af2b50f998d5929d73e5dbedbd18e9f9dfcd794980a6e62c669bf2f3f0216d6e0be2653c45957e807eab541557195646ccbd5b305a685de132f78aff681f6ad99973c4fa2861f3009e5bb4b02b0fb8b4cc9bff8a212578be077c736ec25d3a85f6e3ab399dfa344a85481260982644f56593d444ae53edc79ad734e164e265288d06b05d6ca268b6d929f1aab90bc3bc03e4eda255dbb64c4741f4928ed084f0f5e7164f66525ad505ded1a362044f61d854ff0d9cd97f966a922c1bd87becb7d83b293112e28802de6765554b1dc5a36e41eab43e0de45e4721b3ad85ede929636652532b7a184b7e77ac19aa18597233f565f7405adb3e5dda800477f30eea6a7db30e8811d2f694203b58760b5c4060b4ba0bcd5c2c1c8ca9397c8f906a5c4fc1c181daf5249233b7452a9f02e7f2a3715ed6156fa712825e540831e601e75803011861693dccb37bb2d4d8126146f00c3a9397b9e1e1a891ea9f95b71ad2a9ecf5c9bf8c3d0f6f9a8a81a52cae51d343e6814b6f3eadee5ff8773115371cb6f703d7ff0e55ca47e428c2d42d070b3daa1554f5a5360fa3d4e5ca98379fd52800d12b931982cf38ad1f638f15563719a96ea69f42a3ed36e73562a52acccf5e9c8c8a75da7aa3c991b8b9c8" } \ No newline at end of file diff --git a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json index 36b21c4b..60a24f48 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json @@ -1,5 +1,5 @@ { "vkey": "0x00336c570224c00161ca7b3c275c24f3968aa09086c31d09d98691bce109f4f6", - "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ec717bd53077eee994cd150d2994d1e1a3ecc0a9b5ec143aa17cfa820e290928d2020202020202020202020202020202020202020202020202020202020202020244fa02feb400a383b1824df6198c7e30cbf60a21838efa46fedf35f760fdf25839d1a3ec2b5d09aee31c1c0c380eef28744673ea3ab7e9d065baccc8d1874ca1", - "proof": "0x038b51043b1100b9d843cfce0a187cfb6bdf1c9f95c531a065749250f9fb2b5f22a99c0775cf63ed37751929792f71e45c14e6e86a94301321a948f21afec25216f332964272112ea57a3440458c1752615d9cbf90b3bbdecf96ad7d7e4bc8c006075a2aab1850765195d0cd057ab7e2ed6cdeede1fdc1d555ef8e3be7b5ac6e06d78255881841702018d850baf20f57ed4395b39e28756ebf2de8e3d25cbf851eefa1f4bbfd4da30ebadab2950ba527bfdf7c5dcda9d40975da8747629e37130718641b94820c27991fded6ae02be1c8cda723774e7f276581c5cf2472ec98f15a2231bbf3a522266b8b4bea49e831cfc4232a8685f2e87b776b719d51efc4219e82921304948426e8e99379848a316f2b15545b23a3fb72163cd2fdd9a5311134b258a6fd45500c55a41fb25dde2faa87cf9fc1278c4ccd40f75e2ead5472709d0173c96cf3941d0398283631ec928c7e971d08481f12fb7c18ebd0f98a88919686d2df9d6fb4727a5b25a0a2845c7bf82f2a2ef2660ab7f4d351149ce7a8a19a82828d73db702539816a894adea73dd658fb7f498b0dae0b175395e41318313aabf1453a2488238c55d4e3c8d0c47fd0aced1d16c61a6b7ae911c60161fcc22389d2536842f635bc3ce974dfa4619df73c05f02ff8679cdfac0f1fda17aad15b54d7a122b17183bc4bdcdd6da90b722db1ffb5da82d3b258c42cc484cf47e26ea75684e725e4fc2061eae3fc11bf28abde59268e5223811aac68af73e8f1b0ba32fcb3e1964ad2db05cddf8a8f6ba3ca46f6a5b03a686f9270a5d553b1fcf194824420f1c617ce53ca02fcf16cc6e1dbadb2bdf70ab79c350016a3494e79418bf53323c07a6b87c9f86feb392ea4bc82d9b2414ddf0813d29e39456cb35b30ab043b3b0898da9db35cd7b406b00f60c3b0067a8eb69b1de0b3664ea4f1ea4201e01db7b2f15f1837862b401a5491d85503ca94773d8bb6e08d7fa6f7ea55d2f717bbaedf65a69ba016292ea374e2960fa864cc3fb2b14ed682a89875748530ff6ec21cb76771a2dac515c8d995259388926b358488dc9ac3e4b7c72452eb806ce36f7d4d017e56c7f4c47d624f7332013e0b426a4ac55330d7e392d305884302ff0704f077d1814901c97f9658cf7dfa3e392fa5d075cba39c765d51bd0e727e37314b9804c67527a7466999dad5a41b26fc49461809991cdbbe8f0218940" -} + "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ec5c120d8d96b7eb88c6c149cbf4330cf6db1fa09e46bdfd735dfb09644ffad94c020202020202020202020202020202020202020202020202020202020202020244fa02feb400a383b1824df6198c7e30cbf60a21838efa46fedf35f760fdf25839d1a3ec2b5d09aee31c1c0c380eef28744673ea3ab7e9d065baccc8d1874ca1", + "proof": "0x199bfb1a8ed5b150e3b1a904893f5ce3bdda92357d7c9e29ceaf12fa790ae3e42a9af12575cc6d47ef197c1e795359d01b766f7764caeb2df2a0d49402f1d5dd2fbef8721d4ef5a45830c7177b57532e91766ad9c3916ecf407a59730916ba8c0de3b2a6e49af53af04656a1b735755be9ff1f2a76291e1a0cdaab51a9f03e030d4a18502a5c69b5731b090754ad8694271700f34acafcfbeec2ed1c08b1939a038261969842c693e9f9cf1395aa90d0e3abe97170549467f40b44ba6f24332512846e4a7f650486b611e4db10aa09ef3041c32de1837800509d2222466b5e7514fb58a945781831d902f38f801cdbc3d370b7d86818a6452bc508caa1fd777d1bd464eb583efe504c256563990948a87c1fcb299263d6bc645e4e8485d204861bcd00d57fe2f7d1a88796da365c1d1645a8bc3be607ae58ebf9abb894801c881178e2b8dd37d810118d81866a97f199343b4dcfa40d20180f268c3e13e22d9c08fd4ac01b6bbaa54d36db1d98159772dfd799aea93fd06e45ecf66103d09f9e1adb39c39589d562210d2bd1594f2b0677abf5e473392df667b855c5cc5c73bb10effbf041cdae80ab64d08f549f41e32571a772b9c333c559d1badff3298e380f3b298afd0f77c7e365419d7a6dde6ea1949dd19689912a0f8d798f2437c1250a805c4ab682770f4185c1eeabced058954a6546d56b2d48308c81cde05c535700697c4520a9fea4436dd1bc3e7574baf16fff1d51c90cb1479898c7b0b770af1c271e8591dc8273d6df4f543431bd8efe853eb09223717c74e00107b3a582802391b8f7c23872f21ec3cc210288b35963e25595141c1ed7958ba60b1ff36bee153c2561c0a7137ae116df0f0f66e249b82d114eeace355c9b779744a084544008816de42ed7eb575a479aad4b2c9f25b6f76785de49589befbdc1eb35c36e1d04a1aa81997f43c6fc2f2f75e3fa0138b536e6e0adf399e953215f94413b1bb7225b4154946ffa19be8a9d973656dd31a5c5c6e4879e6cf29ce62d27fddf3d3810124b9969a8dd5d8fe1158ad8315486f2527da05082938959ffc35d821638530dfff9a9939095afbfc3a4e599ef9701c87f55afb2f85adbd17359340ae0840804823d552a9abd7cd681751585378a70909be38f5751fe26172263e71ca874262aa6c94f6a758a362ce1159c41585701a6205966ccd59d6ef1211e42ed734b4b" +} \ No newline at end of file From 37bc0eb17fe262321509f3ea361b0cfc1a46607e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 25 Jul 2024 10:40:41 -0400 Subject: [PATCH 12/19] chore: Update fixtures (#120) Co-authored-by: tchataigner <9974198+tchataigner@users.noreply.github.com> --- .../contracts/src/plonk_fixtures/epoch_change_fixture.json | 2 +- .../contracts/src/plonk_fixtures/inclusion_fixture.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json index e31eb798..576fda7a 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json @@ -1,5 +1,5 @@ { "vkey": "0x008f0133dc5a02eb31ac769e9e3a2f34da1af34c963bf3ee9a058982a2978cc9", "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ecc071f215064bfe6f1c24295135199ce6f6dec2974115fad50989e666915453ad", - "proof": "0x10bced43b4c53f8e0bb3e73494ccd44acd9e439bb1770a9a6e75f6b06524acab243bf2fc840732fd2ebea37862bbb1475aa1d9038618bfd1c548c1a14dd0da6205d7d0deb63300accb5e4687013ac4346358221a65fc7dc4040e20e0c2b7b0d714a155bba599565a820a572e9c0fdc6cdd91bd4ae30588b90e6f367f0718e29b18e739d23fe6bef18ae5d04673636d816d199832d3d920dd67c50651257c122723a7bb7115e8dbea8af8869eff3469a50c8a02563832c2d7abf851eb8b5329ba0c22bf8c83da95b8dab27d848a369b573b23f14424e8216a02a93aaefa5425922a7e5602aac650e57e1cd2cd9af98d732d4b02af268d0fc1e106536accb6ba63297bbe706e588f1ab4e8fc7306952555b0fd298a6e459c775eef4c87b04a26dc2191a876e432889c3bb0a3b93af083c8036444af28e595e6b53784681d8307d61bfacc48e53d34a5829f7834fea7c5c0ae95de94bfbbea3b9ff7d00d7e14ca1b0d88ad8cc443b0b75620cce3c80915fb60512c61edd3db8aba8d6a19d95ce8f610d198fc97c4227cd744d034949d703f189d64af2b50f998d5929d73e5dbedbd18e9f9dfcd794980a6e62c669bf2f3f0216d6e0be2653c45957e807eab541557195646ccbd5b305a685de132f78aff681f6ad99973c4fa2861f3009e5bb4b02b0fb8b4cc9bff8a212578be077c736ec25d3a85f6e3ab399dfa344a85481260982644f56593d444ae53edc79ad734e164e265288d06b05d6ca268b6d929f1aab90bc3bc03e4eda255dbb64c4741f4928ed084f0f5e7164f66525ad505ded1a362044f61d854ff0d9cd97f966a922c1bd87becb7d83b293112e28802de6765554b1dc5a36e41eab43e0de45e4721b3ad85ede929636652532b7a184b7e77ac19aa18597233f565f7405adb3e5dda800477f30eea6a7db30e8811d2f694203b58760b5c4060b4ba0bcd5c2c1c8ca9397c8f906a5c4fc1c181daf5249233b7452a9f02e7f2a3715ed6156fa712825e540831e601e75803011861693dccb37bb2d4d8126146f00c3a9397b9e1e1a891ea9f95b71ad2a9ecf5c9bf8c3d0f6f9a8a81a52cae51d343e6814b6f3eadee5ff8773115371cb6f703d7ff0e55ca47e428c2d42d070b3daa1554f5a5360fa3d4e5ca98379fd52800d12b931982cf38ad1f638f15563719a96ea69f42a3ed36e73562a52acccf5e9c8c8a75da7aa3c991b8b9c8" + "proof": "0x2acb18f955dc3e02caeb28dc5282a69d34ea0fa41025b8773c33295fdb09cb3e2e771f7f4523cb97e3993b4891680bee9113e1693836ba81cc8d572cd493236406870eb65a5fb6d15fe08db834e121b08c311051f412c69bb9e964fb26c1097a25f7b2a9bfeac9348f545fad648f434dd2e330af76bbf5f95716b36599e8eb852cde5bbbc7db177e6dab4a06913e84e7f6a42995bd4035b30dc0b2f80a181d0d0ef83f210d29327b32aeb04966b022b32b95834bc30ec1a0d23ebafbff2dd4fa1e47660c998369fd543baf0c0673b89f9dc5a3c3112e7b101cdf7427bcb134642d1653b90e3d33b9c55b01fce9e5b24bcd0c99ffaf6ae132b6080077a8c6c8d52d7eb3418d3379107c7ed174e39c10a67ab631378ddb7eb7477bcc92bbe86a4b01f2b82cb78c36a2f39658881a33f7ff3577e4e18adb7a8f0e9e8a52eb2d843e02d08b55d2c9829b41b54b39687aa3ee7f3d47e6fdbcb88d53a8aa7ec3a740d81efa5bf5b88b0afa9030535ad970085df9c8f7c605681eb26c77791bd253a1cd1df1e6444acc07c138ffd7f200e8c24b59181cf42d3695601ab0f475ad94f59e240ef5287662cb1bc8d593d2ec4f4236d6a9fe626a7742d7db3cfd12cb1aea631adbc98a307aa3428d8c092ce40c7ef54539e312fbc3eff5dbdb67359088852f0889d2b12abbf631ef2f39675e10cffb7608fbd9607f3b73645ab909fc843e99108ed807de5eacf1429d2cdcfd3cb3095bb50299a551ab3e97f651c1804cc82a16657b2df4ea32277a7e0aa9b420f4e5c6f531e32fe985c41ead82c7451ba3db219d790077b98c28ff3f3f55686235c83754ed13b299b1597f9a89ae94b7ab0825440d5e013ea0f6200c42600ef60780535a48e5575ba757658ddf912d2dfa200ee68cc990e617fede5f84ad4bdb1845323c35c5bf2baefd055967eaf7fec2450551b4538c3c4e46da9a98dd130ea2cd23e90e3c18ab6ba0614e7d9cde5baf1f2aaf47136c29a68a59e82f120cde4b5ef646a54a4fa80517b8c0e0b8b7283d44169c1acb122270ac6f238439aa96f2f51431473634e0d853eef0288cbae1042d1d942884490e2e513eaabd345d4c59efc6279a6714d2a424e7bebc7efb195ae82b8123b682534529fab8a6a0f26118af160e02b68711c7f03535eef61929dd2d034a924bf3607b7e9478945a99cd548b88d917f308ad5628db8bf320cb1f0784" } \ No newline at end of file diff --git a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json index 60a24f48..80600ca3 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json @@ -1,5 +1,5 @@ { "vkey": "0x00336c570224c00161ca7b3c275c24f3968aa09086c31d09d98691bce109f4f6", - "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ec5c120d8d96b7eb88c6c149cbf4330cf6db1fa09e46bdfd735dfb09644ffad94c020202020202020202020202020202020202020202020202020202020202020244fa02feb400a383b1824df6198c7e30cbf60a21838efa46fedf35f760fdf25839d1a3ec2b5d09aee31c1c0c380eef28744673ea3ab7e9d065baccc8d1874ca1", - "proof": "0x199bfb1a8ed5b150e3b1a904893f5ce3bdda92357d7c9e29ceaf12fa790ae3e42a9af12575cc6d47ef197c1e795359d01b766f7764caeb2df2a0d49402f1d5dd2fbef8721d4ef5a45830c7177b57532e91766ad9c3916ecf407a59730916ba8c0de3b2a6e49af53af04656a1b735755be9ff1f2a76291e1a0cdaab51a9f03e030d4a18502a5c69b5731b090754ad8694271700f34acafcfbeec2ed1c08b1939a038261969842c693e9f9cf1395aa90d0e3abe97170549467f40b44ba6f24332512846e4a7f650486b611e4db10aa09ef3041c32de1837800509d2222466b5e7514fb58a945781831d902f38f801cdbc3d370b7d86818a6452bc508caa1fd777d1bd464eb583efe504c256563990948a87c1fcb299263d6bc645e4e8485d204861bcd00d57fe2f7d1a88796da365c1d1645a8bc3be607ae58ebf9abb894801c881178e2b8dd37d810118d81866a97f199343b4dcfa40d20180f268c3e13e22d9c08fd4ac01b6bbaa54d36db1d98159772dfd799aea93fd06e45ecf66103d09f9e1adb39c39589d562210d2bd1594f2b0677abf5e473392df667b855c5cc5c73bb10effbf041cdae80ab64d08f549f41e32571a772b9c333c559d1badff3298e380f3b298afd0f77c7e365419d7a6dde6ea1949dd19689912a0f8d798f2437c1250a805c4ab682770f4185c1eeabced058954a6546d56b2d48308c81cde05c535700697c4520a9fea4436dd1bc3e7574baf16fff1d51c90cb1479898c7b0b770af1c271e8591dc8273d6df4f543431bd8efe853eb09223717c74e00107b3a582802391b8f7c23872f21ec3cc210288b35963e25595141c1ed7958ba60b1ff36bee153c2561c0a7137ae116df0f0f66e249b82d114eeace355c9b779744a084544008816de42ed7eb575a479aad4b2c9f25b6f76785de49589befbdc1eb35c36e1d04a1aa81997f43c6fc2f2f75e3fa0138b536e6e0adf399e953215f94413b1bb7225b4154946ffa19be8a9d973656dd31a5c5c6e4879e6cf29ce62d27fddf3d3810124b9969a8dd5d8fe1158ad8315486f2527da05082938959ffc35d821638530dfff9a9939095afbfc3a4e599ef9701c87f55afb2f85adbd17359340ae0840804823d552a9abd7cd681751585378a70909be38f5751fe26172263e71ca874262aa6c94f6a758a362ce1159c41585701a6205966ccd59d6ef1211e42ed734b4b" + "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ec9b7e4a4d93458468f95db74bdd3f2ba69088cbd8742033b860ea873f37c31249020202020202020202020202020202020202020202020202020202020202020244fa02feb400a383b1824df6198c7e30cbf60a21838efa46fedf35f760fdf25839d1a3ec2b5d09aee31c1c0c380eef28744673ea3ab7e9d065baccc8d1874ca1", + "proof": "0x0b54c8661022e4ff23f73f079de5ba33937ea0102823afc28ecfea25480f9752006c59590b163ff5758851dca4b41ed2eb3d4161fbd4abf0a50670cfd68b53711bbc9e9e89b362c18ea83bc962fd1d98484a66925eb887ff4119f2f5cbb7926b1a718a45ed0c5c6ab78c0d33822c710d75023c8b29a074ec870058e8043cdf980a1225950c5d8218425a3d0285791e7fff7fd537491465a46841edd3fa6badc7014663ed841f305f8ad45296f278638a0dcdb050b1568950b6f1e17438caaa8f1cc5e3fa388b876e103ae409a117d1f77ec3148ae53b75e54322d7b72b50d99013c2f90e019ef00595be5629baeaf8f6c92b1326663655ecf10e23dbbef025221f73b9500ec0cc8b83689dcccf436fc79b54e2d08417f48b2ba7f8b4b6ca7e10062be829423a371789e9768f70bb74b5fb4021e743948dc60c9dd77d5189faef2e3ef0fe9583dca9ab69de6bf52e68405ec465e1e8039ded1fa8936a4c27116b2cfc94e0374db54086e2af12a0541f4edc4a1affa9fbb633ac76b3bc5dd211c10afc57a70d371057cab02bfeab658088f632c10a441c0ce23256abf9882936042217cc9ba849d59926bd44a71007dcfd19a3cc1e9a490ec8c2f39a20311df72f2212381f12b5e007af0d38ba6c14b794387c419ca17e9f83963c4540810d8415099f0ee8a8cc5f851585eaac8b71ca3b79213238cfdd16c5c64065477c27413c268cbe31a1be4e1078e97d777cbe07c37065e534548bf8ceb595c7e53ef2b17c02aa84bde9fb63d06a6c3dbd12247db7d459f9587bfd0ff820bb985e2379fff9124471544aea1561fe6d02aae5202044a93665e65a28696fc760624dbc7b3339226800b36dfd83665b5aa642d1aa742a96cc462efa92b43be640ad05dbe073ec0f0f0e9a9907cb3a5c027690f963a759ce8e9eb05b3212c7ba17585fb420d7851bffb94278d4465cf64ffa1936b3f3e6e3191e1cff7250542f78e2c2785934ba1c0a8d7d32469c216b4863653a212dae504635c9314c87fb6aee948414590ceb1a3f7639648a9aad68c2628f7586a3e52efd3655cfbcbc93ece94837823df61d29d4bd7d411495d28ff4ec25ddfa25444096aed1b70ea22245f9a336f6a564d6181cf2c23f95e3ed134587fefd6cafec971fbf5f7c7dbbf0b26e4ef0878ccec60ad20b11e1719b58f00061aa8feb40c6cf3e7caf9d7c69ef47b522ba148a530c" } \ No newline at end of file From 4fe51584916c95aeab487c3705eabd473ebe541e Mon Sep 17 00:00:00 2001 From: Artem Storozhuk Date: Thu, 25 Jul 2024 20:23:25 +0300 Subject: [PATCH 13/19] feat: Lookahead Move verifier (#119) * feat: Restructured fixture generator * feat: Add epoch change fixture generating using ethereum program * chore: Bind foundry/forge dependencies to particular versions * chore: Update CI to generate Move fixtures as well * feat: Add initial Move wrapper that implements lookahead verification * feat: Generating inclusion proof fixture using Ethereum program * chore: Update Move fixtures * feat: Update core verifier * feat: Update Move wrapper contract * chore: Update Move Readme * chore: Properly update submodules * ci: Update fixture CI workflow * chore: Move fixture-generator to root of the repository * docs: Update documentation about on-chain verification (Aptos / Ethereum) * chore: Move test utilities to separate module * chore: Addressing review comments related to Move wrapper contract * chore: Address review comments --- .github/workflows/fixtures.yml | 27 +- .gitmodules | 8 +- aptos/Cargo.lock | 663 +- aptos/Cargo.toml | 1 - aptos/docs/src/benchmark/on_chain.md | 31 +- aptos/solidity/contracts/lib/forge-std | 2 +- .../contracts/lib/openzeppelin-contracts | 2 +- .../contracts/test/test_lc_proofs.t.sol | 4 + aptos/solidity/fixture-generator/Cargo.toml | 21 - .../fixture-generator/src/bin/main.rs | 76 - fixture-generator/Cargo.lock | 11751 ++++++++++++++++ fixture-generator/Cargo.toml | 31 + .../rust-toolchain | 0 fixture-generator/src/bin/main.rs | 265 + 14 files changed, 12427 insertions(+), 455 deletions(-) delete mode 100644 aptos/solidity/fixture-generator/Cargo.toml delete mode 100644 aptos/solidity/fixture-generator/src/bin/main.rs create mode 100644 fixture-generator/Cargo.lock create mode 100644 fixture-generator/Cargo.toml rename {aptos/solidity/fixture-generator => fixture-generator}/rust-toolchain (100%) create mode 100644 fixture-generator/src/bin/main.rs diff --git a/.github/workflows/fixtures.yml b/.github/workflows/fixtures.yml index bef499b2..304c4add 100644 --- a/.github/workflows/fixtures.yml +++ b/.github/workflows/fixtures.yml @@ -17,6 +17,7 @@ concurrency: jobs: generate-fixtures: runs-on: warp-ubuntu-latest-x64-32x + timeout-minutes: 90 strategy: matrix: fixture: [inclusion, epoch_change] @@ -30,10 +31,10 @@ jobs: uses: ./.github/actions/setup with: pull_token: ${{ secrets.REPO_TOKEN }} - - name: Generate Solidity `inclusion` fixtures + - name: Generate Solidity fixtures run: | - cargo run --release -- --program ${{ matrix.fixture }} - working-directory: ${{ github.workspace }}/aptos/solidity/fixture-generator + cargo run --release -- --program ${{ matrix.fixture }} --language solidity + working-directory: ${{ github.workspace }}/fixture-generator - name: Check for diff run: git diff - name: Upload fixture artifact @@ -44,6 +45,20 @@ jobs: if-no-files-found: error overwrite: true retention-days: 1 + - name: Generate Move fixtures + run: | + cargo run --release -- --program ${{ matrix.fixture }} --language move + working-directory: ${{ github.workspace }}/fixture-generator + - name: Check for diff + run: git diff + - name: Upload fixture artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.fixture }}_fixture + path: ${{ github.workspace }}/ethereum/move/sources/fixtures/${{ matrix.fixture }}_fixture.json + if-no-files-found: error + overwrite: true + retention-days: 1 create-pull-request: needs: generate-fixtures @@ -56,6 +71,12 @@ jobs: path: ${{ github.workspace }}/aptos/solidity/contracts/src/plonk_fixtures/ pattern: "*_fixture" merge-multiple: true + - name: Download inclusion fixture + uses: actions/download-artifact@v4 + with: + path: ${{ github.workspace }}/ethereum/move/sources/fixtures/ + pattern: "*_fixture" + merge-multiple: true - name: Check for diff run: git diff - name: Create Pull Request diff --git a/.gitmodules b/.gitmodules index fac182b3..3387478c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,11 +1,9 @@ [submodule "aptos/solidity/contracts/lib/forge-std"] path = aptos/solidity/contracts/lib/forge-std url = https://github.com/foundry-rs/forge-std - # https://stackoverflow.com/questions/5126765/how-to-get-rid-of-git-submodules-untracked-status - ignore = dirty -[submodule "aptos/solidity/contracts/lib/sphinx-contracts"] - path = aptos/solidity/contracts/lib/sphinx-contracts - url = https://github.com/lurk-lab/sphinx-contracts [submodule "aptos/solidity/contracts/lib/openzeppelin-contracts"] path = aptos/solidity/contracts/lib/openzeppelin-contracts url = https://github.com/openzeppelin/openzeppelin-contracts +[submodule "aptos/solidity/contracts/lib/sphinx-contracts"] + path = aptos/solidity/contracts/lib/sphinx-contracts + url = https://github.com/lurk-lab/sphinx-contracts diff --git a/aptos/Cargo.lock b/aptos/Cargo.lock index a0065d4a..48af1c0f 100644 --- a/aptos/Cargo.lock +++ b/aptos/Cargo.lock @@ -130,9 +130,9 @@ checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] name = "alloy-primitives" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f783611babedbbe90db3478c120fb5f5daacceffc210b39adc0af4fe0da70bad" +checksum = "ccb3ead547f4532bc8af961649942f0b9c16ee9226e26caa3f38420651cc0bf4" dependencies = [ "alloy-rlp", "bytes", @@ -152,9 +152,9 @@ dependencies = [ [[package]] name = "alloy-rlp" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b155716bab55763c95ba212806cf43d05bcc70e5f35b02bad20cf5ec7fe11fed" +checksum = "a43b18702501396fa9bcdeecd533bc85fac75150d308fc0f6800a01e6234a003" dependencies = [ "arrayvec 0.7.4", "bytes", @@ -162,23 +162,23 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bad41a7c19498e3f6079f7744656328699f8ea3e783bdd10d85788cd439f572" +checksum = "2b40397ddcdcc266f59f959770f601ce1280e699a91fc1862f29cef91707cd09" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] name = "alloy-sol-macro-expander" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd9899da7d011b4fe4c406a524ed3e3f963797dbc93b45479d60341d3a27b252" +checksum = "867a5469d61480fea08c7333ffeca52d5b621f5ca2e44f271b117ec1fc9a0525" dependencies = [ "alloy-sol-macro-input", "const-hex", @@ -187,31 +187,31 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", "syn-solidity", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32d595768fdc61331a132b6f65db41afae41b9b97d36c21eb1b955c422a7e60" +checksum = "2e482dc33a32b6fadbc0f599adea520bd3aaa585c141a80b404d0a3e3fa72528" dependencies = [ "const-hex", "dunce", "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", "syn-solidity", ] [[package]] name = "alloy-sol-types" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a49042c6d3b66a9fe6b2b5a8bf0d39fc2ae1ee0310a2a26ffedd79fb097878dd" +checksum = "a91ca40fa20793ae9c3841b83e74569d1cc9af29a2f5237314fd3452d51e38c7" dependencies = [ "alloy-primitives", "alloy-sol-macro", @@ -402,7 +402,7 @@ dependencies = [ "claims", "concurrent-queue", "crossbeam", - "dashmap", + "dashmap 5.5.3", "derivative", "fail", "move-binary-format", @@ -426,8 +426,8 @@ dependencies = [ "aptos-metrics-core", "aptos-types", "bcs 0.1.4", - "clap 4.5.7", - "dashmap", + "clap 4.5.10", + "dashmap 5.5.3", "itertools 0.12.1", "jemallocator", "move-core-types", @@ -610,7 +610,7 @@ dependencies = [ "bcs 0.1.4", "byteorder", "claims", - "dashmap", + "dashmap 5.5.3", "either", "hex", "itertools 0.12.1", @@ -641,7 +641,7 @@ dependencies = [ "aptos-types", "bcs 0.1.4", "bytes", - "dashmap", + "dashmap 5.5.3", "move-core-types", "serde", ] @@ -711,7 +711,7 @@ dependencies = [ "arr_macro", "bcs 0.1.4", "bytes", - "dashmap", + "dashmap 5.5.3", "fail", "itertools 0.12.1", "move-core-types", @@ -738,10 +738,10 @@ dependencies = [ "aptos-types", "aptos-vm", "bcs 0.1.4", - "clap 4.5.7", + "clap 4.5.10", "crossbeam-channel", "ctrlc", - "dashmap", + "dashmap 5.5.3", "itertools 0.12.1", "num_cpus", "once_cell", @@ -831,7 +831,7 @@ dependencies = [ "blake2-rfc", "bulletproofs", "byteorder", - "clap 4.5.7", + "clap 4.5.10", "codespan-reporting", "curve25519-dalek-ng", "either", @@ -1166,7 +1166,7 @@ dependencies = [ "bytes", "claims", "crossbeam", - "dashmap", + "dashmap 5.5.3", "derivative", "move-binary-format", "move-core-types", @@ -1405,7 +1405,7 @@ dependencies = [ "anyhow", "aptos-types", "bcs 0.1.4", - "clap 4.5.7", + "clap 4.5.10", "heck 0.4.1", "move-core-types", "once_cell", @@ -1492,7 +1492,7 @@ dependencies = [ "aptos-vm", "bcs 0.1.4", "crossbeam-channel", - "dashmap", + "dashmap 5.5.3", "once_cell", "parking_lot", "proptest", @@ -1813,7 +1813,7 @@ dependencies = [ "ark-serialize 0.3.0", "ark-std 0.3.0", "derivative", - "num-bigint 0.4.5", + "num-bigint 0.4.6", "num-traits", "paste", "rustc_version 0.3.3", @@ -1833,7 +1833,7 @@ dependencies = [ "derivative", "digest 0.10.7", "itertools 0.10.5", - "num-bigint 0.4.5", + "num-bigint 0.4.6", "num-traits", "paste", "rayon", @@ -1867,7 +1867,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" dependencies = [ - "num-bigint 0.4.5", + "num-bigint 0.4.6", "num-traits", "quote", "syn 1.0.109", @@ -1879,7 +1879,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" dependencies = [ - "num-bigint 0.4.5", + "num-bigint 0.4.6", "num-traits", "proc-macro2", "quote", @@ -1947,7 +1947,7 @@ dependencies = [ "ark-serialize-derive", "ark-std 0.4.0", "digest 0.10.7", - "num-bigint 0.4.5", + "num-bigint 0.4.6", ] [[package]] @@ -2018,9 +2018,9 @@ dependencies = [ [[package]] name = "arrayref" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" [[package]] name = "arrayvec" @@ -2062,18 +2062,18 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] name = "async-trait" -version = "0.1.80" +version = "0.1.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -2112,7 +2112,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -2134,7 +2134,7 @@ dependencies = [ "futures-util", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.29", + "hyper 0.14.30", "itoa", "matchit", "memchr", @@ -2160,9 +2160,9 @@ dependencies = [ "bytes", "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", - "hyper 1.3.1", + "hyper 1.4.1", "hyper-util", "itoa", "matchit", @@ -2210,7 +2210,7 @@ dependencies = [ "bytes", "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", "mime", "pin-project-lite", @@ -2369,7 +2369,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -2378,7 +2378,7 @@ version = "0.69.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "cexpr", "clang-sys", "itertools 0.12.1", @@ -2391,7 +2391,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.68", + "syn 2.0.72", "which", ] @@ -2418,9 +2418,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "bitmaps" @@ -2498,16 +2498,16 @@ dependencies = [ [[package]] name = "blake3" -version = "1.5.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" +checksum = "e9ec96fe9a81b5e365f9db71fe00edc4fe4ca2cc7dcb7861f0603012a7caa210" dependencies = [ "arrayref", "arrayvec 0.7.4", "cc", "cfg-if", "constant_time_eq 0.3.0", - "rayon", + "rayon-core", ] [[package]] @@ -2564,9 +2564,9 @@ dependencies = [ [[package]] name = "blst" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62dc83a094a71d43eeadd254b1ec2d24cb6a0bb6cadce00df51f0db594711a32" +checksum = "4378725facc195f1a538864863f6de233b500a8862747e7f165078a419d5e874" dependencies = [ "cc", "glob", @@ -2600,17 +2600,6 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "bstr" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" -dependencies = [ - "lazy_static", - "memchr", - "regex-automata 0.1.10", -] - [[package]] name = "bstr" version = "1.9.1" @@ -2618,6 +2607,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" dependencies = [ "memchr", + "regex-automata 0.4.7", "serde", ] @@ -2673,9 +2663,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" dependencies = [ "serde", ] @@ -2756,13 +2746,12 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.0.100" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c891175c3fb232128f48de6590095e59198bbeb8620c310be349bfc3afd12c7b" +checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" dependencies = [ "jobserver", "libc", - "once_cell", ] [[package]] @@ -2798,7 +2787,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -2903,9 +2892,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.7" +version = "4.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5db83dced34638ad474f39f250d7fea9598bdd239eaced1bdf45d597da0f433f" +checksum = "8f6b81fb3c84f5563d509c59b5a48d935f689e993afa90fe39047f05adef9142" dependencies = [ "clap_builder", "clap_derive", @@ -2913,9 +2902,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.7" +version = "4.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7e204572485eb3fbf28f871612191521df159bc3e15a9f5064c66dba3a8c05f" +checksum = "5ca6706fd5224857d9ac5eb9355f6683563cc0541c7cd9d014043b57cbec78ac" dependencies = [ "anstream", "anstyle", @@ -2925,14 +2914,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.5" +version = "4.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6" +checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -3188,9 +3177,9 @@ dependencies = [ [[package]] name = "coset" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff8aad850c1f86daa47e812913051eb5a26c4d9fb4242a89178bf99b946e4e3c" +checksum = "f4c8cc80f631f8307b887faca24dcc3abc427cd0367f6eb6188f6e8f5b7ad8fb" dependencies = [ "ciborium", "ciborium-io", @@ -3315,7 +3304,7 @@ dependencies = [ "bitflags 1.3.2", "crossterm_winapi", "libc", - "mio", + "mio 0.8.11", "parking_lot", "signal-hook", "signal-hook-mio", @@ -3331,7 +3320,7 @@ dependencies = [ "bitflags 1.3.2", "crossterm_winapi", "libc", - "mio", + "mio 0.8.11", "parking_lot", "signal-hook", "signal-hook-mio", @@ -3472,7 +3461,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -3501,12 +3490,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.9" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ - "darling_core 0.20.9", - "darling_macro 0.20.9", + "darling_core 0.20.10", + "darling_macro 0.20.10", ] [[package]] @@ -3525,16 +3514,16 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.9" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -3550,13 +3539,13 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.9" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ - "darling_core 0.20.9", + "darling_core 0.20.10", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -3572,6 +3561,20 @@ dependencies = [ "parking_lot_core", ] +[[package]] +name = "dashmap" +version = "6.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "804c8821570c3f8b70230c2ba75ffa5c0f9a4189b9a432b6656c536712acae28" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + [[package]] name = "data-encoding" version = "2.6.0" @@ -3624,7 +3627,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -3637,7 +3640,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.0", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -3765,9 +3768,9 @@ dependencies = [ [[package]] name = "either" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "elf" @@ -3837,14 +3840,14 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] name = "env_filter" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +checksum = "c6dc8c8ff84895b051f07a0e65f975cf225131742531338752abfb324e4449ff" dependencies = [ "log", "regex", @@ -3852,18 +3855,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" -dependencies = [ - "log", -] - -[[package]] -name = "env_logger" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" +checksum = "06676b12debf7bba6903559720abca942d3a66b8acb88815fd2c7c6537e9ade1" dependencies = [ "anstream", "anstyle", @@ -4038,7 +4032,7 @@ dependencies = [ "regex", "serde", "serde_json", - "syn 2.0.68", + "syn 2.0.72", "toml 0.8.2", "walkdir", ] @@ -4056,7 +4050,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -4082,7 +4076,7 @@ dependencies = [ "serde", "serde_json", "strum 0.26.3", - "syn 2.0.68", + "syn 2.0.72", "tempfile", "thiserror", "tiny-keccak", @@ -4302,20 +4296,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" -[[package]] -name = "fixture-generator" -version = "1.0.0" -dependencies = [ - "alloy-sol-types", - "aptos-lc", - "clap 4.5.7", - "serde", - "serde_json", - "sphinx-prover", - "sphinx-sdk", - "tracing", -] - [[package]] name = "flate2" version = "1.0.30" @@ -4450,7 +4430,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -4638,7 +4618,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" dependencies = [ "aho-corasick", - "bstr 1.9.1", + "bstr", "log", "regex-automata 0.4.7", "regex-syntax 0.8.4", @@ -4650,7 +4630,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "ignore", "walkdir", ] @@ -5034,9 +5014,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http 1.1.0", @@ -5051,7 +5031,7 @@ dependencies = [ "bytes", "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "pin-project-lite", ] @@ -5093,9 +5073,9 @@ dependencies = [ [[package]] name = "hyper" -version = "0.14.29" +version = "0.14.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f361cde2f109281a220d4307746cdfd5ee3f410da58a70377762396775634b33" +checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" dependencies = [ "bytes", "futures-channel", @@ -5117,16 +5097,16 @@ dependencies = [ [[package]] name = "hyper" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" dependencies = [ "bytes", "futures-channel", "futures-util", "h2 0.4.5", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "httparse", "httpdate", "itoa", @@ -5144,9 +5124,9 @@ checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" dependencies = [ "futures-util", "http 1.1.0", - "hyper 1.3.1", + "hyper 1.4.1", "hyper-util", - "rustls 0.23.10", + "rustls 0.23.12", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", @@ -5159,7 +5139,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" dependencies = [ - "hyper 0.14.29", + "hyper 0.14.30", "pin-project-lite", "tokio", "tokio-io-timeout", @@ -5172,7 +5152,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper 0.14.29", + "hyper 0.14.30", "native-tls", "tokio", "tokio-native-tls", @@ -5186,7 +5166,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.3.1", + "hyper 1.4.1", "hyper-util", "native-tls", "tokio", @@ -5196,16 +5176,16 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56" +checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" dependencies = [ "bytes", "futures-channel", "futures-util", "http 1.1.0", - "http-body 1.0.0", - "hyper 1.3.1", + "http-body 1.0.1", + "hyper 1.4.1", "pin-project-lite", "socket2", "tokio", @@ -5422,16 +5402,16 @@ checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306" [[package]] name = "inferno" -version = "0.11.19" +version = "0.11.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "321f0f839cd44a4686e9504b0a62b4d69a50b62072144c71c68f5873c167b8d9" +checksum = "7c77a3ae7d4761b9c64d2c030f70746ceb8cfba32dce0325a56792e0a4816c31" dependencies = [ "ahash 0.8.11", - "clap 4.5.7", + "clap 4.5.10", "crossbeam-channel", "crossbeam-utils", - "dashmap", - "env_logger 0.10.2", + "dashmap 6.0.1", + "env_logger", "indexmap 2.2.6", "is-terminal", "itoa", @@ -5468,7 +5448,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ab388864246d58a276e60e7569a833d9cc4cd75c66e5ca77c177dad38e59996" dependencies = [ "ahash 0.7.8", - "dashmap", + "dashmap 5.5.3", "hashbrown 0.12.3", "once_cell", "parking_lot", @@ -5560,9 +5540,9 @@ dependencies = [ [[package]] name = "jobserver" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] @@ -5709,12 +5689,12 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e310b3a6b5907f99202fcdb4960ff45b93735d7c7d96b760fcff8db2dc0e103d" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -5729,7 +5709,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "libc", ] @@ -5839,9 +5819,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" dependencies = [ "serde", ] @@ -5857,9 +5837,9 @@ dependencies = [ [[package]] name = "lz4-sys" -version = "1.9.5" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9764018d143cc854c9f17f0b907de70f14393b1f502da6375dce70f00514eb3" +checksum = "109de74d5d2353660401699a4174a4ff23fcc649caf553df71933c7fb45ad868" dependencies = [ "cc", "libc", @@ -5929,7 +5909,7 @@ checksum = "c325dfab65f261f386debee8b0969da215b3fa0037e74c8a1234db7ba986d803" dependencies = [ "crossbeam-channel", "crossbeam-utils", - "dashmap", + "dashmap 5.5.3", "skeptic", "smallvec", "tagptr", @@ -5963,6 +5943,18 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "mio" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] + [[package]] name = "mirai-annotations" version = "1.12.0" @@ -6058,7 +6050,7 @@ version = "0.1.0" source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" dependencies = [ "anyhow", - "clap 4.5.7", + "clap 4.5.10", "crossterm 0.26.1", "move-binary-format", "move-bytecode-source-map", @@ -6073,7 +6065,7 @@ version = "0.1.0" source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" dependencies = [ "anyhow", - "clap 4.5.7", + "clap 4.5.10", "codespan-reporting", "colored", "move-binary-format", @@ -6121,7 +6113,7 @@ source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#1 dependencies = [ "anyhow", "bcs 0.1.4", - "clap 4.5.7", + "clap 4.5.10", "codespan-reporting", "hex", "move-binary-format", @@ -6148,7 +6140,7 @@ dependencies = [ "abstract-domain-derive", "anyhow", "bcs 0.1.4", - "clap 4.5.7", + "clap 4.5.10", "codespan-reporting", "ethnum", "flexi_logger", @@ -6202,7 +6194,7 @@ source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#1 dependencies = [ "anyhow", "bcs 0.1.4", - "clap 4.5.7", + "clap 4.5.10", "codespan", "colored", "move-binary-format", @@ -6220,7 +6212,7 @@ version = "0.1.0" source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" dependencies = [ "anyhow", - "clap 4.5.7", + "clap 4.5.10", "colored", "move-binary-format", "move-bytecode-source-map", @@ -6268,7 +6260,7 @@ source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#1 dependencies = [ "anyhow", "bcs 0.1.4", - "clap 4.5.7", + "clap 4.5.10", "move-binary-format", "move-bytecode-source-map", "move-bytecode-verifier", @@ -6353,7 +6345,7 @@ version = "0.1.0" source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" dependencies = [ "anyhow", - "clap 4.5.7", + "clap 4.5.10", "colored", "itertools 0.12.1", "move-abigen", @@ -6388,7 +6380,7 @@ source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#1 dependencies = [ "anyhow", "atty", - "clap 4.5.7", + "clap 4.5.10", "codespan-reporting", "itertools 0.12.1", "log", @@ -6540,7 +6532,7 @@ source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#1 dependencies = [ "anyhow", "better_any", - "clap 4.5.7", + "clap 4.5.10", "codespan-reporting", "colored", "itertools 0.12.1", @@ -6691,7 +6683,7 @@ version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "cfg-if", "libc", ] @@ -6702,7 +6694,7 @@ version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "cfg-if", "cfg_aliases", "libc", @@ -6770,7 +6762,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" dependencies = [ - "num-bigint 0.4.5", + "num-bigint 0.4.6", "num-complex", "num-integer", "num-iter", @@ -6792,9 +6784,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", @@ -6879,7 +6871,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "num-bigint 0.4.5", + "num-bigint 0.4.6", "num-integer", "num-traits", ] @@ -6943,7 +6935,7 @@ dependencies = [ "proc-macro-crate 2.0.2", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -6974,9 +6966,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.0" +version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434" +checksum = "3f203fa8daa7bb185f760ae12bd8e097f63d17041dcdcaf675ac54cdf863170e" dependencies = [ "memchr", ] @@ -6989,9 +6981,9 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "oorandom" -version = "11.1.3" +version = "11.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" +checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" [[package]] name = "opaque-debug" @@ -7030,7 +7022,7 @@ version = "0.10.66" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "cfg-if", "foreign-types", "libc", @@ -7047,7 +7039,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -7123,7 +7115,7 @@ name = "p3-baby-bear" version = "0.1.0" source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" dependencies = [ - "num-bigint 0.4.5", + "num-bigint 0.4.6", "p3-field", "p3-mds", "p3-poseidon2", @@ -7147,7 +7139,7 @@ version = "0.1.0" source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" dependencies = [ "ff 0.13.0", - "num-bigint 0.4.5", + "num-bigint 0.4.6", "p3-field", "p3-poseidon2", "p3-symmetric", @@ -7198,7 +7190,7 @@ version = "0.1.0" source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" dependencies = [ "itertools 0.12.1", - "num-bigint 0.4.5", + "num-bigint 0.4.6", "num-traits", "p3-util", "rand 0.8.5", @@ -7443,9 +7435,9 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.2", + "redox_syscall 0.5.3", "smallvec", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -7463,7 +7455,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "499cff8432e71c5f8784d9645aac0f9fca604d67f59b68a606170b5e229c6538" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "ciborium", "coset", "data-encoding", @@ -7584,9 +7576,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.10" +version = "2.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "560131c633294438da9f7c4b08189194b20946c8274c6b9e38881a7874dc8ee8" +checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" dependencies = [ "memchr", "thiserror", @@ -7595,9 +7587,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.7.10" +version = "2.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26293c9193fbca7b1a3bf9b79dc1e388e927e6cacaa78b4a3ab705a1d3d41459" +checksum = "2a548d2beca6773b1c244554d36fcf8548a8a58e74156968211567250e48e49a" dependencies = [ "pest", "pest_generator", @@ -7605,22 +7597,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.10" +version = "2.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ec22af7d3fb470a85dd2ca96b7c577a1eb4ef6f1683a9fe9a8c16e136c04687" +checksum = "3c93a82e8d145725dcbaf44e5ea887c8a869efdcc28706df2d08c69e17077183" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] name = "pest_meta" -version = "2.7.10" +version = "2.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a240022f37c361ec1878d646fc5b7d7c4d28d5946e1a80ad5a7a4f4ca0bdcd" +checksum = "a941429fea7e08bedec25e4f6785b6ffaacc6b755da98df5ef3e7dcf4a124c4f" dependencies = [ "once_cell", "pest", @@ -7702,7 +7694,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -7786,7 +7778,7 @@ dependencies = [ "futures-util", "headers", "http 0.2.12", - "hyper 0.14.29", + "hyper 0.14.30", "mime", "multer", "nix 0.27.1", @@ -7822,7 +7814,7 @@ dependencies = [ "proc-macro-crate 2.0.2", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -7882,9 +7874,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" +checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" [[package]] name = "poseidon-ark" @@ -7925,7 +7917,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ "proc-macro2", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -8066,8 +8058,8 @@ dependencies = [ "aptos-lc-core", "bcs 0.1.4", "chrono", - "clap 4.5.7", - "env_logger 0.11.3", + "clap 4.5.10", + "env_logger", "log", "reqwest 0.12.5", "serde", @@ -8086,7 +8078,7 @@ checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.5.0", + "bitflags 2.6.0", "lazy_static", "num-traits", "rand 0.8.5", @@ -8129,7 +8121,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -8163,7 +8155,7 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "memchr", "unicase", ] @@ -8374,11 +8366,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", ] [[package]] @@ -8409,7 +8401,7 @@ checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -8472,7 +8464,7 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.29", + "hyper 0.14.30", "hyper-tls 0.5.0", "ipnet", "js-sys", @@ -8513,9 +8505,9 @@ dependencies = [ "futures-util", "h2 0.4.5", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", - "hyper 1.3.1", + "hyper 1.4.1", "hyper-rustls", "hyper-tls 0.6.0", "hyper-util", @@ -8547,9 +8539,9 @@ dependencies = [ [[package]] name = "reqwest-middleware" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a45d100244a467870f6cb763c4484d010a6bed6bd610b3676e3825d93fb4cfbd" +checksum = "39346a33ddfe6be00cbc17a34ce996818b97b230b87229f10114693becca1268" dependencies = [ "anyhow", "async-trait", @@ -8581,9 +8573,9 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.37" +version = "0.8.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" +checksum = "ade4539f42266ded9e755c605bdddf546242b2c961b03b06a7375260788a0523" dependencies = [ "bytemuck", ] @@ -8700,7 +8692,7 @@ dependencies = [ "ark-ff 0.4.2", "bytes", "fastrlp", - "num-bigint 0.4.5", + "num-bigint 0.4.6", "num-traits", "parity-scale-codec 3.6.11", "primitive-types 0.12.2", @@ -8775,7 +8767,7 @@ version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "errno", "libc", "linux-raw-sys 0.4.14", @@ -8803,29 +8795,29 @@ dependencies = [ "log", "ring 0.17.8", "rustls-pki-types", - "rustls-webpki 0.102.4", + "rustls-webpki 0.102.6", "subtle", "zeroize", ] [[package]] name = "rustls" -version = "0.23.10" +version = "0.23.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05cff451f60db80f490f3c182b77c35260baace73209e9cdbbe526bfe3a4d402" +checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" dependencies = [ "once_cell", "rustls-pki-types", - "rustls-webpki 0.102.4", + "rustls-webpki 0.102.6", "subtle", "zeroize", ] [[package]] name = "rustls-native-certs" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792" +checksum = "a88d6d420651b496bdd98684116959239430022a115c1240e6c3993be0b15fba" dependencies = [ "openssl-probe", "rustls-pemfile 2.1.2", @@ -8871,9 +8863,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.4" +version = "0.102.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" +checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" dependencies = [ "ring 0.17.8", "rustls-pki-types", @@ -8948,9 +8940,9 @@ dependencies = [ [[package]] name = "scc" -version = "2.1.1" +version = "2.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ad2bbb0ae5100a07b7a6f2ed7ab5fd0045551a4c507989b7a620046ea3efdc" +checksum = "1fadf67e3cf23f8b11a6c8c48a16cb2437381503615acd91094ec7b4686a5a53" dependencies = [ "sdd", ] @@ -8994,9 +8986,9 @@ dependencies = [ [[package]] name = "sdd" -version = "0.2.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84345e4c9bd703274a082fb80caaa99b7612be48dfaa1dd9266577ec412309d" +checksum = "85f05a494052771fc5bd0619742363b5e24e5ad72ab3111ec2e27925b8edc5f3" [[package]] name = "sec1" @@ -9014,11 +9006,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "core-foundation", "core-foundation-sys", "libc", @@ -9027,9 +9019,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" dependencies = [ "core-foundation-sys", "libc", @@ -9076,9 +9068,9 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.203" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" dependencies = [ "serde_derive", ] @@ -9132,9 +9124,9 @@ dependencies = [ [[package]] name = "serde_bytes" -version = "0.11.14" +version = "0.11.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" dependencies = [ "serde", ] @@ -9151,20 +9143,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.203" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] name = "serde_json" -version = "1.0.117" +version = "1.0.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" dependencies = [ "indexmap 2.2.6", "itoa", @@ -9216,9 +9208,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.8.1" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20" +checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" dependencies = [ "base64 0.22.1", "chrono", @@ -9234,14 +9226,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.8.1" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2" +checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" dependencies = [ - "darling 0.20.9", + "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -9291,7 +9283,7 @@ checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -9405,7 +9397,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" dependencies = [ "libc", - "mio", + "mio 0.8.11", "signal-hook", ] @@ -9436,11 +9428,11 @@ dependencies = [ [[package]] name = "similar" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa42c91313f1d05da9b26f267f931cf178d4aba455b4c4622dd7355eb80c6640" +checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e" dependencies = [ - "bstr 0.2.17", + "bstr", "unicode-segmentation", ] @@ -9460,7 +9452,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" dependencies = [ - "num-bigint 0.4.5", + "num-bigint 0.4.6", "num-traits", "thiserror", "time", @@ -9606,7 +9598,7 @@ dependencies = [ "log", "nohash-hasher", "num", - "num-bigint 0.4.5", + "num-bigint 0.4.6", "num_cpus", "p3-air", "p3-baby-bear", @@ -9684,13 +9676,13 @@ dependencies = [ "anyhow", "backtrace", "bincode", - "clap 4.5.7", + "clap 4.5.10", "futures", "hex", "home", "indicatif", "itertools 0.12.1", - "num-bigint 0.4.5", + "num-bigint 0.4.6", "p3-baby-bear", "p3-bn254-fr", "p3-challenger", @@ -9817,7 +9809,7 @@ dependencies = [ "bindgen 0.69.4", "cfg-if", "log", - "num-bigint 0.4.5", + "num-bigint 0.4.6", "p3-baby-bear", "p3-field", "p3-symmetric", @@ -9873,7 +9865,7 @@ dependencies = [ "home", "indicatif", "log", - "num-bigint 0.4.5", + "num-bigint 0.4.6", "p3-commit", "p3-field", "p3-matrix", @@ -10033,7 +10025,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -10046,14 +10038,14 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] name = "subtle" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d0208408ba0c3df17ed26eb06992cb1a1268d41b2c0e12e65203fbe3972cee5" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "subtle-encoding" @@ -10083,9 +10075,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.68" +version = "2.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "901fa70d88b9d6c98022e23b4136f9f3e54e4662c3bc1bd1d84a42a9a0f0c1e9" +checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" dependencies = [ "proc-macro2", "quote", @@ -10094,14 +10086,14 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d71e19bca02c807c9faa67b5a47673ff231b6e7449b251695188522f1dc44b2" +checksum = "c837dc8852cb7074e46b444afb81783140dab12c58867b49fb3898fbafedf7ea" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -10239,22 +10231,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -10349,9 +10341,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -10364,21 +10356,20 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.38.0" +version = "1.39.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" +checksum = "d040ac2b29ab03b09d4129c2f5bbd012a3ac2f79d38ff506a4bf8dd34b0eac8a" dependencies = [ "backtrace", "bytes", "libc", - "mio", - "num_cpus", + "mio 1.0.1", "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -10393,13 +10384,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -10439,7 +10430,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.10", + "rustls 0.23.12", "rustls-pki-types", "tokio", ] @@ -10542,7 +10533,7 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.29", + "hyper 0.14.30", "hyper-timeout", "percent-encoding", "pin-project", @@ -10625,7 +10616,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -10763,7 +10754,7 @@ dependencies = [ "futures", "http 1.1.0", "http-body-util", - "hyper 1.3.1", + "hyper 1.4.1", "prost", "reqwest 0.12.5", "serde", @@ -10805,7 +10796,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a615d6c2764852a2e88a4f16e9ce1ea49bb776b5872956309e170d63a042a34f" dependencies = [ "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -11177,7 +11168,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", "wasm-bindgen-shared", ] @@ -11211,7 +11202,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -11333,7 +11324,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -11360,7 +11351,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -11395,18 +11386,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -11423,9 +11414,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -11441,9 +11432,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -11459,15 +11450,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -11483,9 +11474,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -11501,9 +11492,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -11519,9 +11510,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -11537,9 +11528,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" @@ -11631,22 +11622,22 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "zerocopy" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -11666,7 +11657,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -11716,9 +11707,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.11+zstd.1.5.6" +version = "2.0.12+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75652c55c0b6f3e6f12eb786fe1bc960396bf05a1eb3bf1f3691c3610ac2e6d4" +checksum = "0a4e40c320c3cb459d9a9ff6de98cff88f4751ee9275d140e2be94a2b74e4c13" dependencies = [ "cc", "pkg-config", diff --git a/aptos/Cargo.toml b/aptos/Cargo.toml index e0bb03dd..cdb956a0 100644 --- a/aptos/Cargo.toml +++ b/aptos/Cargo.toml @@ -6,7 +6,6 @@ members = [ "light-client", "aptos-programs", "proof-server", - "solidity/fixture-generator", ] [workspace.package] diff --git a/aptos/docs/src/benchmark/on_chain.md b/aptos/docs/src/benchmark/on_chain.md index 91cd1845..5915fdaf 100644 --- a/aptos/docs/src/benchmark/on_chain.md +++ b/aptos/docs/src/benchmark/on_chain.md @@ -35,18 +35,27 @@ The output should look like this: ``` % cd solidity/contracts && forge test [⠊] Compiling... -[⠒] Compiling 29 files with Solc 0.8.26 -[⠢] Solc 0.8.26 finished in 1.11s +[⠒] Compiling 13 files with Solc 0.8.26 +[⠢] Solc 0.8.26 finished in 1.03s Compiler run successful! -Ran 4 tests for test/test_lc_proofs.sol:SolidityVerificationTest -[PASS] testFail_FakeProofEpochChange() (gas: 8660281895700906413) -[PASS] testFail_FakeProofInclusion() (gas: 8660281895700906417) -[PASS] testValidEpochChangeProofPlonk() (gas: 318056) -[PASS] testValidInclusionProofPlonk() (gas: 318103) -Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 12.52ms (15.70ms CPU time) - -Ran 1 test suite in 154.07ms (12.52ms CPU time): 4 tests passed, 0 failed, 0 skipped (4 total tests) +Ran 13 tests for test/test_lc_proofs.t.sol:SolidityVerificationTest +[PASS] testEpochChangeSignerHashUpdate() (gas: 346345) +[PASS] testFailInvalidSignerHashEpochChange() (gas: 313381) +[PASS] testFailInvalidSignerHashInclusion() (gas: 315465) +[PASS] testFail_FakeProofEpochChange() (gas: 8660281895700906338) +[PASS] testFail_FakeProofInclusion() (gas: 8660281895700906453) +[PASS] testFail_FakePublicValuesEpochChange() (gas: 33234) +[PASS] testFail_FakePublicValuesInclusion() (gas: 34988) +[PASS] testFail_WrongVkValuesEpochChange() (gas: 334082) +[PASS] testFail_WrongVkValuesInclusion() (gas: 334846) +[PASS] testValidEpochChangeProofCore() (gas: 2284085) +[PASS] testValidEpochChangeProofPlonk() (gas: 388563) +[PASS] testValidInclusionProofCore() (gas: 2285885) +[PASS] testValidInclusionProofPlonk() (gas: 421586) +Suite result: ok. 13 passed; 0 failed; 0 skipped; finished in 18.22ms (84.02ms CPU time) + +Ran 1 test suite in 142.15ms (18.22ms CPU time): 13 tests passed, 0 failed, 0 skipped (13 total tests) ``` Currently, the verification of Plonk proof (either epoch-change or inclusion program) costs ~318k gas. @@ -60,7 +69,7 @@ export the fixture file to the relevant place (`solidity/contracts/src/plonk_fix To run the `fixture-generator` for the inclusion program, execute the following command: ```bash -RUST_LOG=info RUSTFLAGS="-C target-cpu=native --cfg tokio_unstable -C opt-level=3" SHARD_SIZE=4194304 SHARD_BATCH_SIZE=0 cargo +nightly-2024-05-31 run --release --features aptos --bin generate-fixture -- --program inclusion +RUST_LOG=info RUSTFLAGS="-C target-cpu=native --cfg tokio_unstable -C opt-level=3" SHARD_SIZE=4194304 SHARD_BATCH_SIZE=0 cargo +nightly-2024-05-31 run --release --bin generate-fixture -- --program inclusion --language solidity ``` > **Tips** diff --git a/aptos/solidity/contracts/lib/forge-std b/aptos/solidity/contracts/lib/forge-std index c28115db..07263d19 160000 --- a/aptos/solidity/contracts/lib/forge-std +++ b/aptos/solidity/contracts/lib/forge-std @@ -1 +1 @@ -Subproject commit c28115db8d90ebffb41953cf83aac63130f4bd40 +Subproject commit 07263d193d621c4b2b0ce8b4d54af58f6957d97d diff --git a/aptos/solidity/contracts/lib/openzeppelin-contracts b/aptos/solidity/contracts/lib/openzeppelin-contracts index b73bcb23..dbb6104c 160000 --- a/aptos/solidity/contracts/lib/openzeppelin-contracts +++ b/aptos/solidity/contracts/lib/openzeppelin-contracts @@ -1 +1 @@ -Subproject commit b73bcb231fb6f5e7bc973edc75ab7f6c812a2255 +Subproject commit dbb6104ce834628e473d2173bbc9d47f81a9eec3 diff --git a/aptos/solidity/contracts/test/test_lc_proofs.t.sol b/aptos/solidity/contracts/test/test_lc_proofs.t.sol index e15d3206..af71e636 100644 --- a/aptos/solidity/contracts/test/test_lc_proofs.t.sol +++ b/aptos/solidity/contracts/test/test_lc_proofs.t.sol @@ -58,13 +58,17 @@ contract SolidityVerificationTest is Test { function testValidEpochChangeProofCore() public { SphinxProofFixture memory fixture = loadPlonkEpochChangeFixture(); SphinxVerifier core = new SphinxVerifier(); + uint256 gasCost = gasleft(); core.verifyProof(fixture.vkey, fixture.publicValues, fixture.proof); + require(gasCost - gasleft() < 300000, "Too big gas cost"); } function testValidInclusionProofCore() public { SphinxProofFixture memory fixture = loadPlonkInclusionFixture(); SphinxVerifier core = new SphinxVerifier(); + uint256 gasCost = gasleft(); core.verifyProof(fixture.vkey, fixture.publicValues, fixture.proof); + require(gasCost - gasleft() < 300000, "Too big gas cost"); } function testValidInclusionProofPlonk() public view { diff --git a/aptos/solidity/fixture-generator/Cargo.toml b/aptos/solidity/fixture-generator/Cargo.toml deleted file mode 100644 index 0d9def5e..00000000 --- a/aptos/solidity/fixture-generator/Cargo.toml +++ /dev/null @@ -1,21 +0,0 @@ -[package] -version = "1.0.1" -name = "fixture-generator" -edition = { workspace = true } -license = { workspace = true } -repository = { workspace = true } - - -[[bin]] -name = "generate-fixture" -path = "src/bin/main.rs" - -[dependencies] -sphinx-sdk = { workspace = true } -sphinx-prover = {workspace = true } -aptos-lc = { path = "../../light-client", features = ["aptos"] } -serde_json = { workspace = true, features = ["alloc"] } -serde = { workspace = true, features = ["derive"] } -clap = { workspace = true, features = ["derive", "env"] } -tracing = { workspace = true } -alloy-sol-types = { workspace = true } diff --git a/aptos/solidity/fixture-generator/src/bin/main.rs b/aptos/solidity/fixture-generator/src/bin/main.rs deleted file mode 100644 index 0bb0b38d..00000000 --- a/aptos/solidity/fixture-generator/src/bin/main.rs +++ /dev/null @@ -1,76 +0,0 @@ -use clap::Parser; -use serde::{Deserialize, Serialize}; -use sphinx_prover::types::HashableKey; -use sphinx_prover::SphinxStdin; -use sphinx_sdk::ProverClient; -use std::path::PathBuf; - -pub const INCLUSION_ELF: &[u8] = - include_bytes!("../../../../aptos-programs/artifacts/inclusion-program"); -pub const EPOCH_CHANGE_ELF: &[u8] = - include_bytes!("../../../../aptos-programs/artifacts/epoch-change-program"); - -#[derive(Parser, Debug)] -#[clap(author, version, about, long_about = None)] -struct ProveArgs { - #[clap(long, default_value_t = String::from("inclusion"))] - program: String, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -struct SP1ProofFixture { - vkey: String, - public_values: String, - proof: String, -} - -fn main() { - sphinx_sdk::utils::setup_logger(); - let args = ProveArgs::parse(); - - let elf: &[u8]; - let stdin: SphinxStdin; - match args.program.as_str() { - "inclusion" => { - elf = INCLUSION_ELF; - let (sparse_merkle_proof_assets, transaction_proof_assets, validator_verifier_assets) = - aptos_lc::inclusion::setup_assets(); - stdin = aptos_lc::inclusion::generate_stdin( - &sparse_merkle_proof_assets, - &transaction_proof_assets, - &validator_verifier_assets, - ); - } - "epoch_change" => { - elf = EPOCH_CHANGE_ELF; - let (trusted_state, epoch_change_proof, _) = aptos_lc::epoch_change::setup_assets(); - stdin = aptos_lc::epoch_change::generate_stdin(&trusted_state, &epoch_change_proof); - } - _ => panic!("Unsupported program. Use: ['inclusion', 'epoch_change']"), - } - - let prover = ProverClient::new(); - let (pk, vk) = prover.setup(elf); - let proof = prover.prove_plonk(&pk, stdin).unwrap(); - // just to check that proof is valid and verifiable - prover.verify_plonk(&proof, &vk).unwrap(); - - // save fixture - let fixture = SP1ProofFixture { - vkey: vk.bytes32().to_string(), - public_values: proof.public_values.bytes().to_string(), - proof: proof.bytes(), - }; - - let fixture_path = - PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../contracts/src/plonk_fixtures"); - std::fs::create_dir_all(&fixture_path).expect("failed to create fixture path"); - let fixture_path = fixture_path.join(args.program.as_str().to_owned() + "_fixture.json"); - std::fs::write( - fixture_path.clone(), - serde_json::to_string_pretty(&fixture).unwrap(), - ) - .expect("failed to write fixture"); - tracing::info!("Fixture has been successfully saved to {:?}", fixture_path); -} diff --git a/fixture-generator/Cargo.lock b/fixture-generator/Cargo.lock new file mode 100644 index 00000000..9e425329 --- /dev/null +++ b/fixture-generator/Cargo.lock @@ -0,0 +1,11751 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "abstract-domain-derive" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "addchain" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2e69442aa5628ea6951fa33e24efe8313f4321a91bd729fc2f75bdfc858570" +dependencies = [ + "num-bigint 0.3.3", + "num-integer", + "num-traits", +] + +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "getrandom 0.2.15", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "aliasable" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" + +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + +[[package]] +name = "alloy-primitives" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccb3ead547f4532bc8af961649942f0b9c16ee9226e26caa3f38420651cc0bf4" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more", + "hex-literal", + "itoa", + "k256", + "keccak-asm", + "proptest", + "rand 0.8.5", + "ruint", + "serde", + "tiny-keccak", +] + +[[package]] +name = "alloy-rlp" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a43b18702501396fa9bcdeecd533bc85fac75150d308fc0f6800a01e6234a003" +dependencies = [ + "arrayvec 0.7.4", + "bytes", +] + +[[package]] +name = "alloy-sol-macro" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b40397ddcdcc266f59f959770f601ce1280e699a91fc1862f29cef91707cd09" +dependencies = [ + "alloy-sol-macro-expander", + "alloy-sol-macro-input", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "alloy-sol-macro-expander" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "867a5469d61480fea08c7333ffeca52d5b621f5ca2e44f271b117ec1fc9a0525" +dependencies = [ + "alloy-sol-macro-input", + "const-hex", + "heck 0.5.0", + "indexmap 2.2.6", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.72", + "syn-solidity", + "tiny-keccak", +] + +[[package]] +name = "alloy-sol-macro-input" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e482dc33a32b6fadbc0f599adea520bd3aaa585c141a80b404d0a3e3fa72528" +dependencies = [ + "const-hex", + "dunce", + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.72", + "syn-solidity", +] + +[[package]] +name = "alloy-sol-types" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a91ca40fa20793ae9c3841b83e74569d1cc9af29a2f5237314fd3452d51e38c7" +dependencies = [ + "alloy-primitives", + "alloy-sol-macro", + "const-hex", + "serde", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi-escapes" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3c0daaaae24df5995734b689627f8fa02101bc5bbc768be3055b66a010d7af" + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "anstream" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" + +[[package]] +name = "anstyle-parse" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "aptos-abstract-gas-usage" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-gas-algebra", + "aptos-gas-meter", + "aptos-gas-schedule", + "aptos-vm-types", + "move-binary-format", +] + +[[package]] +name = "aptos-accumulator" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-crypto", + "aptos-types", +] + +[[package]] +name = "aptos-aggregator" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-logger", + "aptos-types", + "bcs 0.1.4", + "claims", + "move-binary-format", + "move-core-types", + "move-vm-types", +] + +[[package]] +name = "aptos-api-types" +version = "0.0.1" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-config", + "aptos-crypto", + "aptos-db-indexer", + "aptos-framework", + "aptos-logger", + "aptos-openapi", + "aptos-resource-viewer", + "aptos-storage-interface", + "aptos-types", + "aptos-vm", + "async-trait", + "bcs 0.1.4", + "bytes", + "hex", + "indoc", + "move-binary-format", + "move-core-types", + "once_cell", + "poem", + "poem-openapi", + "poem-openapi-derive", + "serde", + "serde_json", +] + +[[package]] +name = "aptos-bitvec" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "serde", + "serde_bytes", +] + +[[package]] +name = "aptos-block-executor" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-aggregator", + "aptos-drop-helper", + "aptos-infallible", + "aptos-logger", + "aptos-metrics-core", + "aptos-mvhashmap", + "aptos-types", + "aptos-vm-logging", + "aptos-vm-types", + "arc-swap", + "bcs 0.1.4", + "bytes", + "claims", + "concurrent-queue", + "crossbeam", + "dashmap 5.5.3", + "derivative", + "fail", + "move-binary-format", + "move-core-types", + "move-vm-types", + "num_cpus", + "once_cell", + "parking_lot", + "rand 0.7.3", + "rayon", + "scopeguard", +] + +[[package]] +name = "aptos-block-partitioner" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-crypto", + "aptos-logger", + "aptos-metrics-core", + "aptos-types", + "bcs 0.1.4", + "clap 4.5.11", + "dashmap 5.5.3", + "itertools 0.12.1", + "jemallocator", + "move-core-types", + "once_cell", + "rand 0.7.3", + "rayon", + "serde", +] + +[[package]] +name = "aptos-build-info" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "shadow-rs", +] + +[[package]] +name = "aptos-cached-packages" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-framework", + "aptos-package-builder", + "aptos-types", + "bcs 0.1.4", + "move-core-types", + "once_cell", +] + +[[package]] +name = "aptos-config" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-crypto", + "aptos-global-constants", + "aptos-logger", + "aptos-secure-storage", + "aptos-short-hex-str", + "aptos-temppath", + "aptos-types", + "arr_macro", + "bcs 0.1.4", + "byteorder", + "cfg-if", + "get_if_addrs", + "maplit", + "num_cpus", + "number_range", + "poem-openapi", + "rand 0.7.3", + "serde", + "serde_json", + "serde_merge", + "serde_yaml 0.8.26", + "thiserror", + "url", +] + +[[package]] +name = "aptos-consensus-types" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-bitvec", + "aptos-crypto", + "aptos-crypto-derive", + "aptos-executor-types", + "aptos-infallible", + "aptos-logger", + "aptos-short-hex-str", + "aptos-types", + "bcs 0.1.4", + "fail", + "futures", + "itertools 0.12.1", + "mini-moka", + "mirai-annotations", + "once_cell", + "rand 0.7.3", + "rayon", + "serde", + "tokio", +] + +[[package]] +name = "aptos-crypto" +version = "0.0.3" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aes-gcm", + "anyhow", + "aptos-crypto-derive", + "ark-bn254", + "ark-ec", + "ark-ff 0.4.2", + "ark-groth16", + "ark-std 0.4.0", + "base64 0.13.1", + "bcs 0.1.4", + "blst", + "bulletproofs", + "bytes", + "curve25519-dalek 3.2.0", + "curve25519-dalek-ng", + "digest 0.9.0", + "ed25519-dalek", + "ff 0.13.0", + "hex", + "hkdf 0.10.0", + "libsecp256k1", + "merlin", + "more-asserts", + "neptune", + "num-bigint 0.3.3", + "num-integer", + "once_cell", + "p256", + "poseidon-ark", + "proptest", + "proptest-derive", + "rand 0.7.3", + "rand_core 0.5.1", + "ring 0.16.20", + "serde", + "serde-name", + "serde_bytes", + "sha2 0.10.8", + "sha2 0.9.9", + "sha3 0.9.1", + "signature 2.2.0", + "static_assertions", + "thiserror", + "tiny-keccak", + "typenum", + "x25519-dalek", +] + +[[package]] +name = "aptos-crypto-derive" +version = "0.0.3" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "aptos-db" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-accumulator", + "aptos-config", + "aptos-crypto", + "aptos-db-indexer", + "aptos-executor", + "aptos-executor-types", + "aptos-experimental-runtimes", + "aptos-infallible", + "aptos-jellyfish-merkle", + "aptos-logger", + "aptos-metrics-core", + "aptos-proptest-helpers", + "aptos-resource-viewer", + "aptos-rocksdb-options", + "aptos-schemadb", + "aptos-scratchpad", + "aptos-storage-interface", + "aptos-temppath", + "aptos-types", + "arc-swap", + "arr_macro", + "bcs 0.1.4", + "byteorder", + "claims", + "dashmap 5.5.3", + "either", + "hex", + "itertools 0.12.1", + "lru", + "move-core-types", + "num-derive", + "once_cell", + "proptest", + "proptest-derive", + "rayon", + "serde", + "static_assertions", + "status-line", +] + +[[package]] +name = "aptos-db-indexer" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-config", + "aptos-logger", + "aptos-resource-viewer", + "aptos-rocksdb-options", + "aptos-schemadb", + "aptos-storage-interface", + "aptos-types", + "bcs 0.1.4", + "bytes", + "dashmap 5.5.3", + "move-core-types", + "serde", +] + +[[package]] +name = "aptos-dkg" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-crypto", + "aptos-crypto-derive", + "aptos-runtimes", + "bcs 0.1.4", + "blst", + "blstrs", + "criterion", + "ff 0.13.0", + "group 0.13.0", + "hex", + "merlin", + "more-asserts", + "num-bigint 0.3.3", + "num-integer", + "num-traits", + "once_cell", + "pairing 0.23.0", + "rand 0.7.3", + "rand_core 0.5.1", + "rayon", + "serde", + "serde_bytes", + "sha3 0.9.1", + "static_assertions", +] + +[[package]] +name = "aptos-drop-helper" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-infallible", + "aptos-metrics-core", + "once_cell", + "threadpool", +] + +[[package]] +name = "aptos-executor" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-consensus-types", + "aptos-crypto", + "aptos-drop-helper", + "aptos-executor-service", + "aptos-executor-types", + "aptos-experimental-runtimes", + "aptos-infallible", + "aptos-logger", + "aptos-metrics-core", + "aptos-scratchpad", + "aptos-storage-interface", + "aptos-types", + "aptos-vm", + "arr_macro", + "bcs 0.1.4", + "bytes", + "dashmap 5.5.3", + "fail", + "itertools 0.12.1", + "move-core-types", + "once_cell", + "rayon", + "serde", +] + +[[package]] +name = "aptos-executor-service" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-block-partitioner", + "aptos-config", + "aptos-infallible", + "aptos-language-e2e-tests", + "aptos-logger", + "aptos-metrics-core", + "aptos-node-resource-metrics", + "aptos-push-metrics", + "aptos-secure-net", + "aptos-storage-interface", + "aptos-types", + "aptos-vm", + "bcs 0.1.4", + "clap 4.5.11", + "crossbeam-channel", + "ctrlc", + "dashmap 5.5.3", + "itertools 0.12.1", + "num_cpus", + "once_cell", + "rayon", + "serde", + "thiserror", +] + +[[package]] +name = "aptos-executor-test-helpers" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-cached-packages", + "aptos-config", + "aptos-consensus-types", + "aptos-crypto", + "aptos-db", + "aptos-executor", + "aptos-executor-types", + "aptos-sdk", + "aptos-storage-interface", + "aptos-temppath", + "aptos-types", + "aptos-vm", + "aptos-vm-genesis", + "rand 0.7.3", +] + +[[package]] +name = "aptos-executor-types" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-crypto", + "aptos-drop-helper", + "aptos-scratchpad", + "aptos-secure-net", + "aptos-storage-interface", + "aptos-types", + "bcs 0.1.4", + "criterion", + "itertools 0.12.1", + "once_cell", + "serde", + "thiserror", +] + +[[package]] +name = "aptos-experimental-runtimes" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-runtimes", + "core_affinity", + "libc", + "num_cpus", + "once_cell", + "rayon", +] + +[[package]] +name = "aptos-framework" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-aggregator", + "aptos-crypto", + "aptos-gas-algebra", + "aptos-gas-schedule", + "aptos-move-stdlib", + "aptos-native-interface", + "aptos-sdk-builder", + "aptos-types", + "aptos-vm-types", + "ark-bls12-381", + "ark-bn254", + "ark-ec", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "bcs 0.1.4", + "better_any", + "blake2-rfc", + "bulletproofs", + "byteorder", + "clap 4.5.11", + "codespan-reporting", + "curve25519-dalek-ng", + "either", + "flate2", + "hex", + "itertools 0.12.1", + "libsecp256k1", + "log", + "lru", + "merlin", + "move-binary-format", + "move-cli", + "move-command-line-common", + "move-compiler", + "move-core-types", + "move-docgen", + "move-model", + "move-package", + "move-prover", + "move-prover-boogie-backend", + "move-prover-bytecode-pipeline", + "move-stackless-bytecode", + "move-vm-runtime", + "move-vm-types", + "num-traits", + "once_cell", + "rand 0.7.3", + "rand_core 0.5.1", + "ripemd", + "serde", + "serde_bytes", + "sha2 0.10.8", + "sha2 0.9.9", + "sha3 0.9.1", + "siphasher", + "smallvec", + "tempfile", + "thiserror", + "tiny-keccak", +] + +[[package]] +name = "aptos-gas-algebra" +version = "0.0.1" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "either", + "move-core-types", +] + +[[package]] +name = "aptos-gas-meter" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-gas-algebra", + "aptos-gas-schedule", + "aptos-logger", + "aptos-types", + "aptos-vm-types", + "move-binary-format", + "move-core-types", + "move-vm-types", +] + +[[package]] +name = "aptos-gas-profiling" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-gas-algebra", + "aptos-gas-meter", + "aptos-types", + "aptos-vm-types", + "handlebars", + "inferno", + "move-binary-format", + "move-core-types", + "move-vm-types", + "regex", + "serde_json", + "smallvec", +] + +[[package]] +name = "aptos-gas-schedule" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-gas-algebra", + "aptos-global-constants", + "move-core-types", + "move-vm-types", + "paste", + "rand 0.7.3", +] + +[[package]] +name = "aptos-global-constants" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" + +[[package]] +name = "aptos-infallible" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" + +[[package]] +name = "aptos-jellyfish-merkle" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-crypto", + "aptos-crypto-derive", + "aptos-experimental-runtimes", + "aptos-infallible", + "aptos-logger", + "aptos-metrics-core", + "aptos-storage-interface", + "aptos-types", + "arr_macro", + "bcs 0.1.4", + "byteorder", + "itertools 0.12.1", + "num-derive", + "num-traits", + "once_cell", + "proptest", + "proptest-derive", + "rayon", + "serde", + "thiserror", +] + +[[package]] +name = "aptos-keygen" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-crypto", + "aptos-types", + "rand 0.7.3", +] + +[[package]] +name = "aptos-language-e2e-tests" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-abstract-gas-usage", + "aptos-bitvec", + "aptos-block-executor", + "aptos-cached-packages", + "aptos-crypto", + "aptos-framework", + "aptos-gas-algebra", + "aptos-gas-meter", + "aptos-gas-profiling", + "aptos-gas-schedule", + "aptos-keygen", + "aptos-proptest-helpers", + "aptos-temppath", + "aptos-types", + "aptos-vm", + "aptos-vm-genesis", + "aptos-vm-logging", + "aptos-vm-types", + "bcs 0.1.4", + "bytes", + "goldenfile", + "move-binary-format", + "move-command-line-common", + "move-core-types", + "move-ir-compiler", + "move-model", + "move-vm-runtime", + "move-vm-types", + "num_cpus", + "once_cell", + "petgraph", + "proptest", + "proptest-derive", + "rand 0.7.3", + "rayon", + "serde", +] + +[[package]] +name = "aptos-lc" +version = "1.0.0" +dependencies = [ + "anyhow", + "aptos-lc-core", + "aptos-programs", + "bcs 0.1.4", + "getset", + "serde", + "sphinx-sdk", + "thiserror", +] + +[[package]] +name = "aptos-lc-core" +version = "1.0.0" +dependencies = [ + "anyhow", + "aptos-crypto", + "aptos-executor", + "aptos-executor-test-helpers", + "aptos-executor-types", + "aptos-sdk", + "aptos-storage-interface", + "aptos-temppath", + "aptos-types", + "aptos-vm", + "aptos-vm-genesis", + "bcs 0.1.4", + "bls12_381 0.8.0", + "bytes", + "cfg-if", + "getset", + "hex", + "rand 0.7.3", + "rand_core 0.5.1", + "serde", + "serde_bytes", + "sha2 0.9.9", + "thiserror", + "tiny-keccak", +] + +[[package]] +name = "aptos-ledger" +version = "0.2.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-crypto", + "aptos-types", + "hex", + "ledger-apdu", + "ledger-transport-hid", + "thiserror", +] + +[[package]] +name = "aptos-log-derive" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "aptos-logger" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-infallible", + "aptos-log-derive", + "aptos-node-identity", + "backtrace", + "chrono", + "erased-serde", + "futures", + "hostname", + "once_cell", + "prometheus", + "serde", + "serde_json", + "strum 0.24.1", + "strum_macros 0.24.3", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "aptos-memory-usage-tracker" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-gas-algebra", + "aptos-gas-meter", + "aptos-types", + "move-binary-format", + "move-core-types", + "move-vm-types", +] + +[[package]] +name = "aptos-metrics-core" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "prometheus", +] + +[[package]] +name = "aptos-move-stdlib" +version = "0.1.1" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-gas-schedule", + "aptos-native-interface", + "move-core-types", + "move-vm-runtime", + "move-vm-types", + "sha2 0.9.9", + "sha3 0.9.1", + "smallvec", +] + +[[package]] +name = "aptos-mvhashmap" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-aggregator", + "aptos-crypto", + "aptos-types", + "aptos-vm-types", + "bytes", + "claims", + "crossbeam", + "dashmap 5.5.3", + "derivative", + "move-binary-format", + "move-core-types", + "move-vm-types", + "serde", +] + +[[package]] +name = "aptos-native-interface" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-gas-algebra", + "aptos-gas-schedule", + "aptos-types", + "bcs 0.1.4", + "bytes", + "move-binary-format", + "move-core-types", + "move-vm-runtime", + "move-vm-types", + "smallvec", +] + +[[package]] +name = "aptos-node-identity" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-types", + "claims", + "once_cell", +] + +[[package]] +name = "aptos-node-resource-metrics" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-build-info", + "aptos-infallible", + "aptos-logger", + "aptos-metrics-core", + "cfg-if", + "once_cell", + "procfs", + "prometheus", + "sysinfo", +] + +[[package]] +name = "aptos-openapi" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "async-trait", + "percent-encoding", + "poem", + "poem-openapi", + "serde", + "serde_json", +] + +[[package]] +name = "aptos-package-builder" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-framework", + "itertools 0.12.1", + "move-command-line-common", + "move-package", + "tempfile", +] + +[[package]] +name = "aptos-programs" +version = "1.0.0" +dependencies = [ + "glob", + "sphinx-helper", +] + +[[package]] +name = "aptos-proptest-helpers" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "crossbeam", + "proptest", + "proptest-derive", +] + +[[package]] +name = "aptos-protos" +version = "1.3.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "futures-core", + "pbjson", + "prost", + "serde", + "tonic", +] + +[[package]] +name = "aptos-push-metrics" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-logger", + "aptos-metrics-core", + "ureq", + "url", +] + +[[package]] +name = "aptos-resource-viewer" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-types", + "aptos-vm", + "move-binary-format", + "move-bytecode-utils", + "move-core-types", + "move-resource-viewer", +] + +[[package]] +name = "aptos-rest-client" +version = "0.0.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-api-types", + "aptos-crypto", + "aptos-infallible", + "aptos-logger", + "aptos-types", + "bcs 0.1.4", + "bytes", + "hex", + "move-core-types", + "reqwest 0.11.27", + "serde", + "serde_json", + "thiserror", + "tokio", + "url", +] + +[[package]] +name = "aptos-rocksdb-options" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-config", + "rocksdb", +] + +[[package]] +name = "aptos-runtimes" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "rayon", + "tokio", +] + +[[package]] +name = "aptos-schemadb" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-infallible", + "aptos-logger", + "aptos-metrics-core", + "aptos-storage-interface", + "dunce", + "once_cell", + "proptest", + "rand 0.7.3", + "rocksdb", +] + +[[package]] +name = "aptos-scratchpad" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-crypto", + "aptos-drop-helper", + "aptos-experimental-runtimes", + "aptos-infallible", + "aptos-metrics-core", + "aptos-types", + "bitvec 1.0.1", + "itertools 0.12.1", + "once_cell", + "proptest", + "rayon", + "thiserror", +] + +[[package]] +name = "aptos-sdk" +version = "0.0.3" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-cached-packages", + "aptos-crypto", + "aptos-global-constants", + "aptos-ledger", + "aptos-rest-client", + "aptos-types", + "base64 0.13.1", + "bcs 0.1.4", + "ed25519-dalek-bip32", + "move-core-types", + "rand_core 0.5.1", + "serde_json", + "tiny-bip39", +] + +[[package]] +name = "aptos-sdk-builder" +version = "0.2.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-types", + "bcs 0.1.4", + "clap 4.5.11", + "heck 0.4.1", + "move-core-types", + "once_cell", + "serde-generate", + "serde-reflection", + "serde_yaml 0.8.26", + "textwrap 0.15.2", +] + +[[package]] +name = "aptos-secure-net" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-logger", + "aptos-metrics-core", + "aptos-protos", + "bcs 0.1.4", + "crossbeam-channel", + "once_cell", + "serde", + "thiserror", + "tokio", + "tonic", + "tonic-reflection", +] + +[[package]] +name = "aptos-secure-storage" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-crypto", + "aptos-infallible", + "aptos-logger", + "aptos-temppath", + "aptos-time-service", + "aptos-vault-client", + "base64 0.13.1", + "bcs 0.1.4", + "chrono", + "enum_dispatch", + "rand 0.7.3", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "aptos-short-hex-str" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "mirai-annotations", + "serde", + "static_assertions", + "thiserror", +] + +[[package]] +name = "aptos-speculative-state-helper" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-infallible", + "crossbeam", + "rayon", +] + +[[package]] +name = "aptos-storage-interface" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-crypto", + "aptos-experimental-runtimes", + "aptos-logger", + "aptos-metrics-core", + "aptos-scratchpad", + "aptos-secure-net", + "aptos-types", + "aptos-vm", + "bcs 0.1.4", + "crossbeam-channel", + "dashmap 5.5.3", + "once_cell", + "parking_lot", + "proptest", + "proptest-derive", + "rayon", + "serde", + "thiserror", + "threadpool", +] + +[[package]] +name = "aptos-table-natives" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-gas-schedule", + "aptos-native-interface", + "better_any", + "bytes", + "move-binary-format", + "move-core-types", + "move-table-extension", + "move-vm-runtime", + "move-vm-types", + "sha3 0.9.1", + "smallvec", +] + +[[package]] +name = "aptos-temppath" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "hex", + "rand 0.7.3", +] + +[[package]] +name = "aptos-time-service" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-infallible", + "enum_dispatch", + "futures", + "pin-project", + "thiserror", + "tokio", +] + +[[package]] +name = "aptos-types" +version = "0.0.3" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-bitvec", + "aptos-crypto", + "aptos-crypto-derive", + "aptos-dkg", + "aptos-experimental-runtimes", + "aptos-infallible", + "ark-bn254", + "ark-ff 0.4.2", + "ark-groth16", + "ark-serialize 0.4.2", + "arr_macro", + "base64 0.13.1", + "bcs 0.1.4", + "bytes", + "fixed", + "fxhash", + "hashbrown 0.14.5", + "hex", + "itertools 0.12.1", + "jsonwebtoken", + "move-binary-format", + "move-bytecode-verifier", + "move-core-types", + "move-table-extension", + "move-vm-runtime", + "move-vm-types", + "num-bigint 0.3.3", + "num-derive", + "num-traits", + "once_cell", + "passkey-types", + "proptest", + "proptest-derive", + "quick_cache", + "rand 0.7.3", + "rayon", + "ring 0.16.20", + "rsa", + "serde", + "serde-big-array", + "serde_bytes", + "serde_json", + "serde_with", + "serde_yaml 0.8.26", + "strum 0.24.1", + "strum_macros 0.24.3", + "thiserror", +] + +[[package]] +name = "aptos-utils" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" + +[[package]] +name = "aptos-vault-client" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-crypto", + "base64 0.13.1", + "chrono", + "native-tls", + "once_cell", + "serde", + "serde_json", + "thiserror", + "ureq", +] + +[[package]] +name = "aptos-vm" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-aggregator", + "aptos-block-executor", + "aptos-block-partitioner", + "aptos-crypto", + "aptos-crypto-derive", + "aptos-experimental-runtimes", + "aptos-framework", + "aptos-gas-algebra", + "aptos-gas-meter", + "aptos-gas-schedule", + "aptos-infallible", + "aptos-logger", + "aptos-memory-usage-tracker", + "aptos-metrics-core", + "aptos-move-stdlib", + "aptos-mvhashmap", + "aptos-native-interface", + "aptos-table-natives", + "aptos-types", + "aptos-utils", + "aptos-vm-logging", + "aptos-vm-types", + "ark-bn254", + "ark-groth16", + "bcs 0.1.4", + "bytes", + "claims", + "crossbeam-channel", + "derive_more", + "fail", + "futures", + "hex", + "move-binary-format", + "move-core-types", + "move-vm-runtime", + "move-vm-types", + "num_cpus", + "once_cell", + "ouroboros", + "rand 0.7.3", + "rayon", + "serde", +] + +[[package]] +name = "aptos-vm-genesis" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-cached-packages", + "aptos-crypto", + "aptos-framework", + "aptos-gas-schedule", + "aptos-types", + "aptos-vm", + "aptos-vm-types", + "bcs 0.1.4", + "bytes", + "move-core-types", + "move-vm-runtime", + "move-vm-types", + "once_cell", + "rand 0.7.3", + "serde", +] + +[[package]] +name = "aptos-vm-logging" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-crypto", + "aptos-logger", + "aptos-metrics-core", + "aptos-speculative-state-helper", + "aptos-types", + "arc-swap", + "once_cell", + "serde", +] + +[[package]] +name = "aptos-vm-types" +version = "0.0.1" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-aggregator", + "aptos-gas-algebra", + "aptos-gas-schedule", + "aptos-types", + "bcs 0.1.4", + "bytes", + "claims", + "either", + "move-binary-format", + "move-core-types", + "move-vm-types", + "rand 0.7.3", + "serde", +] + +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" +dependencies = [ + "derive_arbitrary", +] + +[[package]] +name = "arc-swap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" + +[[package]] +name = "ark-bls12-381" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" +dependencies = [ + "ark-ec", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-crypto-primitives" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" +dependencies = [ + "ark-ec", + "ark-ff 0.4.2", + "ark-relations", + "ark-serialize 0.4.2", + "ark-snark", + "ark-std 0.4.0", + "blake2", + "derivative", + "digest 0.10.7", + "rayon", + "sha2 0.10.8", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff 0.4.2", + "ark-poly", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "rayon", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint 0.4.6", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint 0.4.6", + "num-traits", + "paste", + "rayon", + "rustc_version 0.4.0", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-groth16" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" +dependencies = [ + "ark-crypto-primitives", + "ark-ec", + "ark-ff 0.4.2", + "ark-poly", + "ark-relations", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "rayon", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", + "rayon", +] + +[[package]] +name = "ark-relations" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" +dependencies = [ + "ark-ff 0.4.2", + "ark-std 0.4.0", + "tracing", + "tracing-subscriber 0.2.25", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint 0.4.6", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-snark" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" +dependencies = [ + "ark-ff 0.4.2", + "ark-relations", + "ark-serialize 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", + "rayon", +] + +[[package]] +name = "arr_macro" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c49336e062fa2ae8aca17a2f99c34d9c1a5d30827e8aff1cb4c294f253afe992" +dependencies = [ + "arr_macro_impl", + "proc-macro-hack", + "proc-macro-nested", +] + +[[package]] +name = "arr_macro_impl" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c6368f9ae5c6ec403ca910327ae0c9437b0a85255b6950c90d497e6177f6e5e" +dependencies = [ + "proc-macro-hack", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "arrayref" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" + +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "async-trait" +version = "0.1.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "async_io_stream" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" +dependencies = [ + "futures", + "pharos", + "rustc_version 0.4.0", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "auto_impl" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "axum" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +dependencies = [ + "async-trait", + "axum-core 0.3.4", + "bitflags 1.3.2", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper 0.1.2", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf" +dependencies = [ + "async-trait", + "axum-core 0.4.3", + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.4.1", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper 1.0.1", + "tokio", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper 0.1.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "az" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" + +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "serde", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bcs" +version = "0.1.4" +source = "git+https://github.com/aptos-labs/bcs.git?rev=d31fab9d81748e2594be5cd5cdf845786a30562d#d31fab9d81748e2594be5cd5cdf845786a30562d" +dependencies = [ + "serde", + "thiserror", +] + +[[package]] +name = "bcs" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b6598a2f5d564fb7855dc6b06fd1c38cff5a72bd8b863a4d021938497b440a" +dependencies = [ + "serde", + "thiserror", +] + +[[package]] +name = "bech32" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" + +[[package]] +name = "bellpepper" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae286c2cb403324ab644c7cc68dceb25fe52ca9429908a726d7ed272c1edf7b" +dependencies = [ + "bellpepper-core", + "byteorder", + "ff 0.13.0", +] + +[[package]] +name = "bellpepper-core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8abb418570756396d722841b19edfec21d4e89e1cf8990610663040ecb1aea" +dependencies = [ + "blake2s_simd", + "byteorder", + "ff 0.13.0", + "serde", + "thiserror", +] + +[[package]] +name = "better_any" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b359aebd937c17c725e19efcb661200883f04c49c53e7132224dac26da39d4a0" +dependencies = [ + "better_typeid_derive", +] + +[[package]] +name = "better_typeid_derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3deeecb812ca5300b7d3f66f730cc2ebd3511c3d36c691dd79c165d5b19a26e3" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[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.65.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.72", +] + +[[package]] +name = "bindgen" +version = "0.69.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" +dependencies = [ + "bitflags 2.6.0", + "cexpr", + "clang-sys", + "itertools 0.12.1", + "lazy_static", + "lazycell", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.72", + "which", +] + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "bitmaps" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" +dependencies = [ + "typenum", +] + +[[package]] +name = "bitvec" +version = "0.20.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7774144344a4faa177370406a7ff5f1da24303817368584c6206c8303eb07848" +dependencies = [ + "funty 1.1.0", + "radium 0.6.2", + "tap", + "wyz 0.2.0", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty 2.0.0", + "radium 0.7.0", + "tap", + "wyz 0.5.1", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "blake2-rfc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" +dependencies = [ + "arrayvec 0.4.12", + "constant_time_eq 0.1.5", +] + +[[package]] +name = "blake2b_simd" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" +dependencies = [ + "arrayref", + "arrayvec 0.7.4", + "constant_time_eq 0.3.0", +] + +[[package]] +name = "blake2s_simd" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" +dependencies = [ + "arrayref", + "arrayvec 0.7.4", + "constant_time_eq 0.3.0", +] + +[[package]] +name = "blake3" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9ec96fe9a81b5e365f9db71fe00edc4fe4ca2cc7dcb7861f0603012a7caa210" +dependencies = [ + "arrayref", + "arrayvec 0.7.4", + "cc", + "cfg-if", + "constant_time_eq 0.3.0", + "rayon-core", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "block-padding", + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-padding" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + +[[package]] +name = "bls12_381" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3c196a77437e7cc2fb515ce413a6401291578b5afc8ecb29a3c7ab957f05941" +dependencies = [ + "ff 0.12.1", + "group 0.12.1", + "pairing 0.22.0", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "bls12_381" +version = "0.8.0" +source = "git+https://github.com/lurk-lab/bls12_381.git?branch=zkvm#0d57d6ac0af6a464c4764809b5bf994d15920762" +dependencies = [ + "cfg-if", + "digest 0.9.0", + "ff 0.13.0", + "group 0.13.0", + "pairing 0.23.0", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "blst" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4378725facc195f1a538864863f6de233b500a8862747e7f165078a419d5e874" +dependencies = [ + "cc", + "glob", + "threadpool", + "zeroize", +] + +[[package]] +name = "blstrs" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a8a8ed6fefbeef4a8c7b460e4110e12c5e22a5b7cf32621aae6ad650c4dcf29" +dependencies = [ + "blst", + "byte-slice-cast", + "ff 0.13.0", + "group 0.13.0", + "pairing 0.23.0", + "rand_core 0.6.4", + "serde", + "subtle", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "sha2 0.10.8", + "tinyvec", +] + +[[package]] +name = "bstr" +version = "1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1bc3887947e51b03a2aa6dff41aaf64f2bd8f7369ebcb1ef49b2b54b6a0d1de" +dependencies = [ + "memchr", + "regex-automata 0.4.7", + "serde", +] + +[[package]] +name = "bulletproofs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40e698f1df446cc6246afd823afbe2d121134d089c9102c1dd26d1264991ba32" +dependencies = [ + "byteorder", + "clear_on_drop", + "curve25519-dalek-ng", + "digest 0.9.0", + "merlin", + "rand 0.8.5", + "rand_core 0.6.4", + "serde", + "serde_derive", + "sha3 0.9.1", + "subtle-ng", + "thiserror", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "bytecount" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" + +[[package]] +name = "bytemuck" +version = "1.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" +dependencies = [ + "serde", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "c_linked_list" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4964518bd3b4a8190e832886cdc0da9794f12e8e6c1613a9e90ff331c4c8724b" + +[[package]] +name = "camino" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.23", + "serde", + "serde_json", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.23", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cassowary" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" + +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "cc" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" +dependencies = [ + "jobserver", + "libc", +] + +[[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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-targets 0.52.6", +] + +[[package]] +name = "chrono-tz" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb" +dependencies = [ + "chrono", + "chrono-tz-build", + "phf", +] + +[[package]] +name = "chrono-tz-build" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1" +dependencies = [ + "parse-zoneinfo", + "phf", + "phf_codegen", +] + +[[package]] +name = "chunked_transfer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901" + +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half 2.4.1", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "claims" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6995bbe186456c36307f8ea36be3eefe42f49d106896414e18efc4fb2f846b5" +dependencies = [ + "autocfg", +] + +[[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 = "2.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +dependencies = [ + "ansi_term", + "atty", + "bitflags 1.3.2", + "strsim 0.8.0", + "textwrap 0.11.0", + "unicode-width", + "vec_map", +] + +[[package]] +name = "clap" +version = "4.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35723e6a11662c2afb578bcf0b88bf6ea8e21282a953428f240574fcc3a2b5b3" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49eb96cbfa7cfa35017b7cd548c75b14c3118c98b423041d70562665e07fb0fa" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim 0.11.1", +] + +[[package]] +name = "clap_derive" +version = "4.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d029b67f89d30bbb547c89fd5161293c0aec155fc691d7924b64550662db93e" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "clap_lex" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" + +[[package]] +name = "clear_on_drop" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38508a63f4979f0048febc9966fadbd48e5dab31fd0ec6a3f151bbf4a74f7423" +dependencies = [ + "cc", +] + +[[package]] +name = "codespan" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3362992a0d9f1dd7c3d0e89e0ab2bb540b7a95fea8cd798090e758fda2899b5e" +dependencies = [ + "codespan-reporting", + "serde", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "serde", + "termcolor", + "unicode-width", +] + +[[package]] +name = "coins-bip32" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b6be4a5df2098cd811f3194f64ddb96c267606bffd9689ac7b0160097b01ad3" +dependencies = [ + "bs58", + "coins-core", + "digest 0.10.7", + "hmac 0.12.1", + "k256", + "serde", + "sha2 0.10.8", + "thiserror", +] + +[[package]] +name = "coins-bip39" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" +dependencies = [ + "bitvec 1.0.1", + "coins-bip32", + "hmac 0.12.1", + "once_cell", + "pbkdf2 0.12.2", + "rand 0.8.5", + "sha2 0.10.8", + "thiserror", +] + +[[package]] +name = "coins-core" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" +dependencies = [ + "base64 0.21.7", + "bech32", + "bs58", + "digest 0.10.7", + "generic-array", + "hex", + "ripemd", + "serde", + "serde_derive", + "sha2 0.10.8", + "sha3 0.10.8", + "thiserror", +] + +[[package]] +name = "colorchoice" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" + +[[package]] +name = "colored" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" +dependencies = [ + "lazy_static", + "windows-sys 0.48.0", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys 0.52.0", +] + +[[package]] +name = "const-hex" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8a24a26d37e1ffd45343323dc9fe6654ceea44c12f2fcb3d7ac29e610bc6" +dependencies = [ + "cfg-if", + "cpufeatures", + "hex", + "proptest", + "serde", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const_fn" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373e9fafaa20882876db20562275ff58d50e0caa2590077fe7ce7bef90211d0d" + +[[package]] +name = "const_format" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "cookie" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" +dependencies = [ + "aes-gcm", + "base64 0.21.7", + "hkdf 0.12.4", + "hmac 0.12.1", + "percent-encoding", + "rand 0.8.5", + "sha2 0.10.8", + "subtle", + "time", + "version_check", +] + +[[package]] +name = "cookie_store" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387461abbc748185c3a6e1673d826918b450b87ff22639429c694619a83b6cf6" +dependencies = [ + "cookie", + "idna 0.3.0", + "log", + "publicsuffix", + "serde", + "serde_derive", + "serde_json", + "time", + "url", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core_affinity" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622892f5635ce1fc38c8f16dfc938553ed64af482edb5e150bf4caedbfcb2304" +dependencies = [ + "libc", + "num_cpus", + "winapi 0.3.9", +] + +[[package]] +name = "coset" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8cc80f631f8307b887faca24dcc3abc427cd0367f6eb6188f6e8f5b7ad8fb" +dependencies = [ + "ciborium", + "ciborium-io", +] + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "criterion" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b01d6de93b2b6c65e17c634a26653a29d107b3c98c607c765bf38d041531cd8f" +dependencies = [ + "atty", + "cast", + "clap 2.34.0", + "criterion-plot", + "csv", + "itertools 0.10.5", + "lazy_static", + "num-traits", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_cbor", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2673cc8207403546f45f5fd319a974b1e6983ad1a3ee7e6041650013be041876" +dependencies = [ + "cast", + "itertools 0.10.5", +] + +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crossterm" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" +dependencies = [ + "bitflags 1.3.2", + "crossterm_winapi", + "libc", + "mio 0.8.11", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi 0.3.9", +] + +[[package]] +name = "crossterm" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84cda67535339806297f1b331d6dd6320470d2a0fe65381e79ee9e156dd3d13" +dependencies = [ + "bitflags 1.3.2", + "crossterm_winapi", + "libc", + "mio 0.8.11", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi 0.3.9", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "crypto-mac" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4857fd85a0c34b3c3297875b747c1e02e06b6a0ea32dd892d8192b9ce0813ea6" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "csv" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" +dependencies = [ + "memchr", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "ctrlc" +version = "3.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "672465ae37dc1bc6380a6547a8883d5dd397b0f1faaad4f265726cc7042a5345" +dependencies = [ + "nix 0.28.0", + "windows-sys 0.52.0", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "fiat-crypto", + "rustc_version 0.4.0", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "curve25519-dalek-ng" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.6.4", + "serde", + "subtle-ng", + "zeroize", +] + +[[package]] +name = "darling" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +dependencies = [ + "darling_core 0.14.4", + "darling_macro 0.14.4", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core 0.20.10", + "darling_macro 0.20.10", +] + +[[package]] +name = "darling_core" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 1.0.109", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.11.1", + "syn 2.0.72", +] + +[[package]] +name = "darling_macro" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +dependencies = [ + "darling_core 0.14.4", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core 0.20.10", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "dashmap" +version = "6.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "804c8821570c3f8b70230c2ba75ffa5c0f9a4189b9a432b6656c536712acae28" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "data-encoding" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derivation-path" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version 0.4.0", + "syn 2.0.72", +] + +[[package]] +name = "deunicode" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339544cc9e2c4dc3fc7149fd630c5f22263a4fdf18a98afd0075784968b5cf00" + +[[package]] +name = "difference" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi 0.3.9", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "dunce" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature 2.2.0", + "spki", +] + +[[package]] +name = "ed25519" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +dependencies = [ + "serde", + "signature 1.6.4", +] + +[[package]] +name = "ed25519-dalek" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +dependencies = [ + "curve25519-dalek 3.2.0", + "ed25519", + "rand 0.7.3", + "serde", + "serde_bytes", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "ed25519-dalek-bip32" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d2be62a4061b872c8c0873ee4fc6f101ce7b889d039f019c5fa2af471a59908" +dependencies = [ + "derivation-path", + "ed25519-dalek", + "hmac 0.12.1", + "sha2 0.10.8", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "elf" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff 0.13.0", + "generic-array", + "group 0.13.0", + "pem-rfc7468", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "encoding_rs" +version = "0.8.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enr" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a3d8dc56e02f954cac8eb489772c552c473346fc34f67412bb6244fd647f7e4" +dependencies = [ + "base64 0.21.7", + "bytes", + "hex", + "k256", + "log", + "rand 0.8.5", + "rlp", + "serde", + "sha3 0.10.8", + "zeroize", +] + +[[package]] +name = "enum_dispatch" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd" +dependencies = [ + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "env_filter" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "humantime", + "log", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "erased-serde" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" +dependencies = [ + "serde", +] + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "error-chain" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" +dependencies = [ + "version_check", +] + +[[package]] +name = "eth-keystore" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" +dependencies = [ + "aes", + "ctr", + "digest 0.10.7", + "hex", + "hmac 0.12.1", + "pbkdf2 0.11.0", + "rand 0.8.5", + "scrypt", + "serde", + "serde_json", + "sha2 0.10.8", + "sha3 0.10.8", + "thiserror", + "uuid", +] + +[[package]] +name = "ethabi" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" +dependencies = [ + "ethereum-types", + "hex", + "once_cell", + "regex", + "serde", + "serde_json", + "sha3 0.10.8", + "thiserror", + "uint", +] + +[[package]] +name = "ethbloom" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" +dependencies = [ + "crunchy", + "fixed-hash 0.8.0", + "impl-codec 0.6.0", + "impl-rlp", + "impl-serde 0.4.0", + "scale-info", + "tiny-keccak", +] + +[[package]] +name = "ethereum-lc" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap 4.5.11", + "env_logger", + "ethereum-lc-core", + "ethereum-programs", + "ethers-core", + "getset", + "hex", + "log", + "reqwest 0.12.5", + "serde", + "serde_json", + "sphinx-sdk", + "thiserror", + "tokio", +] + +[[package]] +name = "ethereum-lc-core" +version = "0.1.0" +dependencies = [ + "anyhow", + "bls12_381 0.8.0", + "ethers-core", + "getset", + "hex", + "serde", + "sha2 0.9.9", + "thiserror", + "tiny-keccak", +] + +[[package]] +name = "ethereum-programs" +version = "0.1.0" +dependencies = [ + "glob", + "sphinx-helper", +] + +[[package]] +name = "ethereum-types" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" +dependencies = [ + "ethbloom", + "fixed-hash 0.8.0", + "impl-codec 0.6.0", + "impl-rlp", + "impl-serde 0.4.0", + "primitive-types 0.12.2", + "scale-info", + "uint", +] + +[[package]] +name = "ethers" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "816841ea989f0c69e459af1cf23a6b0033b19a55424a1ea3a30099becdb8dec0" +dependencies = [ + "ethers-addressbook", + "ethers-contract", + "ethers-core", + "ethers-middleware", + "ethers-providers", + "ethers-signers", +] + +[[package]] +name = "ethers-addressbook" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5495afd16b4faa556c3bba1f21b98b4983e53c1755022377051a975c3b021759" +dependencies = [ + "ethers-core", + "once_cell", + "serde", + "serde_json", +] + +[[package]] +name = "ethers-contract" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fceafa3578c836eeb874af87abacfb041f92b4da0a78a5edd042564b8ecdaaa" +dependencies = [ + "const-hex", + "ethers-contract-abigen", + "ethers-contract-derive", + "ethers-core", + "ethers-providers", + "futures-util", + "once_cell", + "pin-project", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "ethers-contract-abigen" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04ba01fbc2331a38c429eb95d4a570166781f14290ef9fdb144278a90b5a739b" +dependencies = [ + "Inflector", + "const-hex", + "dunce", + "ethers-core", + "eyre", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "serde", + "serde_json", + "syn 2.0.72", + "toml 0.8.2", + "walkdir", +] + +[[package]] +name = "ethers-contract-derive" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87689dcabc0051cde10caaade298f9e9093d65f6125c14575db3fd8c669a168f" +dependencies = [ + "Inflector", + "const-hex", + "ethers-contract-abigen", + "ethers-core", + "proc-macro2", + "quote", + "serde_json", + "syn 2.0.72", +] + +[[package]] +name = "ethers-core" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" +dependencies = [ + "arrayvec 0.7.4", + "bytes", + "cargo_metadata 0.18.1", + "chrono", + "const-hex", + "elliptic-curve", + "ethabi", + "generic-array", + "k256", + "num_enum 0.7.2", + "once_cell", + "open-fastrlp", + "rand 0.8.5", + "rlp", + "serde", + "serde_json", + "strum 0.26.3", + "syn 2.0.72", + "tempfile", + "thiserror", + "tiny-keccak", + "unicode-xid", +] + +[[package]] +name = "ethers-middleware" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48f9fdf09aec667c099909d91908d5eaf9be1bd0e2500ba4172c1d28bfaa43de" +dependencies = [ + "async-trait", + "auto_impl", + "ethers-contract", + "ethers-core", + "ethers-providers", + "ethers-signers", + "futures-channel", + "futures-locks", + "futures-util", + "instant", + "reqwest 0.11.27", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", + "tracing-futures", + "url", +] + +[[package]] +name = "ethers-providers" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6434c9a33891f1effc9c75472e12666db2fa5a0fec4b29af6221680a6fe83ab2" +dependencies = [ + "async-trait", + "auto_impl", + "base64 0.21.7", + "bytes", + "const-hex", + "enr", + "ethers-core", + "futures-core", + "futures-timer", + "futures-util", + "hashers", + "http 0.2.12", + "instant", + "jsonwebtoken", + "once_cell", + "pin-project", + "reqwest 0.11.27", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", + "tracing-futures", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "ws_stream_wasm", +] + +[[package]] +name = "ethers-signers" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228875491c782ad851773b652dd8ecac62cda8571d3bc32a5853644dd26766c2" +dependencies = [ + "async-trait", + "coins-bip32", + "coins-bip39", + "const-hex", + "elliptic-curve", + "eth-keystore", + "ethers-core", + "rand 0.8.5", + "sha2 0.10.8", + "thiserror", + "tracing", +] + +[[package]] +name = "ethnum" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fail" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe5e43d0f78a42ad591453aedb1d7ae631ce7ee445c7643691055a9ed8d3b01c" +dependencies = [ + "log", + "once_cell", + "rand 0.8.5", +] + +[[package]] +name = "fastrand" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" + +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec 0.7.4", + "auto_impl", + "bytes", +] + +[[package]] +name = "ff" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +dependencies = [ + "bitvec 1.0.1", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "bitvec 1.0.1", + "byteorder", + "ff_derive", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "ff_derive" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f54704be45ed286151c5e11531316eaef5b8f5af7d597b806fdb8af108d84a" +dependencies = [ + "addchain", + "cfg-if", + "num-bigint 0.3.3", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "fixed" +version = "1.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c6e0b89bf864acd20590dbdbad56f69aeb898abfc9443008fd7bd48b2cc85a" +dependencies = [ + "az", + "bytemuck", + "half 2.4.1", + "typenum", +] + +[[package]] +name = "fixed-hash" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" +dependencies = [ + "byteorder", + "rand 0.8.5", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand 0.8.5", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fixedbitset" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" + +[[package]] +name = "fixture-generator" +version = "1.0.0" +dependencies = [ + "alloy-sol-types", + "aptos-lc", + "clap 4.5.11", + "ethereum-lc", + "serde", + "serde_json", + "sphinx-prover", + "sphinx-sdk", + "tracing", +] + +[[package]] +name = "flate2" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "flexi_logger" +version = "0.27.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469e584c031833564840fb0cdbce99bdfe946fd45480a188545e73a76f45461c" +dependencies = [ + "chrono", + "glob", + "is-terminal", + "lazy_static", + "log", + "nu-ansi-term 0.49.0", + "regex", + "thiserror", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "funty" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-locks" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45ec6fe3675af967e67c5536c0b9d44e34e6c52f86bedc4ea49c5317b8e94d06" +dependencies = [ + "futures-channel", + "futures-task", +] + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +dependencies = [ + "gloo-timers", + "send_wrapper 0.4.0", +] + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "gcc" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" + +[[package]] +name = "gcd" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "get_if_addrs" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abddb55a898d32925f3148bd281174a68eeb68bbfd9a5938a57b18f506ee4ef7" +dependencies = [ + "c_linked_list", + "get_if_addrs-sys", + "libc", + "winapi 0.2.8", +] + +[[package]] +name = "get_if_addrs-sys" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d04f9fb746cf36b191c00f3ede8bde9c8e64f9f4b05ae2694a9ccf5e3f5ab48" +dependencies = [ + "gcc", + "libc", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getset" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e45727250e75cc04ff2846a66397da8ef2b3db8e40e0cef4df67950a07621eb9" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug", + "polyval", +] + +[[package]] +name = "gimli" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + +[[package]] +name = "git2" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2994bee4a3a6a51eb90c218523be382fd7ea09b16380b9312e9dbe955ff7c7d1" +dependencies = [ + "bitflags 1.3.2", + "libc", + "libgit2-sys", + "log", + "url", +] + +[[package]] +name = "git2" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc" +dependencies = [ + "bitflags 1.3.2", + "libc", + "libgit2-sys", + "log", + "url", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "globset" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +dependencies = [ + "aho-corasick", + "bstr", + "log", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", +] + +[[package]] +name = "globwalk" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" +dependencies = [ + "bitflags 2.6.0", + "ignore", + "walkdir", +] + +[[package]] +name = "gloo-timers" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "goldenfile" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d5c44265baec620ea19c97b4ce9f068e28f8c3d7faccc483f02968b5e3c587" +dependencies = [ + "scopeguard", + "similar-asserts", + "tempfile", + "yansi", +] + +[[package]] +name = "group" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +dependencies = [ + "ff 0.12.1", + "memuse", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff 0.13.0", + "rand 0.8.5", + "rand_core 0.6.4", + "rand_xorshift", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.2.6", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.1.0", + "indexmap 2.2.6", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" + +[[package]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "halo2" +version = "0.1.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a23c779b38253fe1538102da44ad5bd5378495a61d2c4ee18d64eaa61ae5995" +dependencies = [ + "halo2_proofs", +] + +[[package]] +name = "halo2_proofs" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e925780549adee8364c7f2b685c753f6f3df23bde520c67416e93bf615933760" +dependencies = [ + "blake2b_simd", + "ff 0.12.1", + "group 0.12.1", + "pasta_curves 0.4.1", + "rand_core 0.6.4", + "rayon", +] + +[[package]] +name = "handlebars" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225" +dependencies = [ + "log", + "pest", + "pest_derive", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.11", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash 0.8.11", + "allocator-api2", + "serde", +] + +[[package]] +name = "hashers" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2bca93b15ea5a746f220e56587f71e73c6165eab783df9e26590069953e3c30" +dependencies = [ + "fxhash", +] + +[[package]] +name = "headers" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" +dependencies = [ + "base64 0.21.7", + "bytes", + "headers-core", + "http 0.2.12", + "httpdate", + "mime", + "sha1", +] + +[[package]] +name = "headers-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" +dependencies = [ + "http 0.2.12", +] + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +dependencies = [ + "serde", +] + +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + +[[package]] +name = "hidapi" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "798154e4b6570af74899d71155fb0072d5b17e6aa12f39c8ef22c60fb8ec99e7" +dependencies = [ + "cc", + "libc", + "pkg-config", + "winapi 0.3.9", +] + +[[package]] +name = "hkdf" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51ab2f639c231793c5f6114bdb9bbe50a7dbbfcd7c7c6bd8475dec2d991e964f" +dependencies = [ + "digest 0.9.0", + "hmac 0.10.1", +] + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac 0.12.1", +] + +[[package]] +name = "hmac" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +dependencies = [ + "crypto-mac 0.8.0", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15" +dependencies = [ + "crypto-mac 0.10.0", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-drbg" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +dependencies = [ + "digest 0.9.0", + "generic-array", + "hmac 0.8.1", +] + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "hostname" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +dependencies = [ + "libc", + "match_cfg", + "winapi 0.3.9", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humansize" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" +dependencies = [ + "libm", +] + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hybrid-array" +version = "0.2.0-rc.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d306b679262030ad8813a82d4915fc04efff97776e4db7f8eb5137039d56400" +dependencies = [ + "typenum", +] + +[[package]] +name = "hyper" +version = "0.14.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.5", + "http 1.1.0", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +dependencies = [ + "futures-util", + "http 1.1.0", + "hyper 1.4.1", + "hyper-util", + "rustls 0.23.12", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.0", + "tower-service", +] + +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper 0.14.30", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper 0.14.30", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.4.1", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "hyper 1.4.1", + "pin-project-lite", + "socket2", + "tokio", + "tower", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "ignore" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" +dependencies = [ + "crossbeam-deque", + "globset", + "log", + "memchr", + "regex-automata 0.4.7", + "same-file", + "walkdir", + "winapi-util", +] + +[[package]] +name = "im" +version = "15.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" +dependencies = [ + "bitmaps", + "rand_core 0.6.4", + "rand_xoshiro", + "sized-chunks", + "typenum", + "version_check", +] + +[[package]] +name = "impl-codec" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "161ebdfec3c8e3b52bf61c4f3550a1eea4f9579d10dc1b936f3171ebdcd6c443" +dependencies = [ + "parity-scale-codec 2.3.1", +] + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec 3.6.11", +] + +[[package]] +name = "impl-rlp" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" +dependencies = [ + "rlp", +] + +[[package]] +name = "impl-serde" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4551f042f3438e64dbd6226b20527fc84a6e1fe65688b58746a2f53623f25f5c" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-serde" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "include_dir" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24b56e147e6187d61e9d0f039f10e070d0c0a887e24fe0bb9ca3f29bfde62cab" +dependencies = [ + "glob", + "include_dir_impl", + "proc-macro-hack", +] + +[[package]] +name = "include_dir_impl" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a0c890c85da4bab7bce4204c707396bbd3c6c8a681716a51c8814cfc2b682df" +dependencies = [ + "anyhow", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown 0.14.5", + "serde", +] + +[[package]] +name = "indicatif" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" +dependencies = [ + "console", + "instant", + "number_prefix", + "portable-atomic", + "unicode-width", +] + +[[package]] +name = "indoc" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306" + +[[package]] +name = "inferno" +version = "0.11.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c77a3ae7d4761b9c64d2c030f70746ceb8cfba32dce0325a56792e0a4816c31" +dependencies = [ + "ahash 0.8.11", + "clap 4.5.11", + "crossbeam-channel", + "crossbeam-utils", + "dashmap 6.0.1", + "env_logger", + "indexmap 2.2.6", + "is-terminal", + "itoa", + "log", + "num-format", + "once_cell", + "quick-xml 0.26.0", + "rgb", + "str_stack", +] + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "internment" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ab388864246d58a276e60e7569a833d9cc4cd75c66e5ca77c177dad38e59996" +dependencies = [ + "ahash 0.7.8", + "dashmap 5.5.3", + "hashbrown 0.12.3", + "once_cell", + "parking_lot", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "is-terminal" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "is_debug" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06d198e9919d9822d5f7083ba8530e04de87841eaf21ead9af8f2304efd57c89" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "jemalloc-sys" +version = "0.5.4+5.3.0-patched" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac6c1946e1cea1788cbfde01c993b52a10e2da07f4bac608228d1bed20bfebf2" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "jemallocator" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0de374a9f8e63150e6f5e8a60cc14c668226d7a347d8aee1a45766e3c4dd3bc" +dependencies = [ + "jemalloc-sys", + "libc", +] + +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "jsonwebtoken" +version = "8.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" +dependencies = [ + "base64 0.21.7", + "pem", + "ring 0.16.20", + "serde", + "serde_json", + "simple_asn1", +] + +[[package]] +name = "jubjub" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a575df5f985fe1cd5b2b05664ff6accfc46559032b954529fd225a2168d27b0f" +dependencies = [ + "bitvec 1.0.1", + "bls12_381 0.7.1", + "ff 0.12.1", + "group 0.12.1", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "k256" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2 0.10.8", + "signature 2.2.0", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "keccak-asm" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47a3633291834c4fbebf8673acbc1b04ec9d151418ff9b8e26dcd79129928758" +dependencies = [ + "digest 0.10.7", + "sha3-asm", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin 0.9.8", +] + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "ledger-apdu" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe435806c197dfeaa5efcded5e623c4b8230fd28fdf1e91e7a86e40ef2acbf90" +dependencies = [ + "arrayref", + "no-std-compat", + "snafu", +] + +[[package]] +name = "ledger-transport" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1117f2143d92c157197785bf57711d7b02f2cfa101e162f8ca7900fb7f976321" +dependencies = [ + "async-trait", + "ledger-apdu", +] + +[[package]] +name = "ledger-transport-hid" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45ba81a1f5f24396b37211478aff7fbcd605dd4544df8dbed07b9da3c2057aee" +dependencies = [ + "byteorder", + "cfg-if", + "hex", + "hidapi", + "ledger-transport", + "libc", + "log", + "thiserror", +] + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libgit2-sys" +version = "0.14.2+1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f3d95f6b51075fe9810a7ae22c7095f12b98005ab364d8544797a825ce946a4" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] + +[[package]] +name = "libloading" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +dependencies = [ + "cfg-if", + "windows-targets 0.52.6", +] + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", +] + +[[package]] +name = "librocksdb-sys" +version = "0.11.0+8.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e" +dependencies = [ + "bindgen 0.65.1", + "bzip2-sys", + "cc", + "glob", + "libc", + "libz-sys", + "lz4-sys", + "zstd-sys", +] + +[[package]] +name = "libsecp256k1" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" +dependencies = [ + "arrayref", + "base64 0.13.1", + "digest 0.9.0", + "hmac-drbg", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand 0.8.5", + "serde", + "sha2 0.9.9", + "typenum", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libz-sys" +version = "1.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +dependencies = [ + "serde", +] + +[[package]] +name = "lru" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" +dependencies = [ + "hashbrown 0.12.3", +] + +[[package]] +name = "lz4-sys" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109de74d5d2353660401699a4174a4ff23fcc649caf553df71933c7fb45ad868" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memuse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2145869435ace5ea6ea3d35f59be559317ec9a0d04e1812d5f185a87b6d36f1a" + +[[package]] +name = "merlin" +version = "3.0.0" +source = "git+https://github.com/aptos-labs/merlin#3454ccc85e37355c729ba40e6dac6e867ddf59f5" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mini-moka" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c325dfab65f261f386debee8b0969da215b3fa0037e74c8a1234db7ba986d803" +dependencies = [ + "crossbeam-channel", + "crossbeam-utils", + "dashmap 5.5.3", + "skeptic", + "smallvec", + "tagptr", + "triomphe", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "log", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.48.0", +] + +[[package]] +name = "mio" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] + +[[package]] +name = "mirai-annotations" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9be0862c1b3f26a88803c4a49de6889c10e608b3ee9344e6ef5b45fb37ad3d1" + +[[package]] +name = "more-asserts" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fafa6961cabd9c63bcd77a45d7e3b7f3b552b70417831fb0f56db717e72407e" + +[[package]] +name = "move-abigen" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "bcs 0.1.4", + "heck 0.4.1", + "log", + "move-binary-format", + "move-bytecode-verifier", + "move-command-line-common", + "move-core-types", + "move-model", + "serde", +] + +[[package]] +name = "move-binary-format" +version = "0.0.3" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "backtrace", + "indexmap 1.9.3", + "move-core-types", + "ref-cast", + "serde", + "variant_count", +] + +[[package]] +name = "move-borrow-graph" +version = "0.0.1" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" + +[[package]] +name = "move-bytecode-source-map" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "bcs 0.1.4", + "move-binary-format", + "move-command-line-common", + "move-core-types", + "move-ir-types", + "move-symbol-pool", + "serde", +] + +[[package]] +name = "move-bytecode-utils" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "move-binary-format", + "move-core-types", + "petgraph", + "serde-reflection", +] + +[[package]] +name = "move-bytecode-verifier" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "fail", + "move-binary-format", + "move-borrow-graph", + "move-core-types", + "petgraph", + "serde", + "typed-arena", +] + +[[package]] +name = "move-bytecode-viewer" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "clap 4.5.11", + "crossterm 0.26.1", + "move-binary-format", + "move-bytecode-source-map", + "move-disassembler", + "regex", + "tui", +] + +[[package]] +name = "move-cli" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "clap 4.5.11", + "codespan-reporting", + "colored", + "move-binary-format", + "move-bytecode-viewer", + "move-command-line-common", + "move-compiler", + "move-compiler-v2", + "move-core-types", + "move-coverage", + "move-disassembler", + "move-docgen", + "move-errmapgen", + "move-model", + "move-package", + "move-prover", + "move-stdlib", + "move-unit-test", + "move-vm-runtime", + "move-vm-test-utils", + "once_cell", + "tempfile", +] + +[[package]] +name = "move-command-line-common" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "difference", + "dirs-next", + "hex", + "move-core-types", + "num-bigint 0.3.3", + "once_cell", + "serde", + "sha2 0.9.9", + "walkdir", +] + +[[package]] +name = "move-compiler" +version = "0.0.1" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "bcs 0.1.4", + "clap 4.5.11", + "codespan-reporting", + "hex", + "move-binary-format", + "move-borrow-graph", + "move-bytecode-source-map", + "move-bytecode-verifier", + "move-command-line-common", + "move-core-types", + "move-ir-to-bytecode", + "move-ir-types", + "move-symbol-pool", + "once_cell", + "petgraph", + "regex", + "sha3 0.9.1", + "tempfile", +] + +[[package]] +name = "move-compiler-v2" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "abstract-domain-derive", + "anyhow", + "bcs 0.1.4", + "clap 4.5.11", + "codespan-reporting", + "ethnum", + "flexi_logger", + "im", + "itertools 0.12.1", + "log", + "move-binary-format", + "move-bytecode-source-map", + "move-command-line-common", + "move-compiler", + "move-core-types", + "move-disassembler", + "move-ir-types", + "move-model", + "move-stackless-bytecode", + "move-symbol-pool", + "num", + "once_cell", + "petgraph", +] + +[[package]] +name = "move-core-types" +version = "0.0.4" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "arbitrary", + "bcs 0.1.4", + "bytes", + "ethnum", + "hashbrown 0.14.5", + "hex", + "num", + "once_cell", + "primitive-types 0.10.1", + "proptest", + "proptest-derive", + "rand 0.8.5", + "ref-cast", + "serde", + "serde_bytes", + "thiserror", + "uint", +] + +[[package]] +name = "move-coverage" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "bcs 0.1.4", + "clap 4.5.11", + "codespan", + "colored", + "move-binary-format", + "move-bytecode-source-map", + "move-command-line-common", + "move-core-types", + "move-ir-types", + "petgraph", + "serde", +] + +[[package]] +name = "move-disassembler" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "clap 4.5.11", + "colored", + "move-binary-format", + "move-bytecode-source-map", + "move-command-line-common", + "move-compiler", + "move-core-types", + "move-coverage", + "move-ir-types", +] + +[[package]] +name = "move-docgen" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "codespan", + "codespan-reporting", + "itertools 0.12.1", + "log", + "move-compiler", + "move-core-types", + "move-model", + "once_cell", + "regex", + "serde", +] + +[[package]] +name = "move-errmapgen" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "move-command-line-common", + "move-core-types", + "move-model", + "serde", +] + +[[package]] +name = "move-ir-compiler" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "bcs 0.1.4", + "clap 4.5.11", + "move-binary-format", + "move-bytecode-source-map", + "move-bytecode-verifier", + "move-command-line-common", + "move-ir-to-bytecode", + "serde_json", +] + +[[package]] +name = "move-ir-to-bytecode" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "codespan-reporting", + "log", + "move-binary-format", + "move-bytecode-source-map", + "move-command-line-common", + "move-core-types", + "move-ir-to-bytecode-syntax", + "move-ir-types", + "move-symbol-pool", + "ouroboros", +] + +[[package]] +name = "move-ir-to-bytecode-syntax" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "hex", + "move-command-line-common", + "move-core-types", + "move-ir-types", + "move-symbol-pool", +] + +[[package]] +name = "move-ir-types" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "hex", + "move-command-line-common", + "move-core-types", + "move-symbol-pool", + "once_cell", + "serde", +] + +[[package]] +name = "move-model" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "codespan", + "codespan-reporting", + "internment", + "itertools 0.12.1", + "log", + "move-binary-format", + "move-bytecode-source-map", + "move-command-line-common", + "move-compiler", + "move-core-types", + "move-disassembler", + "move-ir-types", + "move-symbol-pool", + "num", + "num-traits", + "once_cell", + "regex", + "serde", +] + +[[package]] +name = "move-package" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "clap 4.5.11", + "colored", + "itertools 0.12.1", + "move-abigen", + "move-binary-format", + "move-bytecode-source-map", + "move-bytecode-utils", + "move-command-line-common", + "move-compiler", + "move-compiler-v2", + "move-core-types", + "move-docgen", + "move-model", + "move-symbol-pool", + "named-lock", + "once_cell", + "petgraph", + "regex", + "serde", + "serde_yaml 0.8.26", + "sha2 0.9.9", + "tempfile", + "termcolor", + "toml 0.7.8", + "walkdir", + "whoami", +] + +[[package]] +name = "move-prover" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "atty", + "clap 4.5.11", + "codespan-reporting", + "itertools 0.12.1", + "log", + "move-abigen", + "move-command-line-common", + "move-compiler", + "move-compiler-v2", + "move-docgen", + "move-errmapgen", + "move-model", + "move-prover-boogie-backend", + "move-prover-bytecode-pipeline", + "move-stackless-bytecode", + "once_cell", + "serde", + "simplelog", + "toml 0.7.8", +] + +[[package]] +name = "move-prover-boogie-backend" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "async-trait", + "codespan", + "codespan-reporting", + "futures", + "itertools 0.12.1", + "log", + "move-binary-format", + "move-command-line-common", + "move-compiler", + "move-core-types", + "move-model", + "move-prover-bytecode-pipeline", + "move-stackless-bytecode", + "num", + "once_cell", + "pretty", + "rand 0.7.3", + "regex", + "serde", + "tera", + "tokio", +] + +[[package]] +name = "move-prover-bytecode-pipeline" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "abstract-domain-derive", + "anyhow", + "codespan-reporting", + "itertools 0.12.1", + "log", + "move-binary-format", + "move-core-types", + "move-model", + "move-stackless-bytecode", + "serde", +] + +[[package]] +name = "move-resource-viewer" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "hex", + "move-binary-format", + "move-bytecode-utils", + "move-core-types", + "serde", +] + +[[package]] +name = "move-stackless-bytecode" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "abstract-domain-derive", + "codespan-reporting", + "ethnum", + "im", + "itertools 0.12.1", + "log", + "move-binary-format", + "move-core-types", + "move-model", + "num", + "paste", + "petgraph", +] + +[[package]] +name = "move-stdlib" +version = "0.1.1" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "hex", + "log", + "move-binary-format", + "move-command-line-common", + "move-compiler", + "move-core-types", + "move-docgen", + "move-errmapgen", + "move-prover", + "move-vm-runtime", + "move-vm-types", + "sha2 0.9.9", + "sha3 0.9.1", + "smallvec", + "walkdir", +] + +[[package]] +name = "move-symbol-pool" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "once_cell", + "serde", +] + +[[package]] +name = "move-table-extension" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "better_any", + "bytes", + "move-binary-format", + "move-core-types", + "move-vm-runtime", + "move-vm-types", + "sha3 0.9.1", + "smallvec", +] + +[[package]] +name = "move-unit-test" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "better_any", + "clap 4.5.11", + "codespan-reporting", + "colored", + "itertools 0.12.1", + "move-binary-format", + "move-bytecode-utils", + "move-command-line-common", + "move-compiler", + "move-core-types", + "move-ir-types", + "move-resource-viewer", + "move-stdlib", + "move-symbol-pool", + "move-table-extension", + "move-vm-runtime", + "move-vm-test-utils", + "once_cell", + "rayon", + "regex", +] + +[[package]] +name = "move-vm-runtime" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "better_any", + "bytes", + "fail", + "hashbrown 0.14.5", + "lazy_static", + "lru", + "move-binary-format", + "move-bytecode-verifier", + "move-core-types", + "move-vm-types", + "once_cell", + "parking_lot", + "serde", + "sha3 0.9.1", + "tracing", + "triomphe", + "typed-arena", +] + +[[package]] +name = "move-vm-test-utils" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "bytes", + "move-binary-format", + "move-bytecode-utils", + "move-core-types", + "move-vm-types", + "once_cell", + "serde", +] + +[[package]] +name = "move-vm-types" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "bcs 0.1.4", + "derivative", + "itertools 0.12.1", + "move-binary-format", + "move-core-types", + "serde", + "smallbitvec", + "smallvec", + "triomphe", +] + +[[package]] +name = "multer" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2" +dependencies = [ + "bytes", + "encoding_rs", + "futures-util", + "http 0.2.12", + "httparse", + "log", + "memchr", + "mime", + "spin 0.9.8", + "tokio", + "version_check", +] + +[[package]] +name = "named-lock" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40a3eb6b7c682b65d1f631ec3176829d72ab450b3aacdd3f719bf220822e59ac" +dependencies = [ + "libc", + "once_cell", + "parking_lot", + "thiserror", + "widestring", + "winapi 0.3.9", +] + +[[package]] +name = "native-tls" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "neptune" +version = "13.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06626c9ac04c894e9a23d061ba1309f28506cdc5fe64156d28a15fb57fc8e438" +dependencies = [ + "bellpepper", + "bellpepper-core", + "blake2s_simd", + "blstrs", + "byteorder", + "ff 0.13.0", + "generic-array", + "log", + "pasta_curves 0.5.1", + "serde", + "trait-set", +] + +[[package]] +name = "nix" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "libc", +] + +[[package]] +name = "nix" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[package]] +name = "no-std-compat" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi 0.3.9", +] + +[[package]] +name = "nu-ansi-term" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c073d3c1930d0751774acf49e66653acecb416c3a54c6ec095a9b11caddb5a68" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint 0.4.6", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", + "rand 0.7.3", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num-format" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" +dependencies = [ + "arrayvec 0.7.4", + "itoa", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint 0.4.6", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi 0.3.9", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive 0.5.11", +] + +[[package]] +name = "num_enum" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +dependencies = [ + "num_enum_derive 0.7.2", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +dependencies = [ + "proc-macro-crate 2.0.2", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + +[[package]] +name = "number_range" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60080faccd4ca50ad0b801b2be686136376b13f691f6eac84817e40973b2e1bb" +dependencies = [ + "anyhow", + "itertools 0.10.5", + "num", +] + +[[package]] +name = "object" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f203fa8daa7bb185f760ae12bd8e097f63d17041dcdcaf675ac54cdf863170e" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "oorandom" +version = "11.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "open-fastrlp" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" +dependencies = [ + "arrayvec 0.7.4", + "auto_impl", + "bytes", + "ethereum-types", + "open-fastrlp-derive", +] + +[[package]] +name = "open-fastrlp-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" +dependencies = [ + "bytes", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "openssl" +version = "0.10.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "ouroboros" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1358bd1558bd2a083fed428ffeda486fbfb323e698cdda7794259d592ca72db" +dependencies = [ + "aliasable", + "ouroboros_macro", +] + +[[package]] +name = "ouroboros_macro" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7d21ccd03305a674437ee1248f3ab5d4b1db095cf1caf49f1713ddf61956b7" +dependencies = [ + "Inflector", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2 0.10.8", +] + +[[package]] +name = "p3-air" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" +dependencies = [ + "p3-field", + "p3-matrix", +] + +[[package]] +name = "p3-baby-bear" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" +dependencies = [ + "num-bigint 0.4.6", + "p3-field", + "p3-mds", + "p3-poseidon2", + "p3-symmetric", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-blake3" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" +dependencies = [ + "blake3", + "p3-symmetric", +] + +[[package]] +name = "p3-bn254-fr" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" +dependencies = [ + "ff 0.13.0", + "num-bigint 0.4.6", + "p3-field", + "p3-poseidon2", + "p3-symmetric", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-challenger" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" +dependencies = [ + "p3-field", + "p3-maybe-rayon", + "p3-symmetric", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-commit" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" +dependencies = [ + "itertools 0.12.1", + "p3-challenger", + "p3-field", + "p3-matrix", + "p3-util", + "serde", +] + +[[package]] +name = "p3-dft" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" +dependencies = [ + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-field" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" +dependencies = [ + "itertools 0.12.1", + "num-bigint 0.4.6", + "num-traits", + "p3-util", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-fri" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" +dependencies = [ + "itertools 0.12.1", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-interpolation", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-interpolation" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" +dependencies = [ + "p3-field", + "p3-matrix", + "p3-util", +] + +[[package]] +name = "p3-keccak" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" +dependencies = [ + "p3-symmetric", + "tiny-keccak", +] + +[[package]] +name = "p3-keccak-air" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" +dependencies = [ + "p3-air", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-matrix" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" +dependencies = [ + "itertools 0.12.1", + "p3-field", + "p3-maybe-rayon", + "p3-util", + "rand 0.8.5", + "serde", + "tracing", +] + +[[package]] +name = "p3-maybe-rayon" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" +dependencies = [ + "rayon", +] + +[[package]] +name = "p3-mds" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" +dependencies = [ + "itertools 0.12.1", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-symmetric", + "p3-util", + "rand 0.8.5", +] + +[[package]] +name = "p3-merkle-tree" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" +dependencies = [ + "itertools 0.12.1", + "p3-commit", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-symmetric", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-poseidon2" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" +dependencies = [ + "gcd", + "p3-field", + "p3-mds", + "p3-symmetric", + "rand 0.8.5", +] + +[[package]] +name = "p3-symmetric" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" +dependencies = [ + "itertools 0.12.1", + "p3-field", + "serde", +] + +[[package]] +name = "p3-uni-stark" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" +dependencies = [ + "itertools 0.12.1", + "p3-air", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-util" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1#03f2b272e1b33ed91f8dfb0336f0a791071ef458" +dependencies = [ + "serde", +] + +[[package]] +name = "pairing" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135590d8bdba2b31346f9cd1fb2a912329f5135e832a4f422942eb6ead8b6b3b" +dependencies = [ + "group 0.12.1", +] + +[[package]] +name = "pairing" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" +dependencies = [ + "group 0.13.0", +] + +[[package]] +name = "parity-scale-codec" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373b1a4c1338d9cd3d1fa53b3a11bdab5ab6bd80a20f7f7becd76953ae2be909" +dependencies = [ + "arrayvec 0.7.4", + "bitvec 0.20.4", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive 2.3.1", + "serde", +] + +[[package]] +name = "parity-scale-codec" +version = "3.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1b5927e4a9ae8d6cdb6a69e4e04a0ec73381a358e21b8a576f44769f34e7c24" +dependencies = [ + "arrayvec 0.7.4", + "bitvec 1.0.1", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive 3.6.9", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" +dependencies = [ + "proc-macro-crate 2.0.2", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.3", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "parse-zoneinfo" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" +dependencies = [ + "regex", +] + +[[package]] +name = "passkey-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "499cff8432e71c5f8784d9645aac0f9fca604d67f59b68a606170b5e229c6538" +dependencies = [ + "bitflags 2.6.0", + "ciborium", + "coset", + "data-encoding", + "indexmap 2.2.6", + "rand 0.8.5", + "serde", + "serde_json", + "sha2 0.10.8", + "strum 0.25.0", + "typeshare", +] + +[[package]] +name = "pasta_curves" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc65faf8e7313b4b1fbaa9f7ca917a0eed499a9663be71477f87993604341d8" +dependencies = [ + "blake2b_simd", + "ff 0.12.1", + "group 0.12.1", + "lazy_static", + "rand 0.8.5", + "static_assertions", + "subtle", +] + +[[package]] +name = "pasta_curves" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e57598f73cc7e1b2ac63c79c517b31a0877cd7c402cdcaa311b5208de7a095" +dependencies = [ + "blake2b_simd", + "ff 0.13.0", + "group 0.13.0", + "hex", + "lazy_static", + "rand 0.8.5", + "serde", + "static_assertions", + "subtle", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pbjson" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "048f9ac93c1eab514f9470c4bc8d97ca2a0a236b84f45cc19d69a59fc11467f6" +dependencies = [ + "base64 0.13.1", + "serde", +] + +[[package]] +name = "pbkdf2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" +dependencies = [ + "crypto-mac 0.8.0", +] + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest 0.10.7", + "hmac 0.12.1", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pest" +version = "2.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a548d2beca6773b1c244554d36fcf8548a8a58e74156968211567250e48e49a" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c93a82e8d145725dcbaf44e5ea887c8a869efdcc28706df2d08c69e17077183" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "pest_meta" +version = "2.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a941429fea7e08bedec25e4f6785b6ffaacc6b755da98df5ef3e7dcf4a124c4f" +dependencies = [ + "once_cell", + "pest", + "sha2 0.10.8", +] + +[[package]] +name = "petgraph" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7" +dependencies = [ + "fixedbitset", + "indexmap 1.9.3", +] + +[[package]] +name = "pharos" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" +dependencies = [ + "futures", + "rustc_version 0.4.0", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared", + "rand 0.8.5", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "plotters" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a15b6eccb8484002195a3e44fe65a4ce8e93a625797a063735536fd59cb01cf3" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "414cec62c6634ae900ea1c56128dfe87cf63e7caece0852ec76aba307cebadb7" + +[[package]] +name = "plotters-svg" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81b30686a7d9c3e010b84284bdd26a29f2138574f52f5eb6f794fc0ad924e705" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "poem" +version = "1.3.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "504774c97b0744c1ee108a37e5a65a9745a4725c4c06277521dabc28eb53a904" +dependencies = [ + "anyhow", + "async-trait", + "bytes", + "chrono", + "cookie", + "futures-util", + "headers", + "http 0.2.12", + "hyper 0.14.30", + "mime", + "multer", + "nix 0.27.1", + "parking_lot", + "percent-encoding", + "pin-project-lite", + "poem-derive", + "quick-xml 0.30.0", + "regex", + "rfc7239", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "tempfile", + "thiserror", + "time", + "tokio", + "tokio-rustls 0.24.1", + "tokio-stream", + "tokio-util", + "tracing", + "wildmatch", +] + +[[package]] +name = "poem-derive" +version = "1.3.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ddcf4680d8d867e1e375116203846acb088483fa2070244f90589f458bbb31" +dependencies = [ + "proc-macro-crate 2.0.2", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "poem-openapi" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e69c569eb0671cc85e65cfb6bd960d0168d24732ff58825227b4d2a10167ba91" +dependencies = [ + "base64 0.13.1", + "bytes", + "derive_more", + "futures-util", + "mime", + "num-traits", + "poem", + "poem-openapi-derive", + "quick-xml 0.23.1", + "regex", + "serde", + "serde_json", + "serde_urlencoded", + "serde_yaml 0.9.34+deprecated", + "thiserror", + "tokio", + "url", +] + +[[package]] +name = "poem-openapi-derive" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "274cf13f710999977a3c1e396c2a5000d104075a7127ce6470fbdae4706be621" +dependencies = [ + "darling 0.14.4", + "http 0.2.12", + "indexmap 1.9.3", + "mime", + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "regex", + "syn 1.0.109", + "thiserror", +] + +[[package]] +name = "polyval" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "portable-atomic" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" + +[[package]] +name = "poseidon-ark" +version = "0.0.1" +source = "git+https://github.com/arnaucube/poseidon-ark.git?rev=6d2487aa1308d9d3860a2b724c485d73095c1c68#6d2487aa1308d9d3860a2b724c485d73095c1c68" +dependencies = [ + "ark-bn254", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "pretty" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad9940b913ee56ddd94aec2d3cd179dd47068236f42a1a6415ccf9d880ce2a61" +dependencies = [ + "arrayvec 0.5.2", + "typed-arena", +] + +[[package]] +name = "prettyplease" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +dependencies = [ + "proc-macro2", + "syn 2.0.72", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "primitive-types" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05e4722c697a58a99d5d06a08c30821d7c082a4632198de1eaa5a6c22ef42373" +dependencies = [ + "fixed-hash 0.7.0", + "impl-codec 0.5.1", + "impl-serde 0.3.2", + "uint", +] + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash 0.8.0", + "impl-codec 0.6.0", + "impl-rlp", + "impl-serde 0.4.0", + "scale-info", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro-nested" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "procfs" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1de8dacb0873f77e6aefc6d71e044761fcc68060290f5b1089fcdf84626bb69" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "chrono", + "flate2", + "hex", + "lazy_static", + "rustix 0.36.17", +] + +[[package]] +name = "prometheus" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" +dependencies = [ + "cfg-if", + "fnv", + "lazy_static", + "memchr", + "parking_lot", + "thiserror", +] + +[[package]] +name = "proptest" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags 2.6.0", + "lazy_static", + "num-traits", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_xorshift", + "regex-syntax 0.8.4", + "rusty-fork", + "tempfile", + "unarray", +] + +[[package]] +name = "proptest-derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf16337405ca084e9c78985114633b6827711d22b9e6ef6c6c0d665eb3f0b6e" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "prost" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" +dependencies = [ + "anyhow", + "itertools 0.12.1", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "prost-types" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" +dependencies = [ + "prost", +] + +[[package]] +name = "psl-types" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + +[[package]] +name = "publicsuffix" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96a8c1bda5ae1af7f99a2962e49df150414a43d62404644d98dd5c3a93d07457" +dependencies = [ + "idna 0.3.0", + "psl-types", +] + +[[package]] +name = "pulldown-cmark" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" +dependencies = [ + "bitflags 2.6.0", + "memchr", + "unicase", +] + +[[package]] +name = "qstring" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quick-xml" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "quick-xml" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f50b1c63b38611e7d4d7f68b82d3ad0cc71a2ad2e7f61fc10f1328d917c93cd" +dependencies = [ + "memchr", +] + +[[package]] +name = "quick-xml" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "quick_cache" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb55a1aa7668676bb93926cd4e9cdfe60f03bb866553bcca9112554911b6d3dc" +dependencies = [ + "ahash 0.8.11", + "equivalent", + "hashbrown 0.14.5", + "parking_lot", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643f8f41a8ebc4c5dc4515c82bb8abd397b527fc20fd681b7c011c2aee5d44fb" + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "rand_xoshiro" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "rayon-scan" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f87cc11a0140b4b0da0ffc889885760c61b13672d80a908920b2c0df078fa14" +dependencies = [ + "rayon", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "redox_users" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror", +] + +[[package]] +name = "ref-cast" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "regex" +version = "1.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes", + "cookie", + "cookie_store", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", + "hyper-tls 0.5.0", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration", + "tokio", + "tokio-native-tls", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "winreg 0.50.0", +] + +[[package]] +name = "reqwest" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +dependencies = [ + "base64 0.22.1", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.4.5", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.4.1", + "hyper-rustls", + "hyper-tls 0.6.0", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile 2.1.2", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.1", + "system-configuration", + "tokio", + "tokio-native-tls", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "winreg 0.52.0", +] + +[[package]] +name = "reqwest-middleware" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39346a33ddfe6be00cbc17a34ce996818b97b230b87229f10114693becca1268" +dependencies = [ + "anyhow", + "async-trait", + "http 1.1.0", + "reqwest 0.12.5", + "serde", + "thiserror", + "tower-service", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac 0.12.1", + "subtle", +] + +[[package]] +name = "rfc7239" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b106a85eeb5b0336d16d6a20eab857f92861d4fbb1eb9a239866fb98fb6a1063" +dependencies = [ + "uncased", +] + +[[package]] +name = "rgb" +version = "0.8.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade4539f42266ded9e755c605bdddf546242b2c961b03b06a7375260788a0523" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted 0.7.1", + "web-sys", + "winapi 0.3.9", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.52.0", +] + +[[package]] +name = "ripemd" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes", + "rlp-derive", + "rustc-hex", +] + +[[package]] +name = "rlp-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rocksdb" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6f170a4041d50a0ce04b0d2e14916d6ca863ea2e422689a5b694395d299ffe" +dependencies = [ + "libc", + "librocksdb-sys", +] + +[[package]] +name = "rrs-lib" +version = "0.1.0" +source = "git+https://github.com/GregAC/rrs.git#b23afc16b4e6a1fb5c4a73eb1e337e9400816507" +dependencies = [ + "downcast-rs", + "num_enum 0.5.11", + "paste", +] + +[[package]] +name = "rsa" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +dependencies = [ + "const-oid", + "digest 0.10.7", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core 0.6.4", + "signature 2.2.0", + "spki", + "subtle", + "zeroize", +] + +[[package]] +name = "ruint" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c3cc4c2511671f327125da14133d0c5c5d137f006a1017a16f557bc85b16286" +dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "bytes", + "fastrlp", + "num-bigint 0.4.6", + "num-traits", + "parity-scale-codec 3.6.11", + "primitive-types 0.12.2", + "proptest", + "rand 0.8.5", + "rlp", + "ruint-macro", + "serde", + "valuable", + "zeroize", +] + +[[package]] +name = "ruint-macro" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver 1.0.23", +] + +[[package]] +name = "rustix" +version = "0.36.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "305efbd14fde4139eb501df5f136994bb520b033fa9fbdce287507dc23b8c7ed" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.1.4", + "windows-sys 0.45.0", +] + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys 0.4.14", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-webpki 0.101.7", + "sct", +] + +[[package]] +name = "rustls" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-pki-types", + "rustls-webpki 0.102.6", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls" +version = "0.23.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki 0.102.6", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a88d6d420651b496bdd98684116959239430022a115c1240e6c3993be0b15fba" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.1.2", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pemfile" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" +dependencies = [ + "ring 0.17.8", + "rustls-pki-types", + "untrusted 0.9.0", +] + +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + +[[package]] +name = "rusty-fork" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "salsa20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +dependencies = [ + "cipher", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scale-info" +version = "2.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c453e59a955f81fb62ee5d596b450383d699f152d350e9d23a0db2adb78e4c0" +dependencies = [ + "cfg-if", + "derive_more", + "parity-scale-codec 3.6.11", + "scale-info-derive", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18cf6c6447f813ef19eb450e985bcce6705f9ce7660db221b59093d15c79c4b7" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "scc" +version = "2.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fadf67e3cf23f8b11a6c8c48a16cb2437381503615acd91094ec7b4686a5a53" +dependencies = [ + "sdd", +] + +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scrypt" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" +dependencies = [ + "hmac 0.12.1", + "pbkdf2 0.11.0", + "salsa20", + "sha2 0.10.8", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "sdd" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85f05a494052771fc5bd0619742363b5e24e5ad72ab3111ec2e27925b8edc5f3" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + +[[package]] +name = "send_wrapper" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" + +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + +[[package]] +name = "serde" +version = "1.0.204" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-big-array" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11fc7cc2c76d73e0f27ee52abbd64eec84d46f370c88371120433196934e4b7f" +dependencies = [ + "serde", +] + +[[package]] +name = "serde-generate" +version = "0.20.6" +source = "git+https://github.com/aptos-labs/serde-reflection?rev=73b6bbf748334b71ff6d7d09d06a29e3062ca075#73b6bbf748334b71ff6d7d09d06a29e3062ca075" +dependencies = [ + "bcs 0.1.6", + "bincode", + "heck 0.3.3", + "include_dir", + "maplit", + "serde", + "serde-reflection", + "serde_bytes", + "serde_yaml 0.8.26", + "structopt", + "textwrap 0.13.4", +] + +[[package]] +name = "serde-name" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12c47087018ec281d1cdab673d36aea22d816b54d498264029c05d5fa1910da6" +dependencies = [ + "serde", + "thiserror", +] + +[[package]] +name = "serde-reflection" +version = "0.3.5" +source = "git+https://github.com/aptos-labs/serde-reflection?rev=73b6bbf748334b71ff6d7d09d06a29e3062ca075#73b6bbf748334b71ff6d7d09d06a29e3062ca075" +dependencies = [ + "once_cell", + "serde", + "thiserror", +] + +[[package]] +name = "serde_bytes" +version = "0.11.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_cbor" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" +dependencies = [ + "half 1.8.3", + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.204" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "serde_json" +version = "1.0.120" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +dependencies = [ + "indexmap 2.2.6", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_merge" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "606e91878516232ac3b16c12e063d4468d762f16d77e7aef14a1f2326c5f409b" +dependencies = [ + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +dependencies = [ + "itoa", + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.6", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" +dependencies = [ + "darling 0.20.10", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "serde_yaml" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" +dependencies = [ + "indexmap 1.9.3", + "ryu", + "serde", + "yaml-rust", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.2.6", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "serial_test" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b4b487fe2acf240a021cf57c6b2b4903b1e78ca0ecd862a71b71d2a51fed77d" +dependencies = [ + "futures", + "log", + "once_cell", + "parking_lot", + "scc", + "serial_test_derive", +] + +[[package]] +name = "serial_test_derive" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "git+https://github.com/sp1-patches/RustCrypto-hashes?branch=patch-v0.10.8#1f224388fdede7cef649bce0d63876d1a9e3f515" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" +dependencies = [ + "block-buffer 0.9.0", + "digest 0.9.0", + "keccak", + "opaque-debug", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "sha3-asm" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9b57fd861253bff08bb1919e995f90ba8f4889de2726091c8876f3a4e823b40" +dependencies = [ + "cc", + "cfg-if", +] + +[[package]] +name = "shadow-rs" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c0ea0c68418544f725eba5401a5b965a2263254c92458d04aeae74e9d88ff4e" +dependencies = [ + "const_format", + "git2 0.15.0", + "is_debug", + "time", + "tzdb", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +dependencies = [ + "libc", + "mio 0.8.11", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "similar" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e" +dependencies = [ + "bstr", + "unicode-segmentation", +] + +[[package]] +name = "similar-asserts" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e041bb827d1bfca18f213411d51b665309f1afb37a04a5d1464530e13779fc0f" +dependencies = [ + "console", + "similar", +] + +[[package]] +name = "simple_asn1" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "thiserror", + "time", +] + +[[package]] +name = "simplelog" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bc0ffd69814a9b251d43afcabf96dad1b29f5028378056257be9e3fecc9f720" +dependencies = [ + "chrono", + "log", + "termcolor", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "size" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fed904c7fb2856d868b92464fc8fa597fce366edea1a9cbfaa8cb5fe080bd6d" + +[[package]] +name = "sized-chunks" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" +dependencies = [ + "bitmaps", + "typenum", +] + +[[package]] +name = "skeptic" +version = "0.13.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d23b015676c90a0f01c197bfdc786c20342c73a0afdda9025adb0bc42940a8" +dependencies = [ + "bytecount", + "cargo_metadata 0.14.2", + "error-chain", + "glob", + "pulldown-cmark", + "tempfile", + "walkdir", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slug" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bd94acec9c8da640005f8e135a39fc0372e74535e6b368b7a04b875f784c8c4" +dependencies = [ + "deunicode", + "wasm-bindgen", +] + +[[package]] +name = "smallbitvec" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3fc564a4b53fd1e8589628efafe57602d91bde78be18186b5f61e8faea470" + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "smawk" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" + +[[package]] +name = "snafu" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +dependencies = [ + "doc-comment", + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "sphinx-core" +version = "1.0.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?tag=v1.0.0#adc74bf2dedd8ded6e724e81e471ec5bdac3fcb4" +dependencies = [ + "anyhow", + "arrayref", + "bincode", + "blake3", + "bls12_381 0.8.0", + "cfg-if", + "curve25519-dalek 4.1.3", + "elf", + "elliptic-curve", + "hashbrown 0.14.5", + "hex", + "hybrid-array", + "itertools 0.12.1", + "k256", + "lazy_static", + "log", + "nohash-hasher", + "num", + "num-bigint 0.4.6", + "num_cpus", + "p3-air", + "p3-baby-bear", + "p3-blake3", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-fri", + "p3-keccak", + "p3-keccak-air", + "p3-matrix", + "p3-maybe-rayon", + "p3-merkle-tree", + "p3-poseidon2", + "p3-symmetric", + "p3-uni-stark", + "p3-util", + "rand 0.8.5", + "rayon-scan", + "rrs-lib", + "serde", + "serde_with", + "serial_test", + "size", + "sphinx-derive", + "sphinx-primitives", + "strum 0.26.3", + "strum_macros 0.26.4", + "tempfile", + "thiserror", + "tracing", + "tracing-forest", + "tracing-subscriber 0.3.18", + "web-time", +] + +[[package]] +name = "sphinx-derive" +version = "1.0.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?tag=v1.0.0#adc74bf2dedd8ded6e724e81e471ec5bdac3fcb4" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "sphinx-helper" +version = "1.0.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?tag=v1.0.0#adc74bf2dedd8ded6e724e81e471ec5bdac3fcb4" +dependencies = [ + "cargo_metadata 0.18.1", + "chrono", +] + +[[package]] +name = "sphinx-primitives" +version = "1.0.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?tag=v1.0.0#adc74bf2dedd8ded6e724e81e471ec5bdac3fcb4" +dependencies = [ + "itertools 0.12.1", + "lazy_static", + "p3-baby-bear", + "p3-field", + "p3-poseidon2", + "p3-symmetric", +] + +[[package]] +name = "sphinx-prover" +version = "1.0.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?tag=v1.0.0#adc74bf2dedd8ded6e724e81e471ec5bdac3fcb4" +dependencies = [ + "anyhow", + "backtrace", + "bincode", + "clap 4.5.11", + "futures", + "hex", + "home", + "indicatif", + "itertools 0.12.1", + "num-bigint 0.4.6", + "p3-baby-bear", + "p3-bn254-fr", + "p3-challenger", + "p3-commit", + "p3-field", + "rayon", + "reqwest 0.12.5", + "serde", + "serde_json", + "serial_test", + "sha2 0.10.8", + "size", + "sphinx-core", + "sphinx-primitives", + "sphinx-recursion-circuit", + "sphinx-recursion-compiler", + "sphinx-recursion-core", + "sphinx-recursion-gnark-ffi", + "sphinx-recursion-program", + "subtle-encoding", + "tempfile", + "thiserror", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "sphinx-recursion-circuit" +version = "1.0.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?tag=v1.0.0#adc74bf2dedd8ded6e724e81e471ec5bdac3fcb4" +dependencies = [ + "bincode", + "itertools 0.12.1", + "p3-air", + "p3-baby-bear", + "p3-bn254-fr", + "p3-commit", + "p3-field", + "p3-fri", + "p3-matrix", + "p3-util", + "serde", + "sphinx-core", + "sphinx-recursion-compiler", + "sphinx-recursion-core", + "sphinx-recursion-derive", + "sphinx-recursion-program", +] + +[[package]] +name = "sphinx-recursion-compiler" +version = "1.0.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?tag=v1.0.0#adc74bf2dedd8ded6e724e81e471ec5bdac3fcb4" +dependencies = [ + "backtrace", + "hashbrown 0.14.5", + "itertools 0.12.1", + "p3-air", + "p3-baby-bear", + "p3-bn254-fr", + "p3-commit", + "p3-field", + "p3-fri", + "p3-matrix", + "p3-poseidon2", + "p3-symmetric", + "p3-util", + "serde", + "sphinx-core", + "sphinx-recursion-core", + "sphinx-recursion-derive", + "tracing", +] + +[[package]] +name = "sphinx-recursion-core" +version = "1.0.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?tag=v1.0.0#adc74bf2dedd8ded6e724e81e471ec5bdac3fcb4" +dependencies = [ + "arrayref", + "backtrace", + "ff 0.13.0", + "hashbrown 0.14.5", + "itertools 0.12.1", + "p3-air", + "p3-baby-bear", + "p3-bn254-fr", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-fri", + "p3-matrix", + "p3-maybe-rayon", + "p3-merkle-tree", + "p3-poseidon2", + "p3-symmetric", + "serde", + "serde_with", + "sphinx-core", + "sphinx-derive", + "sphinx-primitives", + "static_assertions", + "tracing", + "zkhash", +] + +[[package]] +name = "sphinx-recursion-derive" +version = "0.1.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?tag=v1.0.0#adc74bf2dedd8ded6e724e81e471ec5bdac3fcb4" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "sphinx-recursion-gnark-ffi" +version = "1.0.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?tag=v1.0.0#adc74bf2dedd8ded6e724e81e471ec5bdac3fcb4" +dependencies = [ + "bindgen 0.69.4", + "cfg-if", + "log", + "num-bigint 0.4.6", + "p3-baby-bear", + "p3-field", + "p3-symmetric", + "rand 0.8.5", + "serde", + "serde_json", + "sphinx-core", + "sphinx-recursion-compiler", + "tempfile", +] + +[[package]] +name = "sphinx-recursion-program" +version = "1.0.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?tag=v1.0.0#adc74bf2dedd8ded6e724e81e471ec5bdac3fcb4" +dependencies = [ + "itertools 0.12.1", + "p3-air", + "p3-baby-bear", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-fri", + "p3-matrix", + "p3-maybe-rayon", + "p3-merkle-tree", + "p3-poseidon2", + "p3-symmetric", + "p3-util", + "rand 0.8.5", + "serde", + "sphinx-core", + "sphinx-recursion-compiler", + "sphinx-recursion-core", + "tracing", +] + +[[package]] +name = "sphinx-sdk" +version = "1.0.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?tag=v1.0.0#adc74bf2dedd8ded6e724e81e471ec5bdac3fcb4" +dependencies = [ + "alloy-sol-types", + "anyhow", + "async-trait", + "axum 0.7.5", + "bincode", + "cfg-if", + "ethers", + "futures", + "hex", + "home", + "indicatif", + "log", + "num-bigint 0.4.6", + "p3-commit", + "p3-field", + "p3-matrix", + "prost", + "reqwest 0.12.5", + "reqwest-middleware", + "serde", + "serde_json", + "sha2 0.10.8", + "sphinx-core", + "sphinx-prover", + "strum 0.26.3", + "strum_macros 0.26.4", + "tempfile", + "tokio", + "tracing", + "twirp", + "vergen", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "status-line" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a20cc99bbe608305546a850ec4352907279a8b8044f9c13ae58bd0a8ab46ebc1" +dependencies = [ + "ansi-escapes", + "atty", +] + +[[package]] +name = "str_stack" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9091b6114800a5f2141aee1d1b9d6ca3592ac062dc5decb3764ec5895a47b4eb" + +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "structopt" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" +dependencies = [ + "clap 2.34.0", + "lazy_static", + "structopt-derive", +] + +[[package]] +name = "structopt-derive" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" +dependencies = [ + "heck 0.3.3", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "strum" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" + +[[package]] +name = "strum" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +dependencies = [ + "strum_macros 0.25.3", +] + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros 0.26.4", +] + +[[package]] +name = "strum_macros" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 1.0.109", +] + +[[package]] +name = "strum_macros" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.72", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.72", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "subtle-encoding" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" +dependencies = [ + "zeroize", +] + +[[package]] +name = "subtle-ng" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn-solidity" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c837dc8852cb7074e46b444afb81783140dab12c58867b49fb3898fbafedf7ea" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" + +[[package]] +name = "sysinfo" +version = "0.28.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c2f3ca6693feb29a89724516f016488e9aafc7f37264f898593ee4b942f31b" +dependencies = [ + "cfg-if", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "rayon", + "winapi 0.3.9", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tagptr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if", + "fastrand", + "rustix 0.38.34", + "windows-sys 0.52.0", +] + +[[package]] +name = "tera" +version = "1.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab9d851b45e865f178319da0abdbfe6acbc4328759ff18dafc3a41c16b4cd2ee" +dependencies = [ + "chrono", + "chrono-tz", + "globwalk", + "humansize", + "lazy_static", + "percent-encoding", + "pest", + "pest_derive", + "rand 0.8.5", + "regex", + "serde", + "serde_json", + "slug", + "unic-segment", +] + +[[package]] +name = "termcolor" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "textwrap" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd05616119e612a8041ef58f2b578906cc2531a6069047ae092cfb86a325d835" +dependencies = [ + "smawk", + "unicode-width", +] + +[[package]] +name = "textwrap" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7b3e525a49ec206798b40326a44121291b530c963cfb01018f63e135bac543d" +dependencies = [ + "smawk", + "unicode-linebreak", + "unicode-width", +] + +[[package]] +name = "thiserror" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-bip39" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" +dependencies = [ + "anyhow", + "hmac 0.8.1", + "once_cell", + "pbkdf2 0.4.0", + "rand 0.7.3", + "rustc-hash", + "sha2 0.9.9", + "thiserror", + "unicode-normalization", + "wasm-bindgen", + "zeroize", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "git+https://github.com/sp1-patches/tiny-keccak?branch=patch-v2.0.2#bf0b28f63510a90c7b6c21ac6ff461c93ecd2331" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "tinyvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.39.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d040ac2b29ab03b09d4129c2f5bbd012a3ac2f79d38ff506a4bf8dd34b0eac8a" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio 1.0.1", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-macros" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" +dependencies = [ + "rustls 0.22.4", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls 0.23.12", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", +] + +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.2.6", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.2.6", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tonic" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76c4eb7a4e9ef9d4763600161f12f5070b92a578e1b634db88a6887844c91a13" +dependencies = [ + "async-stream", + "async-trait", + "axum 0.6.20", + "base64 0.21.7", + "bytes", + "flate2", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost", + "rustls-native-certs", + "rustls-pemfile 2.1.2", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.25.0", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", + "zstd", +] + +[[package]] +name = "tonic-reflection" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "548c227bd5c0fae5925812c4ec6c66ffcfced23ea370cb823f4d18f0fc1cb6a7" +dependencies = [ + "prost", + "prost-types", + "tokio", + "tokio-stream", + "tonic", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-forest" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee40835db14ddd1e3ba414292272eddde9dad04d3d4b65509656414d1c42592f" +dependencies = [ + "ansi_term", + "smallvec", + "thiserror", + "tracing", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +dependencies = [ + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term 0.46.0", + "once_cell", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", +] + +[[package]] +name = "trait-set" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b79e2e9c9ab44c6d7c20d5976961b47e8f49ac199154daa514b77cd1ab536625" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "triomphe" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6631e42e10b40c0690bf92f404ebcfe6e1fdb480391d15f17cc8e96eeed5369" +dependencies = [ + "serde", + "stable_deref_trait", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "tui" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccdd26cbd674007e649a272da4475fb666d3aa0ad0531da7136db6fab0e5bad1" +dependencies = [ + "bitflags 1.3.2", + "cassowary", + "crossterm 0.25.0", + "unicode-segmentation", + "unicode-width", +] + +[[package]] +name = "twirp" +version = "0.3.0" +source = "git+https://github.com/github/twirp-rs.git?rev=c85f31f9c54957374e7dcb3534fc52cff0aa2dc5#c85f31f9c54957374e7dcb3534fc52cff0aa2dc5" +dependencies = [ + "async-trait", + "axum 0.7.5", + "bytes", + "futures", + "http 1.1.0", + "http-body-util", + "hyper 1.4.1", + "prost", + "reqwest 0.12.5", + "serde", + "serde_json", + "thiserror", + "tokio", + "tower", + "url", +] + +[[package]] +name = "typed-arena" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "typeshare" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f17399b76c2e743d58eac0635d7686e9c00f48cd4776f00695d9882a7d3187" +dependencies = [ + "chrono", + "serde", + "serde_json", + "typeshare-annotation", +] + +[[package]] +name = "typeshare-annotation" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a615d6c2764852a2e88a4f16e9ce1ea49bb776b5872956309e170d63a042a34f" +dependencies = [ + "quote", + "syn 2.0.72", +] + +[[package]] +name = "tz-rs" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33851b15c848fad2cf4b105c6bb66eb9512b6f6c44a4b13f57c53c73c707e2b4" +dependencies = [ + "const_fn", +] + +[[package]] +name = "tzdb" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c420cf38925a5a6a3dc56e1c8f56f17a5b7755edd5adeb7cdab8b847e1fbe2af" +dependencies = [ + "iana-time-zone", + "tz-rs", + "tzdb_data", + "utcnow", +] + +[[package]] +name = "tzdb_data" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1889fdffac09d65c1d95c42d5202e9b21ad8c758f426e9fe09088817ea998d6" +dependencies = [ + "tz-rs", +] + +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "uncased" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" +dependencies = [ + "version_check", +] + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23" +dependencies = [ + "unic-ucd-segment", +] + +[[package]] +name = "unic-ucd-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-linebreak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "unicode-width" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "ureq" +version = "1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b8b063c2d59218ae09f22b53c42eaad0d53516457905f5235ca4bc9e99daa71" +dependencies = [ + "base64 0.13.1", + "chunked_transfer", + "log", + "native-tls", + "once_cell", + "qstring", + "serde", + "serde_json", + "url", +] + +[[package]] +name = "url" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +dependencies = [ + "form_urlencoded", + "idna 0.5.0", + "percent-encoding", + "serde", +] + +[[package]] +name = "utcnow" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "493ace370ee8579788f83a4f0eef89183c527b7551b4ad71364fac10371872b7" +dependencies = [ + "const_fn", + "errno", + "js-sys", + "libc", + "rustix 0.38.34", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", + "winapi 0.3.9", +] + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom 0.2.15", + "serde", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "variant_count" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae2faf80ac463422992abf4de234731279c058aaf33171ca70277c98406b124" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "vergen" +version = "8.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1b86a8af1dedf089b1c78338678e4c7492b6045649042d94faf19690499d236" +dependencies = [ + "anyhow", + "git2 0.16.1", + "rustversion", + "time", +] + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wait-timeout" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +dependencies = [ + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.72", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "wasm-streams" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix 0.38.34", +] + +[[package]] +name = "whoami" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" +dependencies = [ + "redox_syscall 0.4.1", + "wasite", + "web-sys", +] + +[[package]] +name = "widestring" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" + +[[package]] +name = "wildmatch" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3928939971918220fed093266b809d1ee4ec6c1a2d72692ff6876898f3b16c19" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "ws_stream_wasm" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" +dependencies = [ + "async_io_stream", + "futures", + "js-sys", + "log", + "pharos", + "rustc_version 0.4.0", + "send_wrapper 0.6.0", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wyz" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "x25519-dalek" +version = "1.2.0" +source = "git+https://github.com/aptos-labs/x25519-dalek?branch=zeroize_v1#762a9501668d213daa4a1864fa1f9db22716b661" +dependencies = [ + "curve25519-dalek 3.2.0", + "rand_core 0.5.1", + "zeroize", +] + +[[package]] +name = "yaml-rust" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "zkhash" +version = "0.2.0" +source = "git+https://github.com/HorizenLabs/poseidon2#bb476b9ca38198cf5092487283c8b8c5d4317c4e" +dependencies = [ + "ark-ff 0.4.2", + "ark-std 0.4.0", + "bitvec 1.0.1", + "blake2", + "bls12_381 0.7.1", + "byteorder", + "cfg-if", + "group 0.12.1", + "group 0.13.0", + "halo2", + "hex", + "jubjub", + "lazy_static", + "pasta_curves 0.5.1", + "rand 0.8.5", + "serde", + "sha2 0.10.8", + "sha3 0.10.8", + "subtle", +] + +[[package]] +name = "zstd" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" +dependencies = [ + "zstd-safe", +] + +[[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]] +name = "zstd-sys" +version = "2.0.12+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a4e40c320c3cb459d9a9ff6de98cff88f4751ee9275d140e2be94a2b74e4c13" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/fixture-generator/Cargo.toml b/fixture-generator/Cargo.toml new file mode 100644 index 00000000..d0f2abf4 --- /dev/null +++ b/fixture-generator/Cargo.toml @@ -0,0 +1,31 @@ +[package] +version = "1.0.0" +name = "fixture-generator" +edition = "2021" +license = "Apache-2.0" +repository = "https://github.com/lurk-lab/zk-light-clients" + +resolver = "2" + +[[bin]] +name = "generate-fixture" +path = "src/bin/main.rs" + +[dependencies] +sphinx-sdk = { git = "ssh://git@github.com/lurk-lab/sphinx", tag = "v1.0.0", features = ["plonk"] } +sphinx-prover = { git = "ssh://git@github.com/lurk-lab/sphinx", tag = "v1.0.0" } +ethereum-lc = { path = "../ethereum/light-client", features = ["ethereum"] } +aptos-lc = { path = "../aptos/light-client", features = ["aptos"] } +serde_json = { version = "1", features = ["alloc"] } +serde = { version = "1.0.193", features = ["derive"] } +clap = { version = "4.5.4", features = ["derive", "env"] } +tracing = "0.1.40" +alloy-sol-types = "0.7.2" + +# Match the forks used by the aptos crates +[patch.crates-io] +merlin = { git = "https://github.com/aptos-labs/merlin" } +x25519-dalek = { git = "https://github.com/aptos-labs/x25519-dalek", branch = "zeroize_v1" } +# Sphinx patch +tiny-keccak = { git = "https://github.com/sp1-patches/tiny-keccak", branch = "patch-v2.0.2" } +sha2 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", branch = "patch-v0.10.8" } diff --git a/aptos/solidity/fixture-generator/rust-toolchain b/fixture-generator/rust-toolchain similarity index 100% rename from aptos/solidity/fixture-generator/rust-toolchain rename to fixture-generator/rust-toolchain diff --git a/fixture-generator/src/bin/main.rs b/fixture-generator/src/bin/main.rs new file mode 100644 index 00000000..4bf370de --- /dev/null +++ b/fixture-generator/src/bin/main.rs @@ -0,0 +1,265 @@ +use clap::Parser; +use serde::{Deserialize, Serialize}; +use sphinx_prover::types::HashableKey; +use sphinx_sdk::ProverClient; +use std::path::PathBuf; + +use ethereum_lc::proofs::committee_change::{CommitteeChangeIn, CommitteeChangeProver}; +use ethereum_lc::proofs::inclusion::{StorageInclusionIn, StorageInclusionProver}; +use ethereum_lc::proofs::{ProofType, Prover, ProvingMode}; +use ethereum_lc::test_utils::{ + generate_committee_change_test_assets, generate_inclusion_test_assets, +}; + +pub const APTOS_INCLUSION_ELF: &[u8] = + include_bytes!("../../../aptos/aptos-programs/artifacts/inclusion-program"); +pub const APTOS_EPOCH_CHANGE_ELF: &[u8] = + include_bytes!("../../../aptos/aptos-programs/artifacts/epoch-change-program"); + +#[derive(Parser, Debug)] +#[clap(author, version, about, long_about = None)] +struct ProveArgs { + #[clap(long, default_value_t = String::from("inclusion"))] + program: String, + #[clap(long, default_value_t = String::from("solidity"))] + language: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +struct SolidityFixture { + vkey: String, + public_values: String, + proof: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +struct MoveArg { + #[serde(rename = "type")] + type_: String, + value: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +struct MoveFixture { + type_args: [String; 2], // two hardcoded service fields required by Aptos + args: [MoveArg; 3], // vk, public_values, proof +} + +fn generate_fixture_inclusion_aptos_lc() { + tracing::info!("Generating inclusion fixture using Aptos program (for Solidity verification)"); + + let elf = APTOS_INCLUSION_ELF; + let (sparse_merkle_proof_assets, transaction_proof_assets, validator_verifier_assets) = + aptos_lc::inclusion::setup_assets(); + let stdin = aptos_lc::inclusion::generate_stdin( + &sparse_merkle_proof_assets, + &transaction_proof_assets, + &validator_verifier_assets, + ); + + let prover = ProverClient::new(); + let (pk, vk) = prover.setup(elf); + let proof = prover.prove_plonk(&pk, stdin).unwrap(); + // just to check that proof is valid and verifiable + prover.verify_plonk(&proof, &vk).unwrap(); + + let fixture_path = + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../contracts/src/plonk_fixtures"); + + // save fixture + let fixture = SolidityFixture { + vkey: vk.bytes32().to_string(), + public_values: proof.public_values.bytes().to_string(), + proof: proof.bytes(), + }; + std::fs::create_dir_all(&fixture_path).expect("failed to create fixture path"); + let fixture_path = fixture_path.join("inclusion_fixture.json"); + std::fs::write( + fixture_path.clone(), + serde_json::to_string_pretty(&fixture).unwrap(), + ) + .expect("failed to write fixture"); + + tracing::info!("Fixture has been successfully saved to {:?}", fixture_path); +} + +fn generate_fixture_inclusion_ethereum_lc() { + tracing::info!("Generating inclusion fixture using Ethereum program (for Move verification)"); + + let prover = StorageInclusionProver::new(); + let test_assets = generate_inclusion_test_assets(); + let input = StorageInclusionIn::new( + test_assets.store().clone(), + test_assets.finality_update().clone().into(), + test_assets.eip1186_proof().clone(), + ); + let proof = match prover.prove(input, ProvingMode::SNARK).unwrap() { + ProofType::SNARK(inner_proof) => inner_proof, + _ => { + panic!("Unexpected proof") + } + }; + prover.verify(&ProofType::SNARK(proof.clone())).unwrap(); + + // save fixture + let fixture = MoveFixture { + type_args: [ + String::from("0x1::account::Account"), + String::from("0x1::chain_id::ChainId"), + ], + args: [ + MoveArg { + // vk + type_: String::from("hex"), + value: prover.get_vk().bytes32().to_string(), + }, + MoveArg { + // public values + type_: String::from("hex"), + value: proof.public_values.bytes().to_string(), + }, + MoveArg { + // proof + type_: String::from("hex"), + value: proof.bytes(), + }, + ], + }; + + let fixture_path = + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../../../ethereum/move/sources/fixtures"); + std::fs::create_dir_all(&fixture_path).expect("failed to create fixture path"); + let fixture_path = fixture_path.join("inclusion_fixture.json"); + std::fs::write( + fixture_path.clone(), + serde_json::to_string_pretty(&fixture).unwrap(), + ) + .expect("failed to write fixture"); + + tracing::info!("Fixture has been successfully saved to {:?}", fixture_path); +} + +fn generate_fixture_epoch_change_aptos_lc() { + tracing::info!( + "Generating epoch_change fixture using Aptos program (for Solidity verification)" + ); + + let elf = APTOS_EPOCH_CHANGE_ELF; + let (trusted_state, epoch_change_proof, _) = aptos_lc::epoch_change::setup_assets(); + let stdin = aptos_lc::epoch_change::generate_stdin(&trusted_state, &epoch_change_proof); + + let prover = ProverClient::new(); + let (pk, vk) = prover.setup(elf); + let proof = prover.prove_plonk(&pk, stdin).unwrap(); + // just to check that proof is valid and verifiable + prover.verify_plonk(&proof, &vk).unwrap(); + + let fixture_path = + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../contracts/src/plonk_fixtures"); + + // save fixture + let fixture = SolidityFixture { + vkey: vk.bytes32().to_string(), + public_values: proof.public_values.bytes().to_string(), + proof: proof.bytes(), + }; + std::fs::create_dir_all(&fixture_path).expect("failed to create fixture path"); + let fixture_path = fixture_path.join("epoch_change_fixture.json"); + std::fs::write( + fixture_path.clone(), + serde_json::to_string_pretty(&fixture).unwrap(), + ) + .expect("failed to write fixture"); + + tracing::info!("Fixture has been successfully saved to {:?}", fixture_path); +} + +fn generate_fixture_epoch_change_ethereum_lc() { + tracing::info!( + "Generating epoch_change fixture using Ethereum program (for Move verification)" + ); + + let mut test_assets = generate_committee_change_test_assets(); + test_assets + .store + .process_light_client_update(&test_assets.update) + .unwrap(); + let new_period_inputs = CommitteeChangeIn::new( + test_assets.store.clone(), + test_assets.update_new_period.clone(), + ); + let prover = CommitteeChangeProver::new(); + let proof = match prover.prove(new_period_inputs, ProvingMode::SNARK).unwrap() { + ProofType::SNARK(inner_proof) => inner_proof, + _ => { + panic!("Unexpected proof") + } + }; + prover.verify(&ProofType::SNARK(proof.clone())).unwrap(); + + // save fixture + let fixture = MoveFixture { + type_args: [ + String::from("0x1::account::Account"), + String::from("0x1::chain_id::ChainId"), + ], + args: [ + MoveArg { + // vk + type_: String::from("hex"), + value: prover.get_vk().bytes32().to_string(), + }, + MoveArg { + // public values + type_: String::from("hex"), + value: proof.public_values.bytes().to_string(), + }, + MoveArg { + // proof + type_: String::from("hex"), + value: proof.bytes(), + }, + ], + }; + + let fixture_path = + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../../../ethereum/move/sources/fixtures"); + + std::fs::create_dir_all(&fixture_path).expect("failed to create fixture path"); + let fixture_path = fixture_path.join("epoch_change_fixture.json"); + std::fs::write( + fixture_path.clone(), + serde_json::to_string_pretty(&fixture).unwrap(), + ) + .expect("failed to write fixture"); + + tracing::info!("Fixture has been successfully saved to {:?}", fixture_path); +} + +fn main() { + sphinx_sdk::utils::setup_logger(); + let args = ProveArgs::parse(); + + match args.program.as_str() { + "inclusion" => match args.language.as_str() { + "solidity" => { + generate_fixture_inclusion_aptos_lc(); + } + "move" => { + generate_fixture_inclusion_ethereum_lc(); + } + _ => panic!("Unsupported language. Use: ['solidity', 'move']"), + }, + "epoch_change" => match args.language.as_str() { + "solidity" => { + generate_fixture_epoch_change_aptos_lc(); + } + "move" => { + generate_fixture_epoch_change_ethereum_lc(); + } + _ => panic!("Unsupported language. Use: ['solidity', 'move']"), + }, + _ => panic!("Unsupported program. Use: ['inclusion', 'epoch_change']"), + } +} From 12f713084ea64e8bf0daf185b49a049496703b25 Mon Sep 17 00:00:00 2001 From: Thomas Chataigner Date: Tue, 30 Jul 2024 15:40:52 +0200 Subject: [PATCH 14/19] feat: update deps to fit release branch --- aptos/Cargo.lock | 8 +- aptos/programs/inclusion/Cargo.lock | 4 +- fixture-generator/Cargo.lock | 138 ++------------------------ fixture-generator/Cargo.toml | 1 - fixture-generator/src/bin/main.rs | 148 +--------------------------- 5 files changed, 14 insertions(+), 285 deletions(-) diff --git a/aptos/Cargo.lock b/aptos/Cargo.lock index 48af1c0f..0db51b12 100644 --- a/aptos/Cargo.lock +++ b/aptos/Cargo.lock @@ -1024,7 +1024,7 @@ dependencies = [ [[package]] name = "aptos-lc" -version = "1.0.0" +version = "1.0.1" dependencies = [ "anyhow", "aptos-lc-core", @@ -1040,7 +1040,7 @@ dependencies = [ [[package]] name = "aptos-lc-core" -version = "1.0.0" +version = "1.0.1" dependencies = [ "anyhow", "aptos-crypto", @@ -1246,7 +1246,7 @@ dependencies = [ [[package]] name = "aptos-programs" -version = "1.0.0" +version = "1.0.1" dependencies = [ "glob", "sphinx-helper", @@ -8051,7 +8051,7 @@ dependencies = [ [[package]] name = "proof-server" -version = "1.0.0" +version = "1.0.1" dependencies = [ "anyhow", "aptos-lc", diff --git a/aptos/programs/inclusion/Cargo.lock b/aptos/programs/inclusion/Cargo.lock index 4c1a2d8d..6109a27e 100644 --- a/aptos/programs/inclusion/Cargo.lock +++ b/aptos/programs/inclusion/Cargo.lock @@ -10,7 +10,7 @@ checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "aptos-lc-core" -version = "1.0.0" +version = "1.0.1" dependencies = [ "anyhow", "bcs", @@ -311,7 +311,7 @@ dependencies = [ [[package]] name = "inclusion-program" -version = "1.0.0" +version = "1.0.1" dependencies = [ "aptos-lc-core", "sphinx-zkvm", diff --git a/fixture-generator/Cargo.lock b/fixture-generator/Cargo.lock index 9e425329..3066f507 100644 --- a/fixture-generator/Cargo.lock +++ b/fixture-generator/Cargo.lock @@ -1024,7 +1024,7 @@ dependencies = [ [[package]] name = "aptos-lc" -version = "1.0.0" +version = "1.0.1" dependencies = [ "anyhow", "aptos-lc-core", @@ -1038,7 +1038,7 @@ dependencies = [ [[package]] name = "aptos-lc-core" -version = "1.0.0" +version = "1.0.1" dependencies = [ "anyhow", "aptos-crypto", @@ -1243,7 +1243,7 @@ dependencies = [ [[package]] name = "aptos-programs" -version = "1.0.0" +version = "1.0.1" dependencies = [ "glob", "sphinx-helper", @@ -2084,12 +2084,6 @@ dependencies = [ "rustc_version 0.4.0", ] -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - [[package]] name = "atty" version = "0.2.14" @@ -3847,7 +3841,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" dependencies = [ "log", - "regex", ] [[package]] @@ -3856,10 +3849,7 @@ version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" dependencies = [ - "anstream", - "anstyle", "env_filter", - "humantime", "log", ] @@ -3951,50 +3941,6 @@ dependencies = [ "tiny-keccak", ] -[[package]] -name = "ethereum-lc" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap 4.5.11", - "env_logger", - "ethereum-lc-core", - "ethereum-programs", - "ethers-core", - "getset", - "hex", - "log", - "reqwest 0.12.5", - "serde", - "serde_json", - "sphinx-sdk", - "thiserror", - "tokio", -] - -[[package]] -name = "ethereum-lc-core" -version = "0.1.0" -dependencies = [ - "anyhow", - "bls12_381 0.8.0", - "ethers-core", - "getset", - "hex", - "serde", - "sha2 0.9.9", - "thiserror", - "tiny-keccak", -] - -[[package]] -name = "ethereum-programs" -version = "0.1.0" -dependencies = [ - "glob", - "sphinx-helper", -] - [[package]] name = "ethereum-types" version = "0.14.1" @@ -4344,7 +4290,6 @@ dependencies = [ "alloy-sol-types", "aptos-lc", "clap 4.5.11", - "ethereum-lc", "serde", "serde_json", "sphinx-prover", @@ -4759,25 +4704,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "h2" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http 1.1.0", - "indexmap 2.2.6", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "half" version = "1.8.3" @@ -5112,12 +5038,6 @@ dependencies = [ "libm", ] -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - [[package]] name = "hybrid-array" version = "0.2.0-rc.9" @@ -5137,7 +5057,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.3.26", + "h2", "http 0.2.12", "http-body 0.4.6", "httparse", @@ -5160,7 +5080,6 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.5", "http 1.1.0", "http-body 1.0.1", "httparse", @@ -5172,23 +5091,6 @@ dependencies = [ "want", ] -[[package]] -name = "hyper-rustls" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" -dependencies = [ - "futures-util", - "http 1.1.0", - "hyper 1.4.1", - "hyper-util", - "rustls 0.23.12", - "rustls-pki-types", - "tokio", - "tokio-rustls 0.26.0", - "tower-service", -] - [[package]] name = "hyper-timeout" version = "0.4.1" @@ -8496,7 +8398,7 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2 0.3.26", + "h2", "http 0.2.12", "http-body 0.4.6", "hyper 0.14.30", @@ -8535,15 +8437,12 @@ checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" dependencies = [ "base64 0.22.1", "bytes", - "encoding_rs", "futures-core", "futures-util", - "h2 0.4.5", "http 1.1.0", "http-body 1.0.1", "http-body-util", "hyper 1.4.1", - "hyper-rustls", "hyper-tls 0.6.0", "hyper-util", "ipnet", @@ -8559,7 +8458,6 @@ dependencies = [ "serde_json", "serde_urlencoded", "sync_wrapper 1.0.1", - "system-configuration", "tokio", "tokio-native-tls", "tokio-util", @@ -8835,19 +8733,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rustls" -version = "0.23.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" -dependencies = [ - "once_cell", - "rustls-pki-types", - "rustls-webpki 0.102.6", - "subtle", - "zeroize", -] - [[package]] name = "rustls-native-certs" version = "0.7.1" @@ -10459,17 +10344,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-rustls" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" -dependencies = [ - "rustls 0.23.12", - "rustls-pki-types", - "tokio", -] - [[package]] name = "tokio-stream" version = "0.1.15" @@ -10565,7 +10439,7 @@ dependencies = [ "base64 0.21.7", "bytes", "flate2", - "h2 0.3.26", + "h2", "http 0.2.12", "http-body 0.4.6", "hyper 0.14.30", diff --git a/fixture-generator/Cargo.toml b/fixture-generator/Cargo.toml index d0f2abf4..feb01d18 100644 --- a/fixture-generator/Cargo.toml +++ b/fixture-generator/Cargo.toml @@ -14,7 +14,6 @@ path = "src/bin/main.rs" [dependencies] sphinx-sdk = { git = "ssh://git@github.com/lurk-lab/sphinx", tag = "v1.0.0", features = ["plonk"] } sphinx-prover = { git = "ssh://git@github.com/lurk-lab/sphinx", tag = "v1.0.0" } -ethereum-lc = { path = "../ethereum/light-client", features = ["ethereum"] } aptos-lc = { path = "../aptos/light-client", features = ["aptos"] } serde_json = { version = "1", features = ["alloc"] } serde = { version = "1.0.193", features = ["derive"] } diff --git a/fixture-generator/src/bin/main.rs b/fixture-generator/src/bin/main.rs index 4bf370de..9e9d84be 100644 --- a/fixture-generator/src/bin/main.rs +++ b/fixture-generator/src/bin/main.rs @@ -4,13 +4,6 @@ use sphinx_prover::types::HashableKey; use sphinx_sdk::ProverClient; use std::path::PathBuf; -use ethereum_lc::proofs::committee_change::{CommitteeChangeIn, CommitteeChangeProver}; -use ethereum_lc::proofs::inclusion::{StorageInclusionIn, StorageInclusionProver}; -use ethereum_lc::proofs::{ProofType, Prover, ProvingMode}; -use ethereum_lc::test_utils::{ - generate_committee_change_test_assets, generate_inclusion_test_assets, -}; - pub const APTOS_INCLUSION_ELF: &[u8] = include_bytes!("../../../aptos/aptos-programs/artifacts/inclusion-program"); pub const APTOS_EPOCH_CHANGE_ELF: &[u8] = @@ -33,19 +26,6 @@ struct SolidityFixture { proof: String, } -#[derive(Debug, Clone, Serialize, Deserialize)] -struct MoveArg { - #[serde(rename = "type")] - type_: String, - value: String, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -struct MoveFixture { - type_args: [String; 2], // two hardcoded service fields required by Aptos - args: [MoveArg; 3], // vk, public_values, proof -} - fn generate_fixture_inclusion_aptos_lc() { tracing::info!("Generating inclusion fixture using Aptos program (for Solidity verification)"); @@ -84,62 +64,6 @@ fn generate_fixture_inclusion_aptos_lc() { tracing::info!("Fixture has been successfully saved to {:?}", fixture_path); } -fn generate_fixture_inclusion_ethereum_lc() { - tracing::info!("Generating inclusion fixture using Ethereum program (for Move verification)"); - - let prover = StorageInclusionProver::new(); - let test_assets = generate_inclusion_test_assets(); - let input = StorageInclusionIn::new( - test_assets.store().clone(), - test_assets.finality_update().clone().into(), - test_assets.eip1186_proof().clone(), - ); - let proof = match prover.prove(input, ProvingMode::SNARK).unwrap() { - ProofType::SNARK(inner_proof) => inner_proof, - _ => { - panic!("Unexpected proof") - } - }; - prover.verify(&ProofType::SNARK(proof.clone())).unwrap(); - - // save fixture - let fixture = MoveFixture { - type_args: [ - String::from("0x1::account::Account"), - String::from("0x1::chain_id::ChainId"), - ], - args: [ - MoveArg { - // vk - type_: String::from("hex"), - value: prover.get_vk().bytes32().to_string(), - }, - MoveArg { - // public values - type_: String::from("hex"), - value: proof.public_values.bytes().to_string(), - }, - MoveArg { - // proof - type_: String::from("hex"), - value: proof.bytes(), - }, - ], - }; - - let fixture_path = - PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../../../ethereum/move/sources/fixtures"); - std::fs::create_dir_all(&fixture_path).expect("failed to create fixture path"); - let fixture_path = fixture_path.join("inclusion_fixture.json"); - std::fs::write( - fixture_path.clone(), - serde_json::to_string_pretty(&fixture).unwrap(), - ) - .expect("failed to write fixture"); - - tracing::info!("Fixture has been successfully saved to {:?}", fixture_path); -} - fn generate_fixture_epoch_change_aptos_lc() { tracing::info!( "Generating epoch_change fixture using Aptos program (for Solidity verification)" @@ -175,68 +99,6 @@ fn generate_fixture_epoch_change_aptos_lc() { tracing::info!("Fixture has been successfully saved to {:?}", fixture_path); } -fn generate_fixture_epoch_change_ethereum_lc() { - tracing::info!( - "Generating epoch_change fixture using Ethereum program (for Move verification)" - ); - - let mut test_assets = generate_committee_change_test_assets(); - test_assets - .store - .process_light_client_update(&test_assets.update) - .unwrap(); - let new_period_inputs = CommitteeChangeIn::new( - test_assets.store.clone(), - test_assets.update_new_period.clone(), - ); - let prover = CommitteeChangeProver::new(); - let proof = match prover.prove(new_period_inputs, ProvingMode::SNARK).unwrap() { - ProofType::SNARK(inner_proof) => inner_proof, - _ => { - panic!("Unexpected proof") - } - }; - prover.verify(&ProofType::SNARK(proof.clone())).unwrap(); - - // save fixture - let fixture = MoveFixture { - type_args: [ - String::from("0x1::account::Account"), - String::from("0x1::chain_id::ChainId"), - ], - args: [ - MoveArg { - // vk - type_: String::from("hex"), - value: prover.get_vk().bytes32().to_string(), - }, - MoveArg { - // public values - type_: String::from("hex"), - value: proof.public_values.bytes().to_string(), - }, - MoveArg { - // proof - type_: String::from("hex"), - value: proof.bytes(), - }, - ], - }; - - let fixture_path = - PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../../../ethereum/move/sources/fixtures"); - - std::fs::create_dir_all(&fixture_path).expect("failed to create fixture path"); - let fixture_path = fixture_path.join("epoch_change_fixture.json"); - std::fs::write( - fixture_path.clone(), - serde_json::to_string_pretty(&fixture).unwrap(), - ) - .expect("failed to write fixture"); - - tracing::info!("Fixture has been successfully saved to {:?}", fixture_path); -} - fn main() { sphinx_sdk::utils::setup_logger(); let args = ProveArgs::parse(); @@ -246,19 +108,13 @@ fn main() { "solidity" => { generate_fixture_inclusion_aptos_lc(); } - "move" => { - generate_fixture_inclusion_ethereum_lc(); - } - _ => panic!("Unsupported language. Use: ['solidity', 'move']"), + _ => panic!("Unsupported language. Use: ['solidity']"), }, "epoch_change" => match args.language.as_str() { "solidity" => { generate_fixture_epoch_change_aptos_lc(); } - "move" => { - generate_fixture_epoch_change_ethereum_lc(); - } - _ => panic!("Unsupported language. Use: ['solidity', 'move']"), + _ => panic!("Unsupported language. Use: ['solidity']"), }, _ => panic!("Unsupported program. Use: ['inclusion', 'epoch_change']"), } From 7569d3dbd704ca414bf99c44f6b9668dab3aa3f5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 29 Jul 2024 09:58:31 -0400 Subject: [PATCH 15/19] chore: Update fixtures (#124) Co-authored-by: tchataigner <9974198+tchataigner@users.noreply.github.com> --- .../plonk_fixtures/epoch_change_fixture.json | 21 ++++++++++++++++--- .../src/plonk_fixtures/inclusion_fixture.json | 21 ++++++++++++++++--- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json index 576fda7a..39c58236 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json @@ -1,5 +1,20 @@ { - "vkey": "0x008f0133dc5a02eb31ac769e9e3a2f34da1af34c963bf3ee9a058982a2978cc9", - "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ecc071f215064bfe6f1c24295135199ce6f6dec2974115fad50989e666915453ad", - "proof": "0x2acb18f955dc3e02caeb28dc5282a69d34ea0fa41025b8773c33295fdb09cb3e2e771f7f4523cb97e3993b4891680bee9113e1693836ba81cc8d572cd493236406870eb65a5fb6d15fe08db834e121b08c311051f412c69bb9e964fb26c1097a25f7b2a9bfeac9348f545fad648f434dd2e330af76bbf5f95716b36599e8eb852cde5bbbc7db177e6dab4a06913e84e7f6a42995bd4035b30dc0b2f80a181d0d0ef83f210d29327b32aeb04966b022b32b95834bc30ec1a0d23ebafbff2dd4fa1e47660c998369fd543baf0c0673b89f9dc5a3c3112e7b101cdf7427bcb134642d1653b90e3d33b9c55b01fce9e5b24bcd0c99ffaf6ae132b6080077a8c6c8d52d7eb3418d3379107c7ed174e39c10a67ab631378ddb7eb7477bcc92bbe86a4b01f2b82cb78c36a2f39658881a33f7ff3577e4e18adb7a8f0e9e8a52eb2d843e02d08b55d2c9829b41b54b39687aa3ee7f3d47e6fdbcb88d53a8aa7ec3a740d81efa5bf5b88b0afa9030535ad970085df9c8f7c605681eb26c77791bd253a1cd1df1e6444acc07c138ffd7f200e8c24b59181cf42d3695601ab0f475ad94f59e240ef5287662cb1bc8d593d2ec4f4236d6a9fe626a7742d7db3cfd12cb1aea631adbc98a307aa3428d8c092ce40c7ef54539e312fbc3eff5dbdb67359088852f0889d2b12abbf631ef2f39675e10cffb7608fbd9607f3b73645ab909fc843e99108ed807de5eacf1429d2cdcfd3cb3095bb50299a551ab3e97f651c1804cc82a16657b2df4ea32277a7e0aa9b420f4e5c6f531e32fe985c41ead82c7451ba3db219d790077b98c28ff3f3f55686235c83754ed13b299b1597f9a89ae94b7ab0825440d5e013ea0f6200c42600ef60780535a48e5575ba757658ddf912d2dfa200ee68cc990e617fede5f84ad4bdb1845323c35c5bf2baefd055967eaf7fec2450551b4538c3c4e46da9a98dd130ea2cd23e90e3c18ab6ba0614e7d9cde5baf1f2aaf47136c29a68a59e82f120cde4b5ef646a54a4fa80517b8c0e0b8b7283d44169c1acb122270ac6f238439aa96f2f51431473634e0d853eef0288cbae1042d1d942884490e2e513eaabd345d4c59efc6279a6714d2a424e7bebc7efb195ae82b8123b682534529fab8a6a0f26118af160e02b68711c7f03535eef61929dd2d034a924bf3607b7e9478945a99cd548b88d917f308ad5628db8bf320cb1f0784" + "type_args": [ + "0x1::account::Account", + "0x1::chain_id::ChainId" + ], + "args": [ + { + "type": "hex", + "value": "0x00ada4c1c7b3b02e4b3bb0a7f709ae37162ecbfed7cfb28d4e76dc0743987c71" + }, + { + "type": "hex", + "value": "0xe0e58f00000000005d32119aae2ee9f88867d5787af5c4df68884a4bf8fff525ff8c408e8f98805085382a0c8b1b38485a3d816f31ab5b23a0eae94d86c90086cd4e7b6e8c5c46825ebd1cf9ea54ce88af740aad4d7e95e742157209f36867ff5d7d490afa91c6bf" + }, + { + "type": "hex", + "value": "0x03f109fd26d16ef1af961125e327c9eba8e2848ee57646467d52e842fa7734d31d8b32800fb70218739f6736dbe34887f1c11b66a7736b9d49b45ca6cd9710092d770c7d252a16a61ac8000cf5edc7c7134fcef37c15b911c94e8488825d2f232e3931d802217775ece533f61af8f7a1cdd302dea6576173871e8a093d4e27a52529ae513720d60d95eea4094b3a772a5ad90adbefaefcf35420b31c5f1c3e7c0945189f731d23f81b5c699f7e677b181bf8b4118818c050f085968435f0ed0f221662a678d5902ec1791771e03c6602de36cbccdb73126dfef8ff5bb08edbd3033678b995f89369271de3fc346b37d6de7f6e54021858862bfd0d07496c35910949dd225a772cee1cd351a0d43ae7565b17e1ad3759bbaf304efe6d79e29a442b4d15926773d1c2426e10ca2de24fa8871336e09de905275fe2b0c0ce74957b0d742ae44def83dbd82eaff9e0a5aac9c66a3baff28728d60367fc23f291ddb90587d177128fc59f69ba5fb8b67574b2feaaf303ae0edb8ec181e13cc0468f721e8162e77d4cd912506fdbe27289c5ac382617a875f211a9e44146abf26114b9025fd04e4e2b0c8721ea806bc5dd4fc294dfb8123558eebd94f110216baf37c32e1187bf9ad026e762c5c570f9e29e9bd4df1778317af98da41ad45fa2d2136104ba1c803286dd99b2dbd52f6bfa684feadc745087af910daaab55bc47bb0b9a27fa9fa0e1d7ddabc42c2b14e66d6207c9b4c21c199ca925c110d8c8197901391fd2cafb2c3ac1cad3ba201f44d6fe5647a5a35f03802bb74f4c8f652304f9bd14e7618064e79623138fc05877aa99416b268a6fc8678fcef1f7d99206adf42f2e6deb4fca7c0f35c0a2a716ac3d8497598a2bc86acea854b73897c697cd7bf415052783b0700a167e0377baf1487636050dc53e14c5ab968964553607d8bfa113930c50854658419969f1c966be9ff9a67c425e4d4bd6686515f9a6b73755eb16ab6c19f1fb6fa5a9bd47e1d8fbc1f1c026b6d269379d3c43d7f71268c8f111231ff5ca6549ad28693628c6678738a2d19d09c7750a570ddefd20200f4531462a9acb0b21c7f2a3ab4f7ee1a9e40d6614991664bc2b43bd4fd5acf9d8a21db42d48ec499109aa74c98335224d9047778c361c14d04bd45f257334b5196fbea00a3dd5ae1654187fabbd4657761f9814a7709544ce6c0b346a262395f1d132a7" + } + ] } \ No newline at end of file diff --git a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json index 80600ca3..09437a4e 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json @@ -1,5 +1,20 @@ { - "vkey": "0x00336c570224c00161ca7b3c275c24f3968aa09086c31d09d98691bce109f4f6", - "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ec9b7e4a4d93458468f95db74bdd3f2ba69088cbd8742033b860ea873f37c31249020202020202020202020202020202020202020202020202020202020202020244fa02feb400a383b1824df6198c7e30cbf60a21838efa46fedf35f760fdf25839d1a3ec2b5d09aee31c1c0c380eef28744673ea3ab7e9d065baccc8d1874ca1", - "proof": "0x0b54c8661022e4ff23f73f079de5ba33937ea0102823afc28ecfea25480f9752006c59590b163ff5758851dca4b41ed2eb3d4161fbd4abf0a50670cfd68b53711bbc9e9e89b362c18ea83bc962fd1d98484a66925eb887ff4119f2f5cbb7926b1a718a45ed0c5c6ab78c0d33822c710d75023c8b29a074ec870058e8043cdf980a1225950c5d8218425a3d0285791e7fff7fd537491465a46841edd3fa6badc7014663ed841f305f8ad45296f278638a0dcdb050b1568950b6f1e17438caaa8f1cc5e3fa388b876e103ae409a117d1f77ec3148ae53b75e54322d7b72b50d99013c2f90e019ef00595be5629baeaf8f6c92b1326663655ecf10e23dbbef025221f73b9500ec0cc8b83689dcccf436fc79b54e2d08417f48b2ba7f8b4b6ca7e10062be829423a371789e9768f70bb74b5fb4021e743948dc60c9dd77d5189faef2e3ef0fe9583dca9ab69de6bf52e68405ec465e1e8039ded1fa8936a4c27116b2cfc94e0374db54086e2af12a0541f4edc4a1affa9fbb633ac76b3bc5dd211c10afc57a70d371057cab02bfeab658088f632c10a441c0ce23256abf9882936042217cc9ba849d59926bd44a71007dcfd19a3cc1e9a490ec8c2f39a20311df72f2212381f12b5e007af0d38ba6c14b794387c419ca17e9f83963c4540810d8415099f0ee8a8cc5f851585eaac8b71ca3b79213238cfdd16c5c64065477c27413c268cbe31a1be4e1078e97d777cbe07c37065e534548bf8ceb595c7e53ef2b17c02aa84bde9fb63d06a6c3dbd12247db7d459f9587bfd0ff820bb985e2379fff9124471544aea1561fe6d02aae5202044a93665e65a28696fc760624dbc7b3339226800b36dfd83665b5aa642d1aa742a96cc462efa92b43be640ad05dbe073ec0f0f0e9a9907cb3a5c027690f963a759ce8e9eb05b3212c7ba17585fb420d7851bffb94278d4465cf64ffa1936b3f3e6e3191e1cff7250542f78e2c2785934ba1c0a8d7d32469c216b4863653a212dae504635c9314c87fb6aee948414590ceb1a3f7639648a9aad68c2628f7586a3e52efd3655cfbcbc93ece94837823df61d29d4bd7d411495d28ff4ec25ddfa25444096aed1b70ea22245f9a336f6a564d6181cf2c23f95e3ed134587fefd6cafec971fbf5f7c7dbbf0b26e4ef0878ccec60ad20b11e1719b58f00061aa8feb40c6cf3e7caf9d7c69ef47b522ba148a530c" + "type_args": [ + "0x1::account::Account", + "0x1::chain_id::ChainId" + ], + "args": [ + { + "type": "hex", + "value": "0x00e326549ab661885dbefc3570c3f1f73aafc248b5f6119db8c08a3f9149c5eb" + }, + { + "type": "hex", + "value": "0xe0fc9100000000000969ed235cf75d25800ea6845c2584af013c1f9617ad2de87202d7e9b93739c95c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f22002fe30a172d0a479f6add89c63b29dce29b6071b3c7e486b0fb4bc431f88501000000000000002000000000000000290decd9548b62a8ef0d3e6ac11e2d7b95a49e22ecf57fc6044b6f007ca2b2ba010000000000000080" + }, + { + "type": "hex", + "value": "0x2fafb27d2bbd7486fffcc7a5ededd3267d3198fd91be91ce6725d6ea2241af0206b3cbf9c152ddc2e6c05041de5c87ba04e92beedd8c50e9aa95d6900767c0081252c036f0d5e3adb72b1072a75cf633bd3d9ff694a9d58b74969a86ba2cf9401be2da6ca6a6b5bf3c9ea6163dbc6ba57e0e72a10e3cd47ad2a69d02559f8cfe16ea811d95f6192c002b50bda1a44028b27dd3f7fb565db43e71df1118139409199f91baf740a0af216bd2ddf06b2902609a35dbb9e0365c7401de37cdee0de128b517ee62bcbf0edd0c24781a106a7c55d9380cf94c3e9bd22dcd39240a13421fcc162528804a127269d36081a5984b0b3cccb10f26732805fadb0469a485c619929e215d37908263482f0b47ccdb72ea783658a71e2264ee787074c749512b0373d691a86489ace4932bfd322da06e82cffa6de0d60eeeb15a8bdc90403e3f2a5e97f4c76016a619aea3a93e65f21756c53babcb6059160d0a35b5e2f8c04c2d53cc962808cdc111f18ff9b0f874094087e3e582f856a8b3b36e430df0121c26a401b714c84e6747881384a20e9bda35344b744deb2e5d6dc1699f80199d61068fdd4449a0b69a2829a16f4aa4a0b2aa5d943912afd85f99f75380992413f3172b350bd3aeec1a45aee2cd6f0e03fad4bc35c7b0cde115649caa1414d5ab0b1ca7be2511ed3a1d8c7382669d9dc0abeb78b1658b1c8e358424861b78f88dcb145238fde7e5d6d8191692f55ef6224a81d457d71ef8d555ffb145f5888124eb108cce13e595309e0e8c9250023f9f76b9622f0b530bbf80386ece457f6821c915efd6fc5514ef2ff1e1c4b25a67998933d0675272e2727c1b60233bb104e41603b6f48599b9a0f5d4180565b33853063543f2be97949bacf3b921dcb29d75af19b832899f1979b26a96b513dba41d14f8ca56a854458aeb810012699f7452c92807b0b7bed43f859f2fcdb9f1d6fabce833a6d26cf87ea835c8c7da6ef35c220621db8d3f061b153127604d5085e71a5c44f9479a68275b33407f0409714ad72a4113c1ad3b7e6ca1952be63c4904b68d7c6ee37cc3e29d9d0cd7de38d17bdb04b6cbedd7b5d4fbb3057605173c0d2aae2a03ece6da615d6ea4f1b77d8f4ee007a9af86eb1a688f6f5c8837222b4a7dd071f293fefd33af6f1f1f7244ec27590db05831dcac5ff78cb757180dd784ab857f956fad077c446b85b87141dcdeaa" + } + ] } \ No newline at end of file From 92d31bf47639e0fdc6b827ce698da4b6f05c0650 Mon Sep 17 00:00:00 2001 From: tchataigner Date: Mon, 29 Jul 2024 17:38:43 +0200 Subject: [PATCH 16/19] feat: compact data inclusion (#125) * feat: compact data * feat: more clippy rules * refactor: move test utils to core * fix: needed feature for eth-lc-core * refactor: refactor visibility to move --- aptos/docs/src/benchmark/configuration.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/aptos/docs/src/benchmark/configuration.md b/aptos/docs/src/benchmark/configuration.md index a749b873..95c44240 100644 --- a/aptos/docs/src/benchmark/configuration.md +++ b/aptos/docs/src/benchmark/configuration.md @@ -32,9 +32,10 @@ Here are the standard config variables that are worth setting for any benchmark: - `cargo +nightly-2024-05-31` - This ensures you are on a nightly toolchain. Nightly allows usage of AVX512 instructions which is crucial for performance. - This is the same version set on `rust-toolchain.toml`. It's pinned to a specific release (`v1.80.0-nightly`) to prevent - unexpected issues caused by newer Rust versions. + This ensures you are on a nightly toolchain. Nightly allows usage of AVX512 instructions which is crucial for + performance. This is the same version set on `rust-toolchain.toml`. It's pinned + to a specific release (`v1.80.0-nightly`) to prevent unexpected issues caused + by newer Rust versions. - `cargo bench --release <...>` From 3bc107c88a9cd57b987d3bcbdca64d6bbaad3828 Mon Sep 17 00:00:00 2001 From: Samuel Burnham <45365069+samuelburnham@users.noreply.github.com> Date: Mon, 29 Jul 2024 12:11:30 -0400 Subject: [PATCH 17/19] Revert "chore: Update fixtures (#124)" (#129) This reverts commit 73bd552350937eefd427e90bd77531e8d857081c. --- .../plonk_fixtures/epoch_change_fixture.json | 21 +++---------------- .../src/plonk_fixtures/inclusion_fixture.json | 21 +++---------------- 2 files changed, 6 insertions(+), 36 deletions(-) diff --git a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json index 39c58236..576fda7a 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json @@ -1,20 +1,5 @@ { - "type_args": [ - "0x1::account::Account", - "0x1::chain_id::ChainId" - ], - "args": [ - { - "type": "hex", - "value": "0x00ada4c1c7b3b02e4b3bb0a7f709ae37162ecbfed7cfb28d4e76dc0743987c71" - }, - { - "type": "hex", - "value": "0xe0e58f00000000005d32119aae2ee9f88867d5787af5c4df68884a4bf8fff525ff8c408e8f98805085382a0c8b1b38485a3d816f31ab5b23a0eae94d86c90086cd4e7b6e8c5c46825ebd1cf9ea54ce88af740aad4d7e95e742157209f36867ff5d7d490afa91c6bf" - }, - { - "type": "hex", - "value": "0x03f109fd26d16ef1af961125e327c9eba8e2848ee57646467d52e842fa7734d31d8b32800fb70218739f6736dbe34887f1c11b66a7736b9d49b45ca6cd9710092d770c7d252a16a61ac8000cf5edc7c7134fcef37c15b911c94e8488825d2f232e3931d802217775ece533f61af8f7a1cdd302dea6576173871e8a093d4e27a52529ae513720d60d95eea4094b3a772a5ad90adbefaefcf35420b31c5f1c3e7c0945189f731d23f81b5c699f7e677b181bf8b4118818c050f085968435f0ed0f221662a678d5902ec1791771e03c6602de36cbccdb73126dfef8ff5bb08edbd3033678b995f89369271de3fc346b37d6de7f6e54021858862bfd0d07496c35910949dd225a772cee1cd351a0d43ae7565b17e1ad3759bbaf304efe6d79e29a442b4d15926773d1c2426e10ca2de24fa8871336e09de905275fe2b0c0ce74957b0d742ae44def83dbd82eaff9e0a5aac9c66a3baff28728d60367fc23f291ddb90587d177128fc59f69ba5fb8b67574b2feaaf303ae0edb8ec181e13cc0468f721e8162e77d4cd912506fdbe27289c5ac382617a875f211a9e44146abf26114b9025fd04e4e2b0c8721ea806bc5dd4fc294dfb8123558eebd94f110216baf37c32e1187bf9ad026e762c5c570f9e29e9bd4df1778317af98da41ad45fa2d2136104ba1c803286dd99b2dbd52f6bfa684feadc745087af910daaab55bc47bb0b9a27fa9fa0e1d7ddabc42c2b14e66d6207c9b4c21c199ca925c110d8c8197901391fd2cafb2c3ac1cad3ba201f44d6fe5647a5a35f03802bb74f4c8f652304f9bd14e7618064e79623138fc05877aa99416b268a6fc8678fcef1f7d99206adf42f2e6deb4fca7c0f35c0a2a716ac3d8497598a2bc86acea854b73897c697cd7bf415052783b0700a167e0377baf1487636050dc53e14c5ab968964553607d8bfa113930c50854658419969f1c966be9ff9a67c425e4d4bd6686515f9a6b73755eb16ab6c19f1fb6fa5a9bd47e1d8fbc1f1c026b6d269379d3c43d7f71268c8f111231ff5ca6549ad28693628c6678738a2d19d09c7750a570ddefd20200f4531462a9acb0b21c7f2a3ab4f7ee1a9e40d6614991664bc2b43bd4fd5acf9d8a21db42d48ec499109aa74c98335224d9047778c361c14d04bd45f257334b5196fbea00a3dd5ae1654187fabbd4657761f9814a7709544ce6c0b346a262395f1d132a7" - } - ] + "vkey": "0x008f0133dc5a02eb31ac769e9e3a2f34da1af34c963bf3ee9a058982a2978cc9", + "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ecc071f215064bfe6f1c24295135199ce6f6dec2974115fad50989e666915453ad", + "proof": "0x2acb18f955dc3e02caeb28dc5282a69d34ea0fa41025b8773c33295fdb09cb3e2e771f7f4523cb97e3993b4891680bee9113e1693836ba81cc8d572cd493236406870eb65a5fb6d15fe08db834e121b08c311051f412c69bb9e964fb26c1097a25f7b2a9bfeac9348f545fad648f434dd2e330af76bbf5f95716b36599e8eb852cde5bbbc7db177e6dab4a06913e84e7f6a42995bd4035b30dc0b2f80a181d0d0ef83f210d29327b32aeb04966b022b32b95834bc30ec1a0d23ebafbff2dd4fa1e47660c998369fd543baf0c0673b89f9dc5a3c3112e7b101cdf7427bcb134642d1653b90e3d33b9c55b01fce9e5b24bcd0c99ffaf6ae132b6080077a8c6c8d52d7eb3418d3379107c7ed174e39c10a67ab631378ddb7eb7477bcc92bbe86a4b01f2b82cb78c36a2f39658881a33f7ff3577e4e18adb7a8f0e9e8a52eb2d843e02d08b55d2c9829b41b54b39687aa3ee7f3d47e6fdbcb88d53a8aa7ec3a740d81efa5bf5b88b0afa9030535ad970085df9c8f7c605681eb26c77791bd253a1cd1df1e6444acc07c138ffd7f200e8c24b59181cf42d3695601ab0f475ad94f59e240ef5287662cb1bc8d593d2ec4f4236d6a9fe626a7742d7db3cfd12cb1aea631adbc98a307aa3428d8c092ce40c7ef54539e312fbc3eff5dbdb67359088852f0889d2b12abbf631ef2f39675e10cffb7608fbd9607f3b73645ab909fc843e99108ed807de5eacf1429d2cdcfd3cb3095bb50299a551ab3e97f651c1804cc82a16657b2df4ea32277a7e0aa9b420f4e5c6f531e32fe985c41ead82c7451ba3db219d790077b98c28ff3f3f55686235c83754ed13b299b1597f9a89ae94b7ab0825440d5e013ea0f6200c42600ef60780535a48e5575ba757658ddf912d2dfa200ee68cc990e617fede5f84ad4bdb1845323c35c5bf2baefd055967eaf7fec2450551b4538c3c4e46da9a98dd130ea2cd23e90e3c18ab6ba0614e7d9cde5baf1f2aaf47136c29a68a59e82f120cde4b5ef646a54a4fa80517b8c0e0b8b7283d44169c1acb122270ac6f238439aa96f2f51431473634e0d853eef0288cbae1042d1d942884490e2e513eaabd345d4c59efc6279a6714d2a424e7bebc7efb195ae82b8123b682534529fab8a6a0f26118af160e02b68711c7f03535eef61929dd2d034a924bf3607b7e9478945a99cd548b88d917f308ad5628db8bf320cb1f0784" } \ No newline at end of file diff --git a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json index 09437a4e..80600ca3 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json @@ -1,20 +1,5 @@ { - "type_args": [ - "0x1::account::Account", - "0x1::chain_id::ChainId" - ], - "args": [ - { - "type": "hex", - "value": "0x00e326549ab661885dbefc3570c3f1f73aafc248b5f6119db8c08a3f9149c5eb" - }, - { - "type": "hex", - "value": "0xe0fc9100000000000969ed235cf75d25800ea6845c2584af013c1f9617ad2de87202d7e9b93739c95c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f22002fe30a172d0a479f6add89c63b29dce29b6071b3c7e486b0fb4bc431f88501000000000000002000000000000000290decd9548b62a8ef0d3e6ac11e2d7b95a49e22ecf57fc6044b6f007ca2b2ba010000000000000080" - }, - { - "type": "hex", - "value": "0x2fafb27d2bbd7486fffcc7a5ededd3267d3198fd91be91ce6725d6ea2241af0206b3cbf9c152ddc2e6c05041de5c87ba04e92beedd8c50e9aa95d6900767c0081252c036f0d5e3adb72b1072a75cf633bd3d9ff694a9d58b74969a86ba2cf9401be2da6ca6a6b5bf3c9ea6163dbc6ba57e0e72a10e3cd47ad2a69d02559f8cfe16ea811d95f6192c002b50bda1a44028b27dd3f7fb565db43e71df1118139409199f91baf740a0af216bd2ddf06b2902609a35dbb9e0365c7401de37cdee0de128b517ee62bcbf0edd0c24781a106a7c55d9380cf94c3e9bd22dcd39240a13421fcc162528804a127269d36081a5984b0b3cccb10f26732805fadb0469a485c619929e215d37908263482f0b47ccdb72ea783658a71e2264ee787074c749512b0373d691a86489ace4932bfd322da06e82cffa6de0d60eeeb15a8bdc90403e3f2a5e97f4c76016a619aea3a93e65f21756c53babcb6059160d0a35b5e2f8c04c2d53cc962808cdc111f18ff9b0f874094087e3e582f856a8b3b36e430df0121c26a401b714c84e6747881384a20e9bda35344b744deb2e5d6dc1699f80199d61068fdd4449a0b69a2829a16f4aa4a0b2aa5d943912afd85f99f75380992413f3172b350bd3aeec1a45aee2cd6f0e03fad4bc35c7b0cde115649caa1414d5ab0b1ca7be2511ed3a1d8c7382669d9dc0abeb78b1658b1c8e358424861b78f88dcb145238fde7e5d6d8191692f55ef6224a81d457d71ef8d555ffb145f5888124eb108cce13e595309e0e8c9250023f9f76b9622f0b530bbf80386ece457f6821c915efd6fc5514ef2ff1e1c4b25a67998933d0675272e2727c1b60233bb104e41603b6f48599b9a0f5d4180565b33853063543f2be97949bacf3b921dcb29d75af19b832899f1979b26a96b513dba41d14f8ca56a854458aeb810012699f7452c92807b0b7bed43f859f2fcdb9f1d6fabce833a6d26cf87ea835c8c7da6ef35c220621db8d3f061b153127604d5085e71a5c44f9479a68275b33407f0409714ad72a4113c1ad3b7e6ca1952be63c4904b68d7c6ee37cc3e29d9d0cd7de38d17bdb04b6cbedd7b5d4fbb3057605173c0d2aae2a03ece6da615d6ea4f1b77d8f4ee007a9af86eb1a688f6f5c8837222b4a7dd071f293fefd33af6f1f1f7244ec27590db05831dcac5ff78cb757180dd784ab857f956fad077c446b85b87141dcdeaa" - } - ] + "vkey": "0x00336c570224c00161ca7b3c275c24f3968aa09086c31d09d98691bce109f4f6", + "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ec9b7e4a4d93458468f95db74bdd3f2ba69088cbd8742033b860ea873f37c31249020202020202020202020202020202020202020202020202020202020202020244fa02feb400a383b1824df6198c7e30cbf60a21838efa46fedf35f760fdf25839d1a3ec2b5d09aee31c1c0c380eef28744673ea3ab7e9d065baccc8d1874ca1", + "proof": "0x0b54c8661022e4ff23f73f079de5ba33937ea0102823afc28ecfea25480f9752006c59590b163ff5758851dca4b41ed2eb3d4161fbd4abf0a50670cfd68b53711bbc9e9e89b362c18ea83bc962fd1d98484a66925eb887ff4119f2f5cbb7926b1a718a45ed0c5c6ab78c0d33822c710d75023c8b29a074ec870058e8043cdf980a1225950c5d8218425a3d0285791e7fff7fd537491465a46841edd3fa6badc7014663ed841f305f8ad45296f278638a0dcdb050b1568950b6f1e17438caaa8f1cc5e3fa388b876e103ae409a117d1f77ec3148ae53b75e54322d7b72b50d99013c2f90e019ef00595be5629baeaf8f6c92b1326663655ecf10e23dbbef025221f73b9500ec0cc8b83689dcccf436fc79b54e2d08417f48b2ba7f8b4b6ca7e10062be829423a371789e9768f70bb74b5fb4021e743948dc60c9dd77d5189faef2e3ef0fe9583dca9ab69de6bf52e68405ec465e1e8039ded1fa8936a4c27116b2cfc94e0374db54086e2af12a0541f4edc4a1affa9fbb633ac76b3bc5dd211c10afc57a70d371057cab02bfeab658088f632c10a441c0ce23256abf9882936042217cc9ba849d59926bd44a71007dcfd19a3cc1e9a490ec8c2f39a20311df72f2212381f12b5e007af0d38ba6c14b794387c419ca17e9f83963c4540810d8415099f0ee8a8cc5f851585eaac8b71ca3b79213238cfdd16c5c64065477c27413c268cbe31a1be4e1078e97d777cbe07c37065e534548bf8ceb595c7e53ef2b17c02aa84bde9fb63d06a6c3dbd12247db7d459f9587bfd0ff820bb985e2379fff9124471544aea1561fe6d02aae5202044a93665e65a28696fc760624dbc7b3339226800b36dfd83665b5aa642d1aa742a96cc462efa92b43be640ad05dbe073ec0f0f0e9a9907cb3a5c027690f963a759ce8e9eb05b3212c7ba17585fb420d7851bffb94278d4465cf64ffa1936b3f3e6e3191e1cff7250542f78e2c2785934ba1c0a8d7d32469c216b4863653a212dae504635c9314c87fb6aee948414590ceb1a3f7639648a9aad68c2628f7586a3e52efd3655cfbcbc93ece94837823df61d29d4bd7d411495d28ff4ec25ddfa25444096aed1b70ea22245f9a336f6a564d6181cf2c23f95e3ed134587fefd6cafec971fbf5f7c7dbbf0b26e4ef0878ccec60ad20b11e1719b58f00061aa8feb40c6cf3e7caf9d7c69ef47b522ba148a530c" } \ No newline at end of file From 83525f60f86acfa52796e6461d53ba57ccae3881 Mon Sep 17 00:00:00 2001 From: tchataigner Date: Mon, 29 Jul 2024 22:38:30 +0200 Subject: [PATCH 18/19] fix: fixtures (#130) * fix: fixture generation * ci: Fix `fixtures.yml` * Test `fixtures.yml` * Fixup and test `fixtures.yml` * fix: update fixtures * Fixup * Prep for review --------- Co-authored-by: Samuel Burnham <45365069+samuelburnham@users.noreply.github.com> --- .github/workflows/fixtures.yml | 52 ++++++++----------- .../plonk_fixtures/epoch_change_fixture.json | 2 +- .../src/plonk_fixtures/inclusion_fixture.json | 4 +- fixture-generator/src/bin/main.rs | 38 +++++++++++--- 4 files changed, 54 insertions(+), 42 deletions(-) diff --git a/.github/workflows/fixtures.yml b/.github/workflows/fixtures.yml index 304c4add..4f2a8e38 100644 --- a/.github/workflows/fixtures.yml +++ b/.github/workflows/fixtures.yml @@ -1,5 +1,4 @@ -# Rebuilds proof fixtures for Solidity and Move (TBD) for smart contract verification tests -# The fixtures are located in `aptos/solidity/contracts/src/plonk_fixtures` +# Rebuilds proof fixtures for Solidity and Move for smart contract verification tests # Then opens a pull request with the changes # Note: This workflow takes over 30 minutes due to parallel E2E proof generation for `inclusion` and `epoch_change` name: Update fixtures @@ -21,6 +20,12 @@ jobs: strategy: matrix: fixture: [inclusion, epoch_change] + language: [solidity, move] + include: + - fixture-path: aptos/solidity/contracts/src/plonk_fixtures + language: solidity + - fixture-path: ethereum/move/sources/fixtures + language: move steps: - uses: actions/checkout@v4 with: @@ -31,31 +36,15 @@ jobs: uses: ./.github/actions/setup with: pull_token: ${{ secrets.REPO_TOKEN }} - - name: Generate Solidity fixtures + - name: Generate ${{ matrix.language }} fixtures run: | - cargo run --release -- --program ${{ matrix.fixture }} --language solidity + cargo run --release -- --program ${{ matrix.fixture }} --language ${{ matrix.language }} working-directory: ${{ github.workspace }}/fixture-generator - - name: Check for diff - run: git diff - name: Upload fixture artifact uses: actions/upload-artifact@v4 with: - name: ${{ matrix.fixture }}_fixture - path: ${{ github.workspace }}/aptos/solidity/contracts/src/plonk_fixtures/${{ matrix.fixture }}_fixture.json - if-no-files-found: error - overwrite: true - retention-days: 1 - - name: Generate Move fixtures - run: | - cargo run --release -- --program ${{ matrix.fixture }} --language move - working-directory: ${{ github.workspace }}/fixture-generator - - name: Check for diff - run: git diff - - name: Upload fixture artifact - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.fixture }}_fixture - path: ${{ github.workspace }}/ethereum/move/sources/fixtures/${{ matrix.fixture }}_fixture.json + name: ${{ matrix.language }}_${{ matrix.fixture }}_fixture.json + path: ${{ github.workspace }}/${{ matrix.fixture-path }}/${{ matrix.fixture }}_fixture.json if-no-files-found: error overwrite: true retention-days: 1 @@ -63,22 +52,23 @@ jobs: create-pull-request: needs: generate-fixtures runs-on: ubuntu-latest + env: + SOLIDITY_FIXTURE_PATH: aptos/soldity/contracts/src/plonk_fixtures + MOVE_FIXTURE_PATH: ethereum/move/sources/fixtures steps: - uses: actions/checkout@v4 - - name: Download inclusion fixture + - name: Download Solidity fixtures uses: actions/download-artifact@v4 with: - path: ${{ github.workspace }}/aptos/solidity/contracts/src/plonk_fixtures/ - pattern: "*_fixture" + path: ${{ github.workspace }}/${{ env.SOLIDITY_FIXTURE_PATH }} + pattern: "solidity_*" merge-multiple: true - - name: Download inclusion fixture + - name: Download Move fixtures uses: actions/download-artifact@v4 with: - path: ${{ github.workspace }}/ethereum/move/sources/fixtures/ - pattern: "*_fixture" + path: ${{ github.workspace }}/${{ env.MOVE_FIXTURE_PATH }} + pattern: "move_*" merge-multiple: true - - name: Check for diff - run: git diff - name: Create Pull Request uses: peter-evans/create-pull-request@v6 with: @@ -87,6 +77,6 @@ jobs: commit-message: "chore: Update fixtures" labels: "automated-issue" body: | - This is an automated PR updating the proof fixtures for Solidity and Move (TBD), which are used for smart contract verification tests. + This is an automated PR updating the proof fixtures for Solidity and Move, which are used for smart contract verification tests. Workflow run: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} diff --git a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json index 576fda7a..e473ef12 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json @@ -1,5 +1,5 @@ { "vkey": "0x008f0133dc5a02eb31ac769e9e3a2f34da1af34c963bf3ee9a058982a2978cc9", "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ecc071f215064bfe6f1c24295135199ce6f6dec2974115fad50989e666915453ad", - "proof": "0x2acb18f955dc3e02caeb28dc5282a69d34ea0fa41025b8773c33295fdb09cb3e2e771f7f4523cb97e3993b4891680bee9113e1693836ba81cc8d572cd493236406870eb65a5fb6d15fe08db834e121b08c311051f412c69bb9e964fb26c1097a25f7b2a9bfeac9348f545fad648f434dd2e330af76bbf5f95716b36599e8eb852cde5bbbc7db177e6dab4a06913e84e7f6a42995bd4035b30dc0b2f80a181d0d0ef83f210d29327b32aeb04966b022b32b95834bc30ec1a0d23ebafbff2dd4fa1e47660c998369fd543baf0c0673b89f9dc5a3c3112e7b101cdf7427bcb134642d1653b90e3d33b9c55b01fce9e5b24bcd0c99ffaf6ae132b6080077a8c6c8d52d7eb3418d3379107c7ed174e39c10a67ab631378ddb7eb7477bcc92bbe86a4b01f2b82cb78c36a2f39658881a33f7ff3577e4e18adb7a8f0e9e8a52eb2d843e02d08b55d2c9829b41b54b39687aa3ee7f3d47e6fdbcb88d53a8aa7ec3a740d81efa5bf5b88b0afa9030535ad970085df9c8f7c605681eb26c77791bd253a1cd1df1e6444acc07c138ffd7f200e8c24b59181cf42d3695601ab0f475ad94f59e240ef5287662cb1bc8d593d2ec4f4236d6a9fe626a7742d7db3cfd12cb1aea631adbc98a307aa3428d8c092ce40c7ef54539e312fbc3eff5dbdb67359088852f0889d2b12abbf631ef2f39675e10cffb7608fbd9607f3b73645ab909fc843e99108ed807de5eacf1429d2cdcfd3cb3095bb50299a551ab3e97f651c1804cc82a16657b2df4ea32277a7e0aa9b420f4e5c6f531e32fe985c41ead82c7451ba3db219d790077b98c28ff3f3f55686235c83754ed13b299b1597f9a89ae94b7ab0825440d5e013ea0f6200c42600ef60780535a48e5575ba757658ddf912d2dfa200ee68cc990e617fede5f84ad4bdb1845323c35c5bf2baefd055967eaf7fec2450551b4538c3c4e46da9a98dd130ea2cd23e90e3c18ab6ba0614e7d9cde5baf1f2aaf47136c29a68a59e82f120cde4b5ef646a54a4fa80517b8c0e0b8b7283d44169c1acb122270ac6f238439aa96f2f51431473634e0d853eef0288cbae1042d1d942884490e2e513eaabd345d4c59efc6279a6714d2a424e7bebc7efb195ae82b8123b682534529fab8a6a0f26118af160e02b68711c7f03535eef61929dd2d034a924bf3607b7e9478945a99cd548b88d917f308ad5628db8bf320cb1f0784" + "proof": "0x1a062460f022be5e54fc93fca041ef79c25dc57632e30c94d4621a0752b2141527231b97c8665154ee1066042e5c6f3b3fdbe5d28749c03f2c0637575aee84e026ff0c5f1b54e6cb32d1f9610928278884b29433bd3cd220024478dd41c288842006c442822ce32ddded15cb77f65cf7ad4ff0678cae623b1f1c14a5ae28a9372f4fc32b0a10bca3a1b997c9602217a5ac73798f585c23536ea118510b1437081fba3cbe813e2e78f6316d62deb3a496a5e17439cbfeaf17c2e0c23ff20a82c711b3c5f18cb9f2506cd8809c7b4ba4d956b263712efb7d7c5df16c9c0889fd33228a8eb0b98b8aa8d9fab501ecaa058c473862d063920310d856b227c59a6ff50eae1a8ff9c33974f5ccc69e10f7e2251e9ed1a37f8d85d35d87ebb3cd9563350c9430f36e3dbd0bd1cda9788d256705874ba0f501f697cc9bf9e03abcf26c6a0cc82c6d3ca6d879ffe7907c6e3687ad40b6718d35cbb3d1d639322c76198fc32fcedf3442a3cafe8811065512839e69a318f8f89abe78c7c48d07b9450838b72892d417f08fa9242805329f74af6c6e020e1724eefbdda632f6227c5b900ce111259bc73493ceaa66c169fe04906170d0cf0a5a5f515fa17fffe6ea7c5540ac141947a66518e0f8ddf017fe9c75d1d4936468f589aa9e40cb46ad7e3e47dbab12d29401f70e057a8c9be3f69419ac0d3818fc7ba6dff4930572bf56dd5c5527126e47d6cbd4dc62540d32a09aa56a67b31c1cfb0c6b503a2dc3fa2e62d276642d85b8c2a0bb6f7ffaee5a2d9b7a41c80441b57bb3b095f70a505c0ee4941cc83043a8e73ae30769c7a6fb69ad8ca0d5d48abb56c0566a37776dd974737b06520dfa9b57fcac1d49dd531b00d04aadf341949128fbb2c734959bbc0f8525dc5f07039db53293ebd7528121caba884575e22b3cd8e47b3965ae36ffaf2d5d5c5f025e7ddac88e2079aa2a4aadf8b4b502ab941827a53bde1a8b621175feaefd3e08dc045278a1f692bb61ccb158a57e11b14caec7134e370e41ba26fd55eb62f21f19c0017257f4f23cf200c9d715ae48e1058d8d5b5ed494f3327e7eebbcfbe31375dbc1fe8799cf7e0d7a01a44e471e88396206302bb23c676fa267f5cac6c0039cf97ad6505f4ff5d1c414acda46bd16d7d6d301ce4ea7de38790f9fa0da7514510f645b1014a6409225893d416c7c28bb7f778fe86466347f15d3a6a87d2d" } \ No newline at end of file diff --git a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json index 80600ca3..aa62db3e 100644 --- a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json +++ b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json @@ -1,5 +1,5 @@ { "vkey": "0x00336c570224c00161ca7b3c275c24f3968aa09086c31d09d98691bce109f4f6", - "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ec9b7e4a4d93458468f95db74bdd3f2ba69088cbd8742033b860ea873f37c31249020202020202020202020202020202020202020202020202020202020202020244fa02feb400a383b1824df6198c7e30cbf60a21838efa46fedf35f760fdf25839d1a3ec2b5d09aee31c1c0c380eef28744673ea3ab7e9d065baccc8d1874ca1", - "proof": "0x0b54c8661022e4ff23f73f079de5ba33937ea0102823afc28ecfea25480f9752006c59590b163ff5758851dca4b41ed2eb3d4161fbd4abf0a50670cfd68b53711bbc9e9e89b362c18ea83bc962fd1d98484a66925eb887ff4119f2f5cbb7926b1a718a45ed0c5c6ab78c0d33822c710d75023c8b29a074ec870058e8043cdf980a1225950c5d8218425a3d0285791e7fff7fd537491465a46841edd3fa6badc7014663ed841f305f8ad45296f278638a0dcdb050b1568950b6f1e17438caaa8f1cc5e3fa388b876e103ae409a117d1f77ec3148ae53b75e54322d7b72b50d99013c2f90e019ef00595be5629baeaf8f6c92b1326663655ecf10e23dbbef025221f73b9500ec0cc8b83689dcccf436fc79b54e2d08417f48b2ba7f8b4b6ca7e10062be829423a371789e9768f70bb74b5fb4021e743948dc60c9dd77d5189faef2e3ef0fe9583dca9ab69de6bf52e68405ec465e1e8039ded1fa8936a4c27116b2cfc94e0374db54086e2af12a0541f4edc4a1affa9fbb633ac76b3bc5dd211c10afc57a70d371057cab02bfeab658088f632c10a441c0ce23256abf9882936042217cc9ba849d59926bd44a71007dcfd19a3cc1e9a490ec8c2f39a20311df72f2212381f12b5e007af0d38ba6c14b794387c419ca17e9f83963c4540810d8415099f0ee8a8cc5f851585eaac8b71ca3b79213238cfdd16c5c64065477c27413c268cbe31a1be4e1078e97d777cbe07c37065e534548bf8ceb595c7e53ef2b17c02aa84bde9fb63d06a6c3dbd12247db7d459f9587bfd0ff820bb985e2379fff9124471544aea1561fe6d02aae5202044a93665e65a28696fc760624dbc7b3339226800b36dfd83665b5aa642d1aa742a96cc462efa92b43be640ad05dbe073ec0f0f0e9a9907cb3a5c027690f963a759ce8e9eb05b3212c7ba17585fb420d7851bffb94278d4465cf64ffa1936b3f3e6e3191e1cff7250542f78e2c2785934ba1c0a8d7d32469c216b4863653a212dae504635c9314c87fb6aee948414590ceb1a3f7639648a9aad68c2628f7586a3e52efd3655cfbcbc93ece94837823df61d29d4bd7d411495d28ff4ec25ddfa25444096aed1b70ea22245f9a336f6a564d6181cf2c23f95e3ed134587fefd6cafec971fbf5f7c7dbbf0b26e4ef0878ccec60ad20b11e1719b58f00061aa8feb40c6cf3e7caf9d7c69ef47b522ba148a530c" + "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706eca11e50c9e36a142b1722d030bbcf84fee1ed35e42a91121da6c9724f42c8095b020202020202020202020202020202020202020202020202020202020202020244fa02feb400a383b1824df6198c7e30cbf60a21838efa46fedf35f760fdf25839d1a3ec2b5d09aee31c1c0c380eef28744673ea3ab7e9d065baccc8d1874ca1", + "proof": "0x147041f1a4a8635fb8c97a5df3381af35735cbe1dd33d1e6b230528bb782df2115d58470fb52db3b7e9c763e4ac9bca4945d453b338a5376591da27c9846c8891f95cedf59f7c5e6d28deb183f553b1964aedaa4749dd087b53d55eb0fbc78fe17f8b170e2325cc6f7fde1c73fc9bf3cb32c161c10240ddb852609c542c1f34c0c6aaf8636df91bc2cf88a1a1480db28202c28c5c18746a8a87946995d3a3dbc2be6743b8720edb4f6c0724c876210bb575e92355d50961cd71c5fc5c3916ebd04356e5271fc812e5adc98016c4133f59a33467458ca0445c0ad3e1294a0c83a2ea3fa9d0f0d7fd78279fdc51111992b429f70af18e49f31d1fa8f58af8cb984020131a79fdce343d93eaa0306b8331414ca66dbc8cdc166a8d898f02dad433f189df19a44df613e760fd1049bcb4c7c02e935c4626550858f17a21c609ce2491dcf69bb814495a0dde568605013f4a6d684925e012822167541925f96a7b1c428a5a9d8b75b3d7b0bac1c9a9278ea3494dc083db630d0f73e721f1e9162691f2d95b6ac58386f92228125ce78b083487807952d56b5c460365180436606a49e2c411353ee4e9aacd0e9fb3b4b917cdd1b21e8bf37599a7946be78e97cb39cce22e38d1b5a8d9e6c9b04b94367140865c33e91adc9ff2479c7bff1d026e472fb055bec39301e2fabff8558d81c4cb32089e9694f6ddd5e9868a8e6fe0a7e86a2146b93521d812adb5a2cafc2d62b06334797eeca6482f2fc217c07223761d6e6286f5d62f2af3959dfa0cf9a0f8d8ade7a1a3c13be1d85b0183664fbec1d26d42a7796f9e063f08a21f27a13655ce24c56064ddc605cc1ffb17903b089197e1a05f67c47bea9a2bbce4ed557dfc9ca6496c9a433bfdd3e9bf92b8eb90a40dd7315e64b95bc21966713490c5a3e019acfcac27fe6d5e09b809c199350b3e2b436014fa27d7fd8c5147f2c9775634e169774cd4671edb8c53e09a6aebb6c2b513f14a429e3aa3b91be2fb256e9ad373d7b3dd24285822a37d4a99b694920020e1b16e5d2bf71f3b8b286c31a35c2928078ad40c05f243c07eb33f49ca01e23cd7f2a99b3489fab91f54c798c2c6bc32e2b55f934db375a7cd96cd90cd2785698590d69772361e3ce66123dfc3fec87ea0a5fd8b7c8901f792696f07d416e91c95d05f81132404e001fe552f15a20eac189890d26bc08ec4bcbb1bfacc45bfe52a2" } \ No newline at end of file diff --git a/fixture-generator/src/bin/main.rs b/fixture-generator/src/bin/main.rs index 9e9d84be..25f5f5e6 100644 --- a/fixture-generator/src/bin/main.rs +++ b/fixture-generator/src/bin/main.rs @@ -4,11 +4,33 @@ use sphinx_prover::types::HashableKey; use sphinx_sdk::ProverClient; use std::path::PathBuf; +/// Location for the Inclusion program of the Aptos Light Client. pub const APTOS_INCLUSION_ELF: &[u8] = include_bytes!("../../../aptos/aptos-programs/artifacts/inclusion-program"); + +/// Location for the Epoch Change program of the Aptos Light Client. pub const APTOS_EPOCH_CHANGE_ELF: &[u8] = include_bytes!("../../../aptos/aptos-programs/artifacts/epoch-change-program"); +/// Path to the directory where the Solidity fixtures for the Aptos Light Client are stored. +pub const SOLIDITY_FIXTURE_PATH: &str = + "../aptos/solidity/contracts/src/plonk_fixtures"; + +/// Filename for the inclusion fixture. +pub const INCLUSION_FIXTURE_FILENAME: &str = "inclusion_fixture.json"; + +/// Filename for the epoch change fixture. +pub const EPOCH_CHANGE_FIXTURE_FILENAME: &str = "epoch_change_fixture.json"; + +/// Supported languages for the smart contracts, used for the Aptos Light Client. +pub const SOLIDITY: &str ="solidity"; + +/// Supported programs for the fixtures. +pub const INCLUSION: &str = "inclusion"; + +/// Supported programs for the fixtures. +pub const EPOCH_CHANGE: &str = "epoch_change"; + #[derive(Parser, Debug)] #[clap(author, version, about, long_about = None)] struct ProveArgs { @@ -45,7 +67,7 @@ fn generate_fixture_inclusion_aptos_lc() { prover.verify_plonk(&proof, &vk).unwrap(); let fixture_path = - PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../contracts/src/plonk_fixtures"); + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join(SOLIDITY_FIXTURE_PATH); // save fixture let fixture = SolidityFixture { @@ -54,7 +76,7 @@ fn generate_fixture_inclusion_aptos_lc() { proof: proof.bytes(), }; std::fs::create_dir_all(&fixture_path).expect("failed to create fixture path"); - let fixture_path = fixture_path.join("inclusion_fixture.json"); + let fixture_path = fixture_path.join(INCLUSION_FIXTURE_FILENAME); std::fs::write( fixture_path.clone(), serde_json::to_string_pretty(&fixture).unwrap(), @@ -80,7 +102,7 @@ fn generate_fixture_epoch_change_aptos_lc() { prover.verify_plonk(&proof, &vk).unwrap(); let fixture_path = - PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../contracts/src/plonk_fixtures"); + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join(SOLIDITY_FIXTURE_PATH); // save fixture let fixture = SolidityFixture { @@ -89,7 +111,7 @@ fn generate_fixture_epoch_change_aptos_lc() { proof: proof.bytes(), }; std::fs::create_dir_all(&fixture_path).expect("failed to create fixture path"); - let fixture_path = fixture_path.join("epoch_change_fixture.json"); + let fixture_path = fixture_path.join(EPOCH_CHANGE_FIXTURE_FILENAME); std::fs::write( fixture_path.clone(), serde_json::to_string_pretty(&fixture).unwrap(), @@ -104,14 +126,14 @@ fn main() { let args = ProveArgs::parse(); match args.program.as_str() { - "inclusion" => match args.language.as_str() { - "solidity" => { + INCLUSION=> match args.language.as_str() { + SOLIDITY => { generate_fixture_inclusion_aptos_lc(); } _ => panic!("Unsupported language. Use: ['solidity']"), }, - "epoch_change" => match args.language.as_str() { - "solidity" => { + EPOCH_CHANGE => match args.language.as_str() { + SOLIDITY => { generate_fixture_epoch_change_aptos_lc(); } _ => panic!("Unsupported language. Use: ['solidity']"), From 210218a873b35ec975233e84e58f64bb64ce6fb0 Mon Sep 17 00:00:00 2001 From: tchataigner Date: Tue, 30 Jul 2024 14:26:05 +0200 Subject: [PATCH 19/19] docs: update doc (#132) * docs: update doc * refactor: apply suggestions Co-authored-by: wwared * refactor: second batch of suggestion Co-authored-by: wwared --------- Co-authored-by: wwared --- aptos/docs/src/components/client.md | 2 +- aptos/docs/src/design/overview.md | 4 ++-- aptos/docs/src/misc/release.md | 12 ++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/aptos/docs/src/components/client.md b/aptos/docs/src/components/client.md index 133e5831..9d6b5c6a 100644 --- a/aptos/docs/src/components/client.md +++ b/aptos/docs/src/components/client.md @@ -21,4 +21,4 @@ the proofs generation in parallel. This flow happens during initialization where Aptos network while producing an inclusion proof for a given account at the latest block. The bundled example client currently only requests and verifies STARK proofs. The proof servers have support for generating -and verifying SNARK proofs, but the example client does not yet make use of this. +and verifying SNARK proofs, but the example client does not yet make use of this. \ No newline at end of file diff --git a/aptos/docs/src/design/overview.md b/aptos/docs/src/design/overview.md index 84ac78f1..52ca1826 100644 --- a/aptos/docs/src/design/overview.md +++ b/aptos/docs/src/design/overview.md @@ -26,7 +26,7 @@ to some account needs to be validated. The current Verifying Key Hashes which uniquely identify the specific RISC-V binaries for the proof programs, located in the [`aptos/aptos-programs/artifacts/`](https://github.com/lurk-lab/zk-light-clients/tree/dev/aptos/aptos-programs/artifacts) directory are: -* `epoch_change`: `0x00eea0650222f7e5bb6a2fe57c0e0e504d1df8b3d848d5116174a8703d228c94` +* `epoch_change`: `0x008f0133dc5a02eb31ac769e9e3a2f34da1af34c963bf3ee9a058982a2978cc9` * `inclusion`: `0x00336c570224c00161ca7b3c275c24f3968aa09086c31d09d98691bce109f4f6` -These values are also present in and used by the [solidity fixtures](../benchmark/on_chain.md). +These values are also present in and used by the [solidity fixtures](../benchmark/on_chain.md). \ No newline at end of file diff --git a/aptos/docs/src/misc/release.md b/aptos/docs/src/misc/release.md index 2b38f164..90e3b6bd 100644 --- a/aptos/docs/src/misc/release.md +++ b/aptos/docs/src/misc/release.md @@ -8,29 +8,29 @@ run it. The release process is mostly automated through the usage of GitHub Actions. A release should be initiated through the manually triggered GitHub Action **Bump Version**. When triggering a release, -the reference base that should be chosen is the `dev` branch, with a `release` type and the desired release version. The +the reference base that should be chosen is the `dev` branch, with a `release` type, `aptos` light-client and the desired release version. The specified release version should follow [the Semver standard](https://semver.org/). -This action opens a new PR from a branch named `release/` with `dev` as its base. A commit is +This action opens a new PR from a branch named `release/aptos-v` with `dev` as its base. A commit is automatically applied to bump all the `Cargo.toml` version of the relevant crates. The developer in charge of the release should use this branch to make any necessary updates to the codebase and documentation to have the release ready. Once all the changes are done, the PR can be squash and merged in `dev`. This will trigger the **Tag release** action -that is charged with the publication of a release and a tag named ``. +that is charged with the publication of a release and a tag named `v`. ## Hotfix process The hotfix process is quite similar to the release one. -**Bump Version** should also be triggered, but with the desired `release/` as reference. A PR will be -opened from a branch named `hotfix/` with the base `release/`. A commit is automatically +**Bump Version** should also be triggered, but with the desired `release/aptos-v` as reference. A PR will be +opened from a branch named `hotfix/aptos-v` with the base `release/aptos-v`. A commit is automatically applied to bump all the `Cargo.toml` version of the relevant crates. The developer in charge of the hotfix should use this branch to make any necessary updates to the codebase and documentation to have the hotfix ready. Once all the changes are done, the PR can be squash and merged in `release/`. This will trigger the -**Tag release** action that is charged with the publication of a release and a tag named ``. +**Tag release** action that is charged with the publication of a release and a tag named `v`. Finally, the developer will also need to port the changes made to `dev` so that they are reflected on the latest development stage of the Light Client.