diff --git a/.github/actions/install-sp1/action.yml b/.github/actions/install-sp1/action.yml deleted file mode 100644 index 849c1b022..000000000 --- a/.github/actions/install-sp1/action.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: Install SP1 -description: >- - Install the system build deps and the SP1 zkVM toolchain (sp1up) needed to - build and run the SP1 host. Assumes a Rust toolchain is already set up. - -runs: - using: composite - steps: - # The shared zkVM apt superset (the ZisK book's full Ubuntu list — the - # prebuilt cargo tooling and proofman's C++ link OpenMPI/OpenMP/GMP/ - # nlohmann-json/nasm/secp256k1/… — plus pkg-config + libssl-dev for SP1's - # host crates). The Nix shells provided this; a bare runner doesn't. - - name: Install system build deps - shell: bash - run: | - # Some runner images ship an unreachable Azure mirror that hangs - # `apt-get update`; drop it first (no-op elsewhere). - sudo sed -i '/azure\.archive\.ubuntu\.com/d' /etc/apt/apt-mirrors.txt 2>/dev/null || true - export DEBIAN_FRONTEND=noninteractive - # Ubuntu package mirrors sporadically 502 / throttle on these large - # fetches (qemu-system alone pulls hundreds of MB), so retry the whole - # update+install: `Acquire::Retries` absorbs single-download blips and - # `--fix-missing` resumes a partially fetched set. - for attempt in 1 2 3; do - sudo apt-get update || true - if sudo apt-get install -y --fix-missing -o Acquire::Retries=5 \ - xz-utils jq curl build-essential qemu-system libomp-dev libgmp-dev \ - nlohmann-json3-dev protobuf-compiler uuid-dev libgrpc++-dev \ - libsecp256k1-dev libsodium-dev libpqxx-dev nasm libopenmpi-dev \ - openmpi-bin openmpi-common libclang-dev clang gcc-riscv64-unknown-elf \ - pkg-config libssl-dev; then - break - fi - if [ "$attempt" = 3 ]; then - echo "::error::apt-get install failed after 3 attempts"; exit 1 - fi - echo "::warning::apt-get install attempt $attempt failed; retrying in $((attempt * 10))s" - sleep $((attempt * 10)) - done - # sp1up resolves `releases/latest` (and downloads the toolchain) through - # api.github.com. Anonymous API calls share a 60/hr per-IP limit that hot - # runner IPs exhaust, failing the step with "Unable to access the latest - # release"; sp1up picks up GITHUB_TOKEN and authenticates every API call - # with it, switching to the token's own per-repo quota. - - name: Install SP1 toolchain (sp1up, latest) - shell: bash - env: - GITHUB_TOKEN: ${{ github.token }} - # The path appended below is the installer's fixed location on the runner - run: | # zizmor: ignore[github-env] - curl -L https://sp1up.succinct.xyz | bash - ~/.sp1/bin/sp1up - echo "$HOME/.sp1/bin" >> "$GITHUB_PATH" diff --git a/.github/actions/install-zisk/action.yml b/.github/actions/install-zisk/action.yml deleted file mode 100644 index 243985076..000000000 --- a/.github/actions/install-zisk/action.yml +++ /dev/null @@ -1,142 +0,0 @@ -name: Install Zisk -description: >- - Install the system build deps, the ZisK zkVM toolchain (ziskup, CPU build), - and — unless `proving-key: false` — the fork-matching proving key used for - proof generation. Build and execute-only callers can skip the few-GB - download and const-tree regeneration. Assumes a Rust toolchain is already - set up. - -inputs: - proving-key: - description: >- - Install the fork-matching proving key. Required to prove, but not to - build or use the SDK's execute-only client. - required: false - default: "true" - -runs: - using: composite - steps: - # The shared zkVM apt superset — the ZisK book's full Ubuntu list (prebuilt - # cargo-zisk + proofman's C++ link OpenMPI/OpenMP/GMP/nlohmann-json/nasm/ - # secp256k1/…), kept identical to install-sp1 so a host that links both is - # covered. The Nix shells provided this; a bare runner doesn't. - - name: Install system build deps - shell: bash - run: | - # Some runner images ship an unreachable Azure mirror that hangs - # `apt-get update`; drop it first (no-op elsewhere). - sudo sed -i '/azure\.archive\.ubuntu\.com/d' /etc/apt/apt-mirrors.txt 2>/dev/null || true - export DEBIAN_FRONTEND=noninteractive - # Ubuntu package mirrors sporadically 502 / throttle on these large - # fetches (qemu-system alone pulls hundreds of MB), so retry the whole - # update+install: `Acquire::Retries` absorbs single-download blips and - # `--fix-missing` resumes a partially fetched set. - for attempt in 1 2 3; do - sudo apt-get update || true - if sudo apt-get install -y --fix-missing -o Acquire::Retries=5 \ - xz-utils jq curl build-essential qemu-system libomp-dev libgmp-dev \ - nlohmann-json3-dev protobuf-compiler uuid-dev libgrpc++-dev \ - libsecp256k1-dev libsodium-dev libpqxx-dev nasm libopenmpi-dev \ - openmpi-bin openmpi-common libclang-dev clang gcc-riscv64-unknown-elf \ - pkg-config libssl-dev; then - break - fi - if [ "$attempt" = 3 ]; then - echo "::error::apt-get install failed after 3 attempts"; exit 1 - fi - echo "::warning::apt-get install attempt $attempt failed; retrying in $((attempt * 10))s" - sleep $((attempt * 10)) - done - # Host links the argumentcomputer/zisk fork (check-setup lives in the - # `cargo-zisk-dev` binary, used below to regenerate the key's - # const-trees). `--cpu` picks - # the CPU build (no GPU on the runner) and `--nokey` skips ziskup's key - # install — both avoid its interactive /dev/tty prompts. We keep `--nokey` - # because the upstream `zisk-setup` bucket only carries the upstream circuit's - # key; our fork has a different circuit (extra Blake3f AIR), so we restore the - # fork-matching key from our own S3 in the next step. `--prefix $HOME/.zisk` - # pins the install where cargo-zisk's ZiskPaths fallback looks (the runner - # sets XDG_CONFIG_HOME, which would otherwise relocate it). - - name: Install Zisk toolchain (ziskup) - shell: bash - run: | # zizmor: ignore[github-env] - # Both pins track the argumentcomputer/zisk fork the guests build - # against (`blake3-precompile-1.0.0-alpha`) and must move with it. - # - # cargo-zisk 1.0.0-alpha matches the fork's `zisk-sdk` / `ziskos` and the - # proving key restored below. Unpinned, ziskup takes the newest release, - # whose `cargo-zisk toolchain install` also stopped honoring - # `releases/latest` in favor of the highest tag of a tracked major. - # - # zisk-0.5.1 is the last Rust toolchain whose `riscv64ima-zisk-zkvm-elf` - # target spec embeds the guest memory-layout linker script - # (`link_script: Some(LINKER_SCRIPT)`), which defines `_global_pointer`, - # `_init_stack_top` and the `_kernel_heap_*` symbols that `ziskos::_start` - # references. zisk-1.0.0 dropped it; upstream instead ships the script in - # `ziskbuild` and passes it as `-C link-arg=-T`, machinery that landed in - # zisk 1.1.0-alpha and so is absent from the 1.0.0-alpha fork. Any newer - # toolchain therefore fails the guest link with those symbols undefined. - # Unpin only alongside a fork rebase that carries ziskbuild's script. - # - # ziskup ends by running `cargo-zisk toolchain install` itself, which - # breaks whenever upstream publishes a release tag before uploading its - # assets. Tolerate that one failure (it is ziskup's last material step - # under --nokey) and redo the toolchain install pinned; the follow-up - # command still fails the job if ziskup died earlier (no cargo-zisk - # binary) or the download itself breaks. - curl -L https://raw.githubusercontent.com/0xPolygonHermez/zisk/main/ziskup/install.sh \ - | bash -s -- --cpu --nokey -y --prefix "$HOME/.zisk" --version 1.0.0-alpha || true - "$HOME/.zisk/bin/cargo-zisk" toolchain install --toolchain-version zisk-0.5.1 - echo "$HOME/.zisk/bin" >> "$GITHUB_PATH" - # Pre-build the proofman C++ sys crate ALONE so its build script runs - # exactly once before zisk-host's parallel Cargo build. zisk-host pulls - # zisk-sdk as both a dependency and a build-dependency, so cargo compiles - # proofman-starks-lib-c as two units whose build scripts can run - # CONCURRENTLY — and both run `make` inside the SHARED - # ~/.cargo/git/checkouts/pil2-proofman-* source dir. On a cold runner the - # Makefile stamp is absent, so both units take the `make clean` + - # `make -j` path and race: one unit's clean deletes build/ while the - # other's g++ is mid-compile ("opening dependency file ….d: No such file - # or directory"). Building the crate solo writes the stamp; the second - # unit then skips the clean and its `make -j` is a no-op. - # (Proper fix is an flock in pil2-proofman's build.rs — upstream.) - - name: Pre-build proofman-starks-lib-c (serialize the shared make) - shell: bash - run: cargo build --release -p proofman-starks-lib-c - working-directory: zisk - # Proof generation needs the fork-matching proving key. It lives in a - # public S3 bucket - # WITHOUT the const-trees — exactly like Zisk's released - # `zisk-provingkey-*.tar.gz` on `storage.googleapis.com/zisk-setup` — and - # regenerate them here with `cargo-zisk-dev check-setup -a`, which is how - # `ziskup` itself populates them. That keeps the artifact a few GB (gzip) - # instead of ~50 GB (the tarball also omits the `*_gpu` const variants the - # first GPU prove would materialize — unused on this CPU runner). The - # object name carries the fork rev so a circuit change can't silently - # reuse a stale key. `aws s3 cp` (multipart, no creds — public bucket) - # holds throughput steady where a single-stream `curl` swings by an - # order of magnitude; `curl` is the fallback for hosts without the AWS - # CLI. Deliberately omitted from the shared runner cache: the multi-GB - # tarball would crowd build artifacts, while its public S3 source supports - # multipart downloads directly. - - name: Fetch proving key from S3, extract, regenerate const-trees - if: inputs.proving-key == 'true' - shell: bash - run: | - object=zisk-provingkey-blake3-e4057c4c-cpu.tar.gz - tarball="${RUNNER_TEMP:-/tmp}/$object" - if command -v aws >/dev/null 2>&1; then - aws configure set default.s3.max_concurrent_requests 20 - aws s3 cp --no-sign-request --region us-east-1 \ - "s3://argument-zisk-setup/$object" "$tarball" - else - curl -fSL --retry 3 \ - "https://argument-zisk-setup.s3.amazonaws.com/$object" -o "$tarball" - fi - mkdir -p "$HOME/.zisk" - tar -C "$HOME/.zisk" -xzf "$tarball" - rm -f "$tarball" - # Regenerate the const-trees omitted from the artifact (CPU build → - # no --gpu). ziskup's "may take a while" step. - cargo-zisk-dev check-setup --proving-key "$HOME/.zisk/provingKey" -a diff --git a/.github/workflows/bench-pr.yml b/.github/workflows/bench-pr.yml index c230954a1..a2ed3296c 100644 --- a/.github/workflows/bench-pr.yml +++ b/.github/workflows/bench-pr.yml @@ -3,7 +3,7 @@ # The base is the PR's own base branch — main for an unstacked PR, the # parent PR's head for a stacked one — and the report is labelled with it. # -# !benchmark ([aiur] [zisk] [sp1] [ooc] [compile] [decompile] | all) [execute] +# !benchmark ([aiur] [ooc] [compile] [decompile] | all) [execute] # BENCH_ENVS=InitStd,Mathlib # which compiled envs (case-insensitive, any registry env; # # defaults to every env for compile/decompile, InitStd # # for the rest) @@ -569,23 +569,6 @@ jobs: with: name: benchmark-env-${{ matrix.params.env }} # ---------- PR side ---------- - # zkVM runs build their Rust host in-run, so they need the Rust - # toolchain plus the backend's own toolchain and system deps. - - name: Set up zkVM Rust toolchain - if: matrix.params.backend == 'zisk' || matrix.params.backend == 'sp1' - uses: $/.github/actions/setup-rust-toolchain - with: - cache-workspaces: ${{ matrix.params.backend }} - cache-key: ${{ matrix.params.backend }} - - name: Install SP1 - if: matrix.params.backend == 'sp1' - uses: $/.github/actions/install-sp1 - - name: Install Zisk - if: matrix.params.backend == 'zisk' - uses: $/.github/actions/install-zisk - with: - proving-key: false - # The PR side runs first: `ix bench run` selects its constants from # the shared set (Ix/BenchConstants.lean), and pr.json's row names # become the canonical name list this run measures — the base-side @@ -598,11 +581,6 @@ jobs: # the job, after the table upload. continue-on-error: true run: | - if [ "$BACKEND" = zisk ]; then - # ZisK's ASM microservices mmap with MAP_LOCKED: raise the memlock - # hard limit in this shell so the spawned tools inherit it. - sudo prlimit --pid $$ --memlock=unlimited:unlimited - fi if [ "$BACKEND" = compile ]; then # The compile job already measured this env's compile (same # runner class, binaries, and command) — reuse its row instead @@ -855,9 +833,6 @@ jobs: # Cached base .ixe when the restore above hit; else the base run # compiles it fresh (no flag). [ -f "base/$BENV.ixe" ] && flags="$flags --ixe base/$BENV.ixe" - if [ "$BACKEND" = zisk ]; then - sudo prlimit --pid $$ --memlock=unlimited:unlimited - fi ix bench run --backend "$BACKEND" --env "$BENV" --mode "$MODE" \ --repo base \ --out "$GITHUB_WORKSPACE/base.json" $flags diff --git a/.github/workflows/bencher-thresholds-reset.yml b/.github/workflows/bencher-thresholds-reset.yml index b623a1d47..1a591f814 100644 --- a/.github/workflows/bencher-thresholds-reset.yml +++ b/.github/workflows/bencher-thresholds-reset.yml @@ -22,7 +22,7 @@ name: Bencher thresholds reset # cancel by removing it before merge. Naming convention: one label per token, # `bencher-thresholds-reset:` where is a workload (a backend # testbed stem in Ix/Cli/BenchCmd.lean (backendSpecs): -# `ix-compile`, `ix-decompile`, `aiur`, `zisk-check-execute`, `sp1-check-execute`, `ooc-check`) or +# `ix-compile`, `ix-decompile`, `aiur`, `ooc-check`) or # `all` (the merge step expands an `all` label into every workload). Labeling # requires Triage+, so PR authors from forks cannot self-queue a reset. The # label shares the command/workflow name; the ref it moves is @@ -44,7 +44,7 @@ on: # GitHub requires literal choice options, so this list stays static: # keep it (and the jobs' valid= lists below) in sync with the # backend testbeds in Ix/Cli/BenchCmd.lean (backendSpecs). - options: [ix-compile, ix-decompile, aiur, aiur-sharded-env-check, zisk-check-execute, sp1-check-execute, ooc-check, all] + options: [ix-compile, ix-decompile, aiur, aiur-sharded-env-check, ooc-check, all] sha: description: "Commit to anchor to (default: HEAD)" required: false @@ -78,7 +78,7 @@ jobs: # (backendSpecs), before its hardware suffix. Static because this # job runs on a cheap runner with no built `ix`; keep in sync when # adding a backend. - valid="aiur aiur-sharded-env-check ix-compile ix-decompile ooc-check sp1-check-execute zisk-check-execute" + valid="aiur aiur-sharded-env-check ix-compile ix-decompile ooc-check" if [ "$EVENT" = workflow_dispatch ]; then # Reset the chosen workload(s) at the given commit; no PR scan. sha="${INPUT_SHA:-$HEAD_SHA}" @@ -137,7 +137,7 @@ jobs: # which the merge job expands into every workload). Same static # list as the reset job; keep both in sync with backendSpecs in # Ix/Cli/BenchCmd.lean. - valid="aiur aiur-sharded-env-check ix-compile ix-decompile ooc-check sp1-check-execute zisk-check-execute" + valid="aiur aiur-sharded-env-check ix-compile ix-decompile ooc-check" accepted="$valid all" # Parse the workload token(s) after the command, lowercased. workloads=$(printf '%s' "$BODY" \ diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index 0747a1e17..6a3ab3ecc 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -64,11 +64,6 @@ jobs: - run: nix flake check --print-build-logs --accept-flake-config # Run the real build and test commands inside the development environment. - run: nix develop --accept-flake-config --command bash -c "lake build && lake test" - # Realize the zkVM shells so they're verified and pushed to the cache, - # and smoke-test each shell's toolchain entrypoint. - # TODO: Re-enable once the zkVM shells build in CI. - # - run: nix develop --print-build-logs --accept-flake-config .#zisk --command cargo-zisk --version - # - run: nix develop --print-build-logs --accept-flake-config .#sp1 --command cargo prove --version nix-gate: if: ${{ always() }} diff --git a/Benchmarks/Typecheck.lean b/Benchmarks/Typecheck.lean index 9f8d1a50a..42f1ec801 100644 --- a/Benchmarks/Typecheck.lean +++ b/Benchmarks/Typecheck.lean @@ -30,8 +30,7 @@ lake exe bench-typecheck --ixe --consts [--consts-file

] [ (writes `foo.ixe`). Required. --consts comma-separated fully-qualified constant names to benchmark (e.g. `Nat.add_comm,String.append`). Same - flag/shape as `ix check --consts`, `zisk-host --consts`, - and `sp1-host --consts`. + flag/shape as `ix check --consts`. --consts-file additionally read names from a file: one per line, blank lines and `#` comments ignored. Unions with --consts. @@ -42,7 +41,7 @@ lake exe bench-typecheck --ixe --consts [--consts-file

] [ --skip-deps check only each target itself (verify_const, trusting its deps) instead of its whole transitive closure (verify_claim, - the default). Same flag as `zisk-host --skip-deps`; reserved + the default). Reserved for targets too expensive to full-closure-check. --json write results JSON to (per constant, plus one pair row with --join). Off by default: normal CLI usage prints only @@ -978,10 +977,10 @@ def typecheckCmd : Cli.Cmd := `[Cli| FLAGS: "ixe" : String; "Path to a serialized `Ixon.Env` (e.g. produced by `ix compile`). Required." - "consts" : String; "Comma-separated fully-qualified constant names to benchmark (e.g. `Nat.add_comm,String.append`). Same flag/shape as `ix check --consts`, `zisk-host --consts`, and `sp1-host --consts`." + "consts" : String; "Comma-separated fully-qualified constant names to benchmark (e.g. `Nat.add_comm,String.append`). Same flag/shape as `ix check --consts`." "consts-file" : String; "Additionally read constant names from a file (one per line; `#` comments and blank lines ignored). Unions with --consts." "json" : String; "Write results JSON to this path (per constant, plus one pair row with --join). Off by default; normal CLI usage prints only the human-readable summary." - "skip-deps"; "Check only each target itself (verify_const, trusting its deps) instead of re-checking its whole transitive closure (verify_claim). Same flag as `zisk-host --skip-deps`." + "skip-deps"; "Check only each target itself (verify_const, trusting its deps) instead of re-checking its whole transitive closure (verify_claim)." "execute-only"; "Execute only (Phase 1: constants / fft-cost / execute-time) and skip proving. The fast per-PR `execute`-mode signal." "recursive"; "After each prove, execute and then prove the in-circuit multi-stark verifier over the fresh proof (the fri-verifier-* metrics; see the module docstring). Uses recursion-tuned FRI parameters. Conflicts with --execute-only." "join"; "With --recursive and exactly two resolved constants, prove each as a singleton CheckEnv shard, then execute/prove/verify one direct flat aggregate join (ix_aggr shape 2). Emits a dedicated `left + right` row with join-* metrics. Conflicts with --skip-deps, --execute-only, and --interp." diff --git a/Cargo.toml b/Cargo.toml index e8c7e7048..6512d0974 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,10 +10,6 @@ members = [ "crates/ixon", "crates/kernel", ] -# `zisk/`, `sp1/`, and `sp1-compress/` are their own Cargo workspaces built -# via their respective zkVM toolchains; excluded so host workspace ops don't -# pick them up. -exclude = ["zisk", "sp1", "sp1-compress", "multi-stark"] resolver = "2" [profile.dev] diff --git a/Ix/BenchConstants.lean b/Ix/BenchConstants.lean index cee6bc26a..40ef78610 100644 --- a/Ix/BenchConstants.lean +++ b/Ix/BenchConstants.lean @@ -1,15 +1,13 @@ /- The shared benchmark constant set: the single source of truth for which - constants every per-constant benchmark backend (aiur, zisk, sp1, ooc, - lean4lean) runs. Every backend runs this same set — spanning the cheap → + constants every per-constant benchmark backend (aiur, ooc, lean4lean) + runs. Every backend runs this same set — spanning the cheap → heavy cost range across the registry envs — so their numbers stay comparable per constant; the only per-backend carve-outs are the hard feasibility exclusions in `Ix.Cli.BenchCmd.benchExclusions`. `env` names the registry env (`Ix.Cli.BenchCmd.envSpecs` / - `.ixe`) the constant resolves in. Whether a zisk execution runs - whole or as a closure-shard partition is decided at bench runtime by - the shard planner's budget, not declared here. + `.ixe`) the constant resolves in. -/ module @@ -34,9 +32,8 @@ def benchConstants : Array BenchConstant := #[ { name := "Char.ofOrdinal_le_of_le", env := "InitStd" }, { name := "Std.HashMap", env := "InitStd" }, -- TODO: re-add bitblast once a prover can carry it. Its ~18B-step - -- atomic mutual block crashes the zkVM executors (`benchExclusions`) - -- and exceeds any current host's RAM on the Aiur prove, so a scheduled - -- run could only re-document the same OOM every push. Until then it + -- atomic mutual block exceeds the available RAM on the Aiur prove, so a + -- scheduled run could only re-document the same OOM every push. Until then it -- runs on demand via `--consts` / BENCH_CONSTS, which bypass the -- curated set. -- { name := "Std.Tactic.BVDecide.BVExpr.bitblast.goCache_Inv_of_Inv._mutual", diff --git a/Ix/Cli/BenchCmd.lean b/Ix/Cli/BenchCmd.lean index 9aebfee7a..d06d54524 100644 --- a/Ix/Cli/BenchCmd.lean +++ b/Ix/Cli/BenchCmd.lean @@ -11,11 +11,11 @@ compile` — except for the `compile` backend, where the compile IS the benchmark); 3. spawns the run's measured tool — `bench-typecheck` (aiur), - `zisk-host`/`sp1-host` (zkVM execute), `ix check-rs` (ooc), + `ix check-rs` (ooc), `bench-lean4lean` (lean4lean; olean-driven, no `.ixe`), `ix compile` (compile) — wrapped in the RAM watchdog (`Ix.Watchdog`: cgroup `memory.max` via a systemd user scope; the kernel OOM-kills - at the ceiling). The per-constant backends (aiur, zkVM) spawn + at the ceiling). The per-constant backend (aiur) spawns ONE PROCESS PER CONSTANT: a kill costs exactly that constant (its row is marked `status: oom`, keeping whatever the tool flushed), and each spawn's texray window (`.spans`) belongs wholly to it, folded @@ -29,10 +29,6 @@ exit codes only. Registry data (envs, backends, testbeds) lives in this module (`envSpecs`/`backendSpecs`) — one language, one owner. - Note for the zisk backend: ZisK's ASM microservices need an unlimited - memlock hard limit (mmap with MAP_LOCKED). Raise it in the invoking shell - before running (`sudo prlimit --pid $$ --memlock=unlimited:unlimited`); - the tools inherit it. -/ module public import Cli @@ -56,13 +52,7 @@ namespace Ix.Cli.BenchCmd in a cell — not merely expensive (a too-large prove records an honest `oom` row instead). `--consts` runs bypass this: an explicit request always runs. -/ -def benchExclusions : List (String × String × String) := - let bitblast := - "Std.Tactic.BVDecide.BVExpr.bitblast.goCache_Inv_of_Inv._mutual" - [ -- ~18B-step atomic mutual block: Aiur executes it, but the zkVM - -- executor OOMs (ASM MO crash) before any measurement lands. - (bitblast, "zisk", "*"), - (bitblast, "sp1", "*") ] +def benchExclusions : List (String × String × String) := [] /-- Whether `benchExclusions` bars `name` from this `(backend, mode)`. -/ def isExcluded (name backend mode : String) : Bool := @@ -120,7 +110,7 @@ def findEnv (token : String) : Option EnvSpec := · `perConstant` — one row per selected `benchConstants` entry, over the envs whose entries select any — an env joins this fan-out by gaining constants, not by a registry flag. The prove/execute - backends (aiur, zisk, sp1). + backend (aiur). · `perConstantWithEnv` — `perConstant` plus a whole-env row (ooc). -/ inductive BenchInputs | perEnv @@ -328,29 +318,6 @@ def backendSpecs : List BackendSpec := [ thresholds := [("constants", "0", "0"), ("shards", "0", "_"), ("check-time", "0.10", "_"), ("throughput", "_", "0.10"), ("peak-rss", "0.10", "_")] }, - -- zisk / sp1: on demand only (`!benchmark zisk`, `ix bench run`). No CI - -- job schedules them, so nothing uploads to bencher or plots, and `all` - -- leaves them out. - { name := "zisk", defaultMode := "execute", inputs := .perConstant, - unscheduled := ["execute"], - testbeds := [("execute", "zisk-check-execute")], - metrics := [("execute", ["execute-time", "throughput", "peak-rss", - "cycles", "constants", "shards"])], - -- cycles / shards / max-shard-cycles are deterministic per guest ELF, - -- but a real guest / packer improvement legitimately drops them → - -- upper-only 0% bounds. - thresholds := [("constants", "0", "0"), ("cycles", "0", "_"), - ("shards", "0", "_"), ("max-shard-cycles", "0", "_"), - ("execute-time", "0.10", "_"), ("peak-rss", "0.10", "_"), - ("throughput", "_", "0.10")] }, - { name := "sp1", defaultMode := "execute", inputs := .perConstant, - unscheduled := ["execute"], - testbeds := [("execute", "sp1-check-execute")], - metrics := [("execute", ["execute-time", "throughput", "peak-rss", - "cycles"])], - thresholds := [("constants", "0", "0"), ("cycles", "0", "_"), - ("execute-time", "0.10", "_"), ("peak-rss", "0.10", "_"), - ("throughput", "_", "0.10")] }, { name := "ooc", defaultMode := "execute", inputs := .perConstantWithEnv, testbeds := [("execute", "ooc-check")], metrics := [("execute", ["check-time", "throughput", "peak-rss"])], @@ -533,8 +500,7 @@ def markKilled (out : String) (name : String) (status : String) : IO Unit := do /-- Status for a 128+signal death: explicit kills (137 KILL — cgroup breach or watchdog; 143 TERM) and allocator aborts (134 — e.g. Rust's OOM abort) are capacity kills, `oom`. Everything else (139 SIGSEGV, 135 - SIGBUS, …) is a genuine fault in the tool, `crash` — conflating the two - turned a zisk mem-planner segfault into a phantom OOM row. -/ + SIGBUS, …) is a fault in the tool, recorded as `crash`. -/ def killStatus (exit : UInt32) : String := if exit == 137 || exit == 143 || exit == 134 then "oom" else "crash" @@ -568,8 +534,7 @@ def slugify (s : String) : String := String.ofList folded.reverse /-- Fold a spawn's texray window (`.spans`) into its constant's row as - flat `phase-` fields — the aiur prover's tracing spans and the - zkVM hosts' `record_manual` entries alike — then drop the window file. + flat `phase-` fields, then drop the window file. The keys pass straight through `bmf` as independent bencher measures and come back from `fetch-main` in the same shape. No row (the tool died before writing one) → nothing to attach the spans to. -/ @@ -674,35 +639,6 @@ def ensureIxe (repo : String) (info : EnvSpec) (explicit : Option String) : throw <| IO.userError s!"ix compile {info.module} failed (exit {exit})" return ixe -/-- Cut the closure-shard artifacts for one constant: `ix shard - extract` (standalone closure env) → `ix profile` → `ix shard` - (heartbeat-profiled min-cut manifest, capped by predicted RAM). Skips - work when the artifacts already exist. Returns `(ixe, ixes)` on - success, `none` when any step fails (the caller falls back to the - single-leaf run — the watchdog then records the honest OOM row). -/ -def cutClosureShards (ix : String) (envIxe : String) - (dir : String) (name : String) (maxRamGb : Nat) : - IO (Option (String × String)) := do - let slug := name.map fun c => - if c == '/' || c == ' ' || c == '.' || c == ':' then '_' else c - let subIxe := s!"{dir}/{slug}.ixe" - let manifest := s!"{dir}/{slug}.ixes" - if (← FilePath.pathExists subIxe) && (← FilePath.pathExists manifest) then - return some (subIxe, manifest) - IO.FS.createDirAll dir - let prof := s!"{dir}/{slug}.ixprof" - let steps : List (Array String) := - [ #["shard", "extract", envIxe, "--consts", name, "--out", subIxe] - , #["profile", subIxe, "--out", prof] - , #["shard", subIxe, "--profile", prof, "--max-ram", toString maxRamGb, - "--out", manifest] ] - for args in steps do - let exit ← runGuarded false 0 ix args - if exit != 0 then - IO.eprintln s!"[bench] shard pipeline failed for '{name}' (exit {exit}); falling back to single leaf" - return none - return some (subIxe, manifest) - /-- Final run gate from the rows themselves: exit 1 when any EXPECTED name lacks a row (an aborted loop, a killed batch, or a dropped whole-env check must never look green — every selected name owes exactly one @@ -904,48 +840,6 @@ is not a benchmark run" runGuarded watchdog ceilingGb bt #["--ixe", ixe, "--consts", ",".intercalate aiurJoinConstants.toList, "--json", pairOut, "--texray", "--recursive", "--join"] - | "zisk" | "sp1" => - if mode != "execute" then - p.printError s!"error: {backend} supports only execute mode" - return exitUsage - let ixe ← ensureIxe repo info ((p.flag? "ixe").map (·.as! String)) - let ixeAbs := (← IO.FS.realPath ixe).toString - let outAbs ← do - IO.FS.writeFile out "" -- realPath needs an existing file - pure (← IO.FS.realPath out).toString - let host := s!"{backend}-host" - let work := s!"{repo}/{backend}" - let build ← runGuarded false 0 "cargo" - #["build", "--quiet", "--release", "--bin", host] (cwd := some work) - if build != 0 then - IO.eprintln s!"[bench] cargo build {host} failed (exit {build})" - return 1 - let bin := (← IO.FS.realPath s!"{work}/target/release/{host}").toString - -- zisk decides sharding at run time, per constant: the closure is - -- extracted and profiled, and the shard planner's RAM budget sizes - -- the partition from the closure's predicted cost — a closure that - -- fits gets a one-shard plan and runs as a single leaf. The artifacts - -- are cached under `zkshards-/` (pre-cut next to the fresh - -- `.ixe` by `ix bench shard` when available). A failed cut falls - -- back to the whole closure from the env's `.ixe` — the watchdog - -- then records the honest OOM row if it doesn't fit. sp1 always - -- runs whole closures. - let ix ← resolveBin repo "ix" - runPerConstant outAbs names "execute-time" fun name => do - let plan ← if backend == "zisk" - then cutClosureShards ix ixe s!"{repo}/zkshards-{env}" name ceilingGb - else pure none - match plan with - | some (subIxe, manifest) => - runGuarded watchdog ceilingGb bin - #["--execute", "--ixe", (← IO.FS.realPath subIxe).toString, - "--shard-plan", (← IO.FS.realPath manifest).toString, - "--json", outAbs, "--json-name", name, "--texray"] - (cwd := some work) - | none => - runGuarded watchdog ceilingGb bin - #["--execute", "--ixe", ixeAbs, "--consts", name, - "--json", outAbs, "--texray"] (cwd := some work) | other => p.printError s!"error: backend '{other}' has no runner" return exitUsage @@ -963,30 +857,6 @@ is not a benchmark run" saveBaseline out s!"{backend}-{env}-{mode}" return code -/-- `ix bench shard`: pre-cut the closure-shard artifacts for the env's - zisk constants into `zkshards-/` — `ix shard extract` → - `ix profile` → `ix shard` per name, skipping names whose artifacts - already exist. Not a benchmark run (no rows, no watchdog): bench-main's - compile job runs it next to the fresh `.ixe` so the artifacts ride the - same cache; the zisk runs cut lazily as a fallback when they're - absent. -/ -def runBenchShardCmd (p : Cli.Parsed) : IO UInt32 := do - let some info := findEnv ((p.flag? "env").map (·.as! String) |>.getD "InitStd") - | p.printError "error: unknown env (see envSpecs)" - return exitUsage - let env := info.name - let repo := (p.flag? "repo").map (·.as! String) |>.getD "." - let ceilingGb : Nat ← match p.flag? "ceiling-gb" with - | some f => pure (f.as! Nat) - | none => defaultCeilingGb - let names := (selectNames env "zisk" "execute").map (·.name) - IO.eprintln s!"[bench] shard {env}: {names.size} constant(s)" - let ixe ← ensureIxe repo info ((p.flag? "ixe").map (·.as! String)) - let ix ← resolveBin repo "ix" - for name in names do - let _ ← cutClosureShards ix ixe s!"{repo}/zkshards-{env}" name ceilingGb - return 0 - end Ix.Cli.BenchCmd open Ix.Cli.BenchCmd in @@ -995,7 +865,7 @@ def benchRunCmd : Cli.Cmd := `[Cli| "Execute one benchmark run (backend × env × mode), writing benchmark results JSON. Exits 0 on success (rows saved as the local baseline), 3 when the kernel rejected any constant, 1 when no rows were produced." FLAGS: - backend : String; "aiur | aiur-sharded-env | zisk | sp1 | ooc | lean4lean | compile | decompile" + backend : String; "aiur | aiur-sharded-env | ooc | lean4lean | compile | decompile" env : String; "Benchmark env from the registry (default: InitStd)" mode : String; "prove | execute (default: the backend's defaultMode)" out : String; "Benchmark results JSON output path (default: bench.json)" @@ -1004,15 +874,3 @@ def benchRunCmd : Cli.Cmd := `[Cli| ixe : String; "Path to an existing .ixe env to use (default: compile fresh; ignored by the compile backend)" "ceiling-gb" : Nat; "RAM watchdog ceiling in GB (default: machine RAM minus 15 GB)" ] - -open Ix.Cli.BenchCmd in -def benchShardCmd : Cli.Cmd := `[Cli| - "shard" VIA runBenchShardCmd; - "Pre-cut closure-shard artifacts (ix shard extract → profile → shard) for the env's zisk constants into zkshards-/; skips names already cut. The zisk runs cut lazily when these are absent — this front-loads the work so the artifacts can be cached once per commit." - - FLAGS: - env : String; "Benchmark env from the registry (default: InitStd)" - repo : String; "Checkout to shard: tools resolve from /.lake/build/bin first, then PATH (default: .)" - ixe : String; "Path to an existing .ixe env to use (default: compile fresh)" - "ceiling-gb" : Nat; "Predicted-RAM cap per shard, passed to `ix shard --max-ram` (default: machine RAM minus 15 GB)" -] diff --git a/Ix/Cli/BenchPlots.lean b/Ix/Cli/BenchPlots.lean index d3b9efb0b..82c47ded0 100644 --- a/Ix/Cli/BenchPlots.lean +++ b/Ix/Cli/BenchPlots.lean @@ -75,11 +75,6 @@ def plotTitle (workload measure : String) : String := | "aiur", "join-verify-time" => "Aiur Aggregate Join Verify Time" | "aiur", "join-peak-rss" => "Aiur Aggregate Join Peak RAM Usage" | "aiur", "join-proof-size" => "Aiur Aggregate Join Proof Size" - | "zisk-check-execute", "execute-time" => "Zisk Execute Time" - | "zisk-check-execute", "throughput" => "Zisk Execute Throughput" - | "zisk-check-execute", "peak-rss" => "Zisk Execute Peak RAM Usage" - | "zisk-check-execute", "cycles" => "Zisk Cycles" - | "zisk-check-execute", "shards" => "Zisk Shards" | "ooc-check", "check-time" => "OOC Check Time" | "ooc-check", "throughput" => "OOC Check Throughput" | "ooc-check", "peak-rss" => "OOC Check Peak RAM Usage" @@ -90,9 +85,7 @@ def plotTitle (workload measure : String) : String := | "aiur-sharded-env-check", "shards" => "Aiur Env Shards" | w, m => s!"{w}: {m}" -/-- Tracked but not plotted solo. Zisk - `constants` charts on the input-constants plot below instead of alone. - `ix-decompile` reuses the compile run's `.ixe`, so its `file-size` / +/-- Tracked but not plotted solo. `ix-decompile` reuses the compile run's `.ixe`, so its `file-size` / `constants` duplicate "Ix Environment Size" / "Ix Input Constants" exactly — the decompile run tracks only its own decompile-time / throughput / peak-rss trends. The aiur run's per-stage headline is @@ -112,8 +105,7 @@ def plotTitle (workload measure : String) : String := end-to-end `pipeline-throughput` gets the backend's one throughput plot, comparable with the other backends'. -/ def plotSkips : List (String × String) := - [("zisk-check-execute", "constants"), - ("ix-decompile", "file-size"), ("ix-decompile", "constants"), + [("ix-decompile", "file-size"), ("ix-decompile", "constants"), ("aiur", "ixvm-peak-rss"), ("aiur", "ixvm-verify-time"), ("aiur", "ixvm-execute-time"), ("aiur", "fri-verifier-execute-time"), ("aiur", "join-execute-time"), @@ -147,10 +139,10 @@ def unitsFor (slug : String) : Option String := ("throughput", "constants / second")].lookup (BenchCmd.dropStagePrefix slug) -/-- Dashboard group order (compile first, then the aiur pipeline, zisk, +/-- Dashboard group order (compile first, then the aiur pipeline, ooc); unranked workloads (a future backend) sort last. -/ def workloadOrder : List String := - ["ix-compile", "ix-decompile", "aiur", "zisk-check-execute", "ooc-check"] + ["ix-compile", "ix-decompile", "aiur", "ooc-check"] structure PlotSpec where testbed : String @@ -241,16 +233,6 @@ def testbedsForPlot (testbeds : Array Json) (workload : String) : Array String : /-! ## Sync -/ -/-- History window (seconds) for a plot, overriding the global `--window` - default by display title. A listed title renders a tighter rolling span so - its recent trend isn't compressed by older history; every other title uses - the default. Keyed by title — the same identity the sync keeps/replaces - on. -/ -def windowFor (title : String) (dflt : Nat) : Nat := - match title with - | "Zisk Execute Throughput" => 4 * 7 * 24 * 3600 -- 4 weeks - | _ => dflt - /-- A plot as the sync wants it: everything already resolved to UUIDs. -/ structure DesiredPlot where title : String @@ -366,27 +348,19 @@ def runPlotsCmd (p : Cli.Parsed) : IO UInt32 := do let title := plotTitle workload measure desired := desired.push { title, testbeds := testbedUuids, benchmarks := benchUuids, - measure := measureUuid, window := windowFor title window } - - -- Input-constants trend over the shared constant set. The kernel - -- backends (aiur, zisk, ooc) report the SAME named-constant count for - -- each checked closure (the pre-shard input set, unaffected by - -- anon-work dedup or shard partitioning), so the count is shared: - -- sourcing it from more than one testbed would draw every constant - -- multiple times. The zisk run is the single source: its sharded - -- execution keeps every closure feasible, so its rows (and their - -- `constants`) upload even where the aiur prove OOMs and the row is - -- dropped; only zisk's excluded names lack a line, and those have no - -- completed upload from any backend. + measure := measureUuid, window } + + -- The native checker supplies closure counts independently of proving + -- capacity. Select only the shared constants, excluding whole-env rows. let overlay : Option DesiredPlot := do - let ziskTb ← BenchCmd.benchmarkMachines.findSome? fun machine => - findUuid testbeds "slug" (BenchCmd.testbedOnMachine "zisk-check-execute" machine) + let oocTb ← BenchCmd.benchmarkMachines.findSome? fun machine => + findUuid testbeds "slug" (BenchCmd.testbedOnMachine "ooc-check" machine) let consts ← findUuid measures "slug" "constants" - let names ← (specs.find? (·.testbed == "zisk-check-execute")).map - (·.benchmarks.filterMap (findUuid benchmarks "name" ·)) + let names := Ix.BenchConstants.benchConstants.filterMap fun c => + findUuid benchmarks "name" c.name return { title := "Kernel Input Constants", - testbeds := #[ziskTb], benchmarks := names, - measure := consts, window := windowFor "Kernel Input Constants" window } + testbeds := #[oocTb], benchmarks := names, + measure := consts, window } match overlay with | some d => desired := desired.push d | none => do diff --git a/Ix/Cli/BenchReport.lean b/Ix/Cli/BenchReport.lean index b88778472..cde6ae2cf 100644 --- a/Ix/Cli/BenchReport.lean +++ b/Ix/Cli/BenchReport.lean @@ -126,8 +126,7 @@ def human (v : Option Float) (metric : String) : String := /-- Metrics where a LARGER value is the improvement; everything else is lower-is-better (times, RAM, cycles, sizes). `throughput` means constants checked per second on EVERY backend (`ix_bench::throughput` - is the one calculator; a zkVM's cycle rate stays derivable from its - cycles / execute-time fields). -/ + is the one calculator). -/ def higherIsBetter (metric : String) : Bool := dropStagePrefix metric == "throughput" @@ -360,8 +359,8 @@ def renderCompare (a : CompareArgs) : String := Id.run do ++ lines -- Per-phase drill-down (only under `a.phases`): the tables above -- carry every constant's high-level row; below it, each constant with - -- `phase-` fields (aiur witness/commit/quotient breakdowns, zkVM - -- coarse phases) gets its own collapsed mini-table + -- `phase-` fields (aiur witness/commit/quotient breakdowns) + -- gets its own collapsed mini-table -- (`phase | base | PR | Δ%`), opened as desired. let mut detail : Array String := #[] if a.phases then @@ -509,7 +508,7 @@ private def moverDriver (m pr : PerConstEntry) : String := no double counting, and a change to a shared dependency surfaces in every consumer entry it affects. This is NOT the full-closure scope of the headline table's curated `--consts` measurements (which re-check - the whole closure, the zkVM hosts' semantics) — the same name can be + the whole closure) — the same name can be seconds there and milliseconds here. Movers split into two classes with different evidence quality: @@ -588,7 +587,7 @@ def renderPerConstMovers (mainCsv prCsv : String) (baseLabel : String := "main") if rows.isEmpty then "" else Id.run do let mut s := s!"**{title}**\n\n\ - | constant | {baseLabel} | PR | Δtime | Δcost (Zisk) | driver |\n\ + | constant | {baseLabel} | PR | Δtime | Δcost | driver |\n\ |---|---|---|---|---|---|\n" for (name, m, p, _) in rows do let dcost := fmtDeltaCell m.cost p.cost "cycles" @@ -969,10 +968,9 @@ def parseError (msg : String) : IO UInt32 := do Grammar (an unknown command-line token, or an unknown env in BENCH_ENVS, rejects the command — exit 2 and a `parse-error` output): - !benchmark ([aiur] [zisk] [sp1] [ooc] [compile] [decompile] | all) + !benchmark ([aiur] [ooc] [compile] [decompile] | all) [execute] [fresh] [KEY=VALUE …] - (`all` covers the scheduled backends; zisk and sp1 are on demand - and run only when named) + (`all` covers the scheduled backends) BENCH_ENVS=InitStd,Mathlib (case-insensitive, any registry env; defaults to every env for the env-keyed backends (compile, @@ -987,7 +985,7 @@ def parseError (msg : String) : IO UInt32 := do for FLT.* names — so BENCH_ENVS is never required. A single-env BENCH_ENVS still forces placement.) - BENCH_PHASES=1 / RUST_LOG=… / WITHOUT_VK_VERIFICATION=… / + BENCH_PHASES=1 / RUST_LOG=… / RUSTFLAGS=… / IX_COMPILE_EAGER=… / IX_COMPILE_DEMOTE=… / IX_COMPILE_WORKERS=… / IX_DECOMPILE_KENV_CLEAR_ENTRIES=… (passthrough; BENCH_PHASES=1 adds the @@ -1044,8 +1042,7 @@ def runParseCmd (p : Cli.Parsed) : IO UInt32 := do if t == "fresh" then freshFlag := true continue - -- `all` is the scheduled surface; a backend whose default mode is - -- unscheduled (zisk, sp1) runs only when named. + -- `all` includes the scheduled backends. let requested := if t == "all" then Ix.Cli.BenchCmd.backendSpecs.filter fun b => b.disabled.isNone && b.scheduledModes.contains b.defaultMode @@ -1110,7 +1107,7 @@ def runParseCmd (p : Cli.Parsed) : IO UInt32 := do for tok in Ix.Cli.ConstsFile.parseCommaList val do if !consts.contains tok then consts := consts.push tok | k => - if ["BENCH_PHASES", "RUST_LOG", "WITHOUT_VK_VERIFICATION", + if ["BENCH_PHASES", "RUST_LOG", "RUSTFLAGS", "IX_COMPILE_EAGER", "IX_COMPILE_DEMOTE", "IX_COMPILE_WORKERS", "BENCH_TRACE_SHARDS", "IX_DECOMPILE_KENV_CLEAR_ENTRIES"].contains k then @@ -1119,7 +1116,7 @@ def runParseCmd (p : Cli.Parsed) : IO UInt32 := do return ← parseError s!"unknown config key `{k}` in the \ benchmark command (expected BENCH_ENVS / BENCH_CONSTS, \ or passthrough: BENCH_PHASES, \ - RUST_LOG, WITHOUT_VK_VERIFICATION, RUSTFLAGS, \ + RUST_LOG, RUSTFLAGS, \ IX_COMPILE_EAGER, IX_COMPILE_DEMOTE, IX_COMPILE_WORKERS, \ BENCH_TRACE_SHARDS, IX_DECOMPILE_KENV_CLEAR_ENTRIES)" | [] => continue @@ -1354,7 +1351,6 @@ def benchCmd : Cli.Cmd := `[Cli| SUBCOMMANDS: benchRunCmd; - benchShardCmd; benchCompareCmd; benchReportCmd; benchBmfCmd; diff --git a/Ix/Cli/CheckRsCmd.lean b/Ix/Cli/CheckRsCmd.lean index eb159266b..e166bf895 100644 --- a/Ix/Cli/CheckRsCmd.lean +++ b/Ix/Cli/CheckRsCmd.lean @@ -17,11 +17,9 @@ Without a filter, every kernel-checkable address is checked (whole env). With `--consts` / `--consts-file`, the named constants are - checked together with their FULL dependency closures — the same mode - and scope as the zkVM hosts' `--consts` execute path, so an - out-of-circuit run is directly comparable to the in-circuit one. Add - `--skip-deps` for a subject-only check (deps trusted), mirroring - `zisk-host --skip-deps`. `--ns` prefix filtering stays meta-only. + checked together with their full dependency closures. Add + `--skip-deps` for a subject-only check (deps trusted). + `--ns` prefix filtering stays meta-only. Direct Lean → kernel typechecking (compile-and-check from source) is available via the `rsCheckConstsFFI` API for tests @@ -414,9 +412,9 @@ def checkRsCmd : Cli.Cmd := `[Cli| ns : String; "Comma-separated Lean.Name prefixes to filter on (meta mode only)" consts : String; "Comma-separated EXACT constant names. Meta mode: subject-only seed check. Anon mode: full-closure check of each name (the zkVM hosts' semantics; --skip-deps for subject-only)." "consts-file" : String; "Path to a file with one constant name per line (`#` comments); unions with --consts." - "skip-deps"; "With --anon --consts: check each named constant subject-only, trusting its deps (same flag as zisk-host/sp1-host/bench-typecheck)." + "skip-deps"; "With --anon --consts: check each named constant subject-only, trusting its deps (same flag as bench-typecheck)." "fail-out" : String; "Write failing constants to this path (consumable by --consts-file)" - "per-const" : String; "Anon whole-env mode: write a per-work-item attribution CSV (name, addr, wall nanos, op counters, predicted Zisk cost) to this path. Each entry is ONE constant's (or Muts block's) own check — deps are lazily ingressed and trusted, not re-checked — plus the ingress of the closure slice that check consults; entries sum to the env total. NOT the full-closure scope of --consts measurements. Feeds the `ix bench compare` top-movers drill-down." + "per-const" : String; "Anon whole-env mode: write a per-work-item attribution CSV (name, addr, wall nanos, op counters, estimated cost) to this path. Each entry is ONE constant's (or Muts block's) own check — deps are lazily ingressed and trusted, not re-checked — plus the ingress of the closure slice that check consults; entries sum to the env total. NOT the full-closure scope of --consts measurements. Feeds the `ix bench compare` top-movers drill-down." json : String; "Write benchmark results rows to this path (anon mode). Whole-env: one row keyed by --json-name. With --consts: each name runs as its OWN closure check (the zkVM hosts' per-constant scope) and records its own timed row, env loaded once." "json-name" : String; "Row key for the whole-env --json row (default: `env`)" workers : Nat; "Number of parallel kernel-check workers; 1 disables parallelism (default: available_parallelism). Plumbs via IX_KERNEL_CHECK_WORKERS env var." diff --git a/Ix/KernelCheck.lean b/Ix/KernelCheck.lean index 4583e5c9b..cc0588d19 100644 --- a/Ix/KernelCheck.lean +++ b/Ix/KernelCheck.lean @@ -143,15 +143,12 @@ opaque rsCheckAnonFFI : IO (Array (String × Option CheckError)) /-- FFI: anon-mode type-check of named constants with (by default) their full - dependency closures — the same mode and scope as the zkVM hosts' `--consts` - execute path, so an out-of-circuit run is directly comparable to the - in-circuit one. The `Bool` after the names is `skip-deps`: `true` checks - only each name's own work item (subject-only; deps trusted), mirroring - `zisk-host --skip-deps`. + dependency closures. The `Bool` after the names is `skip-deps`: `true` + checks only each name's own work item (subject-only; deps trusted). Names are the constants' displayed forms (e.g. `"Nat.add_comm"`, `"_private.Init.….instRxcHasSize_eq"`), resolved through the env's `named` - metadata by string match — the same resolution the zkVM hosts use — after + metadata by string match, after which the check runs on the anon view (the kernel never sees names). A member of a mutual block selects the whole block's work item. Multiple names union their closures into one check set. diff --git a/Ix/Watchdog.lean b/Ix/Watchdog.lean index e19599886..39f2293e7 100644 --- a/Ix/Watchdog.lean +++ b/Ix/Watchdog.lean @@ -16,19 +16,10 @@ allocator reservations don't count. Swap stays off so a breach kills the scope instead of thrashing the box. * `memory.oom.group=1`: on breach the kernel kills the WHOLE scope, - not just its biggest process. Without it, Zisk's ASM service gets - singled out and the surviving host converts the memory kill into a - clean exit 1 — which an orchestrator must treat as a deterministic - failure. The scope's cgroup is user-delegated, so the write needs no + not just its biggest process. Killing only a child may let the + surviving parent report a non-signal exit, hiding the memory kill. The scope's cgroup is user-delegated, so the write needs no sudo; if it fails, the wrapper exits 2 rather than run with wrong kill semantics. - * empty `OMPI_MCA_opal_signal`: Open MPI (linked into zisk-host via - proofman) registers a stacktrace-printing handler on fatal signals; - when the fault originates inside malloc, that handler allocates - while the corrupted arena lock is held and wedges at flat memory - forever — the cap never fires. An empty list skips handler - registration so fatal signals keep their default disposition. - Harmless for tools that don't link Open MPI. * a user systemd instance must exist: reuse a reachable manager or bootstrap the effective UID's manager on CI (passwordless sudo). Wait for startup and report bootstrap errors. `available` probes @@ -90,17 +81,15 @@ private def ensureUserManager (uid : Nat) : IO Unit := do environment on headless runners using the effective UID's runtime directory. Check connectivity before sudo so normal desktop runs need no bootstrap. -/ private def scopeEnv : IO (Array (String × Option String)) := do - let base : Array (String × Option String) := - #[("OMPI_MCA_opal_signal", some "")] let out ← commandOutput "id" #["-u"] - let some uid := out.stdout.trimAscii.toString.toNat? | return base - if out.exitCode != 0 then return base + let some uid := out.stdout.trimAscii.toString.toNat? | return #[] + if out.exitCode != 0 then return #[] let runtime := s!"/run/user/{uid}" let inherited := (← IO.getEnv "XDG_RUNTIME_DIR").getD runtime - let session := base.push ("XDG_RUNTIME_DIR", some inherited) + let session := #[("XDG_RUNTIME_DIR", some inherited)] if (← commandOutput "systemctl" #["--user", "show-environment"] session).exitCode == 0 then return session - let env := base ++ #[("XDG_RUNTIME_DIR", some runtime), + let env := #[("XDG_RUNTIME_DIR", some runtime), ("DBUS_SESSION_BUS_ADDRESS", none)] if inherited != runtime then if (← commandOutput "systemctl" #["--user", "show-environment"] env).exitCode == 0 then diff --git a/README.md b/README.md index 5cd891617..aa13843c9 100644 --- a/README.md +++ b/README.md @@ -229,375 +229,6 @@ not this stable overview. **Rust tests:** `cargo test` or `cargo nextest run` -### Proving under SP1 - -The Ix kernel typechecker has an SP1 guest at `sp1/guest/` driven by a host at -`sp1/host/`. The workflow is two steps: first compile a Lean program to a `.ixe` -serialized `Ixon.Env`, then feed that file to the SP1 host to either execute or -prove the typecheck. - -Install the SP1 toolchain (`cargo-prove` and the succinct Rust toolchain) per -the [SP1 docs](https://docs.succinct.xyz/docs/sp1/getting-started/install). - -1. **Compile a `.ixe` from a Lean file.** `ix compile` takes the Lean source - as a positional argument and writes the serialized `Ixon.Env`; `--out` sets - the output path (default: the lowercased input stem plus `.ixe`). For a - small demo env: - - ``` - lake exe ix compile Tests/MinimalDefs.lean --out minimal.ixe - ``` - - For a larger, realistic env compile one of the `Benchmarks/Compile` - targets, then scope proving to one or more constants with `--consts` - (step 2): - - ``` - lake exe ix compile Benchmarks/Compile/CompileInit.lean --out init.ixe - ``` - -2. **Execute or prove under SP1.** From `sp1/host/`, run the host with `--ixe` - pointing at the file produced above: - - ``` - cd sp1/host - # Execute the kernel typecheck in the SP1 VM (no proof), prints failures + cycles - RUST_LOG=info cargo run --release -- --execute --ixe ../../minimal.ixe - # Generate and verify a compressed SP1 proof of the same typecheck (CPU) - WITHOUT_VK_VERIFICATION=1 RUST_LOG=info cargo run --release -- --ixe ../../minimal.ixe - # Prove a single constant out of a larger env (Anon-only): the host resolves - # the name and ships only that constant's closure sub-env. Full-closure by - # default; add --skip-deps for a subject-only check (deps trusted). - WITHOUT_VK_VERIFICATION=1 RUST_LOG=info cargo run --release -- --ixe ../../init.ixe --consts Nat.add_comm - ``` - - With no `--ixe`, the host runs against an empty `Ixon.Env`. - - **Verifying-key bypass (`WITHOUT_VK_VERIFICATION=1`).** Proving currently - requires this environment variable; `--execute` does not. The guest hashes - via the patched BLAKE3's `BLAKE3_COMPRESS` precompile (see - [`argumentcomputer/BLAKE3` branch `sp1`](https://github.com/argumentcomputer/BLAKE3/tree/sp1)), - whose recursion shapes aren't in the SP1 prover's bundled `vk_map.bin`. - Without the bypass, proving aborts with `vk not allowed` / `vk_root - mismatch`. The host is built with the SP1 fork's `experimental` feature, - which honors this variable on both the prover and the light-node verifier. - Drop it once a production `vk_map.bin` is regenerated with the new chip. - - **Kernel modes.** The default is Anon mode (metadata-erased kernel with - lazy on-demand ingress — matches Aiur's `kernel_check_test` semantics). - Pass `--meta` to run Meta mode (preserves names + dup-level-param check; - eager full-env ingress). Both prove the same structural typecheck; Meta - is strictly more constrained but slightly more expensive in cycles. - - **GPU proving (pre-production; depends on the SP1 fork).** Build with the - `cuda` feature and set `SP1_PROVER=cuda`. Beyond the stock SP1 CUDA - prerequisites (an NVIDIA GPU with CUDA 12+), the BLAKE3_COMPRESS precompile - needs two prebuilt binaries that cannot come from a crate registry and must - be produced from a local checkout of the `argumentcomputer/sp1` fork's - `blake3-precompile` branch. Set `SP1_FORK_DIR` to that checkout. Skipping - either step does not fail loudly — you get `invalid syscall number` (stale - runner) or a hang/`ConnectionRefused` (missing gpu-server). - - 1. **Runner-binary.** The host spawns execution children from - `sp1-core-executor-runner-binary`, which embeds the JIT syscall dispatch; - a stock/stale one panics `invalid syscall number` on BLAKE3_COMPRESS. - Build it from the fork and point the host at it: - - ``` - (cd "$SP1_FORK_DIR" && cargo build --release -p sp1-core-executor-runner-binary) - export SP1_CORE_RUNNER_OVERRIDE_BINARY="$SP1_FORK_DIR/target/release/sp1-core-executor-runner-binary" - ``` - - 2. **GPU server.** Install the fork's `sp1-gpu-server` once into - `~/.sp1/bin` via `$SP1_FORK_DIR/sp1-gpu/scripts/install-fork-gpu-server.sh`. - The server extracts its own embedded runner to - `/tmp/sp1-native-runner-bin-{HASH}` *only if no file is already there*, so - pre-write the fork's runner-binary to that path to win the race (the hash - is in the server binary: `strings ~/.sp1/bin/sp1-gpu-server | grep -oE - 'sp1-native-runner-bin-[0-9a-f]{64}'`). - - With both in place: - - ``` - WITHOUT_VK_VERIFICATION=1 SP1_PROVER=cuda RUST_LOG=info \ - cargo run --release --features cuda -- --ixe ../../minimal.ixe - ``` - - On an RTX PRO 6000 a `nataddcomm.ixe` compressed proof takes ~14 s on GPU vs - ~466 s on CPU. `WITHOUT_VK_VERIFICATION=1` is required as above; none of this - is production-safe until `vk_map.bin` is regenerated with the new chip. See - the [SP1 CUDA docs](https://docs.succinct.xyz/docs/sp1/generating-proofs/hardware-acceleration/cuda) - for the base CUDA prerequisites. - - **CUDA startup race (`scripts/cuda-runner.sh`).** `sp1/.cargo/config.toml` - wires every binary through `scripts/cuda-runner.sh`, which works around an - SP1 6.x CUDA-prover startup race: the SDK only retries the gpu-server socket - connect for ~1 s (CUDA init can take longer), `kill_on_drop` SIGKILLs the - server leaving an orphaned `/tmp/sp1-cuda-*.sock` → `ConnectionRefused`, and - the NVIDIA driver holds contexts for tens of seconds after a SIGKILL so a - fast retry hangs in `cuInit`. The runner cleans the stale socket and retries - with progressive backoff. It is a pass-through no-op when `SP1_PROVER` is not - `cuda`. - -### Proving under Zisk - -The Ix kernel typechecker also has a Zisk guest at `zisk/guest/` driven by a -host at `zisk/host/`. The workflow mirrors the SP1 one — first compile a Lean -program to a `.ixe`, then feed it to the Zisk host to either execute or prove -the typecheck. - -Install Zisk (`cargo-zisk`, `ziskemu`, and the RISC-V toolchain needed to -build the guest) per the -[Zisk install docs](https://0xpolygonhermez.github.io/zisk/getting_started/installation.html). - -1. **Compile a `.ixe` from a Lean file.** Same as for SP1: - - ``` - lake exe ix compile Tests/MinimalDefs.lean --out minimal.ixe - ``` - -2. **Execute or prove under Zisk.** From `zisk/`, run the host with `--ixe`: - - ``` - cd zisk - # Execute the kernel typecheck in the Zisk VM (no proof), prints cycles - RUST_LOG=info cargo run --release -- --execute --ixe ../minimal.ixe - # Run the constraint checker without generating a proof - RUST_LOG=info cargo run --release -- --verify-constraints --ixe ../minimal.ixe - # Generate and verify a VadcopFinal proof of the same typecheck (CPU) - RUST_LOG=info cargo run --release -- --ixe ../minimal.ixe - # Check one or more named constants out of a larger env. The host resolves each - # name and ships only its closure sub-env (lazy fault-in, no whole-env load). - # By default this is the FULL-CLOSURE typecheck — the constant and its whole - # dependency closure (matching the Aiur `bench-typecheck --consts `). - # Composes with --execute (cycles only) and plain prove. - RUST_LOG=info cargo run --release -- --execute --ixe ../init.ixe --consts Nat.add_comm - RUST_LOG=info cargo run --release -- --ixe ../init.ixe --consts Nat.add_comm,Nat.succ - # Add --skip-deps for a subject-only check (deps trusted, not re-checked): - RUST_LOG=info cargo run --release -- --execute --ixe ../init.ixe --consts Vector.extract_append --skip-deps - ``` - - `--consts` / `--skip-deps` are the same flags `ix check`, `sp1-host`, and the - Aiur `bench-typecheck` use, so all four share one vocabulary. `--skip-deps` - trusts - dependencies rather than re-checking them, so it is far cheaper than the - full-closure default — reserve it for constants too expensive to - full-closure-check that also can't be sharded (e.g. `Vector.extract_append` - over Init/Std). See [`docs/zisk-cycle-cost-model.md`](docs/zisk-cycle-cost-model.md) - for the measured cost models across constant shapes. - - With no `--ixe`, the host runs against an empty `Ixon.Env`. The host's - `build.rs` invokes `zisk_sdk::build_program("../guest")`, so `cargo run` - transparently rebuilds the guest ELF whenever its sources change. - - **Kernel mode.** The Zisk host runs Anon mode only (metadata-erased - kernel with lazy on-demand ingress); there is no `--meta` flag. - - **GPU proving.** Pass `--gpu` at runtime — Zisk's prover backend ships - with CUDA support by default (the `cpu-only` Cargo feature is opt-out - and is not set here): - - ``` - RUST_LOG=info cargo run --release -- --gpu --ixe ../minimal.ixe - ``` - - Requires a CUDA-capable GPU and the matching CUDA runtime libraries - visible to the linker (`LD_LIBRARY_PATH`); follow the - [Zisk install docs](https://0xpolygonhermez.github.io/zisk/getting_started/installation.html). - - **CUDA JIT cache (`CUDA_CACHE_MAXSIZE`).** The driver caches compiled - proving kernels (PTX→SASS, under `~/.nv/ComputeCache`) and reuses them - across processes — that's what keeps a second run warm. The default cap - (~1 GB) is small enough that as a run JITs more kernel variants (bigger - envs, more state-machine shapes) it forces LRU eviction and intermittent - re-JIT cold spikes mid-run. Pin it to the 4 GB hard max to remove that - failure mode (cost is only disk): - - ``` - export CUDA_CACHE_MAXSIZE=4294967296 # 4 GB - ``` - - **Warm-batch proving and cold-start.** On the Zisk v0.18 branch the first - GPU proof on a machine paid a large one-time JIT cold-start (PTX→SASS, - ~126 s cold vs ~12 s warm for `nataddcomm.ixe` on an RTX PRO 6000). At - Zisk v1.0.0-alpha that per-process JIT penalty is gone: cold ≈ warm, both - **~17.6-17.9 s** for the same `nataddcomm.ixe` proof on the same GPU - (inner-proof phase ~14 s — note that is slower than v0.18's ~9 s warm - figure; upstream prover/recursion changes, not the blake3 port). The one - remaining true first-run cost is one-time and on-disk, not per-process: - the first GPU prove against a freshly generated proving key materializes - ~40 GB of `*_gpu` const/consttree variants under `~/.zisk/provingKey`. - `--ixe` is still repeatable, so several inputs can be proved in one warm - process. Keeping `CUDA_CACHE_MAXSIZE` pinned (above) remains harmless but - is no longer load-bearing. By default proving is stateful with no - checkpointing — if a run is killed it loses in-flight shard proofs and - restarts from the first shard; use a proof store (`--store-dir`, see - *Sharding large environments* below) to make a sharded run resumable. - - ``` - RUST_LOG=info cargo run --release -- --gpu \ - --ixe ../nataddcomm.ixe --ixe ../stringappend.ixe - ``` - - **Memlock limit (Linux).** Zisk's assembly emulator `mmap`s ROM and - trace buffers with `MAP_LOCKED`, so the per-process locked-memory - rlimit (`ulimit -l`) must be high enough to back the trace. Many - Linux distros default to a low memlock limit; the Linux kernel - itself sets non-privileged processes to `RAM / 8`, which is still - too small for larger envs. Symptom: `mmap(rom) errno=11=Resource - temporarily unavailable` followed by `Shmem creation … failed with - exit status: 255` during `STARTING_ASM_MICROSERVICES`. - - *Per-shell (does not survive new logins or reboot):* - - ``` - sudo prlimit --memlock=unlimited:unlimited --pid $$ - ulimit -l # confirm: prints 'unlimited' - ``` - - *Persistent (recommended; both edits needed because `systemd` and - PAM apply rlimits on different paths — `DefaultLimitMEMLOCK` only - reaches services systemd spawns directly, interactive shells go - through PAM):* - - ``` - # 1. systemd-spawned services - sudo sed -i 's|^#DefaultLimitMEMLOCK=.*|DefaultLimitMEMLOCK=infinity|' \ - /etc/systemd/system.conf - - # 2. PAM session limits (applied to login shells, sudo, etc.) - sudo tee /etc/security/limits.d/99-memlock.conf >/dev/null <<'EOF' - * soft memlock unlimited - * hard memlock unlimited - EOF - - # Apply: log out of every login shell and back in (no reboot needed). - # Verify in a new shell: - ulimit -l # → unlimited - cat /proc/$$/limits | grep "locked" # → unlimited / unlimited - ``` - - Matches the Zisk - [installation docs](https://0xpolygonhermez.github.io/zisk/getting_started/installation.html). - - **Heap cap.** The Zisk zkVM has a hard 512 MB RAM cap - ([`RAM_SIZE`](https://github.com/0xPolygonHermez/zisk/blob/v1.0.0-alpha/core/src/mem.rs#L111)), - of which ~510 MB is usable heap, and isn't configurable without - rebuilding the proving setup. Envs whose deserialized in-memory - representation exceeds that won't fit (full `TutorialDefs.lean` pulls in - Lean stdlib + Batteries + LSpec, around 1 GB resident). For bigger envs, - prefer the SP1 backend (default 24 GB runtime cap - [`DEFAULT_MEMORY_LIMIT`](https://github.com/succinctlabs/sp1/blob/v6.2.0/crates/core/executor/src/opts.rs#L25), - configurable via `MEMORY_LIMIT` env var up to a ~1 TB JIT ceiling - [`MAX_JIT_LOG_ADDR`](https://github.com/succinctlabs/sp1/blob/v6.2.0/crates/primitives/src/consts.rs#L11)), - or scope to one or more constants with `--consts ` (all backends), - which resolves each name and ships only that constant's closure sub-env to the - guest. By default each re-checks its full dependency closure; add `--skip-deps` - to check them **subject-only** (dependencies trusted and lazily faulted in, not - re-typechecked) — so individual constants of a large env still fit the cap, - even ones whose full-closure typecheck would not. To prove a large env in - full under Zisk, shard it (see - *Sharding large environments* below): each shard ships only its own closure - sub-env, so the pieces fit the cap even when the whole env does not. - - **Host RAM during proving.** Distinct from the in-guest heap cap above, - the prover side (Zisk's `proofman`) holds in-flight witness traces in host - RAM during `CALCULATING_CONTRIBUTIONS`. The number of resident witnesses - (Zisk's `max_witness_stored`) is left at Zisk's built-in default of 10: - we measured that lowering it does not materially reduce peak host RAM or - prove time for the Ix kernel typecheck workload, so it is not exposed as a - knob. Peak host RAM per shard is instead governed by shard size — prove - smaller shards (`--shard-bytes`) if you OOM during - `CALCULATING_CONTRIBUTIONS`. Not relevant for `--execute` or - `--verify-constraints` modes. - -3. **Sharding large environments.** A whole large env (e.g. all of - `Init`) does not fit a single Zisk proof: it overruns both the 512 MB - guest heap and, more bindingly, the prover's minimal-trace shared-memory - ceiling (64 GB per job on the assembly path). Sharding splits the env's - type-checking work into pieces that are proven independently — each - shipped with only its own dependency closure — and then folded into one - aggregate proof. This is a two-part workflow: produce a shard manifest - (a `.ixes` file), then prove it with `--shard-plan`. - - **(a) Produce a shard manifest.** A manifest partitions the env's - per-constant work, packing shards to a resource cap by real - type-checking cost and cutting where cross-shard dependencies are fewest. - - Profiling runs the kernel over the env (slow) and writes a `.ixprof` - cost map; sharding is instant graph work on that map, so it is cheap to - re-tune without re-profiling. Both steps are `ix` CLI subcommands: - - ``` - # Profile once (slow): init.ixe → init.ixprof (cost map + delta graph). - lake exe ix profile init.ixe - # Shard (instant): init.ixprof → init.ixes manifest. With no budget flags - # it bin-packs to the fewest shards that each fit this box's RAM (peak - # prover RAM ≈ `50 + 33 × cycles_billions` GB, targeting ~85 % of total). - lake exe ix shard init.ixe --profile init.ixprof - # Or pick a per-shard budget / a fixed count instead: - # --max-ram 256 --max-cycles 4500000000 --shards 16 - ``` - - `ix shard` also reports the shard count, total predicted cycles, and a - prove-time estimate from the measured leaf model (`54 s + 158 s·Bsteps` - per shard). Sharded proving is sequential today, so the estimate assumes - one prover; `--parallelism N` divides the wall-clock for a future N-prover - setup (the sequential total is always shown alongside). - - **(b) Prove the manifest.** Pass the `.ixes` to the host with - `--shard-plan` alongside the same `--ixe` it was built for. Each shard - becomes one leaf proof (built over only that shard's closure sub-env), - and the leaves fold up the manifest's aggregation tree into a single root - proof: - - ``` - cd zisk - RUST_LOG=info cargo run --release -- --gpu \ - --ixe ../init.ixe --shard-plan ../init.ixes - ``` - - **Resumable proving (`--store-dir`).** A proof store makes a sharded run - restartable and lets proofs be reused across runs and envs: - - ``` - RUST_LOG=info cargo run --release -- --gpu \ - --ixe ../init.ixe --shard-plan ../init.ixes \ - --store-dir ../init-store --require-closed - ``` - - - `--store-dir DIR`: each completed shard proof is banked to - `DIR/proofs/.{proof,cover,asm}` as it finishes. **Re-run the same - command to resume** — shards already covered by the store are skipped - (not re-proven) and folded into the aggregate instead. Reuse is - trustless: a stored proof is re-verified in-circuit at aggregation, - never trusted by the host. Proofs are content-addressed, so a constant - proven in one env is reused in any other env that contains it. - - `--no-reuse`: ignore the store for this run (the "no sharing" baseline); - the existing store is neither read nor overwritten. - - `--require-closed`: error *before* proving unless every typing - dependency of every certified constant is either proven in this run or - already in the store — axioms are the only permitted residual. Turns - "result modulo axioms" from a printed hope into an enforced - precondition. Pairs with `--plan` for a no-prove check. - - **Other shard modes and tuning flags.** - - - *Static partitioning without a manifest:* `--shard-consts N` (N work - items per shard) or `--shard-bytes B` (pack contiguous items until - serialized bytes exceed `B`). Simpler, but not balanced by real - type-checking cost — `--shard-plan` is the performant path. - - `--plan`: print the planned partition and exit, no proving. - - `--execute`: run the shards in the VM only and print per-shard cycle - counts — use it to measure a shard's true cycle cost (e.g. to pick or - recalibrate a cycle budget) without proving. - - `--only-shard K`: prove just the 1-indexed shard `K` (skips - aggregation) for smoke-testing a single shard. - - `--dump-input FILE`: write one shard's guest stdin to `FILE` for - standalone profiling with `ziskemu` or `cargo-zisk`. - - `--agg-arity A` (default 16): how many child proofs each aggregation - step folds at once. - ### Nix #### Prerequisites diff --git a/crates/bench/src/lib.rs b/crates/bench/src/lib.rs index 2358851ef..99e02ef40 100644 --- a/crates/bench/src/lib.rs +++ b/crates/bench/src/lib.rs @@ -1,6 +1,6 @@ //! The benchmark row contract shared by every measured tool. //! -//! Each tool (`bench-typecheck`, `zisk-host`, `sp1-host`, `ix check-rs`, +//! Each tool (`bench-typecheck`, `ix check-rs`, //! `ix compile`) reports its results as one JSON object per benchmark name in //! a single file: //! @@ -77,8 +77,7 @@ impl std::error::Error for Rejection {} /// Peak resident set size (bytes) across this process *and its children*, /// from tracing-texray's tree sampler. `None` until the sampler has started /// or off Linux. Unlike a bare `/proc/self/status` read this includes child -/// processes (e.g. Zisk's ASM microservices, which mmap large ROMs in -/// separate PIDs). +/// processes. pub fn peak_rss_bytes() -> Option { match tracing_texray::rss_sampler::peak_tree_rss_bytes() { 0 => None, @@ -87,8 +86,7 @@ pub fn peak_rss_bytes() -> Option { } /// Constants checked per second — the one meaning `throughput` has on -/// every backend (a zkVM's cycle rate stays derivable from its `cycles` -/// and `execute-time` fields). Zero when the timed window is empty. +/// every backend. Zero when the timed window is empty. /// /// The count converts through u32, the widest type with a lossless /// `f64::from`. A count beyond u32 (no env comes within orders of diff --git a/crates/ffi/src/aiur/protocol.rs b/crates/ffi/src/aiur/protocol.rs index 876ceb51d..7894a7605 100644 --- a/crates/ffi/src/aiur/protocol.rs +++ b/crates/ffi/src/aiur/protocol.rs @@ -2436,7 +2436,3 @@ fn decode_io_buffer_map( } map } - -// ============================================================================= -// SP1 aggregate-root terminal (feature `sp1`) -// ============================================================================= diff --git a/crates/ffi/src/kernel.rs b/crates/ffi/src/kernel.rs index 1090abda7..f8d1d744f 100644 --- a/crates/ffi/src/kernel.rs +++ b/crates/ffi/src/kernel.rs @@ -1359,8 +1359,7 @@ enum AnonWorkItem { /// (blocks aren't kernel KIds). /// /// Delegates the enumeration to -/// [`ix_kernel::anon_work::build_anon_work`] (shared with the -/// SP1/Zisk guests) and layers the FFI's per-target result-slot +/// [`ix_kernel::anon_work::build_anon_work`] and layers per-target result-slot /// bookkeeping on top. /// Assign result slots to a set of kernel work items — the indexing step /// shared by the whole-env check (every item) and the per-constant closure @@ -1877,13 +1876,11 @@ fn closure_work_items( } /// FFI: anon-mode type-check of named constants with (by default) their full -/// dependency closures — the same mode and scope as the zkVM hosts' `--consts` -/// execute path, so an out-of-circuit run is directly comparable to the -/// in-circuit one. `skip_deps` restricts the check to each name's own work -/// item (subject-only; deps trusted), mirroring `zisk-host --skip-deps`. +/// dependency closures. `skip_deps` restricts the check to each name's own +/// work item (subject-only; deps trusted). /// -/// Names resolve through the env's `named` metadata by displayed form (the -/// same string match the zkVM hosts use), then the metadata is dropped and +/// Names resolve through the env's `named` metadata by displayed form, +/// then the metadata is dropped and /// the check runs on the anon view — the kernel never sees names. A member /// of a mutual block selects the whole block's work item (blocks check /// atomically). Multiple names union their closures into one check set. @@ -2791,7 +2788,7 @@ pub extern "C" fn rs_shard_static_graph( } /// Print the general-purpose cost breakdown for `ix profile` — the kernel-work -/// metrics plus the predicted Zisk leaf cost/RAM (à la `cargo-zisk … -p summary`). +/// metrics plus the legacy guest-cost and RAM estimates. // `steps as f64` is a display-only cast for `{:.2e}` formatting; precision loss // past 2⁵³ steps is irrelevant to a two-sig-fig estimate. #[allow(clippy::cast_precision_loss)] @@ -2838,7 +2835,7 @@ fn print_profile_summary( \u{20}\u{20}nat-arith {nat:>14}\n\ \u{20}\u{20}intern nodes {intern:>14}\n\ \u{20}\u{20}ingress bytes {ingress:>14}\n\n\ - predicted Zisk leaf ({SHARD_COST_FLOOR} + {COST_PER_SUBST}·subst + {COST_PER_WHNF}·whnf + {COST_PER_DEF_EQ}·def_eq + {COST_PER_INTERN}·intern; cross-shard + {COST_PER_INGRESS_BYTE}·bytes)\n\ + estimated guest leaf ({SHARD_COST_FLOOR} + {COST_PER_SUBST}·subst + {COST_PER_WHNF}·whnf + {COST_PER_DEF_EQ}·def_eq + {COST_PER_INTERN}·intern; cross-shard + {COST_PER_INGRESS_BYTE}·bytes)\n\ \u{20}\u{20}cost units ≈ {:.2e} (~92.5/guest step)\n\ \u{20}\u{20}RAM ≈ {ram_gib:.0} GiB{warn}", sink.records.len(), diff --git a/crates/ixon/src/map.rs b/crates/ixon/src/map.rs index 5d514782f..81c63d570 100644 --- a/crates/ixon/src/map.rs +++ b/crates/ixon/src/map.rs @@ -2,8 +2,8 @@ //! //! On host, this is `dashmap::DashMap` — concurrent reads/writes for the //! parallel ingress path. On `riscv64`, `DashMap` pulls in `parking_lot_core`, -//! whose `HashTable::new` calls `Instant::now()` (unsupported in the Zisk -//! guest's stdlib). Instead, alias to a thin single-threaded wrapper around +//! whose `HashTable::new` calls `Instant::now()` (unavailable in guest +//! standard libraries). Instead, alias to a thin single-threaded wrapper around //! `rustc_hash::FxHashMap` that mirrors the subset of DashMap's API used here. #[cfg(not(target_arch = "riscv64"))] diff --git a/crates/kernel/src/anon_work.rs b/crates/kernel/src/anon_work.rs index 2451e76fb..8acefae79 100644 --- a/crates/kernel/src/anon_work.rs +++ b/crates/kernel/src/anon_work.rs @@ -205,8 +205,8 @@ pub fn closure_addrs( /// copying each constant's GENUINE bytes via `store_const_lazy` so the guest's /// per-const integrity check (`hash(bytes) == addr`) and the env merkle root /// still hold. The guest decodes this instead of the whole env, so it pays only -/// its closure's decode — essential for envs that don't fit the guest whole -/// (Init, 184 MB doesn't fit the 512 MB Zisk guest). Missing hints are +/// its closure's decode, bounding memory use for large environments. +/// Missing hints are /// performance-only: ingress falls back to `Regular(0)`, so the typecheck /// result — and thus the committed claim — is unchanged. /// External refs (not in `source`) are omitted and remain open assumptions, diff --git a/crates/kernel/src/env.rs b/crates/kernel/src/env.rs index 4768cdf78..06e60d7c7 100644 --- a/crates/kernel/src/env.rs +++ b/crates/kernel/src/env.rs @@ -40,12 +40,8 @@ use scratch::ScratchMap; /// see `docs/kernel_identity.md` for the boundary rule and the /// proof-carrying-code implications. /// -/// Earlier revisions stored the blake3 content hash of every node here, -/// computed at construction: profiling on the Zisk guest put that hashing -/// (`app_hash` + the blake3 wrapper) at ~20% of guest cycles on -/// reduction-heavy constants. Identity is now assigned by the intern -/// table from shallow structural keys ([`ExprKey`]/[`UnivKey`]) instead -/// of computed from content. +/// The intern table assigns identity from shallow structural keys +/// ([`ExprKey`]/[`UnivKey`]), avoiding a content hash for every node. pub type Addr = u64; /// Key type for local-context hashing (`tc.rs::ctx_addr_for_lbr`) and diff --git a/crates/kernel/src/expr.rs b/crates/kernel/src/expr.rs index d438b8338..c99b982bd 100644 --- a/crates/kernel/src/expr.rs +++ b/crates/kernel/src/expr.rs @@ -356,10 +356,8 @@ fn mk_info_decor( /// is global, not per-table), so cache keys built from uids stay sound /// across intern-table clears: a stale key can only miss, never alias. /// -/// This replaces the per-node blake3 content hash: profiling on the Zisk -/// guest put `app_hash` + the blake3 wrapper at ~20% of cycles on -/// reduction-heavy constants, all of it spent computing identity that the -/// intern table can assign in one atomic increment. +/// Assigning identity with one atomic increment avoids hashing each node's +/// content during term construction. static NEXT_UID: std::sync::atomic::AtomicU64 = std::sync::atomic::AtomicU64::new(1); diff --git a/crates/kernel/src/lib.rs b/crates/kernel/src/lib.rs index a4f8e864d..70f0f574c 100644 --- a/crates/kernel/src/lib.rs +++ b/crates/kernel/src/lib.rs @@ -1,5 +1,5 @@ -// Diagnostic env-var helpers. zkVM std targets (`target_os = "zkvm"` — Zisk, -// SP1, risc0, …) return `Ok` from `std::env::var` for any key (no real env +// Diagnostic env-var helpers. Some zkVM standard libraries return `Ok` +// from `std::env::var` for any key (no real env // in the guest), so every `IX_*` flag fires "on" by default and runs // expensive diagnostic code paths whose output the guest can't even surface. // These wrappers short-circuit to "not present" on any zkVM target and diff --git a/crates/kernel/src/profile.rs b/crates/kernel/src/profile.rs index 1fb71613e..18a78fd53 100644 --- a/crates/kernel/src/profile.rs +++ b/crates/kernel/src/profile.rs @@ -36,8 +36,8 @@ use ix_common::address::Address; // Per-constant operation counters (richer cost features than `heartbeats`). // // Heartbeats count kernel reduction *steps* but not the SIZE of the term each -// step touches, so they mispredict in-circuit Zisk cycles ~3× for def-eq-dense -// constants. These thread-local counters record the actual work volume — +// step touches, so they underrepresent work on def-eq-dense constants. +// These thread-local counters record the actual work volume — // substitution-node visits, whnf/def-eq calls — which tracks guest cycles far // more tightly, and `subst` feeds the planner's per-shard cost model. The // profiler runs one constant per worker thread, so a thread-local accumulator diff --git a/crates/kernel/src/shard.rs b/crates/kernel/src/shard.rs index 701588d4b..0e8ac5742 100644 --- a/crates/kernel/src/shard.rs +++ b/crates/kernel/src/shard.rs @@ -15,16 +15,10 @@ //! pre-partition for a **cut-coherent order** so dependency overlap packs into //! the same shard (overlap paid once, not re-ingressed per shard). //! -//! **Why the order comes from min-cut.** Lean typecheck is reduction-dominated: -//! across Init/Std/Mathlib (mathlib's 631k blocks included) own-bytes is only -//! 2.6–7% of member cost, so on Zisk alone cross-ingress is a ≤3% cost term and a -//! plain block-id order packs within ~2% of min-cut. min-cut still earns the -//! default because the same `.ixprof`/`.ixes` also drives Aiur, where ingress is -//! a first-order cost; because it stays robust if an ingress-heavy env flips that -//! balance; and because it keeps each shard's injected closure small, which the -//! 512 MB guest heap requires. A cheaper id/dfs order trades those properties for -//! ~2% on Zisk only. The cap planner ([`partition_for_cycle_cap`]) is -//! order-agnostic, so the order is a pluggable choice. +//! Min-cut keeps dependency-overlapping blocks together, reducing repeated +//! ingress and bounding each shard's injected closure. The cap planner +//! ([`partition_for_cycle_cap`]) is order-agnostic, so the ordering remains a +//! pluggable choice. //! //! ## Model //! @@ -152,7 +146,7 @@ const PACK_PIECES_PER_CAP: u128 = 32; /// A weighted hypergraph derived from a [`BlockProfile`]. Vertex ids are block /// ids (identical to the profile's). Nets are stored with global pins. pub struct Hypergraph { - /// Vertex (block) weights = predicted Zisk guest STEPS ([`block_step_cost`]: + /// Vertex (block) weights = estimated guest cost ([`block_step_cost`]: /// reduction `heartbeats` + own ingress bytes), so the balanced partition /// equalizes predicted per-shard *cycles* (the prover-RAM driver) rather than /// heartbeats alone — which underweighted ingress-heavy shards. @@ -2531,7 +2525,7 @@ pub fn shard_manifest_refine( Ok((manifest.summary(), part_ids)) } -/// Like [`shard_esp`] but sized to a per-shard Zisk **cycle** budget +/// Like [`shard_esp`] but sized to a per-shard estimated **cycle** budget /// (`max_cycles`) rather than a fixed shard count: grows `N` until the heaviest /// splittable shard fits the budget (see [`partition_for_cycle_cap`]). Use /// [`cycle_cap_for_ram`] to derive `max_cycles` from a host-RAM target. @@ -2572,10 +2566,8 @@ pub fn shard_esp_cap( )) } -/// Calibrated Zisk guest-COST model — the **single source of truth** for -/// predicting a block's in-circuit cost contribution, in **ziskemu cost -/// units** (`ziskemu -X` TOTAL: MAIN + OPCODES + MEMORY + PRECOMPILES + -/// BASE). Cost, not raw steps, is the packing denomination: it prices the +/// Legacy guest-cost estimate for the profiled partitioner. Cost, rather +/// than raw steps, is the packing denomination: it prices the /// axes that don't ride the main trace — DMA/blake3 precompile area and /// memory ops — though on the uid-identity kernel the mix is stable /// (~92.5 units per guest step ± 7% across the calibration corpus, blake3 @@ -2583,7 +2575,7 @@ pub fn shard_esp_cap( /// (`.ixprof` v2): substitution-node visits, whnf/def-eq entries, and /// intern-table visits (term-construction volume — the proxy for the /// memory-traffic/DMA axis reduction counters can't see). **Best-fit** -/// coefficients over 118 `ziskemu -X`-measured InitStd shards across 13 +/// coefficients over 118 measured InitStd shards across 13 /// constants (weighted least squares on relative error, MAPE 10.9%, worst /// under-prediction −33%). One definition, used everywhere: the /// `ix profile` breakdown, per-shard prediction, and the packer's cap test. @@ -2605,7 +2597,7 @@ pub const SHARD_COST_FLOOR: u64 = 293_600_000; /// per-block features). pub const COST_MODEL_HEADROOM: f64 = 1.5; -/// Predicted Zisk guest cost units for a bag of raw op counters — the same +/// Estimated guest cost units for a bag of raw op counters — the same /// linear model as [`block_step_cost`], for callers that hold an /// [`OpCounts`] rather than a profile block (e.g. the per-constant /// attribution CSV `ix check-rs --per-const` emits). @@ -2617,7 +2609,7 @@ pub fn op_counts_cost(ops: &crate::profile::OpCounts) -> u64 { .saturating_add(COST_PER_INTERN.saturating_mul(ops.intern_nodes)) } -/// Predicted Zisk guest cost units contributed by a single block. The +/// Estimated guest cost units contributed by a single block. The /// per-shard floor and any cross-shard re-ingress are added at the shard /// level, not here. Producer-only blocks (never directly checked) carry no /// op counts and predict zero — their load cost is priced through the @@ -2770,8 +2762,8 @@ fn prove_report( ) } -/// A partition sized to a per-shard Zisk **cycle** budget (rather than a fixed -/// shard count). See [`partition_for_cycle_cap`]. +/// A partition sized to a per-shard estimated **cycle** budget rather than a +/// fixed shard count. See [`partition_for_cycle_cap`]. pub struct BudgetPlan { /// Chosen shard count. pub num_shards: usize, @@ -2800,7 +2792,7 @@ pub struct BudgetPlan { /// Size a partition to a per-shard **cycle** (guest-STEP) budget by **bin-packing /// to the cap**, not by balancing into a fixed shard count. /// -/// `max_cycles` is the ceiling on a single shard's in-circuit Zisk guest steps +/// `max_cycles` is the ceiling on a single shard's estimated guest steps /// — the leaf prover's trace size, which is what sets peak prover RAM. Get it /// from a host-RAM budget with [`cycle_cap_for_ram`] (the measured prover model /// `peak_RAM_GiB ≈ 50 + 33 × steps_billions`). diff --git a/docs/aiur-trace-sharding.md b/docs/aiur-trace-sharding.md index f13b3d276..57c6220d7 100644 --- a/docs/aiur-trace-sharding.md +++ b/docs/aiur-trace-sharding.md @@ -29,10 +29,9 @@ downstream consumer of this design's verifier contract, not part of it. forks from that common state. Shard proofs are therefore dependent — as the colleague's notes anticipate — but the dependency is a single exchange of K ~100-byte headers, after which all shards finish - independently and in parallel. This is Zisk's two-round - global-challenge protocol; SP1's challenge-free elliptic-curve digest + independently and in parallel. A challenge-free elliptic-curve digest is rejected in §4.2 because Aiur's cross-shard message volume makes it - ruinous. + prohibitively expensive. - **Residuals, not zero.** multi-stark's verifier already materializes the per-proof lookup residual (`intermediate_accumulators.last()`) as a transcript-bound public field and merely asserts it is zero. The shard @@ -42,9 +41,8 @@ downstream consumer of this design's verifier contract, not part of it. contiguous pointer range; two `sel`-gated lookups on every memory row (push `ptr`, pull `ptr + 1`) telescope to one push of the first pointer and one pull of one past the last, and two terms contributed by the - vector verifier force the K ranges to tile `[0, N_w)` exactly — Zisk's - continuation-record idiom, with a flow-conservation proof over the - finite field in §5. + vector verifier force the K ranges to tile `[0, N_w)` exactly, with a + flow-conservation proof over the finite field in §5. - **One verifier contract.** Because the boundary lookups are part of the memory AIR and the transcript prefix changes, a single unsharded proof is the `K = 1` vector and `verify_vector` is the verification routine @@ -62,8 +60,7 @@ downstream consumer of this design's verifier contract, not part of it. - **Recursion.** `ix_aggr` gains a vector-child verifier; recursion proofs are themselves trace-sharded by the same machinery (natural boundary: one child verification per shard); direct joins become the default - because RAM no longer bounds recursion. Using SP1's recursion for the - tree is rejected on measured cost (§8.4). + because RAM no longer bounds recursion. - **Sizing.** Shards are cut to a VRAM budget with the existing peak model, in committed-cell units: fully-resident CUDA proving needs about `8·(1 + 2^log_blowup)` bytes per committed cell plus 25 % headroom, @@ -158,34 +155,6 @@ downstream consumer of this design's verifier contract, not part of it. ### 2.3 Precedents -- **SP1 (Hypercube 6.6.0).** Shards are cut by trace area - (`ELEMENT_THRESHOLD = 1.5·2^28 ≈ 4.0·10^8` main-trace cells; - ~2.85·10^8 on ≤30 GB GPUs) and per-chip height (2^22), with worst-case - headroom reserved. Each shard's LogUp is balanced *internally*, with - the public values acting as a virtual chip (state send/receive, memory - init/finalize controls). Cross-shard facts (memory, syscalls) go - through the `Global` chip: hash-to-curve on a septic extension plus - elliptic-curve point addition, no verifier challenge; the recursion - checks the total is the identity. Cost: 241 cells per global - interaction plus a Poseidon2 permutation, two rows per newly touched - address per shard. Each shard gets a fresh challenger seeded only by - the vk — shards are embarrassingly parallel. One shard is proven per - GPU at a time; multi-GPU is independent shard tasks plus an arity-4 - compress tree. -- **Zisk / pil2-proofman.** Instances have PIL-fixed heights (Main 2^22, - Mem 2^22, precompiles 2^17–2^20) and are planned deterministically on - every worker from replayed minimal traces. Cross-instance lookups use - one global stage-2 challenge derived in two rounds: every instance - commits stage 1 and emits a contribution digest; digests are combined - homomorphically (EC point add or lattice add, so worker order is - irrelevant), all-gathered over MPI, and the challenge is a transcript - over publics ‖ stage-1 proof values ‖ aggregate. The final recursive - circuit re-derives the challenge and evaluates the global - sum-to-zero. Memory is split by address range and row budget; segment - `i` "proves" a continuation record keyed by `(region, i+1, tail_state)` - and segment `i+1` "assumes" `(region, i+1, head_state)`; they cancel in - the global sum iff equal, so boundary state is recomputed locally and - never transmitted. Instance size is bounded by one GPU stream buffer. - **Plonky3 (rev `3152b14a`).** `p3-lookup` distinguishes `Kind::Local` and `Kind::Global` buses; `batch-stark` exposes per-AIR `lookup_terminals` as a proof field and `verify_terminal_sum` sums an @@ -328,24 +297,20 @@ common digest *after* per-shard observations leaves the K challenger states different, so β, γ differ and honest cross-shard messages do not cancel. The common prefix must end at the sample. -Zisk's homomorphic contribution aggregation buys order-independence for -workers that do not share a plan; Aiur's plan is deterministic and -ordered, so a plain ordered digest is simpler and cheaper to re-derive -in circuit. +Aiur's plan is deterministic and ordered, so an ordered digest binds +all shard contributions without homomorphic aggregation. -### 4.2 Why not challenge-free cross-shard messages (SP1) +### 4.2 Why not challenge-free cross-shard messages -SP1 keeps shards fully independent by routing cross-shard facts through -a hash-to-curve accumulator: no challenge, but roughly 250 cells plus a -Poseidon2 permutation per crossing message, and SP1 keeps crossings rare -(memory boundaries, syscalls). In Aiur every function-call message, +A hash-to-curve accumulator can authenticate cross-shard facts without a +shared challenge, but adds curve arithmetic and hashing for each crossing. +In Aiur every function-call message, every memory push and every byte-op push is a potential crossing: the callee's memoized row lives in exactly one shard while callers of that query are wherever execution put them, memory rows live in one shard while loads come from all, and byte tables live in one shard while byte ops come from all. Crossings are the common case, not the exception; -paying ~5× a function row's width per crossing would multiply the trace -several times over. PR #55's message-level chaining has the same +adding substantial work per crossing would multiply the trace. PR #55's message-level chaining has the same problem: it exposes each unmatched message as a claim. The shared challenge makes crossings free; its cost is one exchange of K ~100-byte headers per batch. @@ -564,9 +529,8 @@ budget ≈ 0.75 · device memory (25 % default headroom) so a 96 GB card admits about `72 GB / 40 B ≈ 1.8·10⁹` committed cells before FRI workspace; a 24 GB card about 4.5·10⁸. In main-trace cells -(the unit SP1's `ELEMENT_THRESHOLD` counts) that is roughly 0.7–1.2·10⁹ -on 96 GB and 2–3·10⁸ on 24 GB, given the 1.5–2.5 committed-to-main -ratio — the same order as SP1's 4.0·10⁸ (2.85·10⁸ on ≤30 GB cards). The +that is roughly 0.7–1.2·10⁹ on 96 GB and 2–3·10⁸ on 24 GB, given the +1.5–2.5 committed-to-main ratio. The planner reads the budget from device memory and `MULTI_STARK_CUDA_MIN_FREE_BYTES` and the circuit shapes; the calibration constant is measured once per GPU model, the way @@ -689,20 +653,6 @@ aggregated. The only requirement this design places on such a consumer is that its embedded Aiur verifier implement the §4.4 contract: the batch-transcript prefix and the boundary terms. -### 8.4 Why not SP1's recursion for the tree - -PR #602's synthetic smoke measured 4.27 M RISC-V instructions and 891 -Blake3 syscalls to verify a 28 KB Aiur proof in the SP1 guest. Production -shard proofs are 2–20 MB and verification cost is dominated by hashing -opened rows and FRI folding, so a shard proof costs on the order of 10⁹ -guest cycles. Published SP1 GPU throughput is ~1–3 MHz per GPU including -recursion, i.e. several hundred GPU-seconds per Aiur shard proof, versus -seconds to tens of seconds for the same verification as an Aiur circuit -on the CUDA backend (PR #597 measured 8.2× over CPU on recursive -workloads). Across thousands of shard proofs that is two orders of -magnitude; SP1 stays where PR #602 puts it — the terminal compression of -one root. - ## 9. Interaction with env sharding and PR #619 - **Env shards can grow.** Today N ≈ 239 Mathlib env shards is forced by @@ -750,10 +700,9 @@ Status as of the `sb/aiur-trace-sharding-design` branch (ix) and | 2. Aiur `memseg` lookups, selector-gated pull multiplicities, row-range witnesses, planner, `AiurProof = BatchProof`, batch policy | landed; 21 tests incl. the audits' counterexamples as rejections | | 3. Lean verifier: `read_batch`, batch/shard Fiat–Shamir, header agreement, residual sum, policy, `verify_batch_at` | landed; `multi-stark`, `recursive-verifier` suites | | 4. `ix_aggr` and legacy join circuits verify children as batches | landed; `aggregate-first`, `ix-aggr` suites; codegen regenerated | -| 5. Downstream verifiers adopt the contract | landed: the SP1 terminal (`sp1-compress/`, from PR #602) verifies the root as a batch through `AiurVerifyingKey::verify`, the same `verify_against` the native verifier runs; the FLT and Mathlib GPU roots execute at 691 M cycles on upstream SP1 (`bench/root-sp1-compress-2026-09-18`) | -| 6. CLI / pipeline (`ix prove --trace-shards`, budget-to-plan search, per-shard spans; sharded aggregate wraps on GPU) | leaf path landed: `plan_shards_within` sizes the batch from `--max-ram` and `ix prove --trace-shards` proves it under Regenerate (§14); the aggregate wrap still proves unsharded | -| 7. Tests | landed for 1–4 as listed | -| 8. Benchmarks (`--trace-shards K`, VRAM calibration, recompute overhead) | open | +| 5. CLI / pipeline (`ix prove --trace-shards`, budget-to-plan search, per-shard spans; sharded aggregate wraps on GPU) | leaf path landed: `plan_shards_within` sizes the batch from `--max-ram` and `ix prove --trace-shards` proves it under Regenerate (§14); the aggregate wrap still proves unsharded | +| 6. Tests | landed for 1–4 as listed | +| 7. Benchmarks (`--trace-shards K`, VRAM calibration, recompute overhead) | open | Two deliberate deviations from the design as first written: byte tables stay active in every shard (zero multiplicities outside shard 0) because @@ -846,7 +795,7 @@ seams. - **Byte-table multiplicities on the GPU.** The designated shard's Bytes2 table needs global counts; today they come from the record, so nothing changes, but if execution is ever distributed the counts need - the same gather Zisk does for shared tables. + a gather across workers before committing the shared table. - **Piece padding.** A circuit cut into the fewest fitting pieces pads each piece to a power of two, up to one doubling; cutting into one more piece can pad less at the price of one more activation. Whether the diff --git a/docs/bencher-sharded-proving.md b/docs/bencher-sharded-proving.md index f9a631f4b..5d3c3d7e7 100644 --- a/docs/bencher-sharded-proving.md +++ b/docs/bencher-sharded-proving.md @@ -17,9 +17,9 @@ The intended dashboard answers: - How do these quantities change across commits? “Every benchmark” applies to every Aiur **proof-producing stage**, including -recursive verifiers and aggregation. Compile, decompile, out-of-circuit checks, -and the currently scheduled ZisK execution benchmarks do not produce Aiur -proofs. Their existing behavior and metrics remain applicable. +recursive verifiers and aggregation. Compile, decompile, and out-of-circuit +checks do not produce Aiur proofs. Their existing behavior and metrics remain +applicable. ## Existing behavior diff --git a/docs/benchmarking.md b/docs/benchmarking.md index a93246db6..f5737fe2c 100644 --- a/docs/benchmarking.md +++ b/docs/benchmarking.md @@ -41,8 +41,7 @@ row** — an empty or quietly-partial cell can't be green. | subcommand | job | |---|---| -| `run` | run one cell: select names, ensure the `.ixe`, spawn the tool under the RAM watchdog (one process per constant on aiur/zkVM), fold each spawn's span window into its row, gate on the rows | -| `shard` | pre-cut the closure-shard artifacts for the env's zisk constants (`ix shard extract` → `ix profile` → `ix shard`) | +| `run` | run one cell: select names, ensure the `.ixe`, spawn the tool under the RAM watchdog (one process per constant on aiur), fold each spawn's span window into its row, gate on the rows | | `compare` | two rows files → Markdown base-vs-PR table (thresholds, ratios, OOM/❌ rows; per-constant phase drop-downs under `BENCH_PHASES=1`) | | `bmf` | rows → Bencher Metric Format (non-`ok` rows dropped) | | `fetch-main` | pull a base SHA's rows from bencher.dev (exit 3 = transient, fall back to a local base run; exit 2 = config error, fail loudly) | @@ -114,8 +113,6 @@ measurements and marks the unfinished pair `OOM`. | backend | what it measures | tool | |---|---|---| | `aiur` | the Aiur proof pipeline, per constant: the `ixvm` stage proves the IxVM typecheck, the `fri-verifier` stage executes and proves the in-circuit multi-stark verifier over that fresh proof (the KZG stages fold in as they land, each with its own measure prefix), closed by the pipeline ledger (total-time, pipeline-throughput, pipeline-peak-rss). Each stage's measures carry its prefix (`ixvm-prove-time`, `fri-verifier-fft-cost`, …). The whole system runs under the recursion-tuned FRI parameters. A second mode, execute, is the fast Phase-1-only signal (fft-cost, execute-time, throughput, peak-rss) — unscheduled, local/on-demand only (`!benchmark aiur execute`). The direct `--recursive --join` diagnostic takes exactly two constants as singleton `CheckEnv` shards and appends one pair row carrying `join-{execute-time,fft-cost,prove-time,peak-rss,proof-size,verify-time}`; the InitStd prove cell schedules this pair in a separate process after the per-constant runs. | `bench-typecheck --recursive` | -| `zisk` | ZisK VM execute: cycles, execute-time, throughput, peak-rss, constants (pre-shard closure count, same universe as aiur's), shards (the runtime-planned partition size; 1 when the closure fits). Available locally; benchmark CI is disabled. | `zisk-host` | -| `sp1` | SP1 VM execute. Available locally; benchmark CI is disabled. | `sp1-host` | | `ooc` | out-of-circuit Rust kernel: whole-env row + one full-closure row per constant (`check-time` wraps only the check — the env loads once, outside every row's timed window) | `ix check-rs --json` | | `lean4lean` | the reference Lean4-in-Lean4 kernel ([digama0/lean4lean](https://github.com/digama0/lean4lean), required by the lakefile at a pinned rev) — the external yardstick for the Ix kernels on the same libraries. Olean-driven (no `.ixe`): the whole-library row replays every module in the env's import closure through lean4lean, module-parallel (check-time, constants, throughput, peak-rss; tune parallelism with `LEAN_NUM_THREADS`), plus one full-closure row per constant (the name's transitive closure into a fresh kernel env), mirroring ooc's row shape. Registry-disabled for CI (no bencher testbed yet); `ix bench run --backend lean4lean` works locally regardless | `bench-lean4lean` | | `compile` | `ix compile .lean → .ixe`: compile-time, file-size, constants, throughput | `ix compile --json` | @@ -152,12 +149,11 @@ query, so the post-E2 replacement is `--queries 1` (still PoW 0): a values, not W0 cost estimates; the q=50 join run remains a large-box benchmark. All tools emit the same rows, and all the constant-driven ones take the same -`--consts`/`--consts-file` grammar. The ooc and zkVM cells share per-constant -**full-closure** scope, so their delta isolates in-circuit vs out-of-circuit -overhead. +`--consts`/`--consts-file` grammar. The ooc and Aiur cells share per-constant +**full-closure** scope. With `--texray`, tools write per-phase span timings (`aiur/prove_ixvm`, -`aiur/witness`, `stark/*`, `zisk/execute`, …) to `.spans`. The +`aiur/witness`, `stark/*`, …) to `.spans`. The per-constant backends run **one process per constant**, so each spawn's window belongs wholly to its constant: `ix bench run` folds it into the row as flat `phase-` fields, which flow to bencher as independent @@ -187,15 +183,6 @@ approach the ceiling, and a kill there means missing rows and a red cell. There are **no per-constant timeouts**; the job-level `timeout-minutes` is the only clock. -Every local zisk benchmark constant runs as a closure-shard partition sized at -runtime: `ix shard extract` → `ix profile` → `ix shard` cut a manifest -whose shard count comes from the planner's RAM budget (a closure that -fits gets a one-shard plan), and one `--shard-plan` host run executes the -shards sequentially, emitting the constant's row with per-shard -breakdowns. `ix bench shard` can pre-cut these artifacts; a zisk run cuts -lazily when they're absent and falls back to the whole closure if the cut -fails. - ## Registry and constant set - **`Ix/BenchConstants.lean`** — the shared constant set: one @@ -238,7 +225,7 @@ BENCH_TRACE_SHARDS= # aiur prove: plan each constant's proof as # `ixvm-trace-shards`; a base checkout # that predates the flag proves whole RUST_LOG=info # passthrough env (allowlist: BENCH_PHASES, - # RUST_LOG, WITHOUT_VK_VERIFICATION, RUSTFLAGS, + # RUST_LOG, RUSTFLAGS, # IX_COMPILE_EAGER, IX_COMPILE_DEMOTE, # IX_COMPILE_WORKERS, BENCH_TRACE_SHARDS, # IX_DECOMPILE_KENV_CLEAR_ENTRIES) @@ -288,7 +275,8 @@ run step while the clean rows still upload. to — main-branch trend lines on the historical Warp and native r8i testbeds, with a separate line per benchmark row and testbed so hardware changes preserve the visible history, -plus the cross-kernel input-constants overlay. Registry-derived like the job matrices (titles, +plus the cross-kernel input-constants overlay, sourced from the native ooc +backend. Registry-derived like the job matrices (titles, ordering, and skips live in `Ix/Cli/BenchPlots.lean`), so rerun the sync after changing the registry or the constant set — either locally (needs the bencher CLI and a user API key in `BENCHER_API_KEY`; @@ -426,11 +414,6 @@ the same artifacts. ## Not yet covered -- **Zisk and SP1 benchmarks** — on demand only: `!benchmark zisk` or - `!benchmark sp1` on a PR, or `ix bench run` locally. No CI job schedules, - builds, or uploads them, and `all` leaves them out. -- **zkVM prove** — the hosts prove, but local proving requires suitable GPU - infrastructure. - **aiur prove numbers for the biggest closures** — every constant in the shared set runs the full pipeline, but the largest ones exceed the CI host's RAM ceiling and land as honest `oom` rows, which never upload diff --git a/docs/ixon-v3-verification.md b/docs/ixon-v3-verification.md index 0af6ab9ac..ab31d951f 100644 --- a/docs/ixon-v3-verification.md +++ b/docs/ixon-v3-verification.md @@ -103,4 +103,4 @@ incremental reads and reduces every kernel pin, by 0.021%–6.975%. For new per-circuit counts. These figures are deterministic estimates of FFT work. The v3 suite and primitive-closure validation are registered in CI. This record -does not claim execution of the specialized CUDA, SP1, or Zisk toolchain jobs. +does not claim execution of the specialized CUDA toolchain job. diff --git a/docs/kernel_identity.md b/docs/kernel_identity.md index a64f112c9..f0013d696 100644 --- a/docs/kernel_identity.md +++ b/docs/kernel_identity.md @@ -18,11 +18,10 @@ this language: - `Constant.refs` point at constant and blob `Address`es. - `KId.addr` — the identity the typechecker certifies — is the Ixon `Address`. -- The Zisk guest's committed claim is built from `Address`es: - `subject_root` / `assumptions_root` are `merkle_root_canonical` over - the certified / assumed constant addresses (`crates/kernel/src/claim.rs`, - `zisk/guest/src/main.rs`), and `env_hash` is blake3 over the exact env - payload. +- Kernel claim roots are built from `Address`es: + `subject_root` / `assumptions_root` use `merkle_root_canonical` over + the certified / assumed constant addresses + (`crates/kernel/src/claim.rs`). - Aggregation (`Claim::CheckEnv`, the `Contains` discharge) resolves assumption leaves against subject roots **by address**, and the cross-run proof store is keyed by address (content-addressed: the same @@ -81,8 +80,8 @@ addresses, and are torn down when the `KEnv` clears. Historically this layer ALSO used blake3: every constructed node hashed `(variant tag ‖ child hashes)`. That was a *separate scheme* from Ixon addressing (a Merkle-DAG over node tags, not blake3-of-serialization) — -the two were never interchangeable — and it cost ~20% of all guest -cycles on reduction-heavy constants in the Zisk prover. +the two were never interchangeable — and repeated hashing added work +for every constructed node. Since `1e3029d`, layer-2 identity is an **intern-assigned `u64` uid** (`crates/kernel/src/env.rs::Addr`): diff --git a/docs/trace-sharding-pr-handoff.md b/docs/trace-sharding-pr-handoff.md index 4d83fff0e..d54b6ce96 100644 --- a/docs/trace-sharding-pr-handoff.md +++ b/docs/trace-sharding-pr-handoff.md @@ -88,7 +88,7 @@ by this work; leave it or commit it deliberately. ## PR 2 (`sb/aiur-gpu-lanes`) The branch is the GPU half (lanes, GPU trace runtime, CUDA trace codegen, -sppark pin, SP1 terminal, docs and bench scripts) as five commits on the +sppark pin, docs and bench scripts) as five commits on the old PR 1 tip. It must be rebuilt on the new PR 1 tip, and it will collide with #642 in its own files, since `lanes.rs` and the subtree plan use aggregate internals that now live in `aggregate/plan.rs`, @@ -130,9 +130,8 @@ Things PR 2 already fixed that must not be lost in the recut: `HANDOFF-recursion-fri-params.md` moved to `docs/recursion-fri-params-handoff.md`. -Not verifiable locally: the `cuda`, `cuda-trace-codegen` and SP1 guest -builds; there is no GPU or Succinct toolchain on this host. CI's -`cuda-compile` job covers the `cuda` feature. +Not verifiable locally: the `cuda` and `cuda-trace-codegen` builds; +there is no GPU on this host. CI's `cuda-compile` job covers the `cuda` feature. ## multi-stark diff --git a/docs/zisk-cycle-cost-model.md b/docs/zisk-cycle-cost-model.md deleted file mode 100644 index e8d35b428..000000000 --- a/docs/zisk-cycle-cost-model.md +++ /dev/null @@ -1,343 +0,0 @@ -# Zisk cycle cost model - -Predicts **Zisk guest cycles** (≈ RISC-V STEPS) and **prover RAM** for -typechecking a Lean environment — or one constant, or a shard — in the Ix zkVM. -Purpose: **shard sizing**, splitting a large environment into pieces that each -prove within the RAM cap while minimizing the number of pieces. - -Measured on an RTX PRO 6000 (250 GiB host). Inputs, scripts, and raw data: -`~/benchdata/prof/`. - -> **Version note.** All numbers below were measured on the Zisk v0.18-based -> `blake3-precompile` branch. On the v1.0.0-alpha port the cycle counts drift -> slightly from upstream zisklib/ROM changes (e.g. `nataddcomm.ixe`: -> 53,239,676 → 53,860,206 STEPS, ~+1.2%); the model's structure and -> coefficients remain a good approximation but have not been re-fit. - ---- - -## Background - -A compiled Lean program is an *environment* (`.ixe`): a set of *constants*. -Typechecking verifies them. The kernel runs from one Rust source both **out of -circuit** (native — used to *profile*) and **in circuit** (RISC-V, inside Zisk — -what gets *proven*). A large env can't prove in one piece, so it is split into -**shards** (planner: `crates/kernel/src/shard.rs`). The constants assigned to a -shard are its **members**; the constants they depend on may live in other shards. - -The profiler (`crates/kernel/src/profile.rs`) records cheap per-constant -variables (the model's inputs) to predict in-circuit cost: -- **hb** (heartbeats) — kernel reduction steps (recursion fuel). -- **bytes** — serialized constant size (deserialization cost). -- **subst** — substitution-node visits (`instantiate_rev`); a finer measure of - reduction *volume* than hb. - -**STEPS vs COST — two different things:** -- **STEPS** = RISC-V instruction count → drives **prover RAM** (trace rows). - This is what the model predicts; 1 step = 1 instruction, workload-independent. -- **COST** = Zisk's weighted proof-area → drives **prove time**. - `COST = 293.6M base + 68·STEPS + opcodes + precompiles + memory`. - **COST/STEPS is workload-dependent**: ≈100 for the Ix kernel, but ≈384 for a - precompile-heavy blake3 program (its blake3 precompile is 67% of cost at almost - no steps). So STEPS→RAM is portable; STEPS→prove-time needs a per-workload - factor. - -**What actually drives STEPS** (verified in the Zisk + kernel source). One -RISC-V instruction = exactly 1 step (`zisk .../emu.rs`), so cycles are the -kernel's total instruction count, and the kernel's instructions are -overwhelmingly **reduction** — `whnf` + `is_def_eq`. One heartbeat is one -reduction step past the memo caches (`tc.rs`, `whnf.rs`, `def_eq.rs`); `hb` -counts those steps, `subst` counts the substitution-DAG traversal inside them. -Three things are deliberately **not** step drivers, which is why the model -ignores them: -- **blake3 hashing** is a Zisk precompile — 1 step, 12,000 COST. A COST driver, - not a STEP driver. -- **Memory traffic** is a COST term (`MEM_READ_COST` etc.), not steps. -- **Serialized literal content** (strings, byte blobs) is stored by reference in - a separate `blobs` map and fetched lazily — **never walked into terms**. This - is the mechanistic reason `bytes` doesn't predict cycles and a 1 MB string - literal is ~free (confirmed both in source and by direct measurement). - ---- - -## Cost models - -For a shard, sum the variables over **only its own member constants** — not the -dependency closures they pull in (see Findings). - -Fit quality is reported as **MAPE** (mean absolute percentage error — the average -of `|predicted − actual| / actual`, so "6%" means predictions land within ~6% of -measured cycles on average) and **R²** (fraction of variance explained, 1.0 = -perfect). Fits are weighted least squares minimizing *relative* error, the right -objective for a cost spanning 50M–9B cycles. - -**Full-closure typecheck** — a self-contained closure: a small program, or a -constant checked with all its dependencies. Calibrated **cross-library** on -n=76: 12 small programs + 64 diverse constants checked full-closure via -`--consts`, spanning **Init (51), Std (3), and Mathlib (10)**: -``` -cycles ≈ 0.68M + 96,989·hb + 4,151·subst R² 0.987, MAPE 6% -``` -Per-library MAPE is uniform (Init 6%, Std 6%, Mathlib 5%, programs 8%) — one -model across libraries, not Init-tuned. -Reduction-dominated: `hb` alone reaches R² 0.99, `subst` is the useful second -variable, serialized `bytes` adds nothing. - -**Per shard** — summed over the shard's member constants: -``` -cycles ≈ 199M + 167,900·hb + 2,928·bytes R² 0.974, MAPE 14% - ≈ 180M + 162,300·hb + 652·bytes + 4,276·subst R² 0.988, MAPE 9% -``` -Same slopes as the full-closure model; the extra ~180M intercept is the -per-shard fixed floor plus the foreign-dependency ingress a shard re-pays. The -planner uses exactly these best-fit constants (`shard.rs`: `STEPS_PER_HEARTBEAT` -162,339, `STEPS_PER_SUBST` 4,276, `STEPS_PER_INGRESS_BYTE` 652, -`SHARD_STEP_FLOOR` 180M) — one definition, used for the `ix profile` breakdown, -per-shard prediction, and the packer's cap test. No conservatism is baked into -the slopes (that would distort packing); the cap's margin is `RAM_USABLE_FRAC` -plus the model's own ~1.1× over-prediction. - -**Subject-only** (`--skip-deps`) — check one constant, trust its deps. A -separate, cheaper, **ingress-dominated** regime (`hb` near-useless): -``` -cycles ≈ 0.39M + 6,740·block_bytes + 14·subenv_bytes + 4,070·subst R² 0.96, n=36 -``` -Reserved for constants too expensive to full-closure-check that can't be sharded -(Finding 4). - -**Measuring one constant.** `zisk-host --execute --ixe initstd.ixe --consts -` resolves the name, builds just its closure sub-env (deps lazily faulted -in — no separate `.ixe`, no whole-env ingress), and checks it. Full-closure by -default (`Ix.Claim.check addr none`); add `--skip-deps` for subject-only. Same -`--consts` / `--skip-deps` vocabulary as `ix check`, `sp1-host`, and the Aiur -`bench-typecheck`. - ---- - -## Prover RAM and prove time - -Measured proving 7 Init shards on GPU, STEPS 0.27–3.79e9: -``` -peak host RAM (GiB) ≈ 50 + 33·STEPS_billions R² 0.99 -GPU prove time (s) ≈ 54 + 158·STEPS_billions R² 0.98 (~6.3M steps/s) -``` -Inverting the RAM model -at `RAM_USABLE_FRAC` = 0.85 gives a safe per-shard cap of **~3.6e9 steps** for a -200 GiB target (`shard.rs:cycle_cap_for_ram`). - -**Validated end-to-end.** Proving + aggregating all of `mergesort` -(an 8.94e9-cycle env) under a ~180 GiB cap produced 3 shards (actual -2.77/2.45/2.20e9 cycles), **147 GiB peak RAM** (predicted ~153), folding to one -unconditional proof in **~23.5 min** (1281 s leaf proving + 13 s aggregation). -Per-shard actuals landed **~1.13× under** the model's prediction and peak RAM -matched — the cap and RAM models hold against real proving, on the conservative -side. - ---- - -## Key findings - -1. **Full-closure cost is reduction-dominated.** `hb + subst` predicts it - (R² 0.99); serialized `bytes` adds nothing. Subject-only cost is the opposite - — ingress-dominated, with `hb` near-useless. -2. **Cost a shard from its members only.** Sum the variables of the shard's - *own* member constants (R² ≈0.95). Including their dependency closures — deps - once, or deps per member — scores **negative R²**: it double-counts shared - deps nonlinearly. So there is no shared-dep reuse to over-provision for. -3. **Sharding is bin-packing per-constant costs** under the RAM cap, *not* - balancing. The cap planner (`partition_for_cycle_cap`) packs each shard as - full as the cap allows — fewest shards (`≈⌈total/cap⌉`), each maximally - performant — rather than equalizing per-shard work (which over-shards: every - shard left partly empty). A fine min-cut pre-partition supplies a cut-coherent - order so dependency overlap packs into the same shard (paid once, not - re-ingressed). The cap test counts that cross-ingress, so a shard packed to - the cap still executes under it. Each leaf pays the ~180M fixed floor and adds - an aggregation node, so cheap constants are batched rather than proven one at - a time. (`--shards N` still does balanced bisection, for manual control.) -4. **A few constants can't be proven as a single full-closure leaf on a 250 GiB - box**: `Vector/Array.extract_append._proof_1`, the `instRxcHasSize_eq` family. - This is a per-leaf ingress/RAM ceiling on the `--consts ` (full-closure, - `Ix.Claim.check addr none`) mode — not a global unshardability. In - env-sharding mode (`--shard-plan`) these same constants are fine: their - subject checks fit in one work item and their deps are proved in other - shards, folded in through the assumptions root. The only work unit the - env-sharding planner truly can't split is a **mutual block** (`build_anon_work` - emits one item per Muts block, checked atomically). The escape hatch in - single-constant mode is `--skip-deps`: `Vector.extract_append` is the 143 GiB - OOM case under full-closure but checks subject-only in 74M cycles. The - planner flags these via `infeasible_atomic_floor`. -5. **The packing order comes from min-cut.** Whole-env profiling of - Init/Std/**Mathlib** (mathlib = 631k blocks) shows Lean typecheck is uniformly - reduction-dominated: own-bytes is only **2.6–7% of member cost** (mathlib - lowest, at 2.6%). On Zisk that makes cross-ingress a ≤3% term, and a plain - block-id order packs within ~2% of min-cut at ~1× the proving cost. min-cut - remains the default because the same `.ixprof`/`.ixes` feeds **Aiur** - (ingress-first), because it stays robust if an ingress-heavy env shifts that - balance, and because it keeps each shard's injected closure under the 512 MB - guest heap. The cap planner is order-agnostic, so the order is a pluggable - choice; min-cut is the one that holds across both backends. - ---- - -## Init coverage - -Applying the cost model to every Init constant's native profile (51,003 blocks / -51,678 constants) vs a single-leaf cap: **~99.98% of Init typechecks on Zisk.** -Exactly **12 constants** exceed a single 250 GiB leaf -— all single atomic constants (un-shardable), `hb`-dominated. Listed by name -(all are `_private` proof terms; private prefix elided): - -| constant | hb | pred. steps | -|---|--:|--:| -| `Int16.instRxcHasSize_eq` | 32,843 | 10.5e9 | -| `Int64.instRxcHasSize_eq` | 32,843 | 10.5e9 | -| `Int32.instRxcHasSize_eq` | 32,843 | 10.5e9 | -| `Vector.extract_append._proof_1` | 20,309 | 7.0e9 | -| `Array.extract_append._proof_1_1` | 20,210 | 6.9e9 | -| `Char.succ?_eq` | 18,226 | 5.9e9 | -| `Char.ofOrdinal_le_of_le` | 17,877 | 5.7e9 | -| `Vector.extract_extract._proof_1` | 16,258 | 5.7e9 | -| `ISize.instRxcHasSize_eq` | 16,425 | 5.3e9 | -| `Vector.extract_append_extract._proof_1` | 13,335 | 4.7e9 | -| `Array.extract_append_extract._proof_1_1` | 13,226 | 4.7e9 | -| `Char.ofOrdinal_ordinal` | 14,136 | 4.5e9 | - -Each has a workaround — a bigger box, `--skip-deps` -(subject-only), or upstream proof restructuring — so 12 is an upper bound on -truly-stuck constants. At a 200 GiB cap the list grows to 16. Estimate uses the -planner's `block_step_cost` model (`162,339·hb + 4,276·subst + 652·bytes`, the -same single source of truth the packer uses); regenerate with -`python3 ~/benchdata/prof/over_cap.py [ram_gb]`. - ---- - -## Data - -### Init shards (12) — variables summed over member constants - -| shard | blocks | hb | bytes | subst | cycles | -|---|---:|---:|---:|---:|---:| -| 803 | 3 | 3,117 | 23,174 | 6,785 | 771,527,739 | -| 806 | 6 | 4,586 | 32,062 | 10,479 | 810,732,054 | -| 502 | 2 | 4,057 | 24,927 | 15,452 | 1,034,769,720 | -| 68 | 37 | 2,806 | 115,271 | 67,589 | 1,127,754,269 | -| 957 | 278 | 2,672 | 397,663 | 145,185 | 1,382,497,091 | -| 290 | 19 | 4,540 | 72,883 | 75,048 | 1,397,057,638 | -| 383 | 87 | 3,370 | 162,554 | 170,516 | 1,584,528,514 | -| 870 | 311 | 4,151 | 255,573 | 173,497 | 1,773,123,833 | -| 273 | 101 | 4,911 | 159,997 | 227,820 | 1,782,171,986 | -| 815 | 428 | 3,823 | 378,779 | 253,556 | 2,526,432,086 | -| 634 | 1 | 32,843 | 2,308 | 513 | 5,695,914,962 | -| 630 | 1 | 32,843 | 2,309 | 513 | 5,697,160,198 | - -Shards 630/634 are one atomic constant each (`Int*.instRxcHasSize_eq`): tiny -`bytes`/`subst` but huge cycles, driven by `hb` (deep nat-range def-eq) — the -"expensive atomic" case (Finding 4). - -### Full-closure single constants — `--consts`, diverse shapes - -One library constant each, checked full-closure (the constant and its whole -dependency closure). The 35 Init constants below (over `initstd.ixe`) are shown -in full; the cross-library fit adds **19 more Init/Std** (incl. `Std.Time.*`, -`ByteSlice`) and **10 Mathlib** (`Finset.*`, `Polynomial.eval`, `Multiset.sort`, -`Nat.fib`, …, over `compilemathlib.ixe`), plus 12 small programs — 76 points -total, all measured (`~/benchdata/prof/{onlyconst,new,mathlib,smallenv}_*.tsv`). -All ran with zero failures. - -| constant | shape | hb | block_bytes | subst | cycles | -|---|---|--:|--:|--:|--:| -| `Nat` | inductive type | 3 | 113 | 0 | 975,244 | -| `Eq.rec` | recursor | 5 | 206 | 197 | 2,348,520 | -| `Array.toList` | array→list | 20 | 281 | 160 | 2,580,844 | -| `Acc.rec` | accessibility recursor | 10 | 315 | 770 | 5,105,888 | -| `Sum.elim` | sum eliminator | 15 | 693 | 745 | 6,618,130 | -| `Option.bind` | monadic bind | 30 | 945 | 1,052 | 7,440,608 | -| `Prod.map` | product map | 19 | 804 | 1,170 | 8,177,456 | -| `Nat.add` | function reduction | 61 | 1,889 | 1,074 | 10,606,339 | -| `WellFounded.fix` | well-founded fixpoint | 34 | 1,108 | 2,199 | 13,415,585 | -| `List.range` | list generator | 83 | 2,727 | 1,316 | 13,666,491 | -| `List.foldr` | list fold | 79 | 2,383 | 2,026 | 16,707,100 | -| `Int.add` | integer addition | 170 | 6,034 | 3,290 | 27,635,032 | -| `BitVec.toFin` | bitvec→fin | 176 | 5,913 | 3,055 | 28,681,028 | -| `USize.toNat` | fixed-width→nat | 198 | 8,391 | 3,652 | 35,811,906 | -| `Nat.add_comm` | arithmetic theorem | 360 | 6,908 | 3,998 | 53,239,676 | -| `Nat.decEq` | decidable equality | 266 | 8,116 | 6,747 | 57,411,966 | -| `Nat.decLe` | decidable order | 709 | 21,222 | 18,105 | 143,391,161 | -| `Nat.strongRecOn` | strong recursion | 764 | 24,974 | 28,682 | 190,849,758 | -| `Int.emod` | integer mod | 1,405 | 42,899 | 34,415 | 269,380,418 | -| `Array.foldl` | array fold | 1,284 | 41,477 | 38,282 | 278,537,034 | -| `Nat.sub_le_of_le_add` | order theorem | 1,915 | 54,845 | 48,701 | 373,184,538 | -| `Int.gcd` | integer gcd | 2,158 | 65,618 | 52,973 | 409,112,011 | -| `Array.map` | array map | 2,415 | 69,838 | 54,424 | 443,199,245 | -| `Lean.Name.hash` | name hashing | 2,451 | 82,181 | 57,157 | 447,441,591 | -| `Nat.repr` | number→string | 2,658 | 91,470 | 62,863 | 498,729,913 | -| `BitVec.umod` | bitvec modulo | 2,585 | 89,060 | 71,781 | 526,467,117 | -| `String.intercalate` | string join | 3,004 | 99,770 | 73,875 | 599,428,829 | -| `Char.toLower` | char case map | 3,588 | 115,675 | 82,453 | 665,920,824 | -| `Vector.append` | vector append lemma | 6,260 | 205,557 | 231,194 | 1,614,275,115 | -| `Int.emod_emod_of_dvd` | omega theorem | 11,951 | 345,084 | 226,571 | 2,201,588,182 | -| `Fin.foldl` | finite-range fold | 24,695 | 778,754 | 536,883 | 5,110,854,190 | -| `List.mergeSort` | merge sort | 32,915 | 912,942 | 642,232 | 6,706,906,294 | -| `Array.binSearch` | binary search | 34,358 | 891,352 | 646,852 | 6,785,827,470 | -| `Array.qsort` | quicksort | 41,060 | 1,001,670 | 739,383 | 7,199,288,749 | -| `String.split` | string splitting | 39,939 | 1,141,622 | 928,723 | 8,657,387,499 | - -`Vector.extract_append` is omitted: its full-closure check exceeds the executor -(the un-shardable case); subject-only it is 74,135,524 cycles. - ---- - -## Reproduce - -```bash -# profile out of circuit (per-block hb/bytes/subst + delta graph): env.ixe → -# env.ixprof, and print the kernel-work breakdown + predicted Zisk leaf cost/RAM -lake exe ix profile env.ixe - -# pack the .ixprof into shards under a RAM/cycle cap (offline, no kernel re-run) -lake exe ix shard env.ixe --profile env.ixprof --max-ram 256 # or --max-cycles C / --shards N - -# measure guest cycles: a shard/env, or one named constant -cargo run --release --bin zisk-host -- --execute --ixe \ - [--shard-plan --only-shard K] -cargo run --release --bin zisk-host -- --execute --ixe initstd.ixe \ - --consts "Nat.add_comm" [--skip-deps] # full-closure / subject-only - -# fits -python3 ~/benchdata/prof/fit_xlib.py # full-closure model (76 pts, Init+Std+Mathlib) -python3 ~/benchdata/prof/fit_onlyconst.py # subject-only model -python3 ~/benchdata/prof/compare.py # members-only vs full-closure costing -``` - -The cost model is the single source of truth in `crates/kernel/src/shard.rs` -(`block_step_cost`, `partition_for_cycle_cap`, `cycle_cap_for_ram`), consumed by -both the `ix profile` breakdown and the `ix shard` packer. Counters in -`profile.rs` (`bump_subst_nodes`/`bump_whnf`/`bump_def_eq`) record on every -native profiling run and compile out on the zkvm target. - ---- - -## Caveats - -- The full-closure model is n=76 across Init/Std/Mathlib (per-library MAPE - 5–8%); the shard model is still n=12 and Init-derived, so the ~190M shard - intercept is the term most likely to - shift on Std/Mathlib — worth re-checking there. -- RAM/prove-time models are for one GPU. -- Cycle counts are deterministic for a fixed guest ELF; the profiler counters - compile out on the zkvm target, so the proven ELF is unaffected. -- **Regimes have distinct coefficients and don't transfer.** - `instRxcHasSize_eq` (a single-block atomic shard) is predicted at **1.00×** by - the *shard* model (167,900·hb); applying the *full-closure* model to it - underpredicts ~2× — a regime mismatch, not a model failure. -- **Edge: near-pure-substitution constants.** Auto-generated `*.mk.injEq` / `.inj` - lemmas (huge `subst`, ~zero `hb`/`nat`) are *over*predicted ~1.3–1.6× by the - full-closure model — pure substitution is cheaper per node than the - mixed-calibration `subst` rate. Including such exemplars in the calibration - tightens them to ≤1.3× (safe, over-provision direction). The within-set worst - residual is 1.27×. -- **`nat_arith` does not help.** It is near-zero across all constants (the bignum - binop path is rarely exercised; max ≈1,600 vs `hb`/`subst` in the 10⁴–10⁵ - range), and every outlier is substitution-bound, not arithmetic-bound — so - reduction counters (`hb`, `subst`), which are 0.98–1.0 collinear on real code, - remain the right and sufficient variables. diff --git a/flake.lock b/flake.lock index 1fac8891b..9a11bed12 100644 --- a/flake.lock +++ b/flake.lock @@ -77,21 +77,6 @@ "type": "github" } }, - "crane_3": { - "locked": { - "lastModified": 1774313767, - "narHash": "sha256-hy0XTQND6avzGEUFrJtYBBpFa/POiiaGBr2vpU6Y9tY=", - "owner": "ipetkov", - "repo": "crane", - "rev": "3d9df76e29656c679c744968b17fbaf28f0e923d", - "type": "github" - }, - "original": { - "owner": "ipetkov", - "repo": "crane", - "type": "github" - } - }, "cuda-nixpkgs": { "locked": { "lastModified": 1787964612, @@ -153,28 +138,6 @@ "type": "github" } }, - "fenix_3": { - "inputs": { - "nixpkgs": [ - "zisk", - "nixpkgs" - ], - "rust-analyzer-src": "rust-analyzer-src_3" - }, - "locked": { - "lastModified": 1774596377, - "narHash": "sha256-DiSLMxyTwIUAlhOe34r6kKNQRv6PTF+vf0MG45mAyn4=", - "owner": "nix-community", - "repo": "fenix", - "rev": "a88a1c8cf2f094da6347fcec54089f4bcb518409", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "fenix", - "type": "github" - } - }, "flake-parts": { "inputs": { "nixpkgs-lib": "nixpkgs-lib" @@ -229,42 +192,6 @@ "type": "github" } }, - "flake-parts_4": { - "inputs": { - "nixpkgs-lib": "nixpkgs-lib_4" - }, - "locked": { - "lastModified": 1772408722, - "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "flake-parts_5": { - "inputs": { - "nixpkgs-lib": "nixpkgs-lib_5" - }, - "locked": { - "lastModified": 1772408722, - "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, "lean4-nix": { "inputs": { "flake-parts": "flake-parts_3", @@ -345,52 +272,6 @@ "type": "github" } }, - "nixpkgs-lib_4": { - "locked": { - "lastModified": 1772328832, - "narHash": "sha256-e+/T/pmEkLP6BHhYjx6GmwP5ivonQQn0bJdH9YrRB+Q=", - "owner": "nix-community", - "repo": "nixpkgs.lib", - "rev": "c185c7a5e5dd8f9add5b2f8ebeff00888b070742", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "nixpkgs.lib", - "type": "github" - } - }, - "nixpkgs-lib_5": { - "locked": { - "lastModified": 1772328832, - "narHash": "sha256-e+/T/pmEkLP6BHhYjx6GmwP5ivonQQn0bJdH9YrRB+Q=", - "owner": "nix-community", - "repo": "nixpkgs.lib", - "rev": "c185c7a5e5dd8f9add5b2f8ebeff00888b070742", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "nixpkgs.lib", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1774386573, - "narHash": "sha256-4hAV26quOxdC6iyG7kYaZcM3VOskcPUrdCQd/nx8obc=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "46db2e09e1d3f113a13c0d7b81e2f221c63b8ce9", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "root": { "inputs": { "blake3-lean": "blake3-lean", @@ -402,9 +283,7 @@ "nixpkgs": [ "lean4-nix", "nixpkgs" - ], - "sp1": "sp1", - "zisk": "zisk" + ] } }, "rust-analyzer-src": { @@ -440,66 +319,6 @@ "repo": "rust-analyzer", "type": "github" } - }, - "rust-analyzer-src_3": { - "flake": false, - "locked": { - "lastModified": 1774569884, - "narHash": "sha256-E8iWEPzg7OnE0XXXjo75CX7xFauqzJuGZ5wSO9KS8Ek=", - "owner": "rust-lang", - "repo": "rust-analyzer", - "rev": "443ddcddd0c73b07b799d052f5ef3b448c2f3508", - "type": "github" - }, - "original": { - "owner": "rust-lang", - "ref": "nightly", - "repo": "rust-analyzer", - "type": "github" - } - }, - "sp1": { - "inputs": { - "flake-parts": "flake-parts_4", - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1778884899, - "narHash": "sha256-kQahZHfD2f6tEaqD6WBDHDnjSr5m8x/IIS8VKu5glTw=", - "owner": "argumentcomputer", - "repo": "sp1.nix", - "rev": "048405ea52a9acb3fdd4eb7ad8c82346e93c4924", - "type": "github" - }, - "original": { - "owner": "argumentcomputer", - "repo": "sp1.nix", - "type": "github" - } - }, - "zisk": { - "inputs": { - "crane": "crane_3", - "fenix": "fenix_3", - "flake-parts": "flake-parts_5", - "nixpkgs": "nixpkgs_2" - }, - "locked": { - "lastModified": 1784235738, - "narHash": "sha256-jMifLC0Ih3p2dOLH6Bd3keeCpJmqB1OeBK7oDYxekGQ=", - "owner": "argumentcomputer", - "repo": "zisk.nix", - "rev": "5f78d50d855c3bc4063a26b957a9e0aba2ea7088", - "type": "github" - }, - "original": { - "owner": "argumentcomputer", - "ref": "blake3-precompile", - "repo": "zisk.nix", - "type": "github" - } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 8ecab9aaa..69bbf742a 100644 --- a/flake.nix +++ b/flake.nix @@ -40,14 +40,6 @@ inputs.lean4-nix.follows = "lean4-nix"; }; - # Zisk dev shell (cargo-zisk, ziskemu, RISC-V toolchain) for `zisk-guest`. - zisk.url = "github:argumentcomputer/zisk.nix/blake3-precompile"; - - # SP1 dev shell (cargo-prove + succinct Rust toolchain) for `sp1/guest`. - sp1 = { - url = "github:argumentcomputer/sp1.nix"; - inputs.nixpkgs.follows = "nixpkgs"; - }; }; outputs = @@ -57,8 +49,6 @@ fenix, crane, blake3-lean, - zisk, - sp1, ... }: flake-parts.lib.mkFlake { inherit inputs; } { @@ -454,32 +444,6 @@ }; }; - # TODO: Re-enable the zkVM shells once they build in CI. - # Zisk shell for `zisk-guest/` (cargo-zisk, ziskemu, RISC-V toolchain). - # Kept separate from `default`: merging cross-pollinates NIX_CFLAGS_COMPILE - # between zisk.nix's and this flake's nixpkgs, which breaks bindgen on - # `lean.h`. - # devShells.zisk = zisk.devShells.${system}.default; - - # SP1 shell for `sp1/host` + `sp1/guest`: host Rust toolchain plus - # cargo-prove and the succinct Rust toolchain (~/.sp1) from sp1.nix. - # `rustup-shim` wraps the host `rustc` to dispatch to the succinct - # toolchain when `RUSTUP_TOOLCHAIN=succinct` (set by `sp1-build`); the - # plain host rustc doesn't know `riscv64im-succinct-zkvm-elf`. - # `sp1-prover-types`'s build script needs `protoc`. - # devShells.sp1 = pkgs.mkShell { - # name = "sp1"; - # inputsFrom = [ sp1.devShells.${system}.default ]; - # LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib"; - # packages = with pkgs; [ - # pkg-config - # openssl - # protobuf - # clang - # (sp1.packages.${system}.rustup-shim.override { inherit rustToolchain; }) - # ]; - # }; - # The treefmt wrapper around `nixfmt`, so `nix fmt .` can take a # directory; bare `nixfmt` only accepts individual files. formatter = pkgs.nixfmt-tree; diff --git a/sp1/.cargo/config.toml b/sp1/.cargo/config.toml deleted file mode 100644 index 9818452d8..000000000 --- a/sp1/.cargo/config.toml +++ /dev/null @@ -1,9 +0,0 @@ -[build] -rustflags = ["-C", "target-cpu=native"] - -# Wraps every binary with scripts/cuda-runner.sh, which cleans orphaned -# sp1-gpu-server sockets and retries on the SP1 SDK's CUDA-init race. -# Pass-through (no overhead, no retries) when SP1_PROVER != "cuda". -# Path is relative to cwd; this expects cargo to be invoked from sp1/. -[target.x86_64-unknown-linux-gnu] -runner = "./scripts/cuda-runner.sh" diff --git a/sp1/Cargo.lock b/sp1/Cargo.lock deleted file mode 100644 index 66fb34e20..000000000 --- a/sp1/Cargo.lock +++ /dev/null @@ -1,5914 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "addchain" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e33f6a175ec6a9e0aca777567f9ff7c3deefc255660df887e7fa3585e9801d8" -dependencies = [ - "num-bigint 0.3.3", - "num-integer", - "num-traits", -] - -[[package]] -name = "addr2line" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" - -[[package]] -name = "ahash" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" -dependencies = [ - "memchr", -] - -[[package]] -name = "allocator-api2" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - -[[package]] -name = "anstream" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" - -[[package]] -name = "anstyle-parse" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" -dependencies = [ - "anstyle", - "once_cell_polyfill", - "windows-sys 0.61.2", -] - -[[package]] -name = "anyhow" -version = "1.0.102" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" - -[[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 = "async-scoped" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4042078ea593edffc452eef14e99fdb2b120caa4ad9618bcdeabc4a023b98740" -dependencies = [ - "futures", - "pin-project", - "tokio", -] - -[[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", -] - -[[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.117", -] - -[[package]] -name = "async-trait" -version = "0.1.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "atomic" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89cbf775b137e9b968e67227ef7f775587cde3fd31b0d8599dbd0f598a48340" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - -[[package]] -name = "autocfg" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" - -[[package]] -name = "axum" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" -dependencies = [ - "async-trait", - "axum-core", - "bytes", - "futures-util", - "http", - "http-body", - "http-body-util", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "sync_wrapper", - "tower 0.5.3", - "tower-layer", - "tower-service", -] - -[[package]] -name = "axum-core" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http", - "http-body", - "http-body-util", - "mime", - "pin-project-lite", - "rustversion", - "sync_wrapper", - "tower-layer", - "tower-service", -] - -[[package]] -name = "backtrace" -version = "0.3.76" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "serde", - "windows-link", -] - -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - -[[package]] -name = "base64ct" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" - -[[package]] -name = "bignat" -version = "0.1.0" -source = "git+https://github.com/argumentcomputer/lean-ffi.git?rev=93c7e52952ae94546be08313f4ff3922984c84d5#93c7e52952ae94546be08313f4ff3922984c84d5" -dependencies = [ - "num-bigint 0.4.6", -] - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bitflags" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" - -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - -[[package]] -name = "blake3" -version = "1.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aa83c34e62843d924f905e0f5c866eb1dd6545fc4d719e803d9ba6030371fce" -dependencies = [ - "arrayref", - "arrayvec", - "cc", - "cfg-if", - "constant_time_eq", - "cpufeatures 0.3.0", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array 0.14.9", -] - -[[package]] -name = "bumpalo" -version = "3.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" - -[[package]] -name = "byte-slice-cast" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" - -[[package]] -name = "bytemuck" -version = "1.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" - -[[package]] -name = "camino" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48" -dependencies = [ - "serde_core", -] - -[[package]] -name = "cargo-platform" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" -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", - "serde", - "serde_json", - "thiserror 1.0.69", -] - -[[package]] -name = "cc" -version = "1.2.62" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" -dependencies = [ - "find-msvc-tools", - "shlex", -] - -[[package]] -name = "cfg-if" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - -[[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.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" -dependencies = [ - "iana-time-zone", - "num-traits", - "windows-link", -] - -[[package]] -name = "clap" -version = "4.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_derive" -version = "4.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "clap_lex" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" - -[[package]] -name = "colorchoice" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" - -[[package]] -name = "console" -version = "0.15.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" -dependencies = [ - "encode_unicode", - "libc", - "once_cell", - "unicode-width", - "windows-sys 0.59.0", -] - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[package]] -name = "const_format" -version = "0.2.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4481a617ad9a412be3b97c5d403fef8ed023103368908b9c50af598ff467cc1e" -dependencies = [ - "const_format_proc_macros", - "konst", -] - -[[package]] -name = "const_format_proc_macros" -version = "0.2.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "constant_time_eq" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - -[[package]] -name = "cpufeatures" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" -dependencies = [ - "libc", -] - -[[package]] -name = "crash-context" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "031ed29858d90cfdf27fe49fae28028a1f20466db97962fa2f4ea34809aeebf3" -dependencies = [ - "cfg-if", - "libc", - "mach2", -] - -[[package]] -name = "crash-handler" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0df5c9639f4942eb7702b964b3f9adf03a55724a57558cc177407388a8b936e2" -dependencies = [ - "cfg-if", - "crash-context", - "libc", - "mach2", - "parking_lot", -] - -[[package]] -name = "crc32fast" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-epoch", - "crossbeam-queue", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" -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.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - -[[package]] -name = "crunchy" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" - -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "generic-array 0.14.9", - "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 0.14.9", - "typenum", -] - -[[package]] -name = "dashmap" -version = "6.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c" -dependencies = [ - "cfg-if", - "crossbeam-utils", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", - "rayon", -] - -[[package]] -name = "dashu" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b3e5ac1e23ff1995ef05b912e2b012a8784506987a2651552db2c73fb3d7e0" -dependencies = [ - "dashu-base", - "dashu-float", - "dashu-int", - "dashu-macros", - "dashu-ratio", - "rustversion", -] - -[[package]] -name = "dashu-base" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b80bf6b85aa68c58ffea2ddb040109943049ce3fbdf4385d0380aef08ef289" - -[[package]] -name = "dashu-float" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85078445a8dbd2e1bd21f04a816f352db8d333643f0c9b78ca7c3d1df71063e7" -dependencies = [ - "dashu-base", - "dashu-int", - "num-modular", - "num-order", - "rustversion", - "static_assertions", -] - -[[package]] -name = "dashu-int" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee99d08031ca34a4d044efbbb21dff9b8c54bb9d8c82a189187c0651ffdb9fbf" -dependencies = [ - "cfg-if", - "dashu-base", - "num-modular", - "num-order", - "rustversion", - "static_assertions", -] - -[[package]] -name = "dashu-macros" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93381c3ef6366766f6e9ed9cf09e4ef9dec69499baf04f0c60e70d653cf0ab10" -dependencies = [ - "dashu-base", - "dashu-float", - "dashu-int", - "dashu-ratio", - "paste", - "proc-macro2", - "quote", - "rustversion", -] - -[[package]] -name = "dashu-ratio" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47e33b04dd7ce1ccf8a02a69d3419e354f2bbfdf4eb911a0b7465487248764c9" -dependencies = [ - "dashu-base", - "dashu-float", - "dashu-int", - "num-modular", - "num-order", - "rustversion", -] - -[[package]] -name = "debugid" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" -dependencies = [ - "uuid", -] - -[[package]] -name = "deepsize2" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b5184084af9beed35eecbf4c36baf6e26b9dc47b61b74e02f930c72a58e71b" -dependencies = [ - "deepsize_derive2", - "hashbrown 0.14.5", -] - -[[package]] -name = "deepsize_derive2" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f8817865cacf3b93b943ca06b0fc5fd8e99eabfdb7ea5d296efcbc4afc4f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "der" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" -dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", -] - -[[package]] -name = "deranged" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" -dependencies = [ - "powerfmt", -] - -[[package]] -name = "derive-where" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d08b3a0bcc0d079199cd476b2cae8435016ec11d1c0986c6901c5ac223041534" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[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 = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", - "subtle", -] - -[[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-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 = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "downcast-rs" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" - -[[package]] -name = "dynasm" -version = "3.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7d4c414c94bc830797115b8e5f434d58e7e80cb42ba88508c14bc6ea270625" -dependencies = [ - "bitflags", - "byteorder", - "lazy_static", - "proc-macro-error2", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "dynasmrt" -version = "3.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "602f7458a3859195fb840e6e0cce5f4330dd9dfbfece0edaf31fe427af346f55" -dependencies = [ - "byteorder", - "dynasm", - "fnv", - "memmap2", -] - -[[package]] -name = "ecdsa" -version = "0.16.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" -dependencies = [ - "der", - "digest", - "elliptic-curve", - "rfc6979", - "serdect", - "signature", - "spki", -] - -[[package]] -name = "either" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" -dependencies = [ - "serde", -] - -[[package]] -name = "elf" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" - -[[package]] -name = "elliptic-curve" -version = "0.13.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" -dependencies = [ - "base16ct", - "crypto-bigint", - "digest", - "ff", - "generic-array 0.14.9", - "group", - "pem-rfc7468", - "pkcs8", - "rand_core 0.6.4", - "sec1", - "serdect", - "subtle", - "zeroize", -] - -[[package]] -name = "encode_unicode" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" - -[[package]] -name = "enum-map" -version = "2.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" -dependencies = [ - "enum-map-derive", - "serde", -] - -[[package]] -name = "enum-map-derive" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "errno" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "eventsource-stream" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74fef4569247a5f429d9156b9d0a2599914385dd189c539334c625d8099d90ab" -dependencies = [ - "futures-core", - "nom", - "pin-project-lite", -] - -[[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 = "fastrand" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" - -[[package]] -name = "ff" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" -dependencies = [ - "bitvec", - "byteorder", - "ff_derive", - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "ff_derive" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f10d12652036b0e99197587c6ba87a8fc3031986499973c030d8b44fcc151b60" -dependencies = [ - "addchain", - "num-bigint 0.3.3", - "num-integer", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "find-msvc-tools" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" - -[[package]] -name = "fixedbitset" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" - -[[package]] -name = "flate2" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[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.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - -[[package]] -name = "form_urlencoded" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" -dependencies = [ - "percent-encoding", -] - -[[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.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" - -[[package]] -name = "futures-executor" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" - -[[package]] -name = "futures-macro" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "futures-sink" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" - -[[package]] -name = "futures-task" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" - -[[package]] -name = "futures-util" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "slab", -] - -[[package]] -name = "gcd" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" - -[[package]] -name = "gecko_profile" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "890852c7e1e02bc6758e325d6b1e0236e4fbf21b492f585ce4d4715be54b4c6a" -dependencies = [ - "debugid", - "serde", - "serde_json", -] - -[[package]] -name = "gen_ops" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "304de19db7028420975a296ab0fcbbc8e69438c4ed254a1e41e2a7f37d5f0e0a" - -[[package]] -name = "generator" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3b854b0e584ead1a33f18b2fcad7cf7be18b3875c78816b753639aa501513ae" -dependencies = [ - "cc", - "cfg-if", - "libc", - "log", - "rustversion", - "windows-link", - "windows-result", -] - -[[package]] -name = "generic-array" -version = "0.14.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" -dependencies = [ - "typenum", - "version_check", - "zeroize", -] - -[[package]] -name = "generic-array" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96512db27971c2c3eece70a1e106fbe6c87760234e31e8f7e5634912fe52794a" -dependencies = [ - "serde", - "typenum", -] - -[[package]] -name = "getrandom" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "getrandom" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "r-efi 5.3.0", - "wasip2", - "wasm-bindgen", -] - -[[package]] -name = "getrandom" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" -dependencies = [ - "cfg-if", - "libc", - "r-efi 6.0.0", - "wasip2", - "wasip3", -] - -[[package]] -name = "gimli" -version = "0.32.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" - -[[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.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "171fefbc92fe4a4de27e0698d6a5b392d6a0e333506bc49133760b3bcf948733" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http", - "indexmap 2.14.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" - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash", - "allocator-api2", - "serde", -] - -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", -] - -[[package]] -name = "hashbrown" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" - -[[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.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest", -] - -[[package]] -name = "http" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be7462df143984c4598a256ef469b251d7d7f9e271135073e78fc535414f3d0" -dependencies = [ - "bytes", - "itoa", -] - -[[package]] -name = "http-body" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http", -] - -[[package]] -name = "http-body-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" -dependencies = [ - "bytes", - "futures-core", - "http", - "http-body", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "human-repr" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" - -[[package]] -name = "hyper" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" -dependencies = [ - "atomic-waker", - "bytes", - "futures-channel", - "futures-core", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.27.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" -dependencies = [ - "http", - "hyper", - "hyper-util", - "rustls", - "tokio", - "tokio-rustls", - "tower-service", - "webpki-roots", -] - -[[package]] -name = "hyper-timeout" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" -dependencies = [ - "hyper", - "hyper-util", - "pin-project-lite", - "tokio", - "tower-service", -] - -[[package]] -name = "hyper-util" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" -dependencies = [ - "base64", - "bytes", - "futures-channel", - "futures-util", - "http", - "http-body", - "hyper", - "ipnet", - "libc", - "percent-encoding", - "pin-project-lite", - "socket2 0.6.3", - "tokio", - "tower-service", - "tracing", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.65" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core 0.62.2", -] - -[[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 = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" -dependencies = [ - "displaydoc", - "potential_utf", - "utf8_iter", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locale_core" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" -dependencies = [ - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" - -[[package]] -name = "icu_properties" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" -dependencies = [ - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "zerotrie", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" - -[[package]] -name = "icu_provider" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" -dependencies = [ - "displaydoc", - "icu_locale_core", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", -] - -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - -[[package]] -name = "idna" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" -dependencies = [ - "icu_normalizer", - "icu_properties", -] - -[[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.117", -] - -[[package]] -name = "indenter" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" - -[[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", -] - -[[package]] -name = "indexmap" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" -dependencies = [ - "equivalent", - "hashbrown 0.17.1", - "serde", - "serde_core", -] - -[[package]] -name = "indicatif" -version = "0.17.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" -dependencies = [ - "console", - "number_prefix", - "portable-atomic", - "unicode-width", - "web-time", -] - -[[package]] -name = "ipnet" -version = "2.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" - -[[package]] -name = "is_terminal_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" - -[[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.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - -[[package]] -name = "ix-bench" -version = "0.1.0" -dependencies = [ - "serde_json", - "tracing-texray", -] - -[[package]] -name = "ix-common" -version = "0.1.0" -dependencies = [ - "bignat", - "blake3", - "indexmap 2.14.0", - "rustc-hash", -] - -[[package]] -name = "ix-kernel" -version = "0.1.0" -dependencies = [ - "bignat", - "blake3", - "dashmap", - "indexmap 2.14.0", - "itertools 0.14.0", - "ix-common", - "ixon", - "log", - "num-bigint 0.4.6", - "rayon", - "rustc-hash", -] - -[[package]] -name = "ixon" -version = "0.1.0" -dependencies = [ - "bignat", - "blake3", - "dashmap", - "indexmap 2.14.0", - "ix-common", - "memmap2", - "nom", - "num-bigint 0.4.6", - "rayon", - "rustc-hash", - "sha2", - "tiny-keccak", -] - -[[package]] -name = "js-sys" -version = "0.3.99" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" -dependencies = [ - "cfg-if", - "futures-util", - "once_cell", - "wasm-bindgen", -] - -[[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", - "serdect", - "sha2", - "signature", -] - -[[package]] -name = "konst" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128133ed7824fcd73d6e7b17957c5eb7bacb885649bd8c69708b2331a10bcefb" -dependencies = [ - "konst_macro_rules", -] - -[[package]] -name = "konst_macro_rules" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4933f3f57a8e9d9da04db23fb153356ecaf00cbd14aee46279c33dc80925c37" - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -dependencies = [ - "spin", -] - -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - -[[package]] -name = "libc" -version = "0.2.186" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" - -[[package]] -name = "libredox" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" -dependencies = [ - "libc", -] - -[[package]] -name = "linux-raw-sys" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" - -[[package]] -name = "litemap" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" - -[[package]] -name = "lock_api" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" -dependencies = [ - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5" - -[[package]] -name = "loom" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "lru" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" -dependencies = [ - "hashbrown 0.15.5", -] - -[[package]] -name = "lru-slab" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" - -[[package]] -name = "mach2" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d640282b302c0bb0a2a8e0233ead9035e3bed871f0b7e81fe4a1ec829765db44" -dependencies = [ - "libc", -] - -[[package]] -name = "matchers" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" - -[[package]] -name = "md-5" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" -dependencies = [ - "cfg-if", - "digest", -] - -[[package]] -name = "memchr" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" - -[[package]] -name = "memfd" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad38eb12aea514a0466ea40a80fd8cc83637065948eb4a426e4aa46261175227" -dependencies = [ - "rustix", -] - -[[package]] -name = "memmap2" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" -dependencies = [ - "libc", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[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.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" -dependencies = [ - "adler2", - "simd-adler32", -] - -[[package]] -name = "mio" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.61.2", -] - -[[package]] -name = "mti" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9563a7d5556636e74bbd8773241fbcbc5c89b9f6bfdc97b29b56e740c2c74b9" -dependencies = [ - "typeid_prefix", - "typeid_suffix", -] - -[[package]] -name = "multimap" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "ntapi" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3b335231dfd352ffb0f8017f3b6027a4917f7df785ea2143d8af2adc66980ae" -dependencies = [ - "winapi", -] - -[[package]] -name = "nu-ansi-term" -version = "0.50.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint 0.4.6", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[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-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.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" - -[[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-modular" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17bb261bf36fa7d83f4c294f834e91256769097b3cb505d44831e0a179ac647f" - -[[package]] -name = "num-order" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "537b596b97c40fcf8056d153049eb22f481c17ebce72a513ec9286e4986d1bb6" -dependencies = [ - "num-modular", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint 0.4.6", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" -dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "number_prefix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" - -[[package]] -name = "object" -version = "0.37.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" -dependencies = [ - "crc32fast", - "flate2", - "hashbrown 0.15.5", - "indexmap 2.14.0", - "memchr", - "ruzstd", -] - -[[package]] -name = "once_cell" -version = "1.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" - -[[package]] -name = "once_cell_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" - -[[package]] -name = "opentelemetry" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b69a91d4893e713e06f724597ad630f1fa76057a5e1026c0ca67054a9032a76" -dependencies = [ - "futures-core", - "futures-sink", - "js-sys", - "once_cell", - "pin-project-lite", - "thiserror 1.0.69", -] - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "p256" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2", -] - -[[package]] -name = "p3-air" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3a5de20a2301bf2530de1ceb13768ec3a80f729fbf8b72f813e30bc54c5bce2" -dependencies = [ - "p3-field", - "p3-matrix", - "serde", -] - -[[package]] -name = "p3-baby-bear" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d69e6e9af4eaaaa60f7bb9f0e0f73ebcbaefe7e00974d97ad0fa542d6a4f0890" -dependencies = [ - "cfg-if", - "num-bigint 0.4.6", - "p3-field", - "p3-mds", - "p3-poseidon2", - "p3-symmetric", - "rand 0.8.6", - "rustc_version", - "serde", -] - -[[package]] -name = "p3-bn254-fr" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2077757c7cb514202ccb5368f521f23f5709c720599e6545c683c66e0a52d2d8" -dependencies = [ - "ff", - "num-bigint 0.4.6", - "p3-field", - "p3-poseidon2", - "p3-symmetric", - "rand 0.8.6", - "serde", -] - -[[package]] -name = "p3-challenger" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a908924d43e4cfb93fb41c8346cac211b70314385a9037e9241f5b7f3eaf77" -dependencies = [ - "p3-field", - "p3-maybe-rayon", - "p3-symmetric", - "p3-util", - "serde", - "tracing", -] - -[[package]] -name = "p3-commit" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50acacc7219fce6c01db938f82c1b21b5e7133990b7fff861f91534aeb569419" -dependencies = [ - "itertools 0.12.1", - "p3-challenger", - "p3-field", - "p3-matrix", - "p3-util", - "serde", -] - -[[package]] -name = "p3-dft" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be6408b10a2c27eb13a7d5580c546c2179a8dc7dbc10a990657311891f9b41c0" -dependencies = [ - "p3-field", - "p3-matrix", - "p3-maybe-rayon", - "p3-util", - "tracing", -] - -[[package]] -name = "p3-field" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dc75969ca3ac847f43e632ab979d59ff7a68f9eac8dbf8edcbba47fc2e1d3aa" -dependencies = [ - "itertools 0.12.1", - "num-bigint 0.4.6", - "num-traits", - "p3-util", - "rand 0.8.6", - "serde", -] - -[[package]] -name = "p3-fri" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cbc4965ee488f3247867b7ec4bb005b8afa72cb0d461a4dcb1387ecab6426d5" -dependencies = [ - "itertools 0.12.1", - "p3-challenger", - "p3-commit", - "p3-dft", - "p3-field", - "p3-interpolation", - "p3-matrix", - "p3-maybe-rayon", - "p3-util", - "serde", - "tracing", -] - -[[package]] -name = "p3-interpolation" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08ad7e9f08c336d7ea39d12e11951188473542565323bac2a6535e536b58487d" -dependencies = [ - "p3-field", - "p3-matrix", - "p3-util", -] - -[[package]] -name = "p3-keccak-air" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bf177d56740078b5a5a842fa2393427796283dc8174b4a1a325c2d0b042de" -dependencies = [ - "p3-air", - "p3-field", - "p3-matrix", - "p3-maybe-rayon", - "p3-util", - "tracing", -] - -[[package]] -name = "p3-koala-bear" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a9683cd0ef68100df7c62490533047bcf19c04c4a0fa1efc9d7c1e03e31f6b3" -dependencies = [ - "cfg-if", - "num-bigint 0.4.6", - "p3-field", - "p3-mds", - "p3-poseidon2", - "p3-symmetric", - "rand 0.8.6", - "rustc_version", - "serde", -] - -[[package]] -name = "p3-matrix" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75c3f150ceb90e09539413bf481e618d05ee19210b4e467d2902eb82d2e15281" -dependencies = [ - "itertools 0.12.1", - "p3-field", - "p3-maybe-rayon", - "p3-util", - "rand 0.8.6", - "serde", - "tracing", -] - -[[package]] -name = "p3-maybe-rayon" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0641952b42da45e1dfa2d4a2a3163e330f944ad9740942f35026c0a71a605f1" -dependencies = [ - "rayon", -] - -[[package]] -name = "p3-mds" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa4a5f250e174dcfca5cbeac6ad75713924e7e7320e0a335e3c50b8b1f4fe8ec" -dependencies = [ - "itertools 0.12.1", - "p3-dft", - "p3-field", - "p3-matrix", - "p3-symmetric", - "p3-util", - "rand 0.8.6", -] - -[[package]] -name = "p3-merkle-tree" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5703d9229d52a8c09970e4d722c3a8b4d37e688c306c3a1c03b872efcd204e6" -dependencies = [ - "itertools 0.12.1", - "p3-commit", - "p3-field", - "p3-matrix", - "p3-maybe-rayon", - "p3-symmetric", - "p3-util", - "serde", - "tracing", -] - -[[package]] -name = "p3-poseidon2" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "522986377b2164c5f94f2dae88e0e0a3d169cc6239202ef4aeb4322d60feffd0" -dependencies = [ - "gcd", - "p3-field", - "p3-mds", - "p3-symmetric", - "rand 0.8.6", - "serde", -] - -[[package]] -name = "p3-symmetric" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9047ce85c086a9b3f118e10078f10636f7bfeed5da871a04da0b61400af8793a" -dependencies = [ - "itertools 0.12.1", - "p3-field", - "serde", -] - -[[package]] -name = "p3-uni-stark" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc3dfdeba14d8db621c4e52dd63973384ff35f353fd750154ff88397f4ea5adf" -dependencies = [ - "itertools 0.12.1", - "p3-air", - "p3-challenger", - "p3-commit", - "p3-dft", - "p3-field", - "p3-matrix", - "p3-maybe-rayon", - "p3-util", - "serde", - "tracing", -] - -[[package]] -name = "p3-util" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff962f8eaa5f36e0447cee7c241f6b4b475fadf3ee61f154327a26bb4e009ba" -dependencies = [ - "serde", -] - -[[package]] -name = "parity-scale-codec" -version = "3.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" -dependencies = [ - "arrayvec", - "byte-slice-cast", - "const_format", - "impl-trait-for-tuples", - "parity-scale-codec-derive", - "rustversion", -] - -[[package]] -name = "parity-scale-codec-derive" -version = "3.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" -dependencies = [ - "proc-macro-crate 3.5.0", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "parking_lot" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-link", -] - -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[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.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" - -[[package]] -name = "petgraph" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" -dependencies = [ - "fixedbitset", - "indexmap 2.14.0", -] - -[[package]] -name = "pin-project" -version = "1.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "portable-atomic" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" - -[[package]] -name = "potential_utf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" -dependencies = [ - "zerovec", -] - -[[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.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn 2.0.117", -] - -[[package]] -name = "primeorder" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" -dependencies = [ - "elliptic-curve", -] - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit 0.19.15", -] - -[[package]] -name = "proc-macro-crate" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" -dependencies = [ - "toml_edit 0.25.11+spec-1.1.0", -] - -[[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "proc-macro-error2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" -dependencies = [ - "proc-macro-error-attr2", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "proc-macro2" -version = "1.0.106" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prost" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf" -dependencies = [ - "heck", - "itertools 0.14.0", - "log", - "multimap", - "once_cell", - "petgraph", - "prettyplease", - "prost", - "prost-types", - "regex", - "syn 2.0.117", - "tempfile", -] - -[[package]] -name = "prost-derive" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" -dependencies = [ - "anyhow", - "itertools 0.14.0", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "prost-types" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" -dependencies = [ - "prost", -] - -[[package]] -name = "quinn" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" -dependencies = [ - "bytes", - "cfg_aliases", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash", - "rustls", - "socket2 0.6.3", - "thiserror 2.0.18", - "tokio", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-proto" -version = "0.11.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" -dependencies = [ - "bytes", - "getrandom 0.3.4", - "lru-slab", - "rand 0.9.4", - "ring", - "rustc-hash", - "rustls", - "rustls-pki-types", - "slab", - "thiserror 2.0.18", - "tinyvec", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-udp" -version = "0.5.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" -dependencies = [ - "cfg_aliases", - "libc", - "once_cell", - "socket2 0.6.3", - "tracing", - "windows-sys 0.52.0", -] - -[[package]] -name = "quote" -version = "1.0.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - -[[package]] -name = "r-efi" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" -dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.5", -] - -[[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_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core 0.9.5", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.17", -] - -[[package]] -name = "rand_core" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" -dependencies = [ - "getrandom 0.3.4", -] - -[[package]] -name = "range-set-blaze" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8421b5d459262eabbe49048d362897ff3e3830b44eac6cfe341d6acb2f0f13d2" -dependencies = [ - "gen_ops", - "itertools 0.12.1", - "num-integer", - "num-traits", -] - -[[package]] -name = "rayon" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "rayon-scan" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f87cc11a0140b4b0da0ffc889885760c61b13672d80a908920b2c0df078fa14" -dependencies = [ - "rayon", -] - -[[package]] -name = "redox_syscall" -version = "0.5.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" -dependencies = [ - "getrandom 0.2.17", - "libredox", - "thiserror 1.0.69", -] - -[[package]] -name = "regex" -version = "1.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" - -[[package]] -name = "reqwest" -version = "0.12.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" -dependencies = [ - "base64", - "bytes", - "futures-core", - "futures-util", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-rustls", - "hyper-util", - "js-sys", - "log", - "percent-encoding", - "pin-project-lite", - "quinn", - "rustls", - "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tokio-rustls", - "tokio-util", - "tower 0.5.3", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "webpki-roots", -] - -[[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" -dependencies = [ - "hmac", - "subtle", -] - -[[package]] -name = "ring" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" -dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.17", - "libc", - "untrusted", - "windows-sys 0.52.0", -] - -[[package]] -name = "rrs-succinct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd079cd303257a4cb4e5aadfa79a7fe23f3c8301aa4740ccc3a99673485a352" -dependencies = [ - "downcast-rs", - "num_enum", - "paste", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" - -[[package]] -name = "rustc-hash" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" - -[[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.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustls" -version = "0.23.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" -dependencies = [ - "log", - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", -] - -[[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.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" -dependencies = [ - "web-time", - "zeroize", -] - -[[package]] -name = "rustls-webpki" -version = "0.103.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" -dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", -] - -[[package]] -name = "rustversion" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" - -[[package]] -name = "ruzstd" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7c1c839d570d835527c9a5e4db7cb2198683a988cb9d7293fc8674e6bd58fc8" -dependencies = [ - "twox-hash", -] - -[[package]] -name = "ryu" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" - -[[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", - "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 3.5.0", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "scc" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46e6f046b7fef48e2660c57ed794263155d713de679057f2d0c169bfc6e756cc" -dependencies = [ - "sdd", -] - -[[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 = "sdd" -version = "3.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490dcfcbfef26be6800d11870ff2df8774fa6e86d047e3e8c8a76b25655e41ca" - -[[package]] -name = "sec1" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" -dependencies = [ - "base16ct", - "der", - "generic-array 0.14.9", - "pkcs8", - "serdect", - "subtle", - "zeroize", -] - -[[package]] -name = "semver" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" -dependencies = [ - "serde", - "serde_core", -] - -[[package]] -name = "serde" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" -dependencies = [ - "serde_core", - "serde_derive", -] - -[[package]] -name = "serde_arrays" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94a16b99c5ea4fe3daccd14853ad260ec00ea043b2708d1fd1da3106dcd8d9df" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_core" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "serde_json" -version = "1.0.150" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", -] - -[[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 = "serdect" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" -dependencies = [ - "base16ct", - "serde", -] - -[[package]] -name = "serial_test" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "911bd979bf1070a3f3aa7b691a3b3e9968f339ceeec89e08c280a8a22207a32f" -dependencies = [ - "futures-executor", - "futures-util", - "log", - "once_cell", - "parking_lot", - "scc", - "serial_test_derive", -] - -[[package]] -name = "serial_test_derive" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a7d91949b85b0d2fb687445e448b40d322b6b3e4af6b44a29b21d9a5f33e6d9" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[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.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures 0.2.17", - "digest", -] - -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "signal-hook-registry" -version = "1.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" -dependencies = [ - "errno", - "libc", -] - -[[package]] -name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest", - "rand_core 0.6.4", -] - -[[package]] -name = "simd-adler32" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" - -[[package]] -name = "slab" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" - -[[package]] -name = "slop-air" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "p3-air", -] - -[[package]] -name = "slop-algebra" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "itertools 0.14.0", - "p3-field", - "serde", -] - -[[package]] -name = "slop-alloc" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "serde", - "slop-algebra", - "thiserror 1.0.69", -] - -[[package]] -name = "slop-baby-bear" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "lazy_static", - "p3-baby-bear", - "serde", - "slop-algebra", - "slop-challenger", - "slop-poseidon2", - "slop-symmetric", -] - -[[package]] -name = "slop-basefold" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "derive-where", - "itertools 0.14.0", - "serde", - "slop-algebra", - "slop-alloc", - "slop-baby-bear", - "slop-bn254", - "slop-challenger", - "slop-koala-bear", - "slop-merkle-tree", - "slop-multilinear", - "slop-primitives", - "slop-tensor", - "slop-utils", - "thiserror 1.0.69", -] - -[[package]] -name = "slop-basefold-prover" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "derive-where", - "itertools 0.14.0", - "rand 0.8.6", - "serde", - "slop-algebra", - "slop-alloc", - "slop-baby-bear", - "slop-basefold", - "slop-bn254", - "slop-challenger", - "slop-commit", - "slop-dft", - "slop-fri", - "slop-futures", - "slop-koala-bear", - "slop-merkle-tree", - "slop-multilinear", - "slop-tensor", - "thiserror 1.0.69", -] - -[[package]] -name = "slop-bn254" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "ff", - "p3-bn254-fr", - "serde", - "slop-algebra", - "slop-challenger", - "slop-poseidon2", - "slop-symmetric", -] - -[[package]] -name = "slop-challenger" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "futures", - "p3-challenger", - "serde", - "slop-algebra", - "slop-symmetric", -] - -[[package]] -name = "slop-commit" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "p3-commit", - "serde", - "slop-alloc", -] - -[[package]] -name = "slop-dft" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "p3-dft", - "serde", - "slop-algebra", - "slop-alloc", - "slop-matrix", - "slop-tensor", -] - -[[package]] -name = "slop-fri" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "p3-fri", -] - -[[package]] -name = "slop-futures" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "crossbeam", - "futures", - "pin-project", - "rayon", - "thiserror 1.0.69", - "tokio", - "tracing", -] - -[[package]] -name = "slop-jagged" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "derive-where", - "futures", - "itertools 0.14.0", - "num_cpus", - "rand 0.8.6", - "rayon", - "serde", - "slop-algebra", - "slop-alloc", - "slop-baby-bear", - "slop-basefold", - "slop-basefold-prover", - "slop-bn254", - "slop-challenger", - "slop-commit", - "slop-futures", - "slop-koala-bear", - "slop-merkle-tree", - "slop-multilinear", - "slop-stacked", - "slop-sumcheck", - "slop-symmetric", - "slop-tensor", - "slop-utils", - "thiserror 1.0.69", - "tracing", -] - -[[package]] -name = "slop-keccak-air" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "p3-keccak-air", -] - -[[package]] -name = "slop-koala-bear" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "lazy_static", - "p3-koala-bear", - "serde", - "slop-algebra", - "slop-challenger", - "slop-poseidon2", - "slop-symmetric", -] - -[[package]] -name = "slop-matrix" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "p3-matrix", -] - -[[package]] -name = "slop-maybe-rayon" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "p3-maybe-rayon", -] - -[[package]] -name = "slop-merkle-tree" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "derive-where", - "itertools 0.14.0", - "p3-merkle-tree", - "serde", - "slop-algebra", - "slop-alloc", - "slop-baby-bear", - "slop-bn254", - "slop-challenger", - "slop-commit", - "slop-futures", - "slop-koala-bear", - "slop-matrix", - "slop-poseidon2", - "slop-symmetric", - "slop-tensor", - "slop-utils", - "thiserror 1.0.69", -] - -[[package]] -name = "slop-multilinear" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "derive-where", - "futures", - "num_cpus", - "rand 0.8.6", - "rayon", - "serde", - "slop-algebra", - "slop-alloc", - "slop-challenger", - "slop-commit", - "slop-futures", - "slop-matrix", - "slop-tensor", -] - -[[package]] -name = "slop-poseidon2" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "p3-poseidon2", -] - -[[package]] -name = "slop-primitives" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "slop-algebra", -] - -[[package]] -name = "slop-stacked" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "derive-where", - "futures", - "itertools 0.14.0", - "serde", - "slop-algebra", - "slop-alloc", - "slop-basefold", - "slop-basefold-prover", - "slop-challenger", - "slop-commit", - "slop-futures", - "slop-merkle-tree", - "slop-multilinear", - "slop-tensor", - "thiserror 1.0.69", -] - -[[package]] -name = "slop-sumcheck" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "futures", - "itertools 0.14.0", - "rayon", - "serde", - "slop-algebra", - "slop-alloc", - "slop-baby-bear", - "slop-challenger", - "slop-multilinear", - "thiserror 1.0.69", -] - -[[package]] -name = "slop-symmetric" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "p3-symmetric", -] - -[[package]] -name = "slop-tensor" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "arrayvec", - "derive-where", - "itertools 0.14.0", - "rand 0.8.6", - "rayon", - "serde", - "slop-algebra", - "slop-alloc", - "slop-futures", - "slop-matrix", - "thiserror 1.0.69", - "transpose", -] - -[[package]] -name = "slop-uni-stark" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "p3-uni-stark", -] - -[[package]] -name = "slop-utils" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "p3-util", - "tracing-forest", - "tracing-subscriber", -] - -[[package]] -name = "slop-whir" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "derive-where", - "futures", - "itertools 0.14.0", - "rand 0.8.6", - "rayon", - "serde", - "slop-algebra", - "slop-alloc", - "slop-baby-bear", - "slop-basefold", - "slop-challenger", - "slop-commit", - "slop-dft", - "slop-jagged", - "slop-koala-bear", - "slop-matrix", - "slop-merkle-tree", - "slop-multilinear", - "slop-stacked", - "slop-tensor", - "slop-utils", - "thiserror 1.0.69", -] - -[[package]] -name = "smallvec" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" -dependencies = [ - "serde", -] - -[[package]] -name = "snowbridge-amcl" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460a9ed63cdf03c1b9847e8a12a5f5ba19c4efd5869e4a737e05be25d7c427e5" -dependencies = [ - "parity-scale-codec", - "scale-info", -] - -[[package]] -name = "socket2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "socket2" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" -dependencies = [ - "libc", - "windows-sys 0.61.2", -] - -[[package]] -name = "sp1-build" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "anyhow", - "cargo_metadata", - "chrono", - "clap", - "dirs", - "sp1-primitives", -] - -[[package]] -name = "sp1-core-executor" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "bincode", - "bytemuck", - "cfg-if", - "clap", - "deepsize2", - "elf", - "enum-map", - "eyre", - "gecko_profile", - "hashbrown 0.14.5", - "hex", - "indicatif", - "itertools 0.14.0", - "memmap2", - "num", - "object", - "rrs-succinct", - "rustc-demangle", - "serde", - "serde_arrays", - "serde_json", - "slop-air", - "slop-algebra", - "slop-maybe-rayon", - "slop-symmetric", - "sp1-curves", - "sp1-hypercube", - "sp1-jit", - "sp1-primitives", - "strum", - "subenum", - "thiserror 1.0.69", - "tiny-keccak", - "tracing", - "typenum", - "vec_map", -] - -[[package]] -name = "sp1-core-executor-runner" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "base64", - "bincode", - "cargo_metadata", - "hashbrown 0.14.5", - "hex", - "libc", - "sha2", - "sp1-core-executor", - "sp1-core-executor-runner-binary", - "sp1-jit", - "sp1-primitives", - "sysinfo", - "tracing", - "uuid", -] - -[[package]] -name = "sp1-core-executor-runner-binary" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "bincode", - "crash-handler", - "libc", - "serde", - "sp1-core-executor", - "sp1-jit", - "tracing-subscriber", -] - -[[package]] -name = "sp1-core-machine" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "bincode", - "cfg-if", - "enum-map", - "futures", - "generic-array 1.1.0", - "hashbrown 0.14.5", - "itertools 0.14.0", - "num", - "num_cpus", - "rayon", - "rayon-scan", - "rrs-succinct", - "serde", - "serde_json", - "slop-air", - "slop-algebra", - "slop-challenger", - "slop-futures", - "slop-keccak-air", - "slop-matrix", - "slop-maybe-rayon", - "slop-uni-stark", - "snowbridge-amcl", - "sp1-core-executor", - "sp1-core-executor-runner", - "sp1-curves", - "sp1-derive", - "sp1-hypercube", - "sp1-jit", - "sp1-primitives", - "static_assertions", - "struct-reflection", - "strum", - "sysinfo", - "tempfile", - "thiserror 1.0.69", - "tokio", - "tracing", - "tracing-forest", - "tracing-subscriber", - "typenum", -] - -[[package]] -name = "sp1-cuda" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "bincode", - "bytes", - "reqwest", - "serde", - "serde_json", - "sp1-core-executor", - "sp1-core-machine", - "sp1-hypercube", - "sp1-primitives", - "sp1-prover", - "sp1-prover-types", - "thiserror 1.0.69", - "tokio", - "tracing", -] - -[[package]] -name = "sp1-curves" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "cfg-if", - "dashu", - "elliptic-curve", - "generic-array 1.1.0", - "itertools 0.14.0", - "k256", - "num", - "p256", - "serde", - "slop-algebra", - "snowbridge-amcl", - "sp1-primitives", - "typenum", -] - -[[package]] -name = "sp1-derive" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "sp1-host" -version = "0.1.0" -dependencies = [ - "anyhow", - "bincode", - "clap", - "human-repr", - "ix-bench", - "ix-common", - "ix-kernel", - "ixon", - "serde_json", - "sp1-build", - "sp1-sdk", - "tokio", - "tracing-texray", -] - -[[package]] -name = "sp1-hypercube" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "arrayref", - "deepsize2", - "derive-where", - "futures", - "hashbrown 0.14.5", - "itertools 0.14.0", - "num-bigint 0.4.6", - "num-traits", - "num_cpus", - "rayon", - "rayon-scan", - "serde", - "slop-air", - "slop-algebra", - "slop-alloc", - "slop-basefold", - "slop-basefold-prover", - "slop-bn254", - "slop-challenger", - "slop-commit", - "slop-futures", - "slop-jagged", - "slop-koala-bear", - "slop-matrix", - "slop-merkle-tree", - "slop-multilinear", - "slop-poseidon2", - "slop-stacked", - "slop-sumcheck", - "slop-symmetric", - "slop-tensor", - "slop-uni-stark", - "slop-whir", - "sp1-derive", - "sp1-primitives", - "struct-reflection", - "strum", - "thiserror 1.0.69", - "thousands", - "tokio", - "tracing", -] - -[[package]] -name = "sp1-jit" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "dynasmrt", - "hashbrown 0.14.5", - "libc", - "memfd", - "memmap2", - "serde", - "sp1-primitives", - "tracing", - "uuid", -] - -[[package]] -name = "sp1-primitives" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "bincode", - "blake3", - "elf", - "hex", - "itertools 0.14.0", - "lazy_static", - "num-bigint 0.4.6", - "serde", - "sha2", - "slop-algebra", - "slop-bn254", - "slop-challenger", - "slop-koala-bear", - "slop-poseidon2", - "slop-primitives", - "slop-symmetric", -] - -[[package]] -name = "sp1-prover" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "anyhow", - "bincode", - "clap", - "dirs", - "either", - "enum-map", - "eyre", - "futures", - "hashbrown 0.14.5", - "hex", - "indicatif", - "itertools 0.14.0", - "lru", - "mti", - "num-bigint 0.4.6", - "opentelemetry", - "pin-project", - "rand 0.8.6", - "reqwest", - "serde", - "serde_json", - "serial_test", - "sha2", - "slop-air", - "slop-algebra", - "slop-basefold", - "slop-bn254", - "slop-challenger", - "slop-futures", - "slop-jagged", - "slop-multilinear", - "slop-stacked", - "slop-symmetric", - "sp1-core-executor", - "sp1-core-executor-runner", - "sp1-core-machine", - "sp1-derive", - "sp1-hypercube", - "sp1-jit", - "sp1-primitives", - "sp1-prover-types", - "sp1-recursion-circuit", - "sp1-recursion-compiler", - "sp1-recursion-executor", - "sp1-recursion-gnark-ffi", - "sp1-recursion-machine", - "sp1-verifier", - "static_assertions", - "sysinfo", - "tempfile", - "thiserror 1.0.69", - "tokio", - "tonic", - "tracing", - "tracing-appender", - "tracing-subscriber", -] - -[[package]] -name = "sp1-prover-types" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "anyhow", - "async-scoped", - "bincode", - "chrono", - "futures-util", - "hashbrown 0.14.5", - "mti", - "prost", - "serde", - "sp1-core-machine", - "sp1-hypercube", - "sp1-primitives", - "tokio", - "tonic", - "tonic-build", - "tracing", -] - -[[package]] -name = "sp1-recursion-circuit" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "bincode", - "itertools 0.14.0", - "rand 0.8.6", - "rayon", - "serde", - "slop-air", - "slop-algebra", - "slop-alloc", - "slop-basefold", - "slop-basefold-prover", - "slop-bn254", - "slop-challenger", - "slop-commit", - "slop-jagged", - "slop-koala-bear", - "slop-matrix", - "slop-merkle-tree", - "slop-multilinear", - "slop-stacked", - "slop-sumcheck", - "slop-symmetric", - "slop-tensor", - "slop-whir", - "sp1-core-executor", - "sp1-core-machine", - "sp1-derive", - "sp1-hypercube", - "sp1-primitives", - "sp1-recursion-compiler", - "sp1-recursion-executor", - "sp1-recursion-machine", - "tracing", -] - -[[package]] -name = "sp1-recursion-compiler" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "backtrace", - "cfg-if", - "itertools 0.14.0", - "serde", - "slop-algebra", - "slop-bn254", - "slop-symmetric", - "sp1-core-machine", - "sp1-hypercube", - "sp1-primitives", - "sp1-recursion-executor", - "tracing", - "vec_map", -] - -[[package]] -name = "sp1-recursion-executor" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "backtrace", - "cfg-if", - "hashbrown 0.14.5", - "itertools 0.14.0", - "range-set-blaze", - "serde", - "slop-algebra", - "slop-maybe-rayon", - "slop-poseidon2", - "slop-symmetric", - "smallvec", - "sp1-derive", - "sp1-hypercube", - "static_assertions", - "thiserror 1.0.69", - "tracing", -] - -[[package]] -name = "sp1-recursion-gnark-ffi" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "anyhow", - "bincode", - "cfg-if", - "hex", - "num-bigint 0.4.6", - "serde", - "serde_json", - "sha2", - "slop-algebra", - "slop-symmetric", - "sp1-hypercube", - "sp1-primitives", - "sp1-recursion-compiler", - "sp1-verifier", - "tempfile", - "tracing", -] - -[[package]] -name = "sp1-recursion-machine" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "itertools 0.14.0", - "rand 0.8.6", - "slop-air", - "slop-algebra", - "slop-basefold", - "slop-matrix", - "slop-maybe-rayon", - "slop-symmetric", - "sp1-derive", - "sp1-hypercube", - "sp1-primitives", - "sp1-recursion-executor", - "strum", - "tracing", -] - -[[package]] -name = "sp1-sdk" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "cfg-if", - "dirs", - "eventsource-stream", - "futures", - "hex", - "indicatif", - "itertools 0.14.0", - "k256", - "num-bigint 0.4.6", - "serde", - "sha2", - "sp1-build", - "sp1-core-executor", - "sp1-core-executor-runner", - "sp1-core-machine", - "sp1-cuda", - "sp1-hypercube", - "sp1-primitives", - "sp1-prover", - "sp1-prover-types", - "sp1-recursion-executor", - "sp1-verifier", - "strum", - "tempfile", - "thiserror 1.0.69", - "tokio", - "tracing", -] - -[[package]] -name = "sp1-verifier" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "bincode", - "blake3", - "cfg-if", - "dirs", - "hex", - "lazy_static", - "serde", - "sha2", - "slop-algebra", - "slop-challenger", - "slop-primitives", - "slop-symmetric", - "sp1-hypercube", - "sp1-primitives", - "sp1-recursion-executor", - "sp1-recursion-machine", - "strum", - "substrate-bn-succinct-rs", - "thiserror 2.0.18", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "strength_reduce" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "struct-reflection" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "701b671d1ad68e250e05718f95dae3014a17f4e69cbe51842531c30495ff3301" -dependencies = [ - "struct-reflection-derive", -] - -[[package]] -name = "struct-reflection-derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ab74230a0592602e361bd63c645413fa8cbe4500d10274e849179e5c72548f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "strum" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "subenum" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eee3fb942ed39f3971438fcc7e05e20717e599e14c5c7cb50edd0df2a44b274" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "substrate-bn-succinct-rs" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a241fd7c1016fb8ad30fcf5a20986c0c4538e8f15a1b41a1761516299e377ec1" -dependencies = [ - "bytemuck", - "byteorder", - "cfg-if", - "crunchy", - "lazy_static", - "num-bigint 0.4.6", - "rand 0.8.6", - "rustc-hex", -] - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "symlink" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7973cce6668464ea31f176d85b13c7ab3bba2cb3b77a2ed26abd7801688010a" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.117" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[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.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "sysinfo" -version = "0.30.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a5b4ddaee55fb2bea2bf0e5000747e5f5c0de765e5a5ff87f4cd106439f4bb3" -dependencies = [ - "cfg-if", - "core-foundation-sys", - "libc", - "ntapi", - "once_cell", - "rayon", - "windows", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "tempfile" -version = "3.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" -dependencies = [ - "fastrand", - "getrandom 0.4.2", - "once_cell", - "rustix", - "windows-sys 0.52.0", -] - -[[package]] -name = "terminal_size" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "230a1b821ccbd75b185820a1f1ff7b14d21da1e442e22c0863ea5f08771a8874" -dependencies = [ - "rustix", - "windows-sys 0.61.2", -] - -[[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.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" -dependencies = [ - "thiserror-impl 2.0.18", -] - -[[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.117", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "thousands" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" - -[[package]] -name = "thread_local" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "time" -version = "0.3.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" -dependencies = [ - "deranged", - "itoa", - "num-conv", - "powerfmt", - "serde_core", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" - -[[package]] -name = "time-macros" -version = "0.2.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" -dependencies = [ - "num-conv", - "time-core", -] - -[[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.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" -dependencies = [ - "displaydoc", - "zerovec", -] - -[[package]] -name = "tinyvec" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" -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.52.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" -dependencies = [ - "bytes", - "libc", - "mio", - "pin-project-lite", - "signal-hook-registry", - "socket2 0.6.3", - "tokio-macros", - "windows-sys 0.61.2", -] - -[[package]] -name = "tokio-macros" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" -dependencies = [ - "rustls", - "tokio", -] - -[[package]] -name = "tokio-stream" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "toml_datetime" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" - -[[package]] -name = "toml_datetime" -version = "1.1.1+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" -dependencies = [ - "serde_core", -] - -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap 2.14.0", - "toml_datetime 0.6.11", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.25.11+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" -dependencies = [ - "indexmap 2.14.0", - "toml_datetime 1.1.1+spec-1.1.0", - "toml_parser", - "winnow 1.0.3", -] - -[[package]] -name = "toml_parser" -version = "1.1.2+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" -dependencies = [ - "winnow 1.0.3", -] - -[[package]] -name = "tonic" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" -dependencies = [ - "async-stream", - "async-trait", - "axum", - "base64", - "bytes", - "h2", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-timeout", - "hyper-util", - "percent-encoding", - "pin-project", - "prost", - "rustls-pemfile", - "socket2 0.5.10", - "tokio", - "tokio-rustls", - "tokio-stream", - "tower 0.4.13", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tonic-build" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9557ce109ea773b399c9b9e5dca39294110b74f1f342cb347a80d1fce8c26a11" -dependencies = [ - "prettyplease", - "proc-macro2", - "prost-build", - "prost-types", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "indexmap 1.9.3", - "pin-project", - "pin-project-lite", - "rand 0.8.6", - "slab", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" -dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper", - "tokio", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-http" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" -dependencies = [ - "bitflags", - "bytes", - "futures-util", - "http", - "http-body", - "pin-project-lite", - "tower 0.5.3", - "tower-layer", - "tower-service", - "url", -] - -[[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.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" -dependencies = [ - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-appender" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "050686193eb999b4bb3bc2acfa891a13da00f79734704c4b8b4ef1a10b368a3c" -dependencies = [ - "crossbeam-channel", - "symlink", - "thiserror 2.0.18", - "time", - "tracing-subscriber", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "tracing-core" -version = "0.1.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-forest" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee40835db14ddd1e3ba414292272eddde9dad04d3d4b65509656414d1c42592f" -dependencies = [ - "ansi_term", - "smallvec", - "thiserror 1.0.69", - "tracing", - "tracing-subscriber", -] - -[[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-subscriber" -version = "0.3.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex-automata", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "tracing-texray" -version = "0.2.0" -source = "git+https://github.com/argumentcomputer/tracing-texray?rev=465bbca0bea4721e58419c11cabd8cce21757822#465bbca0bea4721e58419c11cabd8cce21757822" -dependencies = [ - "loom", - "parking_lot", - "terminal_size", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "transpose" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad61aed86bc3faea4300c7aee358b4c6d0c8d6ccc36524c96e4c92ccf26e77e" -dependencies = [ - "num-integer", - "strength_reduce", -] - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "twox-hash" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" - -[[package]] -name = "typeid_prefix" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9da1387307fdee46aa441e4f08a1b491e659fcac1aca9cd71f2c624a0de5d1b" - -[[package]] -name = "typeid_suffix" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77b55e96f110c6db5d1a2f24072552537f0091dc90cebeaa679540bac93e7405" -dependencies = [ - "uuid", -] - -[[package]] -name = "typenum" -version = "1.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" - -[[package]] -name = "unicode-ident" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - -[[package]] -name = "unicode-width" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "url" -version = "2.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[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 = "uuid" -version = "1.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" -dependencies = [ - "atomic", - "getrandom 0.4.2", - "js-sys", - "md-5", - "sha1_smol", - "wasm-bindgen", -] - -[[package]] -name = "valuable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" - -[[package]] -name = "vec_map" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" -dependencies = [ - "serde", -] - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "wasip2" -version = "1.0.3+wasi-0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" -dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", -] - -[[package]] -name = "wasm-bindgen" -version = "0.2.122" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.72" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.122" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.122" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" -dependencies = [ - "bumpalo", - "proc-macro2", - "quote", - "syn 2.0.117", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.122" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap 2.14.0", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasm-streams" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags", - "hashbrown 0.15.5", - "indexmap 2.14.0", - "semver", -] - -[[package]] -name = "web-sys" -version = "0.3.99" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436" -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-roots" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d" -dependencies = [ - "rustls-pki-types", -] - -[[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-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.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" -dependencies = [ - "windows-core 0.52.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.62.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link", - "windows-result", - "windows-strings", -] - -[[package]] -name = "windows-implement" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "windows-interface" -version = "0.59.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "windows-link" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" - -[[package]] -name = "windows-result" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-strings" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" -dependencies = [ - "windows-link", -] - -[[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-sys" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" -dependencies = [ - "windows-link", -] - -[[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.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - -[[package]] -name = "winnow" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" -dependencies = [ - "memchr", -] - -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - -[[package]] -name = "wit-bindgen" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" - -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap 2.14.0", - "prettyplease", - "syn 2.0.117", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn 2.0.117", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags", - "indexmap 2.14.0", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap 2.14.0", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - -[[package]] -name = "writeable" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "yoke" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" -dependencies = [ - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", - "synstructure", -] - -[[package]] -name = "zerocopy" -version = "0.8.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "zerofrom" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", - "synstructure", -] - -[[package]] -name = "zeroize" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" - -[[package]] -name = "zerotrie" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", -] - -[[package]] -name = "zerovec" -version = "0.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "zmij" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/sp1/Cargo.toml b/sp1/Cargo.toml deleted file mode 100644 index 91757491b..000000000 --- a/sp1/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[workspace] -members = ["host"] -# `guest/` is built via `sp1-build` for the RISC-V zkVM target and only -# compiles under `cargo-prove`; excluded so host workspace ops don't pick it up. -exclude = ["guest"] -resolver = "2" diff --git a/sp1/guest/Cargo.lock b/sp1/guest/Cargo.lock deleted file mode 100644 index a21ce1a81..000000000 --- a/sp1/guest/Cargo.lock +++ /dev/null @@ -1,1289 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "addchain" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e33f6a175ec6a9e0aca777567f9ff7c3deefc255660df887e7fa3585e9801d8" -dependencies = [ - "num-bigint 0.3.3", - "num-integer", - "num-traits", -] - -[[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 = "autocfg" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "bignat" -version = "0.1.0" -source = "git+https://github.com/argumentcomputer/lean-ffi.git?rev=93c7e52952ae94546be08313f4ff3922984c84d5#93c7e52952ae94546be08313f4ff3922984c84d5" -dependencies = [ - "num-bigint 0.4.6", -] - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bitflags" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" - -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - -[[package]] -name = "blake3" -version = "1.8.5" -source = "git+https://github.com/argumentcomputer/BLAKE3?branch=sp1#d36366f7badbff9be8e2522868dddd14561638f3" -dependencies = [ - "arrayref", - "arrayvec", - "cc", - "cfg-if", - "constant_time_eq", - "cpufeatures 0.3.0", -] - -[[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 = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "cc" -version = "1.2.62" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" -dependencies = [ - "find-msvc-tools", - "shlex", -] - -[[package]] -name = "cfg-if" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - -[[package]] -name = "const-default" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b396d1f76d455557e1218ec8066ae14bba60b4b36ecd55577ba979f5db7ecaa" - -[[package]] -name = "constant_time_eq" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" - -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - -[[package]] -name = "cpufeatures" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" -dependencies = [ - "libc", -] - -[[package]] -name = "critical-section" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" - -[[package]] -name = "crossbeam-deque" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" -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-utils" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - -[[package]] -name = "crunchy" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" - -[[package]] -name = "crypto-common" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "dashmap" -version = "6.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c" -dependencies = [ - "cfg-if", - "crossbeam-utils", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", - "rayon", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "either" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" - -[[package]] -name = "elf" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" - -[[package]] -name = "embedded-alloc" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f2de9133f68db0d4627ad69db767726c99ff8585272716708227008d3f1bddd" -dependencies = [ - "const-default", - "critical-section", - "linked_list_allocator", - "rlsf", -] - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "ff" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" -dependencies = [ - "bitvec", - "byteorder", - "ff_derive", - "rand_core", - "subtle", -] - -[[package]] -name = "ff_derive" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f10d12652036b0e99197587c6ba87a8fc3031986499973c030d8b44fcc151b60" -dependencies = [ - "addchain", - "num-bigint 0.3.3", - "num-integer", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "find-msvc-tools" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" - -[[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.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" - -[[package]] -name = "futures-executor" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" - -[[package]] -name = "futures-macro" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "futures-sink" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" - -[[package]] -name = "futures-task" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" - -[[package]] -name = "futures-util" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "slab", -] - -[[package]] -name = "gcd" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "getrandom" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" -dependencies = [ - "cfg-if", - "libc", - "r-efi", - "wasip2", -] - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" - -[[package]] -name = "hashbrown" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "indexmap" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" -dependencies = [ - "equivalent", - "hashbrown 0.17.1", -] - -[[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.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - -[[package]] -name = "ix-common" -version = "0.1.0" -dependencies = [ - "bignat", - "blake3", - "indexmap", - "rustc-hash", -] - -[[package]] -name = "ix-kernel" -version = "0.1.0" -dependencies = [ - "bignat", - "blake3", - "dashmap", - "indexmap", - "itertools 0.14.0", - "ix-common", - "ixon", - "log", - "num-bigint 0.4.6", - "rayon", - "rustc-hash", -] - -[[package]] -name = "ixon" -version = "0.1.0" -dependencies = [ - "bignat", - "blake3", - "dashmap", - "indexmap", - "ix-common", - "memmap2", - "nom", - "num-bigint 0.4.6", - "rayon", - "rustc-hash", - "sha2", - "tiny-keccak", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "libc" -version = "0.2.186" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" - -[[package]] -name = "libm" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" - -[[package]] -name = "linked_list_allocator" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b23ac50abb8261cb38c6e2a7192d3302e0836dac1628f6a93b82b4fad185897" - -[[package]] -name = "lock_api" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" -dependencies = [ - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5" - -[[package]] -name = "memchr" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" - -[[package]] -name = "memmap2" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" -dependencies = [ - "libc", -] - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[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 = "num-bigint" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" -dependencies = [ - "autocfg", - "num-integer", - "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-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - -[[package]] -name = "once_cell" -version = "1.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" - -[[package]] -name = "p3-bn254-fr" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2077757c7cb514202ccb5368f521f23f5709c720599e6545c683c66e0a52d2d8" -dependencies = [ - "ff", - "num-bigint 0.4.6", - "p3-field", - "p3-poseidon2", - "p3-symmetric", - "rand", - "serde", -] - -[[package]] -name = "p3-challenger" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a908924d43e4cfb93fb41c8346cac211b70314385a9037e9241f5b7f3eaf77" -dependencies = [ - "p3-field", - "p3-maybe-rayon", - "p3-symmetric", - "p3-util", - "serde", - "tracing", -] - -[[package]] -name = "p3-dft" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be6408b10a2c27eb13a7d5580c546c2179a8dc7dbc10a990657311891f9b41c0" -dependencies = [ - "p3-field", - "p3-matrix", - "p3-maybe-rayon", - "p3-util", - "tracing", -] - -[[package]] -name = "p3-field" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dc75969ca3ac847f43e632ab979d59ff7a68f9eac8dbf8edcbba47fc2e1d3aa" -dependencies = [ - "itertools 0.12.1", - "num-bigint 0.4.6", - "num-traits", - "p3-util", - "rand", - "serde", -] - -[[package]] -name = "p3-koala-bear" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a9683cd0ef68100df7c62490533047bcf19c04c4a0fa1efc9d7c1e03e31f6b3" -dependencies = [ - "cfg-if", - "num-bigint 0.4.6", - "p3-field", - "p3-mds", - "p3-poseidon2", - "p3-symmetric", - "rand", - "rustc_version", - "serde", -] - -[[package]] -name = "p3-matrix" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75c3f150ceb90e09539413bf481e618d05ee19210b4e467d2902eb82d2e15281" -dependencies = [ - "itertools 0.12.1", - "p3-field", - "p3-maybe-rayon", - "p3-util", - "rand", - "serde", - "tracing", -] - -[[package]] -name = "p3-maybe-rayon" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0641952b42da45e1dfa2d4a2a3163e330f944ad9740942f35026c0a71a605f1" - -[[package]] -name = "p3-mds" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa4a5f250e174dcfca5cbeac6ad75713924e7e7320e0a335e3c50b8b1f4fe8ec" -dependencies = [ - "itertools 0.12.1", - "p3-dft", - "p3-field", - "p3-matrix", - "p3-symmetric", - "p3-util", - "rand", -] - -[[package]] -name = "p3-poseidon2" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "522986377b2164c5f94f2dae88e0e0a3d169cc6239202ef4aeb4322d60feffd0" -dependencies = [ - "gcd", - "p3-field", - "p3-mds", - "p3-symmetric", - "rand", - "serde", -] - -[[package]] -name = "p3-symmetric" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9047ce85c086a9b3f118e10078f10636f7bfeed5da871a04da0b61400af8793a" -dependencies = [ - "itertools 0.12.1", - "p3-field", - "serde", -] - -[[package]] -name = "p3-util" -version = "0.4.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff962f8eaa5f36e0447cee7c241f6b4b475fadf3ee61f154327a26bb4e009ba" -dependencies = [ - "serde", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-link", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" - -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "proc-macro2" -version = "1.0.106" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[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", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.17", -] - -[[package]] -name = "rayon" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "redox_syscall" -version = "0.5.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" -dependencies = [ - "bitflags", -] - -[[package]] -name = "rlsf" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1646a59a9734b8b7a0ac51689388a60fe1625d4b956348e9de07591a1478457a" -dependencies = [ - "cfg-if", - "const-default", - "libc", - "rustversion", - "svgbobdoc", -] - -[[package]] -name = "rustc-hash" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", -] - -[[package]] -name = "rustversion" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "semver" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" - -[[package]] -name = "serde" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" -dependencies = [ - "serde_core", - "serde_derive", -] - -[[package]] -name = "serde_core" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures 0.2.17", - "digest", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "slab" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" - -[[package]] -name = "slop-algebra" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "itertools 0.14.0", - "p3-field", - "serde", -] - -[[package]] -name = "slop-bn254" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "ff", - "p3-bn254-fr", - "serde", - "slop-algebra", - "slop-challenger", - "slop-poseidon2", - "slop-symmetric", -] - -[[package]] -name = "slop-challenger" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "futures", - "p3-challenger", - "serde", - "slop-algebra", - "slop-symmetric", -] - -[[package]] -name = "slop-koala-bear" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "lazy_static", - "p3-koala-bear", - "serde", - "slop-algebra", - "slop-challenger", - "slop-poseidon2", - "slop-symmetric", -] - -[[package]] -name = "slop-poseidon2" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "p3-poseidon2", -] - -[[package]] -name = "slop-primitives" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "slop-algebra", -] - -[[package]] -name = "slop-symmetric" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "p3-symmetric", -] - -[[package]] -name = "smallvec" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" - -[[package]] -name = "sp1-guest" -version = "0.1.0" -dependencies = [ - "ix-common", - "ix-kernel", - "ixon", - "sp1-zkvm", -] - -[[package]] -name = "sp1-lib" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "bincode", - "serde", - "sp1-primitives", -] - -[[package]] -name = "sp1-primitives" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "bincode", - "blake3", - "elf", - "hex", - "itertools 0.14.0", - "lazy_static", - "num-bigint 0.4.6", - "serde", - "sha2", - "slop-algebra", - "slop-bn254", - "slop-challenger", - "slop-koala-bear", - "slop-poseidon2", - "slop-primitives", - "slop-symmetric", -] - -[[package]] -name = "sp1-zkvm" -version = "6.2.2" -source = "git+https://github.com/argumentcomputer/sp1?branch=blake3-precompile#ab7cda20b0e2f892bb5c5cb0ccf5c1ce5ba12c6b" -dependencies = [ - "cfg-if", - "critical-section", - "embedded-alloc", - "getrandom 0.2.17", - "getrandom 0.3.4", - "lazy_static", - "libm", - "rand", - "sha2", - "sp1-lib", - "sp1-primitives", -] - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "svgbobdoc" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2c04b93fc15d79b39c63218f15e3fdffaa4c227830686e3b7c5f41244eb3e50" -dependencies = [ - "base64", - "proc-macro2", - "quote", - "syn 1.0.109", - "unicode-width", -] - -[[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.117" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - -[[package]] -name = "tracing" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" -dependencies = [ - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "tracing-core" -version = "0.1.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" -dependencies = [ - "once_cell", -] - -[[package]] -name = "typenum" -version = "1.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" - -[[package]] -name = "unicode-ident" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "wasip2" -version = "1.0.3+wasi-0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" -dependencies = [ - "wit-bindgen", -] - -[[package]] -name = "windows-link" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" - -[[package]] -name = "wit-bindgen" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "zerocopy" -version = "0.8.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] diff --git a/sp1/guest/Cargo.toml b/sp1/guest/Cargo.toml deleted file mode 100644 index 08ac08645..000000000 --- a/sp1/guest/Cargo.toml +++ /dev/null @@ -1,27 +0,0 @@ -# Standalone workspace root. This guest crate is compiled out-of-tree for -# the zkVM target and never joins the host Cargo workspace; its own (empty) -# `[workspace]` pins cargo's upward workspace search to this directory. -# Without it, a NESTED checkout — e.g. the benchmark base-run, which checks -# the base repo out under `base/` inside the PR checkout — lets cargo walk -# past the relative `exclude` paths in the outer manifests and resolve this -# crate to the outer workspace, failing the build script with "current -# package believes it's in a workspace when it's not". -[workspace] - -[package] -name = "sp1-guest" -version = "0.1.0" -edition = "2024" - -[dependencies] -ixon = { path = "../../crates/ixon" } -ix-kernel = { path = "../../crates/kernel" } -ix-common = { path = "../../crates/common" } -sp1-zkvm = { git = "https://github.com/argumentcomputer/sp1", branch = "blake3-precompile" } - -# Force blake3 to the patched copy that routes `compress_in_place` / -# `compress_xof` through SP1's BLAKE3_COMPRESS precompile on the zkVM target. -# The guest's transitive blake3 (via ix-kernel) would otherwise resolve to -# the registry version because `sp1-build` doesn't extend the host workspace. -[patch.crates-io] -blake3 = { git = "https://github.com/argumentcomputer/BLAKE3", branch = "sp1" } diff --git a/sp1/guest/src/main.rs b/sp1/guest/src/main.rs deleted file mode 100644 index b56b6cdc1..000000000 --- a/sp1/guest/src/main.rs +++ /dev/null @@ -1,223 +0,0 @@ -//! SP1 guest binary: prove that every kernel-checkable constant in a -//! serialized Ixon environment typechecks under the Ix kernel. -//! -//! Input (three reads, in order): -//! 1. `u8`: kernel mode flag (0 = Anon default, 1 = Meta) via `read::`. -//! 2. `Vec`: Ixon-serialized environment via `read_vec`. -//! 3. `Vec`: optional check-list — a packed set of primary addresses -//! (`Address::pack`) to check in Anon mode. Empty ⇒ whole env; non-empty -//! ⇒ check exactly those work items (the `--only-const` path, where the -//! host ships a closure sub-env plus the one targeted primary). Mirrors -//! the Zisk leaf guest's reuse-mode selection. -//! -//! Output (via `sp1_zkvm::io::commit_slice`, fixed 104-byte layout): -//! - `u32` failures (offset 0; 0 = all pass) -//! - `[u8; 32]` subject_root — canonical merkle root over the consts -//! this proof certified (Anon mode; zero in Meta) -//! - `[u8; 32]` assumptions_root — merkle root over their direct refs not -//! certified here (the conditional claim's external assumptions) -//! - `u32` checked_count -//! - `[u8; 32]` env_hash -//! -//! `(subject_root, assumptions_root)` form `Claim::CheckEnv { root, assumptions }` -//! — the same content-addressed conditional claim the Zisk leaf guest emits. -//! -//! Anon mode enumerates the work set in-guest via -//! [`ix_kernel::anon_work::build_anon_work`] — the same enumeration -//! that drives `rs_kernel_check_anon` in `crates/ffi/src/kernel.rs`. -//! The proof commits to "every kernel-checkable constant in this env -//! typechecks," matching Aiur's `kernel_check_test` semantics. -//! -//! Meta mode walks `env.named` for the kid set (preserves Lean names -//! + runs the dup-level-param-name check); slightly more constrained -//! and slightly more expensive in cycles. -//! -//! Both modes typecheck the same underlying structural set; they -//! differ only in which metadata fields the kernel carries through -//! `KEnv`. - -#![no_main] -sp1_zkvm::entrypoint!(main); - -use ix_common::address::Address; -use ix_kernel::anon_work::{AnonWorkItem, build_anon_work}; -use ix_kernel::id::KId; -use ix_kernel::ingress::ixon_ingress_owned; -use ix_kernel::mode::Meta; -use ix_kernel::tc::TypeChecker; -use ixon::env::Env as IxonEnv; -use ixon::merkle::{merkle_root_canonical, zero_address}; -use ixon::metadata::ConstantMetaInfo; - -// SP1's cycle tracker (gated by the SDK `profiling` feature on the host -// side — see `sp1/host/Cargo.toml`) consumes `println!`s of the form -// `cycle-tracker-report-{start,end}: ` from stdout and accumulates -// total cycles per label across all invocations of that label. Each -// `println!` is a single `syscall_write`, so per-iteration brackets in -// hot loops add measurable overhead — keep these at coarse phase -// boundaries. To get per-constant cycle attribution (e.g. for a one-off -// "which `kid_NNN` dominates?" investigation), temporarily wrap the -// `tc.check_const(kid)` call below in the same pair of `println!`s; pair -// the output with a native `check_const` run over the same anon-work order -// to map indices to constant names. -macro_rules! tic { - ($name:expr) => { - println!("cycle-tracker-report-start: {}", $name) - }; -} -macro_rules! toc { - ($name:expr) => { - println!("cycle-tracker-report-end: {}", $name) - }; -} - -pub fn main() { - let meta_mode: u8 = sp1_zkvm::io::read(); - let env_bytes: Vec = sp1_zkvm::io::read_vec(); - // Optional check-list: a packed set of primary addresses to check (Anon - // mode). Empty ⇒ whole env. Ignored in Meta mode (the host forbids - // `--only-const` there). - let check_list: Vec = sp1_zkvm::io::read_vec(); - // `Address::hash` is blake3 via the precompile shim (same path the kernel - // uses) — binds the proof to the exact env payload. - let env_hash: [u8; 32] = *Address::hash(&env_bytes).as_bytes(); - - // Conditional-claim outputs: populated in Anon mode (the claim/resolution - // path, mirroring the Zisk leaf guest); left zero in Meta mode. - let mut subject_root = zero_address(); - let mut assumptions_root = zero_address(); - let mut checked_count: u32 = 0; - - let failures = if meta_mode == 1 { - // ---- Meta mode: full env load + eager ingress ---- - // - // `ixon_ingress_inner` walks `env.named` to enumerate work items, - // so we need the full env (with the metadata sections intact). - tic!("ixon_decode_env"); - let env = - IxonEnv::get(&mut &env_bytes[..]).expect("invalid Ixon environment"); - toc!("ixon_decode_env"); - - let mut kids: Vec> = Vec::with_capacity(env.named.len()); - kids.extend( - env - .named - .iter() - .filter(|e| { - !matches!(e.value().meta().info, ConstantMetaInfo::Muts { .. }) - }) - .map(|e| KId::::new(e.value().addr.clone(), e.key().clone())), - ); - - tic!("ingress"); - let (mut kenv, _intern) = - ixon_ingress_owned::(env).expect("ingress failed"); - toc!("ingress"); - - let mut failures: u32 = 0; - tic!("check_const_loop"); - let mut tc = TypeChecker::new(&mut kenv); - for kid in &kids { - if tc.check_const(kid).is_err() { - failures = failures.saturating_add(1); - } - } - toc!("check_const_loop"); - failures - } else { - // ---- Anon mode: get_anon + lazy on-demand ingress ---- - // - // `Env::get_anon` parses-and-discards the metadata sections - // (named/names/comms) so the steady-state env carries only - // `consts`/`blobs`/`anon_hints`. `build_anon_work` enumerates the - // canonical kernel-checkable work set from `env.consts` alone - // (no metadata) — same logic the FFI's `rs_kernel_check_anon` - // uses. Each `tc.check_const(primary)` either typechecks one - // standalone or drives the kernel's block coordination to cover - // every member + ctor of a Muts block. - tic!("ixon_decode_env"); - let env = - IxonEnv::get_anon(&mut &env_bytes[..]).expect("invalid Ixon environment"); - toc!("ixon_decode_env"); - - tic!("build_anon_work"); - let work = build_anon_work(&env).expect("build_anon_work"); - toc!("build_anon_work"); - - // Empty check-list ⇒ whole env. Non-empty ⇒ check exactly the work items - // whose primary is in the set (the `--only-const` path). `Address` orders - // by raw bytes, so sort + binary_search is correct — mirrors the Zisk leaf - // guest's reuse-mode selection. - let items_to_check: Vec<&AnonWorkItem> = if check_list.is_empty() { - work.iter().collect() - } else { - let mut want: Vec

= Address::unpack(&check_list).collect(); - want.sort_unstable(); - work - .iter() - .filter(|it| want.binary_search(it.primary()).is_ok()) - .collect() - }; - - let mut failures: u32 = 0; - let mut checked_covered: Vec
= Vec::new(); - tic!("check_const_loop"); - let mut checker = ix_kernel::ixon_checker::IxonChecker::new(&env); - for item in &items_to_check { - if checker.check_const(item.primary()).is_err() { - failures = failures.saturating_add(1); - } - // Certify in `consts`-key space (block addr + projections) — the same - // address space `Constant.refs` use, so the assumption set and its - // cross-proof resolution line up. - checked_covered.extend(item.proven_targets()); - } - toc!("check_const_loop"); - - // ---- Conditional claim: CheckEnv { subject, assumptions } ---- - // - // subject = canonical merkle root over the consts certified here. - // assumptions = canonical merkle root over their DIRECT refs not - // certified here — this whole-env proof's external dependencies - // (ultimately the declared axioms). Mirrors the Zisk leaf guest so - // both backends emit the same content-addressed claim. - // - // A `Constant.refs` entry points at either another CONSTANT (a genuine - // typing obligation) or a literal DATA blob (the bytes behind an - // `Expr::Nat`/`Expr::Str` — e.g. the numbers 0, 1). Literals are - // well-typed by construction with content-pinned bytes, so they are NOT - // assumptions; skip refs that resolve to a blob (must match Zisk). - tic!("claim_roots"); - checked_count = checked_covered.len() as u32; - subject_root = - merkle_root_canonical(&checked_covered).unwrap_or_else(zero_address); - let mut sorted = checked_covered.clone(); - sorted.sort_unstable(); - sorted.dedup(); - let mut assumptions: Vec
= Vec::new(); - for t in &checked_covered { - if let Some(c) = env.get_const(t) { - for r in &c.refs { - if sorted.binary_search(r).is_err() && env.get_blob(r).is_none() { - assumptions.push(r.clone()); - } - } - } - } - assumptions_root = - merkle_root_canonical(&assumptions).unwrap_or_else(zero_address); - toc!("claim_roots"); - failures - }; - - // Fixed 104-byte public output: failures(4) + subject_root(32) + - // assumptions_root(32) + checked_count(4) + env_hash(32). `failures` stays - // at offset 0 so existing readers keep working. - let mut out = Vec::with_capacity(104); - out.extend_from_slice(&failures.to_le_bytes()); - out.extend_from_slice(subject_root.as_bytes()); - out.extend_from_slice(assumptions_root.as_bytes()); - out.extend_from_slice(&checked_count.to_le_bytes()); - out.extend_from_slice(&env_hash); - sp1_zkvm::io::commit_slice(&out); -} diff --git a/sp1/host/Cargo.toml b/sp1/host/Cargo.toml deleted file mode 100644 index 50bae7e35..000000000 --- a/sp1/host/Cargo.toml +++ /dev/null @@ -1,54 +0,0 @@ -[package] -name = "sp1-host" -version = "0.1.0" -edition = "2024" -default-run = "sp1-host" - -[[bin]] -name = "sp1-host" -path = "src/main.rs" - -[dependencies] -ixon = { path = "../../crates/ixon" } -# Benchmark results-row contract (status enum, row writer, exit codes) shared -# with zisk-host and `ix bench`. -ix-bench = { path = "../../crates/bench" } -ix-common = { path = "../../crates/common" } -# Used only to count work items for human-readable output via -# `build_anon_work` — same enumeration the guest runs in-circuit. -ix-kernel = { path = "../../crates/kernel" } -# `profiling` turns on the SP1 executor's cycle-tracker: it reads -# `cycle-tracker-report-{start,end}: