diff --git a/.config/nextest.toml b/.config/nextest.toml index af8b6a75a0..fbfae5c8c8 100644 --- a/.config/nextest.toml +++ b/.config/nextest.toml @@ -1,8 +1,17 @@ [profile.default] -slow-timeout = "2m" +# Kill tests after 3 periods of 2m, because they are probably hanging +slow-timeout = { period = "2m", terminate-after = 3 } default-filter = 'not (test(slow_) | package(tests))' retries = 2 +[[profile.default.overrides]] +# This test is fast if it works (usually about 150ms) but sometimes hangs, +# especially when running concurrently with other tests. Kill it after a while +# and retry up to 10 times. +filter = 'test(test_process_client_handling_stream_subscribe_node_identity)' +slow-timeout = { period = "2s", terminate-after = 1 } +retries = 10 + # The restart tests run an entire sequencing network, and so are quite resource intensive. [[profile.default.overrides]] filter = 'test(slow_test_restart)' diff --git a/.env b/.env index 66bb2e9009..128a6994d7 100644 --- a/.env +++ b/.env @@ -148,3 +148,6 @@ INTEGRATION_TEST_PROTO=http # Version of sequencer protocol we want to test. If this is set to # `03`, marketplace upgrade will be tested. INTEGRATION_TEST_SEQUENCER_VERSION=02 + +# max database connections +ESPRESSO_SEQUENCER_DATABASE_MAX_CONNECTIONS=25 \ No newline at end of file diff --git a/.github/workflows/benchmark-build.yaml b/.github/workflows/benchmark-build.yaml index 5b949e22b3..d6113acbcc 100644 --- a/.github/workflows/benchmark-build.yaml +++ b/.github/workflows/benchmark-build.yaml @@ -38,7 +38,7 @@ jobs: - name: Build Espresso Dev Node # Espresso Dev Node currently requires testing feature, so it is built separately. run: | - cargo build --locked --release --features benchmarking,testing --bin espresso-dev-node + cargo build --locked --release --features benchmarking,testing,embedded-db --bin espresso-dev-node - name: Upload artifacts uses: actions/upload-artifact@v4 @@ -80,7 +80,7 @@ jobs: - name: Build Espresso Dev Node # Espresso Dev Node currently requires testing feature, so it is built separately. run: | - cargo build --locked --release --features benchmarking,testing --bin espresso-dev-node + cargo build --locked --release --features benchmarking,testing,embedded-db --bin espresso-dev-node - name: Upload artifacts uses: actions/upload-artifact@v4 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0b699000ab..3af5eb5b7c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -46,11 +46,14 @@ jobs: # Build in release without `testing` feature, this should work without `hotshot_example` config. run: | cargo build --locked --release --workspace + + - name: Build sequencer-sqlite + run: cargo build --locked --release --manifest-path ./sequencer-sqlite/Cargo.toml --target-dir ./target - name: Build Espresso Dev Node # Espresso Dev Node currently requires testing feature, so it is built separately. run: | - cargo build --locked --release --features testing --bin espresso-dev-node + cargo build --locked --release --features "testing embedded-db" --bin espresso-dev-node - name: Upload artifacts uses: actions/upload-artifact@v4 @@ -79,6 +82,7 @@ jobs: target/release/marketplace-builder target/release/node-metrics target/release/dev-rollup + target/release/sequencer-sqlite build-arm: if: github.event_name != 'pull_request' @@ -100,6 +104,9 @@ jobs: run: | cargo build --locked --release --workspace + - name: Build sequencer-sqlite + run: cargo build --locked --release --manifest-path ./sequencer-sqlite/Cargo.toml --target-dir ./target + - name: Build Espresso Dev Node # Espresso Dev Node currently requires testing feature, so it is built separately. run: | @@ -132,6 +139,7 @@ jobs: target/release/marketplace-builder target/release/node-metrics target/release/dev-rollup + target/release/sequencer-sqlite build-dockers: runs-on: ubuntu-latest @@ -286,7 +294,6 @@ jobs: with: images: ghcr.io/espressosystems/espresso-sequencer/dev-rollup - - name: Build and push sequencer docker uses: docker/build-push-action@v6 with: diff --git a/.github/workflows/build_static.yml b/.github/workflows/build_static.yml index dc78e9b68f..d5fbeee4dc 100644 --- a/.github/workflows/build_static.yml +++ b/.github/workflows/build_static.yml @@ -68,7 +68,8 @@ jobs: - name: Compile all executables # timeout-minutes: 120 run: | - nix develop $DEVSHELL --accept-flake-config --option sandbox relaxed -c cargo build --locked --release + nix develop $DEVSHELL --accept-flake-config --option sandbox relaxed -c cargo build --locked --release + -c cargo build --locked --release --manifest-path ./sequencer-sqlite/Cargo.toml --target-dir 'echo $CARGO_TARGET_DIR' - name: Upload artifacts uses: actions/upload-artifact@v4 @@ -95,6 +96,7 @@ jobs: ${{ env.CARGO_TARGET_DIR }}/${{ env.TARGET_TRIPLET }}/release/marketplace-builder ${{ env.CARGO_TARGET_DIR }}/${{ env.TARGET_TRIPLET }}/release/node-metrics ${{ env.CARGO_TARGET_DIR }}/${{ env.TARGET_TRIPLET }}/release/dev-rollup + ${{ env.CARGO_TARGET_DIR }}/${{ env.TARGET_TRIPLET }}/release/sequencer-sqlite static-dockers: runs-on: ubuntu-latest needs: static-build @@ -377,4 +379,4 @@ jobs: platforms: linux/amd64,linux/arm64 push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.dev-rollup.outputs.tags }} - labels: ${{ steps.dev-rollup.outputs.labels }} + labels: ${{ steps.dev-rollup.outputs.labels }} \ No newline at end of file diff --git a/.github/workflows/cargo-features.yml b/.github/workflows/cargo-features.yml index 262f678fc1..a096507445 100644 --- a/.github/workflows/cargo-features.yml +++ b/.github/workflows/cargo-features.yml @@ -13,7 +13,7 @@ on: pull_request: workflow_dispatch: -concurrency: +concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index f9daac2091..31067da01a 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -32,5 +32,8 @@ jobs: - name: Format Check run: cargo fmt -- --check - - name: Check - run: cargo clippy --workspace --all-features --all-targets -- -D warnings + - name: Check (embedded-db) + run: cargo clippy --workspace --features "embedded-db testing" --all-targets -- -D warnings + + - name: Check (postgres) + run: cargo clippy --workspace --features testing --all-targets -- -D warnings diff --git a/.github/workflows/slowtest.yaml b/.github/workflows/slowtest.yaml index 4eeb90f14e..d53550d561 100644 --- a/.github/workflows/slowtest.yaml +++ b/.github/workflows/slowtest.yaml @@ -23,7 +23,7 @@ env: RUST_LOG: info,libp2p=off,node=error jobs: - slow-tests: + slow-tests-sqlite: runs-on: ubuntu-latest steps: # These tests need the `anvil` binary provided by foundry @@ -46,11 +46,49 @@ jobs: - name: Build run: | cargo build --locked --bin diff-test --release - cargo nextest run --locked --release --workspace --all-features --no-run + cargo nextest run --locked --release --workspace --features embedded-db --no-run timeout-minutes: 90 - name: Slow Test env: NEXTEST_PROFILE: slow - run: cargo nextest run --locked --release --workspace --all-features --verbose --no-fail-fast --nocapture + run: cargo nextest run --locked --release --workspace --features embedded-db --verbose --no-fail-fast --nocapture timeout-minutes: 40 + slow-tests-postgres: + runs-on: ubuntu-latest + steps: + - name: Fix submodule permissions check + run: | + git config --global --add safe.directory '*' + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly + + - uses: taiki-e/install-action@nextest + + - name: Checkout Repository + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Configure Environment + run: PATH="$PWD/target/release:$PATH" + + - name: Enable Rust Caching + uses: Swatinem/rust-cache@v2 + with: + cache-all-crates: true + + - name: Build + run: | + cargo build --locked --bin diff-test --release + cargo nextest run --locked --release --workspace --no-run + timeout-minutes: 90 + + - name: Slow Test + env: + NEXTEST_PROFILE: slow + run: cargo nextest run --locked --release --workspace --verbose --no-fail-fast --nocapture + timeout-minutes: 40 \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fb91b59788..553510d2bf 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,10 +20,12 @@ concurrency: env: RUST_LOG: info,libp2p=off,node=error CARGO_TERM_COLOR: always + # Save the process compose logs + PC_LOGS: /tmp/pc.log jobs: - build-test-artifacts: - name: Build test artifacts + build-test-artifacts-postgres: + name: Build test artifacts (postgres) runs-on: buildjet-8vcpu-ubuntu-2204 steps: - uses: rui314/setup-mold@v1 @@ -40,13 +42,40 @@ jobs: cache-provider: buildjet - name: Build and archive tests - run: cargo nextest archive --locked --workspace --all-features --archive-file nextest-archive.tar.zst + run: cargo nextest archive --locked --workspace --archive-file nextest-archive-postgres.tar.zst - name: Upload archive to workflow uses: actions/upload-artifact@v4 with: - name: nextest-archive - path: nextest-archive.tar.zst + name: nextest-archive-postgres + path: nextest-archive-postgres.tar.zst + + build-test-artifacts-sqlite: + name: Build test artifacts (sqlite) + runs-on: buildjet-8vcpu-ubuntu-2204 + steps: + - uses: rui314/setup-mold@v1 + + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Install nextest + uses: taiki-e/install-action@nextest + + - name: Enable Rust Caching + uses: Swatinem/rust-cache@v2 + with: + cache-all-crates: true + cache-provider: buildjet + + - name: Build and archive tests + run: cargo nextest archive --locked --features "embedded-db testing" --workspace --archive-file nextest-archive-sqlite.tar.zst + + - name: Upload archive to workflow + uses: actions/upload-artifact@v4 + with: + name: nextest-archive-sqlite + path: nextest-archive-sqlite.tar.zst build-test-bins: name: Build test binaries @@ -63,7 +92,9 @@ jobs: cache-provider: buildjet - name: Build Bins - run: cargo build --locked --profile test --bins + run: | + cargo build --locked --profile test --bins + cargo build --manifest-path ./sequencer-sqlite/Cargo.toml --target-dir ./target timeout-minutes: 30 - name: Upload archive to workflow @@ -93,39 +124,70 @@ jobs: target/debug/marketplace-builder target/debug/node-metrics target/debug/dev-rollup + target/debug/sequencer-sqlite + + test-postgres: + needs: build-test-artifacts-postgres + runs-on: ubuntu-latest + steps: + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + + - uses: actions/checkout@v4 + + - name: Install nextest + uses: taiki-e/install-action@nextest + - name: Download archive + uses: actions/download-artifact@v4 + with: + name: nextest-archive-postgres + + - name: Test + run: | + cargo nextest run --archive-file nextest-archive-postgres.tar.zst --verbose --no-fail-fast \ + --workspace-remap $PWD + timeout-minutes: 20 - test: - needs: build-test-artifacts + test-sqlite: + needs: build-test-artifacts-sqlite runs-on: ubuntu-latest steps: + - name: Fix submodule permissions check + run: | + git config --global --add safe.directory '*' + - name: Install Foundry uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly - uses: actions/checkout@v4 + with: + submodules: recursive - name: Install nextest uses: taiki-e/install-action@nextest - name: Download archive uses: actions/download-artifact@v4 with: - name: nextest-archive + name: nextest-archive-sqlite - name: Test run: | - cargo nextest run --archive-file nextest-archive.tar.zst --verbose --no-fail-fast \ + cargo nextest run --archive-file nextest-archive-sqlite.tar.zst --verbose --no-fail-fast \ --workspace-remap $PWD timeout-minutes: 20 test-integration: - needs: [build-test-artifacts, build-test-bins] + needs: [build-test-bins, build-test-artifacts-postgres] strategy: matrix: - version: [02,03] + version: [02,99] include: - version: 02 compose: "-f process-compose.yaml -D" - - version: 03 + - version: 99 compose: "-f process-compose.yaml -f process-compose-mp.yml -D" runs-on: ubuntu-latest steps: @@ -144,7 +206,7 @@ jobs: - name: Move files run: | - mv nextest-archive/* . + mv nextest-archive-postgres/* . mkdir -p target/debug mv test-binaries/* target/debug chmod -c +x target/debug/* @@ -152,23 +214,25 @@ jobs: - name: Install process-compose run: nix profile install nixpkgs#process-compose - - name: Pull Docker Images - run: docker compose pull || docker-compose pull - - name: Run Demo-Native ${{matrix.version}} - run: bash -x scripts/demo-native ${{matrix.compose}} + run: bash -x scripts/demo-native ${{matrix.compose}} --tui=false > ${{ env.PC_LOGS }} 2>&1 & - name: Test Integration env: + RUST_LOG: debug NEXTEST_PROFILE: integration INTEGRATION_TEST_SEQUENCER_VERSION: ${{ matrix.version }} run: | - cargo nextest run --archive-file nextest-archive.tar.zst --verbose --no-fail-fast \ + cargo nextest run --archive-file nextest-archive-postgres.tar.zst --verbose --no-fail-fast --nocapture \ --workspace-remap $PWD $(if [ "${{ matrix.version }}" == "2" ]; then echo " smoke"; fi) - timeout-minutes: 40 + timeout-minutes: 10 - - name: Process Compose Down - run: process-compose down + - name: Upload process compose logs + if: always() + uses: actions/upload-artifact@v4 + with: + name: process-compose-logs-integration-v${{ matrix.version }} + path: ${{ env.PC_LOGS }} demo-native: needs: build-test-bins @@ -197,6 +261,3 @@ jobs: set -o pipefail scripts/demo-native --tui=false & timeout -v 600 scripts/smoke-test-demo | sed -e 's/^/smoke-test: /;' - - - name: Process Compose Down - run: process-compose down diff --git a/Cargo.lock b/Cargo.lock index 16044715a9..939d95108e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "Inflector" @@ -14,13 +14,19 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.24.2" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + [[package]] name = "adler2" version = "2.0.0" @@ -1048,17 +1054,17 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" dependencies = [ "addr2line", + "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.7.4", "object", "rustc-demangle", - "windows-targets 0.52.6", ] [[package]] @@ -3312,7 +3318,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.8.0", ] [[package]] @@ -3648,9 +3654,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.31.1" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "glob" @@ -4004,7 +4010,7 @@ dependencies = [ [[package]] name = "hotshot" version = "0.5.79" -source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" dependencies = [ "anyhow", "async-broadcast", @@ -4047,7 +4053,7 @@ dependencies = [ [[package]] name = "hotshot-builder-api" version = "0.1.7" -source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" dependencies = [ "async-trait", "clap", @@ -4066,7 +4072,7 @@ dependencies = [ [[package]] name = "hotshot-builder-core" version = "0.1.57" -source = "git+https://github.com/EspressoSystems/marketplace-builder-core?branch=hotshot/0.5.82#68558adad5afbedfbc6afafd549f488208d47176" +source = "git+https://github.com/EspressoSystems/marketplace-builder-core?branch=hotshot%2F0.5.82#68558adad5afbedfbc6afafd549f488208d47176" dependencies = [ "anyhow", "async-broadcast", @@ -4118,7 +4124,7 @@ dependencies = [ [[package]] name = "hotshot-events-service" version = "0.1.50" -source = "git+https://github.com/EspressoSystems/hotshot-events-service.git?branch=hotshot/0.5.82#a12afecabc657e0753ae956b46bbf5e7beed2d25" +source = "git+https://github.com/EspressoSystems/hotshot-events-service.git?branch=hotshot%2F0.5.82#a12afecabc657e0753ae956b46bbf5e7beed2d25" dependencies = [ "async-broadcast", "async-lock 2.8.0", @@ -4145,7 +4151,7 @@ dependencies = [ [[package]] name = "hotshot-example-types" version = "0.5.79" -source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" dependencies = [ "anyhow", "async-lock 3.4.0", @@ -4170,7 +4176,7 @@ dependencies = [ [[package]] name = "hotshot-fakeapi" version = "0.5.79" -source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" dependencies = [ "anyhow", "async-lock 3.4.0", @@ -4188,7 +4194,7 @@ dependencies = [ [[package]] name = "hotshot-macros" version = "0.5.79" -source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" dependencies = [ "derive_builder", "proc-macro2", @@ -4199,7 +4205,7 @@ dependencies = [ [[package]] name = "hotshot-orchestrator" version = "0.5.79" -source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" dependencies = [ "anyhow", "async-lock 3.4.0", @@ -4222,7 +4228,7 @@ dependencies = [ [[package]] name = "hotshot-query-service" version = "0.1.63" -source = "git+https://github.com/EspressoSystems/hotshot-query-service?branch=hotshot/0.5.82#86950187ddc308d07b0ea2adeccc58005ff2a708" +source = "git+https://github.com/EspressoSystems/hotshot-query-service?branch=hotshot%2F0.5.82#86950187ddc308d07b0ea2adeccc58005ff2a708" dependencies = [ "anyhow", "ark-serialize", @@ -4277,7 +4283,7 @@ dependencies = [ [[package]] name = "hotshot-stake-table" version = "0.5.79" -source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" dependencies = [ "ark-bn254", "ark-ed-on-bn254", @@ -4339,7 +4345,7 @@ dependencies = [ [[package]] name = "hotshot-task" version = "0.5.79" -source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" dependencies = [ "async-broadcast", "async-trait", @@ -4352,7 +4358,7 @@ dependencies = [ [[package]] name = "hotshot-task-impls" version = "0.5.79" -source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" dependencies = [ "anyhow", "async-broadcast", @@ -4386,7 +4392,7 @@ dependencies = [ [[package]] name = "hotshot-testing" version = "0.5.79" -source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" dependencies = [ "anyhow", "async-broadcast", @@ -4427,7 +4433,7 @@ dependencies = [ [[package]] name = "hotshot-types" version = "0.1.11" -source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" dependencies = [ "anyhow", "ark-bn254", @@ -5837,7 +5843,7 @@ dependencies = [ [[package]] name = "libp2p-networking" version = "0.5.79" -source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" dependencies = [ "anyhow", "async-trait", @@ -6219,7 +6225,7 @@ dependencies = [ [[package]] name = "marketplace-builder-core" version = "0.1.57" -source = "git+https://github.com/EspressoSystems/marketplace-builder-core?branch=hotshot/0.5.82#68558adad5afbedfbc6afafd549f488208d47176" +source = "git+https://github.com/EspressoSystems/marketplace-builder-core?branch=hotshot%2F0.5.82#68558adad5afbedfbc6afafd549f488208d47176" dependencies = [ "anyhow", "async-broadcast", @@ -6245,7 +6251,7 @@ dependencies = [ [[package]] name = "marketplace-builder-shared" version = "0.1.57" -source = "git+https://github.com/EspressoSystems/marketplace-builder-core?branch=hotshot/0.5.82#68558adad5afbedfbc6afafd549f488208d47176" +source = "git+https://github.com/EspressoSystems/marketplace-builder-core?branch=hotshot%2F0.5.82#68558adad5afbedfbc6afafd549f488208d47176" dependencies = [ "anyhow", "async-broadcast", @@ -6428,6 +6434,15 @@ 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 = "miniz_oxide" version = "0.8.0" @@ -6831,9 +6846,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.5" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ "memchr", ] @@ -10705,7 +10720,7 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "utils" version = "0.5.79" -source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" dependencies = [ "tracing", ] diff --git a/Cargo.toml b/Cargo.toml index 55214e58fb..1ed4b66c5c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,6 +24,10 @@ members = [ "utils", ] +exclude = [ + "sequencer-sqlite" +] + [workspace.dependencies] anyhow = "^1.0" ark-std = "0.4" diff --git a/builder/src/lib.rs b/builder/src/lib.rs index 83a7c66b20..be8ece7a74 100755 --- a/builder/src/lib.rs +++ b/builder/src/lib.rs @@ -43,8 +43,8 @@ pub mod testing { use async_lock::RwLock; use committable::Committable; use espresso_types::{ - traits::SequencerPersistence, v0_3::ChainConfig, Event, FeeAccount, NamespaceId, NodeState, - PrivKey, PubKey, Transaction, ValidatedState, + traits::SequencerPersistence, v0_99::ChainConfig, Event, FeeAccount, NamespaceId, + NodeState, PrivKey, PubKey, Transaction, ValidatedState, }; use ethers::utils::{Anvil, AnvilInstance}; use futures::stream::{Stream, StreamExt}; diff --git a/builder/src/non_permissioned.rs b/builder/src/non_permissioned.rs index 5c19df5332..ab33c1fb35 100644 --- a/builder/src/non_permissioned.rs +++ b/builder/src/non_permissioned.rs @@ -4,7 +4,7 @@ use anyhow::Context; use async_broadcast::broadcast; use async_lock::RwLock; use espresso_types::{ - eth_signature_key::EthKeyPair, v0_3::ChainConfig, FeeAmount, NodeState, Payload, SeqTypes, + eth_signature_key::EthKeyPair, v0_99::ChainConfig, FeeAmount, NodeState, Payload, SeqTypes, ValidatedState, }; use hotshot::traits::BlockPayload; diff --git a/client/src/lib.rs b/client/src/lib.rs index 80b112ff55..a9d5cc995f 100644 --- a/client/src/lib.rs +++ b/client/src/lib.rs @@ -1,6 +1,7 @@ use anyhow::Context; use espresso_types::{FeeAccount, FeeAmount, FeeMerkleTree, Header}; use ethers::types::Address; +use futures::{stream::BoxStream, StreamExt}; use jf_merkle_tree::{ prelude::{MerkleProof, Sha3Node}, MerkleTreeScheme, @@ -48,12 +49,13 @@ impl SequencerClient { pub async fn subscribe_headers( &self, height: u64, - ) -> anyhow::Result> { + ) -> anyhow::Result>> { self.0 .socket(&format!("availability/stream/headers/{height}")) - .subscribe() + .subscribe::
() .await .context("subscribing to Espresso headers") + .map(|s| s.boxed()) } /// Subscribe to a stream of Block Headers diff --git a/common/mod.rs b/common/mod.rs deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/data/genesis/demo-marketplace.toml b/data/genesis/demo-marketplace.toml index da76f86363..4b7f0d7366 100644 --- a/data/genesis/demo-marketplace.toml +++ b/data/genesis/demo-marketplace.toml @@ -1,5 +1,5 @@ base_version = "0.2" -upgrade_version = "0.3" +upgrade_version = "0.99" [stake_table] capacity = 10 @@ -18,9 +18,9 @@ timestamp = "1970-01-01T00:00:00Z" number = 0 [[upgrade]] -version = "0.3" -start_proposing_view = 5 -stop_proposing_view = 15 +version = "0.99" +start_proposing_view = 10 +stop_proposing_view = 60 [upgrade.marketplace] [upgrade.marketplace.chain_config] diff --git a/data/v3/messages.bin b/data/v3/messages.bin index 2ec88b871e..b07e615a29 100644 Binary files a/data/v3/messages.bin and b/data/v3/messages.bin differ diff --git a/data/v3/messages.json b/data/v3/messages.json index 2c01354e2f..fcf77f9592 100644 --- a/data/v3/messages.json +++ b/data/v3/messages.json @@ -8,19 +8,13 @@ "data": { "block_header": { "fields": { - "auction_results": { - "reserve_bids": [], - "view_number": 0, - "winning_bids": [] - }, "block_merkle_tree_root": "MERKLE_COMM~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAQA", "builder_commitment": "BUILDER_COMMITMENT~tEvs0rxqOiMCvfe2R0omNNaphSlUiEDrb2q0IZpRcgA_", - "builder_signature": [], + "builder_signature": null, "chain_config": { "chain_config": { "Left": { "base_fee": "0", - "bid_recipient": null, "chain_id": "35353", "fee_contract": null, "fee_recipient": "0x0000000000000000000000000000000000000000", @@ -28,12 +22,10 @@ } } }, - "fee_info": [ - { - "account": "0x0000000000000000000000000000000000000000", - "amount": "0" - } - ], + "fee_info": { + "account": "0x0000000000000000000000000000000000000000", + "amount": "0" + }, "fee_merkle_tree_root": "MERKLE_COMM~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAKA", "height": 0, "l1_finalized": null, @@ -106,7 +98,7 @@ "General": { "Vote": { "data": { - "leaf_commit": "COMMIT~OKSLSeNGssYMfKSuB2uAM78yenmn7z8DaeAZYsIhcy-c" + "leaf_commit": "COMMIT~EfU0gW2LYJvl8O-KeUQ7-RWlFZpHufcuRotW-QHXNy80" }, "signature": [ "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U", diff --git a/data/v3/chain_config.bin b/data/v99/chain_config.bin similarity index 66% rename from data/v3/chain_config.bin rename to data/v99/chain_config.bin index 92c05b086c..b966a83cbb 100644 Binary files a/data/v3/chain_config.bin and b/data/v99/chain_config.bin differ diff --git a/data/v3/chain_config.json b/data/v99/chain_config.json similarity index 100% rename from data/v3/chain_config.json rename to data/v99/chain_config.json diff --git a/data/v3/header.bin b/data/v99/header.bin similarity index 93% rename from data/v3/header.bin rename to data/v99/header.bin index 8e50a6eba6..c07c0e1e64 100644 Binary files a/data/v3/header.bin and b/data/v99/header.bin differ diff --git a/data/v3/header.json b/data/v99/header.json similarity index 98% rename from data/v3/header.json rename to data/v99/header.json index 2b8fa12342..a4cfc7846c 100644 --- a/data/v3/header.json +++ b/data/v99/header.json @@ -49,7 +49,7 @@ "version": { "Version": { "major": 0, - "minor": 3 + "minor": 99 } } } \ No newline at end of file diff --git a/data/v99/messages.bin b/data/v99/messages.bin new file mode 100644 index 0000000000..2ec88b871e Binary files /dev/null and b/data/v99/messages.bin differ diff --git a/data/v99/messages.json b/data/v99/messages.json new file mode 100644 index 0000000000..2c01354e2f --- /dev/null +++ b/data/v99/messages.json @@ -0,0 +1,443 @@ +[ + { + "kind": { + "Consensus": { + "General": { + "Proposal": { + "_pd": null, + "data": { + "block_header": { + "fields": { + "auction_results": { + "reserve_bids": [], + "view_number": 0, + "winning_bids": [] + }, + "block_merkle_tree_root": "MERKLE_COMM~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAQA", + "builder_commitment": "BUILDER_COMMITMENT~tEvs0rxqOiMCvfe2R0omNNaphSlUiEDrb2q0IZpRcgA_", + "builder_signature": [], + "chain_config": { + "chain_config": { + "Left": { + "base_fee": "0", + "bid_recipient": null, + "chain_id": "35353", + "fee_contract": null, + "fee_recipient": "0x0000000000000000000000000000000000000000", + "max_block_size": "30720" + } + } + }, + "fee_info": [ + { + "account": "0x0000000000000000000000000000000000000000", + "amount": "0" + } + ], + "fee_merkle_tree_root": "MERKLE_COMM~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAKA", + "height": 0, + "l1_finalized": null, + "l1_head": 0, + "ns_table": { + "bytes": "AAAAAA==" + }, + "payload_commitment": "HASH~AazstQer_ho1SqgGT0r10_Gs0BnjfbPBHJdSO3HHbp29", + "timestamp": 0 + }, + "version": { + "Version": { + "major": 0, + "minor": 3 + } + } + }, + "justify_qc": { + "_pd": null, + "data": { + "leaf_commit": "COMMIT~tqpBNqqt63akxJWcfI46uDV8c_Sn_aZ777yCj4X_ukDG" + }, + "signatures": null, + "view_number": 0, + "vote_commitment": "COMMIT~tzMwZg2x5QJTx7Di9eEvNC0P8CZ_iNX7LJ01DHA9XEdO" + }, + "proposal_certificate": { + "Timeout": { + "_pd": null, + "data": { + "view": 0 + }, + "signatures": null, + "view_number": 0, + "vote_commitment": "COMMIT~TZG1F34lxU6Ny9aKQMkjZAxjW9zotdwW75EHEGbyALOi" + } + }, + "upgrade_certificate": { + "_pd": null, + "data": { + "decide_by": 0, + "new_version": { + "major": 1, + "minor": 0 + }, + "new_version_first_view": 0, + "new_version_hash": [], + "old_version": { + "major": 0, + "minor": 1 + }, + "old_version_last_view": 0 + }, + "signatures": null, + "view_number": 0, + "vote_commitment": "COMMIT~roiQgLLeI4uYqYxjz-0jPwtLyNhSlnfriPEVZ-_4RUrW" + }, + "view_number": 0 + }, + "signature": "BLS_SIG~g3CUcLMD7fnDsBhItKvSqXLwEqdWfvusSrgpL1GBAxf-SWFW0t32Agt2jrOiempjjpI7dBwYGgXv-0mvI4sGEEE" + } + } + } + }, + "sender": "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U" + }, + { + "kind": { + "Consensus": { + "General": { + "Vote": { + "data": { + "leaf_commit": "COMMIT~OKSLSeNGssYMfKSuB2uAM78yenmn7z8DaeAZYsIhcy-c" + }, + "signature": [ + "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U", + "BLS_SIG~g3CUcLMD7fnDsBhItKvSqXLwEqdWfvusSrgpL1GBAxf-SWFW0t32Agt2jrOiempjjpI7dBwYGgXv-0mvI4sGEEE" + ], + "view_number": 0 + } + } + } + }, + "sender": "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U" + }, + { + "kind": { + "Consensus": { + "General": { + "ViewSyncPreCommitVote": { + "data": { + "relay": 0, + "round": 0 + }, + "signature": [ + "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U", + "BLS_SIG~g3CUcLMD7fnDsBhItKvSqXLwEqdWfvusSrgpL1GBAxf-SWFW0t32Agt2jrOiempjjpI7dBwYGgXv-0mvI4sGEEE" + ], + "view_number": 0 + } + } + } + }, + "sender": "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U" + }, + { + "kind": { + "Consensus": { + "General": { + "ViewSyncCommitVote": { + "data": { + "relay": 0, + "round": 0 + }, + "signature": [ + "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U", + "BLS_SIG~g3CUcLMD7fnDsBhItKvSqXLwEqdWfvusSrgpL1GBAxf-SWFW0t32Agt2jrOiempjjpI7dBwYGgXv-0mvI4sGEEE" + ], + "view_number": 0 + } + } + } + }, + "sender": "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U" + }, + { + "kind": { + "Consensus": { + "General": { + "ViewSyncFinalizeVote": { + "data": { + "relay": 0, + "round": 0 + }, + "signature": [ + "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U", + "BLS_SIG~g3CUcLMD7fnDsBhItKvSqXLwEqdWfvusSrgpL1GBAxf-SWFW0t32Agt2jrOiempjjpI7dBwYGgXv-0mvI4sGEEE" + ], + "view_number": 0 + } + } + } + }, + "sender": "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U" + }, + { + "kind": { + "Consensus": { + "General": { + "ViewSyncPreCommitCertificate": { + "_pd": null, + "data": { + "relay": 0, + "round": 0 + }, + "signatures": null, + "view_number": 0, + "vote_commitment": "COMMIT~OQecZxfFpuEuPJgkpsQoglnqY0fm6Qi1PUarYCgiFQ0T" + } + } + } + }, + "sender": "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U" + }, + { + "kind": { + "Consensus": { + "General": { + "ViewSyncCommitCertificate": { + "_pd": null, + "data": { + "relay": 0, + "round": 0 + }, + "signatures": null, + "view_number": 0, + "vote_commitment": "COMMIT~POgBCaDjtUV3Il5-FXVr5KN2KzYSgipfKX6Ci0-nxduO" + } + } + } + }, + "sender": "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U" + }, + { + "kind": { + "Consensus": { + "General": { + "ViewSyncFinalizeCertificate": { + "_pd": null, + "data": { + "relay": 0, + "round": 0 + }, + "signatures": null, + "view_number": 0, + "vote_commitment": "COMMIT~s5i9wmQWH7VU90CUiEWRdAG19LI1iXydSMxp9gZ7kHco" + } + } + } + }, + "sender": "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U" + }, + { + "kind": { + "Consensus": { + "General": { + "TimeoutVote": { + "data": { + "view": 0 + }, + "signature": [ + "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U", + "BLS_SIG~g3CUcLMD7fnDsBhItKvSqXLwEqdWfvusSrgpL1GBAxf-SWFW0t32Agt2jrOiempjjpI7dBwYGgXv-0mvI4sGEEE" + ], + "view_number": 0 + } + } + } + }, + "sender": "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U" + }, + { + "kind": { + "Consensus": { + "General": { + "UpgradeProposal": { + "_pd": null, + "data": { + "upgrade_proposal": { + "decide_by": 0, + "new_version": { + "major": 1, + "minor": 0 + }, + "new_version_first_view": 0, + "new_version_hash": [], + "old_version": { + "major": 0, + "minor": 1 + }, + "old_version_last_view": 0 + }, + "view_number": 0 + }, + "signature": "BLS_SIG~g3CUcLMD7fnDsBhItKvSqXLwEqdWfvusSrgpL1GBAxf-SWFW0t32Agt2jrOiempjjpI7dBwYGgXv-0mvI4sGEEE" + } + } + } + }, + "sender": "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U" + }, + { + "kind": { + "Consensus": { + "General": { + "UpgradeVote": { + "data": { + "decide_by": 0, + "new_version": { + "major": 1, + "minor": 0 + }, + "new_version_first_view": 0, + "new_version_hash": [], + "old_version": { + "major": 0, + "minor": 1 + }, + "old_version_last_view": 0 + }, + "signature": [ + "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U", + "BLS_SIG~g3CUcLMD7fnDsBhItKvSqXLwEqdWfvusSrgpL1GBAxf-SWFW0t32Agt2jrOiempjjpI7dBwYGgXv-0mvI4sGEEE" + ], + "view_number": 0 + } + } + } + }, + "sender": "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U" + }, + { + "kind": { + "Consensus": { + "Da": { + "DaProposal": { + "_pd": null, + "data": { + "encoded_transactions": [ + 1, + 0, + 0, + 0, + 3, + 0, + 0, + 0, + 1, + 2, + 3 + ], + "metadata": { + "bytes": "AQAAAAEAAAALAAAA" + }, + "view_number": 0 + }, + "signature": "BLS_SIG~g3CUcLMD7fnDsBhItKvSqXLwEqdWfvusSrgpL1GBAxf-SWFW0t32Agt2jrOiempjjpI7dBwYGgXv-0mvI4sGEEE" + } + } + } + }, + "sender": "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U" + }, + { + "kind": { + "Consensus": { + "Da": { + "DaVote": { + "data": { + "payload_commit": "HASH~AazstQer_ho1SqgGT0r10_Gs0BnjfbPBHJdSO3HHbp29" + }, + "signature": [ + "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U", + "BLS_SIG~g3CUcLMD7fnDsBhItKvSqXLwEqdWfvusSrgpL1GBAxf-SWFW0t32Agt2jrOiempjjpI7dBwYGgXv-0mvI4sGEEE" + ], + "view_number": 0 + } + } + } + }, + "sender": "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U" + }, + { + "kind": { + "Consensus": { + "Da": { + "DaCertificate": { + "_pd": null, + "data": { + "payload_commit": "HASH~AazstQer_ho1SqgGT0r10_Gs0BnjfbPBHJdSO3HHbp29" + }, + "signatures": null, + "view_number": 0, + "vote_commitment": "COMMIT~5E3F3rC4E9DBhMBqOTmjZ9tjX4VFaV5gqrZJl0y6V05D" + } + } + } + }, + "sender": "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U" + }, + { + "kind": { + "Consensus": { + "Da": { + "VidDisperseMsg": { + "_pd": null, + "data": { + "common": { + "all_evals_digest": "FIELD~rF4TMFZMXJCieDeov31aNuDG5nDGR-iQdteEgBjXkErn", + "multiplicity": 1, + "num_storage_nodes": 1, + "payload_byte_len": 11, + "poly_commits": "FIELD~AQAAAAAAAAD2xsICwO-z0CXx_ucl0FV1j-zJ3tgPO-OL8gYLvXkIkNE" + }, + "payload_commitment": "HASH~Z03vXeC1EEaBGf5iacsBEWYiA7PHi3K6uS9gVpmlUx3t", + "recipient_key": "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U", + "share": { + "aggregate_proofs": "FIELD~AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQGY", + "evals": "FIELD~AQAAAAAAAAABAAAAAwAAAAECAwAAAAAAAAAAAAAAAAAAAAAAAAAAAMk", + "evals_proof": { + "pos": "FIELD~AAAAAAAAAAD7", + "proof": [ + { + "Leaf": { + "elem": "FIELD~AQAAAAAAAAABAAAAAwAAAAECAwAAAAAAAAAAAAAAAAAAAAAAAAAAAMk", + "pos": "FIELD~AAAAAAAAAAD7", + "value": "FIELD~rF4TMFZMXJCieDeov31aNuDG5nDGR-iQdteEgBjXkErn" + } + } + ] + }, + "index": 0 + }, + "view_number": 0 + }, + "signature": "BLS_SIG~g3CUcLMD7fnDsBhItKvSqXLwEqdWfvusSrgpL1GBAxf-SWFW0t32Agt2jrOiempjjpI7dBwYGgXv-0mvI4sGEEE" + } + } + } + }, + "sender": "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U" + }, + { + "kind": { + "Data": { + "SubmitTransaction": [ + { + "namespace": 1, + "payload": "AQID" + }, + 0 + ] + } + }, + "sender": "BLS_VER_KEY~bQszS-QKYvUij2g20VqS8asttGSb95NrTu2PUj0uMh1CBUxNy1FqyPDjZqB29M7ZbjWqj79QkEOWkpga84AmDYUeTuWmy-0P1AdKHD3ehc-dKvei78BDj5USwXPJiDUlCxvYs_9rWYhagaq-5_LXENr78xel17spftNd5MA1Mw5U" + } +] \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index c12d4c5c3e..a036ee88d5 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -222,6 +222,7 @@ services: # Run the full API server with all modules, Postgres storage command: sequencer -- storage-sql -- http -- query -- catchup -- status -- submit -- hotshot-events -- config environment: + - ESPRESSO_SEQUENCER_EMBEDDED_DB=false - ESPRESSO_SEQUENCER_GENESIS_FILE - ESPRESSO_SEQUENCER_ORCHESTRATOR_URL - ESPRESSO_SEQUENCER_CDN_ENDPOINT @@ -278,6 +279,7 @@ services: - "$ESPRESSO_SEQUENCER1_API_PORT:$ESPRESSO_SEQUENCER_API_PORT" command: sequencer -- storage-sql -- http -- query -- catchup -- status -- state -- explorer environment: + - ESPRESSO_SEQUENCER_EMBEDDED_DB=false - ESPRESSO_SEQUENCER_GENESIS_FILE - ESPRESSO_SEQUENCER_ORCHESTRATOR_URL - ESPRESSO_SEQUENCER_CDN_ENDPOINT @@ -334,12 +336,13 @@ services: - "$ESPRESSO_SEQUENCER2_API_PORT:$ESPRESSO_SEQUENCER_API_PORT" command: sequencer -- http -- catchup -- status environment: + - ESPRESSO_SEQUENCER_EMBEDDED_DB=false - ESPRESSO_SEQUENCER_GENESIS_FILE - ESPRESSO_SEQUENCER_ORCHESTRATOR_URL - ESPRESSO_SEQUENCER_CDN_ENDPOINT - ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_MAX_CONNECTIONS - - ESPRESSO_SEQUENCER_API_PEERS=http://sequencer1:$ESPRESSO_SEQUENCER_API_PORT + - ESPRESSO_SEQUENCER_API_PEERS=http://sequencer4:$ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_STATE_PEERS=http://sequencer3:$ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_L1_PROVIDER - ESPRESSO_SEQUENCER_L1_EVENTS_MAX_BLOCK_RANGE @@ -384,6 +387,7 @@ services: - "$ESPRESSO_SEQUENCER3_API_PORT:$ESPRESSO_SEQUENCER_API_PORT" command: sequencer -- http -- catchup -- status environment: + - ESPRESSO_SEQUENCER_EMBEDDED_DB=false - ESPRESSO_SEQUENCER_GENESIS_FILE - ESPRESSO_SEQUENCER_ORCHESTRATOR_URL - ESPRESSO_SEQUENCER_CDN_ENDPOINT @@ -431,14 +435,16 @@ services: image: ghcr.io/espressosystems/espresso-sequencer/sequencer:main ports: - "$ESPRESSO_SEQUENCER4_API_PORT:$ESPRESSO_SEQUENCER_API_PORT" - command: sequencer -- http -- catchup -- status + command: sequencer -- http -- query -- catchup -- status environment: + - ESPRESSO_SEQUENCER_EMBEDDED_DB=true - ESPRESSO_SEQUENCER_GENESIS_FILE - ESPRESSO_SEQUENCER_ORCHESTRATOR_URL - ESPRESSO_SEQUENCER_CDN_ENDPOINT - ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_MAX_CONNECTIONS - ESPRESSO_SEQUENCER_STATE_PEERS=http://sequencer0:$ESPRESSO_SEQUENCER_API_PORT + - ESPRESSO_SEQUENCER_API_PEERS=http://sequencer0:$ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_L1_PROVIDER - ESPRESSO_SEQUENCER_L1_EVENTS_MAX_BLOCK_RANGE - ESPRESSO_STATE_RELAY_SERVER_URL diff --git a/docker/sequencer.Dockerfile b/docker/sequencer.Dockerfile index 29de81c034..8a802d1f73 100644 --- a/docker/sequencer.Dockerfile +++ b/docker/sequencer.Dockerfile @@ -5,14 +5,15 @@ ARG TARGETARCH RUN apt-get update \ && apt-get install -y curl libcurl4 wait-for-it tini \ && rm -rf /var/lib/apt/lists/* -ENTRYPOINT ["tini", "--"] - # Download an SRS file to avoid download at runtime ENV AZTEC_SRS_PATH=/kzg10-aztec20-srs-1048584.bin RUN curl -LO https://github.com/EspressoSystems/ark-srs/releases/download/v0.2.0/$AZTEC_SRS_PATH -COPY target/$TARGETARCH/release/sequencer /bin/sequencer -RUN chmod +x /bin/sequencer +COPY target/$TARGETARCH/release/sequencer /bin/sequencer-postgres +RUN chmod +x /bin/sequencer-postgres + +COPY target/$TARGETARCH/release/sequencer-sqlite /bin/sequencer-sqlite +RUN chmod +x /bin/sequencer-sqlite COPY target/$TARGETARCH/release/utils /bin/utils RUN chmod +x /bin/utils @@ -34,6 +35,10 @@ COPY data/genesis /genesis # Set `ESPRESSO_SEQUENCER_GENESIS_SECRET` COPY docker/scripts/sequencer-awssecretsmanager.sh /bin/sequencer-awssecretsmanager.sh +# Copy entrypoint script +COPY scripts/sequencer-entrypoint /bin/sequencer +RUN chmod +x /bin/sequencer + # Set a path to save the consensus config on startup. # # Upon restart, the config will be loaded from this file and the node will be able to resume diff --git a/justfile b/justfile index 2b0a6d9ce1..5d7521a925 100644 --- a/justfile +++ b/justfile @@ -7,13 +7,19 @@ doc *args: demo *args: docker compose up {{args}} -demo-native *args: - cargo build --profile test +demo-native *args: build scripts/demo-native {{args}} -demo-native-mp: - cargo build --release - scripts/demo-native -f process-compose.yaml -f process-compose-mp.yml +build: + #!/usr/bin/env bash + set -euxo pipefail + # Use the same target dir for both `build` invocations + export CARGO_TARGET_DIR=${CARGO_TARGET_DIR:-target} + cargo build --profile test + cargo build --profile test --manifest-path ./sequencer-sqlite/Cargo.toml + +demo-native-mp *args: build + scripts/demo-native -f process-compose.yaml -f process-compose-mp.yml {{args}} demo-native-benchmark: cargo build --release --features benchmarking @@ -38,22 +44,30 @@ anvil *args: docker run -p 127.0.0.1:8545:8545 ghcr.io/foundry-rs/foundry:latest "anvil {{args}}" test *args: - @echo 'Omitting slow tests. Use `test-slow` for those. Or `test-all` for all tests.' - cargo nextest run --locked --workspace --all-features --verbose {{args}} + @echo 'Omitting slow tests. Use `test-slow` for those. Or `test-all` for all tests.' + @echo 'features: "embedded-db"' + cargo nextest run --locked --workspace --features embedded-db --verbose {{args}} + cargo nextest run --locked --workspace --verbose {{args}} test-slow: - @echo 'Only slow tests are included. Use `test` for those deemed not slow. Or `test-all` for all tests.' - cargo nextest run --locked --release --workspace --all-features --verbose --profile slow + @echo 'Only slow tests are included. Use `test` for those deemed not slow. Or `test-all` for all tests.' + @echo 'features: "embedded-db"' + cargo nextest run --locked --release --workspace --features embedded-db --verbose --profile slow + cargo nextest run --locked --release --workspace --verbose --profile slow test-all: - cargo nextest run --locked --release --workspace --all-features --verbose --profile all + @echo 'features: "embedded-db"' + cargo nextest run --locked --release --workspace --features embedded-db --verbose --profile all + cargo nextest run --locked --release --workspace --verbose --profile all test-integration: @echo 'NOTE that demo-native must be running for this test to succeed.' cargo nextest run --all-features --nocapture --profile integration clippy: - cargo clippy --workspace --all-features --all-targets -- -D warnings + @echo 'features: "embedded-db"' + cargo clippy --workspace --features embedded-db --all-targets -- -D warnings + cargo clippy --workspace -- -D warnings check-features *args: cargo hack check --each-feature {{args}} diff --git a/marketplace-builder/Cargo.toml b/marketplace-builder/Cargo.toml index 90291b6e8f..7ddf1183e0 100644 --- a/marketplace-builder/Cargo.toml +++ b/marketplace-builder/Cargo.toml @@ -7,6 +7,7 @@ edition = { workspace = true } [features] testing = ["hotshot-query-service", "sequencer-utils", "tempfile"] +embedded-db = [] [dependencies] anyhow = { workspace = true } diff --git a/marketplace-builder/src/builder.rs b/marketplace-builder/src/builder.rs index cbba45dcb9..46a2005f59 100644 --- a/marketplace-builder/src/builder.rs +++ b/marketplace-builder/src/builder.rs @@ -8,7 +8,7 @@ use async_broadcast::{ use async_lock::RwLock; use espresso_types::{ eth_signature_key::EthKeyPair, - v0_3::{ChainConfig, RollupRegistration}, + v0_99::{ChainConfig, RollupRegistration}, FeeAmount, L1Client, MarketplaceVersion, MockSequencerVersions, NamespaceId, NodeState, Payload, SeqTypes, SequencerVersions, ValidatedState, V0_1, }; @@ -29,7 +29,7 @@ use hotshot_events_service::{ use hotshot_types::{ data::{fake_commitment, Leaf, ViewNumber}, traits::{ - block_contents::{vid_commitment, GENESIS_VID_NUM_STORAGE_NODES}, + block_contents::{vid_commitment, Transaction as _, GENESIS_VID_NUM_STORAGE_NODES}, node_implementation::{ConsensusTime, NodeType, Versions}, EncodeBytes, }, @@ -194,7 +194,7 @@ impl BuilderConfig { } } -#[cfg(test)] +#[cfg(all(test, not(feature = "embedded-db")))] mod test { use std::{ str::FromStr, @@ -207,7 +207,7 @@ mod test { use committable::Committable; use espresso_types::{ mock::MockStateCatchup, - v0_3::{RollupRegistration, RollupRegistrationBody}, + v0_99::{RollupRegistration, RollupRegistrationBody}, Event, FeeAccount, Leaf2, MarketplaceVersion, NamespaceId, PubKey, SeqTypes, SequencerVersions, Transaction, }; @@ -618,28 +618,17 @@ mod test { let signature = bundle.signature; assert!(signature.verify(txn_commit, address).is_ok()); - let (payload, _) = Payload::from_transactions( - vec![registered_transaction], - &ValidatedState::default(), - &NodeState::default(), - ) - .await - .expect("unable to create payload"); - - let encoded_txns = payload.encode().to_vec(); - let block_size = encoded_txns.len() as u64; - - let fees = base_fee * block_size; + let fee = base_fee * registered_transaction.minimum_block_size(); let fee_signature = <::BuilderSignatureKey as BuilderSignatureKey>::sign_sequencing_fee_marketplace( &keypair, - fees.as_u64().unwrap(), + fee.as_u64().unwrap(), parent_view_number + 1, ) .unwrap(); let sequencing_fee = BuilderFee { - fee_amount: fees.as_u64().unwrap(), + fee_amount: fee.as_u64().unwrap(), fee_account: FeeAccount::from(address), fee_signature, }; @@ -749,28 +738,17 @@ mod test { let signature = bundle.signature; assert!(signature.verify(txn_commit, address).is_ok()); - let (payload, _) = Payload::from_transactions( - vec![unregistered_transaction], - &ValidatedState::default(), - &NodeState::default(), - ) - .await - .expect("unable to create payload"); - - let encoded_txns = payload.encode().to_vec(); - let block_size = encoded_txns.len() as u64; - - let fees = base_fee * block_size; + let fee = base_fee * unregistered_transaction.minimum_block_size(); let fee_signature = <::BuilderSignatureKey as BuilderSignatureKey>::sign_sequencing_fee_marketplace( &keypair, - fees.as_u64().unwrap(), + fee.as_u64().unwrap(), parent_view_number + 1, ) .unwrap(); let sequencing_fee = BuilderFee { - fee_amount: fees.as_u64().unwrap(), + fee_amount: fee.as_u64().unwrap(), fee_account: FeeAccount::from(address), fee_signature, }; diff --git a/marketplace-builder/src/hooks.rs b/marketplace-builder/src/hooks.rs index 556cbc697f..ede7452152 100644 --- a/marketplace-builder/src/hooks.rs +++ b/marketplace-builder/src/hooks.rs @@ -4,10 +4,10 @@ use std::time::Duration; use async_lock::RwLock; use async_trait::async_trait; -use espresso_types::v0_3::BidTxBody; +use espresso_types::v0_99::BidTxBody; use tokio::{spawn, time::sleep}; -use espresso_types::v0_3::RollupRegistration; +use espresso_types::v0_99::RollupRegistration; use espresso_types::MarketplaceVersion; use espresso_types::SeqTypes; diff --git a/marketplace-builder/src/lib.rs b/marketplace-builder/src/lib.rs index fd77dd6118..8154b87502 100755 --- a/marketplace-builder/src/lib.rs +++ b/marketplace-builder/src/lib.rs @@ -14,7 +14,7 @@ use async_trait::async_trait; use espresso_types::{ eth_signature_key::EthKeyPair, v0::traits::{PersistenceOptions, SequencerPersistence, StateCatchup}, - v0_3::BidTxBody, + v0_99::BidTxBody, FeeVersion, MarketplaceVersion, SeqTypes, SequencerVersions, }; use ethers::{ diff --git a/marketplace-solver/Cargo.toml b/marketplace-solver/Cargo.toml index b6fdbfbf91..06d8b5b1f5 100644 --- a/marketplace-solver/Cargo.toml +++ b/marketplace-solver/Cargo.toml @@ -9,6 +9,7 @@ testing = [ "hotshot-query-service/testing", "portpicker", ] +embedded-db = [] [dependencies] anyhow = { workspace = true } diff --git a/marketplace-solver/src/api.rs b/marketplace-solver/src/api.rs index 09d708460e..5f0d9c8c30 100644 --- a/marketplace-solver/src/api.rs +++ b/marketplace-solver/src/api.rs @@ -4,7 +4,7 @@ use std::{ }; use espresso_types::{ - v0_3::{BidTx, RollupRegistration, RollupUpdate}, + v0_99::{BidTx, RollupRegistration, RollupUpdate}, NamespaceId, }; use futures::FutureExt; diff --git a/marketplace-solver/src/database.rs b/marketplace-solver/src/database.rs index b603cb40f0..c2d09f84af 100644 --- a/marketplace-solver/src/database.rs +++ b/marketplace-solver/src/database.rs @@ -106,7 +106,11 @@ impl From for SolverError { } } -#[cfg(all(any(test, feature = "testing"), not(target_os = "windows")))] +#[cfg(all( + any(test, feature = "testing"), + not(target_os = "windows"), + not(feature = "embedded-db") +))] pub mod mock { use hotshot_query_service::data_source::sql::testing::TmpDb; @@ -143,7 +147,7 @@ pub mod mock { } } -#[cfg(all(test, not(target_os = "windows")))] +#[cfg(all(test, not(target_os = "windows"), not(feature = "embedded-db")))] mod test { use crate::database::mock::setup_mock_database; use hotshot::helpers::initialize_logging; diff --git a/marketplace-solver/src/state.rs b/marketplace-solver/src/state.rs index dd0ea77af3..efd06fe690 100644 --- a/marketplace-solver/src/state.rs +++ b/marketplace-solver/src/state.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use async_trait::async_trait; use committable::Committable; use espresso_types::{ - v0_3::{ + v0_99::{ BidTx, RollupRegistration, RollupRegistrationBody, RollupUpdate, RollupUpdatebody, SolverAuctionResults, }, @@ -308,7 +308,7 @@ struct RollupRegistrationResult { data: Vec, } -#[cfg(any(test, feature = "testing"))] +#[cfg(all(any(test, feature = "testing"), not(feature = "embedded-db")))] impl GlobalState { pub async fn mock() -> Self { let db = hotshot_query_service::data_source::sql::testing::TmpDb::init().await; @@ -340,7 +340,7 @@ impl GlobalState { } } -#[cfg(any(test, feature = "testing"))] +#[cfg(all(any(test, feature = "testing"), not(feature = "embedded-db")))] impl SolverState { pub fn mock() -> Self { Self { diff --git a/marketplace-solver/src/testing.rs b/marketplace-solver/src/testing.rs index 5d5ad1246a..b6745fa86f 100755 --- a/marketplace-solver/src/testing.rs +++ b/marketplace-solver/src/testing.rs @@ -1,4 +1,8 @@ -#![cfg(all(any(test, feature = "testing"), not(target_os = "windows")))] +#![cfg(all( + any(test, feature = "testing"), + not(target_os = "windows"), + not(feature = "embedded-db") +))] #![allow(dead_code)] use std::sync::Arc; @@ -116,12 +120,13 @@ impl MockSolver { } } -#[cfg(test)] +#[cfg(all(test, not(feature = "embedded-db")))] mod test { - use committable::Committable; use espresso_types::{ - v0_3::{BidTx, RollupRegistration, RollupRegistrationBody, RollupUpdate, RollupUpdatebody}, + v0_99::{ + BidTx, RollupRegistration, RollupRegistrationBody, RollupUpdate, RollupUpdatebody, + }, FeeAccount, MarketplaceVersion, SeqTypes, Update::{Set, Skip}, }; diff --git a/node-metrics/src/service/data_state/mod.rs b/node-metrics/src/service/data_state/mod.rs index a2c2f7ccba..e4c5052a40 100644 --- a/node-metrics/src/service/data_state/mod.rs +++ b/node-metrics/src/service/data_state/mod.rs @@ -569,7 +569,7 @@ mod tests { }; use async_lock::RwLock; use espresso_types::{ - v0_3::ChainConfig, BlockMerkleTree, FeeMerkleTree, Leaf, NodeState, ValidatedState, + v0_99::ChainConfig, BlockMerkleTree, FeeMerkleTree, Leaf, NodeState, ValidatedState, }; use futures::{channel::mpsc, SinkExt, StreamExt}; use hotshot_types::{signature_key::BLSPubKey, traits::signature_key::SignatureKey}; diff --git a/process-compose.yaml b/process-compose.yaml index 825c13aa5f..ba66f74176 100644 --- a/process-compose.yaml +++ b/process-compose.yaml @@ -171,7 +171,7 @@ processes: - ESPRESSO_SEQUENCER_API_PORT=$ESPRESSO_SEQUENCER1_API_PORT - ESPRESSO_SEQUENCER_LIBP2P_BIND_ADDRESS=0.0.0.0:$ESPRESSO_DEMO_SEQUENCER_LIBP2P_PORT_1 - ESPRESSO_SEQUENCER_LIBP2P_ADVERTISE_ADDRESS=localhost:$ESPRESSO_DEMO_SEQUENCER_LIBP2P_PORT_1 - - ESPRESSO_SEQUENCER_API_PEERS=http://localhost:$ESPRESSO_SEQUENCER_API_PORT + - ESPRESSO_SEQUENCER_API_PEERS=http://localhost:$ESPRESSO_SEQUENCER4_API_PORT - ESPRESSO_SEQUENCER_STATE_PEERS=http://localhost:$ESPRESSO_SEQUENCER2_API_PORT - ESPRESSO_SEQUENCER_POSTGRES_HOST=localhost - ESPRESSO_SEQUENCER_POSTGRES_PORT=$ESPRESSO_SEQUENCER1_DB_PORT @@ -315,10 +315,11 @@ processes: restart: exit_on_failure sequencer4: - command: sequencer -- http -- catchup -- status + command: sequencer-sqlite -- storage-sql -- http -- query -- catchup -- status environment: - ESPRESSO_SEQUENCER_API_PORT=$ESPRESSO_SEQUENCER4_API_PORT - ESPRESSO_SEQUENCER_STATE_PEERS=http://localhost:$ESPRESSO_SEQUENCER_API_PORT + - ESPRESSO_SEQUENCER_API_PEERS=http://localhost:$ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_STORAGE_PATH=$ESPRESSO_BASE_STORAGE_PATH/seq4 - ESPRESSO_SEQUENCER_PRIVATE_STAKING_KEY=$ESPRESSO_DEMO_SEQUENCER_STAKING_PRIVATE_KEY_4 - ESPRESSO_SEQUENCER_PRIVATE_STATE_KEY=$ESPRESSO_DEMO_SEQUENCER_STATE_PRIVATE_KEY_4 @@ -332,6 +333,7 @@ processes: - ESPRESSO_SEQUENCER_IDENTITY_LATITUDE=-25.2744 - ESPRESSO_SEQUENCER_IDENTITY_LONGITUDE=133.7751 - ESPRESSO_SEQUENCER_PUBLIC_API_URL=http://localhost:$ESPRESSO_SEQUENCER4_API_PORT/ + - ESPRESSO_SEQUENCER_IS_DA=true depends_on: orchestrator: condition: process_healthy diff --git a/scripts/build-docker-images-native b/scripts/build-docker-images-native index 345cc160bf..31f0222f24 100755 --- a/scripts/build-docker-images-native +++ b/scripts/build-docker-images-native @@ -92,7 +92,7 @@ mkdir -p ${WORKDIR}/data cp -rv data/genesis ${WORKDIR}/data/ mkdir -p "${WORKDIR}/target/$ARCH/release" - for binary in "orchestrator" "cdn-broker" "cdn-marshal" "cdn-whitelist" "sequencer" "submit-transactions" "reset-storage" "state-relay-server" "state-prover" "deploy" "keygen" "permissionless-builder" "nasty-client" "pub-key" "espresso-bridge" "espresso-dev-node" "marketplace-solver" "marketplace-builder" "dev-rollup" "utils"; do + for binary in "orchestrator" "cdn-broker" "cdn-marshal" "cdn-whitelist" "sequencer" "submit-transactions" "reset-storage" "state-relay-server" "state-prover" "deploy" "keygen" "permissionless-builder" "nasty-client" "pub-key" "espresso-bridge" "espresso-dev-node" "marketplace-solver" "marketplace-builder" "dev-rollup" "utils" "sequencer-sqlite"; do cp -v "${CARGO_TARGET_DIR}/release/$binary" "${WORKDIR}/target/$ARCH/release" # Patch the interpreter for running without nix inside the ubuntu based docker image. if [ $KERNEL == "linux" ]; then @@ -103,9 +103,9 @@ done mkdir -p ${WORKDIR}/docker/scripts cp -v docker/scripts/sequencer-awssecretsmanager.sh ${WORKDIR}/docker/scripts -# Copy the dev-node launch script +# Copy the dev-node and sequencer-entrypoint script mkdir -p ${WORKDIR}/scripts -cp -v scripts/launch-dev-node-with-postgres ${WORKDIR}/scripts +cp -v scripts/{launch-dev-node-with-postgres,sequencer-entrypoint} ${WORKDIR}/scripts export DOCKER_BUILDKIT=1 docker build --platform $PLATFORM -t ghcr.io/espressosystems/espresso-sequencer/orchestrator:main -f docker/orchestrator.Dockerfile ${WORKDIR} @@ -124,4 +124,4 @@ docker build --platform $PLATFORM -t ghcr.io/espressosystems/espresso-sequencer/ docker build --platform $PLATFORM -t ghcr.io/espressosystems/espresso-sequencer/marketplace-solver:main -f docker/marketplace-solver.Dockerfile ${WORKDIR} docker build --platform $PLATFORM -t ghcr.io/espressosystems/espresso-sequencer/marketplace-builder:main -f docker/marketplace-builder.Dockerfile ${WORKDIR} docker build --platform $PLATFORM -t ghcr.io/espressosystems/espresso-sequencer/node-validator:main -f docker/node-validator.Dockerfile ${WORKDIR} -docker build --platform $PLATFORM -t ghcr.io/espressosystems/espresso-sequencer/dev-rollup:main -f docker/dev-rollup.Dockerfile ${WORKDIR} +docker build --platform $PLATFORM -t ghcr.io/espressosystems/espresso-sequencer/dev-rollup:main -f docker/dev-rollup.Dockerfile ${WORKDIR} \ No newline at end of file diff --git a/scripts/build-docker-images-static b/scripts/build-docker-images-static index a6e7f0ebfc..af87a0a2b6 100755 --- a/scripts/build-docker-images-static +++ b/scripts/build-docker-images-static @@ -41,7 +41,7 @@ for ARCH in "amd64" "arm64"; do ;; esac mkdir -p ${WORKDIR}/target/$ARCH/release - for binary in "orchestrator" "cdn-broker" "cdn-marshal" "cdn-whitelist" "sequencer" "submit-transactions" "reset-storage" "state-relay-server" "state-prover" "deploy" "keygen" "permissionless-builder" "nasty-client" "pub-key" "espresso-bridge" "espresso-dev-node" "marketplace-solver" "marketplace-builder" "dev-rollup" "utils"; do + for binary in "orchestrator" "cdn-broker" "cdn-marshal" "cdn-whitelist" "sequencer" "submit-transactions" "reset-storage" "state-relay-server" "state-prover" "deploy" "keygen" "permissionless-builder" "nasty-client" "pub-key" "espresso-bridge" "espresso-dev-node" "marketplace-solver" "marketplace-builder" "dev-rollup" "utils" "sequencer-sqlite"; do cp -v "${CARGO_TARGET_DIR}/${TARGET}/release/$binary" ${WORKDIR}/target/$ARCH/release done done @@ -49,9 +49,9 @@ done mkdir -p ${WORKDIR}/docker/scripts cp -v docker/scripts/sequencer-awssecretsmanager.sh ${WORKDIR}/docker/scripts -# Copy the dev-node launch script +# Copy the dev-node and sequencer script mkdir -p ${WORKDIR}/scripts -cp -v scripts/launch-dev-node-with-postgres ${WORKDIR}/scripts +cp -v scripts/{launch-dev-node-with-postgres,sequencer-entrypoint} ${WORKDIR}/scripts export DOCKER_BUILDKIT=1 docker build -t ghcr.io/espressosystems/espresso-sequencer/orchestrator:main -f docker/orchestrator.Dockerfile ${WORKDIR} diff --git a/scripts/demo-native b/scripts/demo-native index 987baa598c..b4e07fc398 100755 --- a/scripts/demo-native +++ b/scripts/demo-native @@ -18,13 +18,19 @@ ESPRESSO_BASE_STORAGE_PATH=$(mktemp -d -t espresso-XXXXXXXX) export ESPRESSO_BASE_STORAGE_PATH echo "Using sequencer storage path: $ESPRESSO_BASE_STORAGE_PATH" -# If keeping the storage path, is desired for debugging, comment out the line -# below or set a custom storage path in process-compose.yaml. +# If keeping the storage path, to keep it around, run with env CI=true trap "exit" INT TERM trap cleanup EXIT cleanup(){ - echo "Cleaning up sequencer storage path: $ESPRESSO_BASE_STORAGE_PATH" - rm -rv "$ESPRESSO_BASE_STORAGE_PATH" + # Don't run cleanup if running in the CI. We may be running process-compose + # with --detach and the cleanup will remove the storage path while the + # services are still running. + if [ "$CI" = "true" ]; then + echo "Running in CI, not cleaning up $ESPRESSO_BASE_STORAGE_PATH" + else + echo "Cleaning up sequencer storage path: $ESPRESSO_BASE_STORAGE_PATH" + rm -rv "$ESPRESSO_BASE_STORAGE_PATH" + fi } process-compose "$@" diff --git a/scripts/sequencer-entrypoint b/scripts/sequencer-entrypoint new file mode 100755 index 0000000000..d602689e8a --- /dev/null +++ b/scripts/sequencer-entrypoint @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -eEu -o pipefail + +export ESPRESSO_SEQUENCER_EMBEDDED_DB=${ESPRESSO_SEQUENCER_EMBEDDED_DB:-false} + +# Trap SIGTERM and SIGINT signals and send them to the process group +trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT + +# Decide which binary to run based on the environment variable +if [ "$ESPRESSO_SEQUENCER_EMBEDDED_DB" = "true" ]; then + echo "Starting sequencer with sqlite..." + /bin/sequencer-sqlite -- storage-sql "$@" +else + echo "Starting sequencer with postgres..." + /bin/sequencer-postgres "$@" +fi diff --git a/sequencer-sqlite/Cargo.lock b/sequencer-sqlite/Cargo.lock new file mode 100644 index 0000000000..b4efc830fe --- /dev/null +++ b/sequencer-sqlite/Cargo.lock @@ -0,0 +1,11252 @@ +# 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 = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "aead" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" +dependencies = [ + "generic-array", +] + +[[package]] +name = "aes" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" +dependencies = [ + "aes-soft", + "aesni", + "cipher 0.2.5", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher 0.4.4", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da" +dependencies = [ + "aead", + "aes 0.6.0", + "cipher 0.2.5", + "ctr 0.6.0", + "ghash", + "subtle", +] + +[[package]] +name = "aes-soft" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" +dependencies = [ + "cipher 0.2.5", + "opaque-debug", +] + +[[package]] +name = "aesni" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" +dependencies = [ + "cipher 0.2.5", + "opaque-debug", +] + +[[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", + "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 = "allocator-api2" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" + +[[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 = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" + +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +dependencies = [ + "anstyle", + "windows-sys 0.59.0", +] + +[[package]] +name = "anyhow" +version = "1.0.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" + +[[package]] +name = "arbitrary" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" +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-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[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", + "ark-serialize", + "ark-std", +] + +[[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", + "ark-std", +] + +[[package]] +name = "ark-bw6-761" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e0605daf0cc5aa2034b78d008aaf159f56901d92a52ee4f6ecdfdac4f426700" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-ff", + "ark-std", +] + +[[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", + "ark-relations", + "ark-serialize", + "ark-snark", + "ark-std", + "blake2", + "derivative", + "digest 0.10.7", + "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", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "rayon", + "zeroize", +] + +[[package]] +name = "ark-ed-on-bls12-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b10d901b9ac4b38f9c32beacedfadcdd64e46f8d7f8e88c1ae1060022cf6f6c6" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ed-on-bls12-381" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6d678bb98a7e4f825bd4e332e93ac4f5a114ce2e3340dee4d7dc1c7ab5b323" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ed-on-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71892f265d01650e34988a546b37ea1d2ba1da162a639597a03d1550f26004d8" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rayon", + "rustc_version 0.4.1", + "zeroize", +] + +[[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.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "rayon", +] + +[[package]] +name = "ark-poly-commit" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a741492629ffcd228337676dc223a28551aa6792eedb8a2a22c767f00df6c89" +dependencies = [ + "ark-crypto-primitives", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-relations", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "rayon", +] + +[[package]] +name = "ark-relations" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" +dependencies = [ + "ark-ff", + "ark-std", + "tracing", + "tracing-subscriber 0.2.25", +] + +[[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", + "digest 0.10.7", + "num-bigint", +] + +[[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", + "ark-relations", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-srs" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6e9a7036d369a637b2b9f871bc06cefe52a947c98e898dbafab26548f8aa22" +dependencies = [ + "anyhow", + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-poly-commit", + "ark-serialize", + "ark-std", + "directories", + "hex-literal", + "rand 0.8.5", + "sha2 0.10.8", + "tracing", + "tracing-subscriber 0.3.18", + "ureq", +] + +[[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 = "arraydeque" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236" + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "ascii-canvas" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" +dependencies = [ + "term", +] + +[[package]] +name = "asn1-rs" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" +dependencies = [ + "asn1-rs-derive", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror 1.0.69", + "time 0.3.36", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", + "synstructure", +] + +[[package]] +name = "asn1-rs-impl" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "asn1_der" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "155a5a185e42c6b77ac7b88a15143d930a9e9727a5b7b77eed417404ab15c247" + +[[package]] +name = "async-attributes" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "async-broadcast" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" +dependencies = [ + "event-listener 5.3.1", + "event-listener-strategy", + "futures-core", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "async-dup" +version = "1.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c2886ab563af5038f79ec016dd7b87947ed138b794e8dd64992962c9cca0411" +dependencies = [ + "async-lock 3.4.0", + "futures-io", +] + +[[package]] +name = "async-executor" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand 2.2.0", + "futures-lite 2.5.0", + "slab", +] + +[[package]] +name = "async-global-executor" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" +dependencies = [ + "async-channel 2.3.1", + "async-executor", + "async-io 2.4.0", + "async-lock 3.4.0", + "blocking", + "futures-lite 2.5.0", + "once_cell", + "tokio", +] + +[[package]] +name = "async-h1" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d1d1dae8cb2c4258a79d6ed088b7fb9b4763bf4e9b22d040779761e046a2971" +dependencies = [ + "async-channel 1.9.0", + "async-dup", + "async-global-executor", + "async-io 1.13.0", + "futures-lite 1.13.0", + "http-types", + "httparse", + "log", + "pin-project", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2 0.4.10", + "waker-fn", +] + +[[package]] +name = "async-io" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" +dependencies = [ + "async-lock 3.4.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.5.0", + "parking", + "polling 3.7.4", + "rustix 0.38.41", + "slab", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener 5.3.1", + "event-listener-strategy", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "async-native-tls" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9e7a929bd34c68a82d58a4de7f86fffdaf97fb2af850162a7bb19dd7269b33" +dependencies = [ + "async-std", + "native-tls", + "thiserror 1.0.69", + "url", +] + +[[package]] +name = "async-once-cell" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288f83726785267c6f2ef073a3d83dc3f9b81464e9f99898240cced85fce35a" + +[[package]] +name = "async-process" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" +dependencies = [ + "async-channel 2.3.1", + "async-io 2.4.0", + "async-lock 3.4.0", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener 5.3.1", + "futures-lite 2.5.0", + "rustix 0.38.41", + "tracing", +] + +[[package]] +name = "async-signal" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" +dependencies = [ + "async-io 2.4.0", + "async-lock 3.4.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.41", + "signal-hook-registry", + "slab", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-sse" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53bba003996b8fd22245cd0c59b869ba764188ed435392cf2796d03b805ade10" +dependencies = [ + "async-channel 1.9.0", + "async-std", + "http-types", + "log", + "memchr", + "pin-project-lite 0.1.12", +] + +[[package]] +name = "async-std" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" +dependencies = [ + "async-attributes", + "async-channel 1.9.0", + "async-global-executor", + "async-io 2.4.0", + "async-lock 3.4.0", + "async-process", + "crossbeam-utils", + "futures-channel", + "futures-core", + "futures-io", + "futures-lite 2.5.0", + "gloo-timers 0.3.0", + "kv-log-macro", + "log", + "memchr", + "once_cell", + "pin-project-lite 0.2.15", + "pin-utils", + "slab", + "wasm-bindgen-futures", +] + +[[package]] +name = "async-stream" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-tls" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f23d769dbf1838d5df5156e7b1ad404f4c463d1ac2c6aeb6cd943630f8a8400" +dependencies = [ + "futures-core", + "futures-io", + "rustls 0.19.1", + "webpki", + "webpki-roots 0.21.1", +] + +[[package]] +name = "async-trait" +version = "0.1.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "async-tungstenite" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07b30ef0ea5c20caaa54baea49514a206308989c68be7ecd86c7f956e4da6378" +dependencies = [ + "async-native-tls", + "async-std", + "async-tls", + "futures-io", + "futures-util", + "log", + "pin-project-lite 0.2.15", + "tungstenite 0.13.0", +] + +[[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.1", +] + +[[package]] +name = "asynchronous-codec" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4057f2c32adbb2fc158e22fb38433c8e9bbf76b75a4732c7c0cbaf695fb65568" +dependencies = [ + "bytes 1.8.0", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "asynchronous-codec" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a860072022177f903e59730004fb5dc13db9275b79bb2aef7ba8ce831956c233" +dependencies = [ + "bytes 1.8.0", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "atomic_store" +version = "0.1.3" +source = "git+https://github.com/EspressoSystems/atomicstore.git?tag=0.1.4#64c092596e889b9f376fd4bae8974404c43cd12c" +dependencies = [ + "ark-serialize", + "bincode", + "regex", + "serde", + "snafu 0.7.5", + "tracing", +] + +[[package]] +name = "attohttpc" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d9a9bf8b79a749ee0b911b91b671cc2b6c670bdbc7e3dfd537576ddc94bb2a2" +dependencies = [ + "http 0.2.12", + "log", + "url", +] + +[[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.89", +] + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "automod" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edf3ee19dbc0a46d740f6f0926bde8c50f02bdbc7b536842da28f6ac56513a8b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "axum" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +dependencies = [ + "async-trait", + "axum-core", + "bitflags 1.3.2", + "bytes 1.8.0", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.31", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite 0.2.15", + "rustversion", + "serde", + "sync_wrapper 0.1.2", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes 1.8.0", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + +[[package]] +name = "backoff" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" +dependencies = [ + "getrandom 0.2.15", + "instant", + "rand 0.8.5", +] + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] + +[[package]] +name = "base-x" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" + +[[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 = "base64-bytes" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ce54e4e485fa0eed9c3aa5348162be09168f75bb5be7bc6587bcf2a65ee1386" +dependencies = [ + "base64 0.22.1", + "serde", +] + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bech32" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" + +[[package]] +name = "bimap" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "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" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "serde", + "tap", + "wyz", +] + +[[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 = "blake3" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d82033247fd8e890df8f740e407ad4d038debb9eb1f40533fffb32e7d17dc6f7" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq 0.3.1", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "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 = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel 2.3.1", + "async-task", + "futures-io", + "futures-lite 2.5.0", + "piper", +] + +[[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 = "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 = "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 = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" + +[[package]] +name = "bytes" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" +dependencies = [ + "serde", +] + +[[package]] +name = "bytesize" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc" + +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[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 = "camino" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +dependencies = [ + "serde", +] + +[[package]] +name = "capnp" +version = "0.19.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e985a566bdaae9a428a957d12b10c318d41b2afddb54cfbb764878059df636e" +dependencies = [ + "embedded-io", +] + +[[package]] +name = "capnp" +version = "0.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bce4e2d41c16cf9188f47ca4d59fdcdca1f33705af211bdb41f0afbd3442f8b5" +dependencies = [ + "embedded-io", +] + +[[package]] +name = "capnpc" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c75ba30e0f08582d53c2f3710cf4bb65ff562614b1ba86906d7391adffe189ec" +dependencies = [ + "capnp 0.19.8", +] + +[[package]] +name = "capnpc" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aa3d5f01e69ed11656d2c7c47bf34327ea9bfb5c85c7de787fcd7b6c5e45b61" +dependencies = [ + "capnp 0.20.3", +] + +[[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.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 1.0.69", +] + +[[package]] +name = "cbor4ii" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "472931dd4dfcc785075b09be910147f9c6258883fc4591d0dac6116392b2daa6" +dependencies = [ + "serde", +] + +[[package]] +name = "cc" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cdn-broker" +version = "0.4.0" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5#f6cc7c2fc53eaa52a4901e775d9be7ac820af72c" +dependencies = [ + "cdn-proto 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5)", + "clap", + "console-subscriber", + "dashmap", + "derivative", + "jf-signature 0.1.0", + "lazy_static", + "local-ip-address", + "parking_lot", + "portpicker", + "prometheus", + "rand 0.8.5", + "rkyv", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "cdn-broker" +version = "0.4.0" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.5.6#9409763dbcb726e43218c3c4cfde91c7d5de6a52" +dependencies = [ + "cdn-proto 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.5.6)", + "clap", + "console-subscriber", + "dashmap", + "derivative", + "jf-signature 0.2.0", + "lazy_static", + "local-ip-address", + "parking_lot", + "portpicker", + "prometheus", + "rand 0.8.5", + "rkyv", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "cdn-client" +version = "0.4.0" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.5.6#9409763dbcb726e43218c3c4cfde91c7d5de6a52" +dependencies = [ + "cdn-proto 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.5.6)", + "clap", + "derive_more 1.0.0", + "jf-signature 0.2.0", + "parking_lot", + "rand 0.8.5", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "cdn-marshal" +version = "0.4.0" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5#f6cc7c2fc53eaa52a4901e775d9be7ac820af72c" +dependencies = [ + "cdn-proto 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5)", + "clap", + "jf-signature 0.1.0", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "cdn-marshal" +version = "0.4.0" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.5.6#9409763dbcb726e43218c3c4cfde91c7d5de6a52" +dependencies = [ + "cdn-proto 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.5.6)", + "clap", + "jf-signature 0.2.0", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "cdn-proto" +version = "0.4.0" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5#f6cc7c2fc53eaa52a4901e775d9be7ac820af72c" +dependencies = [ + "anyhow", + "ark-serialize", + "async-trait", + "capnp 0.19.8", + "capnpc 0.19.0", + "derivative", + "jf-signature 0.1.0", + "kanal", + "lazy_static", + "mnemonic", + "num_enum", + "pem 3.0.4", + "prometheus", + "quinn", + "rand 0.8.5", + "rcgen 0.13.1", + "redis 0.25.4", + "rkyv", + "rustls 0.23.17", + "rustls-pki-types", + "sqlx", + "thiserror 1.0.69", + "tokio", + "tokio-rustls 0.26.0", + "tracing", + "url", + "warp", +] + +[[package]] +name = "cdn-proto" +version = "0.4.0" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.5.6#9409763dbcb726e43218c3c4cfde91c7d5de6a52" +dependencies = [ + "anyhow", + "ark-serialize", + "async-trait", + "capnp 0.20.3", + "capnpc 0.20.1", + "derivative", + "derive_more 1.0.0", + "jf-signature 0.2.0", + "kanal", + "lazy_static", + "mnemonic", + "num_enum", + "pem 3.0.4", + "prometheus", + "quinn", + "rand 0.8.5", + "rcgen 0.13.1", + "redis 0.27.5", + "rkyv", + "rustls 0.23.17", + "rustls-pki-types", + "sqlx", + "thiserror 1.0.69", + "tokio", + "tokio-rustls 0.26.0", + "tracing", + "url", + "warp", +] + +[[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.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[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 = "cipher" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" +dependencies = [ + "generic-array", +] + +[[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 = "clap" +version = "4.5.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "clap_lex" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" + +[[package]] +name = "cld" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "021080b0a3dbefcf1c1f0b3ad6a923b81f16801d874ec338c168ac0b0762baf5" + +[[package]] +name = "client" +version = "0.1.0" +dependencies = [ + "anyhow", + "contract-bindings", + "espresso-types", + "ethers", + "futures", + "jf-merkle-tree", + "sequencer-utils", + "surf-disco", + "tokio", + "tracing", + "vbs", +] + +[[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 1.0.69", +] + +[[package]] +name = "coins-bip39" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" +dependencies = [ + "bitvec", + "coins-bip32", + "hmac 0.12.1", + "once_cell", + "pbkdf2 0.12.2", + "rand 0.8.5", + "sha2 0.10.8", + "thiserror 1.0.69", +] + +[[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", + "thiserror 1.0.69", +] + +[[package]] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes 1.8.0", + "futures-core", + "memchr", + "pin-project-lite 0.2.15", + "tokio", + "tokio-util", +] + +[[package]] +name = "committable" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05a8809c2761232ce27226ef1ca1bc78b480b558406895848f76ab8fce04076c" +dependencies = [ + "arbitrary", + "ark-serialize", + "bitvec", + "derivative", + "derive_more 0.99.18", + "funty", + "hex", + "serde", + "sha3", + "tagged-base64", +] + +[[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 = "config" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68578f196d2a33ff61b27fae256c3164f65e36382648e30666dde05b8cc9dfdf" +dependencies = [ + "async-trait", + "convert_case 0.6.0", + "json5", + "nom", + "pathdiff", + "ron", + "rust-ini", + "serde", + "serde_json", + "toml", + "yaml-rust2", +] + +[[package]] +name = "console-api" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a257c22cd7e487dd4a13d413beabc512c5052f0bc048db0da6a84c3d8a6142fd" +dependencies = [ + "futures-core", + "prost", + "prost-types", + "tonic", + "tracing-core", +] + +[[package]] +name = "console-subscriber" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31c4cc54bae66f7d9188996404abdf7fdfa23034ef8e43478c8810828abad758" +dependencies = [ + "console-api", + "crossbeam-channel", + "crossbeam-utils", + "futures-task", + "hdrhistogram", + "humantime", + "prost", + "prost-types", + "serde", + "serde_json", + "thread_local", + "tokio", + "tokio-stream", + "tonic", + "tracing", + "tracing-core", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "const-hex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0121754e84117e65f9d90648ee6aa4882a6e63110307ab73967a4c5e7e69e586" +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-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "const_fn" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373e9fafaa20882876db20562275ff58d50e0caa2590077fe7ce7bef90211d0d" + +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "contract-bindings" +version = "0.1.0" +dependencies = [ + "ethers", + "serde", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "cookie" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951" +dependencies = [ + "aes-gcm", + "base64 0.13.1", + "hkdf 0.10.0", + "hmac 0.10.1", + "percent-encoding", + "rand 0.8.5", + "sha2 0.9.9", + "time 0.2.27", + "version_check", +] + +[[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.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" +dependencies = [ + "memchr", +] + +[[package]] +name = "cpufeatures" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" +dependencies = [ + "libc", +] + +[[package]] +name = "cpuid-bool" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" + +[[package]] +name = "crc" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-any" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a62ec9ff5f7965e4d7280bd5482acd20aadb50d632cf6c1d74493856b011fa73" + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[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 = "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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +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.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f" +dependencies = [ + "cipher 0.2.5", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher 0.4.4", +] + +[[package]] +name = "curl" +version = "0.4.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9fb4d13a1be2b58f14d60adba57c9834b78c62fd86c3e76a148f732686e9265" +dependencies = [ + "curl-sys", + "libc", + "openssl-probe", + "openssl-sys", + "schannel", + "socket2 0.5.7", + "windows-sys 0.52.0", +] + +[[package]] +name = "curl-sys" +version = "0.4.78+curl-8.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eec768341c5c7789611ae51cf6c459099f22e64a5d5d0ce4892434e33821eaf" +dependencies = [ + "cc", + "libc", + "libnghttp2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", + "windows-sys 0.52.0", +] + +[[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", + "digest 0.10.7", + "fiat-crypto", + "rustc_version 0.4.1", + "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.89", +] + +[[package]] +name = "custom_debug" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14e715bf0e503e909c7076c052e39dd215202e8edeb32f1c194fd630c314d256" +dependencies = [ + "custom_debug_derive", +] + +[[package]] +name = "custom_debug_derive" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f731440b39c73910e253cb465ec1fac97732b3c7af215639881ec0c2a38f4f69" +dependencies = [ + "darling", + "itertools 0.12.1", + "proc-macro2", + "quote", + "syn 2.0.89", + "synstructure", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[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", + "syn 2.0.89", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +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 = "data-encoding-macro" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1559b6cba622276d6d63706db152618eeb15b89b3e4041446b05876e352e639" +dependencies = [ + "data-encoding", + "data-encoding-macro-internal", +] + +[[package]] +name = "data-encoding-macro-internal" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "332d754c0af53bc87c108fed664d121ecf59207ec4196041f04d6ab9002ad33f" +dependencies = [ + "data-encoding", + "syn 1.0.109", +] + +[[package]] +name = "delegate" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc2323e10c92e1cf4d86e11538512e6dc03ceb586842970b6332af3d4046a046" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[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 = "der-parser" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" +dependencies = [ + "asn1-rs", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[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.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "derive_builder" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "derive_builder_macro" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" +dependencies = [ + "derive_builder_core", + "syn 2.0.89", +] + +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "convert_case 0.4.0", + "proc-macro2", + "quote", + "rustc_version 0.4.1", + "syn 2.0.89", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "convert_case 0.6.0", + "proc-macro2", + "quote", + "syn 2.0.89", + "unicode-xid", +] + +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + +[[package]] +name = "diff-test-bn254" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/solidity-bn254.git#050a98a3b389862c50d0bbbea620d8dc278c275a" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-std", + "clap", + "ethers", +] + +[[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 = "directories" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[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" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[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", +] + +[[package]] +name = "discard" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "dlv-list" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f" +dependencies = [ + "const-random", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "dtoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" + +[[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", + "spki", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core 0.6.4", + "serde", + "sha2 0.10.8", + "subtle", + "zeroize", +] + +[[package]] +name = "edit-distance" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3f497e87b038c09a155dfd169faa5ec940d0644635555ef6bd464ac20e97397" + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +dependencies = [ + "serde", +] + +[[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", + "generic-array", + "group", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + +[[package]] +name = "ena" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" +dependencies = [ + "log", +] + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +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 1.8.0", + "hex", + "k256", + "log", + "rand 0.8.5", + "rlp", + "serde", + "sha3", + "zeroize", +] + +[[package]] +name = "enum-as-inner" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[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.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" +dependencies = [ + "serde", + "typeid", +] + +[[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 = "espresso-systems-common" +version = "0.4.0" +source = "git+https://github.com/espressosystems/espresso-systems-common?tag=0.4.0#5abd890f79014a86db31286e1f3a529f161e69de" + +[[package]] +name = "espresso-types" +version = "0.1.0" +dependencies = [ + "anyhow", + "ark-serialize", + "async-broadcast", + "async-trait", + "base64-bytes", + "bincode", + "blake3", + "bytesize", + "clap", + "cld", + "committable", + "contract-bindings", + "derive_more 1.0.0", + "dyn-clone", + "ethers", + "fluent-asserter", + "futures", + "hotshot", + "hotshot-orchestrator", + "hotshot-query-service", + "hotshot-types", + "itertools 0.12.1", + "jf-merkle-tree", + "jf-utils", + "jf-vid", + "lru 0.12.5", + "num-traits", + "paste", + "pretty_assertions", + "rand 0.8.5", + "sequencer-utils", + "serde", + "serde_json", + "sha2 0.10.8", + "static_assertions", + "surf-disco", + "tagged-base64", + "thiserror 1.0.69", + "tide-disco", + "time 0.3.36", + "tokio", + "tracing", + "url", + "vbs", +] + +[[package]] +name = "etcetera" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +dependencies = [ + "cfg-if", + "home", + "windows-sys 0.48.0", +] + +[[package]] +name = "eth-keystore" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" +dependencies = [ + "aes 0.8.4", + "ctr 0.9.2", + "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", + "thiserror 1.0.69", + "uuid 0.8.2", +] + +[[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", + "thiserror 1.0.69", + "uint", +] + +[[package]] +name = "ethbloom" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" +dependencies = [ + "crunchy", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "scale-info", + "tiny-keccak", +] + +[[package]] +name = "ethereum-types" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" +dependencies = [ + "ethbloom", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "primitive-types", + "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-etherscan", + "ethers-middleware", + "ethers-providers", + "ethers-signers", + "ethers-solc", +] + +[[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 1.0.69", +] + +[[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", + "ethers-etherscan", + "eyre", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "reqwest 0.11.27", + "serde", + "serde_json", + "syn 2.0.89", + "toml", + "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.89", +] + +[[package]] +name = "ethers-core" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" +dependencies = [ + "arrayvec", + "bytes 1.8.0", + "cargo_metadata", + "chrono", + "const-hex", + "elliptic-curve", + "ethabi", + "generic-array", + "k256", + "num_enum", + "once_cell", + "open-fastrlp", + "rand 0.8.5", + "rlp", + "serde", + "serde_json", + "strum", + "syn 2.0.89", + "tempfile", + "thiserror 1.0.69", + "tiny-keccak", + "unicode-xid", +] + +[[package]] +name = "ethers-etherscan" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79e5973c26d4baf0ce55520bd732314328cabe53193286671b47144145b9649" +dependencies = [ + "chrono", + "ethers-core", + "ethers-solc", + "reqwest 0.11.27", + "semver 1.0.23", + "serde", + "serde_json", + "thiserror 1.0.69", + "tracing", +] + +[[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-etherscan", + "ethers-providers", + "ethers-signers", + "futures-channel", + "futures-locks", + "futures-util", + "instant", + "reqwest 0.11.27", + "serde", + "serde_json", + "thiserror 1.0.69", + "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 1.8.0", + "const-hex", + "enr", + "ethers-core", + "futures-channel", + "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 1.0.69", + "tokio", + "tokio-tungstenite", + "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 1.0.69", + "tracing", +] + +[[package]] +name = "ethers-solc" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66244a771d9163282646dbeffe0e6eca4dda4146b6498644e678ac6089b11edd" +dependencies = [ + "cfg-if", + "const-hex", + "dirs", + "dunce", + "ethers-core", + "glob", + "home", + "md-5", + "num_cpus", + "once_cell", + "path-slash", + "rayon", + "regex", + "semver 1.0.23", + "serde", + "serde_json", + "solang-parser", + "svm-rs", + "thiserror 1.0.69", + "tiny-keccak", + "tokio", + "tracing", + "walkdir", + "yansi 0.5.1", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "5.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +dependencies = [ + "event-listener 5.3.1", + "pin-project-lite 0.2.15", +] + +[[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 = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[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.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fluent-asserter" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62cd2a1243f15c8c9d37acc8ab4ba837e50823561cb124af8406a6f676d04341" +dependencies = [ + "lazy_static", + "num", +] + +[[package]] +name = "flume" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bebadab126f8120d410b677ed95eee4ba6eb7c6dd8e34a5ec88a08050e26132" +dependencies = [ + "futures-core", + "futures-sink", + "spinning_top", +] + +[[package]] +name = "flume" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +dependencies = [ + "futures-core", + "futures-sink", + "spin 0.9.8", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" + +[[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 = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi", +] + +[[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.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-bounded" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91f328e7fb845fc832912fb6a34f40cf6d1888c92f974d1893a54e97b5ff542e" +dependencies = [ + "futures-timer", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] + +[[package]] +name = "futures-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite 0.2.15", + "waker-fn", +] + +[[package]] +name = "futures-lite" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" +dependencies = [ + "fastrand 2.2.0", + "futures-core", + "futures-io", + "parking", + "pin-project-lite 0.2.15", +] + +[[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.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "futures-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" +dependencies = [ + "futures-io", + "rustls 0.23.17", + "rustls-pki-types", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-ticker" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9763058047f713632a52e916cc7f6a4b3fc6e9fc1ff8c5b1dc49e5a89041682e" +dependencies = [ + "futures", + "futures-timer", + "instant", +] + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +dependencies = [ + "gloo-timers 0.2.6", + "send_wrapper 0.4.0", +] + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite 0.2.15", + "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 = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "serde", + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "ghash" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375" +dependencies = [ + "opaque-debug", + "polyval", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[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 = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes 1.8.0", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.6.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +dependencies = [ + "atomic-waker", + "bytes 1.8.0", + "fnv", + "futures-core", + "futures-sink", + "http 1.1.0", + "indexmap 2.6.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[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", +] + +[[package]] +name = "hashbrown" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "hashers" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2bca93b15ea5a746f220e56587f71e73c6165eab783df9e26590069953e3c30" +dependencies = [ + "fxhash", +] + +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "hashlink" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "hdrhistogram" +version = "7.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" +dependencies = [ + "base64 0.21.7", + "byteorder", + "flate2", + "nom", + "num-traits", +] + +[[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 1.8.0", + "headers-core", + "http 0.2.12", + "httpdate", + "mime", + "sha1 0.10.6", +] + +[[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.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.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + +[[package]] +name = "hex_fmt" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f" + +[[package]] +name = "hickory-proto" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07698b8420e2f0d6447a436ba999ec85d8fbf2a398bbd737b82cac4a2e96e512" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna 0.4.0", + "ipnet", + "once_cell", + "rand 0.8.5", + "socket2 0.5.7", + "thiserror 1.0.69", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "hickory-resolver" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28757f23aa75c98f254cf0405e6d8c25b831b32921b050a66692427679b1f243" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto", + "ipconfig", + "lru-cache", + "once_cell", + "parking_lot", + "rand 0.8.5", + "resolv-conf", + "smallvec", + "thiserror 1.0.69", + "tokio", + "tracing", +] + +[[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", +] + +[[package]] +name = "hotshot" +version = "0.5.79" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +dependencies = [ + "anyhow", + "async-broadcast", + "async-lock 3.4.0", + "async-trait", + "bimap", + "bincode", + "blake3", + "cdn-broker 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.5.6)", + "cdn-client", + "cdn-marshal 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.5.6)", + "chrono", + "committable", + "dashmap", + "derive_more 1.0.0", + "either", + "futures", + "hotshot-task", + "hotshot-task-impls", + "hotshot-types", + "libp2p-identity", + "libp2p-networking", + "lru 0.12.5", + "num_enum", + "parking_lot", + "portpicker", + "primitive-types", + "rand 0.8.5", + "serde", + "sha2 0.10.8", + "time 0.3.36", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", + "url", + "utils", + "vbs", +] + +[[package]] +name = "hotshot-builder-api" +version = "0.1.7" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +dependencies = [ + "async-trait", + "clap", + "committable", + "derive_more 1.0.0", + "futures", + "hotshot-types", + "serde", + "tagged-base64", + "thiserror 2.0.3", + "tide-disco", + "toml", + "vbs", +] + +[[package]] +name = "hotshot-contract-adapter" +version = "0.1.0" +dependencies = [ + "anyhow", + "ark-bn254", + "ark-ec", + "ark-ed-on-bn254", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "contract-bindings", + "diff-test-bn254", + "ethers", + "hotshot-types", + "jf-pcs", + "jf-plonk", + "jf-utils", + "libp2p", + "num-bigint", + "num-traits", +] + +[[package]] +name = "hotshot-events-service" +version = "0.1.50" +source = "git+https://github.com/EspressoSystems/hotshot-events-service.git?branch=hotshot/0.5.82#77f0b5f672adc4b8c7849bbc6bf5f68034113ed9" +dependencies = [ + "async-broadcast", + "async-lock 2.8.0", + "async-trait", + "clap", + "derivative", + "derive_more 0.99.18", + "either", + "futures", + "hotshot-types", + "libp2p-identity", + "rand 0.8.5", + "serde", + "snafu 0.8.5", + "tagged-base64", + "tide-disco", + "tokio", + "toml", + "tracing", + "tracing-test", + "vbs", +] + +[[package]] +name = "hotshot-example-types" +version = "0.5.79" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +dependencies = [ + "anyhow", + "async-lock 3.4.0", + "async-trait", + "committable", + "hotshot", + "hotshot-task-impls", + "hotshot-types", + "jf-vid", + "rand 0.8.5", + "reqwest 0.12.9", + "serde", + "sha2 0.10.8", + "sha3", + "thiserror 2.0.3", + "time 0.3.36", + "tokio", + "url", + "vbs", +] + +[[package]] +name = "hotshot-fakeapi" +version = "0.5.79" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +dependencies = [ + "anyhow", + "async-lock 3.4.0", + "async-trait", + "futures", + "hotshot-example-types", + "hotshot-types", + "rand 0.8.5", + "tide-disco", + "tokio", + "toml", + "vbs", +] + +[[package]] +name = "hotshot-macros" +version = "0.5.79" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +dependencies = [ + "derive_builder", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "hotshot-orchestrator" +version = "0.5.79" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +dependencies = [ + "anyhow", + "async-lock 3.4.0", + "blake3", + "clap", + "csv", + "futures", + "hotshot-types", + "libp2p-identity", + "multiaddr", + "serde", + "surf-disco", + "tide-disco", + "tokio", + "toml", + "tracing", + "vbs", +] + +[[package]] +name = "hotshot-query-service" +version = "0.1.63" +source = "git+https://github.com/EspressoSystems/hotshot-query-service?branch=hotshot/0.5.82#1dcab3752f5b894080528b5ac5cd9a0c676e8068" +dependencies = [ + "anyhow", + "ark-serialize", + "async-lock 3.4.0", + "async-trait", + "atomic_store", + "backoff", + "bincode", + "chrono", + "committable", + "custom_debug", + "derivative", + "derive_more 0.99.18", + "either", + "futures", + "hotshot", + "hotshot-testing", + "hotshot-types", + "include_dir", + "itertools 0.12.1", + "jf-merkle-tree", + "jf-vid", + "log", + "prometheus", + "refinery", + "refinery-core", + "serde", + "serde_json", + "snafu 0.8.5", + "sqlx", + "surf-disco", + "tagged-base64", + "tide-disco", + "time 0.3.36", + "tokio", + "toml", + "tracing", + "tracing-subscriber 0.3.18", + "trait-variant", + "typenum", + "url", + "vbs", + "vec1", +] + +[[package]] +name = "hotshot-stake-table" +version = "0.5.79" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +dependencies = [ + "ark-bn254", + "ark-ed-on-bn254", + "ark-ff", + "ark-serialize", + "ark-std", + "digest 0.10.7", + "hotshot-types", + "jf-crhf", + "jf-rescue", + "jf-signature 0.2.0", + "jf-utils", + "primitive-types", + "serde", + "tagged-base64", +] + +[[package]] +name = "hotshot-state-prover" +version = "0.1.0" +dependencies = [ + "anyhow", + "ark-bn254", + "ark-ec", + "ark-ed-on-bn254", + "ark-ff", + "ark-srs", + "ark-std", + "clap", + "contract-bindings", + "displaydoc", + "espresso-types", + "ethers", + "futures", + "hotshot-contract-adapter", + "hotshot-stake-table", + "hotshot-types", + "itertools 0.12.1", + "jf-crhf", + "jf-pcs", + "jf-plonk", + "jf-relation", + "jf-rescue", + "jf-signature 0.2.0", + "jf-utils", + "reqwest 0.12.9", + "sequencer-utils", + "serde", + "surf-disco", + "tide-disco", + "time 0.3.36", + "tokio", + "toml", + "tracing", + "url", + "vbs", +] + +[[package]] +name = "hotshot-task" +version = "0.5.79" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +dependencies = [ + "async-broadcast", + "async-trait", + "futures", + "tokio", + "tracing", + "utils", +] + +[[package]] +name = "hotshot-task-impls" +version = "0.5.79" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +dependencies = [ + "anyhow", + "async-broadcast", + "async-lock 3.4.0", + "async-trait", + "bincode", + "chrono", + "committable", + "either", + "futures", + "hotshot-builder-api", + "hotshot-task", + "hotshot-types", + "jf-vid", + "lru 0.12.5", + "rand 0.8.5", + "serde", + "sha2 0.10.8", + "surf-disco", + "tagged-base64", + "thiserror 2.0.3", + "time 0.3.36", + "tokio", + "tracing", + "url", + "utils", + "vbs", + "vec1", +] + +[[package]] +name = "hotshot-testing" +version = "0.5.79" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +dependencies = [ + "anyhow", + "async-broadcast", + "async-lock 3.4.0", + "async-trait", + "automod", + "bitvec", + "committable", + "either", + "futures", + "hotshot", + "hotshot-builder-api", + "hotshot-example-types", + "hotshot-fakeapi", + "hotshot-macros", + "hotshot-task", + "hotshot-task-impls", + "hotshot-types", + "itertools 0.13.0", + "jf-vid", + "lru 0.12.5", + "portpicker", + "primitive-types", + "rand 0.8.5", + "reqwest 0.12.9", + "serde", + "sha2 0.10.8", + "tagged-base64", + "thiserror 2.0.3", + "tide-disco", + "tokio", + "tracing", + "url", + "vbs", + "vec1", +] + +[[package]] +name = "hotshot-types" +version = "0.1.11" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +dependencies = [ + "anyhow", + "ark-bn254", + "ark-ed-on-bn254", + "ark-ff", + "ark-serialize", + "ark-srs", + "ark-std", + "async-lock 3.4.0", + "async-trait", + "bincode", + "bitvec", + "blake3", + "clap", + "committable", + "derive_more 1.0.0", + "digest 0.10.7", + "displaydoc", + "dyn-clone", + "either", + "futures", + "jf-pcs", + "jf-signature 0.2.0", + "jf-utils", + "jf-vid", + "lazy_static", + "libp2p-identity", + "memoize", + "mnemonic", + "multiaddr", + "primitive-types", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde-inline-default", + "serde_bytes", + "serde_json", + "sha2 0.10.8", + "tagged-base64", + "thiserror 2.0.3", + "time 0.3.36", + "tokio", + "toml", + "tracing", + "typenum", + "url", + "utils", + "vbs", + "vec1", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes 1.8.0", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes 1.8.0", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes 1.8.0", + "http 0.2.12", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes 1.8.0", + "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 1.8.0", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "http-client" +version = "6.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1947510dc91e2bf586ea5ffb412caad7673264e14bb39fb9078da114a94ce1a5" +dependencies = [ + "async-std", + "async-trait", + "cfg-if", + "http-types", + "isahc", + "log", +] + +[[package]] +name = "http-types" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad" +dependencies = [ + "anyhow", + "async-channel 1.9.0", + "async-std", + "base64 0.13.1", + "cookie", + "futures-lite 1.13.0", + "infer", + "pin-project-lite 0.2.15", + "rand 0.7.3", + "serde", + "serde_json", + "serde_qs", + "serde_urlencoded", + "url", +] + +[[package]] +name = "httparse" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" +dependencies = [ + "bytes 1.8.0", + "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 0.2.15", + "socket2 0.5.7", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97818827ef4f364230e16705d4706e2897df2bb60617d6ca15d598025a3c481f" +dependencies = [ + "bytes 1.8.0", + "futures-channel", + "futures-util", + "h2 0.4.7", + "http 1.1.0", + "http-body 1.0.1", + "httparse", + "itoa", + "pin-project-lite 0.2.15", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.31", + "rustls 0.21.12", + "tokio", + "tokio-rustls 0.24.1", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +dependencies = [ + "futures-util", + "http 1.1.0", + "hyper 1.5.1", + "hyper-util", + "rustls 0.23.17", + "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.31", + "pin-project-lite 0.2.15", + "tokio", + "tokio-io-timeout", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes 1.8.0", + "http-body-util", + "hyper 1.5.1", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes 1.8.0", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "hyper 1.5.1", + "pin-project-lite 0.2.15", + "socket2 0.5.7", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core 0.52.0", +] + +[[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 = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[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.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "if-addrs" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cabb0019d51a643781ff15c9c8a3e5dedc365c47211270f4e8f82812fedd8f0a" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "if-watch" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf9d64cfcf380606e64f9a0bcf493616b65331199f984151a6fa11a7b3cde38" +dependencies = [ + "async-io 2.4.0", + "core-foundation", + "fnv", + "futures", + "if-addrs", + "ipnet", + "log", + "netlink-packet-core", + "netlink-packet-route", + "netlink-proto", + "netlink-sys", + "rtnetlink", + "system-configuration 0.6.1", + "tokio", + "windows", +] + +[[package]] +name = "igd-next" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "064d90fec10d541084e7b39ead8875a5a80d9114a2b18791565253bae25f49e4" +dependencies = [ + "async-trait", + "attohttpc", + "bytes 1.8.0", + "futures", + "http 0.2.12", + "hyper 0.14.31", + "log", + "rand 0.8.5", + "tokio", + "url", + "xmltree", +] + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + +[[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.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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "include_dir" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" +dependencies = [ + "include_dir_macros", +] + +[[package]] +name = "include_dir_macros" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" +dependencies = [ + "proc-macro2", + "quote", +] + +[[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.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +dependencies = [ + "equivalent", + "hashbrown 0.15.1", + "serde", +] + +[[package]] +name = "infer" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac" + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + +[[package]] +name = "input_buffer" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f97967975f448f1a7ddb12b0bc41069d09ed6a1c161a92687e057325db35d413" +dependencies = [ + "bytes 1.8.0", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[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 = "ipconfig" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +dependencies = [ + "socket2 0.5.7", + "widestring", + "windows-sys 0.48.0", + "winreg", +] + +[[package]] +name = "ipnet" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "isahc" +version = "0.9.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2948a0ce43e2c2ef11d7edf6816508998d99e13badd1150be0914205df9388a" +dependencies = [ + "bytes 0.5.6", + "crossbeam-utils", + "curl", + "curl-sys", + "flume 0.9.2", + "futures-lite 1.13.0", + "http 0.2.12", + "log", + "once_cell", + "slab", + "sluice", + "tracing", + "tracing-futures", + "url", + "waker-fn", +] + +[[package]] +name = "itertools" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +dependencies = [ + "either", +] + +[[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.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +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 = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "540654e97a3f4470a492cd30ff187bc95d89557a903a2bbf112e2fae98104ef2" + +[[package]] +name = "jf-commitment" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-std", +] + +[[package]] +name = "jf-crhf" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-serialize", + "ark-std", +] + +[[package]] +name = "jf-merkle-tree" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-bls12-377", + "ark-bls12-381", + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "displaydoc", + "hashbrown 0.14.5", + "itertools 0.12.1", + "jf-relation", + "jf-rescue", + "jf-utils", + "num-bigint", + "num-traits", + "serde", + "sha3", + "tagged-base64", +] + +[[package]] +name = "jf-pcs" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "displaydoc", + "itertools 0.12.1", + "jf-utils", + "merlin", + "rayon", +] + +[[package]] +name = "jf-plonk" +version = "0.5.1" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=jf-plonk-v0.5.1#7e2eeef8c06a12f17015d457f1b3ea80b0de3333" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "displaydoc", + "downcast-rs", + "dyn-clone", + "espresso-systems-common", + "hashbrown 0.14.5", + "itertools 0.12.1", + "jf-crhf", + "jf-pcs", + "jf-relation", + "jf-rescue", + "jf-utils", + "merlin", + "num-bigint", + "rand_chacha 0.3.1", + "rayon", + "serde", + "sha3", + "tagged-base64", +] + +[[package]] +name = "jf-prf" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-serialize", + "ark-std", +] + +[[package]] +name = "jf-relation" +version = "0.4.4" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-bls12-377", + "ark-bls12-381", + "ark-bn254", + "ark-bw6-761", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "displaydoc", + "downcast-rs", + "dyn-clone", + "hashbrown 0.14.5", + "itertools 0.12.1", + "jf-utils", + "num-bigint", + "rand_chacha 0.3.1", + "rayon", +] + +[[package]] +name = "jf-rescue" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-bls12-377", + "ark-bls12-381", + "ark-bn254", + "ark-bw6-761", + "ark-crypto-primitives", + "ark-ed-on-bls12-377", + "ark-ed-on-bls12-381", + "ark-ed-on-bn254", + "ark-ff", + "ark-std", + "displaydoc", + "itertools 0.12.1", + "jf-commitment", + "jf-crhf", + "jf-prf", + "jf-relation", + "jf-utils", +] + +[[package]] +name = "jf-signature" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-bls12-381", + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "blst", + "derivative", + "digest 0.10.7", + "displaydoc", + "hashbrown 0.14.5", + "itertools 0.12.1", + "jf-crhf", + "jf-relation", + "jf-rescue", + "jf-utils", + "num-bigint", + "num-traits", + "serde", + "sha3", + "tagged-base64", + "zeroize", +] + +[[package]] +name = "jf-signature" +version = "0.2.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=jf-signature-v0.2.0#ca160ce3452b560cad512b750a742a87c48c5881" +dependencies = [ + "ark-bls12-381", + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "blst", + "derivative", + "digest 0.10.7", + "displaydoc", + "hashbrown 0.14.5", + "itertools 0.12.1", + "jf-crhf", + "jf-relation", + "jf-rescue", + "jf-utils", + "num-bigint", + "num-traits", + "serde", + "sha3", + "tagged-base64", + "zeroize", +] + +[[package]] +name = "jf-utils" +version = "0.4.4" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-ec", + "ark-ed-on-bls12-377", + "ark-ed-on-bls12-381", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "digest 0.10.7", + "displaydoc", + "rand_chacha 0.3.1", + "rayon", + "serde", + "sha2 0.10.8", + "tagged-base64", +] + +[[package]] +name = "jf-vid" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "anyhow", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "displaydoc", + "generic-array", + "itertools 0.12.1", + "jf-merkle-tree", + "jf-pcs", + "jf-utils", + "rayon", + "serde", + "tagged-base64", +] + +[[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.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "json5" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" +dependencies = [ + "pest", + "pest_derive", + "serde", +] + +[[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 1.1.1", + "ring 0.16.20", + "serde", + "serde_json", + "simple_asn1", +] + +[[package]] +name = "k256" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2 0.10.8", + "signature", +] + +[[package]] +name = "kanal" +version = "0.1.0-pre8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05d55519627edaf7fd0f29981f6dc03fb52df3f5b257130eb8d0bf2801ea1d7" +dependencies = [ + "futures-core", + "lock_api", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + +[[package]] +name = "lalrpop" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" +dependencies = [ + "ascii-canvas", + "bit-set", + "ena", + "itertools 0.11.0", + "lalrpop-util", + "petgraph", + "regex", + "regex-syntax 0.8.5", + "string_cache", + "term", + "tiny-keccak", + "unicode-xid", + "walkdir", +] + +[[package]] +name = "lalrpop-util" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" +dependencies = [ + "regex-automata 0.4.9", +] + +[[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 = "libc" +version = "0.2.164" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f" + +[[package]] +name = "libm" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" + +[[package]] +name = "libnghttp2-sys" +version = "0.1.10+1.61.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "959c25552127d2e1fa72f0e52548ec04fc386e827ba71a7bd01db46a447dc135" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "libp2p" +version = "0.53.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "681fb3f183edfbedd7a57d32ebe5dcdc0b9f94061185acf3c30249349cc6fc99" +dependencies = [ + "bytes 1.8.0", + "either", + "futures", + "futures-timer", + "getrandom 0.2.15", + "instant", + "libp2p-allow-block-list", + "libp2p-autonat", + "libp2p-connection-limits", + "libp2p-core", + "libp2p-dns", + "libp2p-gossipsub", + "libp2p-identify", + "libp2p-identity", + "libp2p-kad", + "libp2p-mdns", + "libp2p-metrics", + "libp2p-quic", + "libp2p-request-response", + "libp2p-swarm", + "libp2p-tcp", + "libp2p-upnp", + "multiaddr", + "pin-project", + "rw-stream-sink", + "thiserror 1.0.69", +] + +[[package]] +name = "libp2p-allow-block-list" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "107b238b794cb83ab53b74ad5dcf7cca3200899b72fe662840cfb52f5b0a32e6" +dependencies = [ + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", +] + +[[package]] +name = "libp2p-autonat" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d95151726170e41b591735bf95c42b888fe4aa14f65216a9fbf0edcc04510586" +dependencies = [ + "async-trait", + "asynchronous-codec 0.6.2", + "futures", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-request-response", + "libp2p-swarm", + "quick-protobuf", + "quick-protobuf-codec 0.2.0", + "rand 0.8.5", + "tracing", +] + +[[package]] +name = "libp2p-connection-limits" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7cd50a78ccfada14de94cbacd3ce4b0138157f376870f13d3a8422cd075b4fd" +dependencies = [ + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", +] + +[[package]] +name = "libp2p-core" +version = "0.41.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5a8920cbd8540059a01950c1e5c96ea8d89eb50c51cd366fc18bdf540a6e48f" +dependencies = [ + "either", + "fnv", + "futures", + "futures-timer", + "libp2p-identity", + "multiaddr", + "multihash", + "multistream-select", + "once_cell", + "parking_lot", + "pin-project", + "quick-protobuf", + "rand 0.8.5", + "rw-stream-sink", + "serde", + "smallvec", + "thiserror 1.0.69", + "tracing", + "unsigned-varint 0.8.0", + "void", + "web-time", +] + +[[package]] +name = "libp2p-dns" +version = "0.41.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d17cbcf7160ff35c3e8e560de4a068fe9d6cb777ea72840e48eb76ff9576c4b6" +dependencies = [ + "async-trait", + "futures", + "hickory-resolver", + "libp2p-core", + "libp2p-identity", + "parking_lot", + "smallvec", + "tracing", +] + +[[package]] +name = "libp2p-gossipsub" +version = "0.46.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d665144a616dadebdc5fff186b1233488cdcd8bfb1223218ff084b6d052c94f7" +dependencies = [ + "asynchronous-codec 0.7.0", + "base64 0.21.7", + "byteorder", + "bytes 1.8.0", + "either", + "fnv", + "futures", + "futures-ticker", + "getrandom 0.2.15", + "hex_fmt", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "prometheus-client", + "quick-protobuf", + "quick-protobuf-codec 0.3.1", + "rand 0.8.5", + "regex", + "serde", + "sha2 0.10.8", + "smallvec", + "tracing", + "void", +] + +[[package]] +name = "libp2p-identify" +version = "0.44.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5d635ebea5ca0c3c3e77d414ae9b67eccf2a822be06091b9c1a0d13029a1e2f" +dependencies = [ + "asynchronous-codec 0.7.0", + "either", + "futures", + "futures-bounded", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "lru 0.12.5", + "quick-protobuf", + "quick-protobuf-codec 0.3.1", + "smallvec", + "thiserror 1.0.69", + "tracing", + "void", +] + +[[package]] +name = "libp2p-identity" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "257b5621d159b32282eac446bed6670c39c7dc68a200a992d8f056afa0066f6d" +dependencies = [ + "asn1_der", + "bs58", + "ed25519-dalek", + "hkdf 0.12.4", + "libsecp256k1", + "multihash", + "quick-protobuf", + "rand 0.8.5", + "serde", + "sha2 0.10.8", + "thiserror 1.0.69", + "tracing", + "zeroize", +] + +[[package]] +name = "libp2p-kad" +version = "0.45.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc5767727d062c4eac74dd812c998f0e488008e82cce9c33b463d38423f9ad2" +dependencies = [ + "arrayvec", + "asynchronous-codec 0.7.0", + "bytes 1.8.0", + "either", + "fnv", + "futures", + "futures-bounded", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "quick-protobuf", + "quick-protobuf-codec 0.3.1", + "rand 0.8.5", + "serde", + "sha2 0.10.8", + "smallvec", + "thiserror 1.0.69", + "tracing", + "uint", + "void", +] + +[[package]] +name = "libp2p-mdns" +version = "0.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49007d9a339b3e1d7eeebc4d67c05dbf23d300b7d091193ec2d3f26802d7faf2" +dependencies = [ + "data-encoding", + "futures", + "hickory-proto", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "smallvec", + "socket2 0.5.7", + "tokio", + "tracing", + "void", +] + +[[package]] +name = "libp2p-metrics" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdac91ae4f291046a3b2660c039a2830c931f84df2ee227989af92f7692d3357" +dependencies = [ + "futures", + "instant", + "libp2p-core", + "libp2p-gossipsub", + "libp2p-identify", + "libp2p-identity", + "libp2p-kad", + "libp2p-swarm", + "pin-project", + "prometheus-client", +] + +[[package]] +name = "libp2p-networking" +version = "0.5.79" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "blake3", + "cbor4ii", + "delegate", + "derive_builder", + "derive_more 1.0.0", + "futures", + "hotshot-types", + "lazy_static", + "libp2p", + "libp2p-identity", + "libp2p-swarm-derive", + "pin-project", + "rand 0.8.5", + "serde", + "tokio", + "tracing", +] + +[[package]] +name = "libp2p-quic" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c67296ad4e092e23f92aea3d2bdb6f24eab79c0929ed816dfb460ea2f4567d2b" +dependencies = [ + "bytes 1.8.0", + "futures", + "futures-timer", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-tls", + "parking_lot", + "quinn", + "rand 0.8.5", + "ring 0.17.8", + "rustls 0.23.17", + "socket2 0.5.7", + "thiserror 1.0.69", + "tokio", + "tracing", +] + +[[package]] +name = "libp2p-request-response" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c314fe28368da5e3a262553fb0ad575c1c8934c461e10de10265551478163836" +dependencies = [ + "async-trait", + "cbor4ii", + "futures", + "futures-bounded", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "serde", + "smallvec", + "tracing", + "void", +] + +[[package]] +name = "libp2p-swarm" +version = "0.44.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80cae6cb75f89dbca53862f9ebe0b9f463aa7b302762fcfaafb9e51dcc9b0f7e" +dependencies = [ + "either", + "fnv", + "futures", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm-derive", + "lru 0.12.5", + "multistream-select", + "once_cell", + "rand 0.8.5", + "smallvec", + "tokio", + "tracing", + "void", +] + +[[package]] +name = "libp2p-swarm-derive" +version = "0.34.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5daceb9dd908417b6dfcfe8e94098bc4aac54500c282e78120b885dadc09b999" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "libp2p-tcp" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2460fc2748919adff99ecbc1aab296e4579e41f374fb164149bd2c9e529d4c" +dependencies = [ + "futures", + "futures-timer", + "if-watch", + "libc", + "libp2p-core", + "libp2p-identity", + "socket2 0.5.7", + "tokio", + "tracing", +] + +[[package]] +name = "libp2p-tls" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b7b831e55ce2aa6c354e6861a85fdd4dd0a2b97d5e276fabac0e4810a71776" +dependencies = [ + "futures", + "futures-rustls", + "libp2p-core", + "libp2p-identity", + "rcgen 0.11.3", + "ring 0.17.8", + "rustls 0.23.17", + "rustls-webpki 0.101.7", + "thiserror 1.0.69", + "x509-parser", + "yasna", +] + +[[package]] +name = "libp2p-upnp" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccf04b0e3ff3de52d07d5fd6c3b061d0e7f908ffc683c32d9638caedce86fc8" +dependencies = [ + "futures", + "futures-timer", + "igd-next", + "libp2p-core", + "libp2p-swarm", + "tokio", + "tracing", + "void", +] + +[[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 = "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 = "libsqlite3-sys" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libz-sys" +version = "1.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" +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.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "litemap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" + +[[package]] +name = "local-ip-address" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3669cf5561f8d27e8fc84cc15e58350e70f557d4d65f70e3154e54cd2f8e1782" +dependencies = [ + "libc", + "neli", + "thiserror 1.0.69", + "windows-sys 0.59.0", +] + +[[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 = [ + "value-bag", +] + +[[package]] +name = "log-panics" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f9dd8546191c1850ecf67d22f5ff00a935b890d0e84713159a55495cc2ac5f" +dependencies = [ + "backtrace", + "log", +] + +[[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 = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +dependencies = [ + "hashbrown 0.15.1", +] + +[[package]] +name = "lru-cache" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "markdown" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef3aab6a1d529b112695f72beec5ee80e729cb45af58663ec902c8fac764ecdd" +dependencies = [ + "lazy_static", + "pipeline", + "regex", +] + +[[package]] +name = "marketplace-solver" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-lock 3.4.0", + "async-trait", + "bincode", + "clap", + "cld", + "committable", + "espresso-types", + "futures", + "hotshot", + "hotshot-events-service", + "hotshot-types", + "jf-signature 0.2.0", + "rand 0.8.5", + "serde", + "serde_json", + "sqlx", + "surf-disco", + "thiserror 1.0.69", + "tide-disco", + "tokio", + "toml", + "tracing", + "vbs", +] + +[[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 = "maud" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df518b75016b4289cdddffa1b01f2122f4a49802c93191f3133f6dc2472ebcaa" +dependencies = [ + "itoa", + "maud_macros", + "tide", +] + +[[package]] +name = "maud_macros" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa453238ec218da0af6b11fc5978d3b5c3a45ed97b722391a2a11f3306274e18" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest 0.10.7", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memoize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5df4051db13d0816cf23196d3baa216385ae099339f5d0645a8d9ff2305e82b8" +dependencies = [ + "lazy_static", + "lru 0.7.8", + "memoize-inner", +] + +[[package]] +name = "memoize-inner" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27bdece7e91f0d1e33df7b46ec187a93ea0d4e642113a1039ac8bfdd4a3273ac" +dependencies = [ + "lazy_static", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +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 = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[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.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] + +[[package]] +name = "mnemonic" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b8f3a258db515d5e91a904ce4ae3f73e091149b90cadbdb93d210bee07f63b" + +[[package]] +name = "multiaddr" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe6351f60b488e04c1d21bc69e56b89cb3f5e8f5d22557d6e8031bdfd79b6961" +dependencies = [ + "arrayref", + "byteorder", + "data-encoding", + "libp2p-identity", + "multibase", + "multihash", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint 0.8.0", + "url", +] + +[[package]] +name = "multibase" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" +dependencies = [ + "base-x", + "data-encoding", + "data-encoding-macro", +] + +[[package]] +name = "multihash" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc41f430805af9d1cf4adae4ed2149c759b877b01d909a1f40256188d09345d2" +dependencies = [ + "core2", + "serde", + "unsigned-varint 0.8.0", +] + +[[package]] +name = "multistream-select" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea0df8e5eec2298a62b326ee4f0d7fe1a6b90a09dfcf9df37b38f947a8c42f19" +dependencies = [ + "bytes 1.8.0", + "futures", + "log", + "pin-project", + "smallvec", + "unsigned-varint 0.7.2", +] + +[[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 = "neli" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1100229e06604150b3becd61a4965d5c70f3be1759544ea7274166f4be41ef43" +dependencies = [ + "byteorder", + "libc", + "log", + "neli-proc-macros", +] + +[[package]] +name = "neli-proc-macros" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c168194d373b1e134786274020dae7fc5513d565ea2ebb9bc9ff17ffb69106d4" +dependencies = [ + "either", + "proc-macro2", + "quote", + "serde", + "syn 1.0.109", +] + +[[package]] +name = "netlink-packet-core" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" +dependencies = [ + "anyhow", + "byteorder", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-route" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66" +dependencies = [ + "anyhow", + "bitflags 1.3.2", + "byteorder", + "libc", + "netlink-packet-core", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-utils" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" +dependencies = [ + "anyhow", + "byteorder", + "paste", + "thiserror 1.0.69", +] + +[[package]] +name = "netlink-proto" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b33524dc0968bfad349684447bfce6db937a9ac3332a1fe60c0c5a5ce63f21" +dependencies = [ + "bytes 1.8.0", + "futures", + "log", + "netlink-packet-core", + "netlink-sys", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "netlink-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "416060d346fbaf1f23f9512963e3e878f1a78e707cb699ba9215761754244307" +dependencies = [ + "bytes 1.8.0", + "futures", + "libc", + "log", + "tokio", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", +] + +[[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 = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[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-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", + "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.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "object" +version = "0.36.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +dependencies = [ + "memchr", +] + +[[package]] +name = "oid-registry" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" +dependencies = [ + "asn1-rs", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[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", + "auto_impl", + "bytes 1.8.0", + "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 1.8.0", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "openssl" +version = "0.10.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" +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.89", +] + +[[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.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-multimap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49203cdcae0030493bad186b28da2fa25645fa276a51b6fec8010d281e02ef79" +dependencies = [ + "dlv-list", + "hashbrown 0.14.5", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parity-scale-codec" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be4817d39f3272f69c59fe05d0535ae6456c2dc2fa1ba02910296c7e0a5c590" +dependencies = [ + "arrayvec", + "bitvec", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "rustversion", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8781a75c6205af67215f382092b6e0a4ff3734798523e69073d4bcd294ec767b" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[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", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "password-hash" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "path-slash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" + +[[package]] +name = "pathdiff" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c5ce1153ab5b689d0c074c4e7fc613e942dfb7dd9eea5ab202d2ad91fe361" + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.7", + "hmac 0.12.1", + "password-hash", + "sha2 0.10.8", +] + +[[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 = "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" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" +dependencies = [ + "base64 0.22.1", + "serde", +] + +[[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.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" +dependencies = [ + "memchr", + "thiserror 1.0.69", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "pest_meta" +version = "2.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" +dependencies = [ + "once_cell", + "pest", + "sha2 0.10.8", +] + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap 2.6.0", +] + +[[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.1", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros", + "phf_shared 0.11.2", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared 0.11.2", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator", + "phf_shared 0.11.2", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher 0.3.11", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher 0.3.11", +] + +[[package]] +name = "pin-project" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "pin-project-lite" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" + +[[package]] +name = "pin-project-lite" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pipeline" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d15b6607fa632996eb8a17c9041cb6071cb75ac057abd45dece578723ea8c7c0" + +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand 2.2.0", + "futures-io", +] + +[[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.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite 0.2.15", + "windows-sys 0.48.0", +] + +[[package]] +name = "polling" +version = "3.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.4.0", + "pin-project-lite 0.2.15", + "rustix 0.38.41", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "polyval" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" +dependencies = [ + "cpuid-bool", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "portpicker" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be97d76faf1bfab666e1375477b23fde79eccf0276e9b63b92a39d676a889ba9" +dependencies = [ + "rand 0.8.5", +] + +[[package]] +name = "postgres-protocol" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acda0ebdebc28befa84bee35e651e4c5f09073d668c7aed4cf7e23c3cda84b23" +dependencies = [ + "base64 0.22.1", + "byteorder", + "bytes 1.8.0", + "fallible-iterator", + "hmac 0.12.1", + "md-5", + "memchr", + "rand 0.8.5", + "sha2 0.10.8", + "stringprep", +] + +[[package]] +name = "postgres-types" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f66ea23a2d0e5734297357705193335e0a957696f34bed2f2faefacb2fec336f" +dependencies = [ + "bytes 1.8.0", + "fallible-iterator", + "postgres-protocol", +] + +[[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.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "pretty_assertions" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" +dependencies = [ + "diff", + "yansi 1.0.1", +] + +[[package]] +name = "prettyplease" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" +dependencies = [ + "proc-macro2", + "syn 2.0.89", +] + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "scale-info", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit", +] + +[[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", + "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-macro2" +version = "1.0.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "307e3004becf10f5a6e0d59d20f3cd28231b0e0827a96cd3e0ce6d14bc1e4bb3" +dependencies = [ + "unicode-ident", +] + +[[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", + "protobuf", + "thiserror 1.0.69", +] + +[[package]] +name = "prometheus-client" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "504ee9ff529add891127c4827eb481bd69dc0ebc72e9a682e187db4caa60c3ca" +dependencies = [ + "dtoa", + "itoa", + "parking_lot", + "prometheus-client-derive-encode", +] + +[[package]] +name = "prometheus-client-derive-encode" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "proptest" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" +dependencies = [ + "bitflags 2.6.0", + "lazy_static", + "num-traits", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_xorshift", + "regex-syntax 0.8.5", + "unarray", +] + +[[package]] +name = "prost" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" +dependencies = [ + "bytes 1.8.0", + "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.89", +] + +[[package]] +name = "prost-types" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" +dependencies = [ + "prost", +] + +[[package]] +name = "protobuf" +version = "2.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" + +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quick-protobuf" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" +dependencies = [ + "byteorder", +] + +[[package]] +name = "quick-protobuf-codec" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ededb1cd78531627244d51dd0c7139fbe736c7d57af0092a76f0ffb2f56e98" +dependencies = [ + "asynchronous-codec 0.6.2", + "bytes 1.8.0", + "quick-protobuf", + "thiserror 1.0.69", + "unsigned-varint 0.7.2", +] + +[[package]] +name = "quick-protobuf-codec" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15a0580ab32b169745d7a39db2ba969226ca16738931be152a3209b409de2474" +dependencies = [ + "asynchronous-codec 0.7.0", + "bytes 1.8.0", + "quick-protobuf", + "thiserror 1.0.69", + "unsigned-varint 0.8.0", +] + +[[package]] +name = "quinn" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +dependencies = [ + "bytes 1.8.0", + "futures-io", + "pin-project-lite 0.2.15", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls 0.23.17", + "socket2 0.5.7", + "thiserror 2.0.3", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +dependencies = [ + "bytes 1.8.0", + "getrandom 0.2.15", + "rand 0.8.5", + "ring 0.17.8", + "rustc-hash", + "rustls 0.23.17", + "rustls-pki-types", + "slab", + "thiserror 2.0.3", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a626c6807713b15cac82a6acaccd6043c9a5408c24baae07611fec3f243da" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2 0.5.7", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[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_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[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 = "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 = "rcgen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52c4f3084aa3bc7dfbba4eff4fab2a54db4324965d8872ab933565e6fbd83bc6" +dependencies = [ + "pem 3.0.4", + "ring 0.16.20", + "time 0.3.36", + "yasna", +] + +[[package]] +name = "rcgen" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54077e1872c46788540de1ea3d7f4ccb1983d12f9aa909b234468676c1a36779" +dependencies = [ + "pem 3.0.4", + "ring 0.17.8", + "rustls-pki-types", + "time 0.3.36", + "x509-parser", + "yasna", +] + +[[package]] +name = "redis" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0d7a6955c7511f60f3ba9e86c6d02b3c3f144f8c24b288d1f4e18074ab8bbec" +dependencies = [ + "arc-swap", + "async-trait", + "bytes 1.8.0", + "combine", + "futures", + "futures-util", + "itoa", + "percent-encoding", + "pin-project-lite 0.2.15", + "ryu", + "tokio", + "tokio-retry", + "tokio-util", + "url", +] + +[[package]] +name = "redis" +version = "0.27.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cccf17a692ce51b86564334614d72dcae1def0fd5ecebc9f02956da74352b5" +dependencies = [ + "arc-swap", + "async-trait", + "bytes 1.8.0", + "combine", + "futures", + "futures-util", + "itoa", + "num-bigint", + "percent-encoding", + "pin-project-lite 0.2.15", + "ryu", + "tokio", + "tokio-retry2", + "tokio-util", + "url", +] + +[[package]] +name = "redox_syscall" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "refinery" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0904191f0566c3d3e0091d5cc8dec22e663d77def2d247b16e7a438b188bf75d" +dependencies = [ + "refinery-core", + "refinery-macros", +] + +[[package]] +name = "refinery-core" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bf253999e1899ae476c910b994959e341d84c4389ba9533d3dacbe06df04825" +dependencies = [ + "async-trait", + "cfg-if", + "log", + "regex", + "serde", + "siphasher 1.0.1", + "thiserror 1.0.69", + "time 0.3.36", + "tokio", + "tokio-postgres", + "toml", + "url", + "walkdir", +] + +[[package]] +name = "refinery-macros" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd81f69687fe8a1fa10995108b3ffc7cdbd63e682a4f8fbfd1020130780d7e17" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "refinery-core", + "regex", + "syn 2.0.89", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + +[[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 1.8.0", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.31", + "hyper-rustls 0.24.2", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite 0.2.15", + "rustls 0.21.12", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration 0.5.1", + "tokio", + "tokio-rustls 0.24.1", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots 0.25.4", + "winreg", +] + +[[package]] +name = "reqwest" +version = "0.12.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" +dependencies = [ + "base64 0.22.1", + "bytes 1.8.0", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.4.7", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.5.1", + "hyper-rustls 0.27.3", + "hyper-tls", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite 0.2.15", + "rustls-pemfile 2.2.0", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "system-configuration 0.6.1", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-registry", +] + +[[package]] +name = "resolv-conf" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +dependencies = [ + "hostname", + "quick-error", +] + +[[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 = "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", +] + +[[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 = "rkyv" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" +dependencies = [ + "bitvec", + "bytecheck", + "bytes 1.8.0", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid 1.11.0", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes 1.8.0", + "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 = "ron" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" +dependencies = [ + "base64 0.21.7", + "bitflags 2.6.0", + "serde", + "serde_derive", +] + +[[package]] +name = "route-recognizer" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56770675ebc04927ded3e60633437841581c285dc6236109ea25fbf3beb7b59e" + +[[package]] +name = "routefinder" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0971d3c8943a6267d6bd0d782fdc4afa7593e7381a92a3df950ff58897e066b5" +dependencies = [ + "smartcow", + "smartstring", +] + +[[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", + "spki", + "subtle", + "zeroize", +] + +[[package]] +name = "rtnetlink" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a552eb82d19f38c3beed3f786bd23aa434ceb9ac43ab44419ca6d67a7e186c0" +dependencies = [ + "futures", + "log", + "netlink-packet-core", + "netlink-packet-route", + "netlink-packet-utils", + "netlink-proto", + "netlink-sys", + "nix", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "rust-ini" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0698206bcb8882bf2a9ecb4c1e7785db57ff052297085a6efd4fe42302068a" +dependencies = [ + "cfg-if", + "ordered-multimap", +] + +[[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 = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" + +[[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.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.23", +] + +[[package]] +name = "rusticata-macros" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +dependencies = [ + "nom", +] + +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys 0.4.14", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +dependencies = [ + "base64 0.13.1", + "log", + "ring 0.16.20", + "sct 0.6.1", + "webpki", +] + +[[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 0.7.1", +] + +[[package]] +name = "rustls" +version = "0.23.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f1a745511c54ba6d4465e8d5dfbd81b45791756de28d4981af70d6dca128f1e" +dependencies = [ + "log", + "once_cell", + "ring 0.17.8", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "subtle", + "zeroize", +] + +[[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.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" +dependencies = [ + "web-time", +] + +[[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.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring 0.17.8", + "rustls-pki-types", + "untrusted 0.9.0", +] + +[[package]] +name = "rustversion" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" + +[[package]] +name = "rw-stream-sink" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8c9026ff5d2f23da5e45bbc283f156383001bfb09c4e44256d02c1a685fe9a1" +dependencies = [ + "futures", + "pin-project", + "static_assertions", +] + +[[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 0.4.4", +] + +[[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.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" +dependencies = [ + "cfg-if", + "derive_more 1.0.0", + "parity-scale-codec", + "scale-info-derive", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +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.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +dependencies = [ + "ring 0.16.20", + "untrusted 0.7.1", +] + +[[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 = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[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.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +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.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[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 = "sequencer" +version = "0.1.0" +dependencies = [ + "anyhow", + "ark-ff", + "ark-serialize", + "async-broadcast", + "async-lock 3.4.0", + "async-once-cell", + "async-trait", + "bincode", + "cdn-broker 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5)", + "cdn-marshal 0.4.0 (git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.5)", + "clap", + "client", + "committable", + "contract-bindings", + "csv", + "derivative", + "derive_more 1.0.0", + "dotenvy", + "dyn-clone", + "espresso-types", + "ethers", + "futures", + "hotshot", + "hotshot-contract-adapter", + "hotshot-events-service", + "hotshot-orchestrator", + "hotshot-query-service", + "hotshot-stake-table", + "hotshot-state-prover", + "hotshot-types", + "include_dir", + "itertools 0.12.1", + "jf-crhf", + "jf-merkle-tree", + "jf-rescue", + "jf-signature 0.2.0", + "jf-vid", + "libp2p", + "libp2p-networking", + "marketplace-solver", + "num_enum", + "parking_lot", + "portpicker", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_distr", + "sequencer-utils", + "serde", + "serde_json", + "sha2 0.10.8", + "snafu 0.8.5", + "sqlx", + "static_assertions", + "strum", + "surf-disco", + "tagged-base64", + "tide-disco", + "time 0.3.36", + "tokio", + "toml", + "tracing", + "tracing-subscriber 0.3.18", + "url", + "vbs", + "vec1", + "vergen", +] + +[[package]] +name = "sequencer-sqlite" +version = "0.1.0" +dependencies = [ + "anyhow", + "sequencer", + "tokio", +] + +[[package]] +name = "sequencer-utils" +version = "0.1.0" +dependencies = [ + "anyhow", + "ark-serialize", + "async-trait", + "clap", + "committable", + "contract-bindings", + "derive_more 1.0.0", + "ethers", + "futures", + "hotshot", + "hotshot-contract-adapter", + "log-panics", + "portpicker", + "reqwest 0.11.27", + "serde", + "serde_json", + "surf", + "tempfile", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "serde" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-inline-default" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3acbd21cb24261fc36f595b38d3b34d0ff4e31a6b42edd6a43387d27c5787c8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[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_derive" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "serde_fmt" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d4ddca14104cd60529e8c7f7ba71a2c8acd8f7f5cfcdc2faf97eeb7c3010a4" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_json" +version = "1.0.133" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_qs" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6" +dependencies = [ + "percent-encoding", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +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.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.6.0", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time 0.3.36", +] + +[[package]] +name = "serde_with_macros" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "sha-1" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha1" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" +dependencies = [ + "sha1_smol", +] + +[[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 = "sha1_smol" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" + +[[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 = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[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 = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shellexpand" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da03fa3b94cc19e3ebfc88c4229c49d8f08cdbd1228870a45f0ffdf84988e14b" +dependencies = [ + "dirs", +] + +[[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-async-std" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4aa94397e2023af5b7cff5b8d4785e935cfb77f0e4aab0cae3b26258ace556" +dependencies = [ + "async-io 1.13.0", + "futures-lite 1.13.0", + "libc", + "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 = "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 = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[package]] +name = "simple_asn1" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +dependencies = [ + "num-bigint", + "num-traits", + "thiserror 1.0.69", + "time 0.3.36", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "sluice" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" +dependencies = [ + "async-channel 1.9.0", + "futures-core", + "futures-io", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +dependencies = [ + "serde", +] + +[[package]] +name = "smartcow" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "656fcb1c1fca8c4655372134ce87d8afdf5ec5949ebabe8d314be0141d8b5da2" +dependencies = [ + "smartstring", +] + +[[package]] +name = "smartstring" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" +dependencies = [ + "autocfg", + "static_assertions", + "version_check", +] + +[[package]] +name = "snafu" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +dependencies = [ + "backtrace", + "doc-comment", + "snafu-derive 0.7.5", +] + +[[package]] +name = "snafu" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" +dependencies = [ + "snafu-derive 0.8.5", +] + +[[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 = "snafu-derive" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[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 = "solang-parser" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c425ce1c59f4b154717592f0bdf4715c3a1d55058883622d3157e1f0908a5b26" +dependencies = [ + "itertools 0.11.0", + "lalrpop", + "lalrpop-util", + "phf", + "thiserror 1.0.69", + "unicode-xid", +] + +[[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" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spinning_top" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b9eb1a2f4c41445a3a0ff9abc5221c5fcd28e1f13cd7c0397706f9ac938ddb0" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "sqlformat" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790" +dependencies = [ + "nom", + "unicode_categories", +] + +[[package]] +name = "sqlx" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93334716a037193fac19df402f8571269c84a00852f6a7066b5d2616dcd64d3e" +dependencies = [ + "sqlx-core", + "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +] + +[[package]] +name = "sqlx-core" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4d8060b456358185f7d50c55d9b5066ad956956fddec42ee2e8567134a8936e" +dependencies = [ + "atoi", + "bit-vec", + "byteorder", + "bytes 1.8.0", + "crc", + "crossbeam-queue", + "either", + "event-listener 5.3.1", + "futures-channel", + "futures-core", + "futures-intrusive", + "futures-io", + "futures-util", + "hashbrown 0.14.5", + "hashlink 0.9.1", + "hex", + "indexmap 2.6.0", + "log", + "memchr", + "native-tls", + "once_cell", + "paste", + "percent-encoding", + "serde", + "serde_json", + "sha2 0.10.8", + "smallvec", + "sqlformat", + "thiserror 1.0.69", + "time 0.3.36", + "tokio", + "tokio-stream", + "tracing", + "url", +] + +[[package]] +name = "sqlx-macros" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cac0692bcc9de3b073e8d747391827297e075c7710ff6276d9f7a1f3d58c6657" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 2.0.89", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1804e8a7c7865599c9c79be146dc8a9fd8cc86935fa641d3ea58e5f0688abaa5" +dependencies = [ + "dotenvy", + "either", + "heck 0.5.0", + "hex", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2 0.10.8", + "sqlx-core", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", + "syn 2.0.89", + "tempfile", + "tokio", + "url", +] + +[[package]] +name = "sqlx-mysql" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64bb4714269afa44aef2755150a0fc19d756fb580a67db8885608cf02f47d06a" +dependencies = [ + "atoi", + "base64 0.22.1", + "bitflags 2.6.0", + "byteorder", + "bytes 1.8.0", + "crc", + "digest 0.10.7", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array", + "hex", + "hkdf 0.12.4", + "hmac 0.12.1", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "percent-encoding", + "rand 0.8.5", + "rsa", + "serde", + "sha1 0.10.6", + "sha2 0.10.8", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 1.0.69", + "time 0.3.36", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-postgres" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fa91a732d854c5d7726349bb4bb879bb9478993ceb764247660aee25f67c2f8" +dependencies = [ + "atoi", + "base64 0.22.1", + "bit-vec", + "bitflags 2.6.0", + "byteorder", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "hex", + "hkdf 0.12.4", + "hmac 0.12.1", + "home", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "rand 0.8.5", + "serde", + "serde_json", + "sha2 0.10.8", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 1.0.69", + "time 0.3.36", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5b2cf34a45953bfd3daaf3db0f7a7878ab9b7a6b91b422d24a7a9e4c857b680" +dependencies = [ + "atoi", + "flume 0.11.1", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "serde_urlencoded", + "sqlx-core", + "time 0.3.36", + "tracing", + "url", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "standback" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff" +dependencies = [ + "version_check", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "stdweb" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" +dependencies = [ + "discard", + "rustc_version 0.2.3", + "stdweb-derive", + "stdweb-internal-macros", + "stdweb-internal-runtime", + "wasm-bindgen", +] + +[[package]] +name = "stdweb-derive" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "serde_derive", + "syn 1.0.109", +] + +[[package]] +name = "stdweb-internal-macros" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" +dependencies = [ + "base-x", + "proc-macro2", + "quote", + "serde", + "serde_derive", + "serde_json", + "sha1 0.6.1", + "syn 1.0.109", +] + +[[package]] +name = "stdweb-internal-runtime" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" + +[[package]] +name = "string_cache" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot", + "phf_shared 0.10.0", + "precomputed-hash", +] + +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros", +] + +[[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.89", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "surf" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "718b1ae6b50351982dedff021db0def601677f2120938b070eadb10ba4038dd7" +dependencies = [ + "async-std", + "async-trait", + "cfg-if", + "encoding_rs", + "futures-util", + "getrandom 0.2.15", + "http-client", + "http-types", + "log", + "mime_guess", + "once_cell", + "pin-project-lite 0.2.15", + "serde", + "serde_json", + "web-sys", +] + +[[package]] +name = "surf-disco" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14e00ab9d939d04110f14281d5a1e45b6c8acdfbc42e720cbfaef33007c907e6" +dependencies = [ + "async-std", + "async-tungstenite", + "derivative", + "futures", + "hex", + "reqwest 0.12.9", + "serde", + "serde_json", + "tide-disco", + "tracing", + "vbs", +] + +[[package]] +name = "sval" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6dc0f9830c49db20e73273ffae9b5240f63c42e515af1da1fceefb69fceafd8" + +[[package]] +name = "sval_buffer" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "429922f7ad43c0ef8fd7309e14d750e38899e32eb7e8da656ea169dd28ee212f" +dependencies = [ + "sval", + "sval_ref", +] + +[[package]] +name = "sval_dynamic" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f16ff5d839396c11a30019b659b0976348f3803db0626f736764c473b50ff4" +dependencies = [ + "sval", +] + +[[package]] +name = "sval_fmt" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c01c27a80b6151b0557f9ccbe89c11db571dc5f68113690c1e028d7e974bae94" +dependencies = [ + "itoa", + "ryu", + "sval", +] + +[[package]] +name = "sval_json" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0deef63c70da622b2a8069d8600cf4b05396459e665862e7bdb290fd6cf3f155" +dependencies = [ + "itoa", + "ryu", + "sval", +] + +[[package]] +name = "sval_nested" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a39ce5976ae1feb814c35d290cf7cf8cd4f045782fe1548d6bc32e21f6156e9f" +dependencies = [ + "sval", + "sval_buffer", + "sval_ref", +] + +[[package]] +name = "sval_ref" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb7c6ee3751795a728bc9316a092023529ffea1783499afbc5c66f5fabebb1fa" +dependencies = [ + "sval", +] + +[[package]] +name = "sval_serde" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a5572d0321b68109a343634e3a5d576bf131b82180c6c442dee06349dfc652a" +dependencies = [ + "serde", + "sval", + "sval_nested", +] + +[[package]] +name = "svm-rs" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11297baafe5fa0c99d5722458eac6a5e25c01eb1b8e5cd137f54079093daa7a4" +dependencies = [ + "dirs", + "fs2", + "hex", + "once_cell", + "reqwest 0.11.27", + "semver 1.0.23", + "serde", + "serde_json", + "sha2 0.10.8", + "thiserror 1.0.69", + "url", + "zip", +] + +[[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.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[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 0.5.0", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "system-configuration-sys 0.6.0", +] + +[[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 = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tagged-base64" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b74bbf1db405a3fd2c6f8cd403bfa14727faa145925efe3012fa270b61551f1" +dependencies = [ + "ark-serialize", + "ark-std", + "base64 0.22.1", + "crc-any", + "serde", + "snafu 0.8.5", + "tagged-base64-macros", + "wasm-bindgen", +] + +[[package]] +name = "tagged-base64-macros" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcdea3c0150898fad2f7196a173ec3264f7fc455ba570939163c558f48ae85ac" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" +dependencies = [ + "cfg-if", + "fastrand 2.2.0", + "once_cell", + "rustix 0.38.41", + "windows-sys 0.59.0", +] + +[[package]] +name = "term" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" +dependencies = [ + "dirs-next", + "rustversion", + "winapi", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" +dependencies = [ + "thiserror-impl 2.0.3", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[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 = "tide" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c459573f0dd2cc734b539047f57489ea875af8ee950860ded20cf93a79a1dee0" +dependencies = [ + "async-h1", + "async-sse", + "async-std", + "async-trait", + "futures-util", + "http-client", + "http-types", + "kv-log-macro", + "log", + "pin-project-lite 0.2.15", + "route-recognizer", + "serde", + "serde_json", +] + +[[package]] +name = "tide-disco" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9819433f7ede35c0ef6dd1dc669b39663e48fdb58653712cc39db272e4589978" +dependencies = [ + "anyhow", + "async-h1", + "async-lock 3.4.0", + "async-std", + "async-trait", + "clap", + "config", + "derivative", + "derive_more 0.99.18", + "dirs", + "edit-distance", + "futures", + "futures-util", + "http 1.1.0", + "include_dir", + "itertools 0.12.1", + "lazy_static", + "libc", + "markdown", + "maud", + "parking_lot", + "pin-project", + "prometheus", + "rand 0.8.5", + "reqwest 0.12.9", + "routefinder", + "semver 1.0.23", + "serde", + "serde_json", + "serde_with", + "shellexpand", + "signal-hook", + "signal-hook-async-std", + "snafu 0.8.5", + "strum", + "strum_macros", + "tagged-base64", + "tide", + "tide-websockets", + "toml", + "tracing", + "tracing-distributed", + "tracing-futures", + "tracing-log", + "tracing-subscriber 0.3.18", + "url", + "vbs", +] + +[[package]] +name = "tide-websockets" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3592c5cb5cb1b7a2ff3a0e5353170c1bb5b104b2f66dd06f73304169b52cc725" +dependencies = [ + "async-dup", + "async-std", + "async-tungstenite", + "base64 0.13.1", + "futures-util", + "pin-project", + "serde", + "serde_json", + "sha-1", + "tide", +] + +[[package]] +name = "time" +version = "0.2.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242" +dependencies = [ + "const_fn", + "libc", + "standback", + "stdweb", + "time-macros 0.1.1", + "version_check", + "winapi", +] + +[[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 0.2.18", +] + +[[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.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1" +dependencies = [ + "proc-macro-hack", + "time-macros-impl", +] + +[[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 = "time-macros-impl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f" +dependencies = [ + "proc-macro-hack", + "proc-macro2", + "quote", + "standback", + "syn 1.0.109", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[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.41.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" +dependencies = [ + "backtrace", + "bytes 1.8.0", + "libc", + "mio", + "parking_lot", + "pin-project-lite 0.2.15", + "socket2 0.5.7", + "tokio-macros", + "tracing", + "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 0.2.15", + "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.89", +] + +[[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-postgres" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b5d3742945bc7d7f210693b0c58ae542c6fd47b17adbbda0885f3dcb34a6bdb" +dependencies = [ + "async-trait", + "byteorder", + "bytes 1.8.0", + "fallible-iterator", + "futures-channel", + "futures-util", + "log", + "parking_lot", + "percent-encoding", + "phf", + "pin-project-lite 0.2.15", + "postgres-protocol", + "postgres-types", + "rand 0.8.5", + "socket2 0.5.7", + "tokio", + "tokio-util", + "whoami", +] + +[[package]] +name = "tokio-retry" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f57eb36ecbe0fc510036adff84824dd3c24bb781e21bfa67b69d556aa85214f" +dependencies = [ + "pin-project", + "rand 0.8.5", + "tokio", +] + +[[package]] +name = "tokio-retry2" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "903934dba1c4c2f2e9cb460ef10b5695e0b0ecad3bf9ee7c8675e540c5e8b2d1" +dependencies = [ + "pin-project", + "rand 0.8.5", + "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.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls 0.23.17", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +dependencies = [ + "futures-core", + "pin-project-lite 0.2.15", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +dependencies = [ + "futures-util", + "log", + "rustls 0.21.12", + "tokio", + "tokio-rustls 0.24.1", + "tungstenite 0.20.1", + "webpki-roots 0.25.4", +] + +[[package]] +name = "tokio-util" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +dependencies = [ + "bytes 1.8.0", + "futures-core", + "futures-sink", + "pin-project-lite 0.2.15", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +dependencies = [ + "indexmap 2.6.0", + "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", + "base64 0.21.7", + "bytes 1.8.0", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.31", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost", + "tokio", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[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 0.2.15", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite 0.2.15", + "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.89", +] + +[[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-distributed" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de30b98573d9e63e82996b3c9bf950210ba3f2dcf363f7eec000acebef1a4377" +dependencies = [ + "itertools 0.9.0", + "tracing", + "tracing-core", + "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", + "once_cell", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", +] + +[[package]] +name = "tracing-test" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "557b891436fe0d5e0e363427fc7f217abf9ccd510d5136549847bdcbcd011d68" +dependencies = [ + "tracing-core", + "tracing-subscriber 0.3.18", + "tracing-test-macro", +] + +[[package]] +name = "tracing-test-macro" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" +dependencies = [ + "quote", + "syn 2.0.89", +] + +[[package]] +name = "trait-variant" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70977707304198400eb4835a78f6a9f928bf41bba420deb8fdb175cd965d77a7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "tungstenite" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fe8dada8c1a3aeca77d6b51a4f1314e0f4b8e438b7b1b71e3ddaca8080e4093" +dependencies = [ + "base64 0.13.1", + "byteorder", + "bytes 1.8.0", + "http 0.2.12", + "httparse", + "input_buffer", + "log", + "native-tls", + "rand 0.8.5", + "sha-1", + "thiserror 1.0.69", + "url", + "utf-8", +] + +[[package]] +name = "tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +dependencies = [ + "byteorder", + "bytes 1.8.0", + "data-encoding", + "http 0.2.12", + "httparse", + "log", + "rand 0.8.5", + "rustls 0.21.12", + "sha1 0.10.6", + "thiserror 1.0.69", + "url", + "utf-8", +] + +[[package]] +name = "typeid" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[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 = "unicase" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" + +[[package]] +name = "unicode-bidi" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" + +[[package]] +name = "unicode-ident" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" + +[[package]] +name = "unicode-normalization" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-properties" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "unicode_categories" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" + +[[package]] +name = "universal-hash" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "unsigned-varint" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" +dependencies = [ + "asynchronous-codec 0.6.2", + "bytes 1.8.0", +] + +[[package]] +name = "unsigned-varint" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" + +[[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 = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" +dependencies = [ + "base64 0.22.1", + "flate2", + "log", + "once_cell", + "rustls 0.23.17", + "rustls-pki-types", + "url", + "webpki-roots 0.26.7", +] + +[[package]] +name = "url" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" +dependencies = [ + "form_urlencoded", + "idna 1.0.3", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "utils" +version = "0.5.79" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.82#f57a7ef15d867e03ce00fd0af3418ae46a20041f" +dependencies = [ + "tracing", +] + +[[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 = "uuid" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "value-bag" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ef4c4aa54d5d05a279399bfa921ec387b7aba77caf7a682ae8d86785b8fdad2" +dependencies = [ + "value-bag-serde1", + "value-bag-sval2", +] + +[[package]] +name = "value-bag-serde1" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bb773bd36fd59c7ca6e336c94454d9c66386416734817927ac93d81cb3c5b0b" +dependencies = [ + "erased-serde", + "serde", + "serde_fmt", +] + +[[package]] +name = "value-bag-sval2" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a916a702cac43a88694c97657d449775667bcd14b70419441d05b7fea4a83a" +dependencies = [ + "sval", + "sval_buffer", + "sval_dynamic", + "sval_fmt", + "sval_json", + "sval_ref", + "sval_serde", +] + +[[package]] +name = "vbs" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf4ed425fa4976d51e35f5882764612c5f735457118d6ef7b6c684b7d34a74d" +dependencies = [ + "anyhow", + "bincode", + "derive_more 0.99.18", + "serde", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "vec1" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab68b56840f69efb0fefbe3ab6661499217ffdc58e2eef7c3f6f69835386322" +dependencies = [ + "serde", +] + +[[package]] +name = "vergen" +version = "8.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2990d9ea5967266ea0ccf413a4aa5c42a93dbcfda9cb49a97de6931726b12566" +dependencies = [ + "anyhow", + "cfg-if", + "rustversion", + "time 0.3.36", +] + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + +[[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 = "warp" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4378d202ff965b011c64817db11d5829506d3404edeadb61f190d111da3f231c" +dependencies = [ + "bytes 1.8.0", + "futures-channel", + "futures-util", + "headers", + "http 0.2.12", + "hyper 0.14.31", + "log", + "mime", + "mime_guess", + "percent-encoding", + "pin-project", + "scoped-tls", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-util", + "tower-service", + "tracing", +] + +[[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.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +dependencies = [ + "cfg-if", + "once_cell", + "serde", + "serde_json", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.89", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" + +[[package]] +name = "web-sys" +version = "0.3.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +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 = "webpki" +version = "0.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" +dependencies = [ + "ring 0.16.20", + "untrusted 0.7.1", +] + +[[package]] +name = "webpki-roots" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" +dependencies = [ + "webpki", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "webpki-roots" +version = "0.26.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "whoami" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" +dependencies = [ + "redox_syscall", + "wasite", + "web-sys", +] + +[[package]] +name = "widestring" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" + +[[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.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.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" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efc5cf48f83140dcaab716eeaea345f9e93d0018fb81162753a3f76c3397b538" +dependencies = [ + "windows-core 0.53.0", + "windows-targets 0.52.6", +] + +[[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-core" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dcc5b895a6377f1ab9fa55acedab1fd5ac0db66ad1e6c7f47e28a22e446a5dd" +dependencies = [ + "windows-result 0.1.2", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result 0.2.0", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result 0.2.0", + "windows-targets 0.52.6", +] + +[[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-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[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.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.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.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.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.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.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.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.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +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 = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[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.1", + "send_wrapper 0.6.0", + "thiserror 1.0.69", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "x509-parser" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" +dependencies = [ + "asn1-rs", + "data-encoding", + "der-parser", + "lazy_static", + "nom", + "oid-registry", + "ring 0.17.8", + "rusticata-macros", + "thiserror 1.0.69", + "time 0.3.36", +] + +[[package]] +name = "xml-rs" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af310deaae937e48a26602b730250b4949e125f468f11e6990be3e5304ddd96f" + +[[package]] +name = "xmltree" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb" +dependencies = [ + "xml-rs", +] + +[[package]] +name = "yaml-rust2" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8902160c4e6f2fb145dbe9d6760a75e3c9522d8bf796ed7047c85919ac7115f8" +dependencies = [ + "arraydeque", + "encoding_rs", + "hashlink 0.8.4", +] + +[[package]] +name = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "yasna" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" +dependencies = [ + "time 0.3.36", +] + +[[package]] +name = "yoke" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "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.89", +] + +[[package]] +name = "zerofrom" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", + "synstructure", +] + +[[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.89", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "aes 0.8.4", + "byteorder", + "bzip2", + "constant_time_eq 0.1.5", + "crc32fast", + "crossbeam-utils", + "flate2", + "hmac 0.12.1", + "pbkdf2 0.11.0", + "sha1 0.10.6", + "time 0.3.36", + "zstd", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.13+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/sequencer-sqlite/Cargo.toml b/sequencer-sqlite/Cargo.toml new file mode 100644 index 0000000000..fbaeb12a4b --- /dev/null +++ b/sequencer-sqlite/Cargo.toml @@ -0,0 +1,33 @@ +# As a workaround for feature unification by cargo this separate crate that is +# not part of the workspace that allows us to compile a sequencer binary without +# the embedded-db feature turned on. +[package] +name = "sequencer-sqlite" +version = "0.1.0" +edition = "2021" + +[dependencies] +sequencer = { path = "../sequencer" , features = ["embedded-db"] } +tokio = { version = "1", default-features = false, features = [ + "rt-multi-thread", + "macros", + "parking_lot", + "sync", +] } +anyhow = "^1.0" + +[profile.dev] +# No optimizations +opt-level = 0 +# Skip compiling the debug information. +debug = false +# Skip linking symbols. +strip = true +[profile.test] +opt-level = 1 +[profile.test.package.hotshot-state-prover] +opt-level = 3 +[profile.test.package.gen-vk-contract] +opt-level = 3 +[profile.test.package.diff-test-hotshot] +opt-level = 3 diff --git a/sequencer-sqlite/src/main.rs b/sequencer-sqlite/src/main.rs new file mode 100644 index 0000000000..ef15b568ea --- /dev/null +++ b/sequencer-sqlite/src/main.rs @@ -0,0 +1,4 @@ +#[tokio::main] +pub async fn main() -> anyhow::Result<()> { + sequencer::main().await +} diff --git a/sequencer/Cargo.toml b/sequencer/Cargo.toml index eb1789656c..41848e92a5 100644 --- a/sequencer/Cargo.toml +++ b/sequencer/Cargo.toml @@ -16,10 +16,11 @@ testing = [ "hotshot-query-service/testing", ] benchmarking = [] +embedded-db = ["hotshot-query-service/embedded-db"] [[bin]] name = "espresso-dev-node" -required-features = ["testing"] +required-features = ["testing", "embedded-db"] [dev-dependencies] escargot = "0.5.10" @@ -30,10 +31,10 @@ hotshot-testing = { workspace = true } pretty_assertions = { workspace = true } rand = "0.8.5" reqwest = { workspace = true } -tempfile = { workspace = true } # Enable "testing" feature when running tests sequencer = { path = ".", features = [ "testing" ] } +tempfile = { workspace = true } [build-dependencies] anyhow = { workspace = true } @@ -48,7 +49,6 @@ async-lock = { workspace = true } async-once-cell = { workspace = true } async-trait = { workspace = true } bincode = { workspace = true } -parking_lot = "0.12" # CDN imports cdn-broker = { workspace = true } @@ -75,12 +75,9 @@ hotshot-orchestrator = { workspace = true } hotshot-query-service = { workspace = true } hotshot-stake-table = { workspace = true } hotshot-state-prover = { workspace = true } -libp2p-networking = { workspace = true } # Dependencies for feature `testing` hotshot-testing = { workspace = true, optional = true } -marketplace-builder-core = { workspace = true, optional = true } -marketplace-builder-shared = { workspace = true, optional = true } hotshot-types = { workspace = true } include_dir = "0.7" @@ -88,13 +85,16 @@ itertools = { workspace = true } jf-crhf = { workspace = true } jf-merkle-tree = { workspace = true } jf-rescue = { workspace = true } -tempfile = { workspace = true, optional = true } jf-signature = { workspace = true, features = ["bls", "schnorr"] } jf-vid = { workspace = true } libp2p = { workspace = true } +libp2p-networking = { workspace = true } +marketplace-builder-core = { workspace = true, optional = true } +marketplace-builder-shared = { workspace = true, optional = true } marketplace-solver = { path = "../marketplace-solver" } num_enum = "0.7" +parking_lot = "0.12" portpicker = { workspace = true } rand = { workspace = true } rand_chacha = { workspace = true } @@ -115,6 +115,7 @@ static_assertions = "1" strum = { workspace = true } surf-disco = { workspace = true } tagged-base64 = { workspace = true } +tempfile = { workspace = true, optional = true } tide-disco = { workspace = true } time = { workspace = true } tokio = { workspace = true } diff --git a/sequencer/api/migrations/V12__network_config.sql b/sequencer/api/migrations/postgres/V12__network_config.sql similarity index 100% rename from sequencer/api/migrations/V12__network_config.sql rename to sequencer/api/migrations/postgres/V12__network_config.sql diff --git a/sequencer/api/migrations/V13__consensus_state.sql b/sequencer/api/migrations/postgres/V13__consensus_state.sql similarity index 100% rename from sequencer/api/migrations/V13__consensus_state.sql rename to sequencer/api/migrations/postgres/V13__consensus_state.sql diff --git a/sequencer/api/migrations/V14__state_tables.sql b/sequencer/api/migrations/postgres/V14__state_tables.sql similarity index 99% rename from sequencer/api/migrations/V14__state_tables.sql rename to sequencer/api/migrations/postgres/V14__state_tables.sql index d5704006ce..4770f5ffcb 100644 --- a/sequencer/api/migrations/V14__state_tables.sql +++ b/sequencer/api/migrations/postgres/V14__state_tables.sql @@ -34,4 +34,4 @@ ALTER TABLE ADD CONSTRAINT block_merkle_tree_pk PRIMARY KEY (path, created); -CREATE INDEX block_merkle_tree_created ON block_merkle_tree (created); +CREATE INDEX block_merkle_tree_created ON block_merkle_tree (created); \ No newline at end of file diff --git a/sequencer/api/migrations/V15__undecided_state.sql b/sequencer/api/migrations/postgres/V15__undecided_state.sql similarity index 100% rename from sequencer/api/migrations/V15__undecided_state.sql rename to sequencer/api/migrations/postgres/V15__undecided_state.sql diff --git a/sequencer/api/migrations/V16__merkle_root_columns.sql b/sequencer/api/migrations/postgres/V16__merkle_root_columns.sql similarity index 100% rename from sequencer/api/migrations/V16__merkle_root_columns.sql rename to sequencer/api/migrations/postgres/V16__merkle_root_columns.sql diff --git a/sequencer/api/migrations/V301__merkle_root_column_indexes.sql b/sequencer/api/migrations/postgres/V301__merkle_root_column_indexes.sql similarity index 100% rename from sequencer/api/migrations/V301__merkle_root_column_indexes.sql rename to sequencer/api/migrations/postgres/V301__merkle_root_column_indexes.sql diff --git a/sequencer/api/migrations/postgres/V302__update_state_tables_types.sql b/sequencer/api/migrations/postgres/V302__update_state_tables_types.sql new file mode 100644 index 0000000000..10624f16d1 --- /dev/null +++ b/sequencer/api/migrations/postgres/V302__update_state_tables_types.sql @@ -0,0 +1,13 @@ + +ALTER TABLE fee_merkle_tree + ALTER COLUMN path TYPE JSONB USING array_to_json(path), + ALTER COLUMN children TYPE JSONB USING array_to_json(children); + + ALTER TABLE fee_merkle_tree RENAME COLUMN index TO idx; + + +ALTER TABLE block_merkle_tree + ALTER COLUMN path TYPE JSONB USING array_to_json(path), + ALTER COLUMN children TYPE JSONB USING array_to_json(children); + +ALTER TABLE block_merkle_tree RENAME COLUMN index TO idx; \ No newline at end of file diff --git a/sequencer/api/migrations/V31__drop_merklized_state_created_index.sql b/sequencer/api/migrations/postgres/V31__drop_merklized_state_created_index.sql similarity index 100% rename from sequencer/api/migrations/V31__drop_merklized_state_created_index.sql rename to sequencer/api/migrations/postgres/V31__drop_merklized_state_created_index.sql diff --git a/sequencer/api/migrations/V32__saved_proposals.sql b/sequencer/api/migrations/postgres/V32__saved_proposals.sql similarity index 100% rename from sequencer/api/migrations/V32__saved_proposals.sql rename to sequencer/api/migrations/postgres/V32__saved_proposals.sql diff --git a/sequencer/api/migrations/V33__chain_config_table.sql b/sequencer/api/migrations/postgres/V33__chain_config_table.sql similarity index 100% rename from sequencer/api/migrations/V33__chain_config_table.sql rename to sequencer/api/migrations/postgres/V33__chain_config_table.sql diff --git a/sequencer/api/migrations/V34__builder_urls.sql b/sequencer/api/migrations/postgres/V34__builder_urls.sql similarity index 100% rename from sequencer/api/migrations/V34__builder_urls.sql rename to sequencer/api/migrations/postgres/V34__builder_urls.sql diff --git a/sequencer/api/migrations/V35__add_upgrade_params.sql b/sequencer/api/migrations/postgres/V35__add_upgrade_params.sql similarity index 100% rename from sequencer/api/migrations/V35__add_upgrade_params.sql rename to sequencer/api/migrations/postgres/V35__add_upgrade_params.sql diff --git a/sequencer/api/migrations/V36__alter_merkle_root_column_expressions.sql b/sequencer/api/migrations/postgres/V36__alter_merkle_root_column_expressions.sql similarity index 100% rename from sequencer/api/migrations/V36__alter_merkle_root_column_expressions.sql rename to sequencer/api/migrations/postgres/V36__alter_merkle_root_column_expressions.sql diff --git a/sequencer/api/migrations/V38__add_quorum_proposal_hash.sql b/sequencer/api/migrations/postgres/V38__add_quorum_proposal_hash.sql similarity index 100% rename from sequencer/api/migrations/V38__add_quorum_proposal_hash.sql rename to sequencer/api/migrations/postgres/V38__add_quorum_proposal_hash.sql diff --git a/sequencer/api/migrations/V39__upgrade_certificate.sql b/sequencer/api/migrations/postgres/V39__upgrade_certificate.sql similarity index 100% rename from sequencer/api/migrations/V39__upgrade_certificate.sql rename to sequencer/api/migrations/postgres/V39__upgrade_certificate.sql diff --git a/sequencer/api/migrations/V40__anchor_leaf_chain.sql b/sequencer/api/migrations/postgres/V40__anchor_leaf_chain.sql similarity index 100% rename from sequencer/api/migrations/V40__anchor_leaf_chain.sql rename to sequencer/api/migrations/postgres/V40__anchor_leaf_chain.sql diff --git a/sequencer/api/migrations/V41__epoch_height.sql b/sequencer/api/migrations/postgres/V41__epoch_height.sql similarity index 100% rename from sequencer/api/migrations/V41__epoch_height.sql rename to sequencer/api/migrations/postgres/V41__epoch_height.sql diff --git a/sequencer/api/migrations/V42__index_quorum_proposal_leaf_hash.sql b/sequencer/api/migrations/postgres/V42__index_quorum_proposal_leaf_hash.sql similarity index 100% rename from sequencer/api/migrations/V42__index_quorum_proposal_leaf_hash.sql rename to sequencer/api/migrations/postgres/V42__index_quorum_proposal_leaf_hash.sql diff --git a/sequencer/api/migrations/sqlite/V102__network_config.sql b/sequencer/api/migrations/sqlite/V102__network_config.sql new file mode 100644 index 0000000000..ad8390a970 --- /dev/null +++ b/sequencer/api/migrations/sqlite/V102__network_config.sql @@ -0,0 +1,4 @@ +CREATE TABLE network_config ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + config JSONB +); \ No newline at end of file diff --git a/sequencer/api/migrations/sqlite/V103__consensus_state.sql b/sequencer/api/migrations/sqlite/V103__consensus_state.sql new file mode 100644 index 0000000000..5f1c07593b --- /dev/null +++ b/sequencer/api/migrations/sqlite/V103__consensus_state.sql @@ -0,0 +1,22 @@ +CREATE TABLE anchor_leaf ( + view BIGINT PRIMARY KEY, + leaf JSONB, + qc JSONB +); + +CREATE TABLE highest_voted_view ( + -- The ID is always set to 0. Setting it explicitly allows us to enforce with every insert or + -- update that there is only a single entry in this table: the latest known view. + id INT PRIMARY KEY, + view BIGINT +); + +CREATE TABLE da_proposal ( + view BIGINT PRIMARY KEY, + data JSONB +); + +CREATE TABLE vid_share ( + view BIGINT PRIMARY KEY, + data JSONB +); diff --git a/sequencer/api/migrations/sqlite/V104__state_tables.sql b/sequencer/api/migrations/sqlite/V104__state_tables.sql new file mode 100644 index 0000000000..df47a7bda3 --- /dev/null +++ b/sequencer/api/migrations/sqlite/V104__state_tables.sql @@ -0,0 +1,25 @@ +CREATE TABLE IF NOT EXISTS hash ( + id INTEGER PRIMARY KEY AUTOINCREMENT, value JSONB NOT NULL UNIQUE +); + +CREATE TABLE fee_merkle_tree ( + path JSONB NOT NULL, + created BIGINT NOT NULL, + hash_id INT NOT NULL REFERENCES hash (id), + children JSONB, + children_bitvec BLOB, + idx JSONB, + entry JSONB, + PRIMARY KEY (path, created) +); + +CREATE TABLE block_merkle_tree ( + path JSONB NOT NULL, + created BIGINT NOT NULL, + hash_id INT NOT NULL REFERENCES hash (id), + children JSONB, + children_bitvec BLOB, + idx JSONB, + entry JSONB, + PRIMARY KEY (path, created) +); diff --git a/sequencer/api/migrations/sqlite/V105__undecided_state.sql b/sequencer/api/migrations/sqlite/V105__undecided_state.sql new file mode 100644 index 0000000000..52930572cf --- /dev/null +++ b/sequencer/api/migrations/sqlite/V105__undecided_state.sql @@ -0,0 +1,7 @@ +CREATE TABLE undecided_state ( + -- The ID is always set to 0. Setting it explicitly allows us to enforce with every insert or + -- update that there is only a single entry in this table: the latest known state. + id INT PRIMARY KEY, + leaves BLOB NOT NULL, + state BLOB NOT NULL +); diff --git a/sequencer/api/migrations/sqlite/V106__merkle_root_columns.sql b/sequencer/api/migrations/sqlite/V106__merkle_root_columns.sql new file mode 100644 index 0000000000..5d3dbd9821 --- /dev/null +++ b/sequencer/api/migrations/sqlite/V106__merkle_root_columns.sql @@ -0,0 +1,12 @@ +-- Add block_merkle_tree_root column as a generated column +ALTER TABLE header +ADD COLUMN block_merkle_tree_root TEXT +GENERATED ALWAYS AS (coalesce(json_extract(data, '$.block_merkle_tree_root'), json_extract(data, '$.fields.block_merkle_tree_root'))) STORED NOT NULL; + +-- Add fee_merkle_tree_root column as a generated column +ALTER TABLE header +ADD COLUMN fee_merkle_tree_root TEXT +GENERATED ALWAYS AS (coalesce(json_extract(data, '$.fee_merkle_tree_root'), json_extract(data, '$.fields.fee_merkle_tree_root'))) STORED NOT NULL; + +CREATE INDEX header_block_merkle_tree_root_idx ON header (block_merkle_tree_root); +CREATE INDEX header_fee_merkle_tree_root_idx ON header (fee_merkle_tree_root); \ No newline at end of file diff --git a/sequencer/api/migrations/sqlite/V107__saved_proposals.sql b/sequencer/api/migrations/sqlite/V107__saved_proposals.sql new file mode 100644 index 0000000000..d51ccf70f6 --- /dev/null +++ b/sequencer/api/migrations/sqlite/V107__saved_proposals.sql @@ -0,0 +1,7 @@ +CREATE TABLE quorum_proposals ( + view BIGINT PRIMARY KEY, + data BLOB, + leaf_hash TEXT +); + +CREATE UNIQUE INDEX quorum_proposals_leaf_hash_idx ON quorum_proposals (leaf_hash); \ No newline at end of file diff --git a/sequencer/api/migrations/sqlite/V108__chain_config_table.sql b/sequencer/api/migrations/sqlite/V108__chain_config_table.sql new file mode 100644 index 0000000000..c9bcae866f --- /dev/null +++ b/sequencer/api/migrations/sqlite/V108__chain_config_table.sql @@ -0,0 +1,4 @@ +CREATE TABLE chain_config ( + commitment TEXT PRIMARY KEY, + data BLOB NOT NULL +); diff --git a/sequencer/api/migrations/sqlite/V109__upgrade_certificate.sql b/sequencer/api/migrations/sqlite/V109__upgrade_certificate.sql new file mode 100644 index 0000000000..2becbc6f25 --- /dev/null +++ b/sequencer/api/migrations/sqlite/V109__upgrade_certificate.sql @@ -0,0 +1,4 @@ +CREATE TABLE upgrade_certificate ( + id bool PRIMARY KEY DEFAULT true, + data BLOB +); \ No newline at end of file diff --git a/sequencer/api/migrations/sqlite/V110__event_stream.sql b/sequencer/api/migrations/sqlite/V110__event_stream.sql new file mode 100644 index 0000000000..0ca0287632 --- /dev/null +++ b/sequencer/api/migrations/sqlite/V110__event_stream.sql @@ -0,0 +1,4 @@ +CREATE TABLE event_stream ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + last_processed_view BIGINT +); diff --git a/sequencer/src/api.rs b/sequencer/src/api.rs index fcf392703f..72d15f39a1 100644 --- a/sequencer/src/api.rs +++ b/sequencer/src/api.rs @@ -8,9 +8,9 @@ use committable::Commitment; use data_source::{CatchupDataSource, StakeTableDataSource, SubmitDataSource}; use derivative::Derivative; use espresso_types::{ - retain_accounts, v0::traits::SequencerPersistence, v0_3::ChainConfig, AccountQueryData, - BlockMerkleTree, FeeAccount, FeeAccountProof, FeeMerkleTree, MockSequencerVersions, NodeState, - PubKey, Transaction, ValidatedState, + retain_accounts, v0::traits::SequencerPersistence, v0_99::ChainConfig, AccountQueryData, + BlockMerkleTree, FeeAccount, FeeAccountProof, FeeMerkleTree, NodeState, PubKey, Transaction, + ValidatedState, }; use futures::{ future::{BoxFuture, Future, FutureExt}, @@ -20,7 +20,6 @@ use hotshot_events_service::events_source::{ EventFilterSet, EventsSource, EventsStreamer, StartupInfo, }; use hotshot_query_service::data_source::ExtensibleDataSource; -use hotshot_state_prover::service::light_client_genesis_from_stake_table; use hotshot_types::{ data::ViewNumber, event::Event, @@ -41,7 +40,7 @@ use self::data_source::{ HotShotConfigDataSource, NodeStateDataSource, PublicNetworkConfig, StateSignatureDataSource, }; use crate::{ - catchup::CatchupStorage, context::Consensus, network, state_signature::StateSigner, SeqTypes, + catchup::CatchupStorage, context::Consensus, state_signature::StateSigner, SeqTypes, SequencerApiVersion, SequencerContext, }; @@ -491,11 +490,13 @@ impl, V: Versions, P: SequencerPersistence> StateSig #[cfg(any(test, feature = "testing"))] pub mod test_helpers { - use std::time::Duration; - use committable::Committable; + use hotshot_state_prover::service::light_client_genesis_from_stake_table; + use std::time::Duration; use tokio::{spawn, time::sleep}; + use crate::network; + use espresso_types::MockSequencerVersions; use espresso_types::{ v0::traits::{NullEventConsumer, PersistenceOptions, StateCatchup}, MarketplaceVersion, NamespaceId, ValidatedState, @@ -1053,6 +1054,7 @@ mod api_tests { use data_source::testing::TestableSequencerDataSource; use endpoints::NamespaceProofQueryData; + use espresso_types::MockSequencerVersions; use espresso_types::{ traits::{EventConsumer, PersistenceOptions}, Header, Leaf, Leaf2, NamespaceId, @@ -1079,6 +1081,7 @@ mod api_tests { use vbs::version::StaticVersion; use super::{update::ApiEventConsumer, *}; + use crate::network; use crate::{ persistence::no_storage::NoStorage, testing::{wait_for_decide_on_handle, TestConfigBuilder}, @@ -1336,8 +1339,9 @@ mod test { use espresso_types::{ traits::NullEventConsumer, v0_1::{UpgradeMode, ViewBasedUpgrade}, - BackoffParams, FeeAccount, FeeAmount, Header, MockSequencerVersions, SequencerVersions, - TimeBasedUpgrade, Timestamp, Upgrade, UpgradeType, ValidatedState, + BackoffParams, FeeAccount, FeeAmount, FeeVersion, Header, MarketplaceVersion, + MockSequencerVersions, SequencerVersions, TimeBasedUpgrade, Timestamp, Upgrade, + UpgradeType, ValidatedState, }; use ethers::utils::Anvil; use futures::{ @@ -1871,7 +1875,7 @@ mod test { setup_test(); let mut upgrades = std::collections::BTreeMap::new(); - type MySequencerVersions = SequencerVersions, StaticVersion<0, 3>>; + type MySequencerVersions = SequencerVersions; let mode = UpgradeMode::View(ViewBasedUpgrade { start_voting_view: None, @@ -1903,7 +1907,7 @@ mod test { let now = OffsetDateTime::now_utc().unix_timestamp() as u64; let mut upgrades = std::collections::BTreeMap::new(); - type MySequencerVersions = SequencerVersions, StaticVersion<0, 3>>; + type MySequencerVersions = SequencerVersions; let mode = UpgradeMode::Time(TimeBasedUpgrade { start_proposing_time: Timestamp::from_integer(now).unwrap(), @@ -1912,7 +1916,7 @@ mod test { stop_voting_time: None, }); - let upgrade_type = UpgradeType::Fee { + let upgrade_type = UpgradeType::Marketplace { chain_config: ChainConfig { max_block_size: 400.into(), base_fee: 2.into(), @@ -1985,6 +1989,7 @@ mod test { _ => continue, } }; + tracing::info!(?new_version_first_view, "seen upgrade proposal"); let client: Client = Client::new(format!("http://localhost:{port}").parse().unwrap()); @@ -2016,8 +2021,11 @@ mod test { .map(|state| state.chain_config.resolve()) .collect(); + tracing::info!(?height, ?new_version_first_view, "checking config"); + // ChainConfigs will eventually be resolved if let Some(configs) = configs { + tracing::info!(?configs, "configs"); if height > new_version_first_view { for config in configs { assert_eq!(config, chain_config_upgrade); @@ -2054,7 +2062,7 @@ mod test { .state(Default::default()) .status(Default::default()), ) - .persistences(persistence) + .persistences(persistence.clone()) .network_config(TestConfigBuilder::default().l1_url(l1).build()) .build(); let mut network = TestNetwork::new(config, MockSequencerVersions::new()).await; @@ -2111,12 +2119,7 @@ mod test { let port = pick_unused_port().expect("No ports free"); let anvil = Anvil::new().spawn(); let l1 = anvil.endpoint().parse().unwrap(); - let persistence: [_; NUM_NODES] = storage - .iter() - .map(::persistence_options) - .collect::>() - .try_into() - .unwrap(); + let config = TestNetworkConfigBuilder::default() .api_config( SqlDataSource::options(&storage[0], Options::with_port(port)) diff --git a/sequencer/src/api/data_source.rs b/sequencer/src/api/data_source.rs index 34d50af1ba..d26dce301c 100644 --- a/sequencer/src/api/data_source.rs +++ b/sequencer/src/api/data_source.rs @@ -5,7 +5,7 @@ use async_trait::async_trait; use committable::Commitment; use espresso_types::{ v0::traits::{PersistenceOptions, SequencerPersistence}, - v0_3::ChainConfig, + v0_99::ChainConfig, FeeAccount, FeeAccountProof, FeeMerkleTree, NodeState, PubKey, Transaction, }; use futures::future::Future; diff --git a/sequencer/src/api/sql.rs b/sequencer/src/api/sql.rs index 9231dd9981..70ad06bee0 100644 --- a/sequencer/src/api/sql.rs +++ b/sequencer/src/api/sql.rs @@ -3,7 +3,7 @@ use async_trait::async_trait; use committable::{Commitment, Committable}; use espresso_types::{ get_l1_deposits, - v0_3::{ChainConfig, IterableFeeInfo}, + v0_99::{ChainConfig, IterableFeeInfo}, BlockMerkleTree, FeeAccount, FeeMerkleTree, Leaf2, NodeState, ValidatedState, }; use hotshot::traits::ValidatedState as _; @@ -64,6 +64,7 @@ impl SequencerDataSource for DataSource { if let Some(limit) = fetch_limit { builder = builder.with_rate_limit(limit); } + if let Some(delay) = active_fetch_delay { builder = builder.with_active_fetch_delay(delay); } @@ -455,12 +456,23 @@ mod impl_testable_data_source { use crate::api::{self, data_source::testing::TestableSequencerDataSource}; fn tmp_options(db: &TmpDb) -> Options { - Options { - port: Some(db.port()), - host: Some(db.host()), - user: Some("postgres".into()), - password: Some("password".into()), - ..Default::default() + #[cfg(not(feature = "embedded-db"))] + { + let opt = crate::persistence::sql::PostgresOptions { + port: Some(db.port()), + host: Some(db.host()), + user: Some("postgres".into()), + password: Some("password".into()), + ..Default::default() + }; + + opt.into() + } + + #[cfg(feature = "embedded-db")] + { + let opt = crate::persistence::sql::SqliteOptions { path: db.path() }; + opt.into() } } diff --git a/sequencer/src/bin/dev-rollup.rs b/sequencer/src/bin/dev-rollup.rs index ab06212e99..19736da728 100644 --- a/sequencer/src/bin/dev-rollup.rs +++ b/sequencer/src/bin/dev-rollup.rs @@ -4,7 +4,7 @@ use anyhow::Result; use clap::{Parser, Subcommand}; use committable::Committable; use espresso_types::{ - v0_3::{RollupRegistration, RollupRegistrationBody, RollupUpdate, RollupUpdatebody}, + v0_99::{RollupRegistration, RollupRegistrationBody, RollupUpdate, RollupUpdatebody}, MarketplaceVersion, SeqTypes, Update, }; use hotshot::types::BLSPubKey; diff --git a/sequencer/src/bin/espresso-dev-node.rs b/sequencer/src/bin/espresso-dev-node.rs index 2a45ad7d44..a6e19d41c9 100644 --- a/sequencer/src/bin/espresso-dev-node.rs +++ b/sequencer/src/bin/espresso-dev-node.rs @@ -541,9 +541,8 @@ mod tests { use espresso_types::{BlockMerkleTree, Header, SeqTypes, Transaction}; use ethers::{providers::Middleware, types::U256}; use futures::{StreamExt, TryStreamExt}; - use hotshot_query_service::{ - availability::{BlockQueryData, TransactionQueryData, VidCommonQueryData}, - data_source::sql::testing::TmpDb, + use hotshot_query_service::availability::{ + BlockQueryData, TransactionQueryData, VidCommonQueryData, }; use jf_merkle_tree::MerkleTreeScheme; use portpicker::pick_unused_port; @@ -580,20 +579,16 @@ mod tests { setup_test(); let builder_port = pick_unused_port().unwrap(); - let api_port = pick_unused_port().unwrap(); - let dev_node_port = pick_unused_port().unwrap(); - let instance = AnvilOptions::default().spawn().await; let l1_url = instance.url(); - let db = TmpDb::init().await; - let postgres_port = db.port(); + let tmp_dir = tempfile::tempdir().unwrap(); let process = CargoBuild::new() .bin("espresso-dev-node") - .features("testing") + .features("testing embedded-db") .current_target() .run() .unwrap() @@ -601,16 +596,13 @@ mod tests { .env("ESPRESSO_SEQUENCER_L1_PROVIDER", l1_url.to_string()) .env("ESPRESSO_BUILDER_PORT", builder_port.to_string()) .env("ESPRESSO_SEQUENCER_API_PORT", api_port.to_string()) - .env("ESPRESSO_SEQUENCER_POSTGRES_HOST", "localhost") .env("ESPRESSO_SEQUENCER_ETH_MNEMONIC", TEST_MNEMONIC) .env("ESPRESSO_DEPLOYER_ACCOUNT_INDEX", "0") .env("ESPRESSO_DEV_NODE_PORT", dev_node_port.to_string()) .env( - "ESPRESSO_SEQUENCER_POSTGRES_PORT", - postgres_port.to_string(), + "ESPRESSO_SEQUENCER_STORAGE_PATH", + tmp_dir.path().as_os_str(), ) - .env("ESPRESSO_SEQUENCER_POSTGRES_USER", "postgres") - .env("ESPRESSO_SEQUENCER_POSTGRES_PASSWORD", "password") .spawn() .unwrap(); @@ -853,7 +845,6 @@ mod tests { } drop(process); - drop(db); } async fn alt_chain_providers() -> (Vec, Vec) { @@ -895,12 +886,11 @@ mod tests { .collect::>() .join(","); - let db = TmpDb::init().await; - let postgres_port = db.port(); + let tmp_dir = tempfile::tempdir().unwrap(); let process = CargoBuild::new() .bin("espresso-dev-node") - .features("testing") + .features("testing embedded-db") .current_target() .run() .unwrap() @@ -908,20 +898,17 @@ mod tests { .env("ESPRESSO_SEQUENCER_L1_PROVIDER", l1_url.to_string()) .env("ESPRESSO_BUILDER_PORT", builder_port.to_string()) .env("ESPRESSO_SEQUENCER_API_PORT", api_port.to_string()) - .env("ESPRESSO_SEQUENCER_POSTGRES_HOST", "localhost") .env("ESPRESSO_SEQUENCER_ETH_MNEMONIC", TEST_MNEMONIC) .env("ESPRESSO_DEPLOYER_ACCOUNT_INDEX", "0") .env("ESPRESSO_DEV_NODE_PORT", dev_node_port.to_string()) - .env( - "ESPRESSO_SEQUENCER_POSTGRES_PORT", - postgres_port.to_string(), - ) - .env("ESPRESSO_SEQUENCER_POSTGRES_USER", "postgres") - .env("ESPRESSO_SEQUENCER_POSTGRES_PASSWORD", "password") .env( "ESPRESSO_DEPLOYER_ALT_CHAIN_PROVIDERS", alt_chains_env_value, ) + .env( + "ESPRESSO_SEQUENCER_STORAGE_PATH", + tmp_dir.path().as_os_str(), + ) .spawn() .unwrap(); @@ -1036,6 +1023,5 @@ mod tests { drop(process); drop(alt_providers); - drop(db); } } diff --git a/sequencer/src/bin/nasty-client.rs b/sequencer/src/bin/nasty-client.rs index 7fff64412e..a28dc82c5c 100644 --- a/sequencer/src/bin/nasty-client.rs +++ b/sequencer/src/bin/nasty-client.rs @@ -18,7 +18,7 @@ use clap::Parser; use committable::Committable; use derivative::Derivative; use espresso_types::{ - parse_duration, v0_3::IterableFeeInfo, BlockMerkleTree, FeeMerkleTree, Header, SeqTypes, + parse_duration, v0_99::IterableFeeInfo, BlockMerkleTree, FeeMerkleTree, Header, SeqTypes, }; use futures::{ future::{FutureExt, TryFuture, TryFutureExt}, diff --git a/sequencer/src/block/full_payload/payload.rs b/sequencer/src/block/full_payload/payload.rs index bc1101887e..bf2398c656 100644 --- a/sequencer/src/block/full_payload/payload.rs +++ b/sequencer/src/block/full_payload/payload.rs @@ -88,7 +88,6 @@ impl Payload { fn from_transactions_sync( transactions: impl IntoIterator>::Transaction> + Send, chain_config: ChainConfig, - _instance_state: &>::Instance, ) -> Result< (Self, >::Metadata), >::Error, @@ -102,7 +101,7 @@ impl Payload { // add each tx to its namespace let mut ns_builders = BTreeMap::::new(); for tx in transactions.into_iter() { - // accounting for block byte length limit + // accounting for block byte length limit block_byte_len += tx.size_in_block(!ns_builders.contains_key(&tx.namespace())); if block_byte_len > max_block_byte_len { tracing::warn!("transactions truncated to fit in maximum block byte length {max_block_byte_len}"); diff --git a/sequencer/src/block/namespace_payload/iter.rs b/sequencer/src/block/namespace_payload/iter.rs index 09da31b9ad..cf136f76eb 100644 --- a/sequencer/src/block/namespace_payload/iter.rs +++ b/sequencer/src/block/namespace_payload/iter.rs @@ -54,7 +54,7 @@ impl<'a> Iter<'a> { } } -impl<'a> Iterator for Iter<'a> { +impl Iterator for Iter<'_> { type Item = Index; fn next(&mut self) -> Option { diff --git a/sequencer/src/catchup.rs b/sequencer/src/catchup.rs index 0c5283c649..ccfe74322c 100644 --- a/sequencer/src/catchup.rs +++ b/sequencer/src/catchup.rs @@ -4,11 +4,10 @@ use anyhow::{bail, Context}; use async_trait::async_trait; use committable::Commitment; use committable::Committable; +use espresso_types::traits::SequencerPersistence; use espresso_types::{ - v0::traits::{PersistenceOptions, StateCatchup}, - v0_3::ChainConfig, - BackoffParams, BlockMerkleTree, FeeAccount, FeeAccountProof, FeeMerkleCommitment, - FeeMerkleTree, Leaf2, NodeState, + v0::traits::StateCatchup, v0_99::ChainConfig, BackoffParams, BlockMerkleTree, FeeAccount, + FeeAccountProof, FeeMerkleCommitment, FeeMerkleTree, Leaf2, NodeState, }; use futures::future::{Future, FutureExt}; use hotshot_types::{ @@ -53,10 +52,10 @@ impl Client { /// A catchup implementation that falls back to a remote provider, but prefers a local provider when /// supported. pub(crate) async fn local_and_remote( - local_opt: impl PersistenceOptions, + persistence: impl SequencerPersistence, remote: impl StateCatchup + 'static, ) -> Arc { - match local_opt.create_catchup_provider(*remote.backoff()).await { + match persistence.into_catchup_provider(*remote.backoff()) { Ok(local) => Arc::new(vec![local, Arc::new(remote)]), Err(err) => { tracing::warn!("not using local catchup: {err:#}"); diff --git a/sequencer/src/genesis.rs b/sequencer/src/genesis.rs index 8f0e24417f..9c9f6c4d60 100644 --- a/sequencer/src/genesis.rs +++ b/sequencer/src/genesis.rs @@ -5,7 +5,7 @@ use std::{ use anyhow::Context; use espresso_types::{ - v0_3::ChainConfig, FeeAccount, FeeAmount, GenesisHeader, L1BlockInfo, L1Client, Timestamp, + v0_99::ChainConfig, FeeAccount, FeeAmount, GenesisHeader, L1BlockInfo, L1Client, Timestamp, Upgrade, UpgradeType, }; use ethers::types::H160; diff --git a/sequencer/src/lib.rs b/sequencer/src/lib.rs index ba7e56ef2b..bba6356ad3 100644 --- a/sequencer/src/lib.rs +++ b/sequencer/src/lib.rs @@ -7,16 +7,17 @@ mod external_event_handler; pub mod options; pub mod state_signature; +mod restart_tests; + mod message_compat_tests; use anyhow::Context; use catchup::StatePeers; use context::{ProposalFetcherConfig, SequencerContext}; use espresso_types::{ - traits::EventConsumer, BackoffParams, L1Client, L1ClientOptions, NodeState, PubKey, SeqTypes, + traits::EventConsumer, BackoffParams, L1ClientOptions, NodeState, PubKey, SeqTypes, SolverAuctionResultsProvider, ValidatedState, }; -use ethers::types::U256; use futures::FutureExt; use genesis::L1Finalized; use hotshot::traits::election::static_committee::StaticCommittee; @@ -32,7 +33,7 @@ use url::Url; pub mod persistence; pub mod state; use derivative::Derivative; -use espresso_types::v0::traits::{PersistenceOptions, SequencerPersistence}; +use espresso_types::v0::traits::SequencerPersistence; pub use genesis::Genesis; use hotshot::traits::implementations::{ derive_libp2p_multiaddr, CombinedNetworks, GossipConfig, Libp2pNetwork, RequestResponseConfig, @@ -50,13 +51,11 @@ use hotshot_orchestrator::client::OrchestratorClient; use hotshot_types::{ data::ViewNumber, light_client::{StateKeyPair, StateSignKey}, - network::NetworkConfig, signature_key::{BLSPrivKey, BLSPubKey}, traits::{ metrics::Metrics, - network::{ConnectedNetwork, Topic}, + network::ConnectedNetwork, node_implementation::{NodeImplementation, NodeType, Versions}, - signature_key::{BuilderSignatureKey, StakeTableEntryType}, }, utils::BuilderCommitment, ValidatorConfig, @@ -64,10 +63,13 @@ use hotshot_types::{ pub use options::Options; use serde::{Deserialize, Serialize}; use std::time::Duration; -use std::{collections::BTreeMap, fmt::Debug, marker::PhantomData}; +use std::{fmt::Debug, marker::PhantomData}; use vbs::version::{StaticVersion, StaticVersionType}; pub mod network; +mod run; +pub use run::main; + /// The Sequencer node is generic over the hotshot CommChannel. #[derive(Derivative, Serialize, Deserialize)] #[derivative( @@ -186,19 +188,19 @@ pub struct L1Params { } #[allow(clippy::too_many_arguments)] -pub async fn init_node( +pub async fn init_node( genesis: Genesis, network_params: NetworkParams, metrics: &dyn Metrics, - persistence_opt: P, + persistence: P, l1_params: L1Params, seq_versions: V, event_consumer: impl EventConsumer + 'static, is_da: bool, identity: Identity, - marketplace_config: MarketplaceConfig>, + marketplace_config: MarketplaceConfig>, proposal_fetcher_config: ProposalFetcherConfig, -) -> anyhow::Result> { +) -> anyhow::Result> { // Expose git information via status API. metrics .text_family( @@ -299,7 +301,6 @@ pub async fn init_node( // Print the libp2p public key info!("Starting Libp2p with PeerID: {}", libp2p_public_key); - let persistence = persistence_opt.clone().create().await?; let (mut network_config, wait_for_orchestrator) = match ( persistence.load_config().await?, network_params.config_peers, @@ -504,7 +505,7 @@ pub async fn init_node( genesis_state, l1_genesis: Some(l1_genesis), peers: catchup::local_and_remote( - persistence_opt, + persistence.clone(), StatePeers::::from_urls( network_params.state_peers, network_params.catchup_backoff, @@ -545,15 +546,20 @@ pub fn empty_builder_commitment() -> BuilderCommitment { #[cfg(any(test, feature = "testing"))] pub mod testing { - use std::{collections::HashMap, time::Duration}; + use std::{ + collections::{BTreeMap, HashMap}, + time::Duration, + }; use catchup::NullStateCatchup; use committable::Committable; use espresso_types::{ eth_signature_key::EthKeyPair, v0::traits::{EventConsumer, NullEventConsumer, PersistenceOptions, StateCatchup}, - Event, FeeAccount, MarketplaceVersion, PubKey, SeqTypes, Transaction, Upgrade, + Event, FeeAccount, L1Client, MarketplaceVersion, NetworkConfig, PubKey, SeqTypes, + Transaction, Upgrade, }; + use ethers::types::U256; use futures::{ future::join_all, stream::{Stream, StreamExt}, @@ -569,9 +575,12 @@ pub mod testing { use hotshot_testing::block_builder::{ BuilderTask, SimpleBuilderImplementation, TestBuilderImplementation, }; + use hotshot_types::traits::network::Topic; + use hotshot_types::traits::signature_key::StakeTableEntryType; use hotshot_types::{ event::LeafInfo, light_client::{CircuitField, StateKeyPair, StateVerKey}, + traits::signature_key::BuilderSignatureKey, traits::{block_contents::BlockHeader, metrics::NoMetrics, stake_table::StakeTableScheme}, HotShotConfig, PeerConfig, }; @@ -892,7 +901,7 @@ pub mod testing { &self, i: usize, mut state: ValidatedState, - persistence_opt: P, + mut persistence_opt: P, catchup: impl StateCatchup + 'static, metrics: &dyn Metrics, stake_table_capacity: u64, @@ -931,11 +940,13 @@ pub mod testing { let builder_account = Self::builder_key().fee_account(); tracing::info!(%builder_account, "prefunding builder account"); state.prefund_account(builder_account, U256::max_value().into()); + + let persistence = persistence_opt.create().await.unwrap(); let node_state = NodeState::new( i as u64, state.chain_config.resolve().unwrap_or_default(), L1Client::new(self.l1_url.clone()).await.unwrap(), - catchup::local_and_remote(persistence_opt.clone(), catchup).await, + catchup::local_and_remote(persistence.clone(), catchup).await, V::Base::VERSION, ) .with_current_version(V::Base::version()) @@ -954,6 +965,8 @@ pub mod testing { state_key = %my_peer_config.state_ver_key, "starting node", ); + + let persistence = persistence_opt.create().await.unwrap(); SequencerContext::init( NetworkConfig { config, @@ -964,7 +977,7 @@ pub mod testing { validator_config, membership, node_state, - persistence_opt.create().await.unwrap(), + persistence, network, self.state_relay_url.clone(), metrics, diff --git a/sequencer/src/main.rs b/sequencer/src/main.rs index c494929985..ef15b568ea 100644 --- a/sequencer/src/main.rs +++ b/sequencer/src/main.rs @@ -1,379 +1,4 @@ -use std::sync::Arc; - -use clap::Parser; -use espresso_types::{ - traits::NullEventConsumer, FeeVersion, MarketplaceVersion, SequencerVersions, - SolverAuctionResultsProvider, V0_0, -}; -use futures::future::FutureExt; -use hotshot::MarketplaceConfig; -use hotshot_types::traits::{metrics::NoMetrics, node_implementation::Versions}; -use sequencer::{ - api::{self, data_source::DataSourceOptions}, - context::SequencerContext, - init_node, network, - options::{Modules, Options}, - persistence, Genesis, L1Params, NetworkParams, -}; -use vbs::version::StaticVersionType; - #[tokio::main] -async fn main() -> anyhow::Result<()> { - let opt = Options::parse(); - opt.logging.init(); - - let modules = opt.modules(); - tracing::warn!(?modules, "sequencer starting up"); - - let genesis = Genesis::from_file(&opt.genesis_file)?; - - // validate that the fee contract is a proxy and panic otherwise - genesis - .validate_fee_contract(opt.l1_provider_url.to_string()) - .await - .unwrap(); - - tracing::info!(?genesis, "genesis"); - - let base = genesis.base_version; - let upgrade = genesis.upgrade_version; - - match (base, upgrade) { - (FeeVersion::VERSION, MarketplaceVersion::VERSION) => { - run( - genesis, - modules, - opt, - SequencerVersions::::new(), - ) - .await - } - (FeeVersion::VERSION, _) => { - run( - genesis, - modules, - opt, - SequencerVersions::::new(), - ) - .await - } - (MarketplaceVersion::VERSION, _) => { - run( - genesis, - modules, - opt, - SequencerVersions::::new(), - ) - .await - } - _ => panic!( - "Invalid base ({base}) and upgrade ({upgrade}) versions specified in the toml file." - ), - } -} - -async fn run( - genesis: Genesis, - mut modules: Modules, - opt: Options, - versions: V, -) -> anyhow::Result<()> -where - V: Versions, -{ - if let Some(storage) = modules.storage_fs.take() { - run_with_storage(genesis, modules, opt, storage, versions).await - } else if let Some(storage) = modules.storage_sql.take() { - run_with_storage(genesis, modules, opt, storage, versions).await - } else { - // Persistence is required. If none is provided, just use the local file system. - run_with_storage( - genesis, - modules, - opt, - persistence::fs::Options::default(), - versions, - ) - .await - } -} - -async fn run_with_storage( - genesis: Genesis, - modules: Modules, - opt: Options, - storage_opt: S, - versions: V, -) -> anyhow::Result<()> -where - S: DataSourceOptions, - V: Versions, -{ - let ctx = init_with_storage(genesis, modules, opt, storage_opt, versions).await?; - - // Start doing consensus. - ctx.start_consensus().await; - ctx.join().await; - - Ok(()) -} - -async fn init_with_storage( - genesis: Genesis, - modules: Modules, - opt: Options, - storage_opt: S, - versions: V, -) -> anyhow::Result> -where - S: DataSourceOptions, - V: Versions, -{ - let (private_staking_key, private_state_key) = opt.private_keys()?; - let l1_params = L1Params { - url: opt.l1_provider_url, - options: opt.l1_options, - }; - - let network_params = NetworkParams { - cdn_endpoint: opt.cdn_endpoint, - libp2p_advertise_address: opt.libp2p_advertise_address, - libp2p_bind_address: opt.libp2p_bind_address, - libp2p_bootstrap_nodes: opt.libp2p_bootstrap_nodes, - orchestrator_url: opt.orchestrator_url, - state_relay_server_url: opt.state_relay_server_url, - public_api_url: opt.public_api_url, - private_staking_key, - private_state_key, - state_peers: opt.state_peers, - config_peers: opt.config_peers, - catchup_backoff: opt.catchup_backoff, - libp2p_history_gossip: opt.libp2p_history_gossip, - libp2p_history_length: opt.libp2p_history_length, - libp2p_max_ihave_length: opt.libp2p_max_ihave_length, - libp2p_max_ihave_messages: opt.libp2p_max_ihave_messages, - libp2p_max_gossip_transmit_size: opt.libp2p_max_gossip_transmit_size, - libp2p_max_direct_transmit_size: opt.libp2p_max_direct_transmit_size, - libp2p_mesh_outbound_min: opt.libp2p_mesh_outbound_min, - libp2p_mesh_n: opt.libp2p_mesh_n, - libp2p_mesh_n_high: opt.libp2p_mesh_n_high, - libp2p_heartbeat_interval: opt.libp2p_heartbeat_interval, - libp2p_mesh_n_low: opt.libp2p_mesh_n_low, - libp2p_published_message_ids_cache_time: opt.libp2p_published_message_ids_cache_time, - libp2p_iwant_followup_time: opt.libp2p_iwant_followup_time, - libp2p_max_messages_per_rpc: opt.libp2p_max_messages_per_rpc, - libp2p_gossip_retransmission: opt.libp2p_gossip_retransmission, - libp2p_flood_publish: opt.libp2p_flood_publish, - libp2p_duplicate_cache_time: opt.libp2p_duplicate_cache_time, - libp2p_fanout_ttl: opt.libp2p_fanout_ttl, - libp2p_heartbeat_initial_delay: opt.libp2p_heartbeat_initial_delay, - libp2p_gossip_factor: opt.libp2p_gossip_factor, - libp2p_gossip_lazy: opt.libp2p_gossip_lazy, - }; - - let marketplace_config = MarketplaceConfig { - auction_results_provider: Arc::new(SolverAuctionResultsProvider { - url: opt.auction_results_solver_url, - marketplace_path: opt.marketplace_solver_path, - results_path: opt.auction_results_path, - }), - fallback_builder_url: opt.fallback_builder_url, - }; - let proposal_fetcher_config = opt.proposal_fetcher_config; - - // Initialize HotShot. If the user requested the HTTP module, we must initialize the handle in - // a special way, in order to populate the API with consensus metrics. Otherwise, we initialize - // the handle directly, with no metrics. - let ctx = match modules.http { - Some(http_opt) => { - // Add optional API modules as requested. - let mut http_opt = api::Options::from(http_opt); - if let Some(query) = modules.query { - http_opt = storage_opt.enable_query_module(http_opt, query); - } - if let Some(submit) = modules.submit { - http_opt = http_opt.submit(submit); - } - if let Some(status) = modules.status { - http_opt = http_opt.status(status); - } - if let Some(state) = modules.state { - http_opt = http_opt.state(state); - } - if let Some(catchup) = modules.catchup { - http_opt = http_opt.catchup(catchup); - } - - if let Some(hotshot_events) = modules.hotshot_events { - http_opt = http_opt.hotshot_events(hotshot_events); - } - if let Some(explorer) = modules.explorer { - http_opt = http_opt.explorer(explorer); - } - if let Some(config) = modules.config { - http_opt = http_opt.config(config); - } - - http_opt - .serve(move |metrics, consumer| { - async move { - init_node( - genesis, - network_params, - &*metrics, - storage_opt, - l1_params, - versions, - consumer, - opt.is_da, - opt.identity, - marketplace_config, - proposal_fetcher_config, - ) - .await - } - .boxed() - }) - .await? - } - None => { - init_node( - genesis, - network_params, - &NoMetrics, - storage_opt, - l1_params, - versions, - NullEventConsumer, - opt.is_da, - opt.identity, - marketplace_config, - proposal_fetcher_config, - ) - .await? - } - }; - - Ok(ctx) -} - -mod restart_tests; - -#[cfg(test)] -mod test { - use std::time::Duration; - - use tokio::spawn; - - use espresso_types::{MockSequencerVersions, PubKey}; - use hotshot_types::{light_client::StateKeyPair, traits::signature_key::SignatureKey}; - use portpicker::pick_unused_port; - use sequencer::{ - api::options::{Http, Status}, - genesis::{L1Finalized, StakeTableConfig}, - persistence::fs, - SequencerApiVersion, - }; - use sequencer_utils::test_utils::setup_test; - use surf_disco::{error::ClientError, Client, Url}; - use tempfile::TempDir; - use vbs::version::Version; - - use super::*; - - #[tokio::test(flavor = "multi_thread")] - async fn test_startup_before_orchestrator() { - setup_test(); - - let (pub_key, priv_key) = PubKey::generated_from_seed_indexed([0; 32], 0); - let state_key = StateKeyPair::generate_from_seed_indexed([0; 32], 0); - - let port = pick_unused_port().unwrap(); - let tmp = TempDir::new().unwrap(); - - let genesis_file = tmp.path().join("genesis.toml"); - let genesis = Genesis { - chain_config: Default::default(), - stake_table: StakeTableConfig { capacity: 10 }, - accounts: Default::default(), - l1_finalized: L1Finalized::Number { number: 0 }, - header: Default::default(), - upgrades: Default::default(), - base_version: Version { major: 0, minor: 1 }, - upgrade_version: Version { major: 0, minor: 2 }, - }; - genesis.to_file(&genesis_file).unwrap(); - - let modules = Modules { - http: Some(Http::with_port(port)), - status: Some(Status), - ..Default::default() - }; - let opt = Options::parse_from([ - "sequencer", - "--private-staking-key", - &priv_key.to_tagged_base64().expect("valid key").to_string(), - "--private-state-key", - &state_key - .sign_key_ref() - .to_tagged_base64() - .expect("valid key") - .to_string(), - "--genesis-file", - &genesis_file.display().to_string(), - ]); - - // Start the sequencer in a background task. This process will not complete, because it will - // be waiting for the orchestrator, but it should at least start up the API server and - // populate some metrics. - tracing::info!(port, "starting sequencer"); - let task = spawn(async move { - if let Err(err) = init_with_storage( - genesis, - modules, - opt, - fs::Options::new(tmp.path().into()), - MockSequencerVersions::new(), - ) - .await - { - tracing::error!("failed to start sequencer: {err:#}"); - } - }); - - // The healthcheck should eventually come up even though the node is waiting for the - // orchestrator. - tracing::info!("waiting for API to start"); - let url: Url = format!("http://localhost:{port}").parse().unwrap(); - let client = Client::::new(url.clone()); - assert!(client.connect(Some(Duration::from_secs(60))).await); - client.get::<()>("healthcheck").send().await.unwrap(); - - // The metrics should include information about the node and software version. surf-disco - // doesn't currently support fetching a plaintext file, so we use a raw reqwest client. - let res = reqwest::get(url.join("/status/metrics").unwrap()) - .await - .unwrap(); - assert!(res.status().is_success(), "{}", res.status()); - let metrics = res.text().await.unwrap(); - let lines = metrics.lines().collect::>(); - assert!( - lines.contains(&format!("consensus_node{{key=\"{pub_key}\"}} 1").as_str()), - "{lines:#?}" - ); - assert!( - lines.contains( - &format!( - "consensus_version{{desc=\"{}\",rev=\"{}\",timestamp=\"{}\"}} 1", - env!("VERGEN_GIT_DESCRIBE"), - env!("VERGEN_GIT_SHA"), - env!("VERGEN_GIT_COMMIT_TIMESTAMP"), - ) - .as_str() - ), - "{lines:#?}" - ); - - task.abort(); - } +pub async fn main() -> anyhow::Result<()> { + sequencer::main().await } diff --git a/sequencer/src/message_compat_tests.rs b/sequencer/src/message_compat_tests.rs index 78b7110049..9500a6fc85 100755 --- a/sequencer/src/message_compat_tests.rs +++ b/sequencer/src/message_compat_tests.rs @@ -59,10 +59,8 @@ async fn test_message_compat(_ver: Ver) { let (sender, priv_key) = PubKey::generated_from_seed_indexed(Default::default(), 0); let signature = PubKey::sign(&priv_key, &[]).unwrap(); - let membership = StaticCommittee::new( - vec![], /* no eligible leaders */ - vec![PeerConfig::default()], /* one committee member, necessary to generate a VID share */ - ); + let committee = vec![PeerConfig::default()]; /* one committee member, necessary to generate a VID share */ + let membership = StaticCommittee::new(committee.clone(), committee); let upgrade_data = UpgradeProposalData { old_version: Version { major: 0, minor: 1 }, new_version: Version { major: 1, minor: 0 }, diff --git a/sequencer/src/persistence.rs b/sequencer/src/persistence.rs index a15632fb55..48cdb49210 100644 --- a/sequencer/src/persistence.rs +++ b/sequencer/src/persistence.rs @@ -10,7 +10,7 @@ use async_trait::async_trait; use committable::Committable; -use espresso_types::{v0_3::ChainConfig, Leaf, Leaf2}; +use espresso_types::{v0_99::ChainConfig, Leaf, Leaf2}; use hotshot_types::{consensus::CommitmentMap, data::QuorumProposal}; pub mod fs; diff --git a/sequencer/src/persistence/fs.rs b/sequencer/src/persistence/fs.rs index 5385db22d7..2ff68d2483 100644 --- a/sequencer/src/persistence/fs.rs +++ b/sequencer/src/persistence/fs.rs @@ -64,10 +64,13 @@ impl Options { impl PersistenceOptions for Options { type Persistence = Persistence; - async fn create(self) -> anyhow::Result { + async fn create(&mut self) -> anyhow::Result { + let path = self.path.clone(); + let store_undecided_state = self.store_undecided_state; + Ok(Persistence { - store_undecided_state: self.store_undecided_state, - inner: Arc::new(RwLock::new(Inner { path: self.path })), + store_undecided_state, + inner: Arc::new(RwLock::new(Inner { path })), }) } diff --git a/sequencer/src/persistence/no_storage.rs b/sequencer/src/persistence/no_storage.rs index 41bbf9fe54..0b1e4cd44f 100644 --- a/sequencer/src/persistence/no_storage.rs +++ b/sequencer/src/persistence/no_storage.rs @@ -29,7 +29,7 @@ pub struct Options; impl PersistenceOptions for Options { type Persistence = NoStorage; - async fn create(self) -> anyhow::Result { + async fn create(&mut self) -> anyhow::Result { Ok(NoStorage) } diff --git a/sequencer/src/persistence/sql.rs b/sequencer/src/persistence/sql.rs index c68edb2bc1..6f402c0c4d 100644 --- a/sequencer/src/persistence/sql.rs +++ b/sequencer/src/persistence/sql.rs @@ -3,17 +3,18 @@ use async_trait::async_trait; use clap::Parser; use committable::Committable; use derivative::Derivative; +use derive_more::derive::{From, Into}; use espresso_types::{ parse_duration, v0::traits::{EventConsumer, PersistenceOptions, SequencerPersistence, StateCatchup}, BackoffParams, Leaf, Leaf2, NetworkConfig, Payload, }; use futures::stream::StreamExt; -use hotshot_query_service::data_source::storage::sql::Write; +use hotshot_query_service::data_source::storage::sql::{syntax_helpers::MAX_FN, Db}; use hotshot_query_service::data_source::{ storage::{ pruning::PrunerCfg, - sql::{include_migrations, query_as, Config, SqlStorage, Transaction}, + sql::{include_migrations, query_as, Config, SqlStorage}, }, Transaction as _, VersionedDataSource, }; @@ -31,8 +32,7 @@ use hotshot_types::{ use jf_vid::VidScheme; use sqlx::Row; use sqlx::{query, Executor}; -use std::sync::Arc; -use std::{collections::BTreeMap, time::Duration}; +use std::{collections::BTreeMap, path::PathBuf, str::FromStr, sync::Arc, time::Duration}; use crate::{catchup::SqlStateCatchup, SeqTypes, ViewNumber}; @@ -41,21 +41,7 @@ use super::{downgrade_commitment_map, downgrade_leaf, upgrade_commitment_map}; /// Options for Postgres-backed persistence. #[derive(Parser, Clone, Derivative, Default)] #[derivative(Debug)] -pub struct Options { - /// Postgres URI. - /// - /// This is a shorthand for setting a number of other options all at once. The URI has the - /// following format ([brackets] indicate optional segments): - /// - /// postgres[ql]://[username[:password]@][host[:port],]/database[?parameter_list] - /// - /// Options set explicitly via other env vars or flags will take precedence, so you can use this - /// URI to set a baseline and then use other parameters to override or add configuration. In - /// addition, there are some parameters which cannot be set via the URI, such as TLS. - // Hide from debug output since may contain sensitive data. - #[derivative(Debug = "ignore")] - pub(crate) uri: Option, - +pub struct PostgresOptions { /// Hostname for the remote Postgres database server. #[clap(long, env = "ESPRESSO_SEQUENCER_POSTGRES_HOST")] pub(crate) host: Option, @@ -81,6 +67,59 @@ pub struct Options { /// Use TLS for an encrypted connection to the database. #[clap(long, env = "ESPRESSO_SEQUENCER_POSTGRES_USE_TLS")] pub(crate) use_tls: bool, +} + +#[derive(Parser, Clone, Derivative, Default, From, Into)] +#[derivative(Debug)] +pub struct SqliteOptions { + /// Base directory for the SQLite database. + /// The SQLite file will be created in the `sqlite` subdirectory with filename as `database`. + #[clap( + long, + env = "ESPRESSO_SEQUENCER_STORAGE_PATH", + value_parser = build_sqlite_path + )] + pub(crate) path: PathBuf, +} + +pub fn build_sqlite_path(path: &str) -> anyhow::Result { + let sub_dir = PathBuf::from_str(path)?.join("sqlite"); + + // if `sqlite` sub dir does not exist then create it + if !sub_dir.exists() { + std::fs::create_dir_all(&sub_dir) + .with_context(|| format!("failed to create directory: {:?}", sub_dir))?; + } + + Ok(sub_dir.join("database")) +} + +/// Options for database-backed persistence, supporting both Postgres and SQLite. +#[derive(Parser, Clone, Derivative, Default, From, Into)] +#[derivative(Debug)] +pub struct Options { + #[cfg(not(feature = "embedded-db"))] + #[clap(flatten)] + pub(crate) postgres_options: PostgresOptions, + + #[cfg(feature = "embedded-db")] + #[clap(flatten)] + pub(crate) sqlite_options: SqliteOptions, + + /// Database URI for Postgres or SQLite. + /// + /// This is a shorthand for setting a number of other options all at once. The URI has the + /// following format ([brackets] indicate optional segments): + /// + /// - **Postgres:** `postgres[ql]://[username[:password]@][host[:port],]/database[?parameter_list]` + /// - **SQLite:** `sqlite://path/to/db.sqlite` + /// + /// Options set explicitly via other env vars or flags will take precedence, so you can use this + /// URI to set a baseline and then use other parameters to override or add configuration. In + /// addition, there are some parameters which cannot be set via the URI, such as TLS. + // Hide from debug output since may contain sensitive data. + #[derivative(Debug = "ignore")] + pub(crate) uri: Option, /// This will enable the pruner and set the default pruning parameters unless provided. /// Default parameters: @@ -125,7 +164,7 @@ pub struct Options { /// /// Any connection which has been open and unused longer than this duration will be /// automatically closed to reduce load on the server. - #[clap(long, env = "ESPRESSO_SEQUENCER_POSTGRES_IDLE_CONNECTION_TIMEOUT", value_parser = parse_duration, default_value = "10m")] + #[clap(long, env = "ESPRESSO_SEQUENCER_DATABASE_IDLE_CONNECTION_TIMEOUT", value_parser = parse_duration, default_value = "10m")] pub(crate) idle_connection_timeout: Duration, /// The maximum lifetime of a database connection. @@ -134,9 +173,12 @@ pub struct Options { /// (and, if needed, replaced), even if it is otherwise healthy. It is good practice to refresh /// even healthy connections once in a while (e.g. daily) in case of resource leaks in the /// server implementation. - #[clap(long, env = "ESPRESSO_SEQUENCER_POSTGRES_CONNECTION_TIMEOUT", value_parser = parse_duration, default_value = "30m")] + #[clap(long, env = "ESPRESSO_SEQUENCER_DATABASE_CONNECTION_TIMEOUT", value_parser = parse_duration, default_value = "30m")] pub(crate) connection_timeout: Duration, + #[clap(long, env = "ESPRESSO_SEQUENCER_DATABASE_SLOW_STATEMENT_THRESHOLD", value_parser = parse_duration, default_value = "1s")] + pub(crate) slow_statement_threshold: Duration, + /// The minimum number of database connections to maintain at any time. /// /// The database client will, to the best of its ability, maintain at least `min` open @@ -144,7 +186,7 @@ pub struct Options { /// connections when at least this many simultaneous connections are frequently needed. #[clap( long, - env = "ESPRESSO_SEQUENCER_POSTGRES_MIN_CONNECTIONS", + env = "ESPRESSO_SEQUENCER_DATABASE_MIN_CONNECTIONS", default_value = "0" )] pub(crate) min_connections: u32, @@ -155,41 +197,162 @@ pub struct Options { /// (or begin a transaction) will block until one of the existing connections is released. #[clap( long, - env = "ESPRESSO_SEQUENCER_POSTGRES_MAX_CONNECTIONS", + env = "ESPRESSO_SEQUENCER_DATABASE_MAX_CONNECTIONS", default_value = "25" )] pub(crate) max_connections: u32, -} -impl TryFrom for Config { - type Error = anyhow::Error; + // Keep the database connection pool when persistence is created, + // allowing it to be reused across multiple instances instead of creating + // a new pool each time such as for API, consensus storage etc + // This also ensures all storage instances adhere to the MAX_CONNECTIONS limit if set + // + // Note: Cloning the `Pool` is lightweight and efficient because it simply + // creates a new reference-counted handle to the underlying pool state. + #[clap(skip)] + pub(crate) pool: Option>, +} - fn try_from(opt: Options) -> Result { - let mut cfg = match opt.uri { - Some(uri) => uri.parse()?, - None => Self::default(), - }; - cfg = cfg.migrations(include_migrations!("$CARGO_MANIFEST_DIR/api/migrations")); +#[cfg(not(feature = "embedded-db"))] +impl From for Config { + fn from(opt: PostgresOptions) -> Self { + let mut cfg = Config::default(); if let Some(host) = opt.host { cfg = cfg.host(host); } + if let Some(port) = opt.port { cfg = cfg.port(port); } + if let Some(database) = &opt.database { cfg = cfg.database(database); } + if let Some(user) = &opt.user { cfg = cfg.user(user); } + if let Some(password) = &opt.password { cfg = cfg.password(password); } + if opt.use_tls { cfg = cfg.tls(); } + cfg = cfg.max_connections(20); + cfg = cfg.idle_connection_timeout(Duration::from_secs(120)); + cfg = cfg.connection_timeout(Duration::from_secs(10240)); + cfg = cfg.slow_statement_threshold(Duration::from_secs(1)); + + cfg + } +} + +#[cfg(feature = "embedded-db")] +impl From for Config { + fn from(opt: SqliteOptions) -> Self { + let mut cfg = Config::default(); + + cfg = cfg.db_path(opt.path); + cfg = cfg.max_connections(20); + cfg = cfg.idle_connection_timeout(Duration::from_secs(120)); + cfg = cfg.connection_timeout(Duration::from_secs(10240)); + cfg = cfg.slow_statement_threshold(Duration::from_secs(2)); + cfg + } +} + +#[cfg(not(feature = "embedded-db"))] +impl From for Options { + fn from(opt: PostgresOptions) -> Self { + Options { + postgres_options: opt, + max_connections: 20, + idle_connection_timeout: Duration::from_secs(120), + connection_timeout: Duration::from_secs(10240), + slow_statement_threshold: Duration::from_secs(1), + ..Default::default() + } + } +} + +#[cfg(feature = "embedded-db")] +impl From for Options { + fn from(opt: SqliteOptions) -> Self { + Options { + sqlite_options: opt, + max_connections: 10, + idle_connection_timeout: Duration::from_secs(120), + connection_timeout: Duration::from_secs(10240), + slow_statement_threshold: Duration::from_secs(1), + ..Default::default() + } + } +} +impl TryFrom for Config { + type Error = anyhow::Error; + + fn try_from(opt: Options) -> Result { + let mut cfg = match opt.uri { + Some(uri) => uri.parse()?, + None => Self::default(), + }; + + if let Some(pool) = opt.pool { + cfg = cfg.pool(pool); + } + + cfg = cfg.max_connections(opt.max_connections); + cfg = cfg.idle_connection_timeout(opt.idle_connection_timeout); + cfg = cfg.min_connections(opt.min_connections); + cfg = cfg.connection_timeout(opt.connection_timeout); + cfg = cfg.slow_statement_threshold(opt.slow_statement_threshold); + + #[cfg(not(feature = "embedded-db"))] + { + cfg = cfg.migrations(include_migrations!( + "$CARGO_MANIFEST_DIR/api/migrations/postgres" + )); + + let pg_options = opt.postgres_options; + + if let Some(host) = pg_options.host { + cfg = cfg.host(host); + } + + if let Some(port) = pg_options.port { + cfg = cfg.port(port); + } + + if let Some(database) = &pg_options.database { + cfg = cfg.database(database); + } + + if let Some(user) = &pg_options.user { + cfg = cfg.user(user); + } + + if let Some(password) = &pg_options.password { + cfg = cfg.password(password); + } + + if pg_options.use_tls { + cfg = cfg.tls(); + } + } + + #[cfg(feature = "embedded-db")] + { + cfg = cfg.migrations(include_migrations!( + "$CARGO_MANIFEST_DIR/api/migrations/sqlite" + )); + + cfg = cfg.db_path(opt.sqlite_options.path); + } + if opt.prune { cfg = cfg.pruner_cfg(PrunerCfg::from(opt.pruning))?; } @@ -271,6 +434,7 @@ impl From for PrunerCfg { if let Some(interval) = opt.interval { cfg = cfg.with_interval(interval); } + cfg } } @@ -279,12 +443,15 @@ impl From for PrunerCfg { impl PersistenceOptions for Options { type Persistence = Persistence; - async fn create(self) -> anyhow::Result { + async fn create(&mut self) -> anyhow::Result { + let store_undecided_state = self.store_undecided_state; + let config = self.clone().try_into()?; let persistence = Persistence { - store_undecided_state: self.store_undecided_state, - db: SqlStorage::connect(self.try_into()?).await?, + store_undecided_state, + db: SqlStorage::connect(config).await?, }; persistence.migrate_quorum_proposal_leaf_hashes().await?; + self.pool = Some(persistence.db.pool()); Ok(persistence) } @@ -295,6 +462,7 @@ impl PersistenceOptions for Options { } /// Postgres-backed persistence. +#[derive(Clone)] pub struct Persistence { db: SqlStorage, store_undecided_state: bool, @@ -309,17 +477,20 @@ impl Persistence { /// and if so we populate the column manually. async fn migrate_quorum_proposal_leaf_hashes(&self) -> anyhow::Result<()> { let mut tx = self.db.write().await?; + let mut proposals = tx.fetch("SELECT * FROM quorum_proposals"); + let mut updates = vec![]; while let Some(row) = proposals.next().await { let row = row?; + let hash: Option = row.try_get("leaf_hash")?; if hash.is_none() { let view: i64 = row.try_get("view")?; let data: Vec = row.try_get("data")?; - let proposal: Proposal> = + let proposal: Proposal> = bincode::deserialize(&data)?; - let leaf = Leaf::from_quorum_proposal(&proposal.data); + let leaf = Leaf2::from_quorum_proposal(&proposal.data); let leaf_hash = Committable::commit(&leaf); tracing::info!(view, %leaf_hash, "populating quorum proposal leaf hash"); updates.push((view, leaf_hash.to_string())); @@ -329,6 +500,7 @@ impl Persistence { tx.upsert("quorum_proposals", ["view", "leaf_hash"], ["view"], updates) .await?; + tx.commit().await } } @@ -361,7 +533,7 @@ impl SequencerPersistence for Persistence { } async fn save_config(&self, cfg: &NetworkConfig) -> anyhow::Result<()> { - tracing::info!("saving config to Postgres"); + tracing::info!("saving config to database"); let json = serde_json::to_value(cfg)?; let mut tx = self.db.write().await?; @@ -406,8 +578,8 @@ impl SequencerPersistence for Persistence { // Generate an event for the new leaves and, only if it succeeds, clean up data we no longer // need. let consumer = dyn_clone::clone(consumer); - let tx = self.db.write().await?; - if let Err(err) = collect_garbage(tx, view, consumer).await { + + if let Err(err) = collect_garbage(self, view, consumer).await { // GC/event processing failure is not an error, since by this point we have at least // managed to persist the decided leaves successfully, and GC will just run again at the // next decide. Log an error but do not return it. @@ -608,12 +780,14 @@ impl SequencerPersistence for Persistence { if !matches!(action, HotShotAction::Propose | HotShotAction::Vote) { return Ok(()); } - let stmt = " - INSERT INTO highest_voted_view (id, view) VALUES (0, $1) - ON CONFLICT (id) DO UPDATE SET view = GREATEST(highest_voted_view.view, excluded.view)"; + + let stmt = format!( + "INSERT INTO highest_voted_view (id, view) VALUES (0, $1) + ON CONFLICT (id) DO UPDATE SET view = {MAX_FN}(highest_voted_view.view, excluded.view)" + ); let mut tx = self.db.write().await?; - tx.execute(query(stmt).bind(view.u64() as i64)).await?; + tx.execute(query(&stmt).bind(view.u64() as i64)).await?; tx.commit().await } async fn update_undecided_state( @@ -711,17 +885,21 @@ impl SequencerPersistence for Persistence { } async fn collect_garbage( - mut tx: Transaction, + storage: &Persistence, view: ViewNumber, consumer: impl EventConsumer, ) -> anyhow::Result<()> { - // Clean up and collect VID shares. - + // In SQLite, overlapping read and write transactions can lead to database errors. + // To avoid this: + // - start a read transaction to query and collect all the necessary data. + // - Commit (or implicitly drop) the read transaction once the data is fetched. + // - use the collected data to generate a "decide" event for the consumer. + // - begin a write transaction to delete the data and update the event stream. + let mut tx = storage.db.read().await?; + + // collect VID shares. let mut vid_shares = tx - .fetch_all( - query("DELETE FROM vid_share where view <= $1 RETURNING view, data") - .bind(view.u64() as i64), - ) + .fetch_all(query("SELECT * FROM vid_share where view <= $1").bind(view.u64() as i64)) .await? .into_iter() .map(|row| { @@ -733,12 +911,9 @@ async fn collect_garbage( }) .collect::>>()?; - // Clean up and collect DA proposals. + // collect DA proposals. let mut da_proposals = tx - .fetch_all( - query("DELETE FROM da_proposal where view <= $1 RETURNING view, data") - .bind(view.u64() as i64), - ) + .fetch_all(query("SELECT * FROM da_proposal where view <= $1").bind(view.u64() as i64)) .await? .into_iter() .map(|row| { @@ -750,10 +925,7 @@ async fn collect_garbage( }) .collect::>>()?; - // Clean up and collect leaves, except do not delete the most recent leaf: we need to remember - // this so that in case we restart, we can pick up from the last decided leaf. We still do - // include this leaf in the query results (the `UNION` clause) so we can include it in the - // decide event we send to the consumer. + // collect leaves let mut leaves = tx .fetch_all( query("SELECT view, leaf, qc FROM anchor_leaf WHERE view <= $1") @@ -764,21 +936,13 @@ async fn collect_garbage( .map(|row| { let view: i64 = row.get("view"); let leaf_data: Vec = row.get("leaf"); - let leaf = bincode::deserialize::(&leaf_data)?; + let leaf = bincode::deserialize::(&leaf_data)?; let qc_data: Vec = row.get("qc"); - let qc = bincode::deserialize::>(&qc_data)?; + let qc = bincode::deserialize::>(&qc_data)?; Ok((view as u64, (leaf, qc))) }) .collect::>>()?; - tx.execute(query("DELETE FROM anchor_leaf WHERE view < $1").bind(view.u64() as i64)) - .await?; - - // Clean up old proposals. These are not part of the decide event we generate for the consumer, - // so we don't need to return them. - tx.execute(query("DELETE FROM quorum_proposals where view <= $1").bind(view.u64() as i64)) - .await?; - // Exclude from the decide event any leaves which have definitely already been processed. We may // have selected an already-processed leaf because the oldest leaf -- the last leaf processed in // the previous decide event -- remained in the database to serve as the anchor leaf, so our @@ -814,6 +978,8 @@ async fn collect_garbage( leaves }; + drop(tx); + // Generate a decide event for each leaf, to be processed by the event consumer. We make a // separate event for each leaf because it is possible we have non-consecutive leaves in our // storage, which would not be valid as a single decide with a single leaf chain. @@ -837,7 +1003,7 @@ async fn collect_garbage( } let leaf_info = LeafInfo { - leaf, + leaf: leaf.into(), vid_share, // Note: the following fields are not used in Decide event processing, and @@ -851,13 +1017,14 @@ async fn collect_garbage( view_number: ViewNumber::new(view), event: EventType::Decide { leaf_chain: Arc::new(vec![leaf_info]), - qc: Arc::new(qc), + qc: Arc::new(qc.to_qc2()), block_size: None, }, }) .await?; } + let mut tx = storage.db.write().await?; // Now that we have definitely processed leaves up to `view`, we can update // `last_processed_view` so we don't process these leaves again. We may still fail at this // point, or shut down, and fail to complete this update. At worst this will lead to us sending @@ -871,6 +1038,22 @@ async fn collect_garbage( ) .await?; + tx.execute(query("DELETE FROM vid_share where view <= $1").bind(view.u64() as i64)) + .await?; + + tx.execute(query("DELETE FROM da_proposal where view <= $1").bind(view.u64() as i64)) + .await?; + + // Clean up leaves, but do not delete the most recent one (all leaves with a view number less than the given value). + // This is necessary to ensure that, in case of a restart, we can resume from the last decided leaf. + tx.execute(query("DELETE FROM anchor_leaf WHERE view < $1").bind(view.u64() as i64)) + .await?; + + // Clean up old proposals. These are not part of the decide event we generate for the consumer, + // so we don't need to return them. + tx.execute(query("DELETE FROM quorum_proposals where view <= $1").bind(view.u64() as i64)) + .await?; + tx.commit().await } @@ -882,23 +1065,31 @@ mod testing { #[async_trait] impl TestablePersistence for Persistence { - type Storage = TmpDb; + type Storage = Arc; async fn tmp_storage() -> Self::Storage { - TmpDb::init().await + Arc::new(TmpDb::init().await) } async fn connect(db: &Self::Storage) -> Self { - Options { - port: Some(db.port()), - host: Some(db.host()), - user: Some("postgres".into()), - password: Some("password".into()), - ..Default::default() + #[cfg(not(feature = "embedded-db"))] + { + let mut opt: Options = PostgresOptions { + port: Some(db.port()), + host: Some(db.host()), + user: Some("postgres".into()), + password: Some("password".into()), + ..Default::default() + } + .into(); + opt.create().await.unwrap() + } + + #[cfg(feature = "embedded-db")] + { + let mut opt: Options = SqliteOptions { path: db.path() }.into(); + opt.create().await.unwrap() } - .create() - .await - .unwrap() } } } diff --git a/sequencer/src/restart_tests.rs b/sequencer/src/restart_tests.rs old mode 100644 new mode 100755 index 50732daaf7..574fdd7212 --- a/sequencer/src/restart_tests.rs +++ b/sequencer/src/restart_tests.rs @@ -1,12 +1,20 @@ #![cfg(test)] use super::*; +use crate::{ + api::{self, data_source::testing::TestableSequencerDataSource, options::Query}, + genesis::{L1Finalized, StakeTableConfig}, + network::cdn::{TestingDef, WrappedSignatureKey}, + testing::wait_for_decide_on_handle, + SequencerApiVersion, +}; use anyhow::bail; use cdn_broker::{reexports::crypto::signature::KeyPair, Broker, Config as BrokerConfig}; use cdn_marshal::{Config as MarshalConfig, Marshal}; +use clap::Parser; use derivative::Derivative; use espresso_types::{ - eth_signature_key::EthKeyPair, traits::PersistenceOptions, v0_3::ChainConfig, FeeAccount, + eth_signature_key::EthKeyPair, traits::PersistenceOptions, v0_99::ChainConfig, FeeAccount, MockSequencerVersions, PrivKey, PubKey, SeqTypes, Transaction, }; use ethers::utils::{Anvil, AnvilInstance}; @@ -27,18 +35,9 @@ use hotshot_types::{ traits::{node_implementation::ConsensusTime, signature_key::SignatureKey}, }; use itertools::Itertools; +use options::Modules; use portpicker::pick_unused_port; -use sequencer::{ - api::{ - self, - data_source::testing::TestableSequencerDataSource, - options::{Http, Query}, - }, - genesis::{L1Finalized, StakeTableConfig}, - network::cdn::{TestingDef, WrappedSignatureKey}, - testing::wait_for_decide_on_handle, - SequencerApiVersion, -}; +use run::init_with_storage; use sequencer_utils::test_utils::setup_test; use std::{collections::HashSet, path::Path, time::Duration}; use surf_disco::{error::ClientError, Url}; @@ -247,7 +246,7 @@ impl TestNode { let storage = S::create_storage().await; let mut modules = Modules { - http: Some(Http::with_port(node.api_port)), + http: Some(api::options::Http::with_port(node.api_port)), status: Some(Default::default()), catchup: Some(Default::default()), ..Default::default() diff --git a/sequencer/src/run.rs b/sequencer/src/run.rs new file mode 100644 index 0000000000..a7f864e12d --- /dev/null +++ b/sequencer/src/run.rs @@ -0,0 +1,378 @@ +use std::sync::Arc; + +use super::{ + api::{self, data_source::DataSourceOptions}, + context::SequencerContext, + init_node, network, + options::{Modules, Options}, + persistence, Genesis, L1Params, NetworkParams, +}; +use clap::Parser; +use espresso_types::{ + traits::NullEventConsumer, FeeVersion, MarketplaceVersion, SequencerVersions, + SolverAuctionResultsProvider, V0_0, +}; +use futures::future::FutureExt; +use hotshot::MarketplaceConfig; +use hotshot_types::traits::{metrics::NoMetrics, node_implementation::Versions}; +use vbs::version::StaticVersionType; + +pub async fn main() -> anyhow::Result<()> { + let opt = Options::parse(); + opt.logging.init(); + + let modules = opt.modules(); + tracing::warn!(?modules, "sequencer starting up"); + + let genesis = Genesis::from_file(&opt.genesis_file)?; + + // validate that the fee contract is a proxy and panic otherwise + genesis + .validate_fee_contract(opt.l1_provider_url.to_string()) + .await + .unwrap(); + + tracing::info!(?genesis, "genesis"); + + let base = genesis.base_version; + let upgrade = genesis.upgrade_version; + + match (base, upgrade) { + (FeeVersion::VERSION, MarketplaceVersion::VERSION) => { + run( + genesis, + modules, + opt, + SequencerVersions::::new(), + ) + .await + } + (FeeVersion::VERSION, _) => { + run( + genesis, + modules, + opt, + SequencerVersions::::new(), + ) + .await + } + (MarketplaceVersion::VERSION, _) => { + run( + genesis, + modules, + opt, + SequencerVersions::::new(), + ) + .await + } + _ => panic!( + "Invalid base ({base}) and upgrade ({upgrade}) versions specified in the toml file." + ), + } +} + +async fn run( + genesis: Genesis, + mut modules: Modules, + opt: Options, + versions: V, +) -> anyhow::Result<()> +where + V: Versions, +{ + if let Some(storage) = modules.storage_fs.take() { + run_with_storage(genesis, modules, opt, storage, versions).await + } else if let Some(storage) = modules.storage_sql.take() { + run_with_storage(genesis, modules, opt, storage, versions).await + } else { + // Persistence is required. If none is provided, just use the local file system. + run_with_storage( + genesis, + modules, + opt, + persistence::fs::Options::default(), + versions, + ) + .await + } +} + +async fn run_with_storage( + genesis: Genesis, + modules: Modules, + opt: Options, + storage_opt: S, + versions: V, +) -> anyhow::Result<()> +where + S: DataSourceOptions, + V: Versions, +{ + let ctx = init_with_storage(genesis, modules, opt, storage_opt, versions).await?; + + // Start doing consensus. + ctx.start_consensus().await; + ctx.join().await; + + Ok(()) +} + +pub(crate) async fn init_with_storage( + genesis: Genesis, + modules: Modules, + opt: Options, + mut storage_opt: S, + versions: V, +) -> anyhow::Result> +where + S: DataSourceOptions, + V: Versions, +{ + let (private_staking_key, private_state_key) = opt.private_keys()?; + let l1_params = L1Params { + url: opt.l1_provider_url, + options: opt.l1_options, + }; + + let network_params = NetworkParams { + cdn_endpoint: opt.cdn_endpoint, + libp2p_advertise_address: opt.libp2p_advertise_address, + libp2p_bind_address: opt.libp2p_bind_address, + libp2p_bootstrap_nodes: opt.libp2p_bootstrap_nodes, + orchestrator_url: opt.orchestrator_url, + state_relay_server_url: opt.state_relay_server_url, + public_api_url: opt.public_api_url, + private_staking_key, + private_state_key, + state_peers: opt.state_peers, + config_peers: opt.config_peers, + catchup_backoff: opt.catchup_backoff, + libp2p_history_gossip: opt.libp2p_history_gossip, + libp2p_history_length: opt.libp2p_history_length, + libp2p_max_ihave_length: opt.libp2p_max_ihave_length, + libp2p_max_ihave_messages: opt.libp2p_max_ihave_messages, + libp2p_max_gossip_transmit_size: opt.libp2p_max_gossip_transmit_size, + libp2p_max_direct_transmit_size: opt.libp2p_max_direct_transmit_size, + libp2p_mesh_outbound_min: opt.libp2p_mesh_outbound_min, + libp2p_mesh_n: opt.libp2p_mesh_n, + libp2p_mesh_n_high: opt.libp2p_mesh_n_high, + libp2p_heartbeat_interval: opt.libp2p_heartbeat_interval, + libp2p_mesh_n_low: opt.libp2p_mesh_n_low, + libp2p_published_message_ids_cache_time: opt.libp2p_published_message_ids_cache_time, + libp2p_iwant_followup_time: opt.libp2p_iwant_followup_time, + libp2p_max_messages_per_rpc: opt.libp2p_max_messages_per_rpc, + libp2p_gossip_retransmission: opt.libp2p_gossip_retransmission, + libp2p_flood_publish: opt.libp2p_flood_publish, + libp2p_duplicate_cache_time: opt.libp2p_duplicate_cache_time, + libp2p_fanout_ttl: opt.libp2p_fanout_ttl, + libp2p_heartbeat_initial_delay: opt.libp2p_heartbeat_initial_delay, + libp2p_gossip_factor: opt.libp2p_gossip_factor, + libp2p_gossip_lazy: opt.libp2p_gossip_lazy, + }; + + let marketplace_config = MarketplaceConfig { + auction_results_provider: Arc::new(SolverAuctionResultsProvider { + url: opt.auction_results_solver_url, + marketplace_path: opt.marketplace_solver_path, + results_path: opt.auction_results_path, + }), + fallback_builder_url: opt.fallback_builder_url, + }; + let proposal_fetcher_config = opt.proposal_fetcher_config; + + let persistence = storage_opt.create().await?; + + // Initialize HotShot. If the user requested the HTTP module, we must initialize the handle in + // a special way, in order to populate the API with consensus metrics. Otherwise, we initialize + // the handle directly, with no metrics. + let ctx = match modules.http { + Some(http_opt) => { + // Add optional API modules as requested. + let mut http_opt = api::Options::from(http_opt); + if let Some(query) = modules.query { + http_opt = storage_opt.enable_query_module(http_opt, query); + } + if let Some(submit) = modules.submit { + http_opt = http_opt.submit(submit); + } + if let Some(status) = modules.status { + http_opt = http_opt.status(status); + } + if let Some(state) = modules.state { + http_opt = http_opt.state(state); + } + if let Some(catchup) = modules.catchup { + http_opt = http_opt.catchup(catchup); + } + + if let Some(hotshot_events) = modules.hotshot_events { + http_opt = http_opt.hotshot_events(hotshot_events); + } + if let Some(explorer) = modules.explorer { + http_opt = http_opt.explorer(explorer); + } + if let Some(config) = modules.config { + http_opt = http_opt.config(config); + } + + http_opt + .serve(move |metrics, consumer| { + async move { + init_node( + genesis, + network_params, + &*metrics, + persistence, + l1_params, + versions, + consumer, + opt.is_da, + opt.identity, + marketplace_config, + proposal_fetcher_config, + ) + .await + } + .boxed() + }) + .await? + } + None => { + init_node( + genesis, + network_params, + &NoMetrics, + persistence, + l1_params, + versions, + NullEventConsumer, + opt.is_da, + opt.identity, + marketplace_config, + proposal_fetcher_config, + ) + .await? + } + }; + + Ok(ctx) +} + +#[cfg(test)] +mod test { + use std::time::Duration; + + use tokio::spawn; + + use crate::{ + api::options::{Http, Status}, + genesis::{L1Finalized, StakeTableConfig}, + persistence::fs, + SequencerApiVersion, + }; + use espresso_types::{MockSequencerVersions, PubKey}; + use hotshot_types::{light_client::StateKeyPair, traits::signature_key::SignatureKey}; + use portpicker::pick_unused_port; + use sequencer_utils::test_utils::setup_test; + use surf_disco::{error::ClientError, Client, Url}; + use tempfile::TempDir; + use vbs::version::Version; + + use super::*; + + #[tokio::test(flavor = "multi_thread")] + async fn test_startup_before_orchestrator() { + setup_test(); + + let (pub_key, priv_key) = PubKey::generated_from_seed_indexed([0; 32], 0); + let state_key = StateKeyPair::generate_from_seed_indexed([0; 32], 0); + + let port = pick_unused_port().unwrap(); + let tmp = TempDir::new().unwrap(); + + let genesis_file = tmp.path().join("genesis.toml"); + let genesis = Genesis { + chain_config: Default::default(), + stake_table: StakeTableConfig { capacity: 10 }, + accounts: Default::default(), + l1_finalized: L1Finalized::Number { number: 0 }, + header: Default::default(), + upgrades: Default::default(), + base_version: Version { major: 0, minor: 1 }, + upgrade_version: Version { major: 0, minor: 2 }, + }; + genesis.to_file(&genesis_file).unwrap(); + + let modules = Modules { + http: Some(Http::with_port(port)), + status: Some(Status), + ..Default::default() + }; + let opt = Options::parse_from([ + "sequencer", + "--private-staking-key", + &priv_key.to_tagged_base64().expect("valid key").to_string(), + "--private-state-key", + &state_key + .sign_key_ref() + .to_tagged_base64() + .expect("valid key") + .to_string(), + "--genesis-file", + &genesis_file.display().to_string(), + ]); + + // Start the sequencer in a background task. This process will not complete, because it will + // be waiting for the orchestrator, but it should at least start up the API server and + // populate some metrics. + tracing::info!(port, "starting sequencer"); + let task = spawn(async move { + if let Err(err) = init_with_storage( + genesis, + modules, + opt, + fs::Options::new(tmp.path().into()), + MockSequencerVersions::new(), + ) + .await + { + tracing::error!("failed to start sequencer: {err:#}"); + } + }); + + // The healthcheck should eventually come up even though the node is waiting for the + // orchestrator. + tracing::info!("waiting for API to start"); + let url: Url = format!("http://localhost:{port}").parse().unwrap(); + let client = Client::::new(url.clone()); + assert!(client.connect(Some(Duration::from_secs(60))).await); + client.get::<()>("healthcheck").send().await.unwrap(); + + // The metrics should include information about the node and software version. surf-disco + // doesn't currently support fetching a plaintext file, so we use a raw reqwest client. + let res = reqwest::get(url.join("/status/metrics").unwrap()) + .await + .unwrap(); + assert!(res.status().is_success(), "{}", res.status()); + let metrics = res.text().await.unwrap(); + let lines = metrics.lines().collect::>(); + assert!( + lines.contains(&format!("consensus_node{{key=\"{pub_key}\"}} 1").as_str()), + "{lines:#?}" + ); + assert!( + lines.contains( + &format!( + "consensus_version{{desc=\"{}\",rev=\"{}\",timestamp=\"{}\"}} 1", + env!("VERGEN_GIT_DESCRIBE"), + env!("VERGEN_GIT_SHA"), + env!("VERGEN_GIT_COMMIT_TIMESTAMP"), + ) + .as_str() + ), + "{lines:#?}" + ); + + task.abort(); + } +} diff --git a/sequencer/src/state.rs b/sequencer/src/state.rs index 57fda93c39..1347b9e80f 100644 --- a/sequencer/src/state.rs +++ b/sequencer/src/state.rs @@ -3,7 +3,7 @@ use std::{sync::Arc, time::Duration}; use anyhow::{bail, ensure, Context}; use espresso_types::{ - traits::StateCatchup, v0_3::ChainConfig, BlockMerkleTree, Delta, FeeAccount, FeeMerkleTree, + traits::StateCatchup, v0_99::ChainConfig, BlockMerkleTree, Delta, FeeAccount, FeeMerkleTree, Leaf2, ValidatedState, }; use futures::future::Future; @@ -166,6 +166,7 @@ where .write() .await .context("opening transaction for state update")?; + store_state_update(&mut tx, proposed_leaf.height(), &state, delta).await?; if parent_chain_config != state.chain_config { diff --git a/tests/common/mod.rs b/tests/common/mod.rs index 5b1bfcdfb2..52afd6496c 100644 --- a/tests/common/mod.rs +++ b/tests/common/mod.rs @@ -11,7 +11,7 @@ const L1_PROVIDER_RETRY_INTERVAL: Duration = Duration::from_secs(1); // TODO add to .env const RECIPIENT_ADDRESS: &str = "0x0000000000000000000000000000000000000000"; /// Duration in seconds to wait before declaring the chain deceased. -const SEQUENCER_BLOCKS_TIMEOUT: u64 = 120; +const SEQUENCER_BLOCKS_TIMEOUT: u64 = 300; #[derive(Clone, Debug)] pub struct TestConfig { @@ -113,7 +113,6 @@ impl TestConfig { let sequencer_clients = [ dotenvy::var("ESPRESSO_SEQUENCER_API_PORT")?, dotenvy::var("ESPRESSO_SEQUENCER1_API_PORT")?, - dotenvy::var("ESPRESSO_SEQUENCER2_API_PORT")?, ] .iter() .map(|port| url_from_port(port.clone()).unwrap()) diff --git a/tests/upgrades.rs b/tests/upgrades.rs index 1cbe2362c7..5d68938440 100644 --- a/tests/upgrades.rs +++ b/tests/upgrades.rs @@ -1,10 +1,10 @@ use crate::common::TestConfig; use anyhow::Result; use espresso_types::{FeeVersion, MarketplaceVersion}; -use futures::{stream, StreamExt}; +use futures::{future::join_all, StreamExt}; use vbs::version::StaticVersionType; -const SEQUENCER_BLOCKS_TIMEOUT: u64 = 120; +const SEQUENCER_BLOCKS_TIMEOUT: u64 = 200; #[tokio::test(flavor = "multi_thread")] async fn test_upgrade() -> Result<()> { @@ -28,30 +28,29 @@ async fn test_upgrade() -> Result<()> { // Test is limited to those sequencers with correct modules // enabled. It would be less fragile if we could discover them. - let subscriptions = vec![ - clients[0].subscribe_headers(0).await?, - clients[1].subscribe_headers(0).await?, - ]; - let subscriptions_size = subscriptions.len(); - let mut streams = stream::iter(subscriptions).flatten_unordered(None); + let subscriptions = join_all(clients.iter().map(|c| c.subscribe_headers(0))) + .await + .into_iter() + .collect::>>()?; - let mut upgraded_nodes: usize = 0; - while let Some(header) = streams.next().await { + let mut stream = futures::stream::iter(subscriptions).flatten_unordered(None); + + while let Some(header) = stream.next().await { let header = header.unwrap(); + println!( + "block: height={}, version={}", + header.height(), + header.version() + ); // TODO is it possible to discover the view at which upgrade should be finished? // First few views should be `Base` version. - if header.height() <= 5 { + if header.height() <= 20 { assert_eq!(header.version(), versions.0) } - // Track how many nodes have been upgraded if header.version() == versions.1 { - upgraded_nodes += 1; - } - - if upgraded_nodes == subscriptions_size { - println!("Upgrade succeeded @ height {}!", header.height()); + println!("header version matched! height={:?}", header.height()); break; } @@ -59,6 +58,7 @@ async fn test_upgrade() -> Result<()> { panic!("Exceeded maximum block height. Upgrade should have finished by now :("); } } + // TODO assert transactions are incrementing Ok(()) } diff --git a/types/src/reference_tests.rs b/types/src/reference_tests.rs index 7070983d27..5d77e13fd0 100755 --- a/types/src/reference_tests.rs +++ b/types/src/reference_tests.rs @@ -48,6 +48,7 @@ use crate::{ type V1Serializer = vbs::Serializer>; type V2Serializer = vbs::Serializer>; type V3Serializer = vbs::Serializer>; +type V99Serializer = vbs::Serializer>; async fn reference_payload() -> Payload { const NUM_NS_IDS: usize = 3; @@ -92,8 +93,8 @@ fn reference_l1_block() -> L1BlockInfo { const REFERENCE_L1_BLOCK_COMMITMENT: &str = "L1BLOCK~4HpzluLK2Isz3RdPNvNrDAyQcWOF2c9JeLZzVNLmfpQ9"; -fn reference_chain_config() -> crate::v0_3::ChainConfig { - crate::v0_3::ChainConfig { +fn reference_chain_config() -> crate::v0_99::ChainConfig { + crate::v0_99::ChainConfig { chain_id: 0x8a19.into(), max_block_size: 10240.into(), base_fee: 0.into(), @@ -106,7 +107,7 @@ fn reference_chain_config() -> crate::v0_3::ChainConfig { const REFERENCE_V1_CHAIN_CONFIG_COMMITMENT: &str = "CHAIN_CONFIG~L6HmMktJbvnEGgpmRrsiYvQmIBstSj9UtDM7eNFFqYFO"; -const REFERENCE_V3_CHAIN_CONFIG_COMMITMENT: &str = +const REFERENCE_V99_CHAIN_CONFIG_COMMITMENT: &str = "CHAIN_CONFIG~1mJTBiaJ0Nyuu4Ir5IZTamyI8CjexbktPkRr6R1rtnGh"; fn reference_fee_info() -> FeeInfo { @@ -154,7 +155,7 @@ async fn reference_header(version: Version) -> Header { const REFERENCE_V1_HEADER_COMMITMENT: &str = "BLOCK~dh1KpdvvxSvnnPpOi2yI3DOg8h6ltr2Kv13iRzbQvtN2"; const REFERENCE_V2_HEADER_COMMITMENT: &str = "BLOCK~V0GJjL19nCrlm9n1zZ6gaOKEekSMCT6uR5P-h7Gi6UJR"; -const REFERENCE_V3_HEADER_COMMITMENT: &str = "BLOCK~BGlAadiwOlxmhQxdp2HS7mHpG-ifDOx9ocBkTEJXx05_"; +const REFERENCE_V99_HEADER_COMMITMENT: &str = "BLOCK~BGlAadiwOlxmhQxdp2HS7mHpG-ifDOx9ocBkTEJXx05_"; fn reference_transaction(ns_id: NamespaceId, rng: &mut R) -> Transaction where @@ -232,6 +233,7 @@ change in the serialization of this data structure. "v1" => V1Serializer::serialize(&reference).unwrap(), "v2" => V2Serializer::serialize(&reference).unwrap(), "v3" => V3Serializer::serialize(&reference).unwrap(), + "v99" => V99Serializer::serialize(&reference).unwrap(), _ => panic!("invalid version"), }; if actual != expected { @@ -261,6 +263,7 @@ change in the serialization of this data structure. "v1" => V1Serializer::deserialize(&expected).unwrap(), "v2" => V2Serializer::deserialize(&expected).unwrap(), "v3" => V3Serializer::deserialize(&expected).unwrap(), + "v99" => V99Serializer::deserialize(&expected).unwrap(), _ => panic!("invalid version"), }; @@ -347,12 +350,12 @@ fn test_reference_v1_chain_config() { } #[test] -fn test_reference_v3_chain_config() { +fn test_reference_v99_chain_config() { reference_test( - "v3", + "v99", "chain_config", reference_chain_config(), - REFERENCE_V3_CHAIN_CONFIG_COMMITMENT, + REFERENCE_V99_CHAIN_CONFIG_COMMITMENT, ); } @@ -387,12 +390,12 @@ async fn test_reference_header_v2() { } #[tokio::test(flavor = "multi_thread")] -async fn test_reference_header_v3() { +async fn test_reference_header_v99() { reference_test( - "v3", + "v99", "header", - reference_header(StaticVersion::<0, 3>::version()).await, - REFERENCE_V3_HEADER_COMMITMENT, + reference_header(StaticVersion::<0, 99>::version()).await, + REFERENCE_V99_HEADER_COMMITMENT, ); } #[test] diff --git a/types/src/v0/header.rs b/types/src/v0/header.rs index 014d4938d4..1f07707d6d 100644 --- a/types/src/v0/header.rs +++ b/types/src/v0/header.rs @@ -4,7 +4,7 @@ use vbs::version::Version; use crate::{ v0_1::{self, ChainConfig}, - v0_2, v0_3, + v0_2, v0_3, v0_99, }; /// Each variant represents a specific minor version header. @@ -13,6 +13,7 @@ pub enum Header { V1(v0_1::Header), V2(v0_2::Header), V3(v0_3::Header), + V99(v0_99::Header), } /// Enum to represent the first field of different versions of a header diff --git a/types/src/v0/impls/auction.rs b/types/src/v0/impls/auction.rs index 0c6b860d76..ce5aa835d6 100644 --- a/types/src/v0/impls/auction.rs +++ b/types/src/v0/impls/auction.rs @@ -1,7 +1,7 @@ use super::{state::ValidatedState, MarketplaceVersion}; use crate::{ eth_signature_key::{EthKeyPair, SigningError}, - v0_3::{BidTx, BidTxBody, FullNetworkTx, SolverAuctionResults}, + v0_99::{BidTx, BidTxBody, FullNetworkTx, SolverAuctionResults}, FeeAccount, FeeAmount, FeeError, FeeInfo, NamespaceId, }; use anyhow::Context; @@ -93,7 +93,7 @@ impl BidTxBody { /// Sign Body and return a `BidTx`. This is the expected way to obtain a `BidTx`. /// ``` /// # use espresso_types::FeeAccount; - /// # use espresso_types::v0_3::BidTxBody; + /// # use espresso_types::v0_99::BidTxBody; /// /// BidTxBody::default().signed(&FeeAccount::test_key_pair()).unwrap(); /// ``` diff --git a/types/src/v0/impls/block/test.rs b/types/src/v0/impls/block/test.rs index 7eec8dbf9e..1f9d0b95ec 100755 --- a/types/src/v0/impls/block/test.rs +++ b/types/src/v0/impls/block/test.rs @@ -9,7 +9,7 @@ use rand::RngCore; use sequencer_utils::test_utils::setup_test; use crate::{ - v0_3::ChainConfig, BlockSize, NamespaceId, NodeState, NsProof, Payload, Transaction, TxProof, + v0_99::ChainConfig, BlockSize, NamespaceId, NodeState, NsProof, Payload, Transaction, TxProof, ValidatedState, }; diff --git a/types/src/v0/impls/chain_config.rs b/types/src/v0/impls/chain_config.rs index 4c755ed4c9..502f95a3d9 100644 --- a/types/src/v0/impls/chain_config.rs +++ b/types/src/v0/impls/chain_config.rs @@ -75,7 +75,7 @@ impl FromStringOrInteger for BlockSize { #[cfg(test)] mod tests { - use crate::v0_3::{ChainConfig, ResolvableChainConfig}; + use crate::v0_99::{ChainConfig, ResolvableChainConfig}; use super::*; diff --git a/types/src/v0/impls/fee_info.rs b/types/src/v0/impls/fee_info.rs index b1bce9e9ef..9110af8562 100644 --- a/types/src/v0/impls/fee_info.rs +++ b/types/src/v0/impls/fee_info.rs @@ -1,7 +1,3 @@ -// use crate::SeqTypes; - -use std::str::FromStr; - use anyhow::{bail, ensure, Context}; use ark_serialize::{ CanonicalDeserialize, CanonicalSerialize, Compress, Read, SerializationError, Valid, Validate, @@ -24,10 +20,11 @@ use num_traits::CheckedSub; use sequencer_utils::{ impl_serde_from_string_or_integer, impl_to_fixed_bytes, ser::FromStringOrInteger, }; +use std::str::FromStr; use thiserror::Error; use crate::{ - eth_signature_key::EthKeyPair, v0_3::IterableFeeInfo, AccountQueryData, FeeAccount, + eth_signature_key::EthKeyPair, v0_99::IterableFeeInfo, AccountQueryData, FeeAccount, FeeAccountProof, FeeAmount, FeeInfo, FeeMerkleCommitment, FeeMerkleProof, FeeMerkleTree, SeqTypes, }; diff --git a/types/src/v0/impls/header.rs b/types/src/v0/impls/header.rs index 894f4d332d..1577a2a38d 100644 --- a/types/src/v0/impls/header.rs +++ b/types/src/v0/impls/header.rs @@ -29,8 +29,8 @@ use crate::{ header::{EitherOrVersion, VersionedHeader}, MarketplaceVersion, }, - v0_1, v0_2, - v0_3::{self, ChainConfig, IterableFeeInfo, SolverAuctionResults}, + v0_1, v0_2, v0_3, + v0_99::{self, ChainConfig, IterableFeeInfo, SolverAuctionResults}, BlockMerkleCommitment, BuilderSignature, FeeAccount, FeeAmount, FeeInfo, FeeMerkleCommitment, Header, L1BlockInfo, L1Snapshot, Leaf2, NamespaceId, NsTable, SeqTypes, UpgradeType, }; @@ -80,6 +80,11 @@ impl Committable for Header { .u64_field("version_minor", 3) .field("fields", fields.commit()) .finalize(), + Self::V99(fields) => RawCommitmentBuilder::new(&Self::tag()) + .u64_field("version_major", 0) + .u64_field("version_minor", 3) + .field("fields", fields.commit()) + .finalize(), } } @@ -107,6 +112,14 @@ impl Serialize for Header { fields: fields.clone(), } .serialize(serializer), + Self::V99(fields) => VersionedHeader { + version: EitherOrVersion::Version(Version { + major: 0, + minor: 99, + }), + fields: fields.clone(), + } + .serialize(serializer), } } } @@ -152,6 +165,13 @@ impl<'de> Deserialize<'de> for Header { seq.next_element()? .ok_or_else(|| de::Error::missing_field("fields"))?, )), + EitherOrVersion::Version(Version { + major: 0, + minor: 99, + }) => Ok(Header::V99( + seq.next_element()? + .ok_or_else(|| de::Error::missing_field("fields"))?, + )), EitherOrVersion::Version(v) => { Err(serde::de::Error::custom(format!("invalid version {v:?}"))) } @@ -183,6 +203,12 @@ impl<'de> Deserialize<'de> for Header { EitherOrVersion::Version(Version { major: 0, minor: 3 }) => Ok(Header::V3( serde_json::from_value(fields.clone()).map_err(de::Error::custom)?, )), + EitherOrVersion::Version(Version { + major: 0, + minor: 99, + }) => Ok(Header::V99( + serde_json::from_value(fields.clone()).map_err(de::Error::custom)?, + )), EitherOrVersion::Version(v) => { Err(de::Error::custom(format!("invalid version {v:?}"))) } @@ -240,6 +266,10 @@ impl Header { Self::V1(_) => Version { major: 0, minor: 1 }, Self::V2(_) => Version { major: 0, minor: 2 }, Self::V3(_) => Version { major: 0, minor: 3 }, + Self::V99(_) => Version { + major: 0, + minor: 99, + }, } } #[allow(clippy::too_many_arguments)] @@ -299,7 +329,24 @@ impl Header { builder_signature: builder_signature.first().copied(), }), 3 => Self::V3(v0_3::Header { - chain_config: v0_3::ResolvableChainConfig::from(chain_config), + chain_config: v0_1::ResolvableChainConfig::from(v0_1::ChainConfig::from( + chain_config, + )), + height, + timestamp, + l1_head, + l1_finalized, + payload_commitment, + builder_commitment, + ns_table, + block_merkle_tree_root, + fee_merkle_tree_root, + fee_info: fee_info[0], // NOTE this is asserted to exist above + builder_signature: builder_signature.first().copied(), + }), + + 99 => Self::V99(v0_99::Header { + chain_config: v0_99::ResolvableChainConfig::from(chain_config), height, timestamp, l1_head, @@ -328,6 +375,7 @@ macro_rules! field { Self::V1(data) => &data.$name, Self::V2(data) => &data.$name, Self::V3(data) => &data.$name, + Self::V99(data) => &data.$name, } }; } @@ -338,6 +386,7 @@ macro_rules! field_mut { Self::V1(data) => &mut data.$name, Self::V2(data) => &mut data.$name, Self::V3(data) => &mut data.$name, + Self::V99(data) => &mut data.$name, } }; } @@ -501,6 +550,22 @@ impl Header { builder_signature: builder_signature.first().copied(), }), 3 => Self::V3(v0_3::Header { + chain_config: v0_1::ResolvableChainConfig::from(v0_1::ChainConfig::from( + chain_config, + )), + height, + timestamp, + l1_head: l1.head, + l1_finalized: l1.finalized, + payload_commitment, + builder_commitment, + ns_table, + block_merkle_tree_root, + fee_merkle_tree_root, + fee_info: fee_info[0], + builder_signature: builder_signature.first().copied(), + }), + 99 => Self::V99(v0_99::Header { chain_config: chain_config.into(), height, timestamp, @@ -551,11 +616,12 @@ impl Header { impl Header { /// A commitment to a ChainConfig or a full ChainConfig. - pub fn chain_config(&self) -> v0_3::ResolvableChainConfig { + pub fn chain_config(&self) -> v0_99::ResolvableChainConfig { match self { - Self::V1(fields) => v0_3::ResolvableChainConfig::from(&fields.chain_config), - Self::V2(fields) => v0_3::ResolvableChainConfig::from(&fields.chain_config), - Self::V3(fields) => fields.chain_config, + Self::V1(fields) => v0_99::ResolvableChainConfig::from(&fields.chain_config), + Self::V2(fields) => v0_99::ResolvableChainConfig::from(&fields.chain_config), + Self::V3(fields) => v0_99::ResolvableChainConfig::from(&fields.chain_config), + Self::V99(fields) => fields.chain_config, } } @@ -672,7 +738,8 @@ impl Header { match self { Self::V1(fields) => vec![fields.fee_info], Self::V2(fields) => vec![fields.fee_info], - Self::V3(fields) => fields.fee_info.clone(), + Self::V3(fields) => vec![fields.fee_info], + Self::V99(fields) => fields.fee_info.clone(), } } @@ -692,7 +759,8 @@ impl Header { // empty/non-empty Self::V1(fields) => fields.builder_signature.as_slice().to_vec(), Self::V2(fields) => fields.builder_signature.as_slice().to_vec(), - Self::V3(fields) => fields.builder_signature.clone(), + Self::V3(fields) => fields.builder_signature.as_slice().to_vec(), + Self::V99(fields) => fields.builder_signature.clone(), } } } @@ -722,7 +790,8 @@ impl BlockHeader for Header { match self { Self::V1(_) => None, Self::V2(_) => None, - Self::V3(fields) => Some(fields.auction_results.clone()), + Self::V3(_) => None, + Self::V99(fields) => Some(fields.auction_results.clone()), } } @@ -1590,7 +1659,7 @@ mod test_headers { let deserialized: Header = serde_json::from_str(&serialized).unwrap(); assert_eq!(v2_header, deserialized); - let v3_header = Header::create( + let v99_header = Header::create( genesis.instance_state.chain_config, 1, 2, @@ -1606,12 +1675,15 @@ mod test_headers { account: fee_account, }], Default::default(), - Version { major: 0, minor: 3 }, + Version { + major: 0, + minor: 99, + }, ); - let serialized = serde_json::to_string(&v3_header).unwrap(); + let serialized = serde_json::to_string(&v99_header).unwrap(); let deserialized: Header = serde_json::from_str(&serialized).unwrap(); - assert_eq!(v3_header, deserialized); + assert_eq!(v99_header, deserialized); let v1_bytes = BincodeSerializer::>::serialize(&v1_header).unwrap(); let deserialized: Header = @@ -1623,9 +1695,9 @@ mod test_headers { BincodeSerializer::>::deserialize(&v2_bytes).unwrap(); assert_eq!(v2_header, deserialized); - let v3_bytes = BincodeSerializer::>::serialize(&v3_header).unwrap(); + let v99_bytes = BincodeSerializer::>::serialize(&v99_header).unwrap(); let deserialized: Header = - BincodeSerializer::>::deserialize(&v3_bytes).unwrap(); - assert_eq!(v3_header, deserialized); + BincodeSerializer::>::deserialize(&v99_bytes).unwrap(); + assert_eq!(v99_header, deserialized); } } diff --git a/types/src/v0/impls/instance_state.rs b/types/src/v0/impls/instance_state.rs index b6385e81a4..71a387bbcb 100644 --- a/types/src/v0/impls/instance_state.rs +++ b/types/src/v0/impls/instance_state.rs @@ -1,11 +1,13 @@ use crate::v0::{ - retain_accounts, traits::StateCatchup, v0_3::ChainConfig, FeeMerkleTree, GenesisHeader, - L1BlockInfo, L1Client, PubKey, Timestamp, Upgrade, UpgradeMode, + traits::StateCatchup, v0_99::ChainConfig, GenesisHeader, L1BlockInfo, L1Client, PubKey, + Timestamp, Upgrade, UpgradeMode, }; use hotshot_types::traits::states::InstanceState; use hotshot_types::HotShotConfig; use std::{collections::BTreeMap, sync::Arc}; -use vbs::version::{StaticVersion, StaticVersionType, Version}; +use vbs::version::Version; +#[cfg(any(test, feature = "testing"))] +use vbs::version::{StaticVersion, StaticVersionType}; use super::state::ValidatedState; @@ -15,7 +17,7 @@ use super::state::ValidatedState; #[derive(derive_more::Debug, Clone)] pub struct NodeState { pub node_id: u64, - pub chain_config: crate::v0_3::ChainConfig, + pub chain_config: crate::v0_99::ChainConfig, pub l1_client: L1Client, #[debug("{}", peers.name())] pub peers: Arc, @@ -92,7 +94,7 @@ impl NodeState { } #[cfg(any(test, feature = "testing"))] - pub fn mock_v3() -> Self { + pub fn mock_v99() -> Self { use vbs::version::StaticVersion; Self::new( @@ -100,7 +102,7 @@ impl NodeState { ChainConfig::default(), L1Client::http("http://localhost:3331".parse().unwrap()), mock::MockStateCatchup::default(), - StaticVersion::<0, 3>::version(), + StaticVersion::<0, 99>::version(), ) } @@ -187,7 +189,10 @@ pub mod mock { use jf_merkle_tree::{ForgetableMerkleTreeScheme, MerkleTreeScheme}; use super::*; - use crate::{BackoffParams, BlockMerkleTree, FeeAccount, FeeMerkleCommitment}; + use crate::{ + retain_accounts, BackoffParams, BlockMerkleTree, FeeAccount, FeeMerkleCommitment, + FeeMerkleTree, + }; #[derive(Debug, Clone, Default)] pub struct MockStateCatchup { diff --git a/types/src/v0/impls/solver.rs b/types/src/v0/impls/solver.rs index ae7e3eb106..0e69223240 100644 --- a/types/src/v0/impls/solver.rs +++ b/types/src/v0/impls/solver.rs @@ -2,7 +2,7 @@ use committable::{Commitment, Committable}; use hotshot::types::SignatureKey; use super::{ - v0_3::{RollupRegistrationBody, RollupUpdatebody}, + v0_99::{RollupRegistrationBody, RollupUpdatebody}, Update, }; use crate::Update::Set; diff --git a/types/src/v0/impls/state.rs b/types/src/v0/impls/state.rs index 6867f0b94f..85fbb06146 100644 --- a/types/src/v0/impls/state.rs +++ b/types/src/v0/impls/state.rs @@ -31,7 +31,7 @@ use super::{ }; use crate::{ traits::StateCatchup, - v0_3::{ChainConfig, FullNetworkTx, IterableFeeInfo, ResolvableChainConfig}, + v0_99::{ChainConfig, FullNetworkTx, IterableFeeInfo, ResolvableChainConfig}, BlockMerkleTree, Delta, FeeAccount, FeeAmount, FeeInfo, FeeMerkleTree, Header, Leaf2, NsTableValidationError, PayloadByteLen, SeqTypes, UpgradeType, BLOCK_MERKLE_TREE_HEIGHT, FEE_MERKLE_TREE_HEIGHT, @@ -1073,8 +1073,8 @@ mod test { use super::*; use crate::{ eth_signature_key::{BuilderSignature, EthKeyPair}, - v0_1, v0_2, - v0_3::{self, BidTx}, + v0_1, v0_2, v0_3, + v0_99::{self, BidTx}, BlockSize, FeeAccountProof, FeeMerkleProof, Leaf, Payload, Transaction, }; @@ -1109,7 +1109,14 @@ mod test { timestamp: OffsetDateTime::now_utc().unix_timestamp() as u64, ..parent.clone() }), - Header::V3(_) => panic!("You called `Header.next()` on unimplemented version (v3)"), + Header::V3(parent) => Header::V3(v0_3::Header { + height: parent.height + 1, + timestamp: OffsetDateTime::now_utc().unix_timestamp() as u64, + ..parent.clone() + }), + Header::V99(_) => { + panic!("You called `Header.next()` on unimplemented version (v3)") + } } } /// Replaces builder signature w/ invalid one. @@ -1132,7 +1139,14 @@ mod test { builder_signature: Some(sig), ..header.clone() }), - Header::V3(_) => panic!("You called `Header.sign()` on unimplemented version (v3)"), + Header::V3(header) => Header::V3(v0_3::Header { + fee_info, + builder_signature: Some(sig), + ..header.clone() + }), + Header::V99(_) => { + panic!("You called `Header.sign()` on unimplemented version (v3)") + } } } @@ -1159,7 +1173,12 @@ mod test { builder_signature: Some(sig), ..parent.clone() }), - Header::V3(_) => panic!( + Header::V3(parent) => Header::V3(v0_3::Header { + fee_info, + builder_signature: Some(sig), + ..parent.clone() + }), + Header::V99(_) => panic!( "You called `Header.invalid_builder_signature()` on unimplemented version (v3)" ), } @@ -1768,6 +1787,11 @@ mod test { ..header }), Header::V3(header) => Header::V3(v0_3::Header { + builder_signature: Some(sig), + fee_info: FeeInfo::new(account, data), + ..header + }), + Header::V99(header) => Header::V99(v0_99::Header { builder_signature: vec![sig], fee_info: vec![FeeInfo::new(account, data)], ..header @@ -1783,7 +1807,7 @@ mod test { let max_block_size = 10; let validated_state = ValidatedState::default(); - let instance_state = NodeState::mock_v3().with_chain_config(ChainConfig { + let instance_state = NodeState::mock_v99().with_chain_config(ChainConfig { base_fee: 1000.into(), // High base fee max_block_size: max_block_size.into(), ..validated_state.chain_config.resolve().unwrap() @@ -1823,6 +1847,11 @@ mod test { ..header }), Header::V3(header) => Header::V3(v0_3::Header { + builder_signature: Some(sig), + fee_info: FeeInfo::new(account, data), + ..header + }), + Header::V99(header) => Header::V99(v0_99::Header { builder_signature: vec![sig], fee_info: vec![FeeInfo::new(account, data)], ..header diff --git a/types/src/v0/mod.rs b/types/src/v0/mod.rs index 60555c0ebb..99b926f57c 100644 --- a/types/src/v0/mod.rs +++ b/types/src/v0/mod.rs @@ -1,6 +1,7 @@ use std::marker::PhantomData; use hotshot::traits::election::static_committee::StaticCommittee; + use hotshot_types::{ data::{EpochNumber, ViewNumber}, signature_key::BLSPubKey, @@ -9,43 +10,61 @@ use hotshot_types::{ signature_key::SignatureKey, }, }; + use serde::{Deserialize, Serialize}; mod header; + mod impls; + pub mod traits; + mod utils; + pub use header::Header; + pub use impls::{ get_l1_deposits, retain_accounts, BuilderValidationError, FeeError, ProposalValidationError, StateValidationError, }; + pub use utils::*; + use vbs::version::{StaticVersion, StaticVersionType}; #[cfg(any(test, feature = "testing"))] pub use impls::mock; // This is the single source of truth for minor versions supported by this major version. + // + // It is written as a higher-level macro which takes a macro invocation as an argument and appends + // the comma-separated list of minor version identifiers to the arguments of the given invocation. + // This is to get around Rust's lazy macro expansion: this macro forces expansion of the given + // invocation. We would rather write something like `some_macro!(args, minor_versions!())`, but the + // `minor_versions!()` argument would not be expanded for pattern-matching in `some_macro!`, so + // instead we write `with_minor_versions!(some_macro!(args))`. + macro_rules! with_minor_versions { ($m:ident!($($arg:tt),*)) => { - $m!($($arg,)* v0_1, v0_2, v0_3); + $m!($($arg,)* v0_1, v0_2, v0_3, v0_99); }; } // Define sub-modules for each supported minor version. + macro_rules! define_modules { ($($m:ident),+) => { $(pub mod $m;)+ }; } + with_minor_versions!(define_modules!()); macro_rules! assert_eq_all_versions_of_type { @@ -70,6 +89,7 @@ macro_rules! reexport_unchanged_types { )+ } } + reexport_unchanged_types!( AccountQueryData, BlockMerkleCommitment, @@ -123,6 +143,7 @@ reexport_unchanged_types!( ViewBasedUpgrade, BlockSize, ); + pub(crate) use v0_3::{ L1ClientMetrics, L1Event, L1ReconnectTask, L1State, L1UpdateTask, RpcClient, }; @@ -130,6 +151,7 @@ pub(crate) use v0_3::{ #[derive( Clone, Copy, Debug, Default, Hash, Eq, PartialEq, PartialOrd, Ord, Deserialize, Serialize, )] + pub struct SeqTypes; impl NodeType for SeqTypes { @@ -145,7 +167,9 @@ impl NodeType for SeqTypes { type BuilderSignatureKey = FeeAccount; type AuctionResult = SolverAuctionResults; } + #[derive(Clone, Default, Debug, Copy)] + pub struct SequencerVersions { _pd: PhantomData<(Base, Upgrade)>, } @@ -175,23 +199,32 @@ impl Ve pub type MockSequencerVersions = SequencerVersions, StaticVersion<0, 2>>; pub type V0_0 = StaticVersion<0, 0>; + pub type V0_1 = StaticVersion<0, 1>; + pub type FeeVersion = StaticVersion<0, 2>; -pub type MarketplaceVersion = StaticVersion<0, 3>; -pub type EpochVersion = StaticVersion<0, 4>; + +pub type EpochVersion = StaticVersion<0, 100>; pub type Leaf = hotshot_types::data::Leaf; + pub type Leaf2 = hotshot_types::data::Leaf2; + pub type Event = hotshot::types::Event; pub type PubKey = BLSPubKey; + pub type PrivKey = ::PrivateKey; pub type NetworkConfig = hotshot_types::network::NetworkConfig; pub use self::impls::{NodeState, SolverAuctionResultsProvider, ValidatedState}; + pub use crate::v0_1::{ BLOCK_MERKLE_TREE_HEIGHT, FEE_MERKLE_TREE_HEIGHT, NS_ID_BYTE_LEN, NS_OFFSET_BYTE_LEN, NUM_NSS_BYTE_LEN, NUM_TXS_BYTE_LEN, TX_OFFSET_BYTE_LEN, }; -use crate::v0_3::SolverAuctionResults; + +use crate::v0_99::SolverAuctionResults; + +pub type MarketplaceVersion = StaticVersion<0, 99>; diff --git a/types/src/v0/traits.rs b/types/src/v0/traits.rs index be0743efe3..6bd58a837c 100644 --- a/types/src/v0/traits.rs +++ b/types/src/v0/traits.rs @@ -29,7 +29,7 @@ use jf_vid::VidScheme; use serde::{de::DeserializeOwned, Serialize}; use crate::{ - v0::impls::ValidatedState, v0_3::ChainConfig, BackoffParams, BlockMerkleTree, Event, + v0::impls::ValidatedState, v0_99::ChainConfig, BackoffParams, BlockMerkleTree, Event, FeeAccount, FeeAccountProof, FeeMerkleCommitment, FeeMerkleTree, Leaf2, NetworkConfig, SeqTypes, }; @@ -374,19 +374,12 @@ impl StateCatchup for Vec { pub trait PersistenceOptions: Clone + Send + Sync + 'static { type Persistence: SequencerPersistence; - async fn create(self) -> anyhow::Result; + async fn create(&mut self) -> anyhow::Result; async fn reset(self) -> anyhow::Result<()>; - - async fn create_catchup_provider( - self, - backoff: BackoffParams, - ) -> anyhow::Result> { - self.create().await?.into_catchup_provider(backoff) - } } #[async_trait] -pub trait SequencerPersistence: Sized + Send + Sync + 'static { +pub trait SequencerPersistence: Sized + Send + Sync + Clone + 'static { /// Use this storage as a state catchup backend, if supported. fn into_catchup_provider( self, diff --git a/types/src/v0/v0_1/instance_state.rs b/types/src/v0/v0_1/instance_state.rs index 8eab0d2eb5..d943a48606 100644 --- a/types/src/v0/v0_1/instance_state.rs +++ b/types/src/v0/v0_1/instance_state.rs @@ -1,7 +1,7 @@ use serde::{Deserialize, Serialize}; use std::fmt::Debug; -use crate::{v0_3::ChainConfig, Timestamp}; +use crate::{v0_99::ChainConfig, Timestamp}; /// Represents the specific type of upgrade. #[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] diff --git a/types/src/v0/v0_3/mod.rs b/types/src/v0/v0_3/mod.rs index 838696a6cb..f99c840cac 100644 --- a/types/src/v0/v0_3/mod.rs +++ b/types/src/v0/v0_3/mod.rs @@ -2,13 +2,14 @@ use vbs::version::Version; // Re-export types which haven't changed since the last minor version. pub use super::v0_1::{ - AccountQueryData, BlockMerkleCommitment, BlockMerkleTree, BlockSize, BuilderSignature, ChainId, - Delta, FeeAccount, FeeAccountProof, FeeAmount, FeeInfo, FeeMerkleCommitment, FeeMerkleProof, - FeeMerkleTree, Index, Iter, L1BlockInfo, L1Client, L1ClientOptions, L1Snapshot, NamespaceId, - NsIndex, NsIter, NsPayload, NsPayloadBuilder, NsPayloadByteLen, NsPayloadOwned, NsPayloadRange, - NsProof, NsTable, NsTableBuilder, NsTableValidationError, NumNss, NumTxs, NumTxsRange, - NumTxsUnchecked, Payload, PayloadByteLen, TimeBasedUpgrade, Transaction, TxIndex, TxIter, - TxPayload, TxPayloadRange, TxProof, TxTableEntries, TxTableEntriesRange, Upgrade, UpgradeMode, + AccountQueryData, BlockMerkleCommitment, BlockMerkleTree, BlockSize, BuilderSignature, + ChainConfig, ChainId, Delta, FeeAccount, FeeAccountProof, FeeAmount, FeeInfo, + FeeMerkleCommitment, FeeMerkleProof, FeeMerkleTree, Header, Index, Iter, L1BlockInfo, L1Client, + L1ClientOptions, L1Snapshot, NamespaceId, NsIndex, NsIter, NsPayload, NsPayloadBuilder, + NsPayloadByteLen, NsPayloadOwned, NsPayloadRange, NsProof, NsTable, NsTableBuilder, + NsTableValidationError, NumNss, NumTxs, NumTxsRange, NumTxsUnchecked, Payload, PayloadByteLen, + ResolvableChainConfig, TimeBasedUpgrade, Transaction, TxIndex, TxIter, TxPayload, + TxPayloadRange, TxProof, TxTableEntries, TxTableEntriesRange, Upgrade, UpgradeMode, UpgradeType, ViewBasedUpgrade, BLOCK_MERKLE_TREE_HEIGHT, FEE_MERKLE_TREE_HEIGHT, NS_ID_BYTE_LEN, NS_OFFSET_BYTE_LEN, NUM_NSS_BYTE_LEN, NUM_TXS_BYTE_LEN, TX_OFFSET_BYTE_LEN, }; @@ -17,15 +18,3 @@ pub(crate) use super::v0_1::{ }; pub const VERSION: Version = Version { major: 0, minor: 3 }; - -mod auction; -mod chain_config; -mod fee_info; -mod header; -mod solver; - -pub use auction::{BidTx, BidTxBody, FullNetworkTx, SolverAuctionResults}; -pub use chain_config::*; -pub use fee_info::IterableFeeInfo; -pub use header::Header; -pub use solver::*; diff --git a/types/src/v0/v0_3/auction.rs b/types/src/v0/v0_99/auction.rs similarity index 100% rename from types/src/v0/v0_3/auction.rs rename to types/src/v0/v0_99/auction.rs diff --git a/types/src/v0/v0_3/chain_config.rs b/types/src/v0/v0_99/chain_config.rs similarity index 98% rename from types/src/v0/v0_3/chain_config.rs rename to types/src/v0/v0_99/chain_config.rs index d96e86344d..61cf46c36a 100644 --- a/types/src/v0/v0_3/chain_config.rs +++ b/types/src/v0/v0_99/chain_config.rs @@ -58,7 +58,7 @@ impl Committable for ChainConfig { }; // With `ChainConfig` upgrades we want commitments w/out - // fields added >= v0_3 to have the same commitment as <= v0_3 + // fields added >= v0_99 to have the same commitment as <= v0_99 // commitment. Therefore `None` values are simply ignored. let comm = if let Some(bid_recipient) = self.bid_recipient { comm.fixed_size_field("bid_recipient", &bid_recipient.to_fixed_bytes()) diff --git a/types/src/v0/v0_3/fee_info.rs b/types/src/v0/v0_99/fee_info.rs similarity index 100% rename from types/src/v0/v0_3/fee_info.rs rename to types/src/v0/v0_99/fee_info.rs diff --git a/types/src/v0/v0_3/header.rs b/types/src/v0/v0_99/header.rs similarity index 100% rename from types/src/v0/v0_3/header.rs rename to types/src/v0/v0_99/header.rs diff --git a/types/src/v0/v0_99/mod.rs b/types/src/v0/v0_99/mod.rs new file mode 100644 index 0000000000..3e676a4b2a --- /dev/null +++ b/types/src/v0/v0_99/mod.rs @@ -0,0 +1,31 @@ +use vbs::version::Version; + +// Re-export types which haven't changed since the last minor version. +pub use super::v0_1::{ + AccountQueryData, BlockMerkleCommitment, BlockMerkleTree, BlockSize, BuilderSignature, ChainId, + Delta, FeeAccount, FeeAccountProof, FeeAmount, FeeInfo, FeeMerkleCommitment, FeeMerkleProof, + FeeMerkleTree, Index, Iter, L1BlockInfo, L1Client, L1ClientOptions, L1Snapshot, NamespaceId, + NsIndex, NsIter, NsPayload, NsPayloadBuilder, NsPayloadByteLen, NsPayloadOwned, NsPayloadRange, + NsProof, NsTable, NsTableBuilder, NsTableValidationError, NumNss, NumTxs, NumTxsRange, + NumTxsUnchecked, Payload, PayloadByteLen, TimeBasedUpgrade, Transaction, TxIndex, TxIter, + TxPayload, TxPayloadRange, TxProof, TxTableEntries, TxTableEntriesRange, Upgrade, UpgradeMode, + UpgradeType, ViewBasedUpgrade, BLOCK_MERKLE_TREE_HEIGHT, FEE_MERKLE_TREE_HEIGHT, + NS_ID_BYTE_LEN, NS_OFFSET_BYTE_LEN, NUM_NSS_BYTE_LEN, NUM_TXS_BYTE_LEN, TX_OFFSET_BYTE_LEN, +}; + +pub const VERSION: Version = Version { + major: 0, + minor: 99, +}; + +mod auction; +mod chain_config; +mod fee_info; +mod header; +mod solver; + +pub use auction::{BidTx, BidTxBody, FullNetworkTx, SolverAuctionResults}; +pub use chain_config::*; +pub use fee_info::IterableFeeInfo; +pub use header::Header; +pub use solver::*; diff --git a/types/src/v0/v0_3/solver.rs b/types/src/v0/v0_99/solver.rs similarity index 100% rename from types/src/v0/v0_3/solver.rs rename to types/src/v0/v0_99/solver.rs