From 1d47c165550ffe3757fd935b49256bf0370f3ad1 Mon Sep 17 00:00:00 2001 From: keinberger Date: Wed, 1 Jul 2026 21:00:39 +0200 Subject: [PATCH 01/12] chore(skills): sync skills to miden v0.15 --- .claude/skills/local-node-validation/SKILL.md | 97 ++++++--- .claude/skills/miden-concepts/SKILL.md | 18 +- .claude/skills/rust-sdk-patterns/SKILL.md | 202 +++++++++++++----- .claude/skills/rust-sdk-pitfalls/SKILL.md | 149 ++++++++----- .claude/skills/rust-sdk-source-guide/SKILL.md | 86 ++++---- .../skills/rust-sdk-testing-patterns/SKILL.md | 201 +++++++++++------ 6 files changed, 511 insertions(+), 242 deletions(-) diff --git a/.claude/skills/local-node-validation/SKILL.md b/.claude/skills/local-node-validation/SKILL.md index fda6cfa..63bd7a7 100644 --- a/.claude/skills/local-node-validation/SKILL.md +++ b/.claude/skills/local-node-validation/SKILL.md @@ -11,46 +11,72 @@ Validates that contracts working in MockChain also work against a real Miden nod MockChain simplifies execution in ways that hide real-world failures: -1. **No automatic block production** -- MockChain requires explicit `prove_next_block()`. A live node produces blocks on its own schedule. -2. **No network transport** -- MockChain does not simulate the network transaction builder that handles network notes. +1. **No automatic block production** -- MockChain requires explicit `prove_next_block()`. A live node produces blocks on the sequencer's configured cadence. +2. **No network transport** -- MockChain does not simulate the network transaction builder (ntx-builder) that handles network notes. 3. **No RPC latency or timeouts** -- MockChain executes locally and instantly. Live nodes have gRPC round-trips with configurable timeouts. -4. **No version/genesis validation** -- MockChain skips the `Accept` header version check that live nodes enforce. +4. **No version negotiation** -- MockChain skips the protocol-version check that a live node negotiates at connect (a mismatched node is rejected). 5. **Account update block numbers not tracked** -- MockChain returns chain tip instead of actual update block number. 6. **No mempool or batching** -- MockChain does not simulate transaction queuing, batch formation, or block inclusion delays. -7. **Genesis hash is cached in the client store** -- after the first sync, the client persists the network's genesis commitment in its SQLite store (default path `store.sqlite3` per `integration/src/helpers.rs`; `local-store.sqlite3` for the local-validation variant introduced in Step 2) and ships it on every Accept header. Switching networks (local node to testnet, or vice versa) without wiping the active store fails with `accept header validation failed`. -8. **`NoteTag(0)` notes are not delivered by default subscriptions** -- live nodes filter `SyncNotes` responses by the tag list each client has subscribed to. `NoteTag::new(0)` has all-zero routing bits, so the default account-derived subscription that `add_account` registers (`NoteTagRecord::with_account_source(NoteTag::with_account_target(id), id)`) does not match it. Such notes still exist on-chain and remain queryable, but a client only receives them during sync if it explicitly tracks tag 0 via `Client::add_note_tag(...)`. MockChain bypasses sync filtering and surfaces these notes anyway, hiding the gap until live validation. Prefer `NoteTag::with_account_target(account_id)`, a use-case tag constructor, or an explicit `add_note_tag` subscription when notes must reach the recipient via sync. +7. **`NoteTag(0)` notes are not delivered by default subscriptions** -- live nodes filter `SyncNotes` responses by the tag list each client has subscribed to. `NoteTag::new(0)` has all-zero routing bits, so the default account-derived subscription that `add_account` registers (`NoteTagRecord::with_account_source(NoteTag::with_account_target(id), id)`) does not match it. Such notes still exist on-chain and remain queryable, but a client only receives them during sync if it explicitly tracks tag 0 via `Client::add_note_tag(...)`. MockChain bypasses sync filtering and surfaces these notes anyway, hiding the gap until live validation. Prefer `NoteTag::with_account_target(account_id)`, a use-case tag constructor, or an explicit `add_note_tag` subscription when notes must reach the recipient via sync. ## Prerequisites - [ ] MockChain integration tests pass: `cargo test -p integration --release` -- [ ] `miden-node` installed and version-matched with the client. Check the `miden-client` version in `integration/Cargo.toml`; the node binary must be on the same minor release. `cargo install miden-node --locked` may pin an older published crate; if so, install from source: `cargo install miden-node --locked --git https://github.com/0xMiden/miden-node --tag v`. `midenup` manages matched toolchains. -- [ ] Working integration binary exists in `integration/src/bin/` +- [ ] A Miden node available locally. The node is **not** a single binary -- it is composed of standalone executables (validator, sequencer, ntx-builder, transaction prover). The client's own test infra installs the full set: `miden-validator`, `miden-node`, `miden-ntx-builder`, `miden-remote-prover` (see `scripts/start-test-node.sh` in the `miden-client` repo). Install them from the node source pinned in your client's `Cargo.lock`, or follow the 0xMiden/node quickstart for the authoritative install flow. Match the node to the `miden-client` version in `integration/Cargo.toml` (`miden-client = "0.15"`); `midenup` manages matched toolchains. +- [ ] Working integration binary exists in `integration/src/bin/` (the testnet binary `increment_count.rs` is the starting template for the localhost variant) + +> The local-node launch CLI lives in the 0xMiden/node repo, not in `miden-client`. The commands below are the topology the client's `scripts/start-test-node.sh` drives; confirm exact flags against your installed node's `--help` for the version you run. ## Step 1: Clean State and Start Local Node -**Every node session must start from clean state.** Stale store files and keystore directories cause conflicts, deserialization errors, and misleading test results. Always wipe before starting. +**Every node session must start from clean state.** Stale store files and keystore directories cause conflicts, deserialization errors, and misleading test results. Always wipe before starting. (Node and client artifacts also do not round-trip across protocol versions, so a fresh store is required after any version change.) + +The simplest path is the client's bundled helper script, which installs the node binaries (pinned to your `Cargo.lock`), generates genesis, bootstraps each component, and starts the split topology for you: + +```bash +# From a checkout of the miden-client repo pinned to your client version: +./scripts/start-test-node.sh # foreground, streams logs; Ctrl+C stops +# or +./scripts/start-test-node.sh --background # returns once RPC is ready (used by CI) +``` + +This brings up the four-component topology and exposes the RPC on `127.0.0.1:57291` (the client default, `MIDEN_NODE_PORT`). + +If you run the node binaries directly instead of via the script, the shape is below. Treat it as a reference skeleton, not a copy-paste recipe: it omits details the script handles for you (it does not show generating the genesis config the validator bootstraps from, and it leaves out the shared network-tx auth header that the sequencer and ntx-builder must agree on or the sequencer rejects the ntx-builder's transactions). Verify every subcommand and flag against `--help` for your node version, or just use the script. ```bash -# 1. Wipe all state from previous runs -rm -rf local-node-data/ local-keystore/ local-store.sqlite3 - -# 2. Bootstrap fresh node -mkdir -p local-node-data -miden-node bundled bootstrap \ - --data-directory local-node-data \ - --accounts-directory . - -# 3. Start node (keep running in separate terminal) -miden-node bundled start \ - --data-directory local-node-data \ - --rpc.url http://0.0.0.0:57291 +# 1. Bootstrap each component from a generated genesis block +# (the genesis config/block must be produced first; the helper script +# builds it from the client repo before this step) +miden-validator bootstrap --data-directory /validator \ + --genesis-block-directory /genesis --accounts-directory /accounts \ + --genesis-config-file /genesis-config/genesis.toml +miden-node bootstrap --data-directory /node --file /genesis/genesis.dat +miden-ntx-builder bootstrap --data-directory /ntx-builder --file /genesis/genesis.dat + +# 2. Start the components (validator, then sequencer with the RPC, prover, ntx-builder). +# The sequencer and ntx-builder additionally need a matching network-tx auth header +# (--rpc.network-tx-auth-header-value / --rpc.auth-header-value in the script); see the script. +miden-validator start --listen 127.0.0.1:50101 --data-directory /validator +miden-node sequencer --rpc.listen 127.0.0.1:57291 --data-directory /node \ + --validator.url http://127.0.0.1:50101 --ntx-builder.url http://127.0.0.1:50301 \ + --block.interval 3s --batch.interval 1s +miden-remote-prover --kind=transaction --port=50051 +miden-ntx-builder start --listen 127.0.0.1:50301 --rpc.url http://127.0.0.1:57291 \ + --tx-prover.url http://127.0.0.1:50051 --data-directory /ntx-builder ``` **This clean-start sequence is mandatory every time.** Do not attempt to reuse state from a previous session. ## Step 2: Adapt helpers.rs for Localhost -In `integration/src/helpers.rs`, add a `setup_local_client()` alongside the existing `setup_client()`: +In `integration/src/helpers.rs`, add a `setup_local_client()` alongside the existing `setup_client()`. + +`.sqlite_store(..)` is **not** an inherent `ClientBuilder` method -- it comes from an extension trait in the `miden-client-sqlite-store` crate. It must be in scope or the call fails to compile (method not found). `helpers.rs` already imports it at the top of the file: + +```rust +use miden_client_sqlite_store::ClientBuilderSqliteExt; // required for .sqlite_store(..) +``` ```rust pub async fn setup_local_client() -> Result { @@ -87,7 +113,7 @@ The binary must: 1. Call `setup_local_client()` instead of `setup_client()` 2. Sync state: `client.sync_state().await?` 3. Build contracts (same as existing binary) -4. Create accounts, create notes, submit transactions +4. Create accounts, create notes, submit transactions via `client.submit_new_transaction(...)` 5. Sync again after each transaction submission 6. Wait for transaction inclusion (poll `sync_state` until account state updates) 7. Verify final state matches MockChain test expectations @@ -120,11 +146,14 @@ cargo run --bin validate_local --release ## Step 5: Inspect Node Logs -Run the node with verbose logging: +Run the node with verbose logging. The helper script honors `RUST_LOG` and writes a per-component log file per service; if you launch the binaries directly, set it on the process you want to inspect (the sequencer carries the RPC): + ```bash -RUST_LOG=info miden-node bundled start \ - --data-directory local-node-data \ - --rpc.url http://0.0.0.0:57291 +RUST_LOG=info ./scripts/start-test-node.sh +# or, running the sequencer directly: +RUST_LOG=info miden-node sequencer --rpc.listen 127.0.0.1:57291 --data-directory /node \ + --validator.url http://127.0.0.1:50101 --ntx-builder.url http://127.0.0.1:50301 \ + --block.interval 3s --batch.interval 1s ``` Look for: @@ -136,11 +165,15 @@ Look for: | Symptom | Cause | Fix | |---------|-------|-----| -| `Unavailable` RPC error | Node not running or wrong port | Start node, verify port 57291 | -| `accept header validation failed` after switching networks | Client store cached the genesis commitment from a different network | Delete the active client store (`store.sqlite3` by default; `local-store.sqlite3` for local validation) and re-sync | -| Version mismatch error | Node binary lags client crate (`cargo install miden-node` may pin an older published crate) | Reinstall to match `miden-client` from `integration/Cargo.toml`: `cargo install miden-node --locked --git https://github.com/0xMiden/miden-node --tag v`, or use `midenup` | +| `Unavailable` RPC error | Node not running or wrong port | Start node, verify the sequencer's RPC is listening on 57291 | +| Version mismatch error | Node and client crate versions differ | Run a node built from the node source pinned in your client's `Cargo.lock` (match `miden-client = "0.15"` in `integration/Cargo.toml`); the protocol version is negotiated at connect and a mismatch is rejected | | Vite or proxy returns 404 on RPC calls from frontend | Proxy targets the wrong path prefix | gRPC paths are `/rpc.Api/` (e.g. `/rpc.Api/Status`, `/rpc.Api/SyncNotes`, `/rpc.Api/GetAccount`); forward the `/rpc.Api` prefix in the proxy config | | Transaction rejected | Invalid proof or state | Check contract code, reset node data, try again | | Account not found after `add_account()` | `add_account()` is local-only; it does not register the account on-chain | Submit a transaction involving the account to deploy it on-chain, then `sync_state()` | -| Store errors or deserialization failures | Stale state from a previous session, or cached genesis from a different network | Wipe everything: `rm -rf local-node-data/ local-keystore/ local-store.sqlite3` and re-bootstrap | -| Block not produced | Node produces blocks when transactions arrive | Submit a transaction; check `--block-producer.block-interval` setting | +| Store errors or deserialization failures | Stale state from a previous session, or artifacts from an earlier protocol version, which do not round-trip | Wipe the node data, keystore, and client store (`rm -rf local-node-data/ local-keystore/ local-store.sqlite3`), then re-bootstrap from a fresh genesis | +| `.sqlite_store(..)` does not compile | Extension trait not in scope | `use miden_client_sqlite_store::ClientBuilderSqliteExt;` | +| Block not produced | Node produces blocks on the sequencer's configured cadence | Submit a transaction; check the sequencer's `--block.interval` (and `--batch.interval`) settings, or consult `miden-node sequencer --help` | + +## Cross-References + +- `miden-client-cli`: for driving a running node from the shell (create accounts, mint, send, consume notes) instead of a Rust binary; pair it with this skill's Step 1 node bootstrap for localhost workflows. diff --git a/.claude/skills/miden-concepts/SKILL.md b/.claude/skills/miden-concepts/SKILL.md index 7ba0c54..547a354 100644 --- a/.claude/skills/miden-concepts/SKILL.md +++ b/.claude/skills/miden-concepts/SKILL.md @@ -40,7 +40,7 @@ Accounts are composed from **components** — reusable Rust modules annotated wi ### Notes Notes are **UTXO-like messages** for asynchronous inter-account communication. A note contains: - **Script** — Logic that executes when the note is consumed -- **Inputs** — Data passed to the script (Vec) +- **Storage** — Data accessible to the script during execution (`NoteStorage`, backed by `Vec`) - **Assets** — Fungible/non-fungible tokens attached to the note - **Metadata** — Sender, tag, note type (public/private) @@ -67,7 +67,8 @@ A transaction is a **single-account state transition** with 4 phases: ### Felt and Word - **Felt**: Field element in the Goldilocks prime field (p = 2^64 - 2^32 + 1). The fundamental data unit. - **Word**: Array of 4 Felts (32 bytes). Used for cryptographic hashes, storage keys, account IDs. -- **Current constructors**: `Felt::new`, `Felt::from_u8` / `from_u16` / `from_u32`, `Felt::from_canonical_checked`, `Word::new`, `Word::from([u32; 4])`, `Word::from([Felt; 4])`, `Word::try_from([u64; 4])` +- **Felt constructors** (Rust `miden_field::Felt` — the same type used host-side in clients/tests *and* guest-side inside `#[component]`/`#[note]` contract code, which re-exports it): `Felt::new(u64)` is **fallible** — it returns `Result` and rejects out-of-range values (delegates to `from_canonical_checked`), so callers must `?`/match it (guest code typically `Felt::new(0).unwrap()`). `Felt::new_unchecked(u64)` is the raw, non-reducing constructor (any `u64`, no validation). Always-succeed constructors (return a bare `Felt`): `Felt::from_u8` / `from_u16` / `from_u32`. Non-panicking but fallible: `Felt::from_canonical_checked(u64) -> Option` (returns `None` when out of range). +- **Word constructors**: `Word::new`, `Word::from([u32; 4])`, `Word::from([Felt; 4])`, `Word::try_from([u64; 4])` - **Current accessors**: `felt.as_canonical_u64()`, `word.as_elements()`, `word.into_elements()`, `word.as_bytes()`, `word.to_hex()` **WARNING**: Felt arithmetic is **modular**. Subtraction wraps around the prime. Always validate with `.as_canonical_u64()` before subtracting. See the rust-sdk-pitfalls skill for details. @@ -80,6 +81,19 @@ A transaction is a **single-account state transition** with 4 phases: | **P2IDE** | P2ID with expiration | Adds block-height timelock; sender can reclaim after expiry | | **SWAP** | Atomic asset exchange | Note offers asset A, requests asset B; consumer provides B | +## Standard Components (miden-standards) + +| Component | Purpose | +|-----------|---------| +| `BasicWallet` | Standard wallet: `receive_asset()`, `move_asset_to_note()` | +| `FungibleFaucet` | Mint/burn fungible tokens; built via `FungibleFaucet::builder()` | +| `NoAuth` | No authentication (for testing) | +| `AuthSingleSig` | Production signature authentication — unified auth component covering both Falcon-512 and ECDSA-K256 key types | + +**Auth**: `AuthSingleSig` is a single auth component that dispatches on the key type, so one component handles both Falcon-512 and ECDSA-K256 keys. The Falcon-512 scheme uses Poseidon2 as its hash function and is named `Falcon512Poseidon2`. + +**Fungible faucet**: `FungibleFaucet` is the fungible-faucet component, constructed with the `bon`-generated `FungibleFaucet::builder()` (required setters `.name(TokenName::new(..)?)`, `.symbol(TokenSymbol::new(..)?)`, `.decimals(n)`, `.max_supply(AssetAmount)`, then `.build()?`). + ## Development Model ``` diff --git a/.claude/skills/rust-sdk-patterns/SKILL.md b/.claude/skills/rust-sdk-patterns/SKILL.md index 8ce7ed4..bb5767b 100644 --- a/.claude/skills/rust-sdk-patterns/SKILL.md +++ b/.claude/skills/rust-sdk-patterns/SKILL.md @@ -1,42 +1,129 @@ --- name: rust-sdk-patterns -description: Complete guide to writing Miden smart contracts with the Rust SDK. Covers #[component], #[note], #[tx_script] macros, storage patterns, native functions, asset handling, cross-component calls, P2ID note creation, and asset receiving via component methods. Use when writing, editing, or reviewing Miden Rust contract code. +description: Complete guide to writing Miden smart contracts with the Rust SDK. Covers the three-part #[component_storage]/#[component] account-component pattern, #[note]/#[note_script] notes, #[tx_script] scripts, the #[account(...)] wrapper, storage patterns, native functions, asset handling, cross-component calls, P2ID note creation, and asset receiving via component methods. Use when writing, editing, or reviewing Miden Rust contract code. --- # Miden Rust SDK Patterns ## Three Contract Types -### Account Component (`#[component]`) +### Account Component (three-part pattern) Defines reusable logic and storage for accounts. Accounts are composed of one or more components. -See [counter-account/src/lib.rs](../../../contracts/counter-account/src/lib.rs) for a working example demonstrating `#[component]`, typed `StorageMap`, `get()`/`set()`, and felt arithmetic. +An account component is written as **three parts** — the storage struct is annotated `#[component_storage]`, and `#[component]` applies to the API trait and the impl block: -**Cargo.toml for accounts:** See [counter-account/Cargo.toml](../../../contracts/counter-account/Cargo.toml) for the required `crate-type`, `miden` dependency, `component` metadata, and `project-kind`. +1. `#[component_storage]` on the **storage struct** — declares typed `#[storage(...)]` fields and derives slot names. +2. `#[component]` on a **trait** — the component's exported API (this is the source of the generated WIT interface). +3. `#[component]` on the **`impl Trait for Storage`** block — the behavior, wired to the guest bindings. -### Note Script (`#[note]`) +```rust +#![no_std] +#![feature(alloc_error_handler)] +use miden::{component, component_storage, felt, Felt, StorageMap, Word}; + +#[component_storage] +struct CounterContractStorage { + #[storage(description = "counter contract storage map")] + count_map: StorageMap, +} + +#[component] +trait CounterContract { + fn get_count(&self) -> Felt; + fn increment_count(&mut self) -> Felt; +} + +#[component] +impl CounterContract for CounterContractStorage { + fn get_count(&self) -> Felt { + let key = Word::new([felt!(0), felt!(0), felt!(0), felt!(1)]); + self.count_map.get(key) + } + + fn increment_count(&mut self) -> Felt { + let key = Word::new([felt!(0), felt!(0), felt!(0), felt!(1)]); + let current_value: Felt = self.count_map.get(key); + let new_value = current_value + felt!(1); + self.count_map.set(key, new_value); + new_value + } +} +``` + +Only the trait's methods are exported to WIT. Inherent (`impl CounterContractStorage`) methods stay private to the contract — use them for helpers like key derivation. + +See [counter-account/src/lib.rs](../../../contracts/counter-account/src/lib.rs) for the complete working example demonstrating the three-part pattern, typed `StorageMap`, `get()`/`set()`, and felt arithmetic. + +**Project metadata for accounts:** See [counter-account/miden-project.toml](../../../contracts/counter-account/miden-project.toml) for `[lib] kind = "account-component"`, the `namespace` (`miden:counter-account/counter-contract@0.1.0`), and `supported-types` under `[package.metadata.miden]`. The `Cargo.toml` (see [counter-account/Cargo.toml](../../../contracts/counter-account/Cargo.toml)) only needs `crate-type = ["cdylib"]` and the `miden` dependency. + +### Note Script (`#[note]` / `#[note_script]`) Executes when a note is consumed by an account. Can call component methods on the consuming account. -See [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) for a working example demonstrating `#[note]`, `#[note_script]`, and cross-component calls. +A note is two parts: a `#[note]` struct (the note inputs type) and a `#[note]` `impl` block containing exactly one `#[note_script]` entrypoint. The entrypoint takes `self` **by value**, exactly one `Word` argument, and optionally a single reference to an `#[account(...)]` wrapper (`&MyAccount` or `&mut MyAccount`). The consuming account is declared separately with `#[account(...)]`. + +```rust +#![no_std] +#![feature(alloc_error_handler)] +use miden::*; + +// The native (active) account this note runs against: exposes the +// counter-account `CounterContract` component's methods on the wrapper. +#[account(counter_account::CounterContract)] +pub struct Wallet; + +#[note] +struct IncrementNote; + +#[note] +impl IncrementNote { + #[note_script] + fn run(self, _arg: Word, account: &mut Wallet) { + let initial_value = account.get_count(); + account.increment_count(); + let expected_value = initial_value + Felt::from_u32(1); + let final_value = account.get_count(); + assert_eq(final_value, expected_value); + } +} +``` + +See [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) for the working example demonstrating `#[note]`, `#[note_script]`, the `#[account(...)]` wrapper, and a cross-component call. -**Cargo.toml for notes:** See [increment-note/Cargo.toml](../../../contracts/increment-note/Cargo.toml) for the required `miden` deps, cross-component dependencies, wit deps, and `project-kind = "note-script"`. +**Project metadata for notes:** See [increment-note/miden-project.toml](../../../contracts/increment-note/miden-project.toml) for `[lib] kind = "note"`, the `namespace` (`miden:increment-note/miden-increment-note@0.1.0`), the path dependency on the called component (`counter-account = { path = "../counter-account" }`), and the cross-component `[package.metadata.miden.dependencies]` WIT entry. ### Transaction Script (`#[tx_script]`) One-off logic executed in the context of an account. Used for initialization, admin operations, etc. +`#[tx_script]` annotates a free `fn run`. Its signature is `fn run(arg: Word)` or `fn run(arg: Word, account: &mut MyAccount)` where `MyAccount` is an `#[account(...)]` wrapper. You declare the account wrapper yourself with `#[account(...)]`, and the macro instantiates it as the active account. + ```rust #![no_std] #![feature(alloc_error_handler)] use miden::*; -use crate::bindings::Account; + +// The account this tx-script runs against: the counter-account `CounterContract` component. +#[account(counter_account::CounterContract)] +pub struct Wallet; #[tx_script] -fn run(_arg: Word, account: &mut Account) { - account.initialize(); +fn run(_arg: Word, account: &mut Wallet) { + account.increment_count(); } ``` -**Cargo.toml:** Same as account but with `project-kind = "tx-script"`. +**Project metadata for tx scripts:** Like a note, but `[lib] kind = "tx-script"` and `namespace = "miden:base/transaction-script@1.0.0"`. + +## Storage Slot Naming + +Storage slot names are part of the on-chain storage ABI and are derived as: + +``` +:::: +``` + +The **middle segment is the interface segment of the `[lib].namespace`** in `miden-project.toml` (the part between the last `/` and `@`), snake-cased — **not** the snake-cased struct name. This deliberately decouples slot names from private Rust renames. + +Example: package `counter-account` + `namespace = "miden:counter-account/counter-contract@0.1.0"` + field `count_map` derives slot `counter_account::counter_contract::count_map` (see [integration/src/helpers.rs](../../../integration/src/helpers.rs) `counter_storage_slot()` and [counter_test.rs](../../../integration/tests/counter_test.rs)). The version suffix (`@0.1.0`) is ignored so the slot name stays stable. Slots are derived from the slot name; there is no `slot(...)` attribute. See the rust-sdk-pitfalls skill (P5) for more on slot naming. ## Storage Types @@ -49,22 +136,20 @@ fn run(_arg: Word, account: &mut Account) { | Module | Key Functions | Purpose | |--------|--------------|---------| -| `native_account::` | `add_asset(Asset)`, `remove_asset(Asset)`, `incr_nonce()` | Modify account vault/nonce | -| `active_account::` | `get_id() -> AccountId`, `get_balance(AccountId) -> Felt` | Query current account | -| `active_note::` | `get_assets() -> Vec`, `get_sender() -> AccountId` | Query note being consumed (typed note storage arrives as `self` in the `#[note_script]` method; see "Cross-Component Note Pattern" below) | +| `native_account::` | `add_asset(Asset) -> Word`, `remove_asset(Asset) -> Word`, `incr_nonce() -> Felt`, `get_id() -> AccountId` | Modify current account vault/nonce | +| `active_account::` | `get_id() -> AccountId`, `get_balance(Word) -> Felt` | Query current account (`get_balance` takes the asset key word, not an AccountId) | +| `active_note::` | `get_storage() -> Vec`, `get_assets() -> Vec`, `get_sender() -> AccountId` | Query note being consumed | | `note::` | `build_recipient(Word, Word, Vec) -> Recipient` | Build note recipients from serial number, script root, and note storage | | `output_note::` | `create(Tag, NoteType, Recipient) -> NoteIdx`, `add_asset(Asset, NoteIdx)` | Create output notes | | `faucet::` | `create_fungible_asset(Felt) -> Asset`, `mint(Asset)`, `burn(Asset)` | Asset minting | | `tx::` | `get_block_number() -> Felt`, `get_block_timestamp() -> Felt` | Transaction context | -| Intrinsics | `assert(bool)`, `assertz(Felt)`, `assert_eq(Felt, Felt)` | Validation | +| Intrinsics | `assert(Felt)`, `assertz(Felt)`, `assert_eq(Felt, Felt)` | Validation (`assert` fails unless the felt equals 1; `assertz` fails unless it equals 0) | ## Asset Handling -`Asset` is now a two-word value: - -**Constructor**: `Asset::new(word)` creates an Asset from a Word. +`Asset` is a two-word value (`key` + `value`): -See [miden-bank bank-account](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/contracts/bank-account/src/lib.rs) for complete asset handling patterns including deposit, withdrawal, and balance tracking. +**Constructor**: `Asset::new(key, value)` builds an Asset from its vault key word and value word (the arguments are `impl Into`, so e.g. `Asset::new(key_word, value_word)` or from `[Felt; 4]`). ```rust pub struct Asset { @@ -82,31 +167,43 @@ let amount = asset.value[0]; // Keep the asset key if you need to persist or compare the asset class let asset_key = asset.key; -// Add asset to account vault (only from component methods, not note scripts; see pitfall P11) +// Add asset to account vault (only from component methods, not note scripts — see pitfall P11) native_account::add_asset(asset); -// Remove asset from account vault -native_account::remove_asset(asset.clone()); +// Remove asset from account vault (Asset is Copy, no clone needed) +native_account::remove_asset(asset); ``` ## P2ID Output Note Creation -To send assets to another account, create a P2ID (Pay-to-ID) output note. See [miden-bank bank-account](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/contracts/bank-account/src/lib.rs) `create_p2id_note()` for a complete working implementation. +To send assets to another account, create a P2ID (Pay-to-ID) output note. The sequence is: + +1. Build the recipient with `note::build_recipient(serial_number, script_root, inputs)`. +2. Create the note with `output_note::create(tag, note_type, recipient)`, which returns a `NoteIdx`. +3. Move the asset out of the vault and onto the note with `native_account::remove_asset(asset)` + `output_note::add_asset(asset, note_idx)`. + +Because a note script cannot call `native_account::*` (pitfall P11), P2ID creation lives inside an account-component method. See the rust-sdk-pitfalls skill for the exact constants and safety rules: P8 (`note::build_recipient`), P9 (P2ID script root — prefer `script_root()`, do not hardcode), and P10 (constructing `NoteType` via `NoteType::from(felt!(...))`). ## Cross-Component Dependencies -To call another component's methods from a note or tx script, two Cargo.toml sections are needed. See [increment-note/Cargo.toml](../../../contracts/increment-note/Cargo.toml) for a working example showing both `[package.metadata.miden.dependencies]` and `[package.metadata.component.target.dependencies]`. +To call another component's methods from a note or tx script, declare the dependency in your `miden-project.toml` in **two places**: + +- `[dependencies]` — a normal path (or registry) dependency on the component crate: `counter-account = { path = "../counter-account" }`. +- `[package.metadata.miden.dependencies]` — the generated WIT for the component: `counter-account = { wit = "../counter-account/target/generated-wit/" }`. The WIT is produced by building the dependency component first. -Then import the bindings in your Rust code. See [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) line 13 for the import pattern: `use crate::bindings::miden::target_component::target_component;` +See [increment-note/miden-project.toml](../../../contracts/increment-note/miden-project.toml) for a working example showing both sections. + +Then expose the dependency's methods on the consuming account by declaring an `#[account(package::Interface)]` wrapper (`#[account(counter_account::CounterContract)] pub struct Wallet;`) and calling methods on the injected `account` parameter. The package name is the dependency's Rust-style name (`-` replaced with `_`, so `counter-account` → `counter_account`) and `Interface` is its exported WIT interface in UpperCamelCase (`CounterContract`). See [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs). ## Common Type Conversions ```rust // Felt from integer let f = felt!(42); // preferred for literals in contract code -let f = Felt::new(42); // construct a Felt from a u64 -let f = Felt::from_u32(42); -let f = Felt::from_canonical_checked(42).unwrap(); +let f = Felt::new(42).unwrap(); // fallible: Felt::new returns Result +let f = Felt::new_unchecked(42); // infallible, non-reducing form +let f = Felt::from_u32(42); // infallible (u32 always fits) +let f = Felt::from_canonical_checked(42).unwrap(); // returns Option // Word from Felts let w = Word::from([f0, f1, f2, f3]); @@ -135,56 +232,57 @@ use alloc::vec::Vec; ## Cross-Component Note Pattern -A note script reads from `active_note::*` and forwards work to a public account-component method via generated bindings. This is the canonical pattern for any note that updates account state, because note scripts cannot call `native_account::*` directly (see `rust-sdk-pitfalls` skill, P11). +A note script reads from `active_note::*` and forwards work to a public account-component method through the `#[account(...)]` wrapper. This is the canonical pattern for any note that updates account state, because note scripts cannot call `native_account::*` directly (see `rust-sdk-pitfalls` skill, P11). -The `#[note]` macro generates `TryFrom<&[Felt]>` for the note struct, so the note's serialized storage is deserialized into typed fields before the script runs. The `#[note_script]` method receives the deserialized note as `self` (by value) and never indexes a raw Felt slice manually. Alongside the required `Word` arg, the method may optionally accept a `&Account` or `&mut Account` parameter. See [compiler/sdk/base-macros/src/lib.rs](https://github.com/0xMiden/compiler/blob/main/sdk/base-macros/src/lib.rs) for the macro contract and [compiler/sdk/base-macros/src/note.rs](https://github.com/0xMiden/compiler/blob/main/sdk/base-macros/src/note.rs) for the generated deserialization (each named field is read via `::from_felt_repr(...)` and EOF is asserted at the end). +The `#[note]` macro deserializes the note's inputs into the typed note struct, so serialized note storage is turned into typed fields before the script runs. The `#[note_script]` method receives the deserialized note as `self` (by value) and never indexes a raw Felt slice manually. Alongside the required `Word` arg, the method may optionally accept an `#[account(...)]` wrapper reference (`&Wallet` or `&mut Wallet`). See [compiler/sdk/base-macros/src/lib.rs](https://github.com/0xMiden/compiler/blob/main/sdk/base-macros/src/lib.rs) for the macro contract and [compiler/sdk/base-macros/src/note.rs](https://github.com/0xMiden/compiler/blob/main/sdk/base-macros/src/note.rs) for the generated deserialization (each named field is read via `::from_felt_repr(...)` and EOF is asserted at the end). -Supported field types include `Felt`, the unsigned integer scalars (`u64`, `u32`, `u8`), `bool`, `Option`, and `Vec` via the `FromFeltRepr` trait (`compiler/sdk/field-repr/repr/src/lib.rs`), plus any user type that opts in with `#[derive(FromFeltRepr)]` (this is how `AccountId` supports the macro - see `compiler/sdk/base-sys/src/bindings/types.rs`). Do **not** use `Asset` or `Word` directly as note struct fields; those types do not currently derive `FromFeltRepr`. If you need asset-shaped data inside the note, flatten it into supported scalar fields and reconstruct inside the script, or keep it on the side as a separate `active_note::get_assets()` read. +Supported field types include `Felt`, the unsigned integer scalars (`u64`, `u32`, `u8`), `bool`, `Option`, and `Vec` via the `FromFeltRepr` trait (`compiler/sdk/field-repr/repr/src/lib.rs`), plus any user type that opts in with `#[derive(FromFeltRepr)]` (this is how `AccountId` supports the macro — see `compiler/sdk/base-sys/src/bindings/types.rs`). Do **not** use `Asset` or `Word` directly as note struct fields; those types do not currently derive `FromFeltRepr`. If you need asset-shaped data inside the note, flatten it into supported scalar fields and reconstruct inside the script, or keep it on the side as a separate `active_note::get_assets()` read. -For Cargo.toml wiring (cross-component dependencies + bindings import), see "Cross-Component Dependencies" above. See [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) for the project-template's local example of the `#[note] struct + #[note] impl` macro form. +For the Cargo.toml / `miden-project.toml` wiring (cross-component dependencies + `#[account(...)]` wrapper), see "Cross-Component Dependencies" above. See [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) for the project-template's local example of the `#[note] struct + #[note] impl` macro form. -**Storage-free case** (sender + assets, single component call per asset): declare a unit struct (`#[note] struct DepositNote;`). The script reads `active_note::get_sender()` and iterates `active_note::get_assets()`, calling the component method per asset. The macro still generates the deserialization wrapper; for a unit struct it only asserts the storage Felt slice is empty. +**Storage-free case** (unit struct, calls the account wrapper): declare a unit struct (`#[note] struct IncrementNote;`). The script receives the `#[account(...)]` wrapper and calls component methods on it — the counter's [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) is exactly this shape (`account.get_count()` / `account.increment_count()`). For a note that forwards assets, read `active_note::get_sender()` and iterate `active_note::get_assets()`, calling the component method per asset through the wrapper. The macro still generates the deserialization wrapper; for a unit struct it only asserts the note-input Felt slice is empty. **Typed-storage case** (note carries scripted data): declare named fields on the note struct. The macro deserializes them in declaration order, and the script accesses them via `self.`. Illustrative shape: ```rust +#[account(counter_account::CounterContract)] +pub struct Wallet; + #[note] -struct DepositNote { - depositor: AccountId, +struct TargetedNote { + target_account_id: AccountId, } #[note] -impl DepositNote { +impl TargetedNote { #[note_script] - pub fn run(self, _arg: Word) { - let assets = active_note::get_assets(); - for asset in assets { - bank_account::deposit(self.depositor, asset); - } + fn run(self, _arg: Word, account: &mut Wallet) { + // `self.target_account_id` is deserialized from the note inputs; + // forward work to component methods on `account`. } } ``` -(`use` statements and crate attributes elided; see [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) for a complete file.) For a verified working example with an `&mut Account` parameter, see [compiler/examples/p2id-note/src/lib.rs](https://github.com/0xMiden/compiler/blob/main/examples/p2id-note/src/lib.rs) (`#[note] struct P2idNote { target_account_id: AccountId }`, where the script asserts `account.get_id() == self.target_account_id` and calls `account.receive_asset(asset)` for each attached asset). +(`use` statements and crate attributes elided; see [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) for a complete file.) For a verified working example with a typed field and an `&mut` account-wrapper parameter, see [compiler/examples/p2id-note/src/lib.rs](https://github.com/0xMiden/compiler/blob/main/examples/p2id-note/src/lib.rs) (`#[note] struct P2idNote { target_account_id: AccountId }`, where the script asserts `account.get_id() == self.target_account_id` and calls `account.receive_asset(asset)` for each attached asset). -**Component side that absorbs the call**: see [miden-bank bank-account](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/contracts/bank-account/src/lib.rs) for `deposit(...)` and `withdraw(...)` in a fuller example. The component method validates (felt-arithmetic safety, see `rust-sdk-pitfalls` P1), updates storage, and (for `withdraw`) creates a P2ID output note via the existing P2ID pattern. Note: miden-bank currently demonstrates an older raw-indexing variant for its withdraw-request note; treat the typed pattern shown above as the preferred shape for new note scripts. +**Component side that absorbs the call**: the counter's `CounterContract` component exposes `get_count` / `increment_count` (see [counter-account/src/lib.rs](../../../contracts/counter-account/src/lib.rs)); the note calls those through the wrapper. A component method validates (felt-arithmetic safety, see `rust-sdk-pitfalls` P1), updates storage, and — for a withdraw-style flow — creates a P2ID output note via the P2ID pattern above. -**Test wiring**: tests pass the serialized Felt representation of the note struct's fields through `NoteCreationConfig.storage`, in declaration order. See `rust-sdk-testing-patterns` skill, "Note Construction" section, for the helper that builds a note from a compiled `.masp` package and a populated `NoteCreationConfig`. +**Test wiring**: tests pass the serialized Felt representation of the note struct's fields via `NoteBuilder::note_storage([...])`, in declaration order. See `rust-sdk-testing-patterns` skill, "Note Construction" section, for building a note from a compiled `.masp` package with `NoteScript::from_package` + `NoteBuilder`. ## Asset Receiving via Component Methods -Note scripts cannot call `native_account::add_asset()` directly (see pitfall P11). The canonical pattern is for an account component to expose a public method that wraps `native_account::add_asset()`, and note scripts call that method via cross-component bindings. - -See [miden-bank bank-account deposit()](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/contracts/bank-account/src/lib.rs) for the component side: the `deposit()` method validates the deposit, updates storage, and calls `native_account::add_asset()`. +Note scripts cannot call `native_account::add_asset()` directly (see pitfall P11). The canonical pattern is for an account component to expose a public (trait) method that wraps `native_account::add_asset()`, and the note script calls that method through the `#[account(...)]` wrapper. -See [miden-bank deposit-note](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/contracts/deposit-note/src/lib.rs) for the note side: the note script calls `bank_account::deposit()` via generated bindings. +Component side: a trait method (e.g. `deposit`) validates the deposit, updates storage, and calls `native_account::add_asset()`. Note side: the note declares `#[account(package::Interface)] pub struct Wallet;` and, inside `#[note_script] fn run(self, _arg: Word, account: &mut Wallet)`, calls `account.deposit(...)` on that wrapper. It is **not** a free `package::deposit()` call — the call goes through the injected `account`, exactly as the counter's [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) calls `account.increment_count()`. ## Validation Checklist - [ ] `#![no_std]` and `#![feature(alloc_error_handler)]` at top of every contract -- [ ] `crate-type = ["cdylib"]` in Cargo.toml -- [ ] Correct `project-kind` in `[package.metadata.miden]` -- [ ] Typed storage uses `StorageValue` / `StorageMap` with `get()` / `set()` -- [ ] Cross-component deps in both `[package.metadata.miden.dependencies]` and `[package.metadata.component.target.dependencies]` +- [ ] Account components use the three-part pattern: `#[component_storage]` struct + `#[component]` trait + `#[component]` impl (never `#[component]` on a struct) +- [ ] `crate-type = ["cdylib"]` in `Cargo.toml` +- [ ] Correct `[lib] kind` in `miden-project.toml` (`account-component` / `note` / `tx-script`) with the matching `namespace` +- [ ] Typed storage uses `StorageValue` / `StorageMap` with `get()` / `set()`; slot names derive from `::::` +- [ ] Notes/tx-scripts that call a component declare an `#[account(package::Interface)]` wrapper and call methods on the injected `account` +- [ ] Cross-component deps declared in `miden-project.toml` under both `[dependencies]` (path) and `[package.metadata.miden.dependencies]` (wit) - [ ] Felt arithmetic validated before subtraction (see rust-sdk-pitfalls skill) - [ ] Felt comparisons use `.as_canonical_u64()` (see rust-sdk-pitfalls skill) diff --git a/.claude/skills/rust-sdk-pitfalls/SKILL.md b/.claude/skills/rust-sdk-pitfalls/SKILL.md index 4d044ef..8ad7b98 100644 --- a/.claude/skills/rust-sdk-pitfalls/SKILL.md +++ b/.claude/skills/rust-sdk-pitfalls/SKILL.md @@ -44,39 +44,62 @@ if balance.as_canonical_u64() > threshold.as_canonical_u64() { ... } **Rule**: For quantity/business logic, ALWAYS convert to `.as_canonical_u64()` before using comparison operators. -## P3: Function Argument Limit (4 Words / 16 Felts) +## P3: Direct Call Boundary Passes At Most 16 Stack Felts (4 Words) -**Severity**: Medium — causes compilation errors +**Severity**: High — exceeding the 16-felt call boundary is a compile error -Functions can receive at most 4 Words (16 Felts) as arguments. +A direct cross-context / export / FPI call passes its parameters on the MASM operand stack, whose addressable window is 16 felts (4 Words, counting the canonical-ABI result pointer when present). Passing more than 16 flat felts across that boundary is a **compilation error**: after expanding 64-bit values and any result pointer, the flattened parameters must fit in 16 operand-stack felts. (Indirection for larger payloads via the advice provider is planned but not yet implemented, so today the limit is hard.) ```rust -// PROBLEM — too many arguments -fn process(a: Word, b: Word, c: Word, d: Word, e: Word) { ... } // > 4 Words! +// COMPILE ERROR — flattens past 16 felts +fn process(a: Word, b: Word, c: Word, d: Word, e: Word) { ... } -// SOLUTION — pass fat types by reference +// OK — keep signatures small, or pass aggregates by reference so each lowers to a pointer fn process(a: &Word, b: &Word, c: &Word, d: &Word, e: &Word) { ... } ``` ## P4: Storage API Is Typed -**Severity**: Medium — old examples no longer compile +**Severity**: Medium — the wrong component shape does not compile -The old `Value` / untyped `StorageMap` API is gone. Account storage is now: +Account storage uses typed slots: - `StorageValue` for a single typed slot - `StorageMap` for typed maps -- `get()` / `set()` methods instead of `.read()` / `.write()` +- `get()` / `set()` methods - `K: WordKey`, `T: WordValue`, `V: WordValue` +An account component is written in **three parts**: annotate the storage struct with `#[component_storage]`, the API `trait` with `#[component]`, and the `impl Trait for Storage` block with `#[component]`. See the working example in `contracts/counter-account/src/lib.rs`: + ```rust +// 1. Storage struct — annotated #[component_storage], NOT #[component]. +// Applying #[component] to a struct is a hard compile error. +#[component_storage] +struct CounterContractStorage { + #[storage(description = "counter contract storage map")] + count_map: StorageMap, +} + +// 2. API trait — defines the exported interface. #[component] -struct CounterContract { - #[storage(description = "single typed slot")] - counter: StorageValue, +trait CounterContract { + fn get_count(&self) -> Felt; + fn increment_count(&mut self) -> Felt; +} - #[storage(description = "typed map")] - balances: StorageMap, +// 3. Implementation — the behavior, wired to the storage struct. +#[component] +impl CounterContract for CounterContractStorage { + fn get_count(&self) -> Felt { + let key = Word::new([felt!(0), felt!(0), felt!(0), felt!(1)]); + self.count_map.get(key) + } + fn increment_count(&mut self) -> Felt { + let key = Word::new([felt!(0), felt!(0), felt!(0), felt!(1)]); + let new_value = self.count_map.get(key) + felt!(1); + self.count_map.set(key, new_value); + new_value + } } ``` @@ -88,15 +111,23 @@ If you need custom keys or values, implement `WordKey` / `WordValue` by converti Storage slot names follow a strict pattern. Getting it wrong often returns the default value silently. -**Pattern**: `[component_package_or_name]::[snake_case(component_struct)]::[field_name]` +**Pattern**: `[package_name]::[namespace_interface_segment]::[field_name]` -**Conversion rule**: Replace characters outside `[A-Za-z0-9_]` with `_` in the package or component name. The package comes from `[package.metadata.component] package = "..."`, with any `@version` suffix ignored. +**Where the segments come from**: The `#[component_storage]` macro (NOT `#[component]`) processes the `#[storage]` fields and derives slot names. It loads `miden-project.toml` (next to your `Cargo.toml`, NOT `Cargo.toml` itself): -| Package in Cargo.toml | Component Struct | Field | Storage Slot Name | -|----------------------|------------------|-------|-------------------| -| `miden:counter-account` | `CounterContract` | `count_map` | `miden_counter_account::counter_contract::count_map` | -| `miden:bank-account` | `BankAccount` | `balances` | `miden_bank_account::bank_account::balances` | -| `miden:bank-account` | `BankAccount` | `initialized` | `miden_bank_account::bank_account::initialized` | +- **First segment** = `[package] name`. +- **Middle segment** = the *interface segment* of the `[lib] namespace` value. The namespace is a fully-qualified component id `namespace:package/interface@version`; the interface segment sits between the last `/` and the `@`. This is deliberately decoupled from the Rust storage-struct name, so renaming the private struct cannot change deployed slot names. The struct name (`CounterContractStorage`, …) does NOT appear in the slot name. +- **Last segment** = the `#[storage]` field name. + +**Conversion rule**: Each segment is sanitized — any `@version` suffix is stripped, the interface segment is passed through `snake_case`, and characters outside `[A-Za-z0-9_]` are replaced with `_` (an empty or leading-`_` segment is prefixed with `x`). Project package names are conventionally kebab-case (e.g. `counter-account`), so the first segment is that name with hyphens replaced by `_` — it does NOT equal the package name verbatim (`counter-account` → `counter_account`). + +| `[package] name` | `[lib] namespace` | Field | Storage Slot Name | +|------------------|-------------------|-------|-------------------| +| `counter-account` | `miden:counter-account/counter-contract@0.1.0` | `count_map` | `counter_account::counter_contract::count_map` | + +The integration code depends on this exact name. In `integration/src/helpers.rs`, `counter_storage_slot()` builds it via `StorageSlotName::new("counter_account::counter_contract::count_map")`; a mismatch there reads the default value instead of the seeded one. + +**Caveat (toolchain-version dependent)**: This naming is a property of the Rust SDK contract macros, which live in the `miden-base-macros` crate (0.13.0, part of the Rust SDK family alongside `miden` and `miden-base-sys`, all 0.13.0; the separate compiler / `cargo-miden` workspace is versioned 0.9.0). Do not conflate these with the protocol/network version (v0.15). The slot-naming algorithm — `package_name::snake_case(interface_segment)::field`, with non-`[A-Za-z0-9_]` mapped to `_` and `@version` stripped — is stable, but verify against your installed toolchain rather than assuming a protocol version. ## P6: No-std Environment @@ -112,11 +143,11 @@ extern crate alloc; use alloc::vec::Vec; ``` -## P7: Asset ABI Is Two Words, Not One +## P7: Rust SDK `Asset` Is Two Words (Key + Value) -**Severity**: Medium — old `asset.inner[...]` code is stale +**Severity**: Medium — reconstructing an asset from raw `asset.inner[...]` offsets is wrong -`Asset` is now: +In the Rust SDK (`miden::Asset` / `miden_base_sys::bindings::Asset`), an `Asset` is encoded as two words: ```rust pub struct Asset { @@ -133,13 +164,15 @@ let amount = asset.value[0]; let asset_key = asset.key; ``` -Do not assume the old single-word asset layout. Use `asset.key` and `asset.value`, or protocol helpers, instead of reconstructing from old `asset.inner[...]` offsets. +Use `asset.key` and `asset.value` (or protocol helpers) rather than reconstructing an asset from raw `asset.inner[...]` offsets. + +**SDK vs protocol `Asset`**: the two-word `{key, value}` form is the Rust SDK ABI type. At the protocol layer, `Asset` is an enum `{ Fungible, NonFungible }`, and the vault words are obtained via `to_key_word()` / `to_value_word()`. Reading the fungible amount from `value[0]` is correct on both sides. -## P8: `Recipient::compute` Was Removed +## P8: Build Recipients with `note::build_recipient` -**Severity**: Medium — causes compilation errors after upgrading +**Severity**: Medium — calling a nonexistent `Recipient::compute` fails to compile -Building recipients now goes through the note binding: +Build recipients through the note binding: ```rust extern crate alloc; @@ -152,58 +185,68 @@ let recipient = note::build_recipient( ); ``` -## P9: P2ID Note Root Hardcoding +`note::build_recipient` is the Rust SDK alias for the host function `miden::protocol::note::compute_and_store_recipient`, which computes and stores the recipient in one step. You can call either name. + +## P9: P2ID Note Root — Prefer `script_root()`, Do Not Hardcode **Severity**: Low-Medium — breaks after miden-standards updates -Creating P2ID output notes requires the MAST root digest of the P2ID script. This is typically hardcoded as a constant. +Creating P2ID output notes requires the MAST root of the P2ID script. The root changes whenever the P2ID script or the assembler/hashing changes, so a hardcoded literal is fragile and unverifiable. -For any note that is being created within the compiler code, the MAST root digest is needed. Below you find the example of a P2ID note +**Source of truth**: Use `P2idNote::script_root()` from `miden-standards` (returns a `NoteScriptRoot`, a `Word` newtype convertible via `.into()`). Derive the root from the dependency rather than embedding a literal, and re-derive after any dependency bump. ```rust -fn p2id_note_root() -> Digest { - Digest::from_word( - Word::try_from([ - 13362761878458161062_u64, - 15090726097241769395_u64, - 444910447169617901_u64, - 3558201871398422326_u64, - ]) - .unwrap(), - ) -} +use miden_standards::note::P2idNote; + +// script_root() returns a NoteScriptRoot (a Word newtype); convert to Word when needed. +let p2id_root: Word = P2idNote::script_root().into(); ``` -**Risk**: If miden-standards updates the P2ID script, this digest becomes invalid and withdrawals silently fail. +**If you must embed a constant** (e.g., inside compiler/contract code that cannot call into miden-standards), regenerate it from the current `miden-standards` version and verify it after every update. The four-limb literal below is ILLUSTRATIVE only — it will not match your build and must not be copied as-is: -**Mitigation**: Use `P2idNote::script_root()` from miden-standards if available, or verify the hardcoded root matches the current version after dependency updates. +```rust +// ILLUSTRATIVE ONLY — will not match your build. Regenerate from +// P2idNote::script_root() for your pinned miden-standards version. +fn p2id_note_root() -> Word { + Word::try_from([ + 13362761878458161062_u64, + 15090726097241769395_u64, + 444910447169617901_u64, + 3558201871398422326_u64, + ]) + .unwrap() +} +``` + +**Risk**: If miden-standards updates the P2ID script, any hardcoded digest becomes invalid and withdrawals silently fail. -**NoteType for P2ID**: P2ID output notes created in contract code should use the private note type value via `NoteType::from(felt!(2))` (see P10). Using the public note type triggers an opaque "missing details in advice provider" error at execution time. See [miden-bank withdraw](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/contracts/bank-account/src/lib.rs) for the working pattern. +**NoteType for P2ID**: P2ID output notes created in contract code are constructed with `NoteType::from(felt!(...))` — `felt!(0)` for private, `felt!(1)` for public (see P10). In v0.15 the kernel rejects any note type other than `0` (private) or `1` (public) with `ERR_NOTE_INVALID_TYPE`. A common working pattern reads the note type from an input note's storage and forwards it through `NoteType::from(note_type)`. ## P10: NoteType Variants Unavailable in Compiler SDK -**Severity**: Medium -- causes compilation errors +**Severity**: Critical -- wrong values panic at runtime, named variants cause compilation errors -Named enum variants (`NoteType::Private`, `NoteType::Public`, `NoteType::Encrypted`) don't exist in contract code. Construct via `NoteType::from()`: +Named enum variants (`NoteType::Private`, `NoteType::Public`) don't exist in contract code — the SDK `NoteType` is an unvalidated transparent `Felt` wrapper. Construct via `NoteType::from()`: | NoteType | Value | |----------|-------| +| Private (default) | `NoteType::from(felt!(0))` | | Public | `NoteType::from(felt!(1))` | -| Private | `NoteType::from(felt!(2))` | -| Encrypted | `NoteType::from(felt!(3))` | -See [miden-bank bank-account](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/contracts/bank-account/src/lib.rs) for `NoteType::from(note_type)` usage. +**Note-type encoding**: the note type is 1-bit — `Private = 0` (the protocol default) and `Public = 1`. Only these two values exist; there is no `Encrypted` type. The SDK wrapper does no validation, so an out-of-range value (e.g. `felt!(2)` or `felt!(3)`) is not caught at compile time — the kernel rejects it at execution time with `ERR_NOTE_INVALID_TYPE` (it asserts `note_type <= 1`). + +When a note forwards a caller-supplied note type, read it from the note's storage and pass it straight into `NoteType::from(note_type)`. ## P11: Note Scripts Cannot Call Native Account Functions **Severity**: High -- causes runtime failures -Note scripts cannot call `native_account::add_asset()` or other `native_account::` functions directly. The kernel's `authenticate_account_origin` check rejects these calls from a note context. Instead, note scripts must call an account component method, which then calls `native_account::add_asset()` internally. +Note scripts cannot call `native_account::add_asset()` or other `native_account::` functions directly. The kernel's `authenticate_account_origin` check rejects these calls from a note context. Instead, note scripts must call an account component method (through the `#[account(...)]` wrapper), which then performs the privileged `native_account::` operation internally. -See [miden-bank deposit-note](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/contracts/deposit-note/src/lib.rs) for the correct pattern: the note script calls `bank_account::deposit()`, which internally calls `native_account::add_asset()`. +See `contracts/increment-note/src/lib.rs` for the wrapper pattern: the note declares its consuming account via `#[account(counter_account::CounterContract)] pub struct Wallet;` and, inside `#[note_script] fn run(self, _arg: Word, account: &mut Wallet)`, calls the component methods on that wrapper (`account.get_count()`, `account.increment_count()`) rather than any `native_account::` function directly. Any asset mutation (e.g. `native_account::add_asset()`) must likewise live inside a component method that the note calls through the wrapper, never in the note script itself. ## P12: Note Inputs Are Immutable After Creation **Severity**: Low -- causes incorrect architecture -The Felt slice that the `#[note]` macro deserializes into `self` is baked at note creation time and cannot be modified after creation. Design the typed note struct's field set and field order carefully before deployment; any later change is a breaking change for existing notes. +Note inputs (the Felt data the `#[note]` macro deserializes into `self`, read at runtime via `active_note::get_storage()`) are baked at note creation time and cannot be modified after creation. Design the typed note struct's field set and field order carefully before deployment; any later change is a breaking change for existing notes. diff --git a/.claude/skills/rust-sdk-source-guide/SKILL.md b/.claude/skills/rust-sdk-source-guide/SKILL.md index 2dd39d2..42da0a2 100644 --- a/.claude/skills/rust-sdk-source-guide/SKILL.md +++ b/.claude/skills/rust-sdk-source-guide/SKILL.md @@ -24,7 +24,7 @@ This is the single highest-leverage practice for AI-assisted Miden development. **Build loop**: After every contract edit, run `cargo miden build --manifest-path contracts//Cargo.toml --release`. The project's build hook does this automatically. If the build fails: 1. Read the error message -2. Translate obvious SDK migration errors first: +2. Translate obvious SDK/compiler errors first: - `.as_u64()` -> `.as_canonical_u64()` - `Recipient::compute(...)` -> `note::build_recipient(...)` - `Value` -> `StorageValue` @@ -33,7 +33,7 @@ This is the single highest-leverage practice for AI-assisted Miden development. 4. Adapt the working pattern to your use case 5. Rebuild -**Test loop**: Write tests alongside contracts. Run full repo checks with `cargo make test` (or `cargo test -p integration --release` for a faster integration-only loop). When tests fail: +**Test loop**: Write tests alongside contracts. Run `cargo test -p integration --release` (tests compile the contracts via `build_project_in_dir()`, so always build contracts before running them). When tests fail: 1. Check the error — is it a build error, a runtime assertion, or a proof failure? 2. For assertion failures: check felt arithmetic (modular wrapping) and storage slot naming 3. For unexpected behavior: compare your code against the closest working example in source repos @@ -51,7 +51,7 @@ The basic skills (rust-sdk-patterns, rust-sdk-testing-patterns, miden-concepts, - When you find a useful pattern in source, extract just what you need — the exact API call, the exact data layout, the exact test setup. **Using sub-agents for exploration**: -- Launch an explore sub-agent with a specific question: "Find how P2ID output notes are created in the miden-bank repository" +- Launch an explore sub-agent with a specific question: "Find how P2ID output notes are created in the miden-bank example (tutorials/examples/miden-bank)" - The sub-agent searches, reads the relevant files, and returns a focused summary - Your main context stays clean for implementation @@ -75,56 +75,61 @@ When stuck at any stage: search the source repos for a similar working pattern. Clone these repos alongside your project for reference. Claude will explore them when needed for advanced patterns. ```bash -# Required: contains standard note types and account components -git clone --depth 1 --branch main https://github.com/0xMiden/miden-base.git ../miden-base - -# Required: contains SDK, compiler, and 12 working examples -git clone --depth 1 --branch main https://github.com/0xMiden/compiler.git ../compiler - -# Required: contains client API for deployment and chain interaction -git clone --depth 1 --branch main https://github.com/0xMiden/miden-client.git ../miden-client - -# Recommended: complete working banking app with advanced patterns in the `examples/miden-bank` folder of the tutorials repo -git clone --branch main https://github.com/0xMiden/tutorials.git ../tutorials +# Required: protocol layer — standard note types and account components (crate: miden-protocol) +git clone --branch v0.15.3 https://github.com/0xMiden/protocol.git ../protocol + +# Required: client API for deployment and chain interaction +git clone --branch v0.15.2 https://github.com/0xMiden/rust-sdk.git ../rust-sdk + +# Required: the Rust SDK macros + compiler, released as v0.9.0 (targets VM v0.23 / +# protocol v0.15 and ships the guest SDK crate `miden` at 0.13, build tool `cargo-miden` at 0.9). +# Clone the release tag directly. +git clone --branch v0.9.0 https://github.com/0xMiden/compiler.git ../compiler + +# Recommended: complete working banking app with advanced patterns in `examples/miden-bank`. +# Its v0.15 examples live on branch `kbg/chore/v15-migration` (PR #204) until they land on the +# default branch; pin the reviewed commit for reproducibility. +git clone --branch kbg/chore/v15-migration https://github.com/0xMiden/tutorials.git ../tutorials +git -C ../tutorials checkout a255af7959a441d9a027178631c666949b4af086 ``` -**Note**: These commands clone the stable `main` branch. Only use `--branch next` if the user explicitly requests the experimental/upcoming version of the compiler or source repos. +**Note**: The compiler is **released as `v0.9.0`**. Don't conflate the version schemes: the network/protocol is **v0.15**, but the compiler workspace and the `cargo-miden` build tool are **`0.9.0`**, and the guest SDK crates (`miden`, `miden-base-macros`, `miden-base-sys`) are **`0.13.0`** — so contracts depend on `miden = "0.13"` and integration/tooling on `cargo-miden = "0.9"`. The compiler exposes `note::build_recipient` as an SDK-friendly alias for `compute_and_store_recipient`, so the API examples below resolve there. Use the pinned refs above — `compiler` `v0.9.0`, `protocol` `v0.15.3`, `rust-sdk` (client) `v0.15.2`, and `tutorials` pinned at commit `a255af7` on its v0.15 branch — rather than the default branches, since `tutorials`' default branch does not yet carry the v0.15 examples. `--depth 1` is intentionally omitted so you can check out other refs later if needed. ### `compiler/` — The Rust-to-MASM Compiler Contains the SDK that powers `#[component]`, `#[note]`, and `#[tx_script]` macros. -- **`examples/`** — 12 working examples covering every SDK pattern: account components, note scripts, transaction scripts, authentication components, wallets, faucets, storage. These are the most reliable reference for "how to write X" questions. +- **`examples/`** — 12 working examples covering core SDK patterns: account components, note scripts, transaction scripts, authentication components (NoAuth, RPO Falcon512), wallets, and storage. These are the most reliable reference for "how to write X" questions. Note: there is no faucet example here — for faucet reference, use `crates/miden-standards/src/account/faucets/fungible/mod.rs` (the `FungibleFaucet` component) in the protocol repo, or the compiler's `tests/integration/src/sdk/base/faucet.rs` faucet binding test. **WARNING**: Stay in `examples/` only. Do NOT explore compiler internals (`sdk/`, `codegen/`, etc.) — they are implementation details that will confuse the agent and lead to incorrect code. **Explore when**: Writing any new contract type, finding working code examples for patterns not covered by skills. -### `miden-base/` — Protocol Layer and Standard Library +### `protocol/` — Protocol Layer and Standard Library -Contains the protocol specification, standard components, and standard note types. +The protocol repo (`github.com/0xMiden/protocol`; primary crate `miden-protocol`). Contains the protocol specification, standard components, and standard note types. -- **`crates/miden-standards/`** — Standard note types (P2ID, P2IDE, SWAP, BURN, MINT) and standard account components (BasicWallet, BasicFungibleFaucet, authentication components). Explore to understand note flow patterns and data layouts. +- **`crates/miden-standards/`** — Standard note types (P2ID, P2IDE, SWAP, PSWAP, BURN, MINT) and standard account components (BasicWallet, FungibleFaucet, authentication components). Explore to understand note flow patterns and data layouts. - **`crates/miden-protocol/asm/kernels/transaction/`** — The MASM transaction kernel. Every Rust SDK function (e.g., `native_account::add_asset`, `output_note::create`, `faucet::mint`) maps to a procedure defined here. Start with `api.masm` to find the procedure signature and stack contract, then read the implementation in `lib/` (e.g., `lib/output_note.masm`, `lib/account.masm`, `lib/epilogue.masm`). Useful for understanding exactly what happens under the hood -- for example, whether a function touches the vault, what the conservation check compares, or how note assets are tracked. - **`crates/miden-tx/`** — Rust execution engine (executor, prover, host). Orchestrates transaction execution but rarely needed for understanding contract behavior. Explore only if debugging execution infrastructure or host-level behavior. -- **`crates/miden-testing/`** — MockChain implementation internals. Explore when you need to understand testing infrastructure beyond what the testing-patterns skill covers. +- **`crates/miden-testing/`** — MockChain implementation internals. Explore when you need to understand testing infrastructure beyond what the rust-sdk-testing-patterns skill covers. **Note**: Standard components (BasicWallet, etc.) are MASM-only and not callable from Rust SDK (see [compiler#936](https://github.com/0xMiden/compiler/issues/936)). Explore miden-standards to understand note flows and data layouts, not for finding callable Rust APIs. **Explore when**: Understanding note flows, P2ID/SWAP/faucet data layouts, or what SDK functions actually do under the hood (via the kernel MASM). -### `miden-client/` — Client Library +### `rust-sdk/` — Client Library -Contains the Rust API for deploying contracts and interacting with the Miden network. +The client repo (`github.com/0xMiden/rust-sdk`). Contains the Rust API for deploying contracts and interacting with the Miden network. - Rust client for building transactions, syncing state, managing accounts and notes - CLI tool source code for reference on client usage patterns **Explore when**: Deploying contracts to testnet, submitting transactions, syncing state, managing notes on-chain. -### `miden-bank/` — Working Example Application +### `tutorials/examples/miden-bank/` — Working Example Application -A complete banking application built with the Rust SDK. Demonstrates advanced patterns that go beyond the basic skills. +A complete banking application built with the Rust SDK, located at `examples/miden-bank/` inside the cloned tutorials repo. Demonstrates advanced patterns that go beyond the basic skills. - Multiple contract types working together (account, deposit note, withdraw note, tx script) - Advanced patterns: `StorageMap` + `StorageValue` composition, felt arithmetic safety, cross-component calls, P2ID output note creation from within contracts @@ -138,16 +143,16 @@ A complete banking application built with the Rust SDK. Demonstrates advanced pa | Building This | Explore These Repos | What to Look For | |---|---|---| -| Account component with storage | `compiler/` examples, `miden-bank/` contracts | `StorageMap` / `StorageValue` patterns, pub method signatures | -| Note script | `compiler/` examples, `miden-bank/` contracts | `#[note_script]` pattern, cross-component calls, note storage parsing | -| Transaction script | `compiler/` examples, `miden-bank/` contracts | `#[tx_script]` pattern, Account binding import | -| Authentication component | `compiler/` examples | Auth component patterns (NoAuth, Falcon512, ECDSA) | -| Faucet (token minting) | `compiler/` examples | BasicFungibleFaucet example, mint/burn pattern | -| P2ID output notes | `miden-bank/` contracts, `miden-base/` standards (data layouts) | `note::build_recipient`, script root, `output_note` creation | -| Swap notes | `miden-base/` standards (data layouts) | SwapNote data layout, tag construction, payback flow | -| Multi-step tests | `miden-bank/` integration tests | Init → operate → verify flow, output note verification | -| Client deployment | `miden-client/` | TransactionRequestBuilder, sync, submit patterns | -| SDK function internals | `miden-base/` kernel (`crates/miden-protocol/asm/kernels/transaction/`) | `api.masm` for procedure signatures, `lib/*.masm` for implementations | +| Account component with storage | `compiler/` examples, `tutorials/examples/miden-bank/` contracts | `StorageMap` / `StorageValue` patterns, pub method signatures | +| Note script | `compiler/` examples, `tutorials/examples/miden-bank/` contracts | `#[note_script]` pattern, cross-component calls, note storage parsing | +| Transaction script | `compiler/` examples, `tutorials/examples/miden-bank/` contracts | `#[tx_script]` pattern, Account binding import | +| Authentication component | `compiler/` examples | Auth component patterns (NoAuth, RPO Falcon512) | +| Faucet (token minting) | `protocol/` standards (`crates/miden-standards/src/account/faucets/fungible/mod.rs`), `compiler/` faucet binding test (`tests/integration/src/sdk/base/faucet.rs`) | `FungibleFaucet` component, `FungibleFaucet::builder()`, mint/burn pattern | +| P2ID output notes | `tutorials/examples/miden-bank/` contracts, `protocol/` standards (data layouts) | `note::build_recipient`, script root, `output_note` creation | +| Swap notes | `protocol/` standards (data layouts) | SwapNote data layout, tag construction, payback flow | +| Multi-step tests | `tutorials/examples/miden-bank/` integration tests | Init → operate → verify flow, output note verification | +| Client deployment | `rust-sdk/` | TransactionRequestBuilder, sync, submit patterns | +| SDK function internals | `protocol/` kernel (`crates/miden-protocol/asm/kernels/transaction/`) | `api.masm` for procedure signatures, `lib/*.masm` for implementations | --- @@ -159,20 +164,19 @@ These patterns go beyond what the basic skills cover. For each, the source repos Accounts can include standard components (BasicWallet, authentication) alongside custom logic at account creation time. Standard components are MASM-only (not callable from Rust), but they are composed into accounts via the testing/deployment infrastructure. The `compiler/` examples show how to compose accounts with multiple components. ### Output Note Creation from Contracts -Create output notes (like P2ID) from within contract code. Requires building a recipient with `note::build_recipient(serial_num, script_root, storage)` and then using `output_note::create(...)`. The `miden-bank/` withdraw pattern demonstrates this end-to-end. +Create output notes (like P2ID) from within contract code. Requires building a recipient with `note::build_recipient(serial_num, script_root, storage)` and then using `output_note::create(...)`. The `tutorials/examples/miden-bank/` withdraw pattern demonstrates this end-to-end. ### Note Storage Protocol -Notes carry storage data as a `Vec` baked at creation time. The `#[note]` macro generates a `TryFrom<&[Felt]>` for the note struct via the `FromFeltRepr` trait, so the `#[note_script]` method receives the deserialized note as `self` (by value); the script reads typed fields with `self.` and never indexes the raw Felt slice. -Attached assets are separate and should be read with `active_note::get_assets()`. +A note's storage is exposed to its `#[note_script]` as a `Vec` via `active_note::get_storage()`; the script reads and parses the items it needs by index. In `tutorials/examples/miden-bank/` the note structs are markers (not auto-populated from storage) and the script slices explicitly — e.g. the withdraw-request note asserts `storage.len() == 14`, then reconstructs the asset, serial number, tag, and note type from the felts. Attached assets are separate and are read with `active_note::get_assets()`. ### Atomic Swaps -The standard SwapNote in `miden-base/` creates a payback P2ID note automatically when consumed. Explore the SwapNote builder to understand tag construction, storage layout, and the payback mechanism. +The standard SwapNote in `protocol/` (`crates/miden-standards/src/note/swap.rs`) creates a payback P2ID note automatically when consumed. Explore the SwapNote builder to understand tag construction, storage layout, and the payback mechanism. ### Account Initialization -Use `#[tx_script]` to initialize accounts before they accept operations. The `miden-bank/` init-tx-script calls `account.initialize()` to set an initialization flag, which is checked before every operation. +Use `#[tx_script]` to initialize accounts before they accept operations. The `tutorials/examples/miden-bank/` init-tx-script calls `account.initialize()` to set an initialization flag, which is checked before every operation. ### Token Creation (Faucets) -Faucet accounts mint and burn fungible or non-fungible tokens. The `compiler/` fungible-faucet example and `miden-base/` BasicFungibleFaucet standard component show how to create and manage tokens. +Faucet accounts mint and burn tokens. The `protocol/` `FungibleFaucet` standard component (`crates/miden-standards/src/account/faucets/fungible/mod.rs`) shows how to create and manage fungible tokens; construct it via `FungibleFaucet::builder().name(..).symbol(..).decimals(..).max_supply(..).build()?`. There is no faucet example in `compiler/examples/`; for an SDK-level faucet binding reference use the compiler's `tests/integration/src/sdk/base/faucet.rs`. ### P2ID with Expiration (P2IDE) -Send assets with a deadline — the sender can reclaim after the block height passes. The `compiler/` p2ide-note example and `miden-base/` P2IDE standard show the timelock pattern. +Send assets with a deadline — the sender can reclaim after the block height passes. The `compiler/` p2ide-note example and `protocol/` P2IDE standard (`crates/miden-standards/src/note/p2ide.rs`) show the timelock pattern. diff --git a/.claude/skills/rust-sdk-testing-patterns/SKILL.md b/.claude/skills/rust-sdk-testing-patterns/SKILL.md index b838ab0..09ea4ae 100644 --- a/.claude/skills/rust-sdk-testing-patterns/SKILL.md +++ b/.claude/skills/rust-sdk-testing-patterns/SKILL.md @@ -1,25 +1,47 @@ --- name: rust-sdk-testing-patterns -description: Guide to testing Miden smart contracts with MockChain. Covers test setup, contract building, account/note creation, transaction execution, storage verification, faucet setup, output note verification, block numbering, multi-transaction tests, and asset-bearing notes. Use when writing, editing, or debugging Miden integration tests. +description: Guide to testing Miden smart contracts with MockChain (Miden v0.15). Covers test setup, contract building, account/note creation, transaction execution, storage verification, faucet setup, output note verification, block numbering, multi-transaction tests, and asset-bearing notes. Use when writing, editing, or debugging Miden integration tests. --- # Miden Testing Patterns (MockChain) +These patterns target Miden **v0.15** (`miden-client`/`miden-standards`/`miden-testing` 0.15.x). + +The **authoritative working example** in this project is the counter contract: [counter_test.rs](../../../integration/tests/counter_test.rs) is a complete test covering imports, MockChain setup, contract building, account creation with storage, note creation, transaction execution, and storage verification. Mirror it for the patterns below. + ## Test File Setup Tests go in `integration/tests/`. All tests are async and use MockChain for local execution without a network. -See [counter_test.rs](../../../integration/tests/counter_test.rs) for a complete working test covering imports, MockChain setup, contract building, account creation with storage, note creation, transaction execution, and storage verification. +The v0.15 imports [counter_test.rs](../../../integration/tests/counter_test.rs) relies on are: + +```rust +use std::{path::Path, sync::Arc}; + +use integration::helpers::{build_project_in_dir, counter_storage_slot, COUNTER_STORAGE_KEY}; +use miden_client::{ + account::{component::InitStorageData, AccountBuilder, AccountComponent, AccountType}, + auth::AuthSchemeId, + crypto::RandomCoin, + note::NoteScript, + transaction::RawOutputNote, + Word, +}; +use miden_standards::testing::note::NoteBuilder; +use miden_testing::{AccountState, Auth, MockChain}; +``` ## Step-by-Step Test Pattern ### 1. Initialize MockChain Builder -See [counter_test.rs](../../../integration/tests/counter_test.rs) line 21 for the pattern: `let mut builder = MockChain::builder();` +Start from `let mut builder = MockChain::builder();` (see [counter_test.rs](../../../integration/tests/counter_test.rs)). ### 2. Create Sender/Wallet Accounts -See [counter_test.rs](../../../integration/tests/counter_test.rs) lines 24-26 for the basic wallet pattern. For wallets with pre-funded assets, use `builder.add_existing_wallet_with_assets(Auth::BasicAuth { auth_scheme: AuthSchemeId::Falcon512Poseidon2 }, [FungibleAsset::new(faucet.id(), 100)?.into()])`. +For a bare wallet use `builder.add_existing_wallet(Auth::BasicAuth { auth_scheme: AuthSchemeId::Falcon512Poseidon2 })` (see [counter_test.rs](../../../integration/tests/counter_test.rs)). For wallets with pre-funded assets, use `builder.add_existing_wallet_with_assets(Auth::BasicAuth { auth_scheme: AuthSchemeId::Falcon512Poseidon2 }, [FungibleAsset::new(faucet.id(), 100)?.into()])`. + +> Auth-scheme naming: `miden_client::auth` re-exports the same protocol enum under two names — `AuthScheme` (the protocol name) and `AuthSchemeId` (an alias). Both compile; the field is `Auth::BasicAuth { auth_scheme }`, and the variant `Falcon512Poseidon2` is the same on both. This project uses `AuthSchemeId::Falcon512Poseidon2`. ### 3. Set Up Faucets (for fungible assets) ```rust @@ -29,83 +51,121 @@ let faucet = builder.add_existing_basic_faucet( }, "TOKEN", // token symbol 1000, // max supply - Some(10), // total_issuance (None for 0) + Some(10), // token_supply (None defaults to 0) )?; ``` +The 4th argument is `token_supply: Option` (an explicit `None` is treated as `0`). + ### 4. Build Contracts -See [counter_test.rs](../../../integration/tests/counter_test.rs) lines 29-35 for the pattern using `build_project_in_dir`. +Build each project from its directory with the `build_project_in_dir` helper, e.g. `let contract_package = Arc::new(build_project_in_dir(Path::new("../contracts/counter-account"), true)?);` (see [counter_test.rs](../../../integration/tests/counter_test.rs) and [integration/src/helpers.rs](../../../integration/src/helpers.rs) `build_project_in_dir`). ### 5. Create Account with Storage **Storage slot naming convention** (CRITICAL): ``` -[component_package_or_name]::[snake_case(component_struct)]::[field_name] +:::: ``` -Examples: -- Package `miden:counter-account`, component `CounterContract`, field `count_map` -> `miden_counter_account::counter_contract::count_map` -- Package `miden:bank-account`, component `BankAccount`, field `balances` -> `miden_bank_account::bank_account::balances` +The slot name is part of the on-chain storage ABI and is derived by the compiler's `#[component_storage]` macro, **not** from the Rust struct name: +- `` is the **bare** package name (`[package].name`), with no `miden:` org prefix. +- `` is the `[lib].namespace` **interface** segment — the text between the last `/` and the `@` in the namespace — snake_cased. Because it comes from the declared namespace, renaming the Rust struct cannot change the deployed slot name. +- `` is the Rust storage field's identifier (not its `description`). + +Characters outside `[A-Za-z0-9_]` are replaced with `_` in each segment. + +Example: package `counter-account` with `[lib].namespace = "miden:counter-account/counter-contract@0.1.0"` (see [contracts/counter-account/miden-project.toml](../../../contracts/counter-account/miden-project.toml)) and storage struct `CounterContractStorage` (field `count_map`) yields the slot: +- `counter_account::counter_contract::count_map` -Rule: Replace characters outside `[A-Za-z0-9_]` with `_` in the package or component name. +Note the middle segment is `counter_contract` (the interface segment from the namespace), **not** `counter_contract_storage` (the struct) and **not** `counter_account`, and there is no `miden_` org prefix. This is exactly the string [integration/src/helpers.rs](../../../integration/src/helpers.rs) passes to `StorageSlotName::new(...)` in `counter_storage_slot()`. -See [counter_test.rs](../../../integration/tests/counter_test.rs) lines 38-54 for the current pattern: populate `InitStorageData`, build the component from the compiled package, then register the account with `builder.add_account_from_builder(...)`. +The component's storage is declared with the v0.15 three-part component macro (`#[component_storage]` struct + `#[component]` trait + `#[component]` impl); the storage struct, not the trait, carries the `#[storage]` fields the slot names derive from. See the `rust-sdk-patterns` skill for the contract side. + +**Authoritative pattern** (from [counter_test.rs](../../../integration/tests/counter_test.rs)): build the `StorageSlotName`, seed the component's initial storage into `InitStorageData`, build the `AccountComponent` from the compiled package, then register the account with `builder.add_account_from_builder(...)`: ```rust let counter_storage_slot = counter_storage_slot()?; let mut init_storage_data = InitStorageData::default(); +// The counter's `count_map` is a `StorageMap`; seed its fixed key with 0 +// so the increment note finds an existing entry. `insert_map_entry(slot_name, key, value)` +// takes three args: `slot_name: impl TryInto`, `key`, `value`. init_storage_data.insert_map_entry(counter_storage_slot.clone(), COUNTER_STORAGE_KEY, 0_u64)?; -let counter_component = - AccountComponent::from_package(&contract_package, &init_storage_data)?; +let counter_component = AccountComponent::from_package(&contract_package, &init_storage_data)?; let counter_account = builder.add_account_from_builder( Auth::BasicAuth { auth_scheme: AuthSchemeId::Falcon512Poseidon2, }, AccountBuilder::new([3_u8; 32]) - .account_type(AccountType::RegularAccountImmutableCode) - .storage_mode(AccountStorageMode::Public) + .account_type(AccountType::Public) .with_component(counter_component), AccountState::Exists, )?; ``` -For a single-value contract slot (paired with `StorageValue` on-chain) instead of a map: +> Account model: +> - `AccountType` is the visibility enum `{ Private, Public }`. +> - Set account visibility via `.account_type(AccountType::Public | ::Private)` — there is no separate `.storage_mode(...)` / `AccountStorageMode` on the builder. +> - Faucet-ness is determined by the installed components. + +For a **single-value** contract slot (a `StorageValue` field on-chain) instead of a map, seed it with `insert_value` — a value slot that has no schema default otherwise makes `AccountComponent::from_package` error with `InitValueNotProvided`: + ```rust +let value_slot = StorageSlotName::new("my_account::my_component::initialized")?; let mut init_storage_data = InitStorageData::default(); init_storage_data.insert_value( - "miden_bank_account::bank_account::initialized", - 0_u64, + StorageValueName::from_slot_name(&value_slot), + Word::default(), // zero Word (an uninitialized flag), NOT a bare integer )?; ``` +> Storage-seeding footgun: `InitStorageData::insert_value(name, value)` takes `value: impl Into`. The numeric `From` impls (`u8`/`u16`/`u32`/`u64`) produce a `WordValue::Atomic(string)` that the slot's schema parses — **not** a felt-positioned `Word`. Only `From` yields `[felt, 0, 0, 0]`, and `From`/`From<[Felt; 4]>`/`From<[u32; 4]>` are fully-typed words. For a `StorageValue` slot whose contract reads index `[0]`, seed a `Word` (`Word::default()` for zero). A map slot (like the counter's `count_map`) is seeded per-entry with `insert_map_entry(...)` instead. + ### 6. Create Notes -See [counter_test.rs](../../../integration/tests/counter_test.rs) lines 56-64 for basic note creation with `RandomCoin`, `NoteScript::from_package`, and `NoteBuilder`. +Build notes with `NoteBuilder`, seeding the `RandomCoin` from the note-script root (see [counter_test.rs](../../../integration/tests/counter_test.rs)): -For notes with assets and inputs: ```rust -use miden_client::{asset::FungibleAsset, crypto::RandomCoin, note::NoteScript, Felt}; +let mut note_rng = RandomCoin::new(Word::from( + NoteScript::from_package(note_package.as_ref())?.root(), +)); +let counter_note = NoteBuilder::new(sender.id(), &mut note_rng) + .package((*note_package).clone()) + .build()?; +``` + +For a note that also carries assets and inputs, configure the extra builder steps: + +```rust +use miden_client::{asset::FungibleAsset, crypto::RandomCoin, note::NoteScript, Felt, Word}; use miden_standards::testing::note::NoteBuilder; -let mut note_rng = RandomCoin::new(NoteScript::from_package(note_package.as_ref())?.root()); +let note_script = NoteScript::from_package(note_package.as_ref())?; +let mut note_rng = RandomCoin::new(Word::from(note_script.root())); let note = NoteBuilder::new(sender.id(), &mut note_rng) .package((*note_package).clone()) .add_assets([FungibleAsset::new(faucet.id(), 50)?.into()]) - .note_storage([Felt::new(42), Felt::new(0)])? + .note_storage([Felt::from(42_u32), Felt::from(0_u32)])? .build()?; ``` +> `NoteScript::root()` returns a `NoteScriptRoot` newtype. `RandomCoin::new` needs a `Word`, so convert the root explicitly with `Word::from(...root())` (equivalently `...root().into()` or `...root().as_word()`). + +> `Felt::new(u64)` is **fallible** — it returns `Result`. `note_storage` takes `impl IntoIterator`, so build each felt with the infallible `Felt::from(42_u32)` for in-range literals (`From/From/From` are infallible); for a `u64` use `Felt::new(n)?` or `Felt::new_unchecked(n)`. + ### 7. Add to MockChain and Build -See [counter_test.rs](../../../integration/tests/counter_test.rs) lines 66-70 for seeding the note and building the mock chain. `add_account_from_builder(...)` has already registered the account in the builder, so at this stage you usually only need to add notes. +Register accounts (`add_account_from_builder(...)` already registered the counter account in Step 5) and seed notes with `builder.add_output_note(RawOutputNote::Full(counter_note.clone()))`, then `let mut mock_chain = builder.build()?;` (see [counter_test.rs](../../../integration/tests/counter_test.rs)). ### 8. Execute Transaction -See [counter_test.rs](../../../integration/tests/counter_test.rs) lines 73-82 for the full execution flow: `build_tx_context` -> `execute()` -> `add_pending_executed_transaction()` -> `prove_next_block()`. The single-transaction counter test does not call `apply_delta()` because `counter_account` is not reused after the build; final state is read from `mock_chain.committed_account(...)` after the block is proven. Multi-transaction tests that keep using the in-memory `Account` variable across steps should call `account.apply_delta(&executed.account_delta())?` after each `execute()` (see "Multi-Transaction Test Pattern" below). +The full execution flow is `build_tx_context` -> `execute()` -> `add_pending_executed_transaction()` -> `prove_next_block()` (see [counter_test.rs](../../../integration/tests/counter_test.rs)). The single-transaction counter test does not call `apply_delta()` because `counter_account` is not reused after the build; final state is read from `mock_chain.committed_account(...)` after the block is proven. Multi-transaction tests that keep using the in-memory `Account` variable across steps should call `account.apply_delta(&executed.account_delta())?` after each `execute()` (see "Multi-Transaction Test Pattern" below). ### 9. Execute with Transaction Script + +A compiler project with `kind = "tx-script"` compiles to a `TransactionScript`-kind package, **not** an `Executable`. Because of that, `TransactionScript::from_package` and `Package::unwrap_program` do **not** apply to it: `from_package` calls `package.try_into_program()`, which returns `Err` for a non-executable package, and `unwrap_program` asserts the kind is `Executable` and **panics**. Build the script from the package's MAST forest plus its entry export instead: + ```rust use miden_client::transaction::TransactionScript; @@ -113,11 +173,14 @@ let tx_script_package = Arc::new(build_project_in_dir( Path::new("../contracts/my-tx-script"), true, )?); -let program = tx_script_package.unwrap_program(); -let tx_script = TransactionScript::new((*program).clone()); + +// Locate the entry export ("main"/"run", or the sole export) and build from parts, e.g. a +// small helper that finds the entry procedure root in the MAST forest and calls +// `TransactionScript::from_parts(package.mast.mast_forest().clone(), entrypoint)`. +let tx_script = build_tx_script_from_package(tx_script_package.as_ref())?; let executed = mock_chain - .build_tx_context(account.clone(), &[], &[])? + .build_tx_context(account.id(), &[], &[])? .tx_script(tx_script) .build()? .execute() @@ -129,18 +192,36 @@ mock_chain.prove_next_block()?; let updated_account = mock_chain.committed_account(account.id())?; ``` +> Reserve `TransactionScript::from_package(&package)?` (and the `#[doc(hidden)]` `unwrap_program()`) for packages that are genuinely `Executable`. For `kind = "tx-script"` compiler packages, use `from_parts` / a `build_tx_script_from_package`-style helper as above — `from_package` returns an error and `unwrap_program()` panics on them. + ### 10. Verify Storage State -See [counter_test.rs](../../../integration/tests/counter_test.rs) lines 84-96 for reading the committed account state and asserting on the result. +Read state with `account.storage().get_item(&slot)` / `.get_map_item(&slot, key)` on an in-memory `Account` you keep `apply_delta`-current, or re-fetch the committed account with `mock_chain.committed_account(account.id())?` after `prove_next_block()` and assert on its storage. Map values come back as scalar words in `[value, 0, 0, 0]` layout, so read index `[0]` (see [counter_test.rs](../../../integration/tests/counter_test.rs)): + +```rust +let count = mock_chain + .committed_account(counter_account.id())? + .storage() + .get_map_item(&counter_storage_slot, COUNTER_STORAGE_KEY) + .expect("Failed to get counter value from storage slot"); +assert_eq!(count[0].as_canonical_u64(), 1); +``` ### 11. Verify Output Notes -**Important**: `add_output_note()` is only available on `MockChainBuilder` (before `build()`); use it to seed the chain with existing notes. To verify output notes from a transaction, use `extend_expected_output_notes()` on `TxContextBuilder`: +**Important**: `add_output_note()` is only available on `MockChainBuilder` (before `build()`) — use it to seed the chain with existing notes. To verify output notes from a transaction, use `extend_expected_output_notes()` on `TxContextBuilder`: ```rust -use miden_client::{note::{Note, NoteAssets, NoteMetadata, NoteRecipient}, transaction::RawOutputNote}; +use miden_client::{ + note::{Note, NoteType, PartialNoteMetadata}, + transaction::RawOutputNote, +}; -let expected_note = Note::new(expected_assets, expected_metadata, expected_recipient); +// Note::new takes a PartialNoteMetadata (sender + note_type + tag). +// Build it with PartialNoteMetadata::new(sender, note_type), +// then optionally `.with_tag(tag)` (the tag defaults to NoteTag::default()). +let partial_metadata = PartialNoteMetadata::new(sender, NoteType::Public).with_tag(tag); +let expected_note = Note::new(expected_assets, partial_metadata, expected_recipient); let tx_context = mock_chain .build_tx_context(account.id(), &[note.id()], &[])? @@ -151,74 +232,70 @@ let tx_context = mock_chain let executed = tx_context.execute().await?; ``` +> Note metadata: +> - `Note::new(assets, partial_metadata, recipient)` takes a `PartialNoteMetadata` (sender/type/tag only); there is no `Into` conversion on the parameter. +> - For attachment-bearing notes use `Note::with_attachments(assets, partial_metadata, recipient, attachments)` (attachments are `NoteAttachments`). + ## MockChain Note Interaction Notes flow through MockChain in four steps: -1. **Build** the note from a compiled `.masp` package (see "Note Construction" below) or via `NoteBuilder`. +1. **Build** the note from a compiled `.masp` package via `NoteBuilder` (see "Note Construction" below). 2. **Seed** with `MockChainBuilder::add_output_note(RawOutputNote::Full(note.clone()))` BEFORE `builder.build()`. This places the note on the chain so a later transaction can consume it. `add_output_note(...)` is only available on the builder; once `builder.build()` returns the `MockChain`, output notes can only appear as the result of executing a transaction. `RawOutputNote` is re-exported from `miden_client::transaction`. 3. **Consume** by passing the note ID to `mock_chain.build_tx_context(account, &[note.id()], &[])`. The transaction's note-script execution reads the consumed note's storage and assets. 4. **Verify** expected output notes with `.extend_expected_output_notes(vec![RawOutputNote::Full(expected.clone())])` on the `TxContextBuilder`. `tx_context.execute().await?` will assert the produced output notes match. After `execute()` and before `add_pending_executed_transaction(...) + prove_next_block()`: if a later step will keep using the in-memory `Account` variable (for example, to build another `tx_context` or assert account state directly), call `account.apply_delta(&executed.account_delta())?` to keep the variable in sync with the chain. Post-block reads should use `mock_chain.committed_account(account.id())?` (see Step 8 above and "Multi-Transaction Test Pattern" below). For block advancement and reference-block semantics, see "MockChain Block Numbering" below. -End-to-end multi-note example: see [miden-bank withdraw_test.rs](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/integration/tests/withdraw_test.rs) for seeding deposit + withdraw-request notes via `add_output_note(RawOutputNote::Full(...))` before `builder.build()`, then consuming the withdraw-request note and asserting an expected P2ID output note via `extend_expected_output_notes(...)` plus `prove_next_block()`. See [miden-bank deposit_test.rs](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/integration/tests/deposit_test.rs) for the simpler single-note consume + prove cycle. - ## Multi-Transaction Test Pattern For contracts requiring initialization before use, each step usually needs its own `execute()` → `add_pending_executed_transaction()` → `prove_next_block()` cycle. Fetch the committed account or note state from `mock_chain` between steps before building the next context. -Call `account.apply_delta(&executed.account_delta())?` after each `execute()` to keep the in-memory `Account` variable in sync with the chain whenever later steps reuse it (for `build_tx_context(...)`, asserting account state directly, etc.). The miden-bank tutorial tests follow this pattern between every `execute()` and `prove_next_block()`. If the test only reads final state via `mock_chain.committed_account(...)` after the last `prove_next_block()` and never reuses the in-memory variable, `apply_delta` is unnecessary; see [counter_test.rs](../../../integration/tests/counter_test.rs). - -See [miden-bank withdraw_test.rs](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/integration/tests/withdraw_test.rs) for a complete multi-transaction test demonstrating: initialize bank → deposit assets → withdraw assets (3 sequential transactions with state verification between each step). - -See [miden-bank deposit_test.rs](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/integration/tests/deposit_test.rs) for an end-to-end asset-bearing note test. +`apply_delta()` is needed whenever you keep reading from / reusing the **same in-memory `Account`** across transactions — whether they land in the same block or in separate blocks. Call `account.apply_delta(&executed.account_delta())?` after each `execute()` (each followed by `add_pending_executed_transaction` + `prove_next_block`) so later local reads like `account.storage().get_map_item(...)` see the latest state. If you instead re-fetch via `mock_chain.committed_account(...)` after `prove_next_block()`, you can skip `apply_delta()` — that is the single-transaction case shown in [counter_test.rs](../../../integration/tests/counter_test.rs), which reads final state only after the last `prove_next_block()` and never reuses the in-memory variable. ## MockChain Block Numbering -Genesis is block 0. Each `prove_next_block()` advances the block number by 1. In contract code, `tx::get_block_number()` returns the **reference block**: the last proven block at the time the transaction started, not the block the transaction will be included in. +Genesis is block 0. Each `prove_next_block()` advances the block number by 1. In contract code, `tx::get_block_number()` returns the **reference block** — the last proven block at the time the transaction started, not the block the transaction will be included in. ## Note Construction -Prefer `NoteBuilder` (or mirror its logic with compiled `.masp` package files) for creating notes in tests. Start from `NoteBuilder::new(sender.id(), &mut note_rng)`, then configure `.package(...)`, optional `.add_assets(...)`, optional `.note_storage(...)`, and finally `.build()`. See [counter_test.rs](../../../integration/tests/counter_test.rs) for the working pattern. - -### Building Notes from `.masp` Packages - -When a test or binary needs full control over the note (custom storage Felts, deterministic serial number, P2ID-style metadata, or a real-client publish + consume flow), build directly from a compiled `.masp` package. The canonical pipeline is `NoteScript::from_package(package.as_ref())` paired with `NoteBuilder::new(sender_id, &mut RandomCoin::new(note_script.root())).package((*package).clone()).note_type(...).tag(...).add_assets(...).note_storage(...).serial_number(...).build()`. Project-template's own [counter_test.rs](../../../integration/tests/counter_test.rs) follows this same shape with `NoteBuilder` directly. - -The miden-bank tutorial codifies this as two helpers built on top of `NoteScript::from_package` + `NoteBuilder`: - -- **Real-client path** (`create_note_from_package`): calls `client.rng().draw_word()` and threads it through `NoteBuilder::serial_number(...)` for a fresh per-note serial. Used when the note will be published via a real `TransactionRequestBuilder`. See [miden-bank helpers.rs](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/integration/src/helpers.rs) (`create_note_from_package`). -- **Deterministic test path** (`create_testing_note_from_package`): omits `serial_number(...)`, letting `NoteBuilder` derive the serial deterministically from `RandomCoin::new(note_script.root())`. Used when seeding `MockChainBuilder` with a freshly-built note. See [miden-bank helpers.rs](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/integration/src/helpers.rs) (`create_testing_note_from_package`). +Prefer `NoteBuilder` for creating notes in tests. Start from `NoteBuilder::new(sender.id(), &mut note_rng)`, then configure `.package(...)`, optional `.note_type(...)`, optional `.tag(...)`, optional `.add_assets(...)`, optional `.note_storage(...)?`, optional `.serial_number(...)`, and finally `.build()?`. Seed the `RandomCoin` from `Word::from(NoteScript::from_package(note_package.as_ref())?.root())` (see Step 6 and [counter_test.rs](../../../integration/tests/counter_test.rs)). -Both helpers take a `NoteCreationConfig` with four fields: `note_type: NoteType`, `tag: NoteTag`, `assets: NoteAssets`, `storage: Vec`. See [miden-bank helpers.rs](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/integration/src/helpers.rs) (`NoteCreationConfig` struct + `Default` impl). To drive a cross-component note (see `rust-sdk-patterns` "Cross-Component Note Pattern"), populate `NoteCreationConfig.storage` with the serialized Felt representation of the typed note struct's fields in declaration order; the `#[note]` macro deserializes that slice into `self` before the script runs. +The serial number is what makes a note unique, and the RNG source differs between the deterministic test path and the real-client path: -Test-side example: see [miden-bank withdraw_test.rs](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/integration/tests/withdraw_test.rs) for a storage vector reaching the note via `NoteCreationConfig { storage, ..Default::default() }` and the seeded `MockChainBuilder.add_output_note(RawOutputNote::Full(...))` call before `builder.build()`. +- **Deterministic test path**: seed the `RandomCoin` from the note-script root and omit `.serial_number(...)`, letting `NoteBuilder` derive the serial deterministically from `RandomCoin::new(Word::from(note_script.root()))`. Used when seeding `MockChainBuilder` with a freshly-built note. See [counter_test.rs](../../../integration/tests/counter_test.rs). +- **Real-client path**: pass the client's RNG directly (`NoteBuilder::new(sender.id(), client.rng())`) so each note gets a fresh serial, then publish it with a real `TransactionRequestBuilder`. See [integration/src/bin/increment_count.rs](../../../integration/src/bin/increment_count.rs), which builds the note with `client.rng()` + `.tag(0)`, publishes it via `TransactionRequestBuilder::new().own_output_notes(vec![note.clone()]).build()?`, and consumes it via `.input_notes([(note.clone(), None)]).build()?`. For the surrounding client setup (CLI side), see the `miden-client-cli` skill. -Binary-side example: see [miden-bank deposit.rs](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/integration/src/bin/deposit.rs) for `build_project_in_dir(...)` to produce the `.masp` package, `create_note_from_package(...)` to assemble the note, then `TransactionRequestBuilder::own_output_notes(vec![note.clone()])` and `input_notes([(note.clone(), None)])` to publish and consume. For the surrounding client setup (CLI side), see the `miden-client-cli` skill. +To drive a **cross-component note** (see the `rust-sdk-patterns` "Cross-Component Note Pattern"), populate the note's `note_storage(...)` with the serialized Felt representation of the typed `#[note]` struct's fields in declaration order; the `#[note]` macro deserializes that slice into `self` before the script runs. The increment note carries no such storage — its `#[note_script] fn run(self, _arg: Word, account: &mut Wallet)` simply calls `account.get_count()` / `account.increment_count()`. ## Asset-Bearing Note Example To create a note that carries fungible assets in tests: -1. Create a `FungibleAsset` from a faucet ID and amount. -2. Seed a `RandomCoin` from `NoteScript::from_package(note_package.as_ref())?.root()`. -3. Pass the asset into `NoteBuilder::add_assets(...)` and any note inputs into `note_storage(...)`. +1. Create a `FungibleAsset` from a faucet ID and amount, e.g. `FungibleAsset::new(faucet.id(), 50)?`, and wrap into `NoteAssets::new(vec![Asset::Fungible(asset)])?` (or pass via `NoteBuilder::add_assets`). +2. Seed a `RandomCoin` from `Word::from(NoteScript::from_package(note_package.as_ref())?.root())` (the conversion turns the `NoteScriptRoot` into the `Word` that `RandomCoin::new` expects). +3. Pass the asset into `NoteBuilder::add_assets(...)` and any note inputs into `note_storage(...)?`. `note_storage` wants `Item = Felt`; build each input with the infallible `Felt::from(_u32)` for in-range literals (not `Felt::new(u64)`, which is fallible), or `Felt::new_unchecked(n)` for u64 inputs (see Step 6). 4. Finish with `.package((*note_package).clone()).build()?`. The faucet must be set up first (see Step 3) and the sender wallet must hold sufficient assets (see Step 2). ## Key Dependencies -See [integration/Cargo.toml](../../../integration/Cargo.toml) for the current dependency versions used in this project. +See [integration/Cargo.toml](../../../integration/Cargo.toml) for the exact versions. The integration crate depends on `cargo-miden = "0.9"` (its `build_project_in_dir` helper calls `cargo_miden::run`) alongside the 0.15 line — `miden-client`, `miden-standards`, `miden-testing`, and `miden-client-sqlite-store` at `0.15`, plus `miden-mast-package = "0.23"` — with no git-rev/branch pins. The contracts it builds depend on the guest SDK `miden = "0.13"` and compile with the released compiler v0.9.0. ## Validation Checklist - [ ] Test function is `async` and uses `#[tokio::test]` -- [ ] Storage slot names follow `package_or_name::component_struct::field_name` pattern +- [ ] Auth uses `AuthSchemeId::Falcon512Poseidon2` (or the equivalent `AuthScheme::Falcon512Poseidon2` — both name the same protocol enum) +- [ ] `AccountBuilder` uses `.account_type(AccountType::Public | ::Private)` and no `.storage_mode(...)` / no `AccountStorageMode` +- [ ] Storage slot names follow `::::` (bare package name, `[lib].namespace` interface segment, e.g. `counter_account::counter_contract::count_map`) +- [ ] Map slots seeded per-entry via `InitStorageData::insert_map_entry(slot, key, value)`; value slots without a schema default seeded via `InitStorageData::insert_value(StorageValueName::from_slot_name(&slot), ..)` with a `Word` (e.g. `Word::default()`), not a bare integer (numeric `Into` yields an atomic string, not a felt-positioned word) - [ ] All contracts built before account/note creation -- [ ] Account storage seeded via `InitStorageData` +- [ ] `NoteScript::root()` converted with `Word::from(...)` before seeding `RandomCoin` +- [ ] Note-storage felts built with infallible `Felt::from(_u32)` or `Felt::new_unchecked(_u64)` (`Felt::new(u64)` returns `Result`, so a bare `[Felt::new(..)]` array does not satisfy `Item = Felt`) +- [ ] `Note::new(...)` is passed a `PartialNoteMetadata` (not `NoteMetadata`) +- [ ] `kind = "tx-script"` packages built with `from_parts` / a `build_tx_script_from_package`-style helper (not `from_package`/`unwrap_program`, which error/panic on them) - [ ] `prove_next_block()` called after `add_pending_executed_transaction()` -- [ ] Post-block assertions read state from `mock_chain.committed_account(...)` or other committed chain views +- [ ] Post-block assertions read state from `mock_chain.committed_account(...)` (or `account.apply_delta(...)` is called when reusing an in-memory `Account` across transactions) - [ ] Notes added to `MockChainBuilder` via `add_output_note(RawOutputNote::Full(...))` before `build()` - [ ] Faucet set up before creating assets From 6a0c467308e4b1fc60e1702beb9ae5a6747accd8 Mon Sep 17 00:00:00 2001 From: keinberger Date: Thu, 27 Aug 2026 12:50:24 +0300 Subject: [PATCH 02/12] chore: migrate project template to Miden v0.16 --- .claude/hooks/build-contracts.sh | 36 +- .claude/skills/local-node-validation/SKILL.md | 57 +- .claude/skills/miden-client-cli/SKILL.md | 52 +- .claude/skills/miden-concepts/SKILL.md | 8 +- .claude/skills/rust-sdk-patterns/SKILL.md | 58 +- .claude/skills/rust-sdk-pitfalls/SKILL.md | 24 +- .claude/skills/rust-sdk-source-guide/SKILL.md | 86 +- .../skills/rust-sdk-testing-patterns/SKILL.md | 58 +- CLAUDE.md | 76 +- Cargo.lock | 3402 ++++++++--------- README.md | 68 +- contracts/counter-account/Cargo.lock | 1251 +++--- contracts/counter-account/Cargo.toml | 5 +- contracts/counter-account/build.rs | 3 + contracts/counter-account/miden-project.toml | 1 + contracts/counter-account/src/lib.rs | 2 + contracts/increment-note/Cargo.lock | 1251 +++--- contracts/increment-note/Cargo.toml | 5 +- contracts/increment-note/build.rs | 3 + contracts/increment-note/miden-project.toml | 5 +- integration/Cargo.toml | 14 +- integration/src/helpers.rs | 150 +- integration/tests/counter_test.rs | 12 +- tasks/lessons.md | 9 + tasks/todo.md | 885 +++++ 25 files changed, 4273 insertions(+), 3248 deletions(-) create mode 100644 contracts/counter-account/build.rs create mode 100644 contracts/increment-note/build.rs create mode 100644 tasks/lessons.md create mode 100644 tasks/todo.md diff --git a/.claude/hooks/build-contracts.sh b/.claude/hooks/build-contracts.sh index df16c55..2996d78 100755 --- a/.claude/hooks/build-contracts.sh +++ b/.claude/hooks/build-contracts.sh @@ -18,26 +18,40 @@ if [[ ! -f "$CARGO_TOML" ]]; then exit 0 fi -# Detect which build tool is available (midenup installs `miden`, cargo install provides `cargo-miden`) -if command -v miden &> /dev/null; then - BUILD_CMD="miden build" -elif cargo miden --version &> /dev/null; then - BUILD_CMD="cargo miden build" -else - echo '{"hookSpecificOutput": {"additionalContext": "Contract build skipped: neither '\''miden'\'' nor '\''cargo-miden'\'' found. Install via midenup or: cargo install cargo-miden"}}' - exit 0 +# Resolve the exact v0.16 compiler independently of ambient PATH. +MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}" +MIDEN_V16_TOOL_ROOT="$MIDEN_CARGO_HOME/miden-v16-0.10.0-rc.1" +CARGO_MIDEN_BIN="$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" +EXPECTED_VERSION="cargo-miden 0.10.0-rc.1" +COMPILER_SOURCE_REVISION="2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" +INSTALL_COMMAND="cargo install cargo-miden --git https://github.com/0xMiden/compiler --rev $COMPILER_SOURCE_REVISION --locked --root $MIDEN_V16_TOOL_ROOT" + +if [[ ! -x "$CARGO_MIDEN_BIN" ]]; then + jq -n --arg ctx "Contract build FAILED: required compiler is not executable at $CARGO_MIDEN_BIN. Expected '$EXPECTED_VERSION' from source revision $COMPILER_SOURCE_REVISION. Install with: $INSTALL_COMMAND" \ + '{"hookSpecificOutput": {"additionalContext": $ctx}}' + exit 2 +fi + +VERSION_OUTPUT=$("$CARGO_MIDEN_BIN" miden --version 2>&1) +VERSION_EXIT=$? + +if [[ $VERSION_EXIT -ne 0 ]] || [[ "$VERSION_OUTPUT" != "$EXPECTED_VERSION" ]]; then + jq -n --arg ctx "Contract build FAILED: compiler at $CARGO_MIDEN_BIN reported '$VERSION_OUTPUT' (exit $VERSION_EXIT); expected '$EXPECTED_VERSION' from source revision $COMPILER_SOURCE_REVISION. Install with: $INSTALL_COMMAND" \ + '{"hookSpecificOutput": {"additionalContext": $ctx}}' + exit 2 fi # Run build once, capturing output -BUILD_OUTPUT=$($BUILD_CMD --manifest-path "$CARGO_TOML" --release 2>&1) +BUILD_OUTPUT=$("$CARGO_MIDEN_BIN" miden build --manifest-path "$CARGO_TOML" --release 2>&1) BUILD_EXIT=$? if [[ $BUILD_EXIT -eq 0 ]]; then - echo '{"hookSpecificOutput": {"additionalContext": "Contract build succeeded"}}' + jq -n --arg ctx "Contract build succeeded with $CARGO_MIDEN_BIN ($EXPECTED_VERSION)" \ + '{"hookSpecificOutput": {"additionalContext": $ctx}}' exit 0 else TAIL_OUTPUT=$(echo "$BUILD_OUTPUT" | tail -20) - jq -n --arg ctx "Contract build FAILED. Fix compilation errors before continuing."$'\n'"$TAIL_OUTPUT" \ + jq -n --arg ctx "Contract build FAILED using $CARGO_MIDEN_BIN ($EXPECTED_VERSION). Fix compilation errors before continuing."$'\n'"$TAIL_OUTPUT" \ '{"hookSpecificOutput": {"additionalContext": $ctx}}' exit 2 fi diff --git a/.claude/skills/local-node-validation/SKILL.md b/.claude/skills/local-node-validation/SKILL.md index 63bd7a7..834cb62 100644 --- a/.claude/skills/local-node-validation/SKILL.md +++ b/.claude/skills/local-node-validation/SKILL.md @@ -14,7 +14,7 @@ MockChain simplifies execution in ways that hide real-world failures: 1. **No automatic block production** -- MockChain requires explicit `prove_next_block()`. A live node produces blocks on the sequencer's configured cadence. 2. **No network transport** -- MockChain does not simulate the network transaction builder (ntx-builder) that handles network notes. 3. **No RPC latency or timeouts** -- MockChain executes locally and instantly. Live nodes have gRPC round-trips with configurable timeouts. -4. **No version negotiation** -- MockChain skips the protocol-version check that a live node negotiates at connect (a mismatched node is rejected). +4. **No live compatibility enforcement** -- MockChain skips the RPC Accept-header check by which a live node rejects incompatible client requests. 5. **Account update block numbers not tracked** -- MockChain returns chain tip instead of actual update block number. 6. **No mempool or batching** -- MockChain does not simulate transaction queuing, batch formation, or block inclusion delays. 7. **`NoteTag(0)` notes are not delivered by default subscriptions** -- live nodes filter `SyncNotes` responses by the tag list each client has subscribed to. `NoteTag::new(0)` has all-zero routing bits, so the default account-derived subscription that `add_account` registers (`NoteTagRecord::with_account_source(NoteTag::with_account_target(id), id)`) does not match it. Such notes still exist on-chain and remain queryable, but a client only receives them during sync if it explicitly tracks tag 0 via `Client::add_note_tag(...)`. MockChain bypasses sync filtering and surfaces these notes anyway, hiding the gap until live validation. Prefer `NoteTag::with_account_target(account_id)`, a use-case tag constructor, or an explicit `add_note_tag` subscription when notes must reach the recipient via sync. @@ -22,14 +22,14 @@ MockChain simplifies execution in ways that hide real-world failures: ## Prerequisites - [ ] MockChain integration tests pass: `cargo test -p integration --release` -- [ ] A Miden node available locally. The node is **not** a single binary -- it is composed of standalone executables (validator, sequencer, ntx-builder, transaction prover). The client's own test infra installs the full set: `miden-validator`, `miden-node`, `miden-ntx-builder`, `miden-remote-prover` (see `scripts/start-test-node.sh` in the `miden-client` repo). Install them from the node source pinned in your client's `Cargo.lock`, or follow the 0xMiden/node quickstart for the authoritative install flow. Match the node to the `miden-client` version in `integration/Cargo.toml` (`miden-client = "0.15"`); `midenup` manages matched toolchains. -- [ ] Working integration binary exists in `integration/src/bin/` (the testnet binary `increment_count.rs` is the starting template for the localhost variant) +- [ ] A Miden node available locally. The node is **not** a single binary -- it is composed of standalone executables (validator, sequencer, ntx-builder, transaction prover). The client's own test infra installs the full set: `miden-validator`, `miden-node`, `miden-ntx-builder`, `miden-remote-prover` (see `scripts/start-test-node.sh` in the `miden-client` repo). Install them from exact source, or follow the 0xMiden/node quickstart for the authoritative install flow. This project pins `miden-client` and its SQLite store to `0.16.0-rc.2` with protocol/standards/testing `0.16.0-rc.6`; its accepted real-node target is exactly `miden-node v0.16.0-rc.1`, whose source manifest pins protocol `0.16.0-rc.4`. Treat that correspondence as the source-derived validation pairing whose runtime status must still be verified before use, not as equality between the two protocol crate versions and not as permission to accept an arbitrary v0.16 node. +- [ ] Working integration binary exists in `integration/src/bin/` (the current `increment_count.rs` targets DevNet; it is the behavior reference when creating a separate localhost validator) > The local-node launch CLI lives in the 0xMiden/node repo, not in `miden-client`. The commands below are the topology the client's `scripts/start-test-node.sh` drives; confirm exact flags against your installed node's `--help` for the version you run. ## Step 1: Clean State and Start Local Node -**Every node session must start from clean state.** Stale store files and keystore directories cause conflicts, deserialization errors, and misleading test results. Always wipe before starting. (Node and client artifacts also do not round-trip across protocol versions, so a fresh store is required after any version change.) +**Every node session must start from clean, task-specific state.** Stale store files and keystore directories cause conflicts, deserialization errors, and misleading test results. Choose fresh paths before starting; move prior state to a recoverable private backup when it must be displaced. Node and client artifacts do not round-trip across protocol versions, so a fresh store is required after any version change. The simplest path is the client's bundled helper script, which installs the node binaries (pinned to your `Cargo.lock`), generates genesis, bootstraps each component, and starts the split topology for you: @@ -42,17 +42,16 @@ The simplest path is the client's bundled helper script, which installs the node This brings up the four-component topology and exposes the RPC on `127.0.0.1:57291` (the client default, `MIDEN_NODE_PORT`). -If you run the node binaries directly instead of via the script, the shape is below. Treat it as a reference skeleton, not a copy-paste recipe: it omits details the script handles for you (it does not show generating the genesis config the validator bootstraps from, and it leaves out the shared network-tx auth header that the sequencer and ntx-builder must agree on or the sequencer rejects the ntx-builder's transactions). Verify every subcommand and flag against `--help` for your node version, or just use the script. +If you run the node binaries directly instead of via the script, the shape is below. Treat it as a reference skeleton, not a copy-paste recipe: it omits details the script handles for you (generating the genesis config, supplying the validator's threshold storage-key material, and providing the shared network-tx auth header that the sequencer and ntx-builder must agree on or the sequencer rejects the ntx-builder's transactions). Verify every subcommand and flag against `--help` for your node version, or just use the script. ```bash -# 1. Bootstrap each component from a generated genesis block -# (the genesis config/block must be produced first; the helper script -# builds it from the client repo before this step) -miden-validator bootstrap --data-directory /validator \ - --genesis-block-directory /genesis --accounts-directory /accounts \ - --genesis-config-file /genesis-config/genesis.toml -miden-node bootstrap --data-directory /node --file /genesis/genesis.dat -miden-ntx-builder bootstrap --data-directory /ntx-builder --file /genesis/genesis.dat +# 1. Generate the genesis block, then bootstrap each component from it. +# The helper script first generates /genesis-config and required account files. +miden-validator genesis --genesis-block-directory /genesis \ + --accounts-directory /accounts --config /genesis-config/genesis.toml +miden-validator bootstrap --data-directory /validator --genesis /genesis/genesis.dat +miden-node bootstrap --data-directory /node --genesis /genesis/genesis.dat +miden-ntx-builder bootstrap --data-directory /ntx-builder --genesis /genesis/genesis.dat # 2. Start the components (validator, then sequencer with the RPC, prover, ntx-builder). # The sequencer and ntx-builder additionally need a matching network-tx auth header @@ -66,7 +65,7 @@ miden-ntx-builder start --listen 127.0.0.1:50301 --rpc.url http://127.0.0.1:5729 --tx-prover.url http://127.0.0.1:50051 --data-directory /ntx-builder ``` -**This clean-start sequence is mandatory every time.** Do not attempt to reuse state from a previous session. +**This clean-start sequence is mandatory every time.** Do not open prior-session state with the new node; use fresh paths or archive the prior state first. ## Step 2: Adapt helpers.rs for Localhost @@ -80,9 +79,8 @@ use miden_client_sqlite_store::ClientBuilderSqliteExt; // required for .sqlite_s ```rust pub async fn setup_local_client() -> Result { - let endpoint = Endpoint::new("http".into(), "localhost".into(), Some(57291)); + let endpoint = Endpoint::localhost(); let timeout_ms = 10_000; - let rpc_client = Arc::new(GrpcClient::new(&endpoint, timeout_ms)); let keystore_path = std::path::PathBuf::from("../local-keystore"); let keystore = Arc::new(FilesystemKeyStore::new(keystore_path) @@ -91,10 +89,9 @@ pub async fn setup_local_client() -> Result { let store_path = std::path::PathBuf::from("../local-store.sqlite3"); let client = ClientBuilder::new() - .rpc(rpc_client) + .grpc_client(&endpoint, Some(timeout_ms)) .sqlite_store(store_path) .authenticator(keystore.clone()) - .in_debug_mode(true.into()) .build() .await .context("Failed to build local Miden client")?; @@ -103,11 +100,11 @@ pub async fn setup_local_client() -> Result { } ``` -Use separate paths (`local-keystore/`, `local-store.sqlite3`) to avoid contaminating testnet state. +Use separate paths (`local-keystore/`, `local-store.sqlite3`) to avoid contaminating remote-network state. Client debug mode was removed in v0.16; do not restore the removed builder toggle or the `MIDEN_DEBUG` environment switch. ## Step 3: Create Local Validation Binary -Create `integration/src/bin/validate_local.rs` mirroring the existing testnet binary (`increment_count.rs`) but using `setup_local_client()`. +Create `integration/src/bin/validate_local.rs` mirroring the existing DevNet binary (`increment_count.rs`) but using `setup_local_client()`. The binary must: 1. Call `setup_local_client()` instead of `setup_client()` @@ -119,7 +116,9 @@ The binary must: 7. Verify final state matches MockChain test expectations 8. Print clear pass/fail for each verification step -Key differences from testnet binary: +The first sync is mandatory in v0.16: transaction inputs are sealed before submission, and the client needs trusted local genesis and chain-tip headers to verify the validator set's shared encryption key. `submit_new_transaction` handles sealing; the paired node must support unsealing and rejects plaintext inputs. + +Key differences from the current DevNet binary: - Localhost endpoint (port 57291) - Separate keystore and store paths - Must handle block production timing (sync + wait between submissions) @@ -128,15 +127,19 @@ Key differences from testnet binary: ## Step 4: Run and Verify -Ensure clean client state before running (the node should already be clean from Step 1): +Ensure clean client state before running (the node should already be clean from Step 1). A pre-v0.16 or other-network SQLite database is not migratable evidence: move it to a recoverable backup or choose a fresh task-specific store path before the v0.16 client opens it. Keep keystores separate by network and do not inspect or print secret material. + +Before submitting, inspect the chain's `verification_base_fee`. The current project flow has unfunded `AuthSingleSig` and `NoAuth` accounts and is valid unchanged only when that value is zero. On a fee-charging chain, signature auth requires committed fee-conversion information and a funded payment asset; `NoAuth` pays in the native fee asset at 1/1, must be funded in that asset, and does not accept explicit conversion information. Stop rather than silently adding funding or changing auth. + ```bash -rm -rf local-keystore/ local-store.sqlite3 cargo run --bin validate_local --release ``` ### Verification Checklist - [ ] `sync_state()` succeeds (node reachable, no version mismatch) +- [ ] The sync stores trusted genesis and chain-tip headers before the first sealed submission +- [ ] `verification_base_fee` is compatible with the accounts' funding and auth setup (zero for the unchanged project flow) - [ ] Account creation succeeds (account appears after sync) - [ ] Note publication succeeds (transaction accepted by node) - [ ] Note consumption succeeds (state transitions as expected) @@ -166,14 +169,16 @@ Look for: | Symptom | Cause | Fix | |---------|-------|-----| | `Unavailable` RPC error | Node not running or wrong port | Start node, verify the sequencer's RPC is listening on 57291 | -| Version mismatch error | Node and client crate versions differ | Run a node built from the node source pinned in your client's `Cargo.lock` (match `miden-client = "0.15"` in `integration/Cargo.toml`); the protocol version is negotiated at connect and a mismatch is rejected | +| Version mismatch error | The node/client stack is not the accepted v0.16 pairing | For this project, require client/store `0.16.0-rc.2`, protocol/standards/testing `0.16.0-rc.6`, and node `0.16.0-rc.1`; verify the node's source/tag and runtime status rather than accepting a generic v0.16 label | +| Submission fails before RPC acceptance | The fresh store has not synced trusted genesis/tip headers, or the node cannot unseal v0.16 inputs | Sync first and use the exact v0.16 node/client pairing; do not downgrade to plaintext submission | +| Authentication aborts while paying a fee | The chain has a nonzero base fee but the account lacks the required fee asset/conversion setup | Fund and configure fees only as an explicitly designed behavior change; the unchanged project requires a zero verification base fee | | Vite or proxy returns 404 on RPC calls from frontend | Proxy targets the wrong path prefix | gRPC paths are `/rpc.Api/` (e.g. `/rpc.Api/Status`, `/rpc.Api/SyncNotes`, `/rpc.Api/GetAccount`); forward the `/rpc.Api` prefix in the proxy config | | Transaction rejected | Invalid proof or state | Check contract code, reset node data, try again | | Account not found after `add_account()` | `add_account()` is local-only; it does not register the account on-chain | Submit a transaction involving the account to deploy it on-chain, then `sync_state()` | -| Store errors or deserialization failures | Stale state from a previous session, or artifacts from an earlier protocol version, which do not round-trip | Wipe the node data, keystore, and client store (`rm -rf local-node-data/ local-keystore/ local-store.sqlite3`), then re-bootstrap from a fresh genesis | +| Store errors or deserialization failures | Stale state from a previous session, or artifacts from an earlier protocol version, which do not round-trip | Re-bootstrap node data from a fresh genesis and give the v0.16 client a fresh SQLite path; archive an existing store instead of opening it with the new client | | `.sqlite_store(..)` does not compile | Extension trait not in scope | `use miden_client_sqlite_store::ClientBuilderSqliteExt;` | | Block not produced | Node produces blocks on the sequencer's configured cadence | Submit a transaction; check the sequencer's `--block.interval` (and `--batch.interval`) settings, or consult `miden-node sequencer --help` | ## Cross-References -- `miden-client-cli`: for driving a running node from the shell (create accounts, mint, send, consume notes) instead of a Rust binary; pair it with this skill's Step 1 node bootstrap for localhost workflows. +- `miden-client-cli`: for driving a running node from the shell (create accounts, mint, transfer, consume notes) instead of a Rust binary; pair it with this skill's Step 1 node bootstrap for localhost workflows. diff --git a/.claude/skills/miden-client-cli/SKILL.md b/.claude/skills/miden-client-cli/SKILL.md index c4f6682..5b27761 100644 --- a/.claude/skills/miden-client-cli/SKILL.md +++ b/.claude/skills/miden-client-cli/SKILL.md @@ -1,58 +1,56 @@ --- name: miden-client-cli -description: Map to the official Miden client CLI. The recommended path is via midenup, which installs a managed `client` toolchain component and is invoked as `miden client ...` (component invocation through the midenup `miden` wrapper). The underlying / direct-install path is the `miden-client-cli` crate (`cargo install miden-client-cli --locked`), which exposes the binary `miden-client` and is invoked as `miden-client ...`. Both paths run the same upstream binary. Covers install, init, network selection, and where to find the canonical command reference and configuration docs. Use when an agent needs to create accounts, query state, mint, send, or consume notes against a running Miden node from the command line; pair with the local-node-validation skill for localhost workflows. +description: Map to the official Miden client CLI. This project uses the exact `miden-client-cli 0.16.0-rc.2` binary, installed directly and invoked as `miden-client ...`; a midenup-managed `miden client ...` component is acceptable only when its reported version is the same exact RC. Covers install, init, network selection, and canonical command/configuration references. Use when an agent needs to create accounts, query state, mint, transfer, or consume notes against a running Miden node; pair with the local-node-validation skill for localhost workflows. --- # Miden Client CLI -The Miden client CLI is the command-line wrapper around the `miden-client` library. It creates accounts, syncs state, mints assets, sends transactions, and consumes notes against a running Miden node. +The Miden client CLI is the command-line wrapper around the `miden-client` library. It creates accounts, syncs state, mints assets, submits transactions, and consumes notes against a running Miden node. -This skill maps agents to the canonical install paths and upstream command reference. Do not memorize commands or config keys here. Follow the links. +This skill maps agents to the exact project version and its upstream command reference. Do not mix a store or command set from another client release into the v0.16 workflow. When to reach for this skill: the user wants to interact with a node from the shell. For Rust-library work against a localhost node from a binary, see the `local-node-validation` skill. For test-side note construction, see `rust-sdk-testing-patterns`. -## Two Invocation Paths +## Exact Project Installation -There are two ways to invoke the same upstream binary. +Install and verify the same client RC used by `integration/Cargo.toml`: -**Through midenup (recommended).** Run `miden client `. This is component invocation: the midenup `miden` wrapper looks up the `client` component in the active toolchain and runs its installed executable. `miden client` is **not** an alias; the midenup README alias table only documents short-hand aliases (such as `miden account`, `miden faucet`, `miden new-wallet`, `miden send`), and component invocation is independent of the alias map. The toolchain manifest declares `installed_executable: miden-client` for the `client` component. +```sh +cargo install miden-client-cli --version 0.16.0-rc.2 --locked +test "$(miden-client --version)" = "miden-client 0.16.0-rc.2" +``` -**Direct install.** Run `cargo install miden-client-cli --locked`, then invoke `miden-client `. This installs the same upstream binary that midenup delegates to. +The midenup `0.16.0` channel does not supply this exact client RC. `miden client ` remains a valid component-invocation mechanism for a managed toolchain, but use it for this project only after `miden client --version` reports exactly `miden-client 0.16.0-rc.2`. Do not assume a channel name proves component identity. -Both paths execute identically. +The exact RC uses `miden-client` and `miden-client-sqlite-store` `0.16.0-rc.2`, backed by protocol/standards/testing `0.16.0-rc.6`. References: -- midenup install, init, toolchain delegation, and alias docs: [github.com/0xMiden/midenup](https://github.com/0xMiden/midenup). midenup is unpublished; the canonical install command is `cargo install --path .` or `cargo install --git `. -- miden-client CLI install and setup: [miden-client `bin/miden-cli/README.md`](https://github.com/0xMiden/miden-client/blob/main/bin/miden-cli/README.md). - -## Install via midenup - -```sh -cargo install midenup && midenup init -midenup install stable -``` - -`midenup init` creates a `miden` symlink in `$CARGO_HOME/bin` (default `~/.cargo/bin`). If `miden` is not found after init, ensure `$CARGO_HOME/bin` is on your `PATH`. +- midenup install, init, toolchain delegation, and alias docs: [github.com/0xMiden/midenup](https://github.com/0xMiden/midenup). +- Pinned CLI install and setup: [miden-client v0.16.0-rc.2 `bin/miden-cli/README.md`](https://github.com/0xMiden/miden-client/blob/v0.16.0-rc.2/bin/miden-cli/README.md). ## First-Time Initialization -`init` writes a `miden-client.toml` config in the current directory: +`init` is optional because the CLI can self-initialize. Explicit initialization is safer when selecting a network and a fresh store. By default it creates global configuration at `~/.miden/miden-client.toml`; pass `--local` to create `./.miden/miden-client.toml`. A local config takes precedence over the global config. + +For this repository's temporary DevNet runtime, use a fresh v0.16 local configuration and store: ```sh -miden client init --network localhost # or testnet | devnet | http://[:port] +miden-client init --local --network devnet --store-path store.sqlite3 ``` -Subsequent commands operate against that config. For localhost workflows, pair this skill with `local-node-validation`: it boots a local node on `http://0.0.0.0:57291` and prepares a clean keystore. +Omitting `--network` selects Testnet. Other accurate choices are `localhost`, `testnet`, or a full custom HTTP(S) RPC URL. Do not open a pre-v0.16 or different-network SQLite store with this client; archive it and initialize a fresh path. For localhost workflows, pair this skill with `local-node-validation`. + +Current v0.16 command changes include `transfer` in place of the removed `send` subcommand, and `account --inspect --verbose` in place of the removed `account --show --with-code`. Use `miden-client --help` for the exact installed command surface. The old client/CLI debug-mode toggle and `--debug` flag are removed. ## Canonical Command Reference -Follow the canonical in-repo references on `0xMiden/miden-client` (the active line, which matches project-template's pinned `miden-client = "0.14"`). The `miden-docs` site (`0xMiden.github.io/miden-docs/...`) is not used here because those URLs are not stable. +Follow the canonical references at the exact `v0.16.0-rc.2` tag, which matches project-template's pinned client. -- CLI Reference: [`docs/external/src/rust-client/cli/index.md`](https://github.com/0xMiden/miden-client/blob/main/docs/external/src/rust-client/cli/index.md) -- CLI Configuration: [`docs/external/src/rust-client/cli/cli-config.md`](https://github.com/0xMiden/miden-client/blob/main/docs/external/src/rust-client/cli/cli-config.md) -- Repo overview and recent release notes: [`0xMiden/miden-client`](https://github.com/0xMiden/miden-client) (browse the `CHANGELOG.md` on `main` for the latest behavioral changes; pin to a release tag if you need a snapshot). +- CLI Reference: [`docs/external/src/rust-client/cli/index.md`](https://github.com/0xMiden/miden-client/blob/v0.16.0-rc.2/docs/external/src/rust-client/cli/index.md) +- CLI Configuration: [`docs/external/src/rust-client/cli/cli-config.md`](https://github.com/0xMiden/miden-client/blob/v0.16.0-rc.2/docs/external/src/rust-client/cli/cli-config.md) +- Release behavior: [`CHANGELOG.md`](https://github.com/0xMiden/miden-client/blob/v0.16.0-rc.2/CHANGELOG.md). -For the live command list and flags on the installed binary, run `miden client --help` (midenup path) or `miden-client --help` (direct-install path). Drill into a specific command with `miden client --help`. The canonical references above remain authoritative for deeper documentation. +For the live command list and flags, run `miden-client --help` and drill into a command with `miden-client --help`. If an exact-version midenup component is deliberately selected, the equivalent invocation is `miden client ...`. ## Cross-References diff --git a/.claude/skills/miden-concepts/SKILL.md b/.claude/skills/miden-concepts/SKILL.md index 547a354..10b601e 100644 --- a/.claude/skills/miden-concepts/SKILL.md +++ b/.claude/skills/miden-concepts/SKILL.md @@ -21,7 +21,7 @@ Key properties: | Transactions involve sender + receiver | Transactions involve **one account only** | | Public state by default | **Private by default** | | Validators execute transactions | **Client executes and proves** locally | -| Gas metering | No gas (computational bounds exist) | +| EVM-style gas metering | Verification fees are chain-configured in v0.16; a zero base fee charges nothing, while computational bounds still apply | | Synchronous contract calls | **Asynchronous** communication via notes | | Accounts are balances + storage | Accounts are **full smart contracts** with code, storage, and vault | @@ -53,6 +53,8 @@ A transaction is a **single-account state transition** with 4 phases: 3. Update account state (storage, vault, nonce) 4. Produce output notes (for other accounts to consume later) +The account's authentication procedure authorizes the transition and handles any v0.16 verification fee. The fee is derived from estimated verification cycles and the reference block's `verification_base_fee`. A zero base fee creates no fee note and needs no conversion information. On a fee-charging chain the vault must hold the payment asset: signature auth can commit explicit fee-conversion information, while `NoAuth` pays only in the native fee asset at 1/1 and rejects explicit conversion information. + **Important**: A two-party transfer (Alice sends Bob tokens) requires TWO transactions: 1. Alice's transaction creates a P2ID note with tokens attached 2. Bob's transaction consumes that note, receiving the tokens @@ -62,7 +64,7 @@ A transaction is a **single-account state transition** with 4 phases: - **Fungible**: asset amount lives in `asset.value[0]` - **Non-fungible**: Unique token tied to a faucet account - Assets live in account **vaults** and move between accounts via notes -- Created by **faucet accounts** using `faucet::create_fungible_asset()` or `faucet::mint()` +- Issued by **faucet accounts**; faucet components define the asset class and their mint/burn procedures operate on assets ### Felt and Word - **Felt**: Field element in the Goldilocks prime field (p = 2^64 - 2^32 + 1). The fundamental data unit. @@ -87,7 +89,7 @@ A transaction is a **single-account state transition** with 4 phases: |-----------|---------| | `BasicWallet` | Standard wallet: `receive_asset()`, `move_asset_to_note()` | | `FungibleFaucet` | Mint/burn fungible tokens; built via `FungibleFaucet::builder()` | -| `NoAuth` | No authentication (for testing) | +| `NoAuth` | No-signature auth for testing/trusted flows; still pays a nonzero fee from the account vault in the native fee asset at 1/1 | | `AuthSingleSig` | Production signature authentication — unified auth component covering both Falcon-512 and ECDSA-K256 key types | **Auth**: `AuthSingleSig` is a single auth component that dispatches on the key type, so one component handles both Falcon-512 and ECDSA-K256 keys. The Falcon-512 scheme uses Poseidon2 as its hash function and is named `Falcon512Poseidon2`. diff --git a/.claude/skills/rust-sdk-patterns/SKILL.md b/.claude/skills/rust-sdk-patterns/SKILL.md index bb5767b..99df962 100644 --- a/.claude/skills/rust-sdk-patterns/SKILL.md +++ b/.claude/skills/rust-sdk-patterns/SKILL.md @@ -29,7 +29,9 @@ struct CounterContractStorage { #[component] trait CounterContract { + #[account_procedure] fn get_count(&self) -> Felt; + #[account_procedure] fn increment_count(&mut self) -> Felt; } @@ -50,11 +52,11 @@ impl CounterContract for CounterContractStorage { } ``` -Only the trait's methods are exported to WIT. Inherent (`impl CounterContractStorage`) methods stay private to the contract — use them for helpers like key derivation. +Only the trait's methods are exported to WIT. Mark every method that must be callable from notes, transaction scripts, foreign procedure invocation, or sibling components with `#[account_procedure]` on the trait declaration; unmarked methods are not account procedures. Inherent (`impl CounterContractStorage`) methods stay private to the contract — use them for helpers like key derivation. See [counter-account/src/lib.rs](../../../contracts/counter-account/src/lib.rs) for the complete working example demonstrating the three-part pattern, typed `StorageMap`, `get()`/`set()`, and felt arithmetic. -**Project metadata for accounts:** See [counter-account/miden-project.toml](../../../contracts/counter-account/miden-project.toml) for `[lib] kind = "account-component"`, the `namespace` (`miden:counter-account/counter-contract@0.1.0`), and `supported-types` under `[package.metadata.miden]`. The `Cargo.toml` (see [counter-account/Cargo.toml](../../../contracts/counter-account/Cargo.toml)) only needs `crate-type = ["cdylib"]` and the `miden` dependency. +**Project metadata for accounts:** See [counter-account/miden-project.toml](../../../contracts/counter-account/miden-project.toml) for `[lib] path = "src/lib.rs"`, `kind = "account-component"`, the `namespace` (`miden:counter-account/counter-contract@0.1.0`), and `supported-types` under `[package.metadata.miden]`. The [counter-account/Cargo.toml](../../../contracts/counter-account/Cargo.toml) retains `crate-type = ["cdylib"]`, pins guest SDK `miden = "=0.14.0-rc.1"` to compiler revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, and pins `miden-sdk-build-script-support` to the same revision under `[build-dependencies]`. Its `build.rs` calls `miden_sdk_build_script_support::prepare_package_cache();`. ### Note Script (`#[note]` / `#[note_script]`) Executes when a note is consumed by an account. Can call component methods on the consuming account. @@ -89,7 +91,7 @@ impl IncrementNote { See [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) for the working example demonstrating `#[note]`, `#[note_script]`, the `#[account(...)]` wrapper, and a cross-component call. -**Project metadata for notes:** See [increment-note/miden-project.toml](../../../contracts/increment-note/miden-project.toml) for `[lib] kind = "note"`, the `namespace` (`miden:increment-note/miden-increment-note@0.1.0`), the path dependency on the called component (`counter-account = { path = "../counter-account" }`), and the cross-component `[package.metadata.miden.dependencies]` WIT entry. +**Project metadata for notes:** See [increment-note/miden-project.toml](../../../contracts/increment-note/miden-project.toml) for `[lib] kind = "note"`, the `namespace` (`miden:increment-note/miden-increment-note@0.1.0`), and the path dependency on the called component (`counter-account = { path = "../counter-account" }`). ### Transaction Script (`#[tx_script]`) One-off logic executed in the context of an account. Used for initialization, admin operations, etc. @@ -136,13 +138,13 @@ Example: package `counter-account` + `namespace = "miden:counter-account/counter | Module | Key Functions | Purpose | |--------|--------------|---------| -| `native_account::` | `add_asset(Asset) -> Word`, `remove_asset(Asset) -> Word`, `incr_nonce() -> Felt`, `get_id() -> AccountId` | Modify current account vault/nonce | -| `active_account::` | `get_id() -> AccountId`, `get_balance(Word) -> Felt` | Query current account (`get_balance` takes the asset key word, not an AccountId) | -| `active_note::` | `get_storage() -> Vec`, `get_assets() -> Vec`, `get_sender() -> AccountId` | Query note being consumed | +| `native_account::` | `add_asset(Asset) -> Word`, `remove_asset(Asset) -> Word`, `incr_nonce() -> Nonce`, `get_id() -> AccountId` | Modify current account vault/nonce | +| `active_account::` | `get_id() -> AccountId`, `get_asset(Word) -> Word`, `has_asset(Word) -> bool` | Query current account and its current vault | +| `active_note::` | `get_storage() -> Vec`, `get_initial_assets() -> Vec`, `get_sender() -> AccountId` | Query the note being consumed and its creation-time assets | | `note::` | `build_recipient(Word, Word, Vec) -> Recipient` | Build note recipients from serial number, script root, and note storage | | `output_note::` | `create(Tag, NoteType, Recipient) -> NoteIdx`, `add_asset(Asset, NoteIdx)` | Create output notes | -| `faucet::` | `create_fungible_asset(Felt) -> Asset`, `mint(Asset)`, `burn(Asset)` | Asset minting | -| `tx::` | `get_block_number() -> Felt`, `get_block_timestamp() -> Felt` | Transaction context | +| `faucet::` | `mint(Asset)`, `burn(Asset)` | Mint or burn a pre-built asset; in-transaction asset construction is unavailable | +| `tx::` | `get_block_number() -> BlockNumber`, `get_block_timestamp() -> u32` | Transaction context | | Intrinsics | `assert(Felt)`, `assertz(Felt)`, `assert_eq(Felt, Felt)` | Validation (`assert` fails unless the felt equals 1; `assertz` fails unless it equals 0) | ## Asset Handling @@ -186,14 +188,13 @@ Because a note script cannot call `native_account::*` (pitfall P11), P2ID creati ## Cross-Component Dependencies -To call another component's methods from a note or tx script, declare the dependency in your `miden-project.toml` in **two places**: +To call another component's methods from a note or tx script, declare the component under `[dependencies]` in `miden-project.toml`: `counter-account = { path = "../counter-account" }`. -- `[dependencies]` — a normal path (or registry) dependency on the component crate: `counter-account = { path = "../counter-account" }`. -- `[package.metadata.miden.dependencies]` — the generated WIT for the component: `counter-account = { wit = "../counter-account/target/generated-wit/" }`. The WIT is produced by building the dependency component first. +WIT is embedded in its compiled package, so no `[package.metadata.miden.dependencies]` entry is needed. A leftover `wit` key is an error for a dependency package that embeds WIT; it survives only as an escape hatch for dependency packages that do not embed WIT. -See [increment-note/miden-project.toml](../../../contracts/increment-note/miden-project.toml) for a working example showing both sections. +See [increment-note/miden-project.toml](../../../contracts/increment-note/miden-project.toml) for the working ordinary path dependency. -Then expose the dependency's methods on the consuming account by declaring an `#[account(package::Interface)]` wrapper (`#[account(counter_account::CounterContract)] pub struct Wallet;`) and calling methods on the injected `account` parameter. The package name is the dependency's Rust-style name (`-` replaced with `_`, so `counter-account` → `counter_account`) and `Interface` is its exported WIT interface in UpperCamelCase (`CounterContract`). See [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs). +Then expose the dependency's methods on the consuming account by declaring an `#[account(package::Interface)]` wrapper (`#[account(counter_account::CounterContract)] pub struct Wallet;`) and calling methods on the injected `account` parameter. The package name is the dependency's Rust-style name (`-` replaced with `_`, so `counter-account` → `counter_account`) and `Interface` is its exported WIT interface in UpperCamelCase (`CounterContract`). The macro generates one trait per referenced interface and implements it for the wrapper. Same-module note and transaction-script entrypoints see that generated trait automatically; callers in another module must import it. Give the wrapper a name different from every generated trait, and use UFCS when multiple generated traits expose the same method name. See [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs). ## Common Type Conversions @@ -230,17 +231,37 @@ extern crate alloc; use alloc::vec::Vec; ``` +## Contract Build Support + +Every contract crate uses the guest SDK at exact revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a` and version `=0.14.0-rc.1`. Add `miden-sdk-build-script-support` from that same immutable revision under `[build-dependencies]`, add a `build.rs` that calls `miden_sdk_build_script_support::prepare_package_cache();`, and set `[lib] path = "src/lib.rs"` in `miden-project.toml`. + +```toml +[dependencies] +miden = { version = "=0.14.0-rc.1", git = "https://github.com/0xMiden/compiler", rev = "2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" } + +[build-dependencies] +miden-sdk-build-script-support = { git = "https://github.com/0xMiden/compiler", rev = "2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" } +``` + +```rust +fn main() { + miden_sdk_build_script_support::prepare_package_cache(); +} +``` + +For plain Cargo and IDE analysis, set `CARGO_MIDEN` to the verified absolute `cargo-miden 0.10.0-rc.1` binary installed from that revision and use a checkout-private `CARGO_TARGET_DIR`. Do not manually set `MIDENC_PACKAGE_CACHE`; the build-support wrapper owns its content-addressed package-cache generations. + ## Cross-Component Note Pattern A note script reads from `active_note::*` and forwards work to a public account-component method through the `#[account(...)]` wrapper. This is the canonical pattern for any note that updates account state, because note scripts cannot call `native_account::*` directly (see `rust-sdk-pitfalls` skill, P11). The `#[note]` macro deserializes the note's inputs into the typed note struct, so serialized note storage is turned into typed fields before the script runs. The `#[note_script]` method receives the deserialized note as `self` (by value) and never indexes a raw Felt slice manually. Alongside the required `Word` arg, the method may optionally accept an `#[account(...)]` wrapper reference (`&Wallet` or `&mut Wallet`). See [compiler/sdk/base-macros/src/lib.rs](https://github.com/0xMiden/compiler/blob/main/sdk/base-macros/src/lib.rs) for the macro contract and [compiler/sdk/base-macros/src/note.rs](https://github.com/0xMiden/compiler/blob/main/sdk/base-macros/src/note.rs) for the generated deserialization (each named field is read via `::from_felt_repr(...)` and EOF is asserted at the end). -Supported field types include `Felt`, the unsigned integer scalars (`u64`, `u32`, `u8`), `bool`, `Option`, and `Vec` via the `FromFeltRepr` trait (`compiler/sdk/field-repr/repr/src/lib.rs`), plus any user type that opts in with `#[derive(FromFeltRepr)]` (this is how `AccountId` supports the macro — see `compiler/sdk/base-sys/src/bindings/types.rs`). Do **not** use `Asset` or `Word` directly as note struct fields; those types do not currently derive `FromFeltRepr`. If you need asset-shaped data inside the note, flatten it into supported scalar fields and reconstruct inside the script, or keep it on the side as a separate `active_note::get_assets()` read. +Supported field types include `Felt`, the unsigned integer scalars (`u64`, `u32`, `u8`), `bool`, `Option`, and `Vec` via the `FromFeltRepr` trait (`compiler/sdk/field-repr/repr/src/lib.rs`), plus any user type that opts in with `#[derive(FromFeltRepr)]` (this is how `AccountId` supports the macro — see `compiler/sdk/base-sys/src/bindings/types.rs`). Do **not** use `Asset` or `Word` directly as note struct fields; those types do not currently derive `FromFeltRepr`. If you need asset-shaped data inside the note, flatten it into supported scalar fields and reconstruct inside the script, or keep it on the side as a separate `active_note::get_initial_assets()` read. For the Cargo.toml / `miden-project.toml` wiring (cross-component dependencies + `#[account(...)]` wrapper), see "Cross-Component Dependencies" above. See [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) for the project-template's local example of the `#[note] struct + #[note] impl` macro form. -**Storage-free case** (unit struct, calls the account wrapper): declare a unit struct (`#[note] struct IncrementNote;`). The script receives the `#[account(...)]` wrapper and calls component methods on it — the counter's [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) is exactly this shape (`account.get_count()` / `account.increment_count()`). For a note that forwards assets, read `active_note::get_sender()` and iterate `active_note::get_assets()`, calling the component method per asset through the wrapper. The macro still generates the deserialization wrapper; for a unit struct it only asserts the note-input Felt slice is empty. +**Storage-free case** (unit struct, calls the account wrapper): declare a unit struct (`#[note] struct IncrementNote;`). The script receives the `#[account(...)]` wrapper and calls component methods on it — the counter's [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) is exactly this shape (`account.get_count()` / `account.increment_count()`). For a note that forwards assets, read `active_note::get_sender()` and iterate `active_note::get_initial_assets()`, calling the component method per asset through the wrapper. The macro still generates the deserialization wrapper; for a unit struct it only asserts the note-input Felt slice is empty. **Typed-storage case** (note carries scripted data): declare named fields on the note struct. The macro deserializes them in declaration order, and the script accesses them via `self.`. Illustrative shape: @@ -278,11 +299,12 @@ Component side: a trait method (e.g. `deposit`) validates the deposit, updates s ## Validation Checklist - [ ] `#![no_std]` and `#![feature(alloc_error_handler)]` at top of every contract -- [ ] Account components use the three-part pattern: `#[component_storage]` struct + `#[component]` trait + `#[component]` impl (never `#[component]` on a struct) +- [ ] Account components use the three-part pattern: `#[component_storage]` struct + `#[component]` trait + `#[component]` impl (never `#[component]` on a struct), with `#[account_procedure]` on every trait method that must be callable as an account procedure - [ ] `crate-type = ["cdylib"]` in `Cargo.toml` -- [ ] Correct `[lib] kind` in `miden-project.toml` (`account-component` / `note` / `tx-script`) with the matching `namespace` +- [ ] Guest `miden = "=0.14.0-rc.1"`, build-support dependency, and `build.rs` all use compiler revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a` +- [ ] Correct `[lib] path = "src/lib.rs"` and `kind` in `miden-project.toml` (`account-component` / `note` / `tx-script`) with the matching `namespace` - [ ] Typed storage uses `StorageValue` / `StorageMap` with `get()` / `set()`; slot names derive from `::::` - [ ] Notes/tx-scripts that call a component declare an `#[account(package::Interface)]` wrapper and call methods on the injected `account` -- [ ] Cross-component deps declared in `miden-project.toml` under both `[dependencies]` (path) and `[package.metadata.miden.dependencies]` (wit) +- [ ] Cross-component deps declared under `[dependencies]` in `miden-project.toml` (no `wit` key: WIT is embedded in the compiled package) - [ ] Felt arithmetic validated before subtraction (see rust-sdk-pitfalls skill) - [ ] Felt comparisons use `.as_canonical_u64()` (see rust-sdk-pitfalls skill) diff --git a/.claude/skills/rust-sdk-pitfalls/SKILL.md b/.claude/skills/rust-sdk-pitfalls/SKILL.md index 8ad7b98..783d443 100644 --- a/.claude/skills/rust-sdk-pitfalls/SKILL.md +++ b/.claude/skills/rust-sdk-pitfalls/SKILL.md @@ -83,7 +83,9 @@ struct CounterContractStorage { // 2. API trait — defines the exported interface. #[component] trait CounterContract { + #[account_procedure] fn get_count(&self) -> Felt; + #[account_procedure] fn increment_count(&mut self) -> Felt; } @@ -103,7 +105,7 @@ impl CounterContract for CounterContractStorage { } ``` -If you need custom keys or values, implement `WordKey` / `WordValue` by converting to and from a single `Word`. +Methods that must be callable from notes, transaction scripts, foreign procedure invocation, or sibling components need `#[account_procedure]` on the `#[component]` trait declaration. Unmarked methods still compile but are not account procedures. If you need custom keys or values, implement `WordKey` / `WordValue` by converting to and from a single `Word`. ## P5: Storage Slot Naming Convention @@ -127,7 +129,7 @@ Storage slot names follow a strict pattern. Getting it wrong often returns the d The integration code depends on this exact name. In `integration/src/helpers.rs`, `counter_storage_slot()` builds it via `StorageSlotName::new("counter_account::counter_contract::count_map")`; a mismatch there reads the default value instead of the seeded one. -**Caveat (toolchain-version dependent)**: This naming is a property of the Rust SDK contract macros, which live in the `miden-base-macros` crate (0.13.0, part of the Rust SDK family alongside `miden` and `miden-base-sys`, all 0.13.0; the separate compiler / `cargo-miden` workspace is versioned 0.9.0). Do not conflate these with the protocol/network version (v0.15). The slot-naming algorithm — `package_name::snake_case(interface_segment)::field`, with non-`[A-Za-z0-9_]` mapped to `_` and `@version` stripped — is stable, but verify against your installed toolchain rather than assuming a protocol version. +**Caveat (toolchain-version dependent)**: This naming is a property of the Rust SDK contract macros. This project pins guest `miden = "=0.14.0-rc.1"` and the compiler/build-support source to immutable revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`; its isolated compiler reports `cargo-miden 0.10.0-rc.1`. Those contract-build versions are a separate line from the host's protocol `0.16.0-rc.6` and client `0.16.0-rc.2`. The slot-naming algorithm — `package_name::snake_case(interface_segment)::field`, with non-`[A-Za-z0-9_]` mapped to `_` and `@version` stripped — is stable, but verify against the pinned guest/compiler source rather than assuming a network version. ## P6: No-std Environment @@ -168,6 +170,8 @@ Use `asset.key` and `asset.value` (or protocol helpers) rather than reconstructi **SDK vs protocol `Asset`**: the two-word `{key, value}` form is the Rust SDK ABI type. At the protocol layer, `Asset` is an enum `{ Fungible, NonFungible }`, and the vault words are obtained via `to_key_word()` / `to_value_word()`. Reading the fungible amount from `value[0]` is correct on both sides. +**Identity rename trap**: do not blindly rename protocol asset identifiers. In the current protocol, `AssetId` is the per-asset vault identity, while `AssetClass` distinguishes assets issued by the same faucet. Classify each use by meaning before changing it; compilation alone cannot detect a semantic swap. + ## P8: Build Recipients with `note::build_recipient` **Severity**: Medium — calling a nonexistent `Recipient::compute` fails to compile @@ -220,7 +224,7 @@ fn p2id_note_root() -> Word { **Risk**: If miden-standards updates the P2ID script, any hardcoded digest becomes invalid and withdrawals silently fail. -**NoteType for P2ID**: P2ID output notes created in contract code are constructed with `NoteType::from(felt!(...))` — `felt!(0)` for private, `felt!(1)` for public (see P10). In v0.15 the kernel rejects any note type other than `0` (private) or `1` (public) with `ERR_NOTE_INVALID_TYPE`. A common working pattern reads the note type from an input note's storage and forwards it through `NoteType::from(note_type)`. +**NoteType for P2ID**: P2ID output notes created in contract code are constructed with `NoteType::from(felt!(...))` — `felt!(0)` for private, `felt!(1)` for public (see P10). The kernel rejects any note type other than `0` (private) or `1` (public) with `ERR_NOTE_INVALID_TYPE`. A common working pattern reads the note type from an input note's storage and forwards it through `NoteType::from(note_type)`. ## P10: NoteType Variants Unavailable in Compiler SDK @@ -250,3 +254,17 @@ See `contracts/increment-note/src/lib.rs` for the wrapper pattern: the note decl **Severity**: Low -- causes incorrect architecture Note inputs (the Felt data the `#[note]` macro deserializes into `self`, read at runtime via `active_note::get_storage()`) are baked at note creation time and cannot be modified after creation. Design the typed note struct's field set and field order carefully before deployment; any later change is a breaking change for existing notes. + +## P13: Compiler and Package-Cache Provenance + +**Severity**: High -- the wrong compiler can build the wrong protocol line or leave stale dependency metadata + +This project uses the isolated `cargo-miden 0.10.0-rc.1` installed from exact compiler revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, not an ambient Cargo subcommand. For direct builds, hooks, tests, plain Cargo, and IDE analysis, derive the binary beneath `${CARGO_HOME:-$HOME/.cargo}/miden-v16-0.10.0-rc.1/bin/cargo-miden`, require its absolute path and exact version, and pass that path through `CARGO_MIDEN` where the build-support wrapper may launch it. + +Every contract crate pins `miden = "=0.14.0-rc.1"` and `miden-sdk-build-script-support` to that same immutable revision, and its `build.rs` calls `prepare_package_cache()`. Use a checkout-private `CARGO_TARGET_DIR`, because Cargo may reuse build-script output between same-name crates that share a target. Never point `MIDENC_PACKAGE_CACHE` at a manually prepared directory to bypass staging; the helper owns its content-addressed generations and must propagate nested build failures. + +## P14: Absolute Account Updates Use Patches + +**Severity**: High -- confusing relative summaries with absolute updates can silently produce the wrong state transition + +An `ExecutedTransaction` exposes an absolute `AccountPatch`; update an in-memory account with `account.apply_patch(executed.account_patch())?`. `TransactionSummary::account_delta()` deliberately remains a relative `AccountDelta` used to describe the transaction summary. Do not substitute that relative summary for an absolute account update. diff --git a/.claude/skills/rust-sdk-source-guide/SKILL.md b/.claude/skills/rust-sdk-source-guide/SKILL.md index 42da0a2..c733d1b 100644 --- a/.claude/skills/rust-sdk-source-guide/SKILL.md +++ b/.claude/skills/rust-sdk-source-guide/SKILL.md @@ -22,7 +22,7 @@ Rule of thumb: if the task involves more than one contract or a pattern not cove This is the single highest-leverage practice for AI-assisted Miden development. -**Build loop**: After every contract edit, run `cargo miden build --manifest-path contracts//Cargo.toml --release`. The project's build hook does this automatically. If the build fails: +**Build loop**: After every contract edit, invoke the verified isolated compiler directly: `"${CARGO_HOME:-$HOME/.cargo}/miden-v16-0.10.0-rc.1/bin/cargo-miden" miden build --manifest-path contracts//Cargo.toml --release`. The project's build hook derives and verifies that same absolute binary independently of ambient `PATH`. If the build fails: 1. Read the error message 2. Translate obvious SDK/compiler errors first: - `.as_u64()` -> `.as_canonical_u64()` @@ -51,7 +51,7 @@ The basic skills (rust-sdk-patterns, rust-sdk-testing-patterns, miden-concepts, - When you find a useful pattern in source, extract just what you need — the exact API call, the exact data layout, the exact test setup. **Using sub-agents for exploration**: -- Launch an explore sub-agent with a specific question: "Find how P2ID output notes are created in the miden-bank example (tutorials/examples/miden-bank)" +- Launch an explore sub-agent with a specific question: "At compiler revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, find how `#[account(...)]` generates and scopes one trait per referenced interface." - The sub-agent searches, reads the relevant files, and returns a focused summary - Your main context stays clean for implementation @@ -72,36 +72,44 @@ When stuck at any stage: search the source repos for a similar working pattern. ## Miden Source Repository Map -Clone these repos alongside your project for reference. Claude will explore them when needed for advanced patterns. +Clone these repos alongside your project for reference. Pin the exact refs before using any file as API evidence. ```bash -# Required: protocol layer — standard note types and account components (crate: miden-protocol) -git clone --branch v0.15.3 https://github.com/0xMiden/protocol.git ../protocol +# Required: protocol layer — standard note types, account components, and MockChain +git clone --branch v0.16.0-rc.6 https://github.com/0xMiden/protocol.git ../protocol # Required: client API for deployment and chain interaction -git clone --branch v0.15.2 https://github.com/0xMiden/rust-sdk.git ../rust-sdk - -# Required: the Rust SDK macros + compiler, released as v0.9.0 (targets VM v0.23 / -# protocol v0.15 and ships the guest SDK crate `miden` at 0.13, build tool `cargo-miden` at 0.9). -# Clone the release tag directly. -git clone --branch v0.9.0 https://github.com/0xMiden/compiler.git ../compiler - -# Recommended: complete working banking app with advanced patterns in `examples/miden-bank`. -# Its v0.15 examples live on branch `kbg/chore/v15-migration` (PR #204) until they land on the -# default branch; pin the reviewed commit for reproducibility. -git clone --branch kbg/chore/v15-migration https://github.com/0xMiden/tutorials.git ../tutorials -git -C ../tutorials checkout a255af7959a441d9a027178631c666949b4af086 +git clone --branch v0.16.0-rc.2 https://github.com/0xMiden/miden-client.git ../miden-client + +# Required: guest SDK macros, examples, build support, and compiler pipeline. +git clone https://github.com/0xMiden/compiler.git ../compiler +git -C ../compiler checkout 2a5ebf830c910aa5f7bf53ee4df398915ab12f7a + +# Required when inspecting MAST/package/VM APIs. +git clone --branch v0.29.1 https://github.com/0xMiden/miden-vm.git ../miden-vm + +# Runtime-only reference for the exact DevNet node package. +git clone --branch v0.16.0-rc.1 https://github.com/0xMiden/miden-node.git ../miden-node ``` -**Note**: The compiler is **released as `v0.9.0`**. Don't conflate the version schemes: the network/protocol is **v0.15**, but the compiler workspace and the `cargo-miden` build tool are **`0.9.0`**, and the guest SDK crates (`miden`, `miden-base-macros`, `miden-base-sys`) are **`0.13.0`** — so contracts depend on `miden = "0.13"` and integration/tooling on `cargo-miden = "0.9"`. The compiler exposes `note::build_recipient` as an SDK-friendly alias for `compute_and_store_recipient`, so the API examples below resolve there. Use the pinned refs above — `compiler` `v0.9.0`, `protocol` `v0.15.3`, `rust-sdk` (client) `v0.15.2`, and `tutorials` pinned at commit `a255af7` on its v0.15 branch — rather than the default branches, since `tutorials`' default branch does not yet carry the v0.15 examples. `--depth 1` is intentionally omitted so you can check out other refs later if needed. +### Two version lines and MSRV + +Do not conflate the contract-build line with the host/runtime line: + +- **Contract build:** guest `miden = "=0.14.0-rc.1"`, `miden-sdk-build-script-support`, `cargo-miden`, and `midenc` come from immutable compiler revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`; both executables report `0.10.0-rc.1`. This compiler source resolves protocol rc.4 and VM 0.29 internally. +- **Host integration:** `miden-client`/SQLite store are `0.16.0-rc.2`, protocol/standards/testing are `0.16.0-rc.6`, and `miden-mast-package` is `0.29.1`. The DevNet node package is `0.16.0-rc.1` and its official source pins protocol rc.4. + +The highest MSRV controls the checkout: compiler/guest work needs Rust 1.97; protocol and VM need 1.96.1; the client needs 1.96. `wasm32-wasip2` is required for contract compilation. The integration crate must not depend on the `cargo-miden` library: `build_project_in_dir()` launches the verified isolated binary and reads its emitted `.masp` with `miden-mast-package 0.29.1`. ### `compiler/` — The Rust-to-MASM Compiler Contains the SDK that powers `#[component]`, `#[note]`, and `#[tx_script]` macros. -- **`examples/`** — 12 working examples covering core SDK patterns: account components, note scripts, transaction scripts, authentication components (NoAuth, RPO Falcon512), wallets, and storage. These are the most reliable reference for "how to write X" questions. Note: there is no faucet example here — for faucet reference, use `crates/miden-standards/src/account/faucets/fungible/mod.rs` (the `FungibleFaucet` component) in the protocol repo, or the compiler's `tests/integration/src/sdk/base/faucet.rs` faucet binding test. +- **`examples/`** — working examples covering core SDK patterns: account components, note scripts, transaction scripts, authentication components (NoAuth, RPO Falcon512), wallets, and storage. These are the most reliable reference for "how to write X" questions. Note: there is no faucet example here — for faucet reference, use `crates/miden-standards/src/account/faucets/fungible/mod.rs` (the `FungibleFaucet` component) in the protocol repo, or the compiler's `tests/integration/src/sdk/base/faucet.rs` faucet binding test. +- **`sdk/sdk/MIGRATION.md`** — authoritative migration notes for contract macros, including `#[account_procedure]`, one generated trait per `#[account(...)]` interface, the required build-support wrapper, and embedded component WIT. +- **`sdk/build-script-support/`** and **`extra/templates/project/`** — authoritative only at the frozen revision for package-cache plumbing and the three packaging adaptations used by this project. -**WARNING**: Stay in `examples/` only. Do NOT explore compiler internals (`sdk/`, `codegen/`, etc.) — they are implementation details that will confuse the agent and lead to incorrect code. +**WARNING**: Prefer `examples/` for contract API patterns. Read `sdk/sdk/MIGRATION.md`, `sdk/build-script-support/`, or template packaging only for the specific build/migration question they define; do not generalize unrelated compiler internals into contract APIs. **Explore when**: Writing any new contract type, finding working code examples for patterns not covered by skills. @@ -114,28 +122,18 @@ The protocol repo (`github.com/0xMiden/protocol`; primary crate `miden-protocol` - **`crates/miden-tx/`** — Rust execution engine (executor, prover, host). Orchestrates transaction execution but rarely needed for understanding contract behavior. Explore only if debugging execution infrastructure or host-level behavior. - **`crates/miden-testing/`** — MockChain implementation internals. Explore when you need to understand testing infrastructure beyond what the rust-sdk-testing-patterns skill covers. -**Note**: Standard components (BasicWallet, etc.) are MASM-only and not callable from Rust SDK (see [compiler#936](https://github.com/0xMiden/compiler/issues/936)). Explore miden-standards to understand note flows and data layouts, not for finding callable Rust APIs. +**Note**: Protocol standard components are composed from host code. A Rust guest can call a component interface only through a built dependency package with embedded WIT and an `#[account(...)]` wrapper; do not assume a host-side standard component automatically supplies that guest interface. Use the frozen compiler `basic-wallet` example when you need a callable Rust component pattern. **Explore when**: Understanding note flows, P2ID/SWAP/faucet data layouts, or what SDK functions actually do under the hood (via the kernel MASM). -### `rust-sdk/` — Client Library +### `miden-client/` — Client Library -The client repo (`github.com/0xMiden/rust-sdk`). Contains the Rust API for deploying contracts and interacting with the Miden network. +The client repo (`github.com/0xMiden/miden-client`). Contains the Rust API for deploying contracts and interacting with the Miden network. - Rust client for building transactions, syncing state, managing accounts and notes - CLI tool source code for reference on client usage patterns -**Explore when**: Deploying contracts to testnet, submitting transactions, syncing state, managing notes on-chain. - -### `tutorials/examples/miden-bank/` — Working Example Application - -A complete banking application built with the Rust SDK, located at `examples/miden-bank/` inside the cloned tutorials repo. Demonstrates advanced patterns that go beyond the basic skills. - -- Multiple contract types working together (account, deposit note, withdraw note, tx script) -- Advanced patterns: `StorageMap` + `StorageValue` composition, felt arithmetic safety, cross-component calls, P2ID output note creation from within contracts -- Multi-step integration tests with output note verification - -**Explore when**: Building multi-contract applications, understanding how pieces fit together, seeing a complete working app end-to-end. +**Explore when**: Deploying contracts to an approved network, submitting transactions, syncing state, and managing notes on-chain. --- @@ -143,15 +141,15 @@ A complete banking application built with the Rust SDK, located at `examples/mid | Building This | Explore These Repos | What to Look For | |---|---|---| -| Account component with storage | `compiler/` examples, `tutorials/examples/miden-bank/` contracts | `StorageMap` / `StorageValue` patterns, pub method signatures | -| Note script | `compiler/` examples, `tutorials/examples/miden-bank/` contracts | `#[note_script]` pattern, cross-component calls, note storage parsing | -| Transaction script | `compiler/` examples, `tutorials/examples/miden-bank/` contracts | `#[tx_script]` pattern, Account binding import | +| Account component with storage | `compiler/` examples, this project's contracts | `StorageMap` / `StorageValue` patterns, `#[account_procedure]` declarations | +| Note script | `compiler/` examples, this project's contracts | `#[note_script]` pattern, generated account-interface traits, typed note fields | +| Transaction script | `compiler/` examples | `#[tx_script]` pattern, generated account-interface traits | | Authentication component | `compiler/` examples | Auth component patterns (NoAuth, RPO Falcon512) | | Faucet (token minting) | `protocol/` standards (`crates/miden-standards/src/account/faucets/fungible/mod.rs`), `compiler/` faucet binding test (`tests/integration/src/sdk/base/faucet.rs`) | `FungibleFaucet` component, `FungibleFaucet::builder()`, mint/burn pattern | -| P2ID output notes | `tutorials/examples/miden-bank/` contracts, `protocol/` standards (data layouts) | `note::build_recipient`, script root, `output_note` creation | +| P2ID output notes | `compiler/` examples, `protocol/` standards (data layouts) | `note::build_recipient`, script root, `output_note` creation | | Swap notes | `protocol/` standards (data layouts) | SwapNote data layout, tag construction, payback flow | -| Multi-step tests | `tutorials/examples/miden-bank/` integration tests | Init → operate → verify flow, output note verification | -| Client deployment | `rust-sdk/` | TransactionRequestBuilder, sync, submit patterns | +| Multi-step tests | `protocol/crates/miden-testing/`, this project's integration test | Build transaction → execute → prove → verify, output note verification | +| Client deployment | `miden-client/` | TransactionRequestBuilder, sync, submit patterns | | SDK function internals | `protocol/` kernel (`crates/miden-protocol/asm/kernels/transaction/`) | `api.masm` for procedure signatures, `lib/*.masm` for implementations | --- @@ -161,19 +159,19 @@ A complete banking application built with the Rust SDK, located at `examples/mid These patterns go beyond what the basic skills cover. For each, the source repos contain working implementations. ### Multi-Component Accounts -Accounts can include standard components (BasicWallet, authentication) alongside custom logic at account creation time. Standard components are MASM-only (not callable from Rust), but they are composed into accounts via the testing/deployment infrastructure. The `compiler/` examples show how to compose accounts with multiple components. +Accounts can include standard components (BasicWallet, authentication) alongside custom logic at account creation time. Host code composes installed components; Rust guest calls additionally require a built dependency package with embedded WIT and an `#[account(...)]` wrapper. The frozen `compiler/` examples show the callable component side. ### Output Note Creation from Contracts -Create output notes (like P2ID) from within contract code. Requires building a recipient with `note::build_recipient(serial_num, script_root, storage)` and then using `output_note::create(...)`. The `tutorials/examples/miden-bank/` withdraw pattern demonstrates this end-to-end. +Create output notes (like P2ID) from within contract code. Requires building a recipient with `note::build_recipient(serial_num, script_root, storage)` and then using `output_note::create(...)`. Ground the exact call shape in the frozen compiler examples and the protocol standard note implementation. ### Note Storage Protocol -A note's storage is exposed to its `#[note_script]` as a `Vec` via `active_note::get_storage()`; the script reads and parses the items it needs by index. In `tutorials/examples/miden-bank/` the note structs are markers (not auto-populated from storage) and the script slices explicitly — e.g. the withdraw-request note asserts `storage.len() == 14`, then reconstructs the asset, serial number, tag, and note type from the felts. Attached assets are separate and are read with `active_note::get_assets()`. +A `#[note]` struct's fields define the serialized Felt representation. The macro deserializes those fields in declaration order into `self` before `#[note_script]` runs; custom field types must implement the current felt-representation traits. Attached assets remain separate and their creation-time values are read with `active_note::get_initial_assets()`. ### Atomic Swaps The standard SwapNote in `protocol/` (`crates/miden-standards/src/note/swap.rs`) creates a payback P2ID note automatically when consumed. Explore the SwapNote builder to understand tag construction, storage layout, and the payback mechanism. ### Account Initialization -Use `#[tx_script]` to initialize accounts before they accept operations. The `tutorials/examples/miden-bank/` init-tx-script calls `account.initialize()` to set an initialization flag, which is checked before every operation. +Use `#[tx_script]` to initialize accounts before they accept operations. Mark the component method with `#[account_procedure]`, expose it through an `#[account(...)]` wrapper, and call it through the generated interface trait. ### Token Creation (Faucets) Faucet accounts mint and burn tokens. The `protocol/` `FungibleFaucet` standard component (`crates/miden-standards/src/account/faucets/fungible/mod.rs`) shows how to create and manage fungible tokens; construct it via `FungibleFaucet::builder().name(..).symbol(..).decimals(..).max_supply(..).build()?`. There is no faucet example in `compiler/examples/`; for an SDK-level faucet binding reference use the compiler's `tests/integration/src/sdk/base/faucet.rs`. diff --git a/.claude/skills/rust-sdk-testing-patterns/SKILL.md b/.claude/skills/rust-sdk-testing-patterns/SKILL.md index 09ea4ae..f1f5f8d 100644 --- a/.claude/skills/rust-sdk-testing-patterns/SKILL.md +++ b/.claude/skills/rust-sdk-testing-patterns/SKILL.md @@ -1,11 +1,11 @@ --- name: rust-sdk-testing-patterns -description: Guide to testing Miden smart contracts with MockChain (Miden v0.15). Covers test setup, contract building, account/note creation, transaction execution, storage verification, faucet setup, output note verification, block numbering, multi-transaction tests, and asset-bearing notes. Use when writing, editing, or debugging Miden integration tests. +description: Guide to testing Miden smart contracts with MockChain on the protocol v0.16 RC stack. Covers test setup, contract building, account/note creation, transaction execution, storage verification, faucet setup, output note verification, block numbering, multi-transaction tests, and asset-bearing notes. Use when writing, editing, or debugging Miden integration tests. --- # Miden Testing Patterns (MockChain) -These patterns target Miden **v0.15** (`miden-client`/`miden-standards`/`miden-testing` 0.15.x). +These patterns target the frozen v0.16 RC stack: `miden-client 0.16.0-rc.2`, protocol/standards/testing `0.16.0-rc.6`, and `miden-mast-package 0.29.1`. The **authoritative working example** in this project is the counter contract: [counter_test.rs](../../../integration/tests/counter_test.rs) is a complete test covering imports, MockChain setup, contract building, account creation with storage, note creation, transaction execution, and storage verification. Mirror it for the patterns below. @@ -13,14 +13,16 @@ The **authoritative working example** in this project is the counter contract: [ Tests go in `integration/tests/`. All tests are async and use MockChain for local execution without a network. -The v0.15 imports [counter_test.rs](../../../integration/tests/counter_test.rs) relies on are: +The imports [counter_test.rs](../../../integration/tests/counter_test.rs) relies on are: ```rust use std::{path::Path, sync::Arc}; use integration::helpers::{build_project_in_dir, counter_storage_slot, COUNTER_STORAGE_KEY}; use miden_client::{ - account::{component::InitStorageData, AccountBuilder, AccountComponent, AccountType}, + account::{ + component::InitStorageData, AccountBuilder, AccountComponent, AccountType, StorageMapKey, + }, auth::AuthSchemeId, crypto::RandomCoin, note::NoteScript, @@ -80,7 +82,7 @@ Example: package `counter-account` with `[lib].namespace = "miden:counter-accoun Note the middle segment is `counter_contract` (the interface segment from the namespace), **not** `counter_contract_storage` (the struct) and **not** `counter_account`, and there is no `miden_` org prefix. This is exactly the string [integration/src/helpers.rs](../../../integration/src/helpers.rs) passes to `StorageSlotName::new(...)` in `counter_storage_slot()`. -The component's storage is declared with the v0.15 three-part component macro (`#[component_storage]` struct + `#[component]` trait + `#[component]` impl); the storage struct, not the trait, carries the `#[storage]` fields the slot names derive from. See the `rust-sdk-patterns` skill for the contract side. +The component's storage is declared with the three-part component macro (`#[component_storage]` struct + `#[component]` trait + `#[component]` impl); the storage struct, not the trait, carries the `#[storage]` fields the slot names derive from. Callable component methods carry `#[account_procedure]` on the trait declaration. See the `rust-sdk-patterns` skill for the contract side. **Authoritative pattern** (from [counter_test.rs](../../../integration/tests/counter_test.rs)): build the `StorageSlotName`, seed the component's initial storage into `InitStorageData`, build the `AccountComponent` from the compiled package, then register the account with `builder.add_account_from_builder(...)`: @@ -160,7 +162,19 @@ Register accounts (`add_account_from_builder(...)` already registered the counte ### 8. Execute Transaction -The full execution flow is `build_tx_context` -> `execute()` -> `add_pending_executed_transaction()` -> `prove_next_block()` (see [counter_test.rs](../../../integration/tests/counter_test.rs)). The single-transaction counter test does not call `apply_delta()` because `counter_account` is not reused after the build; final state is read from `mock_chain.committed_account(...)` after the block is proven. Multi-transaction tests that keep using the in-memory `Account` variable across steps should call `account.apply_delta(&executed.account_delta())?` after each `execute()` (see "Multi-Transaction Test Pattern" below). +Build the transaction with the current staged builder, then execute and prove it (see [counter_test.rs](../../../integration/tests/counter_test.rs)): + +```rust +let tx_context = mock_chain + .build_transaction(counter_account.clone()) + .authenticated_input_notes([counter_note.id()]) + .build()?; +let executed = tx_context.execute().await?; +mock_chain.add_pending_executed_transaction(&executed)?; +mock_chain.prove_next_block()?; +``` + +The single-transaction counter test does not patch `counter_account` because it is not reused after the build; final state is read from `mock_chain.committed_account(...)` after the block is proven. Multi-transaction tests that retain an in-memory `Account` apply the executed transaction's absolute patch after each execution (see "Multi-Transaction Test Pattern" below). ### 9. Execute with Transaction Script @@ -180,7 +194,7 @@ let tx_script_package = Arc::new(build_project_in_dir( let tx_script = build_tx_script_from_package(tx_script_package.as_ref())?; let executed = mock_chain - .build_tx_context(account.id(), &[], &[])? + .build_transaction(account.clone()) .tx_script(tx_script) .build()? .execute() @@ -196,20 +210,23 @@ let updated_account = mock_chain.committed_account(account.id())?; ### 10. Verify Storage State -Read state with `account.storage().get_item(&slot)` / `.get_map_item(&slot, key)` on an in-memory `Account` you keep `apply_delta`-current, or re-fetch the committed account with `mock_chain.committed_account(account.id())?` after `prove_next_block()` and assert on its storage. Map values come back as scalar words in `[value, 0, 0, 0]` layout, so read index `[0]` (see [counter_test.rs](../../../integration/tests/counter_test.rs)): +Read state with `account.storage().get_item(&slot)` / `.get_map_item(&slot, StorageMapKey::new(key))` on an in-memory `Account` you keep patch-current, or re-fetch the committed account with `mock_chain.committed_account(account.id())?` after `prove_next_block()` and assert on its storage. Map values come back as scalar words in `[value, 0, 0, 0]` layout, so read index `[0]` (see [counter_test.rs](../../../integration/tests/counter_test.rs)): ```rust let count = mock_chain .committed_account(counter_account.id())? .storage() - .get_map_item(&counter_storage_slot, COUNTER_STORAGE_KEY) + .get_map_item( + &counter_storage_slot, + StorageMapKey::new(COUNTER_STORAGE_KEY), + ) .expect("Failed to get counter value from storage slot"); assert_eq!(count[0].as_canonical_u64(), 1); ``` ### 11. Verify Output Notes -**Important**: `add_output_note()` is only available on `MockChainBuilder` (before `build()`) — use it to seed the chain with existing notes. To verify output notes from a transaction, use `extend_expected_output_notes()` on `TxContextBuilder`: +**Important**: `add_output_note()` is only available on `MockChainBuilder` (before `build()`) — use it to seed the chain with existing notes. To verify output notes from a transaction, use `expected_output_notes()` on the transaction builder: ```rust use miden_client::{ @@ -224,8 +241,9 @@ let partial_metadata = PartialNoteMetadata::new(sender, NoteType::Public).with_t let expected_note = Note::new(expected_assets, partial_metadata, expected_recipient); let tx_context = mock_chain - .build_tx_context(account.id(), &[note.id()], &[])? - .extend_expected_output_notes(vec![RawOutputNote::Full(expected_note)]) + .build_transaction(account.clone()) + .authenticated_input_notes([note.id()]) + .expected_output_notes(vec![RawOutputNote::Full(expected_note)]) .build()?; // execute() will verify output notes match @@ -242,16 +260,18 @@ Notes flow through MockChain in four steps: 1. **Build** the note from a compiled `.masp` package via `NoteBuilder` (see "Note Construction" below). 2. **Seed** with `MockChainBuilder::add_output_note(RawOutputNote::Full(note.clone()))` BEFORE `builder.build()`. This places the note on the chain so a later transaction can consume it. `add_output_note(...)` is only available on the builder; once `builder.build()` returns the `MockChain`, output notes can only appear as the result of executing a transaction. `RawOutputNote` is re-exported from `miden_client::transaction`. -3. **Consume** by passing the note ID to `mock_chain.build_tx_context(account, &[note.id()], &[])`. The transaction's note-script execution reads the consumed note's storage and assets. -4. **Verify** expected output notes with `.extend_expected_output_notes(vec![RawOutputNote::Full(expected.clone())])` on the `TxContextBuilder`. `tx_context.execute().await?` will assert the produced output notes match. +3. **Consume** with `mock_chain.build_transaction(account.clone()).authenticated_input_notes([note.id()])`. The transaction's note-script execution reads the consumed note's storage and assets. +4. **Verify** expected output notes with `.expected_output_notes(vec![RawOutputNote::Full(expected.clone())])` on the transaction builder. `tx_context.execute().await?` will assert the produced output notes match. -After `execute()` and before `add_pending_executed_transaction(...) + prove_next_block()`: if a later step will keep using the in-memory `Account` variable (for example, to build another `tx_context` or assert account state directly), call `account.apply_delta(&executed.account_delta())?` to keep the variable in sync with the chain. Post-block reads should use `mock_chain.committed_account(account.id())?` (see Step 8 above and "Multi-Transaction Test Pattern" below). For block advancement and reference-block semantics, see "MockChain Block Numbering" below. +After `execute()` and before reusing the in-memory `Account` variable, call `account.apply_patch(executed.account_patch())?` to apply the transaction's absolute `AccountPatch`. Post-block reads may instead use `mock_chain.committed_account(account.id())?` (see Step 8 above and "Multi-Transaction Test Pattern" below). For block advancement and reference-block semantics, see "MockChain Block Numbering" below. ## Multi-Transaction Test Pattern For contracts requiring initialization before use, each step usually needs its own `execute()` → `add_pending_executed_transaction()` → `prove_next_block()` cycle. Fetch the committed account or note state from `mock_chain` between steps before building the next context. -`apply_delta()` is needed whenever you keep reading from / reusing the **same in-memory `Account`** across transactions — whether they land in the same block or in separate blocks. Call `account.apply_delta(&executed.account_delta())?` after each `execute()` (each followed by `add_pending_executed_transaction` + `prove_next_block`) so later local reads like `account.storage().get_map_item(...)` see the latest state. If you instead re-fetch via `mock_chain.committed_account(...)` after `prove_next_block()`, you can skip `apply_delta()` — that is the single-transaction case shown in [counter_test.rs](../../../integration/tests/counter_test.rs), which reads final state only after the last `prove_next_block()` and never reuses the in-memory variable. +Whenever a test keeps reading from or reusing the **same in-memory `Account`** across transactions, call `account.apply_patch(executed.account_patch())?` after each `execute()` so later local reads see the latest absolute state. If you instead re-fetch via `mock_chain.committed_account(...)` after `prove_next_block()`, no local patch is needed; that is the single-transaction case shown in [counter_test.rs](../../../integration/tests/counter_test.rs). + +Do not generalize this rename to transaction summaries: `TransactionSummary::account_delta()` intentionally returns a relative `AccountDelta`. That relative summary is valid for commitment/summary assertions, while account mutation uses `AccountPatch` and `apply_patch()`. ## MockChain Block Numbering @@ -281,7 +301,7 @@ The faucet must be set up first (see Step 3) and the sender wallet must hold suf ## Key Dependencies -See [integration/Cargo.toml](../../../integration/Cargo.toml) for the exact versions. The integration crate depends on `cargo-miden = "0.9"` (its `build_project_in_dir` helper calls `cargo_miden::run`) alongside the 0.15 line — `miden-client`, `miden-standards`, `miden-testing`, and `miden-client-sqlite-store` at `0.15`, plus `miden-mast-package = "0.23"` — with no git-rev/branch pins. The contracts it builds depend on the guest SDK `miden = "0.13"` and compile with the released compiler v0.9.0. +See [integration/Cargo.toml](../../../integration/Cargo.toml) for the exact host versions: client/SQLite store `0.16.0-rc.2`, protocol/standards/testing `0.16.0-rc.6`, and MAST package `0.29.1`. The integration graph intentionally has no `cargo-miden` library dependency. `build_project_in_dir()` launches the isolated absolute `cargo-miden 0.10.0-rc.1` binary installed from compiler revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, parses its `Compiled ` report, and deserializes the package. Contract manifests pin guest `miden = "=0.14.0-rc.1"` and build support to that same revision. ## Validation Checklist @@ -291,11 +311,13 @@ See [integration/Cargo.toml](../../../integration/Cargo.toml) for the exact vers - [ ] Storage slot names follow `::::` (bare package name, `[lib].namespace` interface segment, e.g. `counter_account::counter_contract::count_map`) - [ ] Map slots seeded per-entry via `InitStorageData::insert_map_entry(slot, key, value)`; value slots without a schema default seeded via `InitStorageData::insert_value(StorageValueName::from_slot_name(&slot), ..)` with a `Word` (e.g. `Word::default()`), not a bare integer (numeric `Into` yields an atomic string, not a felt-positioned word) - [ ] All contracts built before account/note creation +- [ ] Transactions use `build_transaction(...).authenticated_input_notes([...]).build()` +- [ ] Host map lookups wrap keys with `StorageMapKey::new(...)`; `InitStorageData::insert_map_entry(...)` still accepts the raw schema key - [ ] `NoteScript::root()` converted with `Word::from(...)` before seeding `RandomCoin` - [ ] Note-storage felts built with infallible `Felt::from(_u32)` or `Felt::new_unchecked(_u64)` (`Felt::new(u64)` returns `Result`, so a bare `[Felt::new(..)]` array does not satisfy `Item = Felt`) - [ ] `Note::new(...)` is passed a `PartialNoteMetadata` (not `NoteMetadata`) - [ ] `kind = "tx-script"` packages built with `from_parts` / a `build_tx_script_from_package`-style helper (not `from_package`/`unwrap_program`, which error/panic on them) - [ ] `prove_next_block()` called after `add_pending_executed_transaction()` -- [ ] Post-block assertions read state from `mock_chain.committed_account(...)` (or `account.apply_delta(...)` is called when reusing an in-memory `Account` across transactions) +- [ ] Post-block assertions read state from `mock_chain.committed_account(...)` (or `account.apply_patch(executed.account_patch())` is called when reusing an in-memory `Account` across transactions) - [ ] Notes added to `MockChainBuilder` via `add_output_note(RawOutputNote::Full(...))` before `build()` - [ ] Faucet set up before creating assets diff --git a/CLAUDE.md b/CLAUDE.md index e201750..ced0621 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -12,17 +12,78 @@ This is a Miden smart contract project using the Rust SDK and compiler. ## Build & Test -Contracts are built individually with cargo-miden (not `cargo build`): +This project uses an immutable v0.16 compiler pipeline rather than the ambient `cargo-miden` or +the v0.16 midenup channel. Install `cargo-miden` and `midenc` from compiler revision +`2a5ebf830c910aa5f7bf53ee4df398915ab12f7a` as shown in `README.md`. Derive and verify the isolated +binary in every shell: + +```bash +MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}" +MIDEN_V16_TOOL_ROOT="$MIDEN_CARGO_HOME/miden-v16-0.10.0-rc.1" +CARGO_MIDEN_BIN="$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" +test "$("$CARGO_MIDEN_BIN" miden --version)" = 'cargo-miden 0.10.0-rc.1' +test "$("$MIDEN_V16_TOOL_ROOT/bin/midenc" --version)" = 'midenc 0.10.0-rc.1' ``` -cargo miden build --manifest-path contracts//Cargo.toml --release + +Contracts are built individually with that exact binary: + +```bash +"$CARGO_MIDEN_BIN" miden build \ + --manifest-path contracts//Cargo.toml --release ``` Tests run via the workspace: -``` + +```bash cargo test -p integration --release ``` Always build contracts before running tests; tests compile contracts via `build_project_in_dir()`. +That helper independently derives and version-checks the same isolated compiler. + +The post-edit hook also derives +`${CARGO_HOME:-$HOME/.cargo}/miden-v16-0.10.0-rc.1/bin/cargo-miden` on every invocation and rejects a +missing or mismatched compiler. It never selects `miden`, `cargo miden`, or `cargo-miden` from +ambient `PATH`. + +### Per-contract build support + +Every contract manifest must use the pinned guest SDK and build-support source: + +```toml +[dependencies] +miden = { version = "=0.14.0-rc.1", git = "https://github.com/0xMiden/compiler", rev = "2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" } + +[build-dependencies] +miden-sdk-build-script-support = { git = "https://github.com/0xMiden/compiler", rev = "2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" } +``` + +Each contract's `build.rs` is exactly: + +```rust +fn main() { + miden_sdk_build_script_support::prepare_package_cache(); +} +``` + +For plain `cargo check` or IDE analysis, run Cargo from the contract directory so its +`.cargo/config.toml` is discovered, set `CARGO_MIDEN` to the verified absolute binary, and use a +checkout-private target directory: + +```bash +PROJECT_ROOT="$PWD" +PLAIN_CARGO_TARGET="$PROJECT_ROOT/target/plain-cargo-v16" +( + cd contracts/counter-account + env -u MIDENC_PACKAGE_CACHE \ + CARGO_MIDEN="$CARGO_MIDEN_BIN" \ + CARGO_TARGET_DIR="$PLAIN_CARGO_TARGET" \ + cargo check --release +) +``` + +Do not set `MIDENC_PACKAGE_CACHE` manually. `prepare_package_cache()` stages dependency packages +under the contract's build output and exports the selected cache to macro expansion. ## SDK Quick Reference @@ -32,9 +93,14 @@ See the working examples in this project: - `integration/tests/counter_test.rs`: MockChain integration test Common cargo commands: -- `cargo build -p integration --bin --release`: build a specific binary from the integration crate (e.g. `validate_local`, `increment_count`) +- `cargo build -p integration --bin increment_count --release`: build the project's single binary - `cargo clean -p integration`: run after editing shared library code (e.g. `helpers.rs`) before re-running tests, to avoid stale compiled binaries +`increment_count` currently uses the helper's temporary hard-coded DevNet endpoint +`https://rpc.devnet.miden.io`. Run it from `integration/` because its contract and store paths are +relative to that directory. It creates public DevNet accounts, adds a sender key to the existing +keystore, and submits transactions; returned IDs are submission evidence, not proof of finality. + ## Critical Pitfalls **Felt arithmetic is modular (SECURITY CRITICAL)**: Subtraction wraps around the field modulus instead of panicking. ALWAYS validate before subtraction: @@ -62,5 +128,5 @@ For complex applications beyond basic patterns (multi-contract apps, novel note After modifying contract code, always: 1. Write tests alongside contracts; tests are the primary verification, builds are the secondary check -2. Build the contract: `cargo miden build --manifest-path contracts//Cargo.toml --release` +2. Build the contract: `"$CARGO_MIDEN_BIN" miden build --manifest-path contracts//Cargo.toml --release` 3. Run tests: `cargo test -p integration --release` diff --git a/Cargo.lock b/Cargo.lock index eec269a..352629b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,39 +2,13 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" -dependencies = [ - "lazy_static", - "regex", -] - [[package]] name = "addr2line" version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" dependencies = [ - "gimli 0.32.3", -] - -[[package]] -name = "addr2line" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59317f77929f0e679d39364702289274de2f0f0b22cbf50b2b8cff2169a0b27a" -dependencies = [ - "cpp_demangle", - "fallible-iterator", - "gimli 0.33.0", - "memmap2", - "object 0.39.1", - "rustc-demangle", - "smallvec", - "typed-arena", + "gimli", ] [[package]] @@ -45,40 +19,28 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aead" -version = "0.5.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +checksum = "1973cfbc1a2daf9cf550e74e1f088c28e7f7d8c1e1418fb6c9dc5184b7e84c99" dependencies = [ - "crypto-common 0.1.7", - "generic-array", + "crypto-common 0.2.2", + "inout", ] [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] -[[package]] -name = "allocator-api2" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" - -[[package]] -name = "allocator-api2" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c880a97d28a3681c0267bd29cff89621202715b065127cd445fa0f0fe0aa2880" - [[package]] name = "alloy-primitives" -version = "1.6.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4885c1409b6936c4898e646ef58baf6ec54edaf6d8179f79df805a7b85b7cf3e" +checksum = "9c902f0ca3f8353c41e3e1ec3cf26be49412525bc48ab9d3c4710d7be4f01832" dependencies = [ "bytes", "cfg-if", @@ -87,47 +49,56 @@ dependencies = [ "itoa", "paste", "ruint", - "rustc-hash", "sha3 0.11.0", ] +[[package]] +name = "alloy-rlp" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24671b1f62edcf0f9b62994c7bf72cd621a04a4b99f5020ece1a647b40e2f103" +dependencies = [ + "arrayvec", + "bytes", +] + [[package]] name = "alloy-sol-macro" -version = "1.6.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "840128ed2b2971d6d4668a553fe403a82683d3acc646c73e75887e7157408033" +checksum = "fdcbd48d60e029be4a325c3a2f1312761caea4ed249f18ba9e8ed24ca1bf01e6" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", - "proc-macro-error2", + "proc-macro-error3", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "alloy-sol-macro-expander" -version = "1.6.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63ec265e5d65d725175f6ca7711c970824c90ef9c0d1f1973711d4150ee612dd" +checksum = "59c9f7c535f99a7e7b64cc520968b09ed14cec3715572fcc277cfbff602808cd" dependencies = [ "alloy-sol-macro-input", "const-hex", "heck", - "indexmap", - "proc-macro-error2", + "indexmap 2.14.0", + "proc-macro-error3", "proc-macro2", "quote", "sha3 0.11.0", - "syn 2.0.118", + "syn 2.0.119", "syn-solidity", ] [[package]] name = "alloy-sol-macro-input" -version = "1.6.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89bf01077f18650876cfa682eb1f949967b5cde03f1a51c955c469d2c9b4aa67" +checksum = "1abd404fbc12f543823005146b73fd07621bdc0baaa950d26995c543a9d73811" dependencies = [ "const-hex", "dunce", @@ -135,15 +106,15 @@ dependencies = [ "macro-string", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", "syn-solidity", ] [[package]] name = "alloy-sol-types" -version = "1.6.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384cf252de0db2dec52821eac037a7f57e2aa33fe5b900ce6fe39973402341f1" +checksum = "adfc2ba3fb0e865de4934bcad6d37fc51e9ffcd5294be1322eab38e4494e051b" dependencies = [ "alloy-primitives", "alloy-sol-macro", @@ -151,9 +122,9 @@ dependencies = [ [[package]] name = "android_system_properties" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" dependencies = [ "libc", ] @@ -210,46 +181,288 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.103" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] -name = "anymap2" -version = "0.13.0" +name = "ark-ff" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint 0.4.8", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] [[package]] -name = "arrayref" -version = "0.3.9" +name = "ark-ff" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint 0.4.8", + "num-traits", + "paste", + "rustc_version 0.4.1", + "zeroize", +] [[package]] -name = "arrayvec" -version = "0.7.8" +name = "ark-ff" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" +checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" +dependencies = [ + "ark-ff-asm 0.5.0", + "ark-ff-macros 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "arrayvec", + "digest 0.10.7", + "educe", + "itertools 0.13.0", + "num-bigint 0.4.8", + "num-traits", + "paste", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7a806ac6c8307b929df4645776290a50ee2aac754ad09d8bdf73391309e43af" +dependencies = [ + "ark-ff-asm 0.6.0", + "ark-ff-macros 0.6.0", + "ark-serialize 0.6.0", + "ark-std 0.6.0", + "digest 0.10.7", + "educe", + "num-bigint 0.4.8", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" +dependencies = [ + "quote", + "syn 2.0.119", +] + +[[package]] +name = "ark-ff-asm" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1479009684adc073dff49a1025d3a7065b317a9ead25aaaca38cdc70058ba8a2" +dependencies = [ + "quote", + "syn 2.0.119", +] + +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint 0.4.8", + "num-traits", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint 0.4.8", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" +dependencies = [ + "num-bigint 0.4.8", + "num-traits", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "ark-ff-macros" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a0691ed21ef00ef89c1e9bda832eba493dda3ec2f8d892fb25b705f73f06bb8" +dependencies = [ + "num-bigint 0.4.8", + "num-traits", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint 0.4.8", +] + +[[package]] +name = "ark-serialize" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" +dependencies = [ + "ark-std 0.5.0", + "arrayvec", + "digest 0.10.7", + "num-bigint 0.4.8", +] + +[[package]] +name = "ark-serialize" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a74dd304fd536fb95d0a328e72be759209cc496a9da094c5bc56e5fea4f9e86b" +dependencies = [ + "ark-serialize-derive", + "ark-std 0.6.0", + "digest 0.10.7", + "num-bigint 0.4.8", + "serde_with", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f153690697a2b91e5e1251ff98411ee5371500a111a0fd317a70e588eb300f9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] [[package]] -name = "ascii-canvas" -version = "4.0.0" +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand 0.8.8", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.8", +] + +[[package]] +name = "ark-std" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef1e3e699d84ab1b0911a1010c5c106aa34ae89aeac103be5ce0c3859db1e891" +checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" dependencies = [ - "term", + "num-traits", + "rand 0.8.8", +] + +[[package]] +name = "ark-std" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "367c9c827ed431bff6868b7aa926e05b16eb46603cc8b6e768e4a5553fa1d155" +dependencies = [ + "num-traits", + "rand 0.8.8", ] +[[package]] +name = "arrayvec" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" + [[package]] name = "async-trait" -version = "0.1.89" +version = "0.1.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.4", ] [[package]] @@ -258,6 +471,17 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +[[package]] +name = "auto_impl" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "autocfg" version = "1.5.1" @@ -270,11 +494,11 @@ version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ - "addr2line 0.25.1", + "addr2line", "cfg-if", "libc", "miniz_oxide", - "object 0.37.3", + "object", "rustc-demangle", "windows-link", ] @@ -290,9 +514,9 @@ dependencies = [ [[package]] name = "base16ct" -version = "0.2.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6" [[package]] name = "base64" @@ -318,30 +542,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bit-set" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" -dependencies = [ - "bit-vec", -] - -[[package]] -name = "bit-vec" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" - [[package]] name = "bitflags" version = "1.3.2" @@ -350,18 +550,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" - -[[package]] -name = "bitmaps" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" -dependencies = [ - "typenum", -] +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" [[package]] name = "bitvec" @@ -377,11 +568,10 @@ dependencies = [ [[package]] name = "blake3" -version = "1.8.5" +version = "1.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aa83c34e62843d924f905e0f5c866eb1dd6545fc4d719e803d9ba6030371fce" +checksum = "6d9e454fc11f76977dc803893aff6304ed33d6a26efae8696573bea74baa27ae" dependencies = [ - "arrayref", "arrayvec", "cc", "cfg-if", @@ -389,24 +579,6 @@ dependencies = [ "cpufeatures 0.3.0", ] -[[package]] -name = "blink-alloc" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce4c15bad517bc0fb4a44523adf470e2c3eb3a365769327acdba849948ea3705" -dependencies = [ - "allocator-api2 0.4.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 = "block-buffer" version = "0.12.1" @@ -418,36 +590,34 @@ dependencies = [ [[package]] name = "bon" -version = "3.9.3" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a602c73c7b0148ec6d12af6fd5cc7a46e2eacc8878271a999abac56eed12f561" +checksum = "9e3fac94a66da67200398458a25412bcc3f9b6443b5119a6cad9cf3ccfcd8cc6" dependencies = [ "bon-macros", - "rustversion", ] [[package]] name = "bon-macros" -version = "3.9.3" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dee98b0db6a962de883bf5d20362dee4d7ca0d12fe39a7c6c73c844e1cd7c1f" +checksum = "d4654961ad0494e4774c5c60b4cb4cd0ae9b9d92d039d901638b1dba97ebebf5" dependencies = [ "darling", "ident_case", - "prettyplease", + "prettyplease 0.3.0", "proc-macro2", "quote", - "rustversion", - "syn 2.0.118", + "syn 3.0.4", ] [[package]] -name = "bstr" -version = "1.12.3" +name = "bs58" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cee35f73844aa3014bb606320a6c1f010249dbdf43342fe54b5a4f6a8ed4b79" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" dependencies = [ - "memchr", + "tinyvec", ] [[package]] @@ -465,6 +635,12 @@ 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 = "byteorder" version = "1.5.0" @@ -477,76 +653,11 @@ version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" -[[package]] -name = "camino" -version = "1.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f2d30e4173c4026932d51d31d6b0613b1fd3014bf3f9f8943d4ba139c437ba0" -dependencies = [ - "serde_core", -] - -[[package]] -name = "cargo-miden" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "509b2a8fa1049514fb5034b97d8b373aa6b97d463e31ee70c903a21b28ddcf7e" -dependencies = [ - "anyhow", - "clap", - "heck", - "liquid", - "liquid-core", - "log", - "miden-mast-package", - "midenc-compile", - "midenc-hir", - "midenc-log", - "midenc-session", - "path-absolutize", - "tempfile", - "toml_edit", - "walkdir", -] - -[[package]] -name = "cargo-platform" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0061da739915fae12ea00e16397555ed4371a6bb285431aab930f61b0aa4ba" -dependencies = [ - "serde", - "serde_core", -] - -[[package]] -name = "cargo_metadata" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef987d17b0a113becdd19d3d0022d04d7ef41f9efe4f3fb63ac44ba61df3ade9" -dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.28", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "castaway" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" -dependencies = [ - "rustversion", -] - [[package]] name = "cc" -version = "1.2.66" +version = "1.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5d6cac793997bd970000024b2934968efe83b382de4fdcf4fcb46b6ee4ad996" +checksum = "0ad534f4357a5264cce5019c989cf66a4f0dc4e0d1b1d15f8aacec0ff7360273" dependencies = [ "find-msvc-tools", "jobserver", @@ -562,26 +673,26 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chacha20" -version = "0.9.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" dependencies = [ "cfg-if", "cipher", - "cpufeatures 0.2.17", + "cpufeatures 0.3.0", + "rand_core 0.10.1", ] [[package]] name = "chacha20poly1305" -version = "0.10.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +checksum = "9b89e1c441e926b9c82a8d023f6e1b7ae0adcfaa7d621814e4d60789bac751cb" dependencies = [ "aead", "chacha20", "cipher", "poly1305", - "zeroize", ] [[package]] @@ -593,61 +704,27 @@ dependencies = [ "iana-time-zone", "js-sys", "num-traits", + "serde", "wasm-bindgen", "windows-link", ] [[package]] name = "cipher" -version = "0.4.4" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" dependencies = [ - "crypto-common 0.1.7", + "block-buffer", + "crypto-common 0.2.2", "inout", - "zeroize", -] - -[[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", - "terminal_size", ] [[package]] -name = "clap_derive" -version = "4.6.1" +name = "cmov" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.118", -] - -[[package]] -name = "clap_lex" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" [[package]] name = "codegen" @@ -655,7 +732,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "573800db6c3319bc125ddbf9b9cb001ad1602957f53642ba8d09ff3ddd4da7f1" dependencies = [ - "indexmap", + "indexmap 2.14.0", ] [[package]] @@ -664,20 +741,6 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" -[[package]] -name = "compact_str" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dfdd1c2274d9aa354115b09dc9a901d6c5576818cdf70d14cae2bdb47df00ab" -dependencies = [ - "castaway", - "cfg-if", - "itoa", - "rustversion", - "ryu", - "static_assertions", -] - [[package]] name = "const-hex" version = "1.19.1" @@ -692,9 +755,30 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.9.6" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" + +[[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" @@ -728,13 +812,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] -name = "cpp_demangle" -version = "0.5.1" +name = "cpubits" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0667304c32ea56cb4cd6d2d7c0cfe9a2f8041229db8c033af7f8d69492429def" -dependencies = [ - "cfg-if", -] +checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae" [[package]] name = "cpufeatures" @@ -754,34 +835,6 @@ dependencies = [ "libc", ] -[[package]] -name = "cranelift-bitset" -version = "0.131.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3af4f7d421b2354deb01d714266022f38fcdbebc9f5f1ec6d310d3c27286d9e" -dependencies = [ - "wasmtime-internal-core", -] - -[[package]] -name = "cranelift-entity" -version = "0.131.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aa2846b239a046217ecf95cfed0e31be4e86843785d07438ad33f456871e888" -dependencies = [ - "cranelift-bitset", - "wasmtime-internal-core", -] - -[[package]] -name = "crc32fast" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" -dependencies = [ - "cfg-if", -] - [[package]] name = "critical-section" version = "1.2.0" @@ -821,12 +874,15 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-bigint" -version = "0.5.5" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +checksum = "1a52aa3fcda4e6302a9f48734f234d35d4721b96f8fe07d073f07ce9df4f0271" dependencies = [ - "generic-array", - "rand_core 0.6.4", + "cpubits", + "ctutils", + "hybrid-array", + "num-traits", + "rand_core 0.10.1", "subtle", "zeroize", ] @@ -838,7 +894,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", - "rand_core 0.6.4", "typenum", ] @@ -849,18 +904,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ "hybrid-array", + "rand_core 0.10.1", +] + +[[package]] +name = "ctutils" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +dependencies = [ + "cmov", + "subtle", ] [[package]] name = "curve25519-dalek" -version = "4.1.3" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +checksum = "b5eed333089e2e1c1ac8c6c0398e5e2497b4c9926ca6d0365ed1e099afa5bc23" dependencies = [ "cfg-if", - "cpufeatures 0.2.17", + "cpufeatures 0.3.0", "curve25519-dalek-derive", - "digest 0.10.7", + "digest 0.11.3", "fiat-crypto", "rustc_version 0.4.1", "subtle", @@ -875,14 +941,14 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "darling" -version = "0.23.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +checksum = "ed17f5901b6630b993ca003def43f2f8ef4014fc13b047b57aad617ff32bc2ec" dependencies = [ "darling_core", "darling_macro", @@ -890,26 +956,26 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.23.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +checksum = "6837e2cf7485aaae18f86181d2f0e9a7ed297a025e220aeabf63fdebd3a2ddff" dependencies = [ "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.118", + "syn 3.0.4", ] [[package]] name = "darling_macro" -version = "0.23.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +checksum = "2ac7135c3ef02b2f7833bbeb1be5ba7f966dcde8a87c6b87f65a778d71a02785" dependencies = [ "darling_core", "quote", - "syn 2.0.118", + "syn 3.0.4", ] [[package]] @@ -961,7 +1027,7 @@ dependencies = [ "defmt-parser", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -975,9 +1041,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.10" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +checksum = "a69dedd701da44b0536442edf09c81a64b0ab97a7a4a5e3d1971f00027cbc63d" dependencies = [ "const-oid", "zeroize", @@ -988,6 +1054,20 @@ name = "deranged" version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +dependencies = [ + "serde_core", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] [[package]] name = "derive_more" @@ -1008,20 +1088,26 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.118", + "syn 2.0.119", "unicode-xid", ] +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + [[package]] name = "digest" version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer 0.10.4", - "const-oid", "crypto-common 0.1.7", - "subtle", ] [[package]] @@ -1030,8 +1116,10 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ - "block-buffer 0.12.1", + "block-buffer", + "const-oid", "crypto-common 0.2.2", + "ctutils", ] [[package]] @@ -1046,25 +1134,32 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + [[package]] name = "ecdsa" -version = "0.16.9" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +checksum = "c0681a4fc24c767085329728d8dfba959af91228aa4610cca4f8ce317ba46ae0" dependencies = [ "der", - "digest 0.10.7", + "digest 0.11.3", "elliptic-curve", "rfc6979", "signature", "spki", + "zeroize", ] [[package]] name = "ed25519" -version = "2.2.3" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +checksum = "29fcf32e6c73d1079f83ab4d782de2d81620346a5f38c6237a86a22f8368980a" dependencies = [ "pkcs8", "signature", @@ -1072,51 +1167,76 @@ dependencies = [ [[package]] name = "ed25519-dalek" -version = "2.2.0" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" +checksum = "6ebaa1a2bf1290ab3bfe5a7b771d050ebffab2711c19a81691c683a5144a25de" dependencies = [ "curve25519-dalek", "ed25519", "serde", "sha2", + "signature", "subtle", "zeroize", ] +[[package]] +name = "educe" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" +dependencies = [ + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "either" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "elliptic-curve" -version = "0.13.8" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +checksum = "9d65aa39b3a5c1c9c1b745c9a019234bb7a21b77abcb4f4d266d706e2d577d65" dependencies = [ "base16ct", "crypto-bigint", - "digest 0.10.7", + "crypto-common 0.2.2", + "digest 0.11.3", "ff", - "generic-array", "group", "hkdf", + "hybrid-array", "pkcs8", - "rand_core 0.6.4", + "rand_core 0.10.1", "sec1", "subtle", "zeroize", ] [[package]] -name = "ena" -version = "0.14.4" +name = "enum-ordinalize" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabffdaee24bd1bf95c5ef7cec31260444317e72ea56c4c91750e8b7ee58d5f1" +checksum = "89dd01549b09589510cf0647475075d12071456586d70f5c75c98ae2a5537677" dependencies = [ - "log", + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a65863d15a4ce2888bd2f0f543cc963d3879c3a022c8ee43f6141d479a3ac815" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.4", ] [[package]] @@ -1166,7 +1286,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -1183,31 +1303,53 @@ checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" [[package]] name = "fastrand" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" + +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "fastrlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] [[package]] name = "ff" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +checksum = "a1f686ab92a9fb0eaf188f6c6c87b89490baa6fdb0db4544ba4dc47f7942489f" dependencies = [ - "rand_core 0.6.4", + "rand_core 0.10.1", "subtle", ] [[package]] name = "fiat-crypto" -version = "0.2.9" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" [[package]] name = "fixed-hash" @@ -1215,6 +1357,9 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ + "byteorder", + "rand 0.8.8", + "rustc-hex", "static_assertions", ] @@ -1224,26 +1369,13 @@ 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 = "flume" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +checksum = "5e139bc46ca777eb5efaf62df0ab8cc5fd400866427e56c68b22e414e53bd3be" dependencies = [ - "futures-core", - "futures-sink", - "nanorand", - "spin 0.9.8", + "spin 0.9.9", ] [[package]] @@ -1281,9 +1413,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -1296,9 +1428,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -1306,15 +1438,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -1323,38 +1455,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.4", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -1390,7 +1522,6 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", - "zeroize", ] [[package]] @@ -1400,10 +1531,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi", - "wasm-bindgen", ] [[package]] @@ -1430,6 +1559,7 @@ dependencies = [ "js-sys", "libc", "r-efi 6.0.0", + "rand_core 0.10.1", "wasm-bindgen", ] @@ -1439,20 +1569,11 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" -[[package]] -name = "gimli" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf7f043f89559805f8c7cacc432749b2fa0d0a0a9ee46ce47164ed5ba7f126c" -dependencies = [ - "stable_deref_trait", -] - [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "gloo-timers" @@ -1468,20 +1589,20 @@ dependencies = [ [[package]] name = "group" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "7fd1a1c7a5206c5b7a3f5a0d7ccd3ff85d0c8f5133d62a02680255b0004af5f4" dependencies = [ "ff", - "rand_core 0.6.4", + "rand_core 0.10.1", "subtle", ] [[package]] name = "h2" -version = "0.4.15" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" +checksum = "ef8e5e5a340588f4452631496976cf8636d4a7ecf600239fdc27615d2530bc16" dependencies = [ "atomic-waker", "bytes", @@ -1489,7 +1610,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap", + "indexmap 2.14.0", "slab", "tokio", "tokio-util", @@ -1498,22 +1619,17 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.5" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "allocator-api2 0.2.21", - "equivalent", - "foldhash 0.1.5", -] +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.16.1" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ - "foldhash 0.2.0", + "foldhash 0.1.5", ] [[package]] @@ -1522,8 +1638,6 @@ version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" dependencies = [ - "allocator-api2 0.2.21", - "equivalent", "foldhash 0.2.0", ] @@ -1556,27 +1670,27 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hkdf" -version = "0.12.4" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" dependencies = [ "hmac", ] [[package]] name = "hmac" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" dependencies = [ - "digest 0.10.7", + "digest 0.11.3", ] [[package]] name = "http" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" +checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" dependencies = [ "bytes", "itoa", @@ -1584,9 +1698,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" dependencies = [ "bytes", "http", @@ -1594,9 +1708,9 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c" dependencies = [ "bytes", "futures-core", @@ -1619,18 +1733,20 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hybrid-array" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c" +checksum = "707114b52a152fa7bdb290cd7cd5912d9467273b6d74e21b8d81aca1f8533f6b" dependencies = [ + "subtle", "typenum", + "zeroize", ] [[package]] name = "hyper" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" +checksum = "d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72" dependencies = [ "atomic-waker", "bytes", @@ -1712,17 +1828,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] -name = "im-rc" -version = "15.1.0" +name = "impl-codec" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1955a75fa080c677d3972822ec4bad316169ab1cfc6c257a942c2265dbe5fe" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" dependencies = [ - "bitmaps", - "rand_core 0.6.4", - "rand_xoshiro 0.6.0", - "sized-chunks", - "typenum", - "version_check", + "parity-scale-codec", +] + +[[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.119", ] [[package]] @@ -1731,6 +1853,17 @@ 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", + "serde", +] + [[package]] name = "indexmap" version = "2.14.0" @@ -1739,15 +1872,17 @@ checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", "hashbrown 0.17.1", + "serde", + "serde_core", ] [[package]] name = "inout" -version = "0.1.4" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" dependencies = [ - "generic-array", + "hybrid-array", ] [[package]] @@ -1755,34 +1890,16 @@ name = "integration" version = "0.1.0" dependencies = [ "anyhow", - "cargo-miden", "miden-client", "miden-client-sqlite-store", "miden-mast-package", + "miden-protocol", "miden-standards", "miden-testing", - "rand 0.9.4", + "rand 0.10.2", "tokio", ] -[[package]] -name = "intrusive-collections" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b719c59241cfaac1042a6d26787e28ed7ee4a4e21a5a907786f54222d1b0062" -dependencies = [ - "memoffset", -] - -[[package]] -name = "inventory" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4f0c30c76f2f4ccee3fe55a2435f691ca00c0e4bd87abe4f4a851b1d4dac39b" -dependencies = [ - "rustversion", -] - [[package]] name = "is_ci" version = "1.2.0" @@ -1795,6 +1912,24 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.14.0" @@ -1804,6 +1939,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b4baf93f58d4425749ca49a51c50ebab072c5df6994d08fed93541c331481dc" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.18" @@ -1812,27 +1956,55 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.32" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "961d16382652bfdd8c6f68b223b26a8c93e0d475c672f414411db31c6c5c900e" +checksum = "668b7183bd07af9a4885f5c35b0cc5c83c4607a913c16b7e17291832910d2dcc" dependencies = [ "defmt", + "jiff-core", "jiff-static", + "jiff-tzdb-platform", "log", "portable-atomic", "portable-atomic-util", "serde_core", + "windows-link", +] + +[[package]] +name = "jiff-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7feca88439efe53da3754500c1851dedf3cb36c524dd5cf8225cc0794de95d09" +dependencies = [ + "defmt", ] [[package]] name = "jiff-static" -version = "0.2.32" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0879bd39df99c4c5e2c6615ccc026391a423dde10532c573e6086eb94a802cc" +checksum = "3a69dcb3a21cfb32ce1cd056169337ca284af0766dd766e7878819b251a49204" dependencies = [ + "jiff-core", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", +] + +[[package]] +name = "jiff-tzdb" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "142bd39932ad231f10513df9ab62661fead8719872150b7ad02a2df79f4e141e" + +[[package]] +name = "jiff-tzdb-platform" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8" +dependencies = [ + "jiff-tzdb", ] [[package]] @@ -1847,9 +2019,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.103" +version = "0.3.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" dependencies = [ "cfg-if", "futures-util", @@ -1858,77 +2030,42 @@ dependencies = [ [[package]] name = "k256" -version = "0.13.4" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +checksum = "93f50113171a713f4a4231ef82eb26703607139b35dcb56241f0ceab2ae1f7d8" dependencies = [ - "cfg-if", + "cpubits", "ecdsa", "elliptic-curve", - "once_cell", + "primeorder", "sha2", - "signature", -] - -[[package]] -name = "keccak" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" -dependencies = [ - "cpufeatures 0.2.17", + "wnaf", ] [[package]] name = "keccak" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e24a010dd405bd7ed803e5253182815b41bf2e6a80cc3bfc066658e03a198aa" +checksum = "d8f198d1db720e4940b5a493201d199d9f24f568f8f746bd13706243a2f71598" dependencies = [ "cfg-if", "cpufeatures 0.3.0", ] [[package]] -name = "kstring" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "558bf9508a558512042d3095138b1f7b8fe90c5467d94f9f1da28b3731c5dbd1" -dependencies = [ - "serde", - "static_assertions", -] - -[[package]] -name = "lalrpop" -version = "0.22.2" +name = "konst" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4ebbd48ce411c1d10fb35185f5a51a7bfa3d8b24b4e330d30c9e3a34129501" +checksum = "128133ed7824fcd73d6e7b17957c5eb7bacb885649bd8c69708b2331a10bcefb" dependencies = [ - "ascii-canvas", - "bit-set", - "ena", - "itertools", - "lalrpop-util", - "petgraph 0.7.1", - "regex", - "regex-syntax", - "sha3 0.10.9", - "string_cache", - "term", - "unicode-xid", - "walkdir", + "konst_macro_rules", ] [[package]] -name = "lalrpop-util" -version = "0.22.2" +name = "konst_macro_rules" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5baa5e9ff84f1aefd264e6869907646538a52147a755d494517a8007fb48733" -dependencies = [ - "regex-automata", - "rustversion", -] +checksum = "a4933f3f57a8e9d9da04db23fb153356ecaf00cbd14aee46279c33dc80925c37" [[package]] name = "lazy_static" @@ -1936,17 +2073,11 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[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" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libm" @@ -1959,124 +2090,18 @@ name = "libsqlite3-sys" version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "133c182a6a2c87864fe97778797e46c7e999672690dc9fa3ee8e241aa4a9c13f" -dependencies = [ - "cc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "linux-raw-sys" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" - -[[package]] -name = "liquid" -version = "0.26.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a494c3f9dad3cb7ed16f1c51812cbe4b29493d6c2e5cd1e2b87477263d9534d" -dependencies = [ - "liquid-core", - "liquid-derive", - "liquid-lib", - "serde", -] - -[[package]] -name = "liquid-core" -version = "0.26.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc623edee8a618b4543e8e8505584f4847a4e51b805db1af6d9af0a3395d0d57" -dependencies = [ - "anymap2", - "itertools", - "kstring", - "liquid-derive", - "pest", - "pest_derive", - "regex", - "serde", - "time", -] - -[[package]] -name = "liquid-derive" -version = "0.26.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de66c928222984aea59fcaed8ba627f388aaac3c1f57dcb05cc25495ef8faefe" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.118", -] - -[[package]] -name = "liquid-lib" -version = "0.26.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9befeedd61f5995bc128c571db65300aeb50d62e4f0542c88282dbcb5f72372a" -dependencies = [ - "itertools", - "liquid-core", - "percent-encoding", - "regex", - "time", - "unicode-segmentation", -] - -[[package]] -name = "litcheck-core" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2de89e2e6899bcc63aea2c4696792de089b1d57f55d4dd522185ecc9e81b87fd" -dependencies = [ - "Inflector", - "clap", - "compact_str", - "either", - "glob", - "hashbrown 0.15.5", - "log", - "memchr", - "miette", - "parking_lot", - "paste", - "rustc-hash", - "serde", - "serde_spanned", - "smallvec", - "thiserror", - "toml 0.9.12+spec-1.1.0", - "walkdir", -] - -[[package]] -name = "litcheck-filecheck" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad42e4aec09192b0dd71faaddce1a674e4ea26c248ae6c2a2eb643b7af1b6775" -dependencies = [ - "aho-corasick", - "bitflags 2.13.0", - "bstr", - "clap", - "either", - "im-rc", - "itertools", - "lalrpop", - "lalrpop-util", - "litcheck-core", - "log", - "logos 0.16.1", - "memchr", - "regex", - "regex-automata", - "regex-syntax", - "smallvec", - "thiserror", +dependencies = [ + "cc", + "pkg-config", + "vcpkg", ] +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + [[package]] name = "lock_api" version = "0.4.14" @@ -2088,9 +2113,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "logos" @@ -2123,7 +2148,7 @@ dependencies = [ "quote", "regex-syntax", "rustc_version 0.4.1", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -2137,7 +2162,7 @@ dependencies = [ "quote", "regex-automata", "regex-syntax", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -2179,7 +2204,7 @@ checksum = "59a9dbbfc75d2688ed057456ce8a3ee3f48d12eec09229f560f3643b9f275653" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -2197,30 +2222,13 @@ version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" -[[package]] -name = "memmap2" -version = "0.9.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0" -dependencies = [ - "libc", -] - -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - [[package]] name = "miden-ace-codegen" -version = "0.23.5" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87598d43cfca4a8c0ecb29cecdc2c9b67e6e99aac91ca108ce0413dfaeec25ab" +checksum = "acf1f83cb07fb71459b9b02e25cc796c66cecbf16d941befc5b1e56de617e77e" dependencies = [ + "miden-constraint-compiler", "miden-core", "miden-crypto", "thiserror", @@ -2228,35 +2236,36 @@ dependencies = [ [[package]] name = "miden-agglayer" -version = "0.15.3" +version = "0.16.0-rc.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ead17cc16651de0fea5fc3ea67109ad449c7bb274ca8ff91c5b25e2be4a0c9f8" +checksum = "74e2e7c3dc76bb2f4a81eb2a20a9b99b134441ae6f9ac9464451e7847b4b72b5" dependencies = [ "alloy-sol-types", "fs-err", "miden-assembly", "miden-core", + "miden-core-lib", "miden-crypto", + "miden-mast-package", + "miden-package-registry", "miden-protocol", + "miden-protocol-build-utils", "miden-standards", "miden-utils-sync", - "primitive-types", - "regex", "thiserror", - "walkdir", ] [[package]] name = "miden-air" -version = "0.23.5" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff5d900b5d214870ed628948342aa2ddab95720371d74a754ddf406e3b67021" +checksum = "0be68a0e1aaa504c1d8f01df8b092f05734479681831936fb5c90143b6264bf0" dependencies = [ "miden-ace-codegen", "miden-core", "miden-crypto", - "miden-lifted-stark", "miden-utils-indexing", + "p3-field", "proptest", "thiserror", "tracing", @@ -2264,9 +2273,9 @@ dependencies = [ [[package]] name = "miden-assembly" -version = "0.23.5" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "174c814c212eccf944042a3409833d2d2c7c725fa077306dfb1a81c892112946" +checksum = "d5f12bedf5b78f33df8c9ba5051e7ee6ceade3d013381749115681d21f71205f" dependencies = [ "env_logger", "log", @@ -2282,15 +2291,13 @@ dependencies = [ [[package]] name = "miden-assembly-syntax" -version = "0.23.5" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43921711f3df77be1ac975b39fbf483dc05980760a1b932bc1554ca29c43ec81" +checksum = "9cd8362e466fa6d443043775d006a4fffb47cc14eeb0ee0fb9d1cc19a202c916" dependencies = [ - "aho-corasick", "env_logger", - "lalrpop", - "lalrpop-util", "log", + "miden-assembly-syntax-cst", "miden-core", "miden-debug-types", "miden-utils-diagnostics", @@ -2305,11 +2312,23 @@ dependencies = [ "thiserror", ] +[[package]] +name = "miden-assembly-syntax-cst" +version = "0.29.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b597b48f80de2b7e79bcee3ff8d0e725232ae9b3a8def3caa468b022f9633c99" +dependencies = [ + "miden-debug-types", + "miden-rowan", + "miden-utils-diagnostics", + "thiserror", +] + [[package]] name = "miden-block-prover" -version = "0.15.3" +version = "0.16.0-rc.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "292ded918a0ddd056dc34db471f0bef6ac7991467d513ba505a4fcc0b1ecfac4" +checksum = "ff08a6f57bf1cd5b1464e46013ac5d0e25c12ccae2fe454771f43a9edd08935f" dependencies = [ "miden-protocol", "thiserror", @@ -2317,9 +2336,9 @@ dependencies = [ [[package]] name = "miden-client" -version = "0.15.3" +version = "0.16.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf89b6ba10e98ffb11d5b644e4c2656f7a220bf367cf0c3b970c2028c1b6a47f" +checksum = "60536acdc7d062845a8adb2cc57052c0629ce54b10e3eec180ac1f8a54ab25f5" dependencies = [ "anyhow", "async-trait", @@ -2332,14 +2351,13 @@ dependencies = [ "miden-node-proto-build", "miden-note-transport-proto-build", "miden-protocol", - "miden-remote-prover-client", "miden-standards", "miden-tx", - "miden-tx-batch-prover", + "miden-tx-batch", "miette", "prost", "prost-types", - "rand 0.9.4", + "rand 0.10.2", "serde", "serde_json", "tempfile", @@ -2355,9 +2373,9 @@ dependencies = [ [[package]] name = "miden-client-sqlite-store" -version = "0.15.3" +version = "0.16.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "845f9cd1c93a6bac284ecc7921de5eb9328349dd21dc65b0a4a5d71007693e21" +checksum = "517d47a4444ef546eafb9d8e6ae163de673b9b79827625a9f49a62396aea2551" dependencies = [ "anyhow", "async-trait", @@ -2372,11 +2390,21 @@ dependencies = [ "tokio", ] +[[package]] +name = "miden-constraint-compiler" +version = "0.29.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "912e4f83ae8aec19c4c32f257e87a0b5210697726b49c8d935e935f48021eef0" +dependencies = [ + "miden-core", + "miden-crypto", +] + [[package]] name = "miden-core" -version = "0.23.5" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54fc597642fa67a111eaf177de7a8f4c3a001ac5ddafb7d1398ad8551c031e20" +checksum = "0b918c99c63f6d3fe47d31c1e883d9498c31a2f9256a552885b4ccf1302b99d7" dependencies = [ "derive_more", "log", @@ -2386,36 +2414,47 @@ dependencies = [ "miden-utils-core-derive", "miden-utils-indexing", "miden-utils-sync", - "num-derive", - "num-traits", "proptest", - "proptest-derive", "serde", "thiserror", ] [[package]] name = "miden-core-lib" -version = "0.23.5" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9deb9ffbd9548b03eaa5e63ec72badcb16bb2c841a1a0bdd74e1829f18844a7e" +checksum = "0525b45bb230030458386198d208542d0b84ac9984ee0a2af3064abf16f0e861" dependencies = [ "env_logger", "fs-err", "miden-assembly", + "miden-assembly-syntax", "miden-core", + "miden-core-lib-codegen", "miden-crypto", + "miden-mast-package", "miden-package-registry", + "miden-precompiles", "miden-processor", "miden-utils-sync", "thiserror", ] +[[package]] +name = "miden-core-lib-codegen" +version = "0.29.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb7e6020064ca81e121a467ed4765a5fbd5067b081c773afe376e0d466d106c" +dependencies = [ + "miden-core", + "miden-precompiles", +] + [[package]] name = "miden-crypto" -version = "0.25.1" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35198bebd353cddc25ad4aafb5f4ef9e71b283d71c787b8938c575c16974135d" +checksum = "702da94ba7c06406292736d27d6356d1e46210f80d7a565713a010102684d539" dependencies = [ "blake3", "cc", @@ -2442,14 +2481,12 @@ dependencies = [ "p3-maybe-rayon", "p3-symmetric", "p3-util", - "rand 0.9.4", - "rand_chacha", - "rand_core 0.9.5", - "rand_hc", + "rand 0.10.2", + "rand_chacha 0.10.0", "rayon", "serde", "sha2", - "sha3 0.10.9", + "sha3 0.12.0", "subtle", "thiserror", "x25519-dalek", @@ -2457,19 +2494,19 @@ dependencies = [ [[package]] name = "miden-crypto-derive" -version = "0.25.1" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9068c6554db0e051f62913575de9949841a46b96ae92d4b7d28e1fed5d8f052b" +checksum = "7eb7d9477a0db8dc5bd5d1dd72201a86798e347f761f0f92e05a7dcaa3e02ad9" dependencies = [ "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "miden-debug-types" -version = "0.23.5" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb406958e7e218b7d7a159e91d963baff54edf7849d48bb9b7ce612e22eb29e" +checksum = "75ddb5a45d9b663aa6fdaabae0fccd4c4532d6f9300c20c050ee93a3f6b8aa81" dependencies = [ "memchr", "miden-crypto", @@ -2482,16 +2519,17 @@ dependencies = [ "serde", "serde_spanned", "thiserror", + "zerocopy", ] [[package]] name = "miden-field" -version = "0.25.1" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "379a39db52cd932a95d4017a18b712ee53ed0f86cfedf8c63ed72d687a18a191" +checksum = "0fc5425e2e3a137c21d0cf7267eb21ceb8190acef70dd03338195a532bed7d42" dependencies = [ "miden-serde-utils", - "num-bigint", + "num-bigint 0.5.1", "p3-challenger", "p3-field", "p3-goldilocks", @@ -2514,11 +2552,12 @@ dependencies = [ [[package]] name = "miden-lifted-air" -version = "0.25.1" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "789e0e469d1731012d8a018057317f31580611535c20d2a47c022213228cb733" +checksum = "8f184dd3be9d4c3172d60b846d27ea0ed3e505760b07c1b76891e3af5e2eb983" dependencies = [ "p3-air", + "p3-challenger", "p3-field", "p3-matrix", "p3-util", @@ -2527,9 +2566,9 @@ dependencies = [ [[package]] name = "miden-lifted-stark" -version = "0.25.1" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f62cca91182917b22a47e150028b7c785df620a15b2974a39c64e2b1b7a889d3" +checksum = "722d5f9c971bd141a75504969121ab0acfb41a782e4f41157029a74e9801ceda" dependencies = [ "miden-lifted-air", "miden-stark-transcript", @@ -2550,15 +2589,20 @@ dependencies = [ [[package]] name = "miden-mast-package" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57398cc0a3ab2e451ea6ef5df2479e822ff857c03db22063c7ae583d3cfdec5b" +checksum = "26062f2e4cb18e7fa9244f8b18fe2adea2bfe3f016431f75f80b5b98249c34f6" dependencies = [ + "hashbrown 0.17.1", + "log", "miden-assembly-syntax", "miden-core", "miden-debug-types", + "miden-utils-indexing", + "rustc-hash", "serde", "thiserror", + "zerocopy", ] [[package]] @@ -2577,9 +2621,9 @@ dependencies = [ "rustc_version 0.2.3", "rustversion", "serde_json", - "spin 0.9.8", + "spin 0.9.9", "strip-ansi-escapes", - "syn 2.0.118", + "syn 2.0.119", "textwrap", "thiserror", "trybuild", @@ -2594,14 +2638,14 @@ checksum = "86a905f3ea65634dd4d1041a4f0fd0a3e77aa4118341d265af1a94339182222f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "miden-node-proto-build" -version = "0.15.1" +version = "0.16.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "682ea08edd5da59447e24acd6c0ce4e5d06c759ea6e58a3db553f3de3d5aa6b2" +checksum = "c4e8c47d752a8b6c9f475072a875799048d87038b759b47e8cb5f2767b74072c" dependencies = [ "build-rs", "codegen", @@ -2613,9 +2657,9 @@ dependencies = [ [[package]] name = "miden-note-transport-proto-build" -version = "0.4.1" +version = "0.5.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7399c2999453c781601f16d82f328ecc695f9375e2415a05147449990f32f71f" +checksum = "533478b532052cb234b838c2fbc1e83c8dcc5266d55c39d362fede66c881a698" dependencies = [ "fs-err", "miette", @@ -2625,9 +2669,9 @@ dependencies = [ [[package]] name = "miden-package-registry" -version = "0.23.5" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3befe190482e68f706235f3818830487ac8ed66057aa9562c7c22326f7be4e" +checksum = "0f348fa51bf867eb61442b0ff3289e6235f2f3b69d22b845ccf32febc55127c1" dependencies = [ "miden-assembly-syntax", "miden-core", @@ -2640,555 +2684,315 @@ dependencies = [ ] [[package]] -name = "miden-processor" -version = "0.23.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538a47dca6e2c918d31a9152a14b82cc93bc1dcbfccd3a91ed61ec0dfd94c2f" -dependencies = [ - "itertools", - "miden-air", - "miden-core", - "miden-debug-types", - "miden-utils-diagnostics", - "miden-utils-indexing", - "paste", - "rayon", - "thiserror", - "tracing", -] - -[[package]] -name = "miden-project" -version = "0.23.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0082a2b6858148040d221d64f0db4b9d8e64a6aebd6a48cfad2e12bb726542b1" -dependencies = [ - "miden-assembly-syntax", - "miden-core", - "miden-mast-package", - "miden-package-registry", - "proptest", - "serde", - "serde-untagged", - "thiserror", - "toml 1.1.2+spec-1.1.0", -] - -[[package]] -name = "miden-protocol" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66340243e37da5936cb278a8dd11037813f1dc6731c2fc866703b76ed465ebc3" -dependencies = [ - "bech32", - "fs-err", - "getrandom 0.3.4", - "miden-assembly", - "miden-assembly-syntax", - "miden-core", - "miden-core-lib", - "miden-crypto", - "miden-crypto-derive", - "miden-mast-package", - "miden-processor", - "miden-utils-sync", - "miden-verifier", - "rand 0.9.4", - "rand_chacha", - "rand_xoshiro 0.7.0", - "regex", - "semver 1.0.28", - "serde", - "thiserror", - "toml 1.1.2+spec-1.1.0", - "walkdir", -] - -[[package]] -name = "miden-prover" -version = "0.23.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1d7c6760b33c256ae38ef704e729b27404523d9bdc797a56ad1b157e0e39cff" -dependencies = [ - "bincode", - "miden-air", - "miden-core", - "miden-crypto", - "miden-processor", - "serde", - "tracing", -] - -[[package]] -name = "miden-remote-prover-client" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b88ca0767fe4e39669e2da9fd0975265a32cd53d90ec8661cfc694bedbde9d88" -dependencies = [ - "build-rs", - "fs-err", - "getrandom 0.4.3", - "miden-node-proto-build", - "miden-protocol", - "miden-tx", - "miette", - "prost", - "thiserror", - "tokio", - "tonic", - "tonic-prost", - "tonic-prost-build", - "tonic-web-wasm-client", -] - -[[package]] -name = "miden-serde-utils" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d78cd1d4fcad937312e544f7d53423485e453598aa4fb989d2b6374027a8c136" -dependencies = [ - "p3-field", - "p3-goldilocks", -] - -[[package]] -name = "miden-standards" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c7146b028e637f4079b5bdefeefc54d7d6e47a805451fa0a18859d19efa2ff" -dependencies = [ - "bon", - "fs-err", - "miden-assembly", - "miden-core-lib", - "miden-protocol", - "rand 0.9.4", - "regex", - "thiserror", - "walkdir", -] - -[[package]] -name = "miden-stark-transcript" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05901db2e30d3954243960fe21cea7fbec39f97c27774b56fd5031c28c4881ba" -dependencies = [ - "p3-challenger", - "p3-field", - "serde", - "thiserror", -] - -[[package]] -name = "miden-stateful-hasher" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faeb47a90c55c5d45051d23cf691588804dd531995b4582c79108b64e445a905" -dependencies = [ - "p3-field", - "p3-symmetric", -] - -[[package]] -name = "miden-testing" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4096fc44a4c88f37405be284e25efdce194d6051e9472ae136ab9249659433c" -dependencies = [ - "anyhow", - "itertools", - "miden-block-prover", - "miden-core-lib", - "miden-crypto", - "miden-processor", - "miden-protocol", - "miden-standards", - "miden-tx", - "miden-tx-batch-prover", - "rand 0.9.4", - "rand_chacha", - "thiserror", -] - -[[package]] -name = "miden-thiserror" -version = "1.0.59" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "183ff8de338956ecfde3a38573241eb7a6f3d44d73866c210e5629c07fa00253" -dependencies = [ - "miden-thiserror-impl", -] - -[[package]] -name = "miden-thiserror-impl" -version = "1.0.59" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee4176a0f2e7d29d2a8ee7e60b6deb14ce67a20e94c3e2c7275cdb8804e1862" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.118", -] - -[[package]] -name = "miden-tx" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94092b45bc0abc656af25473c9807d1e6cee8e682c58d3b1186f0bd0fb6471fb" -dependencies = [ - "miden-processor", - "miden-protocol", - "miden-prover", - "miden-standards", - "miden-verifier", - "thiserror", -] - -[[package]] -name = "miden-tx-batch-prover" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60add2b40559352661bc86970541f88ffcf98c528f301295f9dc3bf15481b46" -dependencies = [ - "miden-protocol", - "miden-tx", -] - -[[package]] -name = "miden-utils-core-derive" -version = "0.23.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e887090da62091ba39f600c0cd831fec084eb437014049c550ee1c32c1517b2e" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "miden-utils-diagnostics" -version = "0.23.5" +name = "miden-precompiles" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2444cdba48d71c3c540c9a3b268b5067f350ac9d60797d88fd92461ebd246a04" +checksum = "6ef4e1524fe66bb812b28e2e8e207e3056ca6c4533e4fe4685fabc3a247ce2ac" dependencies = [ + "miden-core", "miden-crypto", - "miden-debug-types", - "miden-miette", - "tracing", ] [[package]] -name = "miden-utils-indexing" -version = "0.23.5" +name = "miden-precompiles-prover" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c76500dbcd119ebc1f558f8de302f21aeead8b37b70a5a664180f6ea2f6b869f" +checksum = "a39a11eb14824f4d60528c97beb601459d8693d3bc6bbeff2f65899a824701e4" dependencies = [ + "miden-ace-codegen", + "miden-air", + "miden-core", "miden-crypto", - "proptest", + "miden-lifted-air", + "miden-lifted-stark", + "miden-precompiles", + "miden-serde-utils", + "ruint", "serde", + "serde-wincode", "thiserror", + "tracing", + "wincode", ] [[package]] -name = "miden-utils-sync" -version = "0.23.5" +name = "miden-processor" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "107803f349d07260dfacf96c0b583a279a49480cbd265c9b9135f7d06cbc0c55" +checksum = "c8ed69845d784d2efdfdccc4fdf120c377755ba41c5270ce01055b0001fc13cc" dependencies = [ - "lock_api", - "loom", - "once_cell", - "parking_lot", + "hashbrown 0.17.1", + "itertools 0.15.0", + "miden-air", + "miden-core", + "miden-debug-types", + "miden-mast-package", + "miden-precompiles", + "miden-utils-diagnostics", + "miden-utils-indexing", + "paste", + "rayon", + "thiserror", + "tracing", ] [[package]] -name = "miden-verifier" -version = "0.23.5" +name = "miden-project" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "011b9bae1321cb46bea2197f1991a1ae1a1cabd9fe1e9a1b739626881944244c" +checksum = "73ecd22461348d34547756d44bb0b73cfb58b820cdf618c895e2244db377b6a1" dependencies = [ - "bincode", - "miden-air", + "miden-assembly-syntax", "miden-core", - "miden-crypto", + "miden-mast-package", + "miden-package-registry", + "proptest", "serde", + "serde-untagged", "thiserror", - "tracing", + "toml", ] [[package]] -name = "midenc-codegen-masm" -version = "0.9.2" +name = "miden-protocol" +version = "0.16.0-rc.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74482263389b744d6e4c531ba92dc30c6a91f4f614a51bdac5b454b5552ad3a6" +checksum = "57ad59cd3d44cd3d480f4b5bb2e500c36aef7dc1bf6f4222f989a433dba56179" dependencies = [ - "anyhow", - "inventory", - "log", + "bech32", + "fs-err", + "getrandom 0.4.3", "miden-assembly", "miden-assembly-syntax", "miden-core", + "miden-core-lib", + "miden-crypto", + "miden-crypto-derive", "miden-mast-package", + "miden-package-registry", "miden-processor", - "miden-protocol", - "miden-thiserror", - "midenc-dialect-arith", - "midenc-dialect-cf", - "midenc-dialect-hir", - "midenc-dialect-scf", - "midenc-dialect-ub", - "midenc-dialect-wasm", - "midenc-hir", - "midenc-hir-analysis", - "midenc-session", - "petgraph 0.8.3", + "miden-protocol-build-utils", + "miden-utils-sync", + "miden-verifier", + "rand 0.10.2", + "rand_chacha 0.10.0", + "rand_xoshiro", + "regex", + "semver 1.0.28", "serde", - "smallvec", + "thiserror", + "toml", ] [[package]] -name = "midenc-compile" -version = "0.9.2" +name = "miden-protocol-build-utils" +version = "0.16.0-rc.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "659186a6649ce6b7527c69cc481a1dffc66b7f9d1aaa75b9aa46a5122cc15cbd" +checksum = "1f1145d0f5cb0efde2484af06587225b2a222fbf4811c4606d0d7f1bd3ff40dc" dependencies = [ - "cargo_metadata", - "clap", - "log", + "fs-err", "miden-assembly", + "miden-core", "miden-mast-package", "miden-package-registry", - "miden-thiserror", - "midenc-codegen-masm", - "midenc-dialect-hir", - "midenc-dialect-scf", - "midenc-frontend-masm", - "midenc-frontend-wasm", - "midenc-hir", - "midenc-hir-transform", - "midenc-session", - "tempfile", - "toml_edit", - "wat", + "miden-project", + "regex", + "walkdir", ] [[package]] -name = "midenc-dialect-arith" -version = "0.9.2" +name = "miden-prover" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b6b700d14dfdb07f39e8cd142cc337254f1d176cbce28052044ee330ec21c79" +checksum = "550f8a8e9b3b731092947bc23866c284ea623ef519bf793a999dfb1552a4f647" dependencies = [ - "midenc-hir", - "paste", + "miden-air", + "miden-core", + "miden-crypto", + "miden-precompiles-prover", + "miden-processor", + "serde", + "serde-wincode", + "tracing", ] [[package]] -name = "midenc-dialect-cf" -version = "0.9.2" +name = "miden-rowan" +version = "0.16.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa8995529d23ffafd2ae2d704e80e27264679202a7344ee7ad1cfa7b8fd6fc3" +checksum = "c13695bf99aabaa21d6572b807c66bb26251aa3d9b75e828b3c99b97a3b1ce7e" dependencies = [ - "log", - "midenc-dialect-arith", - "midenc-hir", + "hashbrown 0.17.1", + "rustc-hash", ] [[package]] -name = "midenc-dialect-hir" -version = "0.9.2" +name = "miden-serde-utils" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a576b03a2f736de690f40b264b5dfb4893c590d1028270d9fb39aeaeb92a6ec" +checksum = "7e745c48c1a2051b47f3e4f0cb22654a0dcade8a924e89633c90df19665da000" dependencies = [ - "log", - "miden-thiserror", - "midenc-dialect-arith", - "midenc-dialect-cf", - "midenc-dialect-scf", - "midenc-hir", - "midenc-hir-analysis", - "midenc-hir-transform", + "p3-field", + "p3-goldilocks", + "wincode", ] [[package]] -name = "midenc-dialect-scf" -version = "0.9.2" +name = "miden-standards" +version = "0.16.0-rc.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d519b765a557cac17465d7f0bae689c143e9c50aa46561923515442cde5bb680" +checksum = "a4287a40b8f10b0d824dd513ee2a17d75dad9fb5b389699d043ca1510721b61d" dependencies = [ - "bitvec", - "log", - "midenc-dialect-arith", - "midenc-dialect-cf", - "midenc-dialect-ub", - "midenc-hir", - "midenc-hir-transform", + "bon", + "miden-assembly", + "miden-core-lib", + "miden-package-registry", + "miden-protocol", + "miden-protocol-build-utils", + "primitive-types 0.14.0", + "rand 0.10.2", + "thiserror", ] [[package]] -name = "midenc-dialect-ub" -version = "0.9.2" +name = "miden-stark-transcript" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e30c281dc11314bf23beb7cc82d99d11cb1b2a90f9c91a6dc48a6634ca33fb61" +checksum = "0a712409cf2ac6aea63abb1ab38132c47b9a3d4b93016381db231abd566c20c8" dependencies = [ - "midenc-hir", + "p3-challenger", + "p3-field", + "serde", + "thiserror", ] [[package]] -name = "midenc-dialect-wasm" -version = "0.9.2" +name = "miden-stateful-hasher" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c0149dbfbdd622a94ecdba89d6f8d5f58874601b36eea3c8706b0e8154570ec" +checksum = "7c51589978168e6337a2001cbb4a4c8a200868d55b4d30f0b6241bcb162e4c48" dependencies = [ - "midenc-dialect-arith", - "midenc-dialect-hir", - "midenc-hir", + "p3-field", + "p3-symmetric", ] [[package]] -name = "midenc-frontend-masm" -version = "0.9.2" +name = "miden-testing" +version = "0.16.0-rc.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2632033efe02e60f079bd39639973ac777c58b019f89d8eff991142f2d67ae" +checksum = "f5a053ed53bae22b40058550863560f71d51e3927b9fd97e14e22873934bb43f" dependencies = [ - "miden-assembly", - "miden-assembly-syntax", - "miden-core", + "anyhow", + "itertools 0.15.0", + "miden-block-prover", "miden-core-lib", - "miden-mast-package", - "miden-project", - "midenc-dialect-arith", - "midenc-dialect-cf", - "midenc-dialect-hir", - "midenc-dialect-scf", - "midenc-hir", - "rustc-hash", + "miden-crypto", + "miden-processor", + "miden-protocol", + "miden-standards", + "miden-tx", + "miden-tx-batch", + "rand 0.10.2", + "rand_chacha 0.10.0", + "thiserror", ] [[package]] -name = "midenc-frontend-wasm" -version = "0.9.2" +name = "miden-tx" +version = "0.16.0-rc.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf05877df8b112ec5e071c08919269b0a2328222c74994e9edf85f0433f4ecd" +checksum = "c924fb92588645df967d981415c94adb5c030d0512a90ff4e670f9211cdc9983" dependencies = [ - "addr2line 0.26.1", - "anyhow", - "cranelift-entity", - "gimli 0.33.0", - "indexmap", - "log", - "miden-core", - "miden-thiserror", - "midenc-dialect-arith", - "midenc-dialect-cf", - "midenc-dialect-hir", - "midenc-dialect-ub", - "midenc-dialect-wasm", - "midenc-frontend-wasm-metadata", - "midenc-hir", - "midenc-hir-symbol", - "midenc-session", - "wasmparser 0.248.0", - "wasmprinter", + "bon", + "miden-agglayer", + "miden-processor", + "miden-protocol", + "miden-prover", + "miden-standards", + "thiserror", ] [[package]] -name = "midenc-frontend-wasm-metadata" -version = "0.13.1" +name = "miden-tx-batch" +version = "0.16.0-rc.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09640b069d663d9a594213c94adca634cb52f66cb22e21230e252c45e368f6f6" +checksum = "7be4c5fa200b15f66f6ab729eb04cb5a9b4a6ecf55d722dc57a10e6cb598760f" dependencies = [ - "serde", - "serde_json", + "miden-processor", + "miden-protocol", + "miden-prover", + "miden-verifier", + "thiserror", ] [[package]] -name = "midenc-hir" -version = "0.9.2" +name = "miden-utils-core-derive" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52af56605ba52c8abf23d63d0e94f375a8f882e4b8150a7db2f7b41293bc2421" +checksum = "b964d634a3d71713d78e0fcd8680e8338af1de05a9704092a7e1a5bab91b59b1" dependencies = [ - "anyhow", - "base64", - "bitflags 2.13.0", - "blink-alloc", - "compact_str", - "hashbrown 0.17.1", - "intrusive-collections", - "inventory", - "litcheck-filecheck", - "log", - "miden-core", - "miden-thiserror", - "midenc-hir-macros", - "midenc-hir-symbol", - "midenc-hir-type", - "midenc-session", - "paste", - "rustc-demangle", - "rustc-hash", - "semver 1.0.28", - "smallvec", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "midenc-hir-analysis" -version = "0.9.2" +name = "miden-utils-diagnostics" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6587b061df95c79eee37a192a24b32aa55777db1a1e40ba1302b6e05dfe6132" +checksum = "3adb8571f6d49572a4c60b56c3e896aa7c39d8fbb62a20579f25e9b836192ed1" dependencies = [ - "bitvec", - "blink-alloc", - "log", - "midenc-hir", + "miden-debug-types", + "miden-miette", + "tracing", ] [[package]] -name = "midenc-hir-macros" -version = "0.9.2" +name = "miden-utils-indexing" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a51e81dbfe9a777753589197d178e55b984c17c8cb57cbe4b7c807f99fb4c4c7" +checksum = "180da86b4f290b72219c4fe7c5362fdb1711a9a456739e2cb0c3031eb9487641" dependencies = [ - "Inflector", - "darling", - "proc-macro2", - "quote", - "syn 2.0.118", + "miden-serde-utils", + "proptest", + "serde", + "thiserror", ] [[package]] -name = "midenc-hir-symbol" -version = "0.9.2" +name = "miden-utils-sync" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "682a3bd80dc05bd1c21041a313c5294c0b0016216474572fe4b3d26e4dabc967" +checksum = "8582a4e374c500ce921d15b89735f3a3ddf629bbc82f250ccf85b9d905128467" dependencies = [ - "Inflector", - "compact_str", - "hashbrown 0.17.1", "lock_api", - "miden-formatting", + "loom", + "once_cell", "parking_lot", - "rustc-hash", - "toml 1.1.2+spec-1.1.0", ] [[package]] -name = "midenc-hir-transform" -version = "0.9.2" +name = "miden-verifier" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26b823b7adab75fd0111bd82913464bb7a113eb5ba4f493d0732e8b15c8ecb7" +checksum = "ef8afd2b71996f9167de50b82e9de848e702740cfd3f3e8bfed8f1686dda87cd" dependencies = [ - "log", - "midenc-hir", - "midenc-hir-analysis", - "midenc-session", + "miden-air", + "miden-core", + "miden-crypto", + "miden-precompiles", + "miden-precompiles-prover", + "miden-serde-utils", + "serde", + "serde-wincode", + "thiserror", ] [[package]] name = "midenc-hir-type" -version = "0.6.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ff0511aa2201f7098995e38a3c97a319d379c3b2d26fb83677b21b71f61a7b4" +checksum = "f72909a4bae8dca4bbd34c28dcbcdff595afc47e48c312a683108f7452bd270b" dependencies = [ "miden-formatting", "miden-serde-utils", @@ -3198,48 +3002,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "midenc-log" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712085bf5f6e1d54242c1724d4f74c46d74ac411862fb37367f36555c1dcb108" -dependencies = [ - "anstream", - "anstyle", - "jiff", - "log", - "regex", -] - -[[package]] -name = "midenc-session" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cbec498bbece9952e3c884c8c2bdb73d4ec6dfb8b8fa4ed0e947e44724ff9d7" -dependencies = [ - "anyhow", - "clap", - "hashbrown 0.17.1", - "heck", - "inventory", - "log", - "miden-assembly-syntax", - "miden-core", - "miden-core-lib", - "miden-debug-types", - "miden-mast-package", - "miden-package-registry", - "miden-project", - "miden-protocol", - "miden-thiserror", - "midenc-hir-macros", - "midenc-hir-symbol", - "parking_lot", - "rustc-hash", - "smallvec", - "termcolor", -] - [[package]] name = "miette" version = "7.6.0" @@ -3267,7 +3029,7 @@ checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -3277,14 +3039,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", - "simd-adler32", ] [[package]] name = "mio" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" dependencies = [ "libc", "wasi", @@ -3297,21 +3058,6 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" -[[package]] -name = "nanorand" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" -dependencies = [ - "getrandom 0.2.17", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - [[package]] name = "nu-ansi-term" version = "0.50.3" @@ -3327,7 +3073,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" dependencies = [ - "num-bigint", + "num-bigint 0.4.8", "num-complex", "num-integer", "num-iter", @@ -3345,6 +3091,16 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-bigint" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93e7820bc0a80a0238e650327316f929ba18d5be054b647490a3a6a339f3e7c0" +dependencies = [ + "num-integer", + "num-traits", +] + [[package]] name = "num-complex" version = "0.4.6" @@ -3360,22 +3116,11 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" -[[package]] -name = "num-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.118", -] - [[package]] name = "num-integer" -version = "0.1.46" +version = "0.1.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" dependencies = [ "num-traits", ] @@ -3396,7 +3141,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "num-bigint", + "num-bigint 0.4.8", "num-integer", "num-traits", ] @@ -3430,17 +3175,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "object" -version = "0.39.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5a6c098c7a3b6547378093f5cc30bc54fd361ce711e05293a5cc589562739b" -dependencies = [ - "flate2", - "memchr", - "ruzstd", -] - [[package]] name = "once_cell" version = "1.21.4" @@ -3452,16 +3186,10 @@ dependencies = [ ] [[package]] -name = "once_cell_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" - -[[package]] -name = "opaque-debug" -version = "0.3.1" +name = "once_cell_polyfill" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "openssl-probe" @@ -3477,9 +3205,9 @@ checksum = "d211803b9b6b570f68772237e415a029d5a50c65d382910b879fb19d3271f94d" [[package]] name = "p3-air" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c824e8d7c7ddf208b742eac8d48e0b2d52d22fa013578a7762bf6931dbab1f46" +checksum = "ddb1be05c0d6f691afe0c9f468018a9a37cfa904dee78a8081ec96eb3cdd88e8" dependencies = [ "p3-field", "p3-matrix", @@ -3488,9 +3216,9 @@ dependencies = [ [[package]] name = "p3-blake3" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2733229a713bd83ccf5eb749e8f8e7380c1052674394a25c0422a772204a20af" +checksum = "6f202f5fbcceb6f56f783d98efb5de27e5a171470e3364de97b0923b39c87ab5" dependencies = [ "blake3", "p3-symmetric", @@ -3499,9 +3227,9 @@ dependencies = [ [[package]] name = "p3-challenger" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8972ccd1d5dc90e46cdb1f2ab4ee2bae49b3917e5e98aa533f0c2b779c010445" +checksum = "84d5d5e1ecf2c80b09b48ce870e8abd08b643454101c5dc9d0fd71bfbd78224d" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -3513,27 +3241,27 @@ dependencies = [ [[package]] name = "p3-dft" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17771aca44632f9cc11f2718d7ea7ec06794946c4190ef3a985bfc893f14c18a" +checksum = "4321a952da2721ecd85ca593ea189798dfb4e439a2cc1378ce1442091880f173" dependencies = [ - "itertools", + "itertools 0.15.0", "p3-field", "p3-matrix", "p3-maybe-rayon", "p3-util", - "spin 0.10.0", + "spin 0.12.3", "tracing", ] [[package]] name = "p3-field" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f3eb24d0591fd4d282d89cbe4e4efba5571c699375006f80b2cbf53ce83461c" +checksum = "53db75d38e04fc255826f388eca9d05976733dc9754aa3db411bc9ea1a37c1a0" dependencies = [ - "itertools", - "num-bigint", + "itertools 0.15.0", + "num-bigint 0.5.1", "p3-maybe-rayon", "p3-util", "paste", @@ -3544,11 +3272,11 @@ dependencies = [ [[package]] name = "p3-goldilocks" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5751c6591a0d2397d726620c2c29a7436ec6c5e19d2ed74ca5d078d4fbb18eb5" +checksum = "d03b3f31080df31be723b876709246f8f1e532e1c5b82efb5281d705c8304c63" dependencies = [ - "num-bigint", + "num-bigint 0.5.1", "p3-challenger", "p3-dft", "p3-field", @@ -3560,13 +3288,14 @@ dependencies = [ "paste", "rand 0.10.2", "serde", + "spin 0.12.3", ] [[package]] name = "p3-keccak" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a7df174ff0c19a8742eb4698eaa1667c5f858d018e2faf09c55f1f24a6f9c3" +checksum = "ae50c8c37eb847c660298fb275e53c025c49b2623a8cfabf67f5322258b2b4db" dependencies = [ "p3-symmetric", "p3-util", @@ -3575,11 +3304,11 @@ dependencies = [ [[package]] name = "p3-matrix" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea9c94c0714944e7b8a9a62e6340b1e3e1d3f8ecfd3e35c08798360200e73eff" +checksum = "473eb920c446a6f4536e0d3528fbdca2a23c0e24e1d0d7767452e6d385dd335c" dependencies = [ - "itertools", + "itertools 0.15.0", "p3-field", "p3-maybe-rayon", "p3-util", @@ -3590,18 +3319,18 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eebc233a34b1ab0273f35b4052fa2eeb3114b22ba4575bd7da00716e878ffb77" +checksum = "e6fddfd435f96394769414cf5590b77058aa506659bf20d6592e9d1989e04440" dependencies = [ "rayon", ] [[package]] name = "p3-mds" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b5441fa8116246ec9e6c835f15273cb27777ca572960ec87476b67fef13e01e" +checksum = "551ba0ab2cccd89f85a99450224898aff224e323bbf61f777ba6344f0896ef10" dependencies = [ "p3-dft", "p3-field", @@ -3612,12 +3341,12 @@ dependencies = [ [[package]] name = "p3-monty-31" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8724f330ea6d19dd4f2436aa0f88b5fcbf88f0f55ca7fccd3fea8b736dbcddad" +checksum = "871f635f7340cd0868b17e43e0c98fefdafdaed90469d0725caf6d8372a2a47c" dependencies = [ - "itertools", - "num-bigint", + "itertools 0.15.0", + "num-bigint 0.5.1", "p3-dft", "p3-field", "p3-matrix", @@ -3630,26 +3359,27 @@ dependencies = [ "paste", "rand 0.10.2", "serde", - "spin 0.10.0", + "spin 0.12.3", "tracing", ] [[package]] name = "p3-poseidon1" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e2a562fea210baae390a32f9ecf0dd8724ae3f4352d1c8e413077b6f00a162" +checksum = "8d0d304e9a1f29c0d66534aa84e69528e2118351fdce08dcf5898af4e0fecc32" dependencies = [ "p3-field", + "p3-mds", "p3-symmetric", "rand 0.10.2", ] [[package]] name = "p3-poseidon2" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06394851c161d17e4aa4ad2aad5557d32f14cadd1dc838f965d8e1821a63b8c5" +checksum = "43eb8a73a26d14becaed1c67c3e8a047e4311d7909b402383c82ca9643ba17c6" dependencies = [ "p3-field", "p3-mds", @@ -3660,11 +3390,11 @@ dependencies = [ [[package]] name = "p3-symmetric" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac1a276d421f8ef3361bb7d8c39a02c93c6b3f10eeaa559cc4c50222f9a5b82" +checksum = "2015ea80cad969b6aabf27a04884286fe1354393b166d968ee0d80a95126b2a4" dependencies = [ - "itertools", + "itertools 0.15.0", "p3-field", "p3-util", "serde", @@ -3672,13 +3402,40 @@ dependencies = [ [[package]] name = "p3-util" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d08a58162a4c264269ef454f0b28dcda89939490eecacb2b2cf5b00f719b80f6" +checksum = "6c5466fc40e6df89d3b291a2eff16b33e68e8571207790370137ec18090aadab" dependencies = [ "rayon", "serde", - "transpose", +] + +[[package]] +name = "parity-scale-codec" +version = "3.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" +dependencies = [ + "arrayvec", + "bitvec", + "byte-slice-cast", + "const_format", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "rustversion", + "serde", +] + +[[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", + "proc-macro2", + "quote", + "syn 2.0.119", ] [[package]] @@ -3711,22 +3468,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] -name = "path-absolutize" -version = "3.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4af381fe79fa195b4909485d99f73a80792331df0625188e707854f0b3383f5" -dependencies = [ - "path-dedot", -] - -[[package]] -name = "path-dedot" -version = "3.1.1" +name = "pastey" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07ba0ad7e047712414213ff67533e6dd477af0a4e1d14fb52343e53d30ea9397" -dependencies = [ - "once_cell", -] +checksum = "2ee67f1008b1ba2321834326597b8e186293b049a023cdef258527550b9935b4" [[package]] name = "percent-encoding" @@ -3736,56 +3481,14 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.7" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47627dd7305c6a2d6c8c6bcd24c5a4c17dbbf425f4f9c5313e724b38fc9782e9" +checksum = "5a07a60cc7a4d00c91f95c685609d1d2f79050e6804b70ebedd7650f0b839bcf" dependencies = [ "memchr", "ucd-trie", ] -[[package]] -name = "pest_derive" -version = "2.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b4254325ecad416ab689e27ba51da03ba01a9632bc6e108f5fe7c3c4ad29d58" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c4c0e91ead7a8f7acecbca6f003fc2e8282b1dbe2dd9c9d2f16aba42995e0a7" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn 2.0.118", -] - -[[package]] -name = "pest_meta" -version = "2.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9744bc48116fee06334924bb5f2bad41eed5e89bd26e29b0b799f9a3f82c210" -dependencies = [ - "pest", -] - -[[package]] -name = "petgraph" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" -dependencies = [ - "fixedbitset", - "indexmap", -] - [[package]] name = "petgraph" version = "0.8.3" @@ -3794,16 +3497,7 @@ checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" dependencies = [ "fixedbitset", "hashbrown 0.15.5", - "indexmap", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher", + "indexmap 2.14.0", ] [[package]] @@ -3823,7 +3517,7 @@ checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -3834,9 +3528,9 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pkcs8" -version = "0.10.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7" dependencies = [ "der", "spki", @@ -3844,26 +3538,25 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "poly1305" -version = "0.8.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +checksum = "6e2d0073b297041425c7c3df6eb4792d598a15323fe63346852b092eca02904c" dependencies = [ - "cpufeatures 0.2.17", - "opaque-debug", + "cpufeatures 0.3.0", "universal-hash", ] [[package]] name = "portable-atomic" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" [[package]] name = "portable-atomic-util" @@ -3890,19 +3583,60 @@ dependencies = [ ] [[package]] -name = "precomputed-hash" -version = "0.1.1" +name = "prettyplease" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn 2.0.119", +] [[package]] name = "prettyplease" -version = "0.2.37" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +checksum = "2bfe0f4c752e450fc2faf62654f1c134747922825d5b04ca717b8874f41a40c0" dependencies = [ "proc-macro2", - "syn 2.0.118", + "syn 3.0.4", +] + +[[package]] +name = "primefield" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c555a6e4eb7d4e158fcb028c835c3b8642206ddc279b5c6b202ef9a8bdb592f4" +dependencies = [ + "crypto-bigint", + "crypto-common 0.2.2", + "ff", + "rand_core 0.10.1", + "subtle", + "zeroize", +] + +[[package]] +name = "primeorder" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c9f42978c78a00e3d68f69fc03e57a234debae69da4020a4fb588fcdcd07b06" +dependencies = [ + "elliptic-curve", + "primefield", + "serdect", + "wnaf", +] + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec", + "uint 0.9.5", ] [[package]] @@ -3912,7 +3646,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "721a1da530b5a2633218dc9f75713394c983c352be88d2d7c9ee85e2c4c21794" dependencies = [ "fixed-hash", - "uint", + "uint 0.10.1", ] [[package]] @@ -3922,37 +3656,46 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93980406f12d9f8140ed5abe7155acb10bb1e69ea55c88960b9c2f117445ef96" dependencies = [ "equivalent", - "indexmap", + "indexmap 2.14.0", "serde", ] [[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" +name = "proc-macro-crate" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error-attr3" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +checksum = "82366fd7d8b7a440d66d13418820c69df9b3908bcb1a0476d7f5ce5d12f5a04d" dependencies = [ "proc-macro2", "quote", ] [[package]] -name = "proc-macro-error2" -version = "2.0.1" +name = "proc-macro-error3" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +checksum = "b511283ea8a74b4b39447b128c5d00f03a356b7424554b13e298a5550100d9ac" dependencies = [ - "proc-macro-error-attr2", + "proc-macro-error-attr3", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -3963,10 +3706,10 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "num-traits", - "rand 0.9.4", - "rand_chacha", + "rand 0.9.5", + "rand_chacha 0.9.0", "rand_xorshift", "regex-syntax", "unarray", @@ -3980,14 +3723,14 @@ checksum = "fb6dc647500e84a25a85b100e76c85b8ace114c209432dc174f20aac11d4ed6c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "prost" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" +checksum = "528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1" dependencies = [ "bytes", "prost-derive", @@ -3995,22 +3738,22 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7" +checksum = "03da047801ff44bb6a4d407d4860c05fd70bb81714e6b2f3812603d5b145b042" dependencies = [ "heck", - "itertools", + "itertools 0.14.0", "log", "multimap", - "petgraph 0.8.3", - "prettyplease", + "petgraph", + "prettyplease 0.2.37", "prost", "prost-types", "pulldown-cmark", "pulldown-cmark-to-cmark", "regex", - "syn 2.0.118", + "syn 2.0.119", "tempfile", ] @@ -4021,17 +3764,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf" dependencies = [ "anyhow", - "itertools", + "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "prost-reflect" -version = "0.16.4" +version = "0.16.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "590aa145fee8f7a26b5a6055365e7c5e89a5c1caae9869de76ec0ee73181a2f9" +checksum = "01b80ea363c31af2de2b92e3c07ed1156628f7838c4afb4df75ee78a37fedbd1" dependencies = [ "logos 0.16.1", "miette", @@ -4041,9 +3784,9 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7" +checksum = "f94967dc7688f3054c7fac87473ffae4cc4c3904800e2d9f5b857246d8963b0a" dependencies = [ "prost", ] @@ -4081,7 +3824,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f5df7e552bc7edd075f5783a87fbfc21d6a546e32c16985679c488c18192d83" dependencies = [ - "indexmap", + "indexmap 2.14.0", "log", "priority-queue", "rustc-hash", @@ -4095,25 +3838,25 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "memchr", "unicase", ] [[package]] name = "pulldown-cmark-to-cmark" -version = "22.0.0" +version = "22.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50793def1b900256624a709439404384204a5dc3a6ec580281bfaac35e882e90" +checksum = "ab1ad36992cead65f02aa399a373a42730922f1525d988172634fdefdecb8a60" dependencies = [ "pulldown-cmark", ] [[package]] name = "quote" -version = "1.0.46" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -4138,20 +3881,22 @@ checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] name = "rand" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" +checksum = "e058c7de0b26af77780c769414d6257830bb240f3c38477dbc2c16e5f54d6d4c" dependencies = [ + "libc", + "rand_chacha 0.3.1", "rand_core 0.6.4", ] [[package]] name = "rand" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" dependencies = [ - "rand_chacha", + "rand_chacha 0.9.0", "rand_core 0.9.5", ] @@ -4161,9 +3906,21 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" dependencies = [ + "chacha20", + "getrandom 0.4.3", "rand_core 0.10.1", ] +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + [[package]] name = "rand_chacha" version = "0.9.0" @@ -4174,6 +3931,16 @@ dependencies = [ "rand_core 0.9.5", ] +[[package]] +name = "rand_chacha" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e6af7f3e25ded52c41df4e0b1af2d047e45896c2f3281792ed68a1c243daedb" +dependencies = [ + "ppv-lite86", + "rand_core 0.10.1", +] + [[package]] name = "rand_core" version = "0.6.4" @@ -4198,15 +3965,6 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" -[[package]] -name = "rand_hc" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b363d4f6370f88d62bf586c80405657bde0f0e1b8945d47d2ad59b906cb4f54" -dependencies = [ - "rand_core 0.6.4", -] - [[package]] name = "rand_xorshift" version = "0.4.0" @@ -4218,20 +3976,11 @@ dependencies = [ [[package]] name = "rand_xoshiro" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" -dependencies = [ - "rand_core 0.6.4", -] - -[[package]] -name = "rand_xoshiro" -version = "0.7.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f703f4665700daf5512dcca5f43afa6af89f09db47fb56be587f80636bda2d41" +checksum = "662effc7698e08ea324d3acccf8d9d7f7bf79b9785e270a174ea36e56900c91d" dependencies = [ - "rand_core 0.9.5", + "rand_core 0.10.1", ] [[package]] @@ -4260,14 +4009,34 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", +] + +[[package]] +name = "ref-cast" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e440fb4e4b4147295338efb76001ab9e4efc0e5839df2c47fc5ac2381d365c3" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92ecd8964f8453721699a1ed72037b0db49ce2f5a5138486ee89bed6f67cdf3a" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.4", ] [[package]] name = "regex" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0e75113e14dc5acb068cd0786884f214f1312650a3d36d269f5c4f3cdee8a2" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -4277,9 +4046,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.15" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f388202e4b80542a0921078cc23b6333bcf1409c1e3f86404cae4766a6131db" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -4294,12 +4063,12 @@ checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rfc6979" -version = "0.4.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +checksum = "b4a459cddafb3fe76b31fd8f1108007566c40301feb64dc7b54656eb7388172b" dependencies = [ + "crypto-bigint", "hmac", - "subtle", ] [[package]] @@ -4316,15 +4085,39 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes", + "rustc-hex", +] + [[package]] name = "ruint" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45caf26f647c19115bf9c453c70ffe4a4a3a6390dceebd942610584f99b8ddce" +checksum = "f5e99bff0393163bb25029a6af25d3d8d202ba5b5438a74d1bd8789f5c822970" dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "ark-ff 0.5.0", + "ark-ff 0.6.0", + "bytes", + "fastrlp 0.3.1", + "fastrlp 0.4.0", + "num-bigint 0.4.8", + "num-integer", + "num-traits", + "parity-scale-codec", + "primitive-types 0.12.2", "proptest", - "rand 0.8.6", - "rand 0.9.4", + "rand 0.8.8", + "rand 0.9.5", + "rlp", "ruint-macro", "serde_core", "valuable", @@ -4343,7 +4136,7 @@ version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "165ca6e57b20e1351573e3729b958bc62f0e48025386970b6e4d29e7a7e71f3f" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "fallible-iterator", "fallible-streaming-iterator", "hashlink", @@ -4373,6 +4166,12 @@ version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + [[package]] name = "rustc_version" version = "0.2.3" @@ -4382,6 +4181,15 @@ dependencies = [ "semver 0.9.0", ] +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + [[package]] name = "rustc_version" version = "0.4.1" @@ -4397,18 +4205,18 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] name = "rustls" -version = "0.23.41" +version = "0.23.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" +checksum = "0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06" dependencies = [ "log", "once_cell", @@ -4433,18 +4241,18 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046" +checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" dependencies = [ "zeroize", ] [[package]] name = "rustls-webpki" -version = "0.103.13" +version = "0.103.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" dependencies = [ "ring", "rustls-pki-types", @@ -4457,21 +4265,6 @@ version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" -[[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 = "same-file" version = "1.0.6" @@ -4490,6 +4283,30 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "687274d293b6cdc6e73e0fee520bf2049650090d7164f87672d212a3c530cf4a" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -4504,14 +4321,14 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sec1" -version = "0.7.3" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d" dependencies = [ "base16ct", + "ctutils", "der", - "generic-array", - "pkcs8", + "hybrid-array", "subtle", "zeroize", ] @@ -4522,7 +4339,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "core-foundation", "core-foundation-sys", "libc", @@ -4545,7 +4362,16 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" dependencies = [ - "semver-parser", + "semver-parser 0.7.0", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser 0.10.3", ] [[package]] @@ -4560,15 +4386,24 @@ dependencies = [ [[package]] name = "semver-parser" -version = "0.7.0" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "semver-parser" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" +dependencies = [ + "pest", +] [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -4586,31 +4421,42 @@ dependencies = [ "typeid", ] +[[package]] +name = "serde-wincode" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa9d3a86c66cf10ce79df36f555a5a4c8d72a82515d9ea8ca420e02c925c30f" +dependencies = [ + "serde", + "thiserror", + "wincode", +] + [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.4", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -4621,13 +4467,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.4", ] [[package]] @@ -4639,35 +4485,66 @@ dependencies = [ "serde_core", ] +[[package]] +name = "serde_with" +version = "3.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee78f1fbe43ac4a0e47aadb3dbd357b69eb0d3793e948624cd03dd2750ab1c0a" +dependencies = [ + "base64", + "bs58", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.14.0", + "jiff", + "schemars 0.9.0", + "schemars 1.2.2", + "serde_core", + "serde_json", + "time", +] + +[[package]] +name = "serdect" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66cf8fedced2fcf12406bcb34223dffb92eaf34908ede12fed414c82b7f00b3e" +dependencies = [ + "base16ct", + "serde", +] + [[package]] name = "sha2" -version = "0.10.9" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" dependencies = [ "cfg-if", - "cpufeatures 0.2.17", - "digest 0.10.7", + "cpufeatures 0.3.0", + "digest 0.11.3", ] [[package]] name = "sha3" -version = "0.10.9" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77fd7028345d415a4034cf8777cd4f8ab1851274233b45f84e3d955502d93874" +checksum = "be176f1a57ce4e3d31c1a166222d9768de5954f811601fb7ca06fc8203905ce1" dependencies = [ - "digest 0.10.7", - "keccak 0.1.6", + "digest 0.11.3", + "keccak", ] [[package]] name = "sha3" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be176f1a57ce4e3d31c1a166222d9768de5954f811601fb7ca06fc8203905ce1" +checksum = "bc9bad02c26382724b2d2692c6f179285e4b54eeecd7968f52a50059c3c11759" dependencies = [ "digest 0.11.3", - "keccak 0.2.0", + "keccak", + "sponge-cursor", ] [[package]] @@ -4687,34 +4564,12 @@ checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest 0.10.7", - "rand_core 0.6.4", -] - -[[package]] -name = "simd-adler32" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" - -[[package]] -name = "siphasher" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" - -[[package]] -name = "sized-chunks" -version = "0.6.5" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" +checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5" dependencies = [ - "bitmaps", - "typenum", + "digest 0.11.3", + "rand_core 0.10.1", ] [[package]] @@ -4740,9 +4595,9 @@ checksum = "e8e2fb0f499abb4d162f2bedad68f5ef91a1682b5a03596ddb67efd37768d100" [[package]] name = "socket2" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", "windows-sys 0.61.2", @@ -4750,37 +4605,37 @@ dependencies = [ [[package]] name = "spin" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" dependencies = [ "lock_api", ] [[package]] name = "spin" -version = "0.10.0" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" +checksum = "0134f9043ed38b087ac4f7d4af44c79e2c9e5094421fe3164f435ce585953b10" dependencies = [ "lock_api", ] [[package]] name = "spki" -version = "0.7.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +checksum = "1d9efca8738c78ee9484207732f728b1ef517bbb1833d6fc0879ca898a522f6f" dependencies = [ "base64ct", "der", ] [[package]] -name = "stable_deref_trait" -version = "1.2.1" +name = "sponge-cursor" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" +checksum = "3a0219bd7d979d58245a4f41f695e1ac9f8befdffadd7f61f1bae9e39abc6620" [[package]] name = "static_assertions" @@ -4788,24 +4643,6 @@ 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 = "string_cache" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" -dependencies = [ - "new_debug_unreachable", - "parking_lot", - "phf_shared", - "precomputed-hash", -] - [[package]] name = "strip-ansi-escapes" version = "0.2.1" @@ -4861,9 +4698,20 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.118" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" +checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f" dependencies = [ "proc-macro2", "quote", @@ -4872,14 +4720,14 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "1.6.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec005042c7d952febc1a3ef5b0f6674e9054aa836877a31c90b20e25b3d31744" +checksum = "e452eb8cb83fc8b81597eb07c8d39f770d04905af9c5bffce8bea7213df29960" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -4896,9 +4744,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-triple" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "591ef38edfb78ca4771ee32cf494cb8771944bee237a9b91fc9c1424ac4b777b" +checksum = "c3a6bfce3d99adfa72d24750a61f782f3036a81e7f86d8841ee1326deaebd171" [[package]] name = "tempfile" @@ -4910,16 +4758,7 @@ dependencies = [ "getrandom 0.4.3", "once_cell", "rustix", - "windows-sys 0.61.2", -] - -[[package]] -name = "term" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8c27177b12a6399ffc08b98f76f7c9a1f4fe9fc967c784c5a071fa8d93cf7e1" -dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -4954,38 +4793,38 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.4", ] [[package]] name = "thread_local" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070" dependencies = [ "cfg-if", ] [[package]] name = "time" -version = "0.3.53" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" dependencies = [ "deranged", "num-conv", @@ -5003,9 +4842,9 @@ checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c431b87111666e491a90baa837f914fb45cd5dc3c268591b0220ff5057f2085f" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" dependencies = [ "num-conv", "time-core", @@ -5020,11 +4859,26 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tinyvec" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" +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" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "bytes", "libc", @@ -5037,13 +4891,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.7.0" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.4", ] [[package]] @@ -5058,9 +4912,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" +checksum = "a3d06f0b082ba57c26b79407372e57cf2a1e28124f78e9479fe80322cf53420b" dependencies = [ "futures-core", "pin-project-lite", @@ -5070,54 +4924,31 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.18" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" dependencies = [ "bytes", "futures-core", "futures-sink", + "libc", "pin-project-lite", "tokio", ] [[package]] name = "toml" -version = "0.9.12+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" -dependencies = [ - "indexmap", - "serde_core", - "serde_spanned", - "toml_datetime 0.7.5+spec-1.1.0", - "toml_parser", - "toml_writer", - "winnow 0.7.15", -] - -[[package]] -name = "toml" -version = "1.1.2+spec-1.1.0" +version = "1.1.4+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +checksum = "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5" dependencies = [ - "indexmap", + "indexmap 2.14.0", "serde_core", "serde_spanned", - "toml_datetime 1.1.1+spec-1.1.0", + "toml_datetime", "toml_parser", "toml_writer", - "winnow 1.0.3", -] - -[[package]] -name = "toml_datetime" -version = "0.7.5+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" -dependencies = [ - "serde_core", + "winnow", ] [[package]] @@ -5131,33 +4962,30 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.12+spec-1.1.0" +version = "0.25.13+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" +checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" dependencies = [ - "indexmap", - "serde_core", - "serde_spanned", - "toml_datetime 1.1.1+spec-1.1.0", + "indexmap 2.14.0", + "toml_datetime", "toml_parser", - "toml_writer", - "winnow 1.0.3", + "winnow", ] [[package]] name = "toml_parser" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" dependencies = [ - "winnow 1.0.3", + "winnow", ] [[package]] name = "toml_writer" -version = "1.1.1+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" [[package]] name = "tonic" @@ -5195,10 +5023,10 @@ version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c68f61875ac5293cf72e6c8cf0158086428c82c37229e98c840878f1706b0322" dependencies = [ - "prettyplease", + "prettyplease 0.2.37", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -5231,12 +5059,12 @@ version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "654e5643eff75d7f8c99197ce1440ed19a3474eada74c12bbac488b2cafdae27" dependencies = [ - "prettyplease", + "prettyplease 0.2.37", "proc-macro2", "prost-build", "prost-types", "quote", - "syn 2.0.118", + "syn 2.0.119", "tempfile", "tonic-build", ] @@ -5274,7 +5102,7 @@ checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", - "indexmap", + "indexmap 2.14.0", "pin-project-lite", "slab", "sync_wrapper", @@ -5316,7 +5144,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -5358,16 +5186,6 @@ dependencies = [ "tracing-log", ] -[[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" @@ -5376,9 +5194,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "trybuild" -version = "1.0.117" +version = "1.0.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0710d4dfbeae4f9c390baa784c49858a7468fa433f3fe5d0ec5ebef651cf59f9" +checksum = "1e605bf6b39357663d8ba4e984f8be8da8df6bb32e81031d6889024ea8fd68e4" dependencies = [ "dissimilar", "glob", @@ -5387,21 +5205,9 @@ dependencies = [ "serde_json", "target-triple", "termcolor", - "toml 1.1.2+spec-1.1.0", + "toml", ] -[[package]] -name = "twox-hash" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" - -[[package]] -name = "typed-arena" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" - [[package]] name = "typeid" version = "1.0.3" @@ -5422,9 +5228,21 @@ checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "uint" -version = "0.10.0" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "uint" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909988d098b2f738727b161a106cfc7cab00c539c2687a8836f8e565976fb53e" +checksum = "6f9227a75a5a540a464c832ad4a4195dbdbecd8787610a56262721fde6f04f90" dependencies = [ "byteorder", "crunchy", @@ -5482,12 +5300,12 @@ checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "universal-hash" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +checksum = "f4987bdc12753382e0bec4a65c50738ffaabc998b9cdd1f952fb5f39b0048a96" dependencies = [ - "crypto-common 0.1.7", - "subtle", + "crypto-common 0.2.2", + "ctutils", ] [[package]] @@ -5574,9 +5392,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" dependencies = [ "cfg-if", "once_cell", @@ -5587,9 +5405,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.76" +version = "0.4.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" +checksum = "6b7777d5cc23d0e91404e53ce2d5e8ec7acae3026b16233dba62cd3246457950" dependencies = [ "js-sys", "wasm-bindgen", @@ -5597,9 +5415,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5607,36 +5425,26 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.253.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59972d6cd272259de647b7c1f1912e45e289c75ffd4be04e10695507cd7e1b59" -dependencies = [ - "leb128fmt", - "wasmparser 0.253.0", -] - [[package]] name = "wasm-streams" version = "0.5.0" @@ -5650,76 +5458,11 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wasmparser" -version = "0.248.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa4439c5eee9df71ee0c6efb37f63b1fcb1fec38f85f5142c54e7ed05d33091a" -dependencies = [ - "bitflags 2.13.0", - "indexmap", - "semver 1.0.28", -] - -[[package]] -name = "wasmparser" -version = "0.253.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19db11f87d2486580e1e8b6f494c54df7e0566b87d0b599db843c24019667339" -dependencies = [ - "bitflags 2.13.0", - "indexmap", - "semver 1.0.28", -] - -[[package]] -name = "wasmprinter" -version = "0.248.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b264a5410b008d4d199a92bf536eae703cbd614482fc1ec53831cf19e1c183" -dependencies = [ - "anyhow", - "termcolor", - "wasmparser 0.248.0", -] - -[[package]] -name = "wasmtime-internal-core" -version = "44.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedd3947487d0afdd37accb981466fcd60571e898004c8955111f88686581dfc" -dependencies = [ - "hashbrown 0.16.1", - "libm", -] - -[[package]] -name = "wast" -version = "253.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3264542f8965c5d84fb1085d924bfba9a6314bb228eff13a2de14d7627664d0" -dependencies = [ - "bumpalo", - "leb128fmt", - "memchr", - "unicode-width 0.2.2", - "wasm-encoder", -] - -[[package]] -name = "wat" -version = "1.253.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bfc5ce906144200c972ec617470aa35bd847472e170b26dde3e80541c674055" -dependencies = [ - "wast", -] - [[package]] name = "web-sys" -version = "0.3.103" +version = "0.3.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" +checksum = "c435338968042f4f59a557f690a253676d47ce13ceb55d70100e7facf6620a30" dependencies = [ "js-sys", "wasm-bindgen", @@ -5731,7 +5474,19 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.52.0", +] + +[[package]] +name = "wincode" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfc6339f1ba427bf7ad7c42403b28e524832ba2ddb5eef1bb2cc3b85db6b7b75" +dependencies = [ + "pastey", + "proc-macro2", + "quote", + "thiserror", ] [[package]] @@ -5755,7 +5510,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -5766,7 +5521,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -5877,15 +5632,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.7.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" - -[[package]] -name = "winnow" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" dependencies = [ "memchr", ] @@ -5896,6 +5645,17 @@ version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" +[[package]] +name = "wnaf" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab12e7090f27e2ffd9322651492942d50c2926094af30601e1964337db39daf1" +dependencies = [ + "ff", + "group", + "hybrid-array", +] + [[package]] name = "wyz" version = "0.5.1" @@ -5907,32 +5667,32 @@ dependencies = [ [[package]] name = "x25519-dalek" -version = "2.0.1" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +checksum = "e7e8131a03190127fb2263afc72b322ecadae46b6ff8c6f399ff5d02f5559af6" dependencies = [ "curve25519-dalek", - "rand_core 0.6.4", + "rand_core 0.10.1", ] [[package]] name = "zerocopy" -version = "0.8.54" +version = "0.8.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19" +checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.54" +version = "0.8.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" +checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -5940,9 +5700,23 @@ name = "zeroize" version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/README.md b/README.md index 7d1cedd..c146092 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,26 @@ Before getting started, ensure you have the following prerequisites: 1. **Install Rust** - Make sure you have Rust installed on your system. If not, install it from [rustup.rs](https://rustup.rs/) -2. **Install midenup toolchain** - Follow the installation instructions at: +2. **Install the pinned Miden v0.16 contract toolchain** - The v0.16 midenup channel does not + provision the source-aligned compiler required by this project. Install the immutable compiler + revision into an isolated Cargo root so it does not replace another `cargo-miden` installation: + + ```bash + MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}" + MIDEN_V16_TOOL_ROOT="$MIDEN_CARGO_HOME/miden-v16-0.10.0-rc.1" + COMPILER_PIPELINE_COMMIT=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a + + cargo install cargo-miden --git https://github.com/0xMiden/compiler \ + --rev "$COMPILER_PIPELINE_COMMIT" --locked --root "$MIDEN_V16_TOOL_ROOT" + cargo install midenc --git https://github.com/0xMiden/compiler \ + --rev "$COMPILER_PIPELINE_COMMIT" --locked --root "$MIDEN_V16_TOOL_ROOT" + + CARGO_MIDEN_BIN="$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" + test "$("$CARGO_MIDEN_BIN" miden --version)" = 'cargo-miden 0.10.0-rc.1' + test "$("$MIDEN_V16_TOOL_ROOT/bin/midenc" --version)" = 'midenc 0.10.0-rc.1' + ``` + + Re-derive `MIDEN_CARGO_HOME`, `MIDEN_V16_TOOL_ROOT`, and `CARGO_MIDEN_BIN` in each new shell. ## **Structure** @@ -20,7 +39,6 @@ miden-project/ ├── integration/ # Integration crate (scripts + tests) │ ├── src/ │ │ ├── bin/ # Rust binaries for on-chain interactions -│ │ ├── config.rs # Temporary config file (do not modify!) │ │ ├── helpers.rs # Temporary helper file (do not modify!) │ │ └── lib.rs │ └── tests/ # Test files @@ -58,7 +76,7 @@ This structure provides flexibility as your application grows, allowing you to a To create a new contract crate, run the following command from the workspace root: ```bash -miden new --account contracts/my-account +"$CARGO_MIDEN_BIN" miden new --account contracts/my-account ``` This will scaffold a new contract crate inside the `contracts/` directory with all the necessary boilerplate. @@ -85,28 +103,58 @@ Tests are located in `integration/tests/`. To add a new test: ```bash # Compile a specific contract -miden build --manifest-path contracts/counter-account/Cargo.toml +"$CARGO_MIDEN_BIN" miden build \ + --manifest-path contracts/counter-account/Cargo.toml --release # Or navigate to the contract directory cd contracts/counter-account -miden build +"$CARGO_MIDEN_BIN" miden build --release ``` +The automatic post-edit hook derives the same isolated binary from +`${CARGO_HOME:-$HOME/.cargo}/miden-v16-0.10.0-rc.1`; it does not select a compiler from ambient +`PATH` and rejects any version other than `cargo-miden 0.10.0-rc.1`. + +### Plain Cargo Check and IDE Analysis + +Each contract has a three-line `build.rs` that calls +`miden_sdk_build_script_support::prepare_package_cache()`. For plain `cargo check` or IDE analysis, +select the verified absolute compiler with `CARGO_MIDEN` and use a checkout-private target directory. +Run Cargo from the contract directory so its `.cargo/config.toml` supplies the Miden target settings: + +```bash +PROJECT_ROOT="$PWD" +PLAIN_CARGO_TARGET="$PROJECT_ROOT/target/plain-cargo-v16" +( + cd contracts/counter-account + env -u MIDENC_PACKAGE_CACHE \ + CARGO_MIDEN="$CARGO_MIDEN_BIN" \ + CARGO_TARGET_DIR="$PLAIN_CARGO_TARGET" \ + cargo check --release +) +``` + +Configure an IDE with the same absolute `CARGO_MIDEN` and checkout-private `CARGO_TARGET_DIR`. +Do not set `MIDENC_PACKAGE_CACHE` manually; the build-support wrapper stages and exports it. + ### Run a Binary ```bash # Navigate to integration crate and run a binary cd integration -cargo run --bin increment_count +cargo run --bin increment_count --release ``` +`increment_count` temporarily targets DevNet at `https://rpc.devnet.miden.io` while Testnet is +being upgraded. Running it creates public DevNet accounts, adds a new sender key to the existing +`keystore/`, and submits transactions. Returned transaction IDs prove submission, not finality. + ### Run Tests ```bash -# Navigate to integration crate and run tests -cd integration -cargo test # Run all tests -cargo test counter_test # Run specific test file +# Run from the workspace root +cargo test -p integration --release # Run all tests +cargo test -p integration --release counter_test # Run the counter test ``` ## **Extending the Workspace** diff --git a/contracts/counter-account/Cargo.lock b/contracts/counter-account/Cargo.lock index 4342e90..0911b23 100644 --- a/contracts/counter-account/Cargo.lock +++ b/contracts/counter-account/Cargo.lock @@ -4,19 +4,19 @@ version = 4 [[package]] name = "aead" -version = "0.5.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +checksum = "1973cfbc1a2daf9cf550e74e1f088c28e7f7d8c1e1418fb6c9dc5184b7e84c99" dependencies = [ "crypto-common", - "generic-array", + "inout", ] [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -73,15 +73,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.103" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" - -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "arrayvec" @@ -89,15 +83,6 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" -[[package]] -name = "ascii-canvas" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef1e3e699d84ab1b0911a1010c5c106aa34ae89aeac103be5ce0c3859db1e891" -dependencies = [ - "term", -] - [[package]] name = "autocfg" version = "1.5.1" @@ -106,9 +91,9 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "base16ct" -version = "0.2.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6" [[package]] name = "base64ct" @@ -122,30 +107,6 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32637268377fc7b10a8c6d51de3e7fba1ce5dd371a96e342b34e6078db558e7f" -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bit-set" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" -dependencies = [ - "bit-vec", -] - -[[package]] -name = "bit-vec" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" - [[package]] name = "bitflags" version = "1.3.2" @@ -154,31 +115,30 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" [[package]] name = "blake3" -version = "1.8.5" +version = "1.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aa83c34e62843d924f905e0f5c866eb1dd6545fc4d719e803d9ba6030371fce" +checksum = "6d9e454fc11f76977dc803893aff6304ed33d6a26efae8696573bea74baa27ae" dependencies = [ - "arrayref", "arrayvec", "cc", "cfg-if", "constant_time_eq", - "cpufeatures 0.3.0", + "cpufeatures", ] [[package]] name = "block-buffer" -version = "0.10.4" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ - "generic-array", + "hybrid-array", ] [[package]] @@ -189,9 +149,9 @@ checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "cc" -version = "1.2.66" +version = "1.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5d6cac793997bd970000024b2934968efe83b382de4fdcf4fcb46b6ee4ad996" +checksum = "0ad534f4357a5264cce5019c989cf66a4f0dc4e0d1b1d15f8aacec0ff7360273" dependencies = [ "find-msvc-tools", "jobserver", @@ -207,39 +167,45 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chacha20" -version = "0.9.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" dependencies = [ "cfg-if", "cipher", - "cpufeatures 0.2.17", + "cpufeatures", + "rand_core 0.10.1", ] [[package]] name = "chacha20poly1305" -version = "0.10.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +checksum = "9b89e1c441e926b9c82a8d023f6e1b7ae0adcfaa7d621814e4d60789bac751cb" dependencies = [ "aead", "chacha20", "cipher", "poly1305", - "zeroize", ] [[package]] name = "cipher" -version = "0.4.4" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" dependencies = [ + "block-buffer", "crypto-common", "inout", - "zeroize", ] +[[package]] +name = "cmov" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" + [[package]] name = "colorchoice" version = "1.0.5" @@ -248,9 +214,9 @@ checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "const-oid" -version = "0.9.6" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" [[package]] name = "constant_time_eq" @@ -263,16 +229,14 @@ name = "counter-account" version = "0.1.0" dependencies = [ "miden", + "miden-sdk-build-script-support", ] [[package]] -name = "cpufeatures" -version = "0.2.17" +name = "cpubits" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] +checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae" [[package]] name = "cpufeatures" @@ -322,35 +286,47 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-bigint" -version = "0.5.5" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +checksum = "1a52aa3fcda4e6302a9f48734f234d35d4721b96f8fe07d073f07ce9df4f0271" dependencies = [ - "generic-array", - "rand_core 0.6.4", + "cpubits", + "ctutils", + "hybrid-array", + "num-traits", + "rand_core 0.10.1", "subtle", "zeroize", ] [[package]] name = "crypto-common" -version = "0.1.7" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ - "generic-array", - "rand_core 0.6.4", - "typenum", + "hybrid-array", + "rand_core 0.10.1", +] + +[[package]] +name = "ctutils" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +dependencies = [ + "cmov", + "subtle", ] [[package]] name = "curve25519-dalek" -version = "4.1.3" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +checksum = "b5eed333089e2e1c1ac8c6c0398e5e2497b4c9926ca6d0365ed1e099afa5bc23" dependencies = [ "cfg-if", - "cpufeatures 0.2.17", + "cpufeatures", "curve25519-dalek-derive", "digest", "fiat-crypto", @@ -367,7 +343,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -389,7 +365,7 @@ dependencies = [ "defmt-parser", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -403,9 +379,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.10" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +checksum = "a69dedd701da44b0536442edf09c81a64b0ab97a7a4a5e3d1971f00027cbc63d" dependencies = [ "const-oid", "zeroize", @@ -429,19 +405,19 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "digest" -version = "0.10.7" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ "block-buffer", "const-oid", "crypto-common", - "subtle", + "ctutils", ] [[package]] @@ -452,9 +428,9 @@ checksum = "aeda16ab4059c5fd2a83f2b9c9e9c981327b18aa8e3b313f7e6563799d4f093e" [[package]] name = "ecdsa" -version = "0.16.9" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +checksum = "c0681a4fc24c767085329728d8dfba959af91228aa4610cca4f8ce317ba46ae0" dependencies = [ "der", "digest", @@ -462,13 +438,14 @@ dependencies = [ "rfc6979", "signature", "spki", + "zeroize", ] [[package]] name = "ed25519" -version = "2.2.3" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +checksum = "29fcf32e6c73d1079f83ab4d782de2d81620346a5f38c6237a86a22f8368980a" dependencies = [ "pkcs8", "signature", @@ -476,53 +453,46 @@ dependencies = [ [[package]] name = "ed25519-dalek" -version = "2.2.0" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" +checksum = "6ebaa1a2bf1290ab3bfe5a7b771d050ebffab2711c19a81691c683a5144a25de" dependencies = [ "curve25519-dalek", "ed25519", "serde", "sha2", + "signature", "subtle", "zeroize", ] [[package]] name = "either" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "elliptic-curve" -version = "0.13.8" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +checksum = "9d65aa39b3a5c1c9c1b745c9a019234bb7a21b77abcb4f4d266d706e2d577d65" dependencies = [ "base16ct", "crypto-bigint", + "crypto-common", "digest", "ff", - "generic-array", "group", "hkdf", + "hybrid-array", "pkcs8", - "rand_core 0.6.4", + "rand_core 0.10.1", "sec1", "subtle", "zeroize", ] -[[package]] -name = "ena" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabffdaee24bd1bf95c5ef7cec31260444317e72ea56c4c91750e8b7ee58d5f1" -dependencies = [ - "log", -] - [[package]] name = "env_filter" version = "2.0.0" @@ -565,42 +535,33 @@ dependencies = [ [[package]] name = "ff" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +checksum = "a1f686ab92a9fb0eaf188f6c6c87b89490baa6fdb0db4544ba4dc47f7942489f" dependencies = [ - "rand_core 0.6.4", + "rand_core 0.10.1", "subtle", ] [[package]] name = "fiat-crypto" -version = "0.2.9" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" [[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" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" +checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" [[package]] name = "flume" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +checksum = "5e139bc46ca777eb5efaf62df0ab8cc5fd400866427e56c68b22e414e53bd3be" dependencies = [ - "futures-core", - "futures-sink", - "nanorand", - "spin 0.9.8", + "spin 0.9.9", ] [[package]] @@ -620,9 +581,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -634,9 +595,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -644,39 +605,38 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-core", "futures-sink", "futures-task", "pin-project-lite", - "slab", ] [[package]] @@ -694,30 +654,6 @@ dependencies = [ "windows-result", ] -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", - "zeroize", -] - -[[package]] -name = "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" @@ -725,11 +661,9 @@ 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]] @@ -739,24 +673,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", + "js-sys", "libc", "r-efi 6.0.0", + "rand_core 0.10.1", + "wasm-bindgen", ] [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "group" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "7fd1a1c7a5206c5b7a3f5a0d7ccd3ff85d0c8f5133d62a02680255b0004af5f4" dependencies = [ "ff", - "rand_core 0.6.4", + "rand_core 0.10.1", "subtle", ] @@ -777,22 +714,33 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hkdf" -version = "0.12.4" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" dependencies = [ "hmac", ] [[package]] name = "hmac" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" dependencies = [ "digest", ] +[[package]] +name = "hybrid-array" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707114b52a152fa7bdb290cd7cd5912d9467273b6d74e21b8d81aca1f8533f6b" +dependencies = [ + "subtle", + "typenum", + "zeroize", +] + [[package]] name = "id-arena" version = "2.3.0" @@ -819,11 +767,11 @@ dependencies = [ [[package]] name = "inout" -version = "0.1.4" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" dependencies = [ - "generic-array", + "hybrid-array", ] [[package]] @@ -834,9 +782,9 @@ checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +checksum = "8b4baf93f58d4425749ca49a51c50ebab072c5df6994d08fed93541c331481dc" dependencies = [ "either", ] @@ -849,11 +797,12 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.32" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "961d16382652bfdd8c6f68b223b26a8c93e0d475c672f414411db31c6c5c900e" +checksum = "668b7183bd07af9a4885f5c35b0cc5c83c4607a913c16b7e17291832910d2dcc" dependencies = [ "defmt", + "jiff-core", "jiff-static", "log", "portable-atomic", @@ -861,15 +810,25 @@ dependencies = [ "serde_core", ] +[[package]] +name = "jiff-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7feca88439efe53da3754500c1851dedf3cb36c524dd5cf8225cc0794de95d09" +dependencies = [ + "defmt", +] + [[package]] name = "jiff-static" -version = "0.2.32" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0879bd39df99c4c5e2c6615ccc026391a423dde10532c573e6086eb94a802cc" +checksum = "3a69dcb3a21cfb32ce1cd056169337ca284af0766dd766e7878819b251a49204" dependencies = [ + "jiff-core", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -884,66 +843,36 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.103" +version = "0.3.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" dependencies = [ "cfg-if", - "futures-util", "wasm-bindgen", ] [[package]] name = "k256" -version = "0.13.4" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +checksum = "93f50113171a713f4a4231ef82eb26703607139b35dcb56241f0ceab2ae1f7d8" dependencies = [ - "cfg-if", + "cpubits", "ecdsa", "elliptic-curve", - "once_cell", + "primeorder", "sha2", - "signature", + "wnaf", ] [[package]] name = "keccak" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" -dependencies = [ - "cpufeatures 0.2.17", -] - -[[package]] -name = "lalrpop" -version = "0.22.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4ebbd48ce411c1d10fb35185f5a51a7bfa3d8b24b4e330d30c9e3a34129501" -dependencies = [ - "ascii-canvas", - "bit-set", - "ena", - "itertools", - "lalrpop-util", - "petgraph", - "regex", - "regex-syntax", - "sha3", - "string_cache", - "term", - "unicode-xid", - "walkdir", -] - -[[package]] -name = "lalrpop-util" -version = "0.22.2" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5baa5e9ff84f1aefd264e6869907646538a52147a755d494517a8007fb48733" +checksum = "d8f198d1db720e4940b5a493201d199d9f24f568f8f746bd13706243a2f71598" dependencies = [ - "rustversion", + "cfg-if", + "cpufeatures", ] [[package]] @@ -960,9 +889,9 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libm" @@ -981,9 +910,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "loom" @@ -1015,9 +944,8 @@ checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "miden" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c21f5ff93e5cb2f68e4bc7acb778b5ed1f3af2d54737d5f39cef4136392add5" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" dependencies = [ "miden-base", "miden-base-macros", @@ -1026,15 +954,17 @@ dependencies = [ "miden-field-repr", "miden-sdk-alloc", "miden-stdlib-sys", + "miden-tx-script-args", "wit-bindgen", ] [[package]] name = "miden-ace-codegen" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87598d43cfca4a8c0ecb29cecdc2c9b67e6e99aac91ca108ce0413dfaeec25ab" +checksum = "93a217e3f1fec32105bca7dc421d85ab39199b78d2e43081fc0fa92411de9a84" dependencies = [ + "miden-constraint-compiler", "miden-core", "miden-crypto", "thiserror", @@ -1042,24 +972,24 @@ dependencies = [ [[package]] name = "miden-air" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff5d900b5d214870ed628948342aa2ddab95720371d74a754ddf406e3b67021" +checksum = "90b7b3a23756f2bfdba2b37c8d1551b3b531fce0de42e3a9a7f840bb69018106" dependencies = [ "miden-ace-codegen", "miden-core", "miden-crypto", - "miden-lifted-stark", "miden-utils-indexing", + "p3-field", "thiserror", "tracing", ] [[package]] name = "miden-assembly" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "174c814c212eccf944042a3409833d2d2c7c725fa077306dfb1a81c892112946" +checksum = "727de4350d9ba263be17d9f93dc4b8d0deebabab29c3bed34f32c4af7b1cf20c" dependencies = [ "log", "miden-assembly-syntax", @@ -1074,14 +1004,12 @@ dependencies = [ [[package]] name = "miden-assembly-syntax" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43921711f3df77be1ac975b39fbf483dc05980760a1b932bc1554ca29c43ec81" +checksum = "3874c53f40656a56f74afe8e957d75667218808894ab8f5dbd91e58a8a0c3393" dependencies = [ - "aho-corasick", - "lalrpop", - "lalrpop-util", "log", + "miden-assembly-syntax-cst", "miden-core", "miden-debug-types", "miden-utils-diagnostics", @@ -1096,10 +1024,21 @@ dependencies = [ ] [[package]] -name = "miden-base" -version = "0.13.1" +name = "miden-assembly-syntax-cst" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a20ff6f7505d4482a28df916403d64721ec537a1eb8e686cfa04bb1912d1e117" +checksum = "151b657a50aee75a0591dbd66d57774e2f9ec1f00fa17d773820e736bcca0cb6" +dependencies = [ + "miden-debug-types", + "miden-rowan", + "miden-utils-diagnostics", + "thiserror", +] + +[[package]] +name = "miden-base" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" dependencies = [ "miden-base-sys", "miden-stdlib-sys", @@ -1107,9 +1046,8 @@ dependencies = [ [[package]] name = "miden-base-macros" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "553afd8a19486a250323f0653b02ac09af1ffcf23bf426a8e054529ff3a8248a" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" dependencies = [ "heck", "miden-assembly-syntax", @@ -1122,7 +1060,7 @@ dependencies = [ "proc-macro2", "quote", "semver 1.0.28", - "syn 2.0.118", + "syn 2.0.119", "toml", "wit-bindgen-core", "wit-bindgen-rust", @@ -1130,19 +1068,28 @@ dependencies = [ [[package]] name = "miden-base-sys" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efe798d23cf3c4a87ff71bc54685fed611c7a0356ff23897a5e864cc1f39d3" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" dependencies = [ "miden-field-repr", "miden-stdlib-sys", ] +[[package]] +name = "miden-constraint-compiler" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b95f126188b824423edbbc5eebf9b61c872905c21e3f1e9e9b69d1afbba12288" +dependencies = [ + "miden-core", + "miden-crypto", +] + [[package]] name = "miden-core" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54fc597642fa67a111eaf177de7a8f4c3a001ac5ddafb7d1398ad8551c031e20" +checksum = "55df0c9b5fddcfc2c03c6e476bec0523328fb85090e716d1ab9a4db1d2267c67" dependencies = [ "derive_more", "log", @@ -1152,34 +1099,46 @@ dependencies = [ "miden-utils-core-derive", "miden-utils-indexing", "miden-utils-sync", - "num-derive", - "num-traits", "serde", "thiserror", ] [[package]] name = "miden-core-lib" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9deb9ffbd9548b03eaa5e63ec72badcb16bb2c841a1a0bdd74e1829f18844a7e" +checksum = "f1f5b4dca8d29c99859e3470ec1fadfa89506e6b349ade7fa475574e3104db85" dependencies = [ "env_logger", "fs-err", "miden-assembly", + "miden-assembly-syntax", "miden-core", + "miden-core-lib-codegen", "miden-crypto", + "miden-mast-package", "miden-package-registry", + "miden-precompiles", "miden-processor", "miden-utils-sync", "thiserror", ] +[[package]] +name = "miden-core-lib-codegen" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d926e5e8a288a2a55c42541059d8e52c43c10d373643b309add169a3a0eb914" +dependencies = [ + "miden-core", + "miden-precompiles", +] + [[package]] name = "miden-crypto" -version = "0.25.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35198bebd353cddc25ad4aafb5f4ef9e71b283d71c787b8938c575c16974135d" +checksum = "de00899e7045ee3bea78d4c4c690d8e2c14fff1f3a1ede1fb2922ed699fdda14" dependencies = [ "blake3", "cc", @@ -1206,10 +1165,8 @@ dependencies = [ "p3-maybe-rayon", "p3-symmetric", "p3-util", - "rand 0.9.4", - "rand_chacha", - "rand_core 0.9.5", - "rand_hc", + "rand 0.10.2", + "rand_chacha 0.10.0", "serde", "sha2", "sha3", @@ -1220,19 +1177,19 @@ dependencies = [ [[package]] name = "miden-crypto-derive" -version = "0.25.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9068c6554db0e051f62913575de9949841a46b96ae92d4b7d28e1fed5d8f052b" +checksum = "a5b5a5c8b0fd14982e60ebd010f452b06f693b9efa116054487aff1f2657d2f4" dependencies = [ "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "miden-debug-types" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb406958e7e218b7d7a159e91d963baff54edf7849d48bb9b7ce612e22eb29e" +checksum = "793b37eaafbac33a4c8bf8f57d4c1d0ce8b8a7d25698ddfd2e1a2a6552e94f6c" dependencies = [ "memchr", "miden-crypto", @@ -1245,16 +1202,17 @@ dependencies = [ "serde", "serde_spanned", "thiserror", + "zerocopy", ] [[package]] name = "miden-field" -version = "0.25.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "379a39db52cd932a95d4017a18b712ee53ed0f86cfedf8c63ed72d687a18a191" +checksum = "41be9f7f5c0ef020bcedf526afe54b3a97244e207a5385e4453ca47799fe2afe" dependencies = [ "miden-serde-utils", - "num-bigint", + "num-bigint 0.5.1", "p3-challenger", "p3-field", "p3-goldilocks", @@ -1268,9 +1226,8 @@ dependencies = [ [[package]] name = "miden-field-repr" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "894ff600f6cdc9d6ddd86343f5bc592e6305815d2a405f2d0926ddd3e3668080" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" dependencies = [ "miden-field", "miden-field-repr-derive", @@ -1278,13 +1235,12 @@ dependencies = [ [[package]] name = "miden-field-repr-derive" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de4192b056c65b721fd300130605e61f6f7c7f44abde4ba6c9f920bf5d5bcbf2" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -1298,11 +1254,12 @@ dependencies = [ [[package]] name = "miden-lifted-air" -version = "0.25.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "789e0e469d1731012d8a018057317f31580611535c20d2a47c022213228cb733" +checksum = "b0ad52f76750f8b9dc8a7c4bed32644628198fab48daf31167c2f750c939378a" dependencies = [ "p3-air", + "p3-challenger", "p3-field", "p3-matrix", "p3-util", @@ -1311,9 +1268,9 @@ dependencies = [ [[package]] name = "miden-lifted-stark" -version = "0.25.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f62cca91182917b22a47e150028b7c785df620a15b2974a39c64e2b1b7a889d3" +checksum = "212a017744ef2aaca36f89bad2c880949311ec778586b8405a5e47f9e6ca59de" dependencies = [ "miden-lifted-air", "miden-stark-transcript", @@ -1334,15 +1291,20 @@ dependencies = [ [[package]] name = "miden-mast-package" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57398cc0a3ab2e451ea6ef5df2479e822ff857c03db22063c7ae583d3cfdec5b" +checksum = "26062f2e4cb18e7fa9244f8b18fe2adea2bfe3f016431f75f80b5b98249c34f6" dependencies = [ + "hashbrown", + "log", "miden-assembly-syntax", "miden-core", "miden-debug-types", + "miden-utils-indexing", + "rustc-hash", "serde", "thiserror", + "zerocopy", ] [[package]] @@ -1361,9 +1323,9 @@ dependencies = [ "rustc_version 0.2.3", "rustversion", "serde_json", - "spin 0.9.8", + "spin 0.9.9", "strip-ansi-escapes", - "syn 2.0.118", + "syn 2.0.119", "textwrap", "thiserror", "trybuild", @@ -1378,14 +1340,14 @@ checksum = "86a905f3ea65634dd4d1041a4f0fd0a3e77aa4118341d265af1a94339182222f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "miden-package-registry" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3befe190482e68f706235f3818830487ac8ed66057aa9562c7c22326f7be4e" +checksum = "8653a8792d81ec1807815e5735de98d9d928f89b7bb5280ffadb848e87eb3ed3" dependencies = [ "miden-assembly-syntax", "miden-core", @@ -1397,16 +1359,50 @@ dependencies = [ "thiserror", ] +[[package]] +name = "miden-precompiles" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d01b98147f622a733c9c206db9e78c7e1a353b2309e34e569e2757a435a77e0" +dependencies = [ + "miden-core", + "miden-crypto", +] + +[[package]] +name = "miden-precompiles-prover" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed0d94d331324d6b378f19ee925a6be6e17731e108d43f034c23653048a8ca0" +dependencies = [ + "miden-air", + "miden-core", + "miden-crypto", + "miden-lifted-air", + "miden-lifted-stark", + "miden-precompiles", + "miden-serde-utils", + "ruint", + "serde", + "serde-wincode", + "thiserror", + "tracing", + "wincode", +] + [[package]] name = "miden-processor" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538a47dca6e2c918d31a9152a14b82cc93bc1dcbfccd3a91ed61ec0dfd94c2f" +checksum = "57b3f6dbcea246715c7c528bbc2fbee46464493c11ac417c12c9562a229b136f" dependencies = [ + "hashbrown", "itertools", "miden-air", "miden-core", "miden-debug-types", + "miden-mast-package", + "miden-precompiles", "miden-utils-diagnostics", "miden-utils-indexing", "paste", @@ -1417,9 +1413,9 @@ dependencies = [ [[package]] name = "miden-project" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0082a2b6858148040d221d64f0db4b9d8e64a6aebd6a48cfad2e12bb726542b1" +checksum = "e02ac82735cd86ea17fcf8614496ce7e462f3e80dbc1113bf821e8197dcda49d" dependencies = [ "miden-assembly-syntax", "miden-core", @@ -1434,13 +1430,13 @@ dependencies = [ [[package]] name = "miden-protocol" -version = "0.15.3" +version = "0.16.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66340243e37da5936cb278a8dd11037813f1dc6731c2fc866703b76ed465ebc3" +checksum = "e275feebbe9c2458c5877c5f2a03b8e2152831ce956376f015fc4c50acfffb50" dependencies = [ "bech32", "fs-err", - "getrandom 0.3.4", + "getrandom 0.4.3", "miden-assembly", "miden-assembly-syntax", "miden-core", @@ -1448,37 +1444,69 @@ dependencies = [ "miden-crypto", "miden-crypto-derive", "miden-mast-package", + "miden-package-registry", "miden-processor", + "miden-protocol-build-utils", "miden-utils-sync", "miden-verifier", - "rand 0.9.4", + "rand 0.10.2", "regex", "semver 1.0.28", "thiserror", +] + +[[package]] +name = "miden-protocol-build-utils" +version = "0.16.0-rc.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f1145d0f5cb0efde2484af06587225b2a222fbf4811c4606d0d7f1bd3ff40dc" +dependencies = [ + "fs-err", + "miden-assembly", + "miden-core", + "miden-mast-package", + "miden-package-registry", + "miden-project", + "regex", "walkdir", ] [[package]] -name = "miden-sdk-alloc" -version = "0.13.1" +name = "miden-rowan" +version = "0.16.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60727b43652a2a47daae3ef2b73ed8c491b276e689e9c7a26923aec095fc9520" +checksum = "c13695bf99aabaa21d6572b807c66bb26251aa3d9b75e828b3c99b97a3b1ce7e" +dependencies = [ + "hashbrown", + "rustc-hash", +] + +[[package]] +name = "miden-sdk-alloc" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" + +[[package]] +name = "miden-sdk-build-script-support" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" [[package]] name = "miden-serde-utils" -version = "0.25.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d78cd1d4fcad937312e544f7d53423485e453598aa4fb989d2b6374027a8c136" +checksum = "aa5e67d63441ddaec820a7cf0cabefa8312c15db7a1f2b108ce1b3f589eeeb23" dependencies = [ "p3-field", "p3-goldilocks", + "wincode", ] [[package]] name = "miden-stark-transcript" -version = "0.25.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05901db2e30d3954243960fe21cea7fbec39f97c27774b56fd5031c28c4881ba" +checksum = "a5ebdd546c7583ba045b20afdde9986e42e7070d1f5fb8841e13f3c921110873" dependencies = [ "p3-challenger", "p3-field", @@ -1488,9 +1516,9 @@ dependencies = [ [[package]] name = "miden-stateful-hasher" -version = "0.25.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faeb47a90c55c5d45051d23cf691588804dd531995b4582c79108b64e445a905" +checksum = "b47d09c4dbfa32918847a4d6426a69d3d527adbf4e01cf1decf714c95b1bf894" dependencies = [ "p3-field", "p3-symmetric", @@ -1498,18 +1526,27 @@ dependencies = [ [[package]] name = "miden-stdlib-sys" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c7fe77152e9cd74650673d847f43b32922ed1f7cdfb5c49a798cb578f081b4" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" dependencies = [ "miden-field", ] +[[package]] +name = "miden-tx-script-args" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" +dependencies = [ + "miden-field", + "miden-field-repr", + "miden-stdlib-sys", +] + [[package]] name = "miden-utils-core-derive" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e887090da62091ba39f600c0cd831fec084eb437014049c550ee1c32c1517b2e" +checksum = "5764abe966b8c0e7cf377e38de4cbcbbc83a3483f111043c461b7208619bdb96" dependencies = [ "proc-macro2", "quote", @@ -1518,11 +1555,10 @@ dependencies = [ [[package]] name = "miden-utils-diagnostics" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2444cdba48d71c3c540c9a3b268b5067f350ac9d60797d88fd92461ebd246a04" +checksum = "10561ffd67ee21baca489b96fad11e11579573e1f07f1fc5fb8a111d196fea59" dependencies = [ - "miden-crypto", "miden-debug-types", "miden-miette", "tracing", @@ -1530,11 +1566,11 @@ dependencies = [ [[package]] name = "miden-utils-indexing" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c76500dbcd119ebc1f558f8de302f21aeead8b37b70a5a664180f6ea2f6b869f" +checksum = "4c18e4f69d5ebe556a72cc9da474acc53eceb4a75c1247b1f542f20f73145deb" dependencies = [ - "miden-crypto", + "miden-serde-utils", "proptest", "serde", "thiserror", @@ -1542,9 +1578,9 @@ dependencies = [ [[package]] name = "miden-utils-sync" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "107803f349d07260dfacf96c0b583a279a49480cbd265c9b9135f7d06cbc0c55" +checksum = "0fa9c0af7dab7842819c02ef386ed1640884db5c2efa32d30da7d4739548f70e" dependencies = [ "lock_api", "loom", @@ -1554,34 +1590,36 @@ dependencies = [ [[package]] name = "miden-verifier" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "011b9bae1321cb46bea2197f1991a1ae1a1cabd9fe1e9a1b739626881944244c" +checksum = "900c0473191ecbe2328e3d6550571f0b1ab42d1417f43c1d98a50cafc3ae4ff1" dependencies = [ - "bincode", "miden-air", "miden-core", "miden-crypto", + "miden-precompiles", + "miden-precompiles-prover", + "miden-serde-utils", "serde", + "serde-wincode", "thiserror", - "tracing", ] [[package]] name = "midenc-frontend-wasm-metadata" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09640b069d663d9a594213c94adca634cb52f66cb22e21230e252c45e368f6f6" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" dependencies = [ + "miden-mast-package", "serde", "serde_json", ] [[package]] name = "midenc-hir-type" -version = "0.6.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ff0511aa2201f7098995e38a3c97a319d379c3b2d26fb83677b21b71f61a7b4" +checksum = "f72909a4bae8dca4bbd34c28dcbcdff595afc47e48c312a683108f7452bd270b" dependencies = [ "miden-formatting", "miden-serde-utils", @@ -1591,21 +1629,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "nanorand" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" -dependencies = [ - "getrandom 0.2.17", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - [[package]] name = "nu-ansi-term" version = "0.50.3" @@ -1621,7 +1644,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" dependencies = [ - "num-bigint", + "num-bigint 0.4.8", "num-complex", "num-integer", "num-iter", @@ -1640,30 +1663,29 @@ dependencies = [ ] [[package]] -name = "num-complex" -version = "0.4.6" +name = "num-bigint" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +checksum = "93e7820bc0a80a0238e650327316f929ba18d5be054b647490a3a6a339f3e7c0" dependencies = [ + "num-integer", "num-traits", ] [[package]] -name = "num-derive" -version = "0.4.2" +name = "num-complex" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.118", + "num-traits", ] [[package]] name = "num-integer" -version = "0.1.46" +version = "0.1.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" dependencies = [ "num-traits", ] @@ -1684,7 +1706,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "num-bigint", + "num-bigint 0.4.8", "num-integer", "num-traits", ] @@ -1715,12 +1737,6 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" -[[package]] -name = "opaque-debug" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" - [[package]] name = "owo-colors" version = "4.3.0" @@ -1729,9 +1745,9 @@ checksum = "d211803b9b6b570f68772237e415a029d5a50c65d382910b879fb19d3271f94d" [[package]] name = "p3-air" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c824e8d7c7ddf208b742eac8d48e0b2d52d22fa013578a7762bf6931dbab1f46" +checksum = "ddb1be05c0d6f691afe0c9f468018a9a37cfa904dee78a8081ec96eb3cdd88e8" dependencies = [ "p3-field", "p3-matrix", @@ -1740,9 +1756,9 @@ dependencies = [ [[package]] name = "p3-blake3" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2733229a713bd83ccf5eb749e8f8e7380c1052674394a25c0422a772204a20af" +checksum = "6f202f5fbcceb6f56f783d98efb5de27e5a171470e3364de97b0923b39c87ab5" dependencies = [ "blake3", "p3-symmetric", @@ -1751,9 +1767,9 @@ dependencies = [ [[package]] name = "p3-challenger" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8972ccd1d5dc90e46cdb1f2ab4ee2bae49b3917e5e98aa533f0c2b779c010445" +checksum = "84d5d5e1ecf2c80b09b48ce870e8abd08b643454101c5dc9d0fd71bfbd78224d" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1765,27 +1781,27 @@ dependencies = [ [[package]] name = "p3-dft" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17771aca44632f9cc11f2718d7ea7ec06794946c4190ef3a985bfc893f14c18a" +checksum = "4321a952da2721ecd85ca593ea189798dfb4e439a2cc1378ce1442091880f173" dependencies = [ "itertools", "p3-field", "p3-matrix", "p3-maybe-rayon", "p3-util", - "spin 0.10.0", + "spin 0.12.3", "tracing", ] [[package]] name = "p3-field" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f3eb24d0591fd4d282d89cbe4e4efba5571c699375006f80b2cbf53ce83461c" +checksum = "53db75d38e04fc255826f388eca9d05976733dc9754aa3db411bc9ea1a37c1a0" dependencies = [ "itertools", - "num-bigint", + "num-bigint 0.5.1", "p3-maybe-rayon", "p3-util", "paste", @@ -1796,11 +1812,11 @@ dependencies = [ [[package]] name = "p3-goldilocks" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5751c6591a0d2397d726620c2c29a7436ec6c5e19d2ed74ca5d078d4fbb18eb5" +checksum = "d03b3f31080df31be723b876709246f8f1e532e1c5b82efb5281d705c8304c63" dependencies = [ - "num-bigint", + "num-bigint 0.5.1", "p3-challenger", "p3-dft", "p3-field", @@ -1812,13 +1828,14 @@ dependencies = [ "paste", "rand 0.10.2", "serde", + "spin 0.12.3", ] [[package]] name = "p3-keccak" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a7df174ff0c19a8742eb4698eaa1667c5f858d018e2faf09c55f1f24a6f9c3" +checksum = "ae50c8c37eb847c660298fb275e53c025c49b2623a8cfabf67f5322258b2b4db" dependencies = [ "p3-symmetric", "p3-util", @@ -1827,9 +1844,9 @@ dependencies = [ [[package]] name = "p3-matrix" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea9c94c0714944e7b8a9a62e6340b1e3e1d3f8ecfd3e35c08798360200e73eff" +checksum = "473eb920c446a6f4536e0d3528fbdca2a23c0e24e1d0d7767452e6d385dd335c" dependencies = [ "itertools", "p3-field", @@ -1842,15 +1859,15 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eebc233a34b1ab0273f35b4052fa2eeb3114b22ba4575bd7da00716e878ffb77" +checksum = "e6fddfd435f96394769414cf5590b77058aa506659bf20d6592e9d1989e04440" [[package]] name = "p3-mds" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b5441fa8116246ec9e6c835f15273cb27777ca572960ec87476b67fef13e01e" +checksum = "551ba0ab2cccd89f85a99450224898aff224e323bbf61f777ba6344f0896ef10" dependencies = [ "p3-dft", "p3-field", @@ -1861,12 +1878,12 @@ dependencies = [ [[package]] name = "p3-monty-31" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8724f330ea6d19dd4f2436aa0f88b5fcbf88f0f55ca7fccd3fea8b736dbcddad" +checksum = "871f635f7340cd0868b17e43e0c98fefdafdaed90469d0725caf6d8372a2a47c" dependencies = [ "itertools", - "num-bigint", + "num-bigint 0.5.1", "p3-dft", "p3-field", "p3-matrix", @@ -1879,26 +1896,27 @@ dependencies = [ "paste", "rand 0.10.2", "serde", - "spin 0.10.0", + "spin 0.12.3", "tracing", ] [[package]] name = "p3-poseidon1" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e2a562fea210baae390a32f9ecf0dd8724ae3f4352d1c8e413077b6f00a162" +checksum = "8d0d304e9a1f29c0d66534aa84e69528e2118351fdce08dcf5898af4e0fecc32" dependencies = [ "p3-field", + "p3-mds", "p3-symmetric", "rand 0.10.2", ] [[package]] name = "p3-poseidon2" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06394851c161d17e4aa4ad2aad5557d32f14cadd1dc838f965d8e1821a63b8c5" +checksum = "43eb8a73a26d14becaed1c67c3e8a047e4311d7909b402383c82ca9643ba17c6" dependencies = [ "p3-field", "p3-mds", @@ -1909,9 +1927,9 @@ dependencies = [ [[package]] name = "p3-symmetric" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac1a276d421f8ef3361bb7d8c39a02c93c6b3f10eeaa559cc4c50222f9a5b82" +checksum = "2015ea80cad969b6aabf27a04884286fe1354393b166d968ee0d80a95126b2a4" dependencies = [ "itertools", "p3-field", @@ -1921,12 +1939,11 @@ dependencies = [ [[package]] name = "p3-util" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d08a58162a4c264269ef454f0b28dcda89939490eecacb2b2cf5b00f719b80f6" +checksum = "6c5466fc40e6df89d3b291a2eff16b33e68e8571207790370137ec18090aadab" dependencies = [ "serde", - "transpose", ] [[package]] @@ -1959,23 +1976,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] -name = "petgraph" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" +name = "pastey" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher", -] +checksum = "2ee67f1008b1ba2321834326597b8e186293b049a023cdef258527550b9935b4" [[package]] name = "pin-project-lite" @@ -1985,9 +1989,9 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pkcs8" -version = "0.10.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7" dependencies = [ "der", "spki", @@ -1995,20 +1999,19 @@ dependencies = [ [[package]] name = "poly1305" -version = "0.8.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +checksum = "6e2d0073b297041425c7c3df6eb4792d598a15323fe63346852b092eca02904c" dependencies = [ - "cpufeatures 0.2.17", - "opaque-debug", + "cpufeatures", "universal-hash", ] [[package]] name = "portable-atomic" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" [[package]] name = "portable-atomic-util" @@ -2028,12 +2031,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - [[package]] name = "prettyplease" version = "0.2.37" @@ -2041,7 +2038,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.118", + "syn 2.0.119", +] + +[[package]] +name = "primefield" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c555a6e4eb7d4e158fcb028c835c3b8642206ddc279b5c6b202ef9a8bdb592f4" +dependencies = [ + "crypto-bigint", + "crypto-common", + "ff", + "rand_core 0.10.1", + "subtle", + "zeroize", +] + +[[package]] +name = "primeorder" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c9f42978c78a00e3d68f69fc03e57a234debae69da4020a4fb588fcdcd07b06" +dependencies = [ + "elliptic-curve", + "primefield", + "serdect", + "wnaf", ] [[package]] @@ -2057,9 +2080,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -2070,10 +2093,10 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "num-traits", - "rand 0.9.4", - "rand_chacha", + "rand 0.9.5", + "rand_chacha 0.9.0", "rand_xorshift", "regex-syntax", "unarray", @@ -2095,9 +2118,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.46" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -2116,11 +2139,11 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" dependencies = [ - "rand_chacha", + "rand_chacha 0.9.0", "rand_core 0.9.5", ] @@ -2130,6 +2153,8 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" dependencies = [ + "chacha20", + "getrandom 0.4.3", "rand_core 0.10.1", ] @@ -2144,12 +2169,13 @@ dependencies = [ ] [[package]] -name = "rand_core" -version = "0.6.4" +name = "rand_chacha" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "3e6af7f3e25ded52c41df4e0b1af2d047e45896c2f3281792ed68a1c243daedb" dependencies = [ - "getrandom 0.2.17", + "ppv-lite86", + "rand_core 0.10.1", ] [[package]] @@ -2167,15 +2193,6 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" -[[package]] -name = "rand_hc" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b363d4f6370f88d62bf586c80405657bde0f0e1b8945d47d2ad59b906cb4f54" -dependencies = [ - "rand_core 0.6.4", -] - [[package]] name = "rand_xorshift" version = "0.4.0" @@ -2211,14 +2228,14 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] name = "regex" -version = "1.12.4" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -2228,9 +2245,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -2245,14 +2262,29 @@ checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rfc6979" -version = "0.4.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +checksum = "b4a459cddafb3fe76b31fd8f1108007566c40301feb64dc7b54656eb7388172b" dependencies = [ + "crypto-bigint", "hmac", - "subtle", ] +[[package]] +name = "ruint" +version = "1.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e99bff0393163bb25029a6af25d3d8d202ba5b5438a74d1bd8789f5c822970" +dependencies = [ + "ruint-macro", +] + +[[package]] +name = "ruint-macro" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" + [[package]] name = "rustc-hash" version = "2.1.3" @@ -2306,14 +2338,14 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sec1" -version = "0.7.3" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d" dependencies = [ "base16ct", + "ctutils", "der", - "generic-array", - "pkcs8", + "hybrid-array", "subtle", "zeroize", ] @@ -2345,9 +2377,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -2365,31 +2397,42 @@ dependencies = [ "typeid", ] +[[package]] +name = "serde-wincode" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa9d3a86c66cf10ce79df36f555a5a4c8d72a82515d9ea8ca420e02c925c30f" +dependencies = [ + "serde", + "thiserror", + "wincode", +] + [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.4", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -2400,13 +2443,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.4", ] [[package]] @@ -2418,25 +2461,36 @@ dependencies = [ "serde_core", ] +[[package]] +name = "serdect" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66cf8fedced2fcf12406bcb34223dffb92eaf34908ede12fed414c82b7f00b3e" +dependencies = [ + "base16ct", + "serde", +] + [[package]] name = "sha2" -version = "0.10.9" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" dependencies = [ "cfg-if", - "cpufeatures 0.2.17", + "cpufeatures", "digest", ] [[package]] name = "sha3" -version = "0.10.9" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77fd7028345d415a4034cf8777cd4f8ab1851274233b45f84e3d955502d93874" +checksum = "bc9bad02c26382724b2d2692c6f179285e4b54eeecd7968f52a50059c3c11759" dependencies = [ "digest", "keccak", + "sponge-cursor", ] [[package]] @@ -2456,26 +2510,14 @@ checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signature" -version = "2.2.0" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5" dependencies = [ "digest", - "rand_core 0.6.4", + "rand_core 0.10.1", ] -[[package]] -name = "siphasher" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" - -[[package]] -name = "slab" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" - [[package]] name = "smallvec" version = "1.15.2" @@ -2493,49 +2535,37 @@ checksum = "e8e2fb0f499abb4d162f2bedad68f5ef91a1682b5a03596ddb67efd37768d100" [[package]] name = "spin" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" dependencies = [ "lock_api", ] [[package]] name = "spin" -version = "0.10.0" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" +checksum = "0134f9043ed38b087ac4f7d4af44c79e2c9e5094421fe3164f435ce585953b10" dependencies = [ "lock_api", ] [[package]] name = "spki" -version = "0.7.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +checksum = "1d9efca8738c78ee9484207732f728b1ef517bbb1833d6fc0879ca898a522f6f" dependencies = [ "base64ct", "der", ] [[package]] -name = "strength_reduce" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" - -[[package]] -name = "string_cache" -version = "0.8.9" +name = "sponge-cursor" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" -dependencies = [ - "new_debug_unreachable", - "parking_lot", - "phf_shared", - "precomputed-hash", -] +checksum = "3a0219bd7d979d58245a4f41f695e1ac9f8befdffadd7f61f1bae9e39abc6620" [[package]] name = "strip-ansi-escapes" @@ -2565,9 +2595,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.118" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" dependencies = [ "proc-macro2", "quote", @@ -2575,19 +2605,21 @@ dependencies = [ ] [[package]] -name = "target-triple" -version = "1.0.0" +name = "syn" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "591ef38edfb78ca4771ee32cf494cb8771944bee237a9b91fc9c1424ac4b777b" +checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] [[package]] -name = "term" -version = "1.2.1" +name = "target-triple" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8c27177b12a6399ffc08b98f76f7c9a1f4fe9fc967c784c5a071fa8d93cf7e1" -dependencies = [ - "windows-sys", -] +checksum = "c3a6bfce3d99adfa72d24750a61f782f3036a81e7f86d8841ee1326deaebd171" [[package]] name = "termcolor" @@ -2611,29 +2643,29 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.4", ] [[package]] name = "thread_local" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070" dependencies = [ "cfg-if", ] @@ -2649,9 +2681,9 @@ dependencies = [ [[package]] name = "toml" -version = "1.1.2+spec-1.1.0" +version = "1.1.4+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +checksum = "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5" dependencies = [ "indexmap", "serde_core", @@ -2673,18 +2705,18 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" dependencies = [ "winnow", ] [[package]] name = "toml_writer" -version = "1.1.1+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" [[package]] name = "tracing" @@ -2705,7 +2737,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -2747,21 +2779,11 @@ dependencies = [ "tracing-log", ] -[[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 = "trybuild" -version = "1.0.117" +version = "1.0.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0710d4dfbeae4f9c390baa784c49858a7468fa433f3fe5d0ec5ebef651cf59f9" +checksum = "1e605bf6b39357663d8ba4e984f8be8da8df6bb32e81031d6889024ea8fd68e4" dependencies = [ "dissimilar", "glob", @@ -2823,12 +2845,12 @@ checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "universal-hash" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +checksum = "f4987bdc12753382e0bec4a65c50738ffaabc998b9cdd1f952fb5f39b0048a96" dependencies = [ "crypto-common", - "subtle", + "ctutils", ] [[package]] @@ -2852,12 +2874,6 @@ dependencies = [ "smallvec", ] -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - [[package]] name = "vte" version = "0.14.1" @@ -2877,12 +2893,6 @@ dependencies = [ "winapi-util", ] -[[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.4+wasi-0.2.12" @@ -2894,9 +2904,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" dependencies = [ "cfg-if", "once_cell", @@ -2907,9 +2917,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2917,22 +2927,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" dependencies = [ "unicode-ident", ] @@ -2965,7 +2975,7 @@ version = "0.247.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e6fb4c2bee46c5ea4d40f8cdb5c131725cd976718ec56f1c8e82fbde5fa2a80" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "hashbrown", "indexmap", "semver 1.0.28", @@ -2980,6 +2990,18 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "wincode" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfc6339f1ba427bf7ad7c42403b28e524832ba2ddb5eef1bb2cc3b85db6b7b75" +dependencies = [ + "pastey", + "proc-macro2", + "quote", + "thiserror", +] + [[package]] name = "windows-link" version = "0.2.1" @@ -3006,9 +3028,9 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" [[package]] name = "wit-bindgen" @@ -3040,7 +3062,7 @@ dependencies = [ "heck", "indexmap", "prettyplease", - "syn 2.0.118", + "syn 2.0.119", "wasm-metadata", "wit-bindgen-core", "wit-component", @@ -3056,7 +3078,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", "wit-bindgen-core", "wit-bindgen-rust", ] @@ -3068,7 +3090,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d567162a6b9843080e5e0053f696623ff694bae8ae017c9ec536d1873bbe3d8" dependencies = [ "anyhow", - "bitflags 2.13.0", + "bitflags 2.13.1", "indexmap", "log", "serde", @@ -3099,34 +3121,45 @@ dependencies = [ "wasmparser", ] +[[package]] +name = "wnaf" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab12e7090f27e2ffd9322651492942d50c2926094af30601e1964337db39daf1" +dependencies = [ + "ff", + "group", + "hybrid-array", +] + [[package]] name = "x25519-dalek" -version = "2.0.1" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +checksum = "e7e8131a03190127fb2263afc72b322ecadae46b6ff8c6f399ff5d02f5559af6" dependencies = [ "curve25519-dalek", - "rand_core 0.6.4", + "rand_core 0.10.1", ] [[package]] name = "zerocopy" -version = "0.8.54" +version = "0.8.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19" +checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.54" +version = "0.8.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" +checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -3137,6 +3170,6 @@ checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/contracts/counter-account/Cargo.toml b/contracts/counter-account/Cargo.toml index 9adcc85..8c025be 100644 --- a/contracts/counter-account/Cargo.toml +++ b/contracts/counter-account/Cargo.toml @@ -7,4 +7,7 @@ edition = "2021" crate-type = ["cdylib"] [dependencies] -miden = "0.13" +miden = { version = "=0.14.0-rc.1", git = "https://github.com/0xMiden/compiler", rev = "2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" } + +[build-dependencies] +miden-sdk-build-script-support = { git = "https://github.com/0xMiden/compiler", rev = "2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" } diff --git a/contracts/counter-account/build.rs b/contracts/counter-account/build.rs new file mode 100644 index 0000000..1db40a3 --- /dev/null +++ b/contracts/counter-account/build.rs @@ -0,0 +1,3 @@ +fn main() { + miden_sdk_build_script_support::prepare_package_cache(); +} diff --git a/contracts/counter-account/miden-project.toml b/contracts/counter-account/miden-project.toml index c36d01a..38cbb61 100644 --- a/contracts/counter-account/miden-project.toml +++ b/contracts/counter-account/miden-project.toml @@ -3,6 +3,7 @@ name = "counter-account" version = "0.1.0" [lib] +path = "src/lib.rs" kind = "account-component" # Full `miden:/@` id. The interface segment is the # kebab-cased component trait name (`CounterContract` -> `counter-contract`). diff --git a/contracts/counter-account/src/lib.rs b/contracts/counter-account/src/lib.rs index cb6313d..75d3c77 100644 --- a/contracts/counter-account/src/lib.rs +++ b/contracts/counter-account/src/lib.rs @@ -21,8 +21,10 @@ struct CounterContractStorage { #[component] trait CounterContract { /// Returns the current counter value stored in the contract's storage map. + #[account_procedure] fn get_count(&self) -> Felt; /// Increments the counter value stored in the contract's storage map by one. + #[account_procedure] fn increment_count(&mut self) -> Felt; } diff --git a/contracts/increment-note/Cargo.lock b/contracts/increment-note/Cargo.lock index ee211bb..8d80d5d 100644 --- a/contracts/increment-note/Cargo.lock +++ b/contracts/increment-note/Cargo.lock @@ -4,19 +4,19 @@ version = 4 [[package]] name = "aead" -version = "0.5.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +checksum = "1973cfbc1a2daf9cf550e74e1f088c28e7f7d8c1e1418fb6c9dc5184b7e84c99" dependencies = [ "crypto-common", - "generic-array", + "inout", ] [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -73,15 +73,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.103" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" - -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "arrayvec" @@ -89,15 +83,6 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" -[[package]] -name = "ascii-canvas" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef1e3e699d84ab1b0911a1010c5c106aa34ae89aeac103be5ce0c3859db1e891" -dependencies = [ - "term", -] - [[package]] name = "autocfg" version = "1.5.1" @@ -106,9 +91,9 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "base16ct" -version = "0.2.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6" [[package]] name = "base64ct" @@ -122,30 +107,6 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32637268377fc7b10a8c6d51de3e7fba1ce5dd371a96e342b34e6078db558e7f" -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bit-set" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" -dependencies = [ - "bit-vec", -] - -[[package]] -name = "bit-vec" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" - [[package]] name = "bitflags" version = "1.3.2" @@ -154,31 +115,30 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" [[package]] name = "blake3" -version = "1.8.5" +version = "1.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aa83c34e62843d924f905e0f5c866eb1dd6545fc4d719e803d9ba6030371fce" +checksum = "6d9e454fc11f76977dc803893aff6304ed33d6a26efae8696573bea74baa27ae" dependencies = [ - "arrayref", "arrayvec", "cc", "cfg-if", "constant_time_eq", - "cpufeatures 0.3.0", + "cpufeatures", ] [[package]] name = "block-buffer" -version = "0.10.4" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ - "generic-array", + "hybrid-array", ] [[package]] @@ -189,9 +149,9 @@ checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "cc" -version = "1.2.66" +version = "1.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5d6cac793997bd970000024b2934968efe83b382de4fdcf4fcb46b6ee4ad996" +checksum = "0ad534f4357a5264cce5019c989cf66a4f0dc4e0d1b1d15f8aacec0ff7360273" dependencies = [ "find-msvc-tools", "jobserver", @@ -207,39 +167,45 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chacha20" -version = "0.9.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" dependencies = [ "cfg-if", "cipher", - "cpufeatures 0.2.17", + "cpufeatures", + "rand_core 0.10.1", ] [[package]] name = "chacha20poly1305" -version = "0.10.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +checksum = "9b89e1c441e926b9c82a8d023f6e1b7ae0adcfaa7d621814e4d60789bac751cb" dependencies = [ "aead", "chacha20", "cipher", "poly1305", - "zeroize", ] [[package]] name = "cipher" -version = "0.4.4" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" dependencies = [ + "block-buffer", "crypto-common", "inout", - "zeroize", ] +[[package]] +name = "cmov" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" + [[package]] name = "colorchoice" version = "1.0.5" @@ -248,9 +214,9 @@ checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "const-oid" -version = "0.9.6" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" [[package]] name = "constant_time_eq" @@ -259,13 +225,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" [[package]] -name = "cpufeatures" -version = "0.2.17" +name = "cpubits" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] +checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae" [[package]] name = "cpufeatures" @@ -315,35 +278,47 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-bigint" -version = "0.5.5" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +checksum = "1a52aa3fcda4e6302a9f48734f234d35d4721b96f8fe07d073f07ce9df4f0271" dependencies = [ - "generic-array", - "rand_core 0.6.4", + "cpubits", + "ctutils", + "hybrid-array", + "num-traits", + "rand_core 0.10.1", "subtle", "zeroize", ] [[package]] name = "crypto-common" -version = "0.1.7" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ - "generic-array", - "rand_core 0.6.4", - "typenum", + "hybrid-array", + "rand_core 0.10.1", +] + +[[package]] +name = "ctutils" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +dependencies = [ + "cmov", + "subtle", ] [[package]] name = "curve25519-dalek" -version = "4.1.3" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +checksum = "b5eed333089e2e1c1ac8c6c0398e5e2497b4c9926ca6d0365ed1e099afa5bc23" dependencies = [ "cfg-if", - "cpufeatures 0.2.17", + "cpufeatures", "curve25519-dalek-derive", "digest", "fiat-crypto", @@ -360,7 +335,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -382,7 +357,7 @@ dependencies = [ "defmt-parser", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -396,9 +371,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.10" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +checksum = "a69dedd701da44b0536442edf09c81a64b0ab97a7a4a5e3d1971f00027cbc63d" dependencies = [ "const-oid", "zeroize", @@ -422,19 +397,19 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "digest" -version = "0.10.7" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ "block-buffer", "const-oid", "crypto-common", - "subtle", + "ctutils", ] [[package]] @@ -445,9 +420,9 @@ checksum = "aeda16ab4059c5fd2a83f2b9c9e9c981327b18aa8e3b313f7e6563799d4f093e" [[package]] name = "ecdsa" -version = "0.16.9" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +checksum = "c0681a4fc24c767085329728d8dfba959af91228aa4610cca4f8ce317ba46ae0" dependencies = [ "der", "digest", @@ -455,13 +430,14 @@ dependencies = [ "rfc6979", "signature", "spki", + "zeroize", ] [[package]] name = "ed25519" -version = "2.2.3" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +checksum = "29fcf32e6c73d1079f83ab4d782de2d81620346a5f38c6237a86a22f8368980a" dependencies = [ "pkcs8", "signature", @@ -469,53 +445,46 @@ dependencies = [ [[package]] name = "ed25519-dalek" -version = "2.2.0" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" +checksum = "6ebaa1a2bf1290ab3bfe5a7b771d050ebffab2711c19a81691c683a5144a25de" dependencies = [ "curve25519-dalek", "ed25519", "serde", "sha2", + "signature", "subtle", "zeroize", ] [[package]] name = "either" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "elliptic-curve" -version = "0.13.8" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +checksum = "9d65aa39b3a5c1c9c1b745c9a019234bb7a21b77abcb4f4d266d706e2d577d65" dependencies = [ "base16ct", "crypto-bigint", + "crypto-common", "digest", "ff", - "generic-array", "group", "hkdf", + "hybrid-array", "pkcs8", - "rand_core 0.6.4", + "rand_core 0.10.1", "sec1", "subtle", "zeroize", ] -[[package]] -name = "ena" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabffdaee24bd1bf95c5ef7cec31260444317e72ea56c4c91750e8b7ee58d5f1" -dependencies = [ - "log", -] - [[package]] name = "env_filter" version = "2.0.0" @@ -558,42 +527,33 @@ dependencies = [ [[package]] name = "ff" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +checksum = "a1f686ab92a9fb0eaf188f6c6c87b89490baa6fdb0db4544ba4dc47f7942489f" dependencies = [ - "rand_core 0.6.4", + "rand_core 0.10.1", "subtle", ] [[package]] name = "fiat-crypto" -version = "0.2.9" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" [[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" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" +checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" [[package]] name = "flume" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +checksum = "5e139bc46ca777eb5efaf62df0ab8cc5fd400866427e56c68b22e414e53bd3be" dependencies = [ - "futures-core", - "futures-sink", - "nanorand", - "spin 0.9.8", + "spin 0.9.9", ] [[package]] @@ -613,9 +573,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -627,9 +587,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -637,39 +597,38 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-core", "futures-sink", "futures-task", "pin-project-lite", - "slab", ] [[package]] @@ -687,30 +646,6 @@ dependencies = [ "windows-result", ] -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", - "zeroize", -] - -[[package]] -name = "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" @@ -718,11 +653,9 @@ 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]] @@ -732,24 +665,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", + "js-sys", "libc", "r-efi 6.0.0", + "rand_core 0.10.1", + "wasm-bindgen", ] [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "group" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "7fd1a1c7a5206c5b7a3f5a0d7ccd3ff85d0c8f5133d62a02680255b0004af5f4" dependencies = [ "ff", - "rand_core 0.6.4", + "rand_core 0.10.1", "subtle", ] @@ -770,22 +706,33 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hkdf" -version = "0.12.4" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" dependencies = [ "hmac", ] [[package]] name = "hmac" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" dependencies = [ "digest", ] +[[package]] +name = "hybrid-array" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707114b52a152fa7bdb290cd7cd5912d9467273b6d74e21b8d81aca1f8533f6b" +dependencies = [ + "subtle", + "typenum", + "zeroize", +] + [[package]] name = "id-arena" version = "2.3.0" @@ -797,6 +744,7 @@ name = "increment-note" version = "0.1.0" dependencies = [ "miden", + "miden-sdk-build-script-support", ] [[package]] @@ -819,11 +767,11 @@ dependencies = [ [[package]] name = "inout" -version = "0.1.4" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" dependencies = [ - "generic-array", + "hybrid-array", ] [[package]] @@ -834,9 +782,9 @@ checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +checksum = "8b4baf93f58d4425749ca49a51c50ebab072c5df6994d08fed93541c331481dc" dependencies = [ "either", ] @@ -849,11 +797,12 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.32" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "961d16382652bfdd8c6f68b223b26a8c93e0d475c672f414411db31c6c5c900e" +checksum = "668b7183bd07af9a4885f5c35b0cc5c83c4607a913c16b7e17291832910d2dcc" dependencies = [ "defmt", + "jiff-core", "jiff-static", "log", "portable-atomic", @@ -861,15 +810,25 @@ dependencies = [ "serde_core", ] +[[package]] +name = "jiff-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7feca88439efe53da3754500c1851dedf3cb36c524dd5cf8225cc0794de95d09" +dependencies = [ + "defmt", +] + [[package]] name = "jiff-static" -version = "0.2.32" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0879bd39df99c4c5e2c6615ccc026391a423dde10532c573e6086eb94a802cc" +checksum = "3a69dcb3a21cfb32ce1cd056169337ca284af0766dd766e7878819b251a49204" dependencies = [ + "jiff-core", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -884,66 +843,36 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.103" +version = "0.3.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" dependencies = [ "cfg-if", - "futures-util", "wasm-bindgen", ] [[package]] name = "k256" -version = "0.13.4" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +checksum = "93f50113171a713f4a4231ef82eb26703607139b35dcb56241f0ceab2ae1f7d8" dependencies = [ - "cfg-if", + "cpubits", "ecdsa", "elliptic-curve", - "once_cell", + "primeorder", "sha2", - "signature", + "wnaf", ] [[package]] name = "keccak" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" -dependencies = [ - "cpufeatures 0.2.17", -] - -[[package]] -name = "lalrpop" -version = "0.22.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4ebbd48ce411c1d10fb35185f5a51a7bfa3d8b24b4e330d30c9e3a34129501" -dependencies = [ - "ascii-canvas", - "bit-set", - "ena", - "itertools", - "lalrpop-util", - "petgraph", - "regex", - "regex-syntax", - "sha3", - "string_cache", - "term", - "unicode-xid", - "walkdir", -] - -[[package]] -name = "lalrpop-util" -version = "0.22.2" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5baa5e9ff84f1aefd264e6869907646538a52147a755d494517a8007fb48733" +checksum = "d8f198d1db720e4940b5a493201d199d9f24f568f8f746bd13706243a2f71598" dependencies = [ - "rustversion", + "cfg-if", + "cpufeatures", ] [[package]] @@ -960,9 +889,9 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libm" @@ -981,9 +910,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "loom" @@ -1015,9 +944,8 @@ checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "miden" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c21f5ff93e5cb2f68e4bc7acb778b5ed1f3af2d54737d5f39cef4136392add5" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" dependencies = [ "miden-base", "miden-base-macros", @@ -1026,15 +954,17 @@ dependencies = [ "miden-field-repr", "miden-sdk-alloc", "miden-stdlib-sys", + "miden-tx-script-args", "wit-bindgen", ] [[package]] name = "miden-ace-codegen" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87598d43cfca4a8c0ecb29cecdc2c9b67e6e99aac91ca108ce0413dfaeec25ab" +checksum = "93a217e3f1fec32105bca7dc421d85ab39199b78d2e43081fc0fa92411de9a84" dependencies = [ + "miden-constraint-compiler", "miden-core", "miden-crypto", "thiserror", @@ -1042,24 +972,24 @@ dependencies = [ [[package]] name = "miden-air" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff5d900b5d214870ed628948342aa2ddab95720371d74a754ddf406e3b67021" +checksum = "90b7b3a23756f2bfdba2b37c8d1551b3b531fce0de42e3a9a7f840bb69018106" dependencies = [ "miden-ace-codegen", "miden-core", "miden-crypto", - "miden-lifted-stark", "miden-utils-indexing", + "p3-field", "thiserror", "tracing", ] [[package]] name = "miden-assembly" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "174c814c212eccf944042a3409833d2d2c7c725fa077306dfb1a81c892112946" +checksum = "727de4350d9ba263be17d9f93dc4b8d0deebabab29c3bed34f32c4af7b1cf20c" dependencies = [ "log", "miden-assembly-syntax", @@ -1074,14 +1004,12 @@ dependencies = [ [[package]] name = "miden-assembly-syntax" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43921711f3df77be1ac975b39fbf483dc05980760a1b932bc1554ca29c43ec81" +checksum = "3874c53f40656a56f74afe8e957d75667218808894ab8f5dbd91e58a8a0c3393" dependencies = [ - "aho-corasick", - "lalrpop", - "lalrpop-util", "log", + "miden-assembly-syntax-cst", "miden-core", "miden-debug-types", "miden-utils-diagnostics", @@ -1096,10 +1024,21 @@ dependencies = [ ] [[package]] -name = "miden-base" -version = "0.13.1" +name = "miden-assembly-syntax-cst" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a20ff6f7505d4482a28df916403d64721ec537a1eb8e686cfa04bb1912d1e117" +checksum = "151b657a50aee75a0591dbd66d57774e2f9ec1f00fa17d773820e736bcca0cb6" +dependencies = [ + "miden-debug-types", + "miden-rowan", + "miden-utils-diagnostics", + "thiserror", +] + +[[package]] +name = "miden-base" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" dependencies = [ "miden-base-sys", "miden-stdlib-sys", @@ -1107,9 +1046,8 @@ dependencies = [ [[package]] name = "miden-base-macros" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "553afd8a19486a250323f0653b02ac09af1ffcf23bf426a8e054529ff3a8248a" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" dependencies = [ "heck", "miden-assembly-syntax", @@ -1122,7 +1060,7 @@ dependencies = [ "proc-macro2", "quote", "semver 1.0.28", - "syn 2.0.118", + "syn 2.0.119", "toml", "wit-bindgen-core", "wit-bindgen-rust", @@ -1130,19 +1068,28 @@ dependencies = [ [[package]] name = "miden-base-sys" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efe798d23cf3c4a87ff71bc54685fed611c7a0356ff23897a5e864cc1f39d3" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" dependencies = [ "miden-field-repr", "miden-stdlib-sys", ] +[[package]] +name = "miden-constraint-compiler" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b95f126188b824423edbbc5eebf9b61c872905c21e3f1e9e9b69d1afbba12288" +dependencies = [ + "miden-core", + "miden-crypto", +] + [[package]] name = "miden-core" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54fc597642fa67a111eaf177de7a8f4c3a001ac5ddafb7d1398ad8551c031e20" +checksum = "55df0c9b5fddcfc2c03c6e476bec0523328fb85090e716d1ab9a4db1d2267c67" dependencies = [ "derive_more", "log", @@ -1152,34 +1099,46 @@ dependencies = [ "miden-utils-core-derive", "miden-utils-indexing", "miden-utils-sync", - "num-derive", - "num-traits", "serde", "thiserror", ] [[package]] name = "miden-core-lib" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9deb9ffbd9548b03eaa5e63ec72badcb16bb2c841a1a0bdd74e1829f18844a7e" +checksum = "f1f5b4dca8d29c99859e3470ec1fadfa89506e6b349ade7fa475574e3104db85" dependencies = [ "env_logger", "fs-err", "miden-assembly", + "miden-assembly-syntax", "miden-core", + "miden-core-lib-codegen", "miden-crypto", + "miden-mast-package", "miden-package-registry", + "miden-precompiles", "miden-processor", "miden-utils-sync", "thiserror", ] +[[package]] +name = "miden-core-lib-codegen" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d926e5e8a288a2a55c42541059d8e52c43c10d373643b309add169a3a0eb914" +dependencies = [ + "miden-core", + "miden-precompiles", +] + [[package]] name = "miden-crypto" -version = "0.25.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35198bebd353cddc25ad4aafb5f4ef9e71b283d71c787b8938c575c16974135d" +checksum = "de00899e7045ee3bea78d4c4c690d8e2c14fff1f3a1ede1fb2922ed699fdda14" dependencies = [ "blake3", "cc", @@ -1206,10 +1165,8 @@ dependencies = [ "p3-maybe-rayon", "p3-symmetric", "p3-util", - "rand 0.9.4", - "rand_chacha", - "rand_core 0.9.5", - "rand_hc", + "rand 0.10.2", + "rand_chacha 0.10.0", "serde", "sha2", "sha3", @@ -1220,19 +1177,19 @@ dependencies = [ [[package]] name = "miden-crypto-derive" -version = "0.25.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9068c6554db0e051f62913575de9949841a46b96ae92d4b7d28e1fed5d8f052b" +checksum = "a5b5a5c8b0fd14982e60ebd010f452b06f693b9efa116054487aff1f2657d2f4" dependencies = [ "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "miden-debug-types" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb406958e7e218b7d7a159e91d963baff54edf7849d48bb9b7ce612e22eb29e" +checksum = "793b37eaafbac33a4c8bf8f57d4c1d0ce8b8a7d25698ddfd2e1a2a6552e94f6c" dependencies = [ "memchr", "miden-crypto", @@ -1245,16 +1202,17 @@ dependencies = [ "serde", "serde_spanned", "thiserror", + "zerocopy", ] [[package]] name = "miden-field" -version = "0.25.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "379a39db52cd932a95d4017a18b712ee53ed0f86cfedf8c63ed72d687a18a191" +checksum = "41be9f7f5c0ef020bcedf526afe54b3a97244e207a5385e4453ca47799fe2afe" dependencies = [ "miden-serde-utils", - "num-bigint", + "num-bigint 0.5.1", "p3-challenger", "p3-field", "p3-goldilocks", @@ -1268,9 +1226,8 @@ dependencies = [ [[package]] name = "miden-field-repr" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "894ff600f6cdc9d6ddd86343f5bc592e6305815d2a405f2d0926ddd3e3668080" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" dependencies = [ "miden-field", "miden-field-repr-derive", @@ -1278,13 +1235,12 @@ dependencies = [ [[package]] name = "miden-field-repr-derive" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de4192b056c65b721fd300130605e61f6f7c7f44abde4ba6c9f920bf5d5bcbf2" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -1298,11 +1254,12 @@ dependencies = [ [[package]] name = "miden-lifted-air" -version = "0.25.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "789e0e469d1731012d8a018057317f31580611535c20d2a47c022213228cb733" +checksum = "b0ad52f76750f8b9dc8a7c4bed32644628198fab48daf31167c2f750c939378a" dependencies = [ "p3-air", + "p3-challenger", "p3-field", "p3-matrix", "p3-util", @@ -1311,9 +1268,9 @@ dependencies = [ [[package]] name = "miden-lifted-stark" -version = "0.25.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f62cca91182917b22a47e150028b7c785df620a15b2974a39c64e2b1b7a889d3" +checksum = "212a017744ef2aaca36f89bad2c880949311ec778586b8405a5e47f9e6ca59de" dependencies = [ "miden-lifted-air", "miden-stark-transcript", @@ -1334,15 +1291,20 @@ dependencies = [ [[package]] name = "miden-mast-package" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57398cc0a3ab2e451ea6ef5df2479e822ff857c03db22063c7ae583d3cfdec5b" +checksum = "26062f2e4cb18e7fa9244f8b18fe2adea2bfe3f016431f75f80b5b98249c34f6" dependencies = [ + "hashbrown", + "log", "miden-assembly-syntax", "miden-core", "miden-debug-types", + "miden-utils-indexing", + "rustc-hash", "serde", "thiserror", + "zerocopy", ] [[package]] @@ -1361,9 +1323,9 @@ dependencies = [ "rustc_version 0.2.3", "rustversion", "serde_json", - "spin 0.9.8", + "spin 0.9.9", "strip-ansi-escapes", - "syn 2.0.118", + "syn 2.0.119", "textwrap", "thiserror", "trybuild", @@ -1378,14 +1340,14 @@ checksum = "86a905f3ea65634dd4d1041a4f0fd0a3e77aa4118341d265af1a94339182222f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "miden-package-registry" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3befe190482e68f706235f3818830487ac8ed66057aa9562c7c22326f7be4e" +checksum = "8653a8792d81ec1807815e5735de98d9d928f89b7bb5280ffadb848e87eb3ed3" dependencies = [ "miden-assembly-syntax", "miden-core", @@ -1397,16 +1359,50 @@ dependencies = [ "thiserror", ] +[[package]] +name = "miden-precompiles" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d01b98147f622a733c9c206db9e78c7e1a353b2309e34e569e2757a435a77e0" +dependencies = [ + "miden-core", + "miden-crypto", +] + +[[package]] +name = "miden-precompiles-prover" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed0d94d331324d6b378f19ee925a6be6e17731e108d43f034c23653048a8ca0" +dependencies = [ + "miden-air", + "miden-core", + "miden-crypto", + "miden-lifted-air", + "miden-lifted-stark", + "miden-precompiles", + "miden-serde-utils", + "ruint", + "serde", + "serde-wincode", + "thiserror", + "tracing", + "wincode", +] + [[package]] name = "miden-processor" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538a47dca6e2c918d31a9152a14b82cc93bc1dcbfccd3a91ed61ec0dfd94c2f" +checksum = "57b3f6dbcea246715c7c528bbc2fbee46464493c11ac417c12c9562a229b136f" dependencies = [ + "hashbrown", "itertools", "miden-air", "miden-core", "miden-debug-types", + "miden-mast-package", + "miden-precompiles", "miden-utils-diagnostics", "miden-utils-indexing", "paste", @@ -1417,9 +1413,9 @@ dependencies = [ [[package]] name = "miden-project" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0082a2b6858148040d221d64f0db4b9d8e64a6aebd6a48cfad2e12bb726542b1" +checksum = "e02ac82735cd86ea17fcf8614496ce7e462f3e80dbc1113bf821e8197dcda49d" dependencies = [ "miden-assembly-syntax", "miden-core", @@ -1434,13 +1430,13 @@ dependencies = [ [[package]] name = "miden-protocol" -version = "0.15.3" +version = "0.16.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66340243e37da5936cb278a8dd11037813f1dc6731c2fc866703b76ed465ebc3" +checksum = "e275feebbe9c2458c5877c5f2a03b8e2152831ce956376f015fc4c50acfffb50" dependencies = [ "bech32", "fs-err", - "getrandom 0.3.4", + "getrandom 0.4.3", "miden-assembly", "miden-assembly-syntax", "miden-core", @@ -1448,37 +1444,69 @@ dependencies = [ "miden-crypto", "miden-crypto-derive", "miden-mast-package", + "miden-package-registry", "miden-processor", + "miden-protocol-build-utils", "miden-utils-sync", "miden-verifier", - "rand 0.9.4", + "rand 0.10.2", "regex", "semver 1.0.28", "thiserror", +] + +[[package]] +name = "miden-protocol-build-utils" +version = "0.16.0-rc.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f1145d0f5cb0efde2484af06587225b2a222fbf4811c4606d0d7f1bd3ff40dc" +dependencies = [ + "fs-err", + "miden-assembly", + "miden-core", + "miden-mast-package", + "miden-package-registry", + "miden-project", + "regex", "walkdir", ] [[package]] -name = "miden-sdk-alloc" -version = "0.13.1" +name = "miden-rowan" +version = "0.16.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60727b43652a2a47daae3ef2b73ed8c491b276e689e9c7a26923aec095fc9520" +checksum = "c13695bf99aabaa21d6572b807c66bb26251aa3d9b75e828b3c99b97a3b1ce7e" +dependencies = [ + "hashbrown", + "rustc-hash", +] + +[[package]] +name = "miden-sdk-alloc" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" + +[[package]] +name = "miden-sdk-build-script-support" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" [[package]] name = "miden-serde-utils" -version = "0.25.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d78cd1d4fcad937312e544f7d53423485e453598aa4fb989d2b6374027a8c136" +checksum = "aa5e67d63441ddaec820a7cf0cabefa8312c15db7a1f2b108ce1b3f589eeeb23" dependencies = [ "p3-field", "p3-goldilocks", + "wincode", ] [[package]] name = "miden-stark-transcript" -version = "0.25.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05901db2e30d3954243960fe21cea7fbec39f97c27774b56fd5031c28c4881ba" +checksum = "a5ebdd546c7583ba045b20afdde9986e42e7070d1f5fb8841e13f3c921110873" dependencies = [ "p3-challenger", "p3-field", @@ -1488,9 +1516,9 @@ dependencies = [ [[package]] name = "miden-stateful-hasher" -version = "0.25.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faeb47a90c55c5d45051d23cf691588804dd531995b4582c79108b64e445a905" +checksum = "b47d09c4dbfa32918847a4d6426a69d3d527adbf4e01cf1decf714c95b1bf894" dependencies = [ "p3-field", "p3-symmetric", @@ -1498,18 +1526,27 @@ dependencies = [ [[package]] name = "miden-stdlib-sys" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c7fe77152e9cd74650673d847f43b32922ed1f7cdfb5c49a798cb578f081b4" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" dependencies = [ "miden-field", ] +[[package]] +name = "miden-tx-script-args" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" +dependencies = [ + "miden-field", + "miden-field-repr", + "miden-stdlib-sys", +] + [[package]] name = "miden-utils-core-derive" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e887090da62091ba39f600c0cd831fec084eb437014049c550ee1c32c1517b2e" +checksum = "5764abe966b8c0e7cf377e38de4cbcbbc83a3483f111043c461b7208619bdb96" dependencies = [ "proc-macro2", "quote", @@ -1518,11 +1555,10 @@ dependencies = [ [[package]] name = "miden-utils-diagnostics" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2444cdba48d71c3c540c9a3b268b5067f350ac9d60797d88fd92461ebd246a04" +checksum = "10561ffd67ee21baca489b96fad11e11579573e1f07f1fc5fb8a111d196fea59" dependencies = [ - "miden-crypto", "miden-debug-types", "miden-miette", "tracing", @@ -1530,11 +1566,11 @@ dependencies = [ [[package]] name = "miden-utils-indexing" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c76500dbcd119ebc1f558f8de302f21aeead8b37b70a5a664180f6ea2f6b869f" +checksum = "4c18e4f69d5ebe556a72cc9da474acc53eceb4a75c1247b1f542f20f73145deb" dependencies = [ - "miden-crypto", + "miden-serde-utils", "proptest", "serde", "thiserror", @@ -1542,9 +1578,9 @@ dependencies = [ [[package]] name = "miden-utils-sync" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "107803f349d07260dfacf96c0b583a279a49480cbd265c9b9135f7d06cbc0c55" +checksum = "0fa9c0af7dab7842819c02ef386ed1640884db5c2efa32d30da7d4739548f70e" dependencies = [ "lock_api", "loom", @@ -1554,34 +1590,36 @@ dependencies = [ [[package]] name = "miden-verifier" -version = "0.23.5" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "011b9bae1321cb46bea2197f1991a1ae1a1cabd9fe1e9a1b739626881944244c" +checksum = "900c0473191ecbe2328e3d6550571f0b1ab42d1417f43c1d98a50cafc3ae4ff1" dependencies = [ - "bincode", "miden-air", "miden-core", "miden-crypto", + "miden-precompiles", + "miden-precompiles-prover", + "miden-serde-utils", "serde", + "serde-wincode", "thiserror", - "tracing", ] [[package]] name = "midenc-frontend-wasm-metadata" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09640b069d663d9a594213c94adca634cb52f66cb22e21230e252c45e368f6f6" +version = "0.14.0-rc.1" +source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" dependencies = [ + "miden-mast-package", "serde", "serde_json", ] [[package]] name = "midenc-hir-type" -version = "0.6.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ff0511aa2201f7098995e38a3c97a319d379c3b2d26fb83677b21b71f61a7b4" +checksum = "f72909a4bae8dca4bbd34c28dcbcdff595afc47e48c312a683108f7452bd270b" dependencies = [ "miden-formatting", "miden-serde-utils", @@ -1591,21 +1629,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "nanorand" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" -dependencies = [ - "getrandom 0.2.17", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - [[package]] name = "nu-ansi-term" version = "0.50.3" @@ -1621,7 +1644,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" dependencies = [ - "num-bigint", + "num-bigint 0.4.8", "num-complex", "num-integer", "num-iter", @@ -1640,30 +1663,29 @@ dependencies = [ ] [[package]] -name = "num-complex" -version = "0.4.6" +name = "num-bigint" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +checksum = "93e7820bc0a80a0238e650327316f929ba18d5be054b647490a3a6a339f3e7c0" dependencies = [ + "num-integer", "num-traits", ] [[package]] -name = "num-derive" -version = "0.4.2" +name = "num-complex" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.118", + "num-traits", ] [[package]] name = "num-integer" -version = "0.1.46" +version = "0.1.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" dependencies = [ "num-traits", ] @@ -1684,7 +1706,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "num-bigint", + "num-bigint 0.4.8", "num-integer", "num-traits", ] @@ -1715,12 +1737,6 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" -[[package]] -name = "opaque-debug" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" - [[package]] name = "owo-colors" version = "4.3.0" @@ -1729,9 +1745,9 @@ checksum = "d211803b9b6b570f68772237e415a029d5a50c65d382910b879fb19d3271f94d" [[package]] name = "p3-air" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c824e8d7c7ddf208b742eac8d48e0b2d52d22fa013578a7762bf6931dbab1f46" +checksum = "ddb1be05c0d6f691afe0c9f468018a9a37cfa904dee78a8081ec96eb3cdd88e8" dependencies = [ "p3-field", "p3-matrix", @@ -1740,9 +1756,9 @@ dependencies = [ [[package]] name = "p3-blake3" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2733229a713bd83ccf5eb749e8f8e7380c1052674394a25c0422a772204a20af" +checksum = "6f202f5fbcceb6f56f783d98efb5de27e5a171470e3364de97b0923b39c87ab5" dependencies = [ "blake3", "p3-symmetric", @@ -1751,9 +1767,9 @@ dependencies = [ [[package]] name = "p3-challenger" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8972ccd1d5dc90e46cdb1f2ab4ee2bae49b3917e5e98aa533f0c2b779c010445" +checksum = "84d5d5e1ecf2c80b09b48ce870e8abd08b643454101c5dc9d0fd71bfbd78224d" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1765,27 +1781,27 @@ dependencies = [ [[package]] name = "p3-dft" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17771aca44632f9cc11f2718d7ea7ec06794946c4190ef3a985bfc893f14c18a" +checksum = "4321a952da2721ecd85ca593ea189798dfb4e439a2cc1378ce1442091880f173" dependencies = [ "itertools", "p3-field", "p3-matrix", "p3-maybe-rayon", "p3-util", - "spin 0.10.0", + "spin 0.12.3", "tracing", ] [[package]] name = "p3-field" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f3eb24d0591fd4d282d89cbe4e4efba5571c699375006f80b2cbf53ce83461c" +checksum = "53db75d38e04fc255826f388eca9d05976733dc9754aa3db411bc9ea1a37c1a0" dependencies = [ "itertools", - "num-bigint", + "num-bigint 0.5.1", "p3-maybe-rayon", "p3-util", "paste", @@ -1796,11 +1812,11 @@ dependencies = [ [[package]] name = "p3-goldilocks" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5751c6591a0d2397d726620c2c29a7436ec6c5e19d2ed74ca5d078d4fbb18eb5" +checksum = "d03b3f31080df31be723b876709246f8f1e532e1c5b82efb5281d705c8304c63" dependencies = [ - "num-bigint", + "num-bigint 0.5.1", "p3-challenger", "p3-dft", "p3-field", @@ -1812,13 +1828,14 @@ dependencies = [ "paste", "rand 0.10.2", "serde", + "spin 0.12.3", ] [[package]] name = "p3-keccak" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a7df174ff0c19a8742eb4698eaa1667c5f858d018e2faf09c55f1f24a6f9c3" +checksum = "ae50c8c37eb847c660298fb275e53c025c49b2623a8cfabf67f5322258b2b4db" dependencies = [ "p3-symmetric", "p3-util", @@ -1827,9 +1844,9 @@ dependencies = [ [[package]] name = "p3-matrix" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea9c94c0714944e7b8a9a62e6340b1e3e1d3f8ecfd3e35c08798360200e73eff" +checksum = "473eb920c446a6f4536e0d3528fbdca2a23c0e24e1d0d7767452e6d385dd335c" dependencies = [ "itertools", "p3-field", @@ -1842,15 +1859,15 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eebc233a34b1ab0273f35b4052fa2eeb3114b22ba4575bd7da00716e878ffb77" +checksum = "e6fddfd435f96394769414cf5590b77058aa506659bf20d6592e9d1989e04440" [[package]] name = "p3-mds" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b5441fa8116246ec9e6c835f15273cb27777ca572960ec87476b67fef13e01e" +checksum = "551ba0ab2cccd89f85a99450224898aff224e323bbf61f777ba6344f0896ef10" dependencies = [ "p3-dft", "p3-field", @@ -1861,12 +1878,12 @@ dependencies = [ [[package]] name = "p3-monty-31" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8724f330ea6d19dd4f2436aa0f88b5fcbf88f0f55ca7fccd3fea8b736dbcddad" +checksum = "871f635f7340cd0868b17e43e0c98fefdafdaed90469d0725caf6d8372a2a47c" dependencies = [ "itertools", - "num-bigint", + "num-bigint 0.5.1", "p3-dft", "p3-field", "p3-matrix", @@ -1879,26 +1896,27 @@ dependencies = [ "paste", "rand 0.10.2", "serde", - "spin 0.10.0", + "spin 0.12.3", "tracing", ] [[package]] name = "p3-poseidon1" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e2a562fea210baae390a32f9ecf0dd8724ae3f4352d1c8e413077b6f00a162" +checksum = "8d0d304e9a1f29c0d66534aa84e69528e2118351fdce08dcf5898af4e0fecc32" dependencies = [ "p3-field", + "p3-mds", "p3-symmetric", "rand 0.10.2", ] [[package]] name = "p3-poseidon2" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06394851c161d17e4aa4ad2aad5557d32f14cadd1dc838f965d8e1821a63b8c5" +checksum = "43eb8a73a26d14becaed1c67c3e8a047e4311d7909b402383c82ca9643ba17c6" dependencies = [ "p3-field", "p3-mds", @@ -1909,9 +1927,9 @@ dependencies = [ [[package]] name = "p3-symmetric" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac1a276d421f8ef3361bb7d8c39a02c93c6b3f10eeaa559cc4c50222f9a5b82" +checksum = "2015ea80cad969b6aabf27a04884286fe1354393b166d968ee0d80a95126b2a4" dependencies = [ "itertools", "p3-field", @@ -1921,12 +1939,11 @@ dependencies = [ [[package]] name = "p3-util" -version = "0.5.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d08a58162a4c264269ef454f0b28dcda89939490eecacb2b2cf5b00f719b80f6" +checksum = "6c5466fc40e6df89d3b291a2eff16b33e68e8571207790370137ec18090aadab" dependencies = [ "serde", - "transpose", ] [[package]] @@ -1959,23 +1976,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] -name = "petgraph" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" +name = "pastey" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher", -] +checksum = "2ee67f1008b1ba2321834326597b8e186293b049a023cdef258527550b9935b4" [[package]] name = "pin-project-lite" @@ -1985,9 +1989,9 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pkcs8" -version = "0.10.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7" dependencies = [ "der", "spki", @@ -1995,20 +1999,19 @@ dependencies = [ [[package]] name = "poly1305" -version = "0.8.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +checksum = "6e2d0073b297041425c7c3df6eb4792d598a15323fe63346852b092eca02904c" dependencies = [ - "cpufeatures 0.2.17", - "opaque-debug", + "cpufeatures", "universal-hash", ] [[package]] name = "portable-atomic" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" [[package]] name = "portable-atomic-util" @@ -2028,12 +2031,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - [[package]] name = "prettyplease" version = "0.2.37" @@ -2041,7 +2038,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.118", + "syn 2.0.119", +] + +[[package]] +name = "primefield" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c555a6e4eb7d4e158fcb028c835c3b8642206ddc279b5c6b202ef9a8bdb592f4" +dependencies = [ + "crypto-bigint", + "crypto-common", + "ff", + "rand_core 0.10.1", + "subtle", + "zeroize", +] + +[[package]] +name = "primeorder" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c9f42978c78a00e3d68f69fc03e57a234debae69da4020a4fb588fcdcd07b06" +dependencies = [ + "elliptic-curve", + "primefield", + "serdect", + "wnaf", ] [[package]] @@ -2057,9 +2080,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -2070,10 +2093,10 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "num-traits", - "rand 0.9.4", - "rand_chacha", + "rand 0.9.5", + "rand_chacha 0.9.0", "rand_xorshift", "regex-syntax", "unarray", @@ -2095,9 +2118,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.46" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -2116,11 +2139,11 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" dependencies = [ - "rand_chacha", + "rand_chacha 0.9.0", "rand_core 0.9.5", ] @@ -2130,6 +2153,8 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" dependencies = [ + "chacha20", + "getrandom 0.4.3", "rand_core 0.10.1", ] @@ -2144,12 +2169,13 @@ dependencies = [ ] [[package]] -name = "rand_core" -version = "0.6.4" +name = "rand_chacha" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "3e6af7f3e25ded52c41df4e0b1af2d047e45896c2f3281792ed68a1c243daedb" dependencies = [ - "getrandom 0.2.17", + "ppv-lite86", + "rand_core 0.10.1", ] [[package]] @@ -2167,15 +2193,6 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" -[[package]] -name = "rand_hc" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b363d4f6370f88d62bf586c80405657bde0f0e1b8945d47d2ad59b906cb4f54" -dependencies = [ - "rand_core 0.6.4", -] - [[package]] name = "rand_xorshift" version = "0.4.0" @@ -2211,14 +2228,14 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] name = "regex" -version = "1.12.4" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -2228,9 +2245,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -2245,14 +2262,29 @@ checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rfc6979" -version = "0.4.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +checksum = "b4a459cddafb3fe76b31fd8f1108007566c40301feb64dc7b54656eb7388172b" dependencies = [ + "crypto-bigint", "hmac", - "subtle", ] +[[package]] +name = "ruint" +version = "1.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e99bff0393163bb25029a6af25d3d8d202ba5b5438a74d1bd8789f5c822970" +dependencies = [ + "ruint-macro", +] + +[[package]] +name = "ruint-macro" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" + [[package]] name = "rustc-hash" version = "2.1.3" @@ -2306,14 +2338,14 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sec1" -version = "0.7.3" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d" dependencies = [ "base16ct", + "ctutils", "der", - "generic-array", - "pkcs8", + "hybrid-array", "subtle", "zeroize", ] @@ -2345,9 +2377,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -2365,31 +2397,42 @@ dependencies = [ "typeid", ] +[[package]] +name = "serde-wincode" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa9d3a86c66cf10ce79df36f555a5a4c8d72a82515d9ea8ca420e02c925c30f" +dependencies = [ + "serde", + "thiserror", + "wincode", +] + [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.4", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -2400,13 +2443,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.4", ] [[package]] @@ -2418,25 +2461,36 @@ dependencies = [ "serde_core", ] +[[package]] +name = "serdect" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66cf8fedced2fcf12406bcb34223dffb92eaf34908ede12fed414c82b7f00b3e" +dependencies = [ + "base16ct", + "serde", +] + [[package]] name = "sha2" -version = "0.10.9" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" dependencies = [ "cfg-if", - "cpufeatures 0.2.17", + "cpufeatures", "digest", ] [[package]] name = "sha3" -version = "0.10.9" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77fd7028345d415a4034cf8777cd4f8ab1851274233b45f84e3d955502d93874" +checksum = "bc9bad02c26382724b2d2692c6f179285e4b54eeecd7968f52a50059c3c11759" dependencies = [ "digest", "keccak", + "sponge-cursor", ] [[package]] @@ -2456,26 +2510,14 @@ checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signature" -version = "2.2.0" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5" dependencies = [ "digest", - "rand_core 0.6.4", + "rand_core 0.10.1", ] -[[package]] -name = "siphasher" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" - -[[package]] -name = "slab" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" - [[package]] name = "smallvec" version = "1.15.2" @@ -2493,49 +2535,37 @@ checksum = "e8e2fb0f499abb4d162f2bedad68f5ef91a1682b5a03596ddb67efd37768d100" [[package]] name = "spin" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" dependencies = [ "lock_api", ] [[package]] name = "spin" -version = "0.10.0" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" +checksum = "0134f9043ed38b087ac4f7d4af44c79e2c9e5094421fe3164f435ce585953b10" dependencies = [ "lock_api", ] [[package]] name = "spki" -version = "0.7.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +checksum = "1d9efca8738c78ee9484207732f728b1ef517bbb1833d6fc0879ca898a522f6f" dependencies = [ "base64ct", "der", ] [[package]] -name = "strength_reduce" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" - -[[package]] -name = "string_cache" -version = "0.8.9" +name = "sponge-cursor" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" -dependencies = [ - "new_debug_unreachable", - "parking_lot", - "phf_shared", - "precomputed-hash", -] +checksum = "3a0219bd7d979d58245a4f41f695e1ac9f8befdffadd7f61f1bae9e39abc6620" [[package]] name = "strip-ansi-escapes" @@ -2565,9 +2595,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.118" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" dependencies = [ "proc-macro2", "quote", @@ -2575,19 +2605,21 @@ dependencies = [ ] [[package]] -name = "target-triple" -version = "1.0.0" +name = "syn" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "591ef38edfb78ca4771ee32cf494cb8771944bee237a9b91fc9c1424ac4b777b" +checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] [[package]] -name = "term" -version = "1.2.1" +name = "target-triple" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8c27177b12a6399ffc08b98f76f7c9a1f4fe9fc967c784c5a071fa8d93cf7e1" -dependencies = [ - "windows-sys", -] +checksum = "c3a6bfce3d99adfa72d24750a61f782f3036a81e7f86d8841ee1326deaebd171" [[package]] name = "termcolor" @@ -2611,29 +2643,29 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.4", ] [[package]] name = "thread_local" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070" dependencies = [ "cfg-if", ] @@ -2649,9 +2681,9 @@ dependencies = [ [[package]] name = "toml" -version = "1.1.2+spec-1.1.0" +version = "1.1.4+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +checksum = "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5" dependencies = [ "indexmap", "serde_core", @@ -2673,18 +2705,18 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" dependencies = [ "winnow", ] [[package]] name = "toml_writer" -version = "1.1.1+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" [[package]] name = "tracing" @@ -2705,7 +2737,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -2747,21 +2779,11 @@ dependencies = [ "tracing-log", ] -[[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 = "trybuild" -version = "1.0.117" +version = "1.0.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0710d4dfbeae4f9c390baa784c49858a7468fa433f3fe5d0ec5ebef651cf59f9" +checksum = "1e605bf6b39357663d8ba4e984f8be8da8df6bb32e81031d6889024ea8fd68e4" dependencies = [ "dissimilar", "glob", @@ -2823,12 +2845,12 @@ checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "universal-hash" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +checksum = "f4987bdc12753382e0bec4a65c50738ffaabc998b9cdd1f952fb5f39b0048a96" dependencies = [ "crypto-common", - "subtle", + "ctutils", ] [[package]] @@ -2852,12 +2874,6 @@ dependencies = [ "smallvec", ] -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - [[package]] name = "vte" version = "0.14.1" @@ -2877,12 +2893,6 @@ dependencies = [ "winapi-util", ] -[[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.4+wasi-0.2.12" @@ -2894,9 +2904,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" dependencies = [ "cfg-if", "once_cell", @@ -2907,9 +2917,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2917,22 +2927,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" dependencies = [ "unicode-ident", ] @@ -2965,7 +2975,7 @@ version = "0.247.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e6fb4c2bee46c5ea4d40f8cdb5c131725cd976718ec56f1c8e82fbde5fa2a80" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "hashbrown", "indexmap", "semver 1.0.28", @@ -2980,6 +2990,18 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "wincode" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfc6339f1ba427bf7ad7c42403b28e524832ba2ddb5eef1bb2cc3b85db6b7b75" +dependencies = [ + "pastey", + "proc-macro2", + "quote", + "thiserror", +] + [[package]] name = "windows-link" version = "0.2.1" @@ -3006,9 +3028,9 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" [[package]] name = "wit-bindgen" @@ -3040,7 +3062,7 @@ dependencies = [ "heck", "indexmap", "prettyplease", - "syn 2.0.118", + "syn 2.0.119", "wasm-metadata", "wit-bindgen-core", "wit-component", @@ -3056,7 +3078,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", "wit-bindgen-core", "wit-bindgen-rust", ] @@ -3068,7 +3090,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d567162a6b9843080e5e0053f696623ff694bae8ae017c9ec536d1873bbe3d8" dependencies = [ "anyhow", - "bitflags 2.13.0", + "bitflags 2.13.1", "indexmap", "log", "serde", @@ -3099,34 +3121,45 @@ dependencies = [ "wasmparser", ] +[[package]] +name = "wnaf" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab12e7090f27e2ffd9322651492942d50c2926094af30601e1964337db39daf1" +dependencies = [ + "ff", + "group", + "hybrid-array", +] + [[package]] name = "x25519-dalek" -version = "2.0.1" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +checksum = "e7e8131a03190127fb2263afc72b322ecadae46b6ff8c6f399ff5d02f5559af6" dependencies = [ "curve25519-dalek", - "rand_core 0.6.4", + "rand_core 0.10.1", ] [[package]] name = "zerocopy" -version = "0.8.54" +version = "0.8.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19" +checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.54" +version = "0.8.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" +checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -3137,6 +3170,6 @@ checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/contracts/increment-note/Cargo.toml b/contracts/increment-note/Cargo.toml index 5da0e21..38fd06b 100644 --- a/contracts/increment-note/Cargo.toml +++ b/contracts/increment-note/Cargo.toml @@ -7,4 +7,7 @@ edition = "2021" crate-type = ["cdylib"] [dependencies] -miden = "0.13" +miden = { version = "=0.14.0-rc.1", git = "https://github.com/0xMiden/compiler", rev = "2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" } + +[build-dependencies] +miden-sdk-build-script-support = { git = "https://github.com/0xMiden/compiler", rev = "2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" } diff --git a/contracts/increment-note/build.rs b/contracts/increment-note/build.rs new file mode 100644 index 0000000..1db40a3 --- /dev/null +++ b/contracts/increment-note/build.rs @@ -0,0 +1,3 @@ +fn main() { + miden_sdk_build_script_support::prepare_package_cache(); +} diff --git a/contracts/increment-note/miden-project.toml b/contracts/increment-note/miden-project.toml index 6ff70c9..c7e2477 100644 --- a/contracts/increment-note/miden-project.toml +++ b/contracts/increment-note/miden-project.toml @@ -3,6 +3,7 @@ name = "increment-note" version = "0.1.0" [lib] +path = "src/lib.rs" kind = "note" # Notes export a package-derived interface (`miden-`), matching the `#[note]` macro. namespace = "miden:increment-note/miden-increment-note@0.1.0" @@ -11,7 +12,3 @@ namespace = "miden:increment-note/miden-increment-note@0.1.0" miden-core = "*" miden-protocol = "*" counter-account = { path = "../counter-account" } - -# WIT for the account component this note calls, produced by building counter-account. -[package.metadata.miden.dependencies] -counter-account = { wit = "../counter-account/target/generated-wit/" } diff --git a/integration/Cargo.toml b/integration/Cargo.toml index 021b2eb..0411222 100644 --- a/integration/Cargo.toml +++ b/integration/Cargo.toml @@ -4,12 +4,12 @@ version = "0.1.0" edition.workspace = true [dependencies] -cargo-miden = "0.9" -miden-client = { version = "0.15", features = ["tonic"] } -miden-client-sqlite-store = { version = "0.15", package = "miden-client-sqlite-store" } -miden-standards = { version = "0.15", features = ["testing"] } -miden-testing = "0.15" -miden-mast-package = { version = "0.23", default-features = false } +miden-client = { version = "0.16.0-rc.2", features = ["tonic"] } +miden-client-sqlite-store = { version = "0.16.0-rc.2", package = "miden-client-sqlite-store" } +miden-protocol = "0.16.0-rc.6" +miden-standards = { version = "0.16.0-rc.6", features = ["testing"] } +miden-testing = "0.16.0-rc.6" +miden-mast-package = { version = "0.29.1", default-features = false } tokio = { version = "1.48", features = ["rt-multi-thread", "net", "macros", "fs"] } -rand = { version = "0.9" } +rand = { version = "0.10" } anyhow = "1.0" diff --git a/integration/src/helpers.rs b/integration/src/helpers.rs index 01465b8..662b958 100644 --- a/integration/src/helpers.rs +++ b/integration/src/helpers.rs @@ -1,24 +1,28 @@ //! Common helper functions for scripts and tests -use std::{path::Path, sync::Arc}; +use std::{ + env, + path::{Path, PathBuf}, + process::Command, + sync::Arc, +}; use anyhow::{bail, Context, Result}; -use cargo_miden::run; use miden_client::{ account::{ component::{BasicWallet, InitStorageData, NoAuth}, Account, AccountBuilder, AccountComponent, AccountType, StorageSlotName, }, - auth::{AuthSchemeId, AuthSecretKey, AuthSingleSig}, + auth::{Approver, AuthSchemeId, AuthSecretKey, AuthSingleSig}, builder::ClientBuilder, keystore::{FilesystemKeyStore, Keystore}, - rpc::{Endpoint, GrpcClient}, + rpc::Endpoint, utils::Deserializable, Client, Felt, Word, }; use miden_client_sqlite_store::ClientBuilderSqliteExt; use miden_mast_package::Package; -use rand::RngCore; +use rand::Rng; /// Test setup configuration containing initialized client and keystore pub struct ClientSetup { @@ -38,9 +42,8 @@ pub struct ClientSetup { /// or client building fails pub async fn setup_client() -> Result { // Initialize RPC connection - let endpoint = Endpoint::testnet(); + let endpoint = Endpoint::devnet(); let timeout_ms = 10_000; - let rpc_client = Arc::new(GrpcClient::new(&endpoint, timeout_ms)); // Initialize keystore let keystore_path = std::path::PathBuf::from("../keystore"); @@ -51,10 +54,9 @@ pub async fn setup_client() -> Result { let store_path = std::path::PathBuf::from("../store.sqlite3"); let client = ClientBuilder::new() - .rpc(rpc_client) + .grpc_client(&endpoint, Some(timeout_ms)) .sqlite_store(store_path) .authenticator(keystore.clone()) - .in_debug_mode(true.into()) .build() .await .context("Failed to build Miden client")?; @@ -74,30 +76,108 @@ pub async fn setup_client() -> Result { /// # Errors /// Returns an error if compilation fails or if the output is not in the expected format pub fn build_project_in_dir(dir: &Path, release: bool) -> Result { + const EXPECTED_CARGO_MIDEN_VERSION: &str = "cargo-miden 0.10.0-rc.1"; + + let cargo_home = env::var_os("CARGO_HOME") + .map(PathBuf::from) + .or_else(|| env::var_os("HOME").map(|home| PathBuf::from(home).join(".cargo"))) + .context("CARGO_HOME and HOME are both unset; cannot locate the v0.16 compiler")?; + let cargo_miden = cargo_home + .join("miden-v16-0.10.0-rc.1") + .join("bin") + .join("cargo-miden"); + + if !cargo_miden.is_absolute() { + bail!( + "v0.16 cargo-miden path is not absolute: {}", + cargo_miden.display() + ); + } + if !cargo_miden.is_file() { + bail!( + "required v0.16 cargo-miden executable does not exist at {}", + cargo_miden.display() + ); + } + + let version_output = Command::new(&cargo_miden) + .args(["miden", "--version"]) + .output() + .with_context(|| { + format!( + "Failed to execute v0.16 compiler at {}", + cargo_miden.display() + ) + })?; + let version_stdout = String::from_utf8(version_output.stdout) + .context("cargo-miden version output was not valid UTF-8")?; + let version_stdout = version_stdout.trim_end_matches(['\r', '\n']); + let version_stderr = String::from_utf8_lossy(&version_output.stderr); + if !version_output.status.success() + || version_stdout != EXPECTED_CARGO_MIDEN_VERSION + || !version_stderr.is_empty() + { + bail!( + "compiler at {} reported stdout {:?}, stderr {:?}, and status {}; expected exactly {:?}", + cargo_miden.display(), + version_stdout, + version_stderr, + version_output.status, + EXPECTED_CARGO_MIDEN_VERSION + ); + } + let profile = if release { "--release" } else { "--debug" }; - let manifest_path = dir.join("Cargo.toml"); - let manifest_arg = manifest_path.to_string_lossy(); - - let args = vec![ - "cargo", - "miden", - "build", - profile, - "--manifest-path", - &manifest_arg, - ]; - - let output = run(args.into_iter().map(String::from)) - .context("Failed to compile project")? - .context("Cargo miden build returned None")?; - - let artifact_path = match output { - cargo_miden::CommandOutput::BuildCommandOutput { output } => output - .into_iter() - .next() - .context("cargo miden build produced no artifact")?, - other => bail!("Expected BuildCommandOutput, got {:?}", other), + let project_dir = dir + .canonicalize() + .with_context(|| format!("Failed to resolve project directory {}", dir.display()))?; + let manifest_path = project_dir.join("Cargo.toml"); + + let output = Command::new(&cargo_miden) + .args(["miden", "build", profile, "--manifest-path"]) + .arg(&manifest_path) + .env("CARGO_MIDEN", &cargo_miden) + .current_dir(&project_dir) + .output() + .context("Failed to compile project")?; + + let stdout = String::from_utf8_lossy(&output.stdout); + let stderr = String::from_utf8_lossy(&output.stderr); + if !output.status.success() { + bail!( + "Failed to compile project {} (status {}):\nstdout:\n{}\nstderr:\n{}", + project_dir.display(), + output.status, + stdout, + stderr + ); + } + + let artifact_reports = stdout + .lines() + .chain(stderr.lines()) + .filter_map(|line| line.trim().strip_prefix("Compiled ")) + .collect::>(); + let [artifact_report] = artifact_reports.as_slice() else { + bail!( + "cargo-miden must report exactly one compiled artifact, but reported {}:\nstdout:\n{}\nstderr:\n{}", + artifact_reports.len(), + stdout, + stderr + ); }; + let artifact_path = PathBuf::from(artifact_report); + let artifact_path = if artifact_path.is_absolute() { + artifact_path + } else { + project_dir.join(artifact_path) + }; + if !artifact_path.is_file() { + bail!( + "cargo-miden reported an artifact that is not a regular file: {}", + artifact_path.display() + ); + } let package_bytes = std::fs::read(&artifact_path).context(format!( "Failed to read compiled package from {}", @@ -121,7 +201,7 @@ pub fn counter_storage_slot() -> Result { /// Configuration for creating an account with a custom component pub struct AccountCreationConfig { - /// The account type to create. In protocol v0.15 this also encodes the + /// The account type to create. This also encodes the /// storage visibility (`AccountType::Public` / `AccountType::Private`). pub account_type: AccountType, /// Initial component storage data keyed by storage slot schema. @@ -164,7 +244,7 @@ pub async fn create_account_from_package( let account = AccountBuilder::new(init_seed) .account_type(config.account_type) .with_component(account_component) - .with_auth_component(NoAuth) + .with_component(NoAuth) .build() .context("Failed to build account")?; @@ -202,10 +282,10 @@ pub async fn create_basic_wallet_account( let builder = AccountBuilder::new(init_seed) .account_type(config.account_type) - .with_auth_component(AuthSingleSig::new( + .with_component(AuthSingleSig::new(Approver::new( key_pair.public_key().to_commitment(), AuthSchemeId::Falcon512Poseidon2, - )) + ))) .with_component(BasicWallet); let account = builder diff --git a/integration/tests/counter_test.rs b/integration/tests/counter_test.rs index b958383..5538d4f 100644 --- a/integration/tests/counter_test.rs +++ b/integration/tests/counter_test.rs @@ -3,7 +3,9 @@ use std::{path::Path, sync::Arc}; use anyhow::Context; use integration::helpers::{build_project_in_dir, counter_storage_slot, COUNTER_STORAGE_KEY}; use miden_client::{ - account::{component::InitStorageData, AccountBuilder, AccountComponent, AccountType}, + account::{ + component::InitStorageData, AccountBuilder, AccountComponent, AccountType, StorageMapKey, + }, auth::AuthSchemeId, crypto::RandomCoin, note::NoteScript, @@ -68,7 +70,8 @@ async fn counter_test() -> anyhow::Result<()> { // Build the transaction context let tx_context = mock_chain - .build_tx_context(counter_account.clone(), &[counter_note.id()], &[])? + .build_transaction(counter_account.clone()) + .authenticated_input_notes([counter_note.id()]) .build()?; // Execute the transaction @@ -82,7 +85,10 @@ async fn counter_test() -> anyhow::Result<()> { let count = mock_chain .committed_account(counter_account.id())? .storage() - .get_map_item(&counter_storage_slot, COUNTER_STORAGE_KEY) + .get_map_item( + &counter_storage_slot, + StorageMapKey::new(COUNTER_STORAGE_KEY), + ) .expect("Failed to get counter value from storage slot"); // Map values are returned as scalar words in `[value, 0, 0, 0]` layout. diff --git a/tasks/lessons.md b/tasks/lessons.md new file mode 100644 index 0000000..3c0d5a9 --- /dev/null +++ b/tasks/lessons.md @@ -0,0 +1,9 @@ +# Migration execution lessons + +- A post-release moving branch is never sufficient provenance for a release migration. Freeze the earliest coherent commit whose package versions, dependency spine, and changelog all identify the requested release line, and explicitly scan for the next release's version families before using it. +- Treat compiler version strings and compiler capabilities as separate evidence. When a build helper depends on a post-tag command checkpoint, install the helper and compiler from the same immutable source and prove the pair with a disposable end-to-end capability probe. +- Keep packaging references and source references separate. Copy only settled packaging changes from a template scaffold; use CI-maintained examples and the migration guide for contract source adaptations. +- Preserve history boundaries even when the filesystem makes Git inconvenient. If `.git/index.lock` is denied, stop and request the exact required Git operation instead of bypassing policy, synthesizing commits with plumbing, or folding a prerequisite commit into the migration diff. +- When a sandbox forces a standalone Cargo probe under a workspace, isolate it with a probe-only empty `[workspace]` table and run Cargo from the probe root so its `.cargo/config.toml` selects the intended guest target. +- Treat a compiler executable pin and a host library dependency as different boundaries. Before promising that two prerelease lines can coexist, resolve the full host graph: Cargo will not duplicate semver-compatible prereleases from the same source when exact requirements conflict. Keep the compiler outside the host graph and pass only its versioned artifact across the process boundary when the frozen compiler and client intentionally use different protocol RCs. +- A printed prerelease version is not proof that registry bits equal an unreleased same-version pipeline. When a post-tag pipeline adds generated metadata such as embedded WIT without bumping the package version, test the registry guest against the required cross-package flow; if it fails, source both tool and guest SDK from the one authorized immutable commit and freeze transitive VM patches to that commit's lock rather than accepting later compatible releases. diff --git a/tasks/todo.md b/tasks/todo.md new file mode 100644 index 0000000..2a20d2c --- /dev/null +++ b/tasks/todo.md @@ -0,0 +1,885 @@ +# project-template Miden v0.15 to v0.16 migration plan + +First independent audit status: **BLOCKED** + +Second independent audit status: **NEEDS HUMAN — the requested human authorization is now recorded below; its technical findings are incorporated in this revision** + +Third independent audit status: **NEEDS HUMAN — it did not receive the direct human approval messages; its four technical findings are incorporated in this revision** + +Previous complete-plan audit status: **PASS for the superseded 327-line task revision; it does not attest this newer task revision** + +Current independent audit status: **PASS — the complete current task and revised plan were audited read-only with no remaining findings** + +Current execution status: **IN PROGRESS — Phases 1-9 are green and the user approved the signed local migration commit on 2026-08-27, but the managed environment denies `.git/index.lock`; Phase 10 is paused with nothing staged and no push or remote action** + +Task source: `/Users/philipp/Documents/Work/Miden-Coding/ai-tasks/v16-migration/tasks/TASK-project-template-v16-migration.md` (**current 353-line revision read in full; SHA-256 `c095f2c61ebb8a91eb0689fc77004176dc9de7333ba2bd3782bb1a1a1ff836ca`**) + +Required Rust-contract reference map: `/Users/philipp/Documents/Work/Miden-Coding/ai-tasks/v16-migration/resources/V16-RUST-CONTRACT-REFERENCE-MAP.md` (**read in full on 2026-08-25; 222/222 lines**) + +Target repository: `/Users/philipp/Documents/Work/Miden-Coding/project-template` + +Implementation branch: `kbg/chore/v16-migration` + +Evidence directory: `/Users/philipp/Documents/Work/Miden-Coding/ai-tasks/v16-migration/outputs` + +## Objective and invariants + +Port the standalone `0xMiden/project-template` repository from Miden v0.15 to the pinned v0.16 RC stack. This is an API migration, not a rewrite. + +The implementation must preserve all observable behavior: + +- Keep both existing contracts, the single `counter_test`, and the single `increment_count` binary. +- Preserve the test name, test scenario, and final assertion that the stored count is exactly `1`. +- Preserve the binary's zero-argument CLI, execution order, output fields, account roles, note flow, and lack of a post-consumption sync/storage read. +- Apply one narrowly authorized, temporary runtime exception: replace the helper's hard-coded `Endpoint::testnet()` with pinned-client `Endpoint::devnet()` so the real-runtime verification targets `https://rpc.devnet.miden.io`. Do not make the endpoint configurable and do not change any other runtime behavior. Restoring Testnet is a later, separately verified change after Testnet is upgraded. +- Do not refactor, rename for taste, extract helpers, weaken assertions, add features, or copy the compiler scaffold wholesale. +- Keep the contract/compiler dependency line separate from the client/protocol dependency line. +- Do not edit reference repositories, push, open a PR, post to GitHub, or merge anything. +- Stop rather than changing behavior when an API or runtime requirement cannot be satisfied mechanically. + +## Recorded human runtime decision + +**Local decision record:** `RUNTIME-DEVNET-2026-08-24` (a plan-local correlation label, not an invented platform message ID). + +**Approval source and provenance:** the authority is the direct human-authored messages in the originating conversation, not this builder-authored plan, an agent summary, or a generic later approval. On 2026-08-24, after the first audit blocked the Testnet-versus-DevNet contradiction, the user explicitly authorized an **intermediate DevNet endpoint for verification** and stated that the project will be changed back to Testnet after Testnet is upgraded. After the second audit requested a more explicit scope record, the user directly confirmed exactly: “I authorize the temporary hard-coded `Endpoint::devnet()` change, live DevNet account and transaction creation, and application-level insertion of new DevNet keys into the existing keystore.” On 2026-08-25, after the third audit said it had not received those messages, the user directly instructed the builder to “revise everything remaining” and reaffirmed: “you do have my human authiorization for the devnet endpoint.” The 2026-08-24 direct message supplies the complete endpoint, live-side-effect, and existing-keystore scope; the 2026-08-25 direct message reconfirms the endpoint decision. + +Any independent re-audit and the eventual implementation agent must inherit the full originating conversation containing that exact human-authored authorization, or receive an independently human-supplied approval record alongside this file. Before any DevNet edit, account/key creation, store replacement, or transaction submission, the executor must confirm that the exact `RUNTIME-DEVNET-2026-08-24` authorization text is visible in its inherited human-message history. This plan must not be presented as independent proof of its own authorization. If an auditor or executor receives only the repository file, an agent summary, or a generic “approve implementation” message, it must mark authorization unverified and stop for direct re-authorization. + +Decision-complete interpretation, grounded in `miden-client v0.16.0-rc.2` source: + +- The only approved endpoint edit is `integration/src/helpers.rs`: `Endpoint::testnet()` -> `Endpoint::devnet()`. +- At that frozen client tag, `Endpoint::devnet()` is exactly `https://rpc.devnet.miden.io` and maps to `NetworkId::Devnet`. +- The authorized live side effects include public DevNet account creation and transaction submission; any resulting network inclusion cannot be rolled back. Each `increment_count` invocation that successfully completes the application's existing `keystore.add_key` call after `client.add_account` persists one newly generated Falcon-512 sender key. This happens before transaction submission, so a later transaction failure does not roll it back; this exact application-level mutation of the existing keystore is authorized. The `NoAuth` counter adds no auth key. +- The approval does not authorize a CLI flag, environment variable, configuration file, localhost fallback, auth/funding change, alternate transaction flow, extra output, or manual keystore inspection/move/deletion. +- Runtime verification must accept only a status response whose `version` is exactly `0.16.0-rc.1`. The node tag's root `Cargo.toml` must independently prove exact protocol/standards/tx/tx-batch pins `=0.16.0-rc.4`. +- `Endpoint::to_network_id()` and `GrpcClient::get_network_id()` classify the locally configured endpoint; neither is remote network-attestation evidence. The probe may record this as **configured endpoint/network classification** only. +- If the configured endpoint is not exact, DevNet reports another node/block-producer version, or the fee/runtime checks fail, stop. Do not silently use Testnet, a generic v0.16 node, or localhost. + +## Recorded human compiler-source decision + +After Phase 1 proved that `miden-sdk-build-script-support@0.14.0-rc.1` was not published and that the published/tagged `cargo-miden 0.10.0-rc.1` source lacks the helper's required `--stop-after=dependencies` capability, the user explicitly instructed: “Use the compiler source matching the v16 pipeline, even if it has not been released.” + +Decision-complete interpretation: + +- Freeze the authorized compiler source to `COMPILER_PIPELINE_COMMIT=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, the final functional v0.16 pipeline merge before the previously reviewed snapshot's unrelated repository publish-age configuration. Never follow the moving `origin/next` ref after recording it. +- Install `cargo-miden` and `midenc` from that exact Git revision into the isolated v0.16 tool root. Both must still print `0.10.0-rc.1`, but the evidence must also record the source revision because version output alone cannot distinguish this post-tag pipeline. +- Use exact immutable Git sources at `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a` for both `miden-sdk-build-script-support` and guest `miden`, with guest version requirement `=0.14.0-rc.1`. The build-support registry package is unpublished; the published guest rc.1 payload predates the same-version pipeline's embedded-WIT implementation and reproduces `package 'miden:counter-account@0.1.0' not found` after the obsolete WIT key is removed. A disposable two-contract probe proved that changing only the guest source to the authorized pipeline makes both packages build. Every non-compiler host/runtime pin remains unchanged. +- The compatibility probe must exercise this exact source-aligned binary/helper pair. A moving branch, local path dependency, vendored copy, manually supplied package cache, or nearby compiler commit is not authorized. +- Prove the no-v17 boundary before installation: the selected commit's compiler/SDK versions remain `0.10.0-rc.1`/`0.14.0-rc.1`, its compiler dependencies are protocol `=0.16.0-rc.4` and VM `0.29`, its changelogs explicitly classify the changes as protocol 0.16 migration work, and focused release/config/changelog scans contain no protocol 0.17, SDK 0.15, or compiler 0.11 line. The selected functional trees are byte-identical to the later `62c4318...` research snapshot; the only intervening path is `.cargo/config.toml`, which is not included in the selected commit. + +## Authority and resolved source conflicts + +Use this order when evidence disagrees: + +1. The user request and migration task file. +2. Target repository source and unchanged test/binary behavior. +3. Exact source at the frozen pins. +4. For the Rust-contract surface only, `compiler@2a5ebf830c910aa5f7bf53ee4df398915ab12f7a:sdk/sdk/MIGRATION.md` plus CI-maintained examples, with every post-pin section classified rather than applied automatically. +5. `resources/V16-RUST-CONTRACT-REFERENCE-MAP.md` for source routing and `resources/V16-VERSION-TABLE.md` for dependency versions/MSRV. +6. `resources/v16-migration-guide-full.md` for broader client/protocol/VM guidance. +7. The target's existing v0.15 skills. The compiler's whole-project scaffold is authoritative only for the three user-directed packaging changes at the frozen snapshot above; its source and integration files are not implementation precedent. + +Resolved planning facts: + +- The task's embedded “Migration Delta” is still an empty placeholder. Replace that missing operational context with a source-verification log at the exact tags; do not edit the task file. +- The version table's compiler verification command names the guest SDK tag incorrectly. Use `sdk/v0.14.0-rc.1`, not nonexistent `v0.14.0-rc.1`. Both `sdk/v0.14.0-rc.1` and compiler `v0.10.0-rc.1` resolve locally to `084877ef5feed979d0d732bb0ecbd9855a5022b8`. +- The user-directed whole-project packaging reference was first reviewed at `62c4318...`; after the explicit no-v17 instruction, implementation freezes the earlier functional merge `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`. The build-support/compiler/template/SDK trees are byte-identical between those commits; only a repository-level `.cargo/config.toml` was added afterward. Copy the three packaging adaptations from `2a5ebf830...`; retain their exact rc.1 versions while sourcing both support and guest SDK from the authorized immutable pipeline because the registry support is absent and the registry guest payload fails the required embedded-WIT build. +- The whole-project scaffold is packaging-migrated only. Its two contract source files and every common `integration/` file are byte-identical to this target's v0.15 code; it has zero `#[account_procedure]` and retains the old client/tool pins and APIs. The scaffold source/integration behavior is expressly excluded from the build-oriented template tests; separate integration/CI coverage checks only the two wrapper identities and presence of the support dependency. Never copy or use its `src/` or `integration/` as v0.16 precedent, and never treat its own green build as migration evidence. +- The reference map's broad “31 of 33 files identical” count does not describe this target branch after its six skill updates and documentation drift: the verified current comparison is 33 paths on each side, 31 common, but only 18 common files byte-identical. The load-bearing narrower claim—both contract sources and all integration files are byte-identical and stale—is verified. Report the measured scope rather than repeating the broad count. +- The current task explicitly applies the embedded-component-WIT migration in addition to the three settled packaging edits: remove increment-note's obsolete `[package.metadata.miden.dependencies]`/`wit` entry and keep only the ordinary path dependency. The planning checkout and `origin/main` still contain the obsolete table, so the task's statement that this file already has no WIT entry is a stale current-state description; the implementation must remove it as a required v0.16 API adaptation rather than assume it is absent. +- The same current-task correction applies to exactly three stale claims in the cherry-picked `.claude/skills/rust-sdk-patterns/SKILL.md`: the note-metadata sentence, the “two places” cross-component block, and the validation-checklist item. Use `outputs/compiler-port/rust-sdk-patterns.RECONCILED.md` as a section-level reference, re-verify each replacement against the target and immutable compiler snapshot, and do not copy the whole file. Never introduce the nonexistent `project-kind` key; `[lib].kind` remains the project-kind mechanism. +- `origin/next`'s 859-line `sdk/sdk/MIGRATION.md` was read in full by numbered sections. Its `## Unreleased` contains 11 headings; seven were added after frozen tag `sdk/v0.14.0-rc.1`. Use them as an audit inventory, not blanket edit instructions. The user's three packaging changes are an explicit exception to that pin rule; all other post-pin changes remain out unless frozen source/build independently requires them. +- Compatibility must be proven, not inferred from matching version strings: the required build helper invokes `cargo miden ... --stop-after=dependencies`, while tagged `cargo-miden v0.10.0-rc.1` lacks that checkpoint alias and successful partial-build handling. The explicit human decision therefore selects the immutable post-tag pipeline commit for both the isolated binaries and Git-revision build-support dependency. Phase 1 must run that exact source-aligned pair through a temporary plain-Cargo capability probe before any target edit. The compiler is intentionally outside the host Cargo graph: its exact protocol rc.4 dependency cannot coexist with the host graph's semver-compatible rc.6 package, so integration launches the isolated executable across a process/artifact boundary. +- The repository owns no `.masm` source files. MASM module-tree verification is an explicit empty-inventory result, not an omitted gate. +- `miden-client v0.16.0-rc.2:crates/rust-client/src/rpc/endpoint.rs` defines `Endpoint::devnet()` as `https://rpc.devnet.miden.io` and maps it to `NetworkId::Devnet`; this is the exact approved temporary endpoint mechanism. +- `miden-node v0.16.0-rc.1` resolves to commit `7999131c0c9b459322a5cc1d0a9b2b9976ea6de0`. Its root `Cargo.toml` declares workspace version `0.16.0-rc.1` and exact `=0.16.0-rc.4` pins for `miden-protocol`, `miden-standards`, `miden-tx`, `miden-tx-batch`, and `miden-block-prover`. Its RPC status handler returns `env!("CARGO_PKG_VERSION")`, so exact string equality is a valid runtime acceptance gate. +- A deployed node's self-reported package version is not cryptographic proof of its source commit. The runtime/source link is an explicit inference: the official DevNet endpoint reports exact package version `0.16.0-rc.1`, while the official release tag independently supplies the rc.4 dependency evidence. Report it as an inference, not attestation. + +## Current-state inventory + +- Git: clean before this planning file, on `chore/sync-skills-v15` at `80394cd`, tracking `origin/chore/sync-skills-v15`. +- Decided implementation base: after a fresh fetch, create `kbg/chore/v16-migration` from `origin/main`, then cherry-pick source commit `80394cd` as its own unsquashed skills commit. Current local evidence matches the task: `origin/main=56380d338950d8ca87c7d1bfbae7969c54684ab3`, merge-base `53be3f148dce715dd1bf03ccfb81246e31eb6f17`; main-only changes touch only three lockfiles, while `80394cd` touches only six skills. Re-prove after fetch and stop if topology/overlap changed. +- Open-PR intent to absorb without interacting with GitHub: #55 becomes direct `miden-protocol = "0.16.0-rc.6"`; #56 becomes the v0.16 client pin in `miden-client-cli`; #58's stale README `config.rs` tree entry stays removed. Report all three as superseded by the migration. +- Contracts: `contracts/counter-account` and `contracts/increment-note`. +- Test: `integration/tests/counter_test.rs::counter_test`. +- Binary: `integration/src/bin/increment_count.rs`; it must be run from `integration/` because it uses `../...` paths. +- Locks: root `Cargo.lock` plus one lockfile per contract. +- Installed baseline tools: `cargo-miden 0.9.0`, `midenc 0.6.0`. +- Rust toolchain: `nightly-2026-04-30` / Rust 1.97 with `wasm32-wasip2`; no toolchain-file change is currently expected. +- Ignored state: `store.sqlite3` is a pre-v0.16 SQLite database (`user_version = 1`); `keystore/` contains an existing key index and key. Never include key material in output logs. The authorized runtime will add a new DevNet key to this existing keystore through the application; no manual keystore operation is allowed. +- The installed `miden` wrapper is not a usable fallback, while the current build hook prefers it merely because the command exists. + +## Expected file-level migration + +| File | Minimal planned adaptation | +| --- | --- | +| `contracts/counter-account/Cargo.toml` | Set guest `miden` version `=0.14.0-rc.1` and source it from authorized immutable Git revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`; add the settled build-support dependency at the same revision. The guest source substitution is required because the published same-version payload lacks the pipeline's working embedded-WIT behavior. | +| `contracts/increment-note/Cargo.toml` | Copy the same exact guest/build-support packaging pins. | +| `contracts/counter-account/build.rs` | Add the exact three-line upstream wrapper calling `miden_sdk_build_script_support::prepare_package_cache();`. | +| `contracts/increment-note/build.rs` | Add the identical exact three-line wrapper. | +| Both contract lockfiles | Resolve the guest/compiler line independently; do not copy the compiler template locks. | +| Both `miden-project.toml` files | Copy the settled `[lib] path = "src/lib.rs"` line; preserve kind, namespace, ordinary dependencies, and supported account types. In increment-note, also remove the obsolete generated-WIT comment, `[package.metadata.miden.dependencies]` table, and `wit` entry exactly as required by the current task; retain the plain `counter-account` path dependency. Never add `project-kind`. | +| `contracts/counter-account/src/lib.rs` | Add `#[account_procedure]` to `get_count` and `increment_count` on the `#[component]` trait only, modelled on `compiler@2a5ebf830c910aa5f7bf53ee4df398915ab12f7a:examples/counter-contract/src/lib.rs:24,27`. Do not alter either implementation. | +| `contracts/increment-note/src/lib.rs` | No expected source change: `Wallet` does not collide with generated `CounterContract`, both are same-module, and the note has no post-pin `get_entrypoint_root`/felt-representation conflict. Change only if frozen source/compiler output proves otherwise. | +| `integration/Cargo.toml` | Remove the in-process `cargo-miden` library dependency so the compiler line remains outside the host graph; pin direct `miden-protocol 0.16.0-rc.6` (PR #55 intent), client/store `0.16.0-rc.2`, standards/testing `0.16.0-rc.6`, `miden-mast-package 0.29.1`, and compatible direct `rand 0.10`; leave Tokio/anyhow unchanged unless resolution proves necessary. | +| Root `Cargo.lock` | Regenerate only from exact host pins; require no `cargo-miden`/compiler packages, preserve the rc.6 host line, and remove stale `miden-tx-batch-prover`. | +| `integration/src/helpers.rs` | Replace in-process `cargo_miden::run`/`CommandOutput` with an invocation of the exact isolated compiler binary, using the same profile/manifest arguments and parsing the pinned CLI's official `Compiled ` report before unchanged package deserialization; use `rand::Rng`; remove client debug mode; use verification-wrapped `.grpc_client(&endpoint, Some(timeout_ms))`; install `NoAuth` and `AuthSingleSig` via `.with_component`; wrap the Falcon-512 commitment in `Approver`; make the explicitly authorized one-line temporary `Endpoint::testnet()` -> `Endpoint::devnet()` change; remove only the stale “In protocol v0.15” qualifier from the still-valid account-type/storage-visibility comment; preserve account type, add-account/keystore order, paths, and runtime output. | +| `integration/tests/counter_test.rs` | Replace removed `build_tx_context` with `build_transaction(...).authenticated_input_notes([id]).build()`; wrap the map lookup key in `StorageMapKey`; preserve every assertion and remaining step. | +| `integration/src/bin/increment_count.rs` | No expected source change. It will use the approved DevNet endpoint through the helper. Preserve note builders and both request flows. Add fee arguments/funding only with separate explicit approval because that changes behavior. | +| `.claude/hooks/build-contracts.sh` | Before any contract-source edit, derive the isolated binary path directly from the same Cargo-home-root convention used in Phase 1, require version `0.10.0-rc.1`, and never consult ambient `PATH` or the unusable `miden` wrapper. Preserve the hook JSON protocol, trigger, release build, captured tail, and nonzero failure propagation. | +| `README.md` | Replace v0.16 contract-toolchain provisioning through midenup with exact isolated-root checks/direct builds, and retain PR #58's removal of the nonexistent `config.rs` tree entry. Avoid unrelated prose cleanup. | +| `CLAUDE.md` | Add only source-verified v0.16 contract/test/build guidance required to keep examples accurate. | +| `.claude/skills/*/SKILL.md` | Port stale v0.15 pins/APIs and current-binary Testnet descriptions, add the relevant v0.16/temporary-DevNet rules, and preserve the richer `80394cd` skill content. In `rust-sdk-patterns`, fix exactly the three obsolete generated-WIT claims identified by the task and preserve all unrelated richer content. Audit exactly seven skills; do not overwrite them from the compiler scaffold or reconciled output. | +| `.claude/settings.json`, `.gitignore`, `rust-toolchain.toml`, `.cursorrules`, CI, root `Cargo.toml` | Verify but do not edit unless a pinned build or runtime failure demonstrates a migration requirement. The hook itself derives the persistent isolated tool path, so no settings/PATH injection is planned. Obsolete ignore entries alone are not migration work. | + +Known exact host patterns to verify immediately before editing: + +```rust +// Account auth is now an ordinary component. +.with_component(NoAuth) + +.with_component(AuthSingleSig::new(Approver::new( + key_pair.public_key().to_commitment(), + AuthSchemeId::Falcon512Poseidon2, +))) +``` + +```rust +// MockChain transaction migration; preserve the same one-note input set. +let tx_context = mock_chain + .build_transaction(counter_account.clone()) + .authenticated_input_notes([counter_note.id()]) + .build()?; +``` + +```rust +// Account storage now takes the typed map key. +.get_map_item(&counter_storage_slot, StorageMapKey::new(COUNTER_STORAGE_KEY)) +``` + +## Product-only search contract + +Every baseline, documentation, and final stale-reference search must use the exact product roots below. This reaches hidden `.claude/**` and `.github/**` content without traversing planning/evidence files or unrelated repository state: + +```sh +PRODUCT_PATHS=( + Cargo.toml rust-toolchain.toml README.md CLAUDE.md LICENSE + .gitignore .cursorrules .github .claude contracts integration +) +PRODUCT_EXCLUDES=( + --glob '!.git/**' + --glob '!**/Cargo.lock' + --glob '!**/target/**' + --glob '!**/store.sqlite3' + --glob '!**/*.sqlite' + --glob '!**/*.sqlite3' + --glob '!**/keystore/**' + --glob '!**/*.bak' + --glob '!**/*.backup' + --glob '!**/*.orig' + --glob '!**/*~' + --glob '!**/.tmp/**' + --glob '!**/tmp/**' +) +OLD_PIN_PATTERN='\bv?0\.9(?:\.[0-9]+)?\b|\bv?0\.23(?:\.[0-9]+)?\b|\bmiden\b.{0,80}0\.13(?:\.0)?|cargo-miden.{0,80}0\.9(?:\.0)?|midenc.{0,80}0\.6(?:\.0)?|miden-client.{0,80}0\.(?:14|15)(?:\.[0-9]+)?|miden-(?:client-sqlite-store|standards|testing).{0,80}0\.15(?:\.[0-9]+)?|miden-mast-package.{0,80}0\.23(?:\.[0-9]+)?|\brand\b.{0,80}0\.9(?:\.[0-9]+)?' +MIGRATION_INVENTORY_PATTERN="v?0\\.15(?:\\.[0-9]+)?|\\bv15(?:[-_/][[:alnum:].-]+)?\\b|${OLD_PIN_PATTERN}|miden-tx-batch-prover|with_auth_component|in_debug_mode|build_tx_context|AssetVaultKey|AssetId|AssetClass|AccountDelta|AccountPatch|\\b(?:account_delta|account_patch|apply_delta|apply_patch)\\s*\\(|\\.masl|\\bLibrary\\b|\\bKernelLibrary\\b|link_[A-Za-z0-9_]*_library|[A-Za-z0-9_]*_from_dir|Endpoint::testnet|https://rpc\\.testnet\\.miden\\.io|\\b[Tt]estnet\\b" + +OLD_PIN_SAMPLES=$(printf '%s\n' v0.9.0 0.9.2 v0.23 0.23.1) +OLD_PIN_SELF_CHECK=$(printf '%s\n' "$OLD_PIN_SAMPLES" | rg -x "$OLD_PIN_PATTERN") +test "$OLD_PIN_SELF_CHECK" = "$OLD_PIN_SAMPLES" +if printf '%s\n' 0.10.0-rc.1 0.29.1 | rg -q "$OLD_PIN_PATTERN"; then + exit 1 +fi +``` + +The exact before/after inventory command is: + +```sh +rg --hidden -n "$MIGRATION_INVENTORY_PATTERN" \ + "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" +``` + +Inventory the hook and exactly seven local skills in the same evidence log: + +```sh +EXPECTED_SKILLS=$(printf '%s\n' \ + .claude/skills/local-node-validation/SKILL.md \ + .claude/skills/miden-client-cli/SKILL.md \ + .claude/skills/miden-concepts/SKILL.md \ + .claude/skills/rust-sdk-patterns/SKILL.md \ + .claude/skills/rust-sdk-pitfalls/SKILL.md \ + .claude/skills/rust-sdk-source-guide/SKILL.md \ + .claude/skills/rust-sdk-testing-patterns/SKILL.md) +ACTUAL_SKILLS=$(find .claude/skills -mindepth 2 -maxdepth 2 -type f -name SKILL.md | LC_ALL=C sort) +test "$ACTUAL_SKILLS" = "$EXPECTED_SKILLS" +test -f .claude/hooks/build-contracts.sh +CONTROL_PATHS=$(printf '%s\n' .claude/hooks/build-contracts.sh "$ACTUAL_SKILLS") +test "$(printf '%s\n' "$CONTROL_PATHS" | wc -l | tr -d ' ')" -eq 8 +printf '%s\n' "$CONTROL_PATHS" +``` + +Use this exact NUL-safe filename inventory for repository-owned MASM source. It traverses only the declared product roots and prunes the directory equivalents of the product exclusions. Do not use `rg --files` with the mixed `PRODUCT_PATHS` array for this purpose: ripgrep emits explicitly named regular-file arguments even when an extension glob does not match them. + +```sh +MASM_CAPTURE_DIR=$(mktemp -d "${TMPDIR:-/tmp}/project-template-masm.XXXXXX") +MASM_STDOUT="$MASM_CAPTURE_DIR/masm.paths0" +MASM_STDERR="$MASM_CAPTURE_DIR/masm.stderr" +set +e +find "${PRODUCT_PATHS[@]}" \ + \( -type d \( \ + -name .git -o -name target -o -name keystore -o \ + -path 'integration/stores' -o -path '*/integration/stores' -o \ + -name .tmp -o -name tmp \ + \) -prune \) -o \ + \( -type f -name '*.masm' -print0 \) \ + >"$MASM_STDOUT" 2>"$MASM_STDERR" +MASM_STATUS=$? +set -e +printf 'masm_status=%s\n' "$MASM_STATUS" +test "$MASM_STATUS" -eq 0 +test ! -s "$MASM_STDERR" +test ! -s "$MASM_STDOUT" +``` + +Preserve `MASM_STATUS`, the raw NUL-delimited `MASM_STDOUT`, and complete `MASM_STDERR` in the phase's evidence before evaluating the three assertions. The expected current and final result is status `0` with stdout exactly zero bytes and stderr empty. Any stderr or nonzero status invalidates the inventory. If stdout is nonempty, the final assertion must fail: parse every path with a NUL-safe reader, record it, classify whether and how the file is reachable through its exact module declarations/package build, and stop for plan/source reconciliation before editing or continuing. Do not suppress or override the failed empty-inventory assertion. If implementation adds any new top-level product path, update `PRODUCT_PATHS` explicitly and rerun every inventory; never broaden a gate to `.`. + +Run these exact commands before edits, before Phase 7 documentation work, and after all product edits. Preserve complete output and exit status so the baseline and final inventories can be compared. Never use ignored-file bypass flags or `.` as the search root for migration gates. The product-root list deliberately excludes `.git/**`, `tasks/**`, evidence outputs, root stores/keystores, temporary backups, and generated targets; the globs redundantly enforce the safety boundary for matching nested paths. `Cargo.lock` is excluded only from stale-text gates because accepted transitive version skew can legitimately retain older version numbers; lockfiles remain subject to the separate dependency-tree/lock audit. + +## Execution plan + +### Phase 1 — Toolchain resolution (hard gate before migration edits) + +- [x] Create a toolchain evidence log at `outputs/project-template-toolchain-resolution.txt` in the task evidence directory. +- [x] Resolve exact registry releases with `cargo info @` for: + - `cargo-miden@0.10.0-rc.1` + - `midenc@0.10.0-rc.1` + - `miden@0.14.0-rc.1` + - `miden-protocol@0.16.0-rc.6` + - `miden-client@0.16.0-rc.2` + - `miden-client-sqlite-store@0.16.0-rc.2` + - `miden-standards@0.16.0-rc.6` + - `miden-testing@0.16.0-rc.6` + - `miden-mast-package@0.29.1` +- [x] Verify local and live remote tags/commits without reading moving branches: + - protocol `v0.16.0-rc.6` + - miden-client `v0.16.0-rc.2` + - miden-vm `v0.29.1` + - compiler `v0.10.0-rc.1` + - compiler SDK `sdk/v0.14.0-rc.1` + - compiler templates `templates/v0.32.0-rc.1` +- [x] Record that `miden-sdk-build-script-support@0.14.0-rc.1` is absent from crates.io, then apply the explicit human compiler-source decision. Set both `COMPILER_PIPELINE_COMMIT` and `COMPILER_PACKAGING_COMMIT` to immutable `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`; prove it is the earliest `next` mainline integration containing the support/helper, embedded-WIT, protocol rc.4, and VM 0.29 work. Prove no v17/future line by exact versions/changelog scans and record that its relevant functional trees are byte-identical to the later research snapshot. Do not use a moving branch at installation or dependency resolution time. +- [x] Resolve `miden-node v0.16.0-rc.1` exactly. Record tag commit `7999131c0c9b459322a5cc1d0a9b2b9976ea6de0`, root workspace version `0.16.0-rc.1`, and the root manifest plus lock evidence that `miden-block-prover`, `miden-protocol`, `miden-standards`, `miden-testing`, `miden-tx`, and `miden-tx-batch` are all exactly `=0.16.0-rc.4`. Also record protocol rc.4 commit `bbe8ec8020d8fdaa6ea703bce1557b1380942444`. +- [x] Record from `miden-node v0.16.0-rc.1:crates/rpc/src/server/api/status.rs` that the RPC status version is `env!("CARGO_PKG_VERSION")`, and from the pinned block producer source that a healthy producer reports its package version and `connected`. Define the runtime acceptance contract now: status version `0.16.0-rc.1`, block-producer version `0.16.0-rc.1`, block-producer status `connected`; no semver range or prefix match. +- [x] If a local tag is absent, fetch tags in that reference clone and retry once. If it still does not resolve, stop; never substitute a nearby release. (No tag was absent; live exact-tag resolution matched every local object.) +- [x] Print and record `rustc --version`, `cargo --version`, the active toolchain path, and installed `wasm32-wasip2` target. Confirm the highest MSRV, Rust 1.97, is met. +- [x] Record the existing v0.15 `cargo-miden` executable path and its `0.9.0` version before installing anything. +- [x] Preserve the v0.15 baseline tool by resolving one deterministic isolated root. Use this exact convention in both installation and the hook; record the expanded absolute path (expected here: `/Users/philipp/.cargo/miden-v16-0.10.0-rc.1`): + + ```sh + MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}" + MIDEN_V16_TOOL_ROOT="$MIDEN_CARGO_HOME/miden-v16-0.10.0-rc.1" + COMPILER_PIPELINE_COMMIT=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a + cargo install cargo-miden --git https://github.com/0xMiden/compiler \ + --rev "$COMPILER_PIPELINE_COMMIT" --locked --root "$MIDEN_V16_TOOL_ROOT" + cargo install midenc --git https://github.com/0xMiden/compiler \ + --rev "$COMPILER_PIPELINE_COMMIT" --locked --root "$MIDEN_V16_TOOL_ROOT" + ``` + +- [x] Print and verify the isolated binaries directly: `"$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" miden --version` must equal `cargo-miden 0.10.0-rc.1`, and `"$MIDEN_V16_TOOL_ROOT/bin/midenc" --version` must report `0.10.0-rc.1`. Prove the preserved ambient `/Users/philipp/.cargo/bin/cargo-miden` remains `0.9.0`; do not replace it. +- [x] Do not use an unpinned registry install, moving Git branch, local path install, later `next` commit, or `midenup install 0.16`. +- [x] Treat the build-support compatibility question as a **hard pre-edit capability gate**, because a version-string match cannot distinguish the tagged compiler bits from later `origin/next` bits that retain the same version. Record from exact source that the resolved support helper invokes `--stop-after=dependencies`, tagged `v0.10.0-rc.1` lacks that checkpoint alias, and tagged `BuildCommand::exec` does not accept deliberate `CompilerStopped` as success. +- [x] Exercise the actually installed isolated binary and exact Git-revision support crate without changing the target repository: + 1. Set `COMPILER_PACKAGING_COMMIT` to the exact immutable value above; derive `CARGO_MIDEN_BIN="$MIDEN_V16_TOOL_ROOT/bin/cargo-miden"`; require it to be an absolute executable with exact version output. + 2. Create a private `mktemp -d` probe root outside both repositories. Materialize only `extra/templates/project/contracts/counter-account` from `COMPILER_PACKAGING_COMMIT` into that root using a read-only `git archive` of the compiler object; never edit/run Cargo in the compiler checkout. + 3. In the private probe only, replace the unpublished registry build-dependency string with `{ git = "https://github.com/0xMiden/compiler", rev = "2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" }`. Leave `MIDENC_PACKAGE_CACHE` unset, set `CARGO_MIDEN` to the absolute isolated binary, and set `CARGO_TARGET_DIR` to a target directory inside the private probe root. Run `cargo metadata --no-deps --format-version 1` and `cargo check --manifest-path /Cargo.toml --release -vv`, preserving stdout, stderr, status, resolved lock commit/source, nested command line, and cache paths. + 4. Required result: status `0`; the helper launches the exact isolated binary; no ambient `0.9.x` tool is used; its nested dependency-staging build succeeds; a content-addressed `OUT_DIR/**/miden-packages` generation is published; and no `.staging-*` remains. A parse error for `dependencies`, `CompilerStopped`/unreachable error, missing support crate, stale-cache fallback, or nonzero exit blocks the migration before any hook/product edit. + 5. Do not set `MIDENC_PACKAGE_CACHE` manually, change the revision, or use a branch name to bypass this test. If the exact pair fails, report the incompatibility and stop; do not select a later compiler commit. +- [x] Record the final selected lines: the explicitly authorized unreleased v16 compiler pipeline and guest SDK use exact source `2a5ebf830...`, guest version `0.14.0-rc.1`, protocol rc.4, and the compiler lock's VM `0.29.1` family; host integration uses protocol rc.6 and MAST package 0.29.1; exact DevNet node `0.16.0-rc.1` uses protocol rc.4. Do not describe or accept this as merely a generic “v0.16 line.” + +Exit only when every executable version is installed and printed, every registry/tag pin plus exact Git source revision and node/protocol pair is proven, the v0.15 tool remains callable for the baseline, and the temporary plain-Cargo capability probe passes with the exact source-aligned isolated `cargo-miden 0.10.0-rc.1`. A green version check without source provenance and a green capability probe is insufficient. + +At the start of every later phase or new shell, rederive `MIDEN_CARGO_HOME` and `MIDEN_V16_TOOL_ROOT` with the exact Phase 1 assignments, require `test -x "$MIDEN_V16_TOOL_ROOT/bin/cargo-miden"`, and recheck exact version output before any v0.16 contract build. An unset/stale variable or bare `cargo miden` is not an accepted v0.16 tool selection. + +### Phase 2 — Git preflight and branch selection + +- [x] Record `git status --short --branch`, `git log --oneline -20`, `git branch -a`, remotes, and `git diff --stat` before any implementation edit. +- [x] Treat `tasks/todo.md` plus the AGENTS-required correction log `tasks/lessons.md` as the only expected planning artifacts. No unrelated worktree change was present. +- [x] After Phase 1 is completely green, run exactly `git fetch --all --prune --tags`. The command was run; Git safely refused to clobber the pre-existing local `v0.9`, `v0.10`, and `v0.11` tags. No tag was deleted or force-updated. A direct live `ls-remote origin refs/heads/main` then proved local `origin/main` exactly matches the live remote at `56380d338950d8ca87c7d1bfbae7969c54684ab3`. +- [x] Re-prove the decided topology after fetch before mutating Git: + - `80394cd` exists and is not already reachable from `origin/main`; + - the merge-base and main-only/skills-only path sets remain disjoint; + - main-only paths are the three lockfiles and skills-only paths are exactly the six named skill files; + - local `kbg/chore/v16-migration` does not exist, so the required `checkout -b` cannot overwrite prior work; + - commit signing is configured and usable before the cherry-pick creates a new commit. Do not change signing configuration or create an unsigned commit merely to advance. +- [x] If any topology/path/signing assertion differs, or the cherry-pick would be empty, stop for a new base decision. All assertions matched; no prohibited base/history action was taken. +- [x] With the assertions green, execute the task's exact base sequence: + + ```sh + git checkout -b kbg/chore/v16-migration origin/main + git cherry-pick 80394cd + git log --oneline -5 + ``` + + A conflict is a hard stop. Never amend, squash, or fold the cherry-picked skills change into the migration; preserve its original author and separate intent. +- [x] Set `MAIN_BASE_COMMIT=56380d338950d8ca87c7d1bfbae7969c54684ab3`, `SKILLS_BASE_COMMIT=1d47c165550ffe3757fd935b49256bf0370f3ad1`, and `BASELINE_COMMIT=$SKILLS_BASE_COMMIT`. The new signed commit's diff against `MAIN_BASE_COMMIT` is exactly the six skills and its patch/source is `80394cd`; all migration comparisons start at `BASELINE_COMMIT`. + +No manifest, source, lockfile, doc, hook, store, or reference-repository changes occur in this phase. + +### Phase 3 — Untouched v0.15 baseline capture + +- [x] Create these external evidence files without changing repository source: + - `outputs/project-template-baseline-inventory.txt` + - `outputs/project-template-baseline-build-test.log` + - `outputs/project-template-baseline-binary.log` +- [x] Record all manifests, contracts, tests, binaries, source-owned `.masm` files, tool versions, and the baseline commit. +- [x] Record the packaging/metadata baseline explicitly: neither contract has `build.rs`; both contract manifests have guest `miden = "0.13"` and no build-support dependency; both project manifests lack `[lib].path`; increment-note still has the obsolete generated-WIT comment/table/key that the current task requires removing. Record the exact three stale generated-WIT claims in the cherry-picked `rust-sdk-patterns` skill as the before-side of their targeted correction. +- [x] Run and preserve the exact focused WIT/project-kind/stale-skill scans later specified in Phase 9 Gate 8. Baseline results were the required obsolete table/key, exactly three skill claims, and `project-kind` status `1` with empty output. +- [x] Run the exact `OLD_PIN_PATTERN` self-check, `MIGRATION_INVENTORY_PATTERN` command, hook/seven-skill inventory, and MASM filename inventory from the product-only search contract. The union matched the expected stale baseline; control inventory was exactly eight paths; MASM status/stdout/stderr were `0`/empty/empty. +- [x] Set `BASELINE_CARGO_MIDEN_BIN` to the exact preserved absolute path recorded in Phase 1, recheck `"$BASELINE_CARGO_MIDEN_BIN" miden --version` equals `cargo-miden 0.9.0`, then build in this order and capture complete output/exit codes: + + ```sh + cargo build -p integration --release + "$BASELINE_CARGO_MIDEN_BIN" miden build --manifest-path contracts/counter-account/Cargo.toml --release + "$BASELINE_CARGO_MIDEN_BIN" miden build --manifest-path contracts/increment-note/Cargo.toml --release + cargo test -p integration --release -- --list + cargo test -p integration --release -- --nocapture + ``` + +- [x] Record the exact test name and result: `counter_test` passed; one passed, zero failed, zero ignored. +- [x] Inventory every binary with `find`/`rg`; `increment_count` is the only one and takes no arguments. +- [x] Query Testnet read-only with exact `miden-client 0.15.3`: RPC and block producer both reported `0.15.0`, producer `connected`. The first repository-root run failed before account creation because the existing ignored store had mismatched migration hashes; the untouched binary then passed from disposable clean v0.15 store/keystore state, returning both transaction IDs with exit `0`. +- [x] The no-compatible-node fallback was not needed because exact status verification and the disposable-state live baseline succeeded. +- [x] Record that the binary does not verify final storage or sync after consumption; the evidence is explicitly submission-only and this behavior will not be “improved.” + +### Phase 4 — Pin-specific source-verification map + +- [x] Write `outputs/project-template-source-verifications.md` before editing code. +- [x] For every non-trivial replacement, cite exact tag/immutable commit, file, symbol/signature, and minimal usage. Read release APIs with `git show :`; never use a moving branch or current reference worktree. The sole `next` exception is the user-directed Rust-contract audit/packaging snapshot already frozen as `COMPILER_PACKAGING_COMMIT`; refer to it by full commit after the one required `git -C compiler show origin/next:` read. +- [x] Record that `V16-RUST-CONTRACT-REFERENCE-MAP.md` was read completely (222 lines), and that a focused sub-agent read all 859 numbered lines of `COMPILER_PACKAGING_COMMIT:sdk/sdk/MIGRATION.md` in ranges 1-180, 181-360, 361-540, 541-720, and 721-859. Preserve the full heading inventory and frozen-tag/post-pin boundary in the source log; do not summarize “Unreleased” as one undifferentiated change set. +- [x] Record immutable compiler-reference evidence before any edit: + - packaging: both upstream contract manifests have exact guest/build-support rc.1 pins, both `build.rs` files contain only `prepare_package_cache()`, and both project manifests add `[lib].path`; + - source: `examples/counter-contract/src/lib.rs:24,27` marks exactly the two callable trait methods; `examples/basic-wallet/src/lib.rs` is the CI-maintained account/asset-operation reference; + - trap: scaffold contract sources and all integration common files hash equal to this v0.15 target, the scaffold contains zero account-procedure markers, and `tests/templates/tests/templates.rs:1-6` expressly excludes the default project scaffold. +- [x] Classify every `## Unreleased` heading as follows, with an exact target symbol scan and frozen-source citation for each row: + + | `MIGRATION.md` section | Project-template disposition | + | --- | --- | + | Transaction summaries are six words | Audited N/A: no guest custom authentication component; host `AuthSingleSig` is not this surface. Do not add guest auth code. | + | Attachment setter aliases are removed | Audited N/A: no attachment setter calls. | + | `#[note]` reserves `get_entrypoint_root` | Audited N/A: `IncrementNote` declares no conflicting item. | + | Contract crates gain a `build.rs` | **Applicable user-directed packaging exception:** add the exact support dependency/wrapper only after Phase 1 compatibility passes. | + | Kernel scalars are typed instead of `Felt` | Frozen-RC-relevant but audited N/A: no listed kernel count/height/nonce/attachment APIs; stored counter remains intentionally `Felt`. | + | Typed transaction-script arguments | Audited N/A: no tx-script crate or `#[tx_script]` entrypoint. | + | Mark account procedures | **Applicable source edit:** mark exactly `get_count` and `increment_count` on the component trait. | + | `#[account(...)]` generates one trait per component | Applicable semantic audit, no extra edit expected: `Wallet` differs from `CounterContract`, the generated trait is same-module/in scope, and both selected methods become callable. | + | Tx-kernel bindings beta.1 | Frozen-RC-relevant but audited N/A: no renamed/removed guest kernel calls; do not add basic-wallet behavior. | + | `#[note]` structs implement `ToFeltRepr` | Audited N/A: the fieldless note has no manual impl/custom field. | + | Component WIT embedded in package | **Applicable by explicit current-task decision:** remove increment-note's obsolete generated-WIT comment/table/key, retain its ordinary path dependency, and correct exactly three stale claims in `rust-sdk-patterns`. Do not generalize this into unrelated metadata cleanup. | + +- [x] Also classify the fully read historical `0.13.0 -> 0.13.1` and `0.12.0 -> 0.13.0` sections as already embodied or absent; do not re-migrate the component trait/storage shape, required project manifest, explicit account wrapper, or protocol-v0.15 bindings. +- [x] Run a focused pre-edit source scan over `contracts/**` and `integration/**` for the non-applicable Unreleased surfaces, including `TransactionSummaryConstructionFailed`, attachment setters, `get_entrypoint_root`, typed kernel count/height/nonce/attachment APIs, `#[tx_script]`, renamed/removed tx-kernel asset APIs, and manual note felt-representation impls. Capture zero matches or classify every match; do not turn prose hits in docs/skills into unrelated code churn. +- [x] Carry forward the already proven adaptations: + - compiler `#[account_procedure]` trait markers and same-module generated interface trait behavior from the CI-maintained counter example; + - exact user-directed guest/build-support versions, wrapper `build.rs`, and mandatory project target path from the immutable packaging snapshot, with both guest/support sources frozen to the authorized pipeline after the registry guest failed embedded-WIT resolution; + - embedded component-WIT handling from the same immutable migration snapshot: ordinary path dependency only for this embedded-WIT package, with no leftover `wit` key; + - basic-wallet account/asset-operation patterns as the guest asset reference, without importing unused behavior into this project; + - client `.grpc_client`, removed debug mode, and response-verification behavior; + - protocol account builder/auth/`Approver` APIs; + - `rand 0.10` trait used by the pinned client RNG; + - `MockChain::build_transaction` authenticated-note builder; + - typed `StorageMapKey` lookup; + - pinned cargo-miden CLI `Compiled ` artifact reporting, unchanged package reader, storage initialization, note builder, and transaction request shapes. +- [x] Prove the **authorized interim DevNet** target and fee policy with a read-only, store-free runtime probe before altering either request or opening the v0.16 SQLite store: + 1. Create a temporary Cargo project under a `mktemp -d` directory outside the target repository, with exact `miden-client = { version = "0.16.0-rc.2", features = ["tonic"] }` and Tokio dependencies. Create its files with the normal patch/edit mechanism, not shell redirection. + 2. Compile and run this pinned-source pattern, capturing output in `outputs/project-template-runtime-probe.log`: + + ```rust + use anyhow::{Context, ensure}; + use miden_client::rpc::{Endpoint, GrpcClient, NodeRpcClient}; + + #[tokio::main] + async fn main() -> anyhow::Result<()> { + let endpoint = Endpoint::devnet(); + ensure!(endpoint.to_string() == "https://rpc.devnet.miden.io"); + let rpc = GrpcClient::new(&endpoint, 10_000); + let status = rpc.get_status_unversioned().await?; + let (latest, _) = rpc.get_block_header_by_number(None, false).await?; + let fees = latest.fee_parameters(); + let block_producer = status + .block_producer + .as_ref() + .context("status omitted block producer")?; + + ensure!(status.version == "0.16.0-rc.1"); + ensure!(status.genesis_commitment.is_some()); + ensure!(status.chain_tip > 0); + ensure!(block_producer.version == "0.16.0-rc.1"); + ensure!(block_producer.status == "connected"); + ensure!(fees.verification_base_fee() == 0); + + println!("endpoint={endpoint}"); + println!("configured_network_id={:?}", endpoint.to_network_id()); + println!("node_version={}", status.version); + println!("node_genesis={:?}", status.genesis_commitment); + println!("chain_tip={}", status.chain_tip); + println!("block_producer_version={}", block_producer.version); + println!("block_producer_status={}", block_producer.status); + println!("latest_block={}", latest.block_num()); + println!("fee_faucet_id={:?}", fees.fee_faucet_id()); + println!("verification_base_fee={}", fees.verification_base_fee()); + Ok(()) + } + ``` + + 3. Add only `anyhow = "1.0"` for executable assertions. Record the temporary probe's resolved dependency tree and exact exit status. + 4. Required runtime result: configured endpoint exactly `https://rpc.devnet.miden.io`; locally configured network classification printed as DevNet; node version exactly `0.16.0-rc.1`; block-producer version exactly `0.16.0-rc.1` with status exactly `connected`; present genesis commitment; nonzero chain tip; retrievable latest header; and `verification_base_fee=0`. + 5. State the evidence boundary precisely: `Endpoint::to_network_id()` and `GrpcClient::get_network_id()` derive identity from the configured URL and are **not** node-reported network identity. Do not claim remote DevNet attestation. The node version is self-reported, and rc.4 is inferred by pairing that exact official package version with the frozen official tag's manifest/lock; the status RPC does not expose protocol version or source commit. + 6. Record the first probe's genesis commitment and require the immediate pre-transaction probe in Phase 8 to return the same value. This is a continuity check between the two observations, not comparison with an independently authoritative DevNet genesis. If remote network identity later becomes a requirement, stop until an authoritative expected genesis commitment is supplied and compared. + 7. The probe is read-only: it creates no client store/account/note/transaction. If any exact result fails, stop before moving the old store, changing the binary, or submitting transactions. Do not accept another RC, a final release, a generic v0.16 status, Testnet, or localhost without a new human decision. +- [x] If another unknown API appears during compilation, stop that edit path and launch a focused read-only pinned-source query. Do not trial-and-error rewrite. + +### Phase 5 — Hook guardrail, then exact dependency and metadata migration + +#### 5A. Repair the contract-build hook before any `contracts/**/src` edit + +- [x] Make `.claude/hooks/build-contracts.sh` the first repository file changed in the migration. Do this before contract manifests/metadata for the safest ordering and, as a hard requirement, before either `contracts/**/src/lib.rs` is edited. +- [x] Remove all `miden`-wrapper and `command -v cargo-miden` detection. The hook must derive exactly one isolated path on every invocation, independent of ambient `PATH`, using `MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}"`, `MIDEN_V16_TOOL_ROOT="$MIDEN_CARGO_HOME/miden-v16-0.10.0-rc.1"`, and `CARGO_MIDEN_BIN="$MIDEN_V16_TOOL_ROOT/bin/cargo-miden"`. Do not fall back to `/Users/philipp/.cargo/bin/cargo-miden`, `cargo miden`, or `miden`. +- [x] Invoke the resolved absolute binary as `"$CARGO_MIDEN_BIN" miden --version` and require the complete output to equal `cargo-miden 0.10.0-rc.1`. A missing executable, panic, nonzero version command, empty output, `cargo-miden 0.9.0`, or any other version is a hard hook failure. +- [x] Invoke the same already-verified absolute binary as `"$CARGO_MIDEN_BIN" miden build --manifest-path "$CARGO_TOML" --release`; this direct form includes the literal `miden` token required by cargo-miden's CLI and proves the version-checked binary is the build binary. +- [x] For missing/mismatched tools, emit JSON in the existing `hookSpecificOutput.additionalContext` protocol naming the derived absolute binary path, expected version and source revision, plus the exact immutable-Git install command from Phase 1 with the expanded root shown to the pioneer; then exit `2`. Never silently skip a contract edit because the wrong tool is installed. +- [x] Retain stdin JSON parsing, `FILE_PATH` compatibility, project/contract path filtering, release profile, complete build-output capture, last-20-lines failure context, success JSON, and propagation of build failures with exit `2`. +- [x] Exercise the exact command from `.claude/settings.json` under the captured **default environment**, without a `PATH` prefix or shell-local tool-root export; supply only the settings-required `CLAUDE_PROJECT_DIR="$PWD"`. Feed representative non-contract and contract JSON input directly to the hook command. Record that ambient `command -v cargo-miden` still resolves the preserved `0.9.0` binary while the hook logs/uses the derived isolated `.../miden-v16-0.10.0-rc.1/bin/cargo-miden`. Required results: non-contract input exits `0` without building; contract input verifies `0.10.0-rc.1`, attempts the affected contract build, and propagates its result. +- [x] Do not require the pre-migration contract-input build to succeed with the v0.16 compiler against untouched v0.15 manifests/source. At this point a source-incompatibility exit `2` is acceptable only when the evidence proves exact-tool preflight, a real attempted build, and correct exit/output propagation. The Phase 5A guardrail itself is then ready; migrated builds must become green in Phase 5B/6. +- [x] On the first actual `contracts/**/src` edit in Phase 6, capture the automatic PostToolUse invocation from the default hook environment and prove it again used the isolated absolute binary. The active Codex patch runtime does not dispatch Claude Code's `.claude/settings.json` hooks, so the executor invoked the exact settings command immediately after the edit with the exact edited path and no tool-path environment override; it succeeded with the derived isolated binary. `.claude/settings.json` remains unchanged. + +Do not begin Phase 5B or any contract-source adaptation unless the hook itself passes these cases. + +#### 5B. Exact pins, build-script support, and target metadata + +- [x] With the Phase 1 support-helper capability gate green, apply the three packaging adaptations from `COMPILER_PACKAGING_COMMIT` before any contract `src` edit. Copy the changed lines/files verbatim, not the whole scaffold files: + 1. In both contract manifests, retain exact guest version `0.14.0-rc.1` but source it from immutable Git revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, and add exactly one `[build-dependencies]` entry `miden-sdk-build-script-support` at that same Git revision. The upstream registry strings were applied first; the support package was absent, and execution then proved that the published guest payload cannot supply the same-version pipeline's embedded WIT. The existing human decision authorizing the unreleased v16 compiler pipeline therefore applies to both sources; no later commit is allowed. + 2. Add one `build.rs` per contract with exactly: + + ```rust + fn main() { + miden_sdk_build_script_support::prepare_package_cache(); + } + ``` + + 3. Add exactly `path = "src/lib.rs"` as the first key under each `[lib]` target. Preserve target kind/namespace, ordinary dependencies, and supported types; never add `project-kind`. +- [x] Apply the current task's separate embedded-WIT API adaptation to `contracts/increment-note/miden-project.toml`: delete only the generated-WIT explanatory comment, `[package.metadata.miden.dependencies]` header, and `counter-account = { wit = "../counter-account/target/generated-wit/" }`; preserve the existing `[dependencies]` table and exact `counter-account = { path = "../counter-account" }` entry. +- [x] Verify the packaging and WIT edits structurally before resolving locks: each contract manifest has exactly one matching build-dependency section/key; each project manifest has exactly one `[lib]` and matching path; increment-note has exactly one ordinary counter-account path dependency and no generated-WIT metadata table/key; neither project manifest contains `project-kind`; and each new `build.rs` byte-compares equal to `COMPILER_PACKAGING_COMMIT:extra/templates/project/`. Compare only the specifically authorized manifest sections rather than replacing whole files. +- [x] Update `integration/Cargo.toml` to the complete host pin set in the file map. Remove `cargo-miden` from the host graph; it is an exact isolated executable, not a host library. Add direct `miden-protocol = "0.16.0-rc.6"` to absorb PR #55's intent; do not omit it merely because protocol is also transitive. Use complete prerelease strings and leave Tokio/anyhow unchanged unless exact resolution proves a requirement. +- [x] Regenerate each contract lock independently from its manifest. +- [x] After each lock is deliberately resolved, run `cargo metadata --locked --no-deps --format-version 1 --manifest-path /Cargo.toml`. Require the exact guest/build-support requirements and no unintended manifest change; metadata inspection must not perform an implicit second lock update. +- [x] Regenerate the root lock from the host pins without blanket `cargo update`; use per-package `--precise` updates or normal resolution from edited exact requirements. The pre-resolution attempt with `cargo-miden` in this graph failed exactly as expected: published rc.1 requires protocol `=0.16.0-alpha.4`, the authorized source compiler requires `=0.16.0-rc.4`, and neither can share Cargo's semver-compatible protocol package slot with required host rc.6. The explicit process/artifact boundary is the resolution; do not downgrade or patch either line. +- [x] Inspect `cargo tree -p integration -d` and all three locks: + - the host graph contains only the frozen client/protocol/VM line and no `cargo-miden`/compiler package; the compiler/build-support line remains in the isolated executable and the two independent contract locks; + - no direct dependency drifted from the frozen pins; + - integration resolves its direct `miden-protocol` exactly `0.16.0-rc.6` alongside client/store rc.2 and standards/testing rc.6; + - both contract locks resolve `miden-sdk-build-script-support` version `0.14.0-rc.1` from exact Git source revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, never a branch or later commit; + - both contract locks resolve guest `miden` and its compiler SDK crates at version `0.14.0-rc.1` from the same exact Git revision, protocol exactly rc.4, and every compiler-side VM workspace crate exactly `0.29.1` as recorded by `COMPILER_PIPELINE_COMMIT:Cargo.lock`; no later `0.29.x` patch is accepted merely because the manifest range permits it; + - `miden-tx-batch-prover` is gone in favor of `miden-tx-batch`; + - no attempt was made to unify the accepted version lines. +- [x] Repeat the plain-Cargo helper gate on the actual target packaging with an absolute launcher and checkout-private target. Leave inherited cache state unset so the helper must prove dependency staging; never rely on the ambient v0.9 executable or a shared/global target: + + ```sh + CARGO_MIDEN_BIN="$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" + PLAIN_CARGO_TARGET="$PWD/target/plain-cargo-v16" + case "$CARGO_MIDEN_BIN" in /*) ;; *) exit 1 ;; esac + test -x "$CARGO_MIDEN_BIN" + test "$("$CARGO_MIDEN_BIN" miden --version)" = 'cargo-miden 0.10.0-rc.1' + (cd contracts/counter-account && \ + env -u MIDENC_PACKAGE_CACHE CARGO_MIDEN="$CARGO_MIDEN_BIN" \ + CARGO_TARGET_DIR="$PLAIN_CARGO_TARGET" \ + cargo check --manifest-path Cargo.toml --release -vv) + (cd contracts/increment-note && \ + env -u MIDENC_PACKAGE_CACHE CARGO_MIDEN="$CARGO_MIDEN_BIN" \ + CARGO_TARGET_DIR="$PLAIN_CARGO_TARGET" \ + cargo check --manifest-path Cargo.toml --release -vv) + ``` + + Cargo discovers each existing `.cargo/config.toml` from the process working directory, not from a child `--manifest-path`; running these from the repository root is invalid because it drops `wasm32-wasip2` and `cfg(miden)`. The counter check passed pre-source. The increment-note pre-source check correctly proved dependency staging but then failed because the still-unmarked counter package exposed no callable interface; rerun it after Phase 6A. Require both final checks to publish content-addressed package generations beneath this target, leave no `.staging-*`, and use only the exact isolated launcher. A nested `dependencies` checkpoint/`CompilerStopped` failure, stale fallback, or cross-checkout target path is a hard stop; do not bypass the helper by setting `MIDENC_PACKAGE_CACHE` manually. +- [x] Run a workspace build, then build both contracts by invoking the isolated binary directly—never bare `cargo miden`: + + ```sh + MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}" + MIDEN_V16_TOOL_ROOT="$MIDEN_CARGO_HOME/miden-v16-0.10.0-rc.1" + CARGO_MIDEN_BIN="$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" + PLAIN_CARGO_TARGET="$PWD/target/plain-cargo-v16" + test "$("$CARGO_MIDEN_BIN" miden --version)" = 'cargo-miden 0.10.0-rc.1' + (cd contracts/counter-account && \ + env -u MIDENC_PACKAGE_CACHE CARGO_MIDEN="$CARGO_MIDEN_BIN" \ + CARGO_TARGET_DIR="$PLAIN_CARGO_TARGET" \ + cargo check --manifest-path Cargo.toml --release -vv) + (cd contracts/increment-note && \ + env -u MIDENC_PACKAGE_CACHE CARGO_MIDEN="$CARGO_MIDEN_BIN" \ + CARGO_TARGET_DIR="$PLAIN_CARGO_TARGET" \ + cargo check --manifest-path Cargo.toml --release -vv) + cargo build --workspace --release + "$CARGO_MIDEN_BIN" miden build --manifest-path contracts/counter-account/Cargo.toml --release + "$CARGO_MIDEN_BIN" miden build --manifest-path contracts/increment-note/Cargo.toml --release + ``` + + Treat compiler errors as the input to the next minimal source adaptation; do not advance to tests while the affected layer is red. + +### Phase 6 — Minimal code migration, highest risk first + +#### 6A. Counter account + +- [x] Using only `COMPILER_PACKAGING_COMMIT:examples/counter-contract/src/lib.rs:20-28` as the source pattern, add `#[account_procedure]` immediately above both trait method declarations and nowhere else. The scaffold copy is forbidden as source evidence because its identical v0.15 trait omits both markers. +- [x] Build `counter-account` in release mode with `"$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" miden build --manifest-path contracts/counter-account/Cargo.toml --release`; never rely on ambient Cargo subcommand resolution. +- [x] Verify the resulting package exposes both account procedures using package metadata if supported; later note execution is the definitive behavior proof. The frozen CLI has no separate package-interface inspection command; the definitive proof passed when the unchanged increment note compiled against both generated calls and `counter_test` executed them to the preserved count-`1` assertion. + +#### 6B. Increment note + +- [x] Build `increment-note` after the counter WIT/package exists with `"$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" miden build --manifest-path contracts/increment-note/Cargo.toml --release`; never rely on ambient Cargo subcommand resolution. +- [x] Keep `Wallet`, `#[account(counter_account::CounterContract)]`, note signature, method calls, arithmetic, and `assert_eq` unchanged. The full Migration Guide audit establishes that the generated `CounterContract` trait is same-module/in scope and does not collide with `Wallet`; the note also has no reserved `get_entrypoint_root` or felt-representation conflict. No trait import/alias was needed. +- [x] If the note cannot call both marked procedures without a behavior-changing rewrite, stop and report. The note compiled and the behavior test passed, so this conditional stop did not trigger. + +#### 6C. Integration helper + +- [x] Replace in-process `cargo_miden::run`/`CommandOutput` in `build_project_in_dir` with the frozen compiler's own source-proven external-process pattern. The implementation derives and verifies the exact binary, sets child `CARGO_MIDEN`, captures failures, accepts exactly one official `Compiled ` report, resolves it against the child working directory, requires a regular file, and retains `Package::read_from_bytes`. +- [x] Apply the recorded runtime decision as a one-line, temporary `Endpoint::testnet()` -> `Endpoint::devnet()` replacement. The pinned constructor was already source-verified as exact `https://rpc.devnet.miden.io`; timeout and configuration behavior are unchanged. +- [x] Change direct `rand` to 0.10 and import `rand::Rng` so `client.rng().fill_bytes` uses the same trait version as the pinned client. +- [x] Replace the manual raw gRPC construction with `.grpc_client(&endpoint, Some(timeout_ms))`, retaining the approved DevNet endpoint and existing timeout while preserving v0.16 response verification. +- [x] Remove only `.in_debug_mode(true.into())`; do not confuse it with the helper's cargo `--debug` build profile. +- [x] Replace `.with_auth_component(NoAuth)` with `.with_component(NoAuth)`. +- [x] Replace the two-argument `AuthSingleSig::new` with the source-proven `AuthSingleSig::new(Approver::new(commitment, AuthSchemeId::Falcon512Poseidon2))`, then pass it through `.with_component`. +- [x] Remove only the stale “In protocol v0.15” qualifier from `AccountCreationConfig::account_type`; retain the accurate statement that `AccountType::Public`/`Private` encodes storage visibility. +- [x] Preserve the client/store/existing-keystore paths, public `AccountType`, storage seed, package reader, printed account ID, `client.add_account` followed by `keystore.add_key`, and all error context. No alternate keystore path or inspection was introduced. +- [x] Run `cargo clean -p integration` once after changing shared helper code, then rebuild integration to avoid stale binaries. The clean reported no stale package artifacts and the release workspace build passed. + +#### 6D. Integration test + +- [x] Import `StorageMapKey` and replace only the removed MockChain transaction-construction API and typed map-key argument. +- [x] Preserve sender auth, counter initial state, note package and ID, transaction execution, pending transaction insertion, block proof, storage slot/key, assertion text, expected value `1`, and test name. +- [x] Run the single test immediately. `counter_test` passed: one passed, zero failed, zero ignored. +- [x] Diff `integration/tests/counter_test.rs` against `BASELINE_COMMIT` and prove that every changed hunk is an API adaptation and lines containing the final assertion are unchanged. The complete diff contains only the import, transaction-builder replacement, and typed lookup key; the assertion block is byte-identical. + +#### 6E. Binary + +- [x] First build `increment_count` unchanged against the migrated helper/dependencies. The release build passed and the binary source has an empty diff against `BASELINE_COMMIT`. +- [x] Preserve `.tag(0)`, the two requests, sync points, print labels/order, no arguments, and no final state read. The complete binary-source diff is empty; the only runtime change is inherited from the authorized helper endpoint. +- [x] On a zero-fee v0.16 environment, do not add fee conversion info or funding code. The read-only DevNet probe reported zero verification base fee and no fee/funding code was added; the immediate runtime probe must repeat this result. +- [x] On a nonzero-fee environment, stop before editing: the fresh sender and `NoAuth` counter both have empty vaults. The sender would need fee conversion info plus a funded fee asset; `NoAuth` must be funded in the native fee asset and rejects explicit conversion info. Adding faucet/funding flow or changing auth/endpoint/CLI beyond the recorded DevNet exception is a separate material behavior change requiring new user approval. The immediate DevNet probe reported zero verification base fee, so this conditional stop did not trigger and no fee/funding behavior was added. + +### Phase 7 — Documentation and skills after the hook migration + +- [x] Before documentation edits, rerun the exact `MIGRATION_INVENTORY_PATTERN` command, exact hook/seven-skill inventory, and exact MASM filename inventory from the product-only search contract. Require `ACTUAL_SKILLS` to equal the seven explicitly named `EXPECTED_SKILLS`, `CONTROL_PATHS` to contain exactly eight paths (one hook plus those seven skills), and MASM status/stdout/stderr to remain `0`/empty/empty. After documentation edits, rerun the same three commands and preserve a before/after comparison. No placeholder pattern or unrestricted ignored-file scan is permitted. +- [x] Update `README.md` only where v0.16 provisioning/commands and current runtime target are stale. State that the v0.16 midenup channel does not provision this contract toolchain, show the exact isolated-root direct RC install/version check, describe `increment_count` as temporarily targeting DevNet—not Testnet—and remove the nonexistent `config.rs` tree entry exactly as intended by PR #58. +- [x] Update `CLAUDE.md` examples and pitfalls to match the working migrated code; include the required per-contract build-support dependency/wrapper and preserve the package-cache/tool provenance caveat. Do not add new architectural advice. +- [x] Document the already-repaired hook's Cargo-home-derived isolated path and exact `cargo-miden 0.10.0-rc.1` requirement where setup guidance describes automatic contract builds. Do not tell pioneers that ambient `PATH` selects the hook compiler. +- [x] Where plain `cargo check`/IDE analysis is documented, state that each contract's `build.rs` calls `prepare_package_cache()`, `CARGO_MIDEN` must select the verified absolute v0.16 binary, and a checkout-private Cargo target avoids cross-checkout cache reuse. Do not suggest manually setting `MIDENC_PACKAGE_CACHE` as a bypass. +- [x] Port the seven local skills in place: + - `local-node-validation`: v0.16 node/client pairing, sealed inputs, fresh SQLite store, fees, removed debug mode, and descriptions of the current `increment_count` binary as DevNet rather than Testnet; + - `miden-client-cli`: current project client `0.16.0-rc.2` and v0.16 CLI behavior, superseding PR #56's intermediate 0.15 update; + - `miden-concepts`: qualify the stale “no gas” claim and reflect fee/auth semantics; + - `rust-sdk-patterns`: account-procedure markers, target paths, build-support wrapper, generated interface traits, and exactly the three current-task embedded-WIT corrections. Replace the note-metadata claim, “two places” dependency block, and checklist claim with ordinary `[dependencies]`-only guidance plus the accurate embedded-WIT/leftover-key rule. Use the reconciled output section-by-section, never as a whole-file replacement, and do not introduce `project-kind`; + - `rust-sdk-pitfalls`: current SDK/compiler pins, deterministic `CARGO_MIDEN`/package-cache rules, and relevant v0.16 silent semantic traps; + - `rust-sdk-source-guide`: corrected repositories/tags, MSRV, and two-version-line workspace; + - `rust-sdk-testing-patterns`: rc.6 dependencies, `build_transaction`, typed map keys, `AccountPatch` terminology, and correct `apply_patch` versus intentionally relative `account_delta` examples. +- [x] Treat each skill example as a claim: verify against exact source or the now-green target code. Delete/weaken no safety guidance. +- [x] Classify every case-insensitive Testnet match from the exact Phase 9 documentation gate. Any statement that calls the current `increment_count` binary or helper Testnet-backed must be changed to DevNet. Accurate generic CLI choices, source-exploration topics, and the explicitly future Testnet-restoration note may remain only with a row explaining why they do not describe current runtime behavior. +- [x] Leave the existing `*.masl` ignore rule untouched unless a pinned build/runtime failure proves it blocks the migration. Do not add generated package artifacts to Git. +- [x] Do not change CI, `.cursorrules`, settings, root workspace structure, or the Rust toolchain merely to modernize them. Edit only if the required local build/quality gate proves a v0.16 incompatibility. + +### Phase 8 — Full verification and real runtime gate + +- [x] Create final evidence logs: + - `outputs/project-template-final-build-test.log` + - `outputs/project-template-final-binary.log` + - `outputs/project-template-final-report.md` +- [x] Run formatting checks without bulk reformatting unrelated code. +- [x] Run, with the isolated v0.16 tool selected, and record full output/exit codes: + + ```sh + MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}" + MIDEN_V16_TOOL_ROOT="$MIDEN_CARGO_HOME/miden-v16-0.10.0-rc.1" + test "$("$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" miden --version)" = 'cargo-miden 0.10.0-rc.1' + cargo build --workspace --release + "$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" miden build --manifest-path contracts/counter-account/Cargo.toml --release + "$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" miden build --manifest-path contracts/increment-note/Cargo.toml --release + cargo build -p integration --bin increment_count --release + cargo test -p integration --release -- --list + cargo test -p integration --release -- --nocapture + ``` + + Require the repeated plain-Cargo checks to exercise the wrapper successfully with the exact launcher, checkout-private target, published cache generations, and zero lingering `.staging-*`. Preserve verbose evidence; the final contract builds do not substitute for this packaging capability. + +- [x] Compare test names and results line by line with the baseline. Required result: the same `counter_test` passes with its assertion intact; zero deleted/ignored/weakened tests. +- [x] Run the exact product-root MASM filename inventory from the search contract and append its complete stdout, stderr, and status. Required result for this repo: status `0`, empty stdout, and empty stderr, proving zero repository-owned `.masm` files in the declared product roots; module declaration reachability is therefore N/A. If a file appears, classify its exact module-declaration/package reachability and stop for reconciliation rather than claiming the empty result. Do not claim generated Rust-contract procedures are covered by this check; prove them through package inspection and successful transaction submission. +- [x] Immediately before store replacement or transaction submission, rerun the exact store-free `Endpoint::devnet()` probe from Phase 4 and append its output. Require the exact configured endpoint/classification, node and block-producer `0.16.0-rc.1` equality, block-producer `connected` status, the same genesis commitment observed in Phase 4, chain/header checks, and `verification_base_fee=0`; a prior result is insufficient because runtime state is time-dependent. Describe package/source/protocol correspondence as the recorded inference, not remote attestation. +- [x] Before any v0.16 client opens the active store path, record the exact ignored `store.sqlite3` path and move it to a task-specific private temporary backup so removal is recoverable. Do not migrate or commit it. Do not manually inspect, copy, move, delete, or print the existing keystore; the later application's `keystore.add_key` mutation is the sole authorized keystore write. +- [x] If the immediate runtime probe is not green, stop at the runtime gate. Do not fall back to Testnet/localhost, accept another node RC, or change auth, funding, CLI, output, request arguments, or transaction flow. The probe was green, so this conditional stop did not trigger. +- [x] From `integration/`, run every binary (currently only `increment_count`) against the approved DevNet node. Label the result **`SUBMISSION-ONLY PASS`** only if the process exits `0`, the publish `submit_new_transaction` returns a transaction ID, the existing intervening `sync_state()` succeeds, the consume `submit_new_transaction` returns a transaction ID, and the same six output fields are printed in the same order. This proves successful submission calls only. Because the preserved binary performs no post-consumption sync, transaction-status query, note-state query, or counter storage read, do not claim on-chain commitment/finality, confirmed note consumption, or a runtime-observed counter value. Attribute semantic execution and the count-`1` assertion to the unchanged passing `counter_test`, not to the live binary. The submissions intentionally create authorized public DevNet side effects and may result in irreversible network inclusion; the binary does not observe that inclusion. +- [x] If committed-state evidence is later required, stop for a separately source-verified, separately approved out-of-band observer plan. Do not add polling, sync, status queries, or storage reads to `increment_count`, because that would violate the preserved-behavior invariant. No such evidence was required or added. +- [x] Record, without printing or inspecting secret material, that normal account setup completed `client.add_account` and then application-level `keystore.add_key` against the existing keystore. This persistent DevNet-key insertion is expected and explicitly authorized. Any manual keystore mutation or alternate keystore path is out of scope. +- [x] Confirm a fresh v0.16 DevNet SQLite store was created and synced; never reopen the archived v0.15/Testnet store with v0.16. Record a follow-up that the future return to Testnet must use a fresh Testnet store and must re-run the same exact-version/fee/runtime gates for the upgraded Testnet stack. +- [x] Compare binary behavior with the baseline/static fallback. A build-only result is failure. The final binary report must use the exact `SUBMISSION-ONLY PASS` label and repeat the unobserved-commitment/count limitations beside the returned IDs. + +### Phase 9 — Stale-reference, drift, and material-change audit + +- [x] Keep `tasks/todo.md` in place. It is planning evidence, not product content, and is excluded by the explicit product roots rather than moved or hidden to manipulate results. Source the exact `PRODUCT_PATHS`/`PRODUCT_EXCLUDES` arrays from the product-only search contract for every command below. +- [x] Gate 1 — stale v0.15 product references: + + ```sh + rg --hidden -n 'v?0\.15(?:\.[0-9]+)?|\bv15(?:[-_/][[:alnum:].-]+)?\b' \ + "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" + ``` + + Required result: zero matches (`rg` exit `1`). This includes dotted v0.15 versions and compact forms/branch names such as `v15` and `kbg/chore/v15-migration`. There are no intentional v0.15 exceptions in product manifests, source, docs, hooks, skills, or settings. Older transitive versions inside excluded `Cargo.lock` files are assessed through the lock/dependency audit instead. + +- [x] Gate 2 — old direct pins/tool versions, including pre-v0.16 lines that do not contain `0.15`: + + ```sh + OLD_PIN_SELF_CHECK=$(printf '%s\n' "$OLD_PIN_SAMPLES" | rg -x "$OLD_PIN_PATTERN") + test "$OLD_PIN_SELF_CHECK" = "$OLD_PIN_SAMPLES" + if printf '%s\n' 0.10.0-rc.1 0.29.1 | rg -q "$OLD_PIN_PATTERN"; then + exit 1 + fi + rg --hidden -n "$OLD_PIN_PATTERN" \ + "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" + ``` + + Required result: the positive and negative self-checks pass, then the product search finds zero matches (`rg` exit `1`). The shared pattern deliberately catches standalone `v0.9.x`/`0.9.x` compiler references and standalone old VM `v0.23`/`0.23.x` references even when nearby text does not name cargo-miden, midenc, or MAST. No product exception is permitted for these old direct pins or tool/VM versions. The frozen new pins (`miden 0.14.0-rc.1`, isolated cargo-miden/midenc `0.10.0-rc.1`, direct protocol/standards/testing rc.6, client/store rc.2, MAST package 0.29.1, rand 0.10) must be verified separately. Verify compiler executables by absolute path/version/source provenance and verify host pins by manifest/metadata; require `cargo-miden` absent from integration metadata and the root lock. + +- [x] Gate 3 — removed crates and APIs: + + ```sh + rg --hidden -n \ + 'miden-tx-batch-prover|with_auth_component|in_debug_mode|build_tx_context|AssetVaultKey|AuthMethod|AuthSingleSigAcl|Asset::vault_key|`(?:Library|KernelLibrary)`|\bKernelLibrary\b|\bmiden_(?:client::assembly|assembly)::Library\b|\bLibrary::[A-Za-z_][A-Za-z0-9_]*|\b(?:Arc|Box|Option|Result|Vec)])|link_[A-Za-z0-9_]*_library|[A-Za-z0-9_]*_from_dir' \ + "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" + ``` + + Required result: zero stale API matches (`rg` exit `1`). This deliberately targets `Library` as a Rust/API symbol rather than matching every English use of the word. + + Then inventory every bare `Library` occurrence: + + ```sh + rg --hidden -n '\bLibrary\b' \ + "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" + ``` + + Classify every result in `outputs/project-template-semantic-symbol-audit.md`. Generic headings/prose such as “Standard Library” and “Client Library” are intentional exceptions and require no edit. Any removed Rust `Library` API context must be remediated and must also make the narrowed stale-API command fail until fixed. This classification prevents unrelated prose churn. + +- [x] Gate 4 — obsolete `.masl` spelling, with one deliberate no-cleanup exception: + + ```sh + rg --hidden -n '\.masl' \ + "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" + ``` + + Required result: exactly one match, `.gitignore:9:*.masl`. It is intentional because deleting an obsolete ignore entry alone is out of migration scope. Any other `.masl` match fails the gate. If a required build/runtime change legitimately alters `.gitignore`, update this expected-line evidence rather than hiding the match. + +- [x] Gate 5 — asset-identity semantic classification: + + ```sh + rg --hidden -n '\b(AssetVaultKey|AssetId|AssetClass)\b' \ + "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" + ``` + + First classify **every** match from the initial run—including any `AssetVaultKey`—in `outputs/project-template-semantic-symbol-audit.md` with path:line, containing symbol, semantic role (`AssetVaultKey` = removed v0.15 vault identity; v0.16 `AssetId` = per-asset vault identity; `AssetClass` = faucet/class identity), action or justified no-action, and pinned-source citation. Use `COMPILER_PACKAGING_COMMIT:examples/basic-wallet/src/lib.rs` as the CI-maintained guest account/asset-operation pattern and exact frozen protocol source for the `AssetId`/`AssetClass` semantic definitions; neither source permits a blind rename. Remediate any stale occurrence, rerun the exact command, and require zero final `AssetVaultKey` matches. Every surviving `AssetId` and `AssetClass` must remain in the final ledger. Zero unclassified initial or final occurrences are allowed; do not infer correctness from compilation. + +- [x] Gate 6 — account-update semantic classification: + + ```sh + rg --hidden -n '\b(AccountDelta|AccountPatch)\b|\b(?:account_delta|account_patch|apply_delta|apply_patch)\s*\(' \ + "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" + ``` + + Classify **every** match from the initial run and every match from the final rerun in the same semantic audit with path:line, semantic role, action/no-action, and pinned-source citation. `AccountPatch`/account `apply_patch()` is required for absolute account updates; `AccountDelta`/`account_delta()` is intentional only for the relative `TransactionSummary` surface. Account-update `apply_delta()` examples are stale and must be migrated. Any update-path `AccountDelta`/`apply_delta`, any relative-summary `AccountPatch`, or any unclassified initial/final match fails the gate. Zero total matches is acceptable only if the captured command output proves there are no product occurrences. + +- [x] Gate 7 — Testnet-specific documentation and source classification: + + ```sh + rg --hidden -n 'Endpoint::testnet' \ + "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" + ``` + + Required result: zero matches (`rg` exit `1`); the current product source and examples must not select Testnet while the authorized interim DevNet behavior is active. + + Then classify Testnet prose/URLs separately: + + ```sh + rg --hidden -ni 'https://rpc\.testnet\.miden\.io|\btestnet\b' \ + "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" + ``` + + Add every match to `outputs/project-template-semantic-symbol-audit.md` with path:line and role. Required result: zero docs/skill statements that describe the **current** helper or `increment_count` binary as Testnet-backed. Accurate generic network choices, source-exploration topics, and the explicit future Testnet-restoration follow-up are intentional exceptions only when classified. Do not erase accurate general Testnet documentation merely to force zero matches. + +- [x] Gate 8 — exact Rust-contract packaging and source-reference boundary: + - Require each contract manifest to contain exactly one `[dependencies]` Git entry for `miden` with version `=0.14.0-rc.1`, URL and full revision equal to the authorized pipeline, plus exactly one `[build-dependencies]` Git entry for `miden-sdk-build-script-support` at that same URL/revision; validate section membership, versions, and resolved lock sources with TOML/lock parsing, not loose text counts. + - Require each project manifest to contain exactly one `[lib] path = "src/lib.rs"`; require increment-note to retain exactly one `counter-account = { path = "../counter-account" }` under `[dependencies]` and contain zero `[package.metadata.miden.dependencies]` tables and zero `wit` keys. Require zero `project-kind` keys in both project manifests. + - Capture stdout, stderr, and status for these focused final scans. The first two must return status `1` with empty stdout/stderr; any status `2` is a gate error rather than a pass: + + ```sh + rg -n '^\[package\.metadata\.miden\.dependencies\]$|^[[:space:]]*[^#].*\bwit[[:space:]]*=' \ + contracts/increment-note/miden-project.toml + rg --hidden -n '\bproject-kind\b' \ + "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" + ``` + + Then use section-aware TOML parsing to prove the remaining counter-account dependency belongs to `[dependencies]`, its value is exactly `{ path = "../counter-account" }`, and `[lib].kind` remains `note`; a loose text match is not sufficient for section membership. + - Compare `.claude/skills/rust-sdk-patterns/SKILL.md` against the Phase 3 baseline and `rust-sdk-patterns.RECONCILED.md` by the three named sections. Require the old note-metadata WIT-entry claim, “declare ... in two places” block, and “under both ... (wit)” checklist claim to be absent; require their replacements to say that embedded-WIT dependencies use the ordinary `[dependencies]` path, a leftover `wit` key is an error for this package, and the metadata key remains only an escape hatch for packages without embedded WIT. Require all unrelated skill content to remain preserved and zero `project-kind` matches across product roots. + - Run this exact literal stale-claim scan. At Phase 3 baseline it must return status `0`, empty stderr, and exactly three matching lines; at the final gate it must return status `1` with empty stdout/stderr. Status `2` or any baseline count other than three is an error: + + ```sh + rg -n -F \ + -e 'cross-component `[package.metadata.miden.dependencies]` WIT entry' \ + -e 'in **two places**' \ + -e 'under both `[dependencies]` (path) and `[package.metadata.miden.dependencies]` (wit)' \ + .claude/skills/rust-sdk-patterns/SKILL.md + ``` + + - Run exact fixed-string positive checks for the following five canonical strings from the three reconciled sections. Require each to occur on exactly one line with status `0` and empty stderr, then inspect the complete three affected sections semantically: + + ```sh + POSITIVE_WIT_SKILL_PATTERNS=( + '**Project metadata for notes:** See [increment-note/miden-project.toml](../../../contracts/increment-note/miden-project.toml) for `[lib] kind = "note"`, the `namespace` (`miden:increment-note/miden-increment-note@0.1.0`), and the path dependency on the called component (`counter-account = { path = "../counter-account" }`).' + 'declare the component under `[dependencies]` in `miden-project.toml`: `counter-account = { path = "../counter-account" }`.' + 'WIT is embedded in its compiled package, so no `[package.metadata.miden.dependencies]` entry is needed.' + 'it survives only as an escape hatch for dependency packages that do not embed WIT.' + '- [ ] Cross-component deps declared under `[dependencies]` in `miden-project.toml` (no `wit` key: WIT is embedded in the compiled package)' + ) + for expected in "${POSITIVE_WIT_SKILL_PATTERNS[@]}"; do + test "$(rg -n -F -- "$expected" .claude/skills/rust-sdk-patterns/SKILL.md | wc -l | tr -d ' ')" -eq 1 + done + ``` + + - Byte-compare both target `build.rs` files with their same relative paths at `COMPILER_PACKAGING_COMMIT`. Require exactly two target `#[account_procedure]` markers, both on counter trait declarations, and zero in increment-note. + - Record that the scaffold itself still has zero procedure markers and is excluded from compiler template tests. Do not compare/copy scaffold `src/` or `integration/` into the target; their verified equality is evidence that they are stale, not a desired final state. + - Re-run the Phase 5B/8 plain-Cargo checks and require the exact isolated launcher/cache contract. A passing `cargo miden build` alone does not make the build-support packaging gate green. + +- [x] Gate 9 — decided Git base and superseded open-PR intent: + - require branch `kbg/chore/v16-migration`, `MAIN_BASE_COMMIT` equal to the fetched `origin/main`, and one separate signed `SKILLS_BASE_COMMIT` whose diff is exactly the six files from source commit `80394cd`; + - require integration metadata to expose direct `miden-protocol = "0.16.0-rc.6"` (PR #55 intent), not merely a transitive protocol edge; + - require `.claude/skills/miden-client-cli/SKILL.md` to state the v0.16 client `0.16.0-rc.2` and contain no intermediate `0.14`/`0.15` pin (PR #56 intent); + - require the stale README `config.rs` tree entry to be absent (PR #58 intent); + - record in the final report that #55, #56, and #58 are superseded by these v0.16 results. Do not post, close, merge, or otherwise mutate any PR. + +- [x] Rerun the exact union command `rg --hidden -n "$MIGRATION_INVENTORY_PATTERN" "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}"`, the exact hook/seven-skill inventory, and the exact MASM filename inventory after Gates 1-9. Compare all three with Phase 3 line by line. Require `.claude/hooks/build-contracts.sh` plus exactly the same seven skill paths to be present, require the MASM result to remain status `0`/empty stdout/empty stderr, and explain every surviving union text match through the gate-specific intentional-exception/semantic ledgers. +- [x] Preserve each command, stdout/stderr, and exit status in the final evidence. Do not add exclusions for product source, docs, hooks, skills, or settings to force green output, and do not substitute an unrestricted scan. + +- [x] Run `git diff --check`, review `git status`, `git diff --stat BASELINE_COMMIT`, and the complete diff. +- [x] Justify every hunk as one of: exact pin/lock resolution, required API adaptation, required v0.16 build/runtime configuration, or documentation of the migrated behavior. Revert all unrelated churn. +- [x] Write a material-behavior/side-effect delta ledger. Its only source-behavior exception is `integration/src/helpers.rs` changing `Endpoint::testnet()` to `Endpoint::devnet()`. It must also record the authorized consequences: public DevNet account creation, transaction submission and possible irreversible network inclusion, plus application-level insertion of the new DevNet key into the existing keystore. Distinguish observed submission/returned IDs from unobserved commitment. Every other source hunk must be API adaptation only and preserve behavior. Any additional material behavior or persistent side effect stops the migration for a new human decision. +- [x] Compare read-only against both compiler reference boundaries and report them separately: + - tagged `compiler@v0.10.0-rc.1` is the frozen release/API source and predates the build-support packaging; + - `COMPILER_PACKAGING_COMMIT:extra/templates/project` supplies only the three explicitly required packaging adaptations; its contract source and integration common files are byte-identical stale v0.15 copies and contain zero procedure markers. Its source/integration behavior is not built by the template-test job; wrapper identity and support-dependency presence are separately integration-test/CI-covered; + - the current target/ref comparison is 33 paths each, 31 common, 18 common byte-identical—not the reference map's broad 31-of-33 count—because target skills/docs and packaging differ; + - the embedded-WIT deletion is a separate current-task-required API adaptation beyond the three verbatim packaging changes; report the stale planning-checkout state and the exact manifest/three-skill-claim removals rather than misclassifying it as one of the packaging copies; + - standalone skill files retain the target's later v0.15 improvements before being ported, no scaffold source/integration file was copied, and no compiler-repository file was edited. +- [x] Confirm no generated artifacts, SQLite database, keystore files, secrets, or temporary backups are staged. The authorized ignored keystore mutation may exist locally but must never be inspected, logged, or staged. + +### Phase 10 — User checkpoint, signed local commit, and final report + +- [x] Present the green verification evidence and material-change audit, then obtain the required commit approval before committing. Approval received directly from the user on 2026-08-27: “yeah create a local commit. no push yet.” +- [x] Preserve the Phase 2 cherry-picked skills commit as a separate, signed history entry immediately above `MAIN_BASE_COMMIT`; never squash, amend, re-author, or fold it into migration work. +- [ ] Create one cohesive signed migration commit containing only `BASELINE_COMMIT..HEAD` migration changes because the port and its documentation must move together. Approved subject: `chore: migrate project template to Miden v0.16`. The attempted normal staging operation failed before changing the index because the managed environment denied `.git/index.lock`. +- [ ] Use a header-only conventional commit, sign it, and add no body, co-author, or generated attribution. +- [ ] Verify the final history shape `origin/main -> separate cherry-picked skills commit -> signed migration commit(s)`, plus every new hash, exact subject, author/committer boundary, and signature. Never amend; any correction becomes a new/fixup commit. +- [x] Do not push or open a PR. +- [x] Return the task's required sections in this exact order: + 1. Toolchain Resolution + 2. Baseline + 3. Migration Summary + 4. Source Verifications + 5. Files Changed + 6. Material-Change Audit + 7. Test Comparison + 8. Binary Run Log + 9. Drift vs compiler's `extra/templates/project` + 10. Blockers or Follow-ups + 11. Local Branch and Commit + + In `Blockers or Follow-ups`, state that PRs #55, #56, and #58 are superseded by the completed v0.16 changes without performing any GitHub action. In `Local Branch and Commit`, report `MAIN_BASE_COMMIT`, source skills commit `80394cd`, resulting `SKILLS_BASE_COMMIT`, each migration commit, and signature status separately. + +## Stop conditions + +Stop and report concisely rather than improvising when any of these occurs: + +- The executor cannot see the exact direct human-authored `RUNTIME-DEVNET-2026-08-24` authorization in inherited history or an independently human-supplied approval record. +- The post-fetch Git topology/path sets differ from the decided `origin/main` plus disjoint `80394cd` model, `kbg/chore/v16-migration` already exists, commit signing is not ready, or the exact cherry-pick conflicts/is empty. Do not merge PR #52, base on the skills branch, amend, squash, or improvise a replacement history. +- A frozen registry/tag pin does not resolve after one tag refresh. +- The immutable compiler source does not resolve exactly to `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, its no-v17 version/dependency proof changes, the private Phase 1 plain-Cargo probe fails, or the helper uses an ambient/moving compiler/cache bypass. Do not copy the required packaging changes until this compatibility gate passes. +- Any proposed compiler/support/template source differs from `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`; do not substitute a later `origin/next` state even if its printed versions are unchanged. +- Increment-note cannot build with the explicitly required generated-WIT metadata removal, or the compiler indicates this dependency package does not embed WIT. Stop with exact immutable-source/build evidence; do not restore the stale `wit` key, invent another metadata form, or broaden the change without a reconciled human decision. +- The explicit compiler-process/MAST-artifact boundary fails, `cargo-miden` re-enters the host Cargo graph, or the direct host rc.6 line cannot resolve. Do not downgrade/patch the compiler rc.4 or host rc.6 line and do not link the compiler library into integration. +- The integration crate cannot retain direct `miden-protocol = "0.16.0-rc.6"` while satisfying the frozen client/standards/testing pins; do not silently drop PR #55's decided intent or rely only on a transitive edge. +- The untouched baseline is red, or a migrated build/test layer remains red. +- The same blocker is encountered three times. +- A required API or behavior cannot be proven from exact source. +- A test cannot be migrated without changing its meaning or assertion. +- The binary needs a different endpoint than the approved `Endpoint::devnet()`, a different node tag, auth model, funding workflow, CLI, output, or transaction flow. +- The configured endpoint/locally derived classification differs from exact `Endpoint::devnet()`, DevNet's unversioned status is not exactly node `0.16.0-rc.1`, its block producer is not exactly `0.16.0-rc.1` and `connected`, the two observed genesis commitments differ, its header checks fail, or its verification base fee is nonzero. +- The default-environment hook cannot derive and execute the isolated `cargo-miden 0.10.0-rc.1` binary independently of ambient `PATH`. +- The selected v0.16 runtime charges fees and the existing empty accounts cannot run unchanged. +- The application cannot preserve `client.add_account` followed by authorized insertion of the new DevNet key into the existing keystore without manual key handling or secret disclosure. +- Safe handling of unrelated worktree changes, the pre-v0.16 store, key material, or commit signing is unclear. +- Any step would require editing a reference repo, publishing, pushing, opening/merging a PR, or other remote-side mutation. + +## Planning review + +- First independent audit result: **BLOCKED**, not passed. It found an unresolved runtime target, missing exact node grounding, unsafe hook sequencing/tool selection, unrestricted scan commands, underspecified stale/semantic gates, and a false self-audit status. +- Second independent audit result: **NEEDS HUMAN**, not passed. The user has now supplied its requested explicit authorization for the endpoint change, live DevNet account/transaction creation, and application-level DevNet-key insertion into the existing keystore. Its technical findings are also revised below. +- Third independent audit result: **NEEDS HUMAN**, not passed. It did not receive the originating conversation's direct approval messages, so it correctly refused to authenticate the plan's self-transcription. The current re-audit must receive those human messages. Its standalone-version, exact-MASM-inventory, and runtime-evidence findings are incorporated below. +- Post-audit Rust-contract reference update: the user required the full `V16-RUST-CONTRACT-REFERENCE-MAP.md`, immutable compiler packaging/examples, and the complete sectioned `sdk/sdk/MIGRATION.md` review before migration. Those reads are complete and reconciled below; this materially revised plan has not yet received a new full audit. +- Earlier current-task Git-base update: the superseded 327-line task decided `origin/main` plus a separate cherry-pick of `80394cd`, and assigned the superseding intent of PRs #55/#56/#58. Phase 2, dependency/docs work, final gates, and commit reporting implement that still-current decision; no Git mutation has occurred during planning. +- Previous complete-plan audit result: **PASS for the superseded 327-line task revision**. It does not attest the current 353-line task's added embedded-WIT correction. +- Current 353-line task update: the task now explicitly requires fixing the three stale generated-WIT claims carried by `80394cd` and forbids `project-kind`. This revision also reconciles the task's stale assertion that the target manifest already lacks the WIT table: the planning checkout still contains it, so removal is an explicit migration edit with exact before/final gates. +- Current independent audit result: **PASS**. Its initial medium finding identified a broken Markdown-sensitive three-claim regex; the corrected literal scan matches exactly the three baseline claims, all five canonical positive checks match the reconciled reference exactly once, and the re-audit returned no findings. +- Current plan result: **IMPLEMENTATION AND VERIFICATION COMPLETE — LOCAL COMMIT APPROVED BUT ENVIRONMENT-BLOCKED**. The user supplied the required explicit checkpoint approval on 2026-08-27. The approved boundary is one signed, header-only local commit with subject `chore: migrate project template to Miden v0.16`; the managed environment denied `.git/index.lock` before staging anything. Pushing and all GitHub actions remain forbidden. +- First-audit change map: + 1. Runtime contradiction -> `Recorded human runtime decision`, Phase 4 exact DevNet probe, Phase 6C one-line endpoint edit, and Phase 8 real-runtime gate. + 2. Exact node/runtime pin -> `Authority and resolved source conflicts`, Phase 1 node tag/manifest/lock resolution, and exact Phase 4/8 status acceptance. + 3. Hook-before-source sequencing -> Phase 5A, which precedes all contract source edits and rejects every cargo-miden version except `0.10.0-rc.1`. + 4. Product-only searches -> `Product-only search contract`, Phase 3 baseline scan, Phase 7 hidden documentation scan, and Phase 9 gates; no `rg -u*` remains as an executable instruction. + 5. Concrete stale/semantic gates -> Phase 9 Gates 1-9 with patterns, exclusions, expected results, intentional exceptions, exhaustive semantic classification, exact packaging/source-boundary checks, and decided Git/PR-intent checks. + 6. Audit truthfulness -> document header and this section preserve the three earlier non-passing verdicts, scope the prior PASS to the superseded task revision, and record the current complete-plan re-audit only after its sole finding was fixed and the audit returned PASS. +- Second-audit change map: + 1. Explicit persistent-effect authorization -> `Recorded human runtime decision`, Phase 6C, Phase 8, and the Phase 9 material-side-effect ledger. + 2. Ambient-PATH-independent hook -> Phase 1's deterministic Cargo-home-derived isolated root and Phase 5A's direct absolute-binary resolution plus default/automatic-hook tests. + 3. Runtime evidence boundary -> `Recorded human runtime decision`, Phase 4's configured-classification/self-reported-version wording and genesis continuity check, Phase 8, and stop conditions. + 4. Complete before/final inventory -> exact `MIGRATION_INVENTORY_PATTERN` and hook/seven-skill commands, Phase 3, Phase 7, Phase 9 Gate 6, and the final before/after comparison. + 5. Focused stale gates -> Phase 9 Gate 1 covers compact `v15`; Gate 3 narrows removed `Library` API contexts and separately classifies allowed generic prose. + 6. Runtime docs and keystore effects -> Phase 7's Testnet classification/current-DevNet wording, Phase 8's explicit existing-keystore semantics, and Phase 9 Gate 7/side-effect ledger. +- Third-audit change map: + 1. Authentic human authorization -> `Recorded human runtime decision` assigns local record `RUNTIME-DEVNET-2026-08-24`, identifies the exact direct conversation message as the sole authority, records its scope/exclusions, distinguishes it from this plan's transcription, and requires both re-auditor and executor to receive the full approval context or stop. + 2. Standalone old compiler/VM versions -> shared `OLD_PIN_PATTERN`, its positive/negative self-check, `MIGRATION_INVENTORY_PATTERN`, Phase 3, and Phase 9 Gate 2 cover standalone `v0.9.x`/`0.9.x` and `v0.23`/`0.23.x` with zero final exceptions and no baseline/final regex drift. + 3. Reproducible empty MASM proof -> `Product-only search contract` defines the exact NUL-safe `find -print0` inventory, raw stdout/stderr/status capture, expected `0`/zero-byte/empty result, mixed-root `rg --files` prohibition, and appeared-file reachability stop; Phases 3, 7, 8, and 9 invoke it. + 4. Submission-only runtime evidence -> Phase 8 defines exact `SUBMISSION-ONLY PASS` criteria (two returned IDs, intervening sync, preserved output, exit `0`), attributes semantic/count proof to `counter_test`, and forbids claims about inclusion, confirmed consumption, finality, or runtime-observed counter state. +- Rust-contract reference update map: + 1. Full prerequisite reads -> header, `Authority and resolved source conflicts`, and Phase 4 record the 222-line reference-map read plus sub-agent review of all 859 Migration Guide lines by numbered range. + 2. Settled packaging copy -> `Expected file-level migration`, Phase 1 immutable commit/support compatibility gate, Phase 5B exact two-manifest/two-build-script/two-project-path changes, Phase 8 plain-Cargo verification, and Phase 9 Gate 8. + 3. Scaffold source trap -> resolved facts, Phase 4 immutable source/CI evidence, Phase 6 CI-maintained counter example, and Phase 9 drift report forbid copying scaffold `src/`/`integration/` or treating its build as evidence. + 4. Complete `## Unreleased` treatment -> Phase 4 classifies all 11 headings as applicable edit or audited N/A; the current task explicitly makes embedded component WIT applicable while the plan avoids unrelated forward-port changes. + 5. Tool/source incompatibility -> Phase 1 proves the required post-pin helper with the exact tagged binary in a private probe before product edits; Phase 5B/8 repeat it with absolute `CARGO_MIDEN`, an unset inherited cache, and checkout-private target; stop conditions forbid a moving compiler or manual cache bypass. + 6. Correct drift claim -> resolved facts and Phase 9 report the verified 18-of-31-common equality for this branch while preserving the narrower verified conclusion that both contract sources and all integration files are identical stale copies. +- Current-task Git-base/PR update map: + 1. Decided base -> `Current-state inventory` and Phase 2 fetch `origin/main`, re-prove disjoint topology, create `kbg/chore/v16-migration`, and cherry-pick `80394cd` with conflict/empty/signing stop gates. + 2. Separate authorship/history -> Phase 2 records `MAIN_BASE_COMMIT`, the distinct signed `SKILLS_BASE_COMMIT`, and `BASELINE_COMMIT`; Phase 10 forbids squashing/amending and reports skills/migration commits separately. + 3. PR #55 intent -> expected integration manifest, Phase 1 registry proof, Phase 5B direct `miden-protocol 0.16.0-rc.6`, Phase 9 Gate 9, and the direct-edge stop condition. + 4. PR #56/#58 intent -> Phase 7 updates the client skill directly to rc.2 and removes README's nonexistent `config.rs`; Gate 9 verifies both. + 5. Remote boundary -> Phase 9/final report marks #55/#56/#58 superseded but performs no PR close/comment/merge or other GitHub mutation. +- Current-task embedded-WIT update map: + 1. Honest current state -> `Authority and resolved source conflicts` and Phase 3 record that the planning checkout still contains the obsolete manifest table despite the task's stale “already absent” wording. + 2. Manifest adaptation -> `Expected file-level migration`, Phase 4 classification, and Phase 5B remove only the generated-WIT comment/table/key while preserving the ordinary path dependency. + 3. Exactly three skill fixes -> expected file map, Phase 3 before inventory, Phase 7 section-level edits, and Phase 9 Gate 8 name and verify the note-metadata sentence, “two places” block, and checklist item without replacing unrelated skill content. + 4. Metadata shape -> Phase 5B and Gate 8 require `[lib].kind`, forbid `project-kind`, and require no leftover `wit` key for the embedded-WIT dependency. +- [x] User approved implementation on 2026-08-25: “Execute the plan and start building finally....” + +Implementation result: _Phases 1-9 completed on 2026-08-26. The user performed the required separate skills cherry-pick, producing signed `SKILLS_BASE_COMMIT`/`BASELINE_COMMIT` `1d47c165550ffe3757fd935b49256bf0370f3ad1` above `MAIN_BASE_COMMIT` `56380d338950d8ca87c7d1bfbae7969c54684ab3`. The migration uses only immutable compiler pipeline commit `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, whose compiler/SDK/protocol/VM lines remain v0.16 (`0.10.0-rc.1`/`0.14.0-rc.1`/protocol rc.4/VM 0.29.1) and contain no v0.17/future-release substitution. Both contracts build with the isolated compiler, plain-Cargo build-support probes pass, the release workspace and unchanged binary build, and the sole unchanged-semantic `counter_test` passes one/zero/zero. The immediate DevNet probe accepted exact node/block-producer `0.16.0-rc.1`, connected status, stable genesis, and zero base fee. The live binary exited zero and returned publish/consume transaction IDs under the exact `SUBMISSION-ONLY PASS` evidence boundary. All product-only stale-reference, semantic-classification, MASM-empty-inventory, packaging, drift, Git-boundary, diff, and staging gates pass. No migration commit or push has been made; Phase 10 is awaiting the required user approval checkpoint._ + +## Implementation review + +- Toolchain: isolated `cargo-miden` and `midenc` `0.10.0-rc.1` resolve from exact source `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`; the preserved ambient `cargo-miden 0.9.0` is never selected by the hook or contract-build gates. +- Packaging and source: both contracts use exact Git-sourced guest/build-support `0.14.0-rc.1`, exact copied `build.rs` wrappers and `[lib] path`, embedded-WIT metadata removal, and exactly two counter `#[account_procedure]` markers. No compiler repository file or stale scaffold source/integration file was copied or edited. +- Host/API migration: the integration graph resolves the frozen client/store rc.2 and protocol/standards/testing rc.6 line without linking `cargo-miden`; every source edit except the explicitly authorized Testnet-to-DevNet endpoint is an API adaptation. +- Tests/builds: formatting, release workspace build, both contract builds, the unchanged binary build, test listing, and full release test all pass. `counter_test` remains the only test, is not ignored, and passes with its final count-`1` assertion byte-identical. +- Live runtime: exact DevNet node and block-producer `0.16.0-rc.1`, connected status, stable genesis, and zero base fee were observed immediately before execution. The binary returned both transaction IDs and exited zero. This is submission-only evidence; it does not prove commitment, finality, confirmed consumption, or a runtime-observed counter value. +- Persistent effects: the old v0.15 store was recoverably moved to `/private/tmp/project-template-v15-store-20260826.sqlite3`; a fresh v0.16 DevNet store was created/synced; application-level insertion of the new DevNet key into the existing ignored keystore occurred as explicitly authorized. No key material was inspected or logged. +- Final audit: every stale-reference/search gate, semantic symbol ledger, exact zero-MASM inventory, reference drift comparison, `git diff --check`, full-diff classification, and no-staged-secret/artifact check passes. Evidence is in the task output directory named at the top of this file. +- Checkpoint: explicit approval for one signed, header-only local commit with exact subject `chore: migrate project template to Miden v0.16` was received on 2026-08-27. The normal `git add` attempt failed with `Unable to create '.git/index.lock': Operation not permitted`; `git diff --cached --name-only` remains empty and `HEAD` remains `1d47c165550ffe3757fd935b49256bf0370f3ad1`. No push or PR action is authorized. The exact new commit hash and signature result must be added to the external final report and auditor handoff after the approved commit is created from an environment with normal `.git` write access. + +Lessons/corrections: _The durable correction rules are now recorded in `tasks/lessons.md`, as required by the repository instructions._ From 8de62fe27d0873ab560c891c6ab274e35ceab80e Mon Sep 17 00:00:00 2001 From: keinberger Date: Thu, 27 Aug 2026 16:14:55 +0300 Subject: [PATCH 03/12] fix: align v0.16 migration dependencies and guidance --- .claude/skills/rust-sdk-patterns/SKILL.md | 6 ++-- .claude/skills/rust-sdk-pitfalls/SKILL.md | 4 +-- contracts/counter-account/Cargo.lock | 4 +-- contracts/increment-note/Cargo.lock | 4 +-- tasks/todo.md | 40 +++++++++++++++-------- 5 files changed, 35 insertions(+), 23 deletions(-) diff --git a/.claude/skills/rust-sdk-patterns/SKILL.md b/.claude/skills/rust-sdk-patterns/SKILL.md index 99df962..128acd0 100644 --- a/.claude/skills/rust-sdk-patterns/SKILL.md +++ b/.claude/skills/rust-sdk-patterns/SKILL.md @@ -151,7 +151,7 @@ Example: package `counter-account` + `namespace = "miden:counter-account/counter `Asset` is a two-word value (`key` + `value`): -**Constructor**: `Asset::new(key, value)` builds an Asset from its vault key word and value word (the arguments are `impl Into`, so e.g. `Asset::new(key_word, value_word)` or from `[Felt; 4]`). +**Constructor**: `Asset::new(key, value)` builds an Asset from its asset ID word and value word (the arguments are `impl Into`, so e.g. `Asset::new(id_word, value_word)` or from `[Felt; 4]`). ```rust pub struct Asset { @@ -160,13 +160,13 @@ pub struct Asset { } ``` -For fungible assets, the amount lives in `asset.value[0]`. The asset class / vault identity lives in `asset.key`. +For fungible assets, the amount lives in `asset.value[0]`. The asset ID / vault identity word lives in `asset.key`; `AssetClass` is the discriminator between assets issued by one faucet. ```rust // Access fungible amount let amount = asset.value[0]; -// Keep the asset key if you need to persist or compare the asset class +// Keep the asset key if you need to persist or compare the asset ID / vault identity let asset_key = asset.key; // Add asset to account vault (only from component methods, not note scripts — see pitfall P11) diff --git a/.claude/skills/rust-sdk-pitfalls/SKILL.md b/.claude/skills/rust-sdk-pitfalls/SKILL.md index 783d443..5fd206d 100644 --- a/.claude/skills/rust-sdk-pitfalls/SKILL.md +++ b/.claude/skills/rust-sdk-pitfalls/SKILL.md @@ -162,13 +162,13 @@ pub struct Asset { // Reading the amount from a fungible asset let amount = asset.value[0]; -// Persisting or comparing the asset class +// Persisting or comparing the asset ID / vault identity let asset_key = asset.key; ``` Use `asset.key` and `asset.value` (or protocol helpers) rather than reconstructing an asset from raw `asset.inner[...]` offsets. -**SDK vs protocol `Asset`**: the two-word `{key, value}` form is the Rust SDK ABI type. At the protocol layer, `Asset` is an enum `{ Fungible, NonFungible }`, and the vault words are obtained via `to_key_word()` / `to_value_word()`. Reading the fungible amount from `value[0]` is correct on both sides. +**SDK vs protocol `Asset`**: the two-word `{key, value}` form is the Rust SDK ABI type, where `key` is the asset ID / vault identity word. At the protocol layer, `Asset` is an enum `{ Fungible, NonFungible }`, and the vault words are obtained via `to_id_word()` / `to_value_word()`. Reading the fungible amount from `value[0]` is correct on both sides. **Identity rename trap**: do not blindly rename protocol asset identifiers. In the current protocol, `AssetId` is the per-asset vault identity, while `AssetClass` distinguishes assets issued by the same faucet. Classify each use by meaning before changing it; compilation alone cannot detect a semantic swap. diff --git a/contracts/counter-account/Cargo.lock b/contracts/counter-account/Cargo.lock index 0911b23..f5ddaae 100644 --- a/contracts/counter-account/Cargo.lock +++ b/contracts/counter-account/Cargo.lock @@ -1457,9 +1457,9 @@ dependencies = [ [[package]] name = "miden-protocol-build-utils" -version = "0.16.0-rc.6" +version = "0.16.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f1145d0f5cb0efde2484af06587225b2a222fbf4811c4606d0d7f1bd3ff40dc" +checksum = "6a35f63db32f2e7ea9fc47abf17023aa509beadd77b6dffc4efff385eef4634b" dependencies = [ "fs-err", "miden-assembly", diff --git a/contracts/increment-note/Cargo.lock b/contracts/increment-note/Cargo.lock index 8d80d5d..1532946 100644 --- a/contracts/increment-note/Cargo.lock +++ b/contracts/increment-note/Cargo.lock @@ -1457,9 +1457,9 @@ dependencies = [ [[package]] name = "miden-protocol-build-utils" -version = "0.16.0-rc.6" +version = "0.16.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f1145d0f5cb0efde2484af06587225b2a222fbf4811c4606d0d7f1bd3ff40dc" +checksum = "6a35f63db32f2e7ea9fc47abf17023aa509beadd77b6dffc4efff385eef4634b" dependencies = [ "fs-err", "miden-assembly", diff --git a/tasks/todo.md b/tasks/todo.md index 2a20d2c..60e7e2a 100644 --- a/tasks/todo.md +++ b/tasks/todo.md @@ -8,9 +8,9 @@ Third independent audit status: **NEEDS HUMAN — it did not receive the direct Previous complete-plan audit status: **PASS for the superseded 327-line task revision; it does not attest this newer task revision** -Current independent audit status: **PASS — the complete current task and revised plan were audited read-only with no remaining findings** +Current independent audit status: **REVISE — the final implementation audit found a contract build-utils rc.6 leak, two asset-guidance errors, a non-fresh plain-Cargo reproducibility gate, and stale commit/drift evidence; the narrow correction is in progress** -Current execution status: **IN PROGRESS — Phases 1-9 are green and the user approved the signed local migration commit on 2026-08-27, but the managed environment denies `.git/index.lock`; Phase 10 is paused with nothing staged and no push or remote action** +Current execution status: **VERIFIED CORRECTION DIFF — signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8` exists; the final-audit correction is a fully verified, uncommitted working-tree diff awaiting creation of the authorized separate signed follow-up commit; the current environment cannot create `.git/index.lock`; no push or remote action is authorized** Task source: `/Users/philipp/Documents/Work/Miden-Coding/ai-tasks/v16-migration/tasks/TASK-project-template-v16-migration.md` (**current 353-line revision read in full; SHA-256 `c095f2c61ebb8a91eb0689fc77004176dc9de7333ba2bd3782bb1a1a1ff836ca`**) @@ -85,7 +85,7 @@ Resolved planning facts: - The version table's compiler verification command names the guest SDK tag incorrectly. Use `sdk/v0.14.0-rc.1`, not nonexistent `v0.14.0-rc.1`. Both `sdk/v0.14.0-rc.1` and compiler `v0.10.0-rc.1` resolve locally to `084877ef5feed979d0d732bb0ecbd9855a5022b8`. - The user-directed whole-project packaging reference was first reviewed at `62c4318...`; after the explicit no-v17 instruction, implementation freezes the earlier functional merge `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`. The build-support/compiler/template/SDK trees are byte-identical between those commits; only a repository-level `.cargo/config.toml` was added afterward. Copy the three packaging adaptations from `2a5ebf830...`; retain their exact rc.1 versions while sourcing both support and guest SDK from the authorized immutable pipeline because the registry support is absent and the registry guest payload fails the required embedded-WIT build. - The whole-project scaffold is packaging-migrated only. Its two contract source files and every common `integration/` file are byte-identical to this target's v0.15 code; it has zero `#[account_procedure]` and retains the old client/tool pins and APIs. The scaffold source/integration behavior is expressly excluded from the build-oriented template tests; separate integration/CI coverage checks only the two wrapper identities and presence of the support dependency. Never copy or use its `src/` or `integration/` as v0.16 precedent, and never treat its own green build as migration evidence. -- The reference map's broad “31 of 33 files identical” count does not describe this target branch after its six skill updates and documentation drift: the verified current comparison is 33 paths on each side, 31 common, but only 18 common files byte-identical. The load-bearing narrower claim—both contract sources and all integration files are byte-identical and stale—is verified. Report the measured scope rather than repeating the broad count. +- The reference map's broad “31 of 33 files identical” count describes neither comparison precisely. At `BASELINE_COMMIT`, scaffold and target each have 33 paths, 31 common, and 18 byte-identical common files; target-only paths are the two contract lockfiles and scaffold-only paths are the two build scripts. At audited migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8`, the scaffold has 33 paths and the target has 35 non-task paths, all 33 scaffold paths are common, 15 are byte-identical, and the two contract lockfiles are target-only. The load-bearing narrower baseline claim—both contract sources and all integration files were byte-identical stale copies—is verified; the final comparison must use the final counts rather than relabeling the baseline counts. - The current task explicitly applies the embedded-component-WIT migration in addition to the three settled packaging edits: remove increment-note's obsolete `[package.metadata.miden.dependencies]`/`wit` entry and keep only the ordinary path dependency. The planning checkout and `origin/main` still contain the obsolete table, so the task's statement that this file already has no WIT entry is a stale current-state description; the implementation must remove it as a required v0.16 API adaptation rather than assume it is absent. - The same current-task correction applies to exactly three stale claims in the cherry-picked `.claude/skills/rust-sdk-patterns/SKILL.md`: the note-metadata sentence, the “two places” cross-component block, and the validation-checklist item. Use `outputs/compiler-port/rust-sdk-patterns.RECONCILED.md` as a section-level reference, re-verify each replacement against the target and immutable compiler snapshot, and do not copy the whole file. Never introduce the nonexistent `project-kind` key; `[lib].kind` remains the project-kind mechanism. - `origin/next`'s 859-line `sdk/sdk/MIGRATION.md` was read in full by numbered sections. Its `## Unreleased` contains 11 headings; seven were added after frozen tag `sdk/v0.14.0-rc.1`. Use them as an audit inventory, not blanket edit instructions. The user's three packaging changes are an explicit exception to that pin rule; all other post-pin changes remain out unless frozen source/build independently requires them. @@ -117,7 +117,7 @@ Resolved planning facts: | `contracts/increment-note/Cargo.toml` | Copy the same exact guest/build-support packaging pins. | | `contracts/counter-account/build.rs` | Add the exact three-line upstream wrapper calling `miden_sdk_build_script_support::prepare_package_cache();`. | | `contracts/increment-note/build.rs` | Add the identical exact three-line wrapper. | -| Both contract lockfiles | Resolve the guest/compiler line independently; do not copy the compiler template locks. | +| Both contract lockfiles | Resolve the guest/compiler line independently; do not copy the compiler template locks. Match the frozen compiler closure exactly: `miden-protocol` and `miden-protocol-build-utils` `0.16.0-rc.4`, guest/build support from exact Git revision `2a5ebf830...`, and the complete VM family `0.29.1`. | | Both `miden-project.toml` files | Copy the settled `[lib] path = "src/lib.rs"` line; preserve kind, namespace, ordinary dependencies, and supported account types. In increment-note, also remove the obsolete generated-WIT comment, `[package.metadata.miden.dependencies]` table, and `wit` entry exactly as required by the current task; retain the plain `counter-account` path dependency. Never add `project-kind`. | | `contracts/counter-account/src/lib.rs` | Add `#[account_procedure]` to `get_count` and `increment_count` on the `#[component]` trait only, modelled on `compiler@2a5ebf830c910aa5f7bf53ee4df398915ab12f7a:examples/counter-contract/src/lib.rs:24,27`. Do not alter either implementation. | | `contracts/increment-note/src/lib.rs` | No expected source change: `Wallet` does not collide with generated `CounterContract`, both are same-module, and the note has no post-pin `get_entrypoint_root`/felt-representation conflict. Change only if frozen source/compiler output proves otherwise. | @@ -294,7 +294,7 @@ Run these exact commands before edits, before Phase 7 documentation work, and af 3. In the private probe only, replace the unpublished registry build-dependency string with `{ git = "https://github.com/0xMiden/compiler", rev = "2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" }`. Leave `MIDENC_PACKAGE_CACHE` unset, set `CARGO_MIDEN` to the absolute isolated binary, and set `CARGO_TARGET_DIR` to a target directory inside the private probe root. Run `cargo metadata --no-deps --format-version 1` and `cargo check --manifest-path /Cargo.toml --release -vv`, preserving stdout, stderr, status, resolved lock commit/source, nested command line, and cache paths. 4. Required result: status `0`; the helper launches the exact isolated binary; no ambient `0.9.x` tool is used; its nested dependency-staging build succeeds; a content-addressed `OUT_DIR/**/miden-packages` generation is published; and no `.staging-*` remains. A parse error for `dependencies`, `CompilerStopped`/unreachable error, missing support crate, stale-cache fallback, or nonzero exit blocks the migration before any hook/product edit. 5. Do not set `MIDENC_PACKAGE_CACHE` manually, change the revision, or use a branch name to bypass this test. If the exact pair fails, report the incompatibility and stop; do not select a later compiler commit. -- [x] Record the final selected lines: the explicitly authorized unreleased v16 compiler pipeline and guest SDK use exact source `2a5ebf830...`, guest version `0.14.0-rc.1`, protocol rc.4, and the compiler lock's VM `0.29.1` family; host integration uses protocol rc.6 and MAST package 0.29.1; exact DevNet node `0.16.0-rc.1` uses protocol rc.4. Do not describe or accept this as merely a generic “v0.16 line.” +- [x] Record the final selected lines: the explicitly authorized unreleased v16 compiler pipeline and guest SDK use exact source `2a5ebf830...`, guest version `0.14.0-rc.1`, protocol and protocol build-utils rc.4, and the compiler lock's VM `0.29.1` family; host integration uses protocol rc.6 and MAST package 0.29.1; exact DevNet node `0.16.0-rc.1` uses protocol rc.4. Do not describe or accept this as merely a generic “v0.16 line.” Exit only when every executable version is installed and printed, every registry/tag pin plus exact Git source revision and node/protocol pair is proven, the v0.15 tool remains callable for the baseline, and the temporary plain-Cargo capability probe passes with the exact source-aligned isolated `cargo-miden 0.10.0-rc.1`. A green version check without source provenance and a green capability probe is insufficient. @@ -478,7 +478,7 @@ Do not begin Phase 5B or any contract-source adaptation unless the hook itself p - no direct dependency drifted from the frozen pins; - integration resolves its direct `miden-protocol` exactly `0.16.0-rc.6` alongside client/store rc.2 and standards/testing rc.6; - both contract locks resolve `miden-sdk-build-script-support` version `0.14.0-rc.1` from exact Git source revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, never a branch or later commit; - - both contract locks resolve guest `miden` and its compiler SDK crates at version `0.14.0-rc.1` from the same exact Git revision, protocol exactly rc.4, and every compiler-side VM workspace crate exactly `0.29.1` as recorded by `COMPILER_PIPELINE_COMMIT:Cargo.lock`; no later `0.29.x` patch is accepted merely because the manifest range permits it; + - both contract locks resolve guest `miden` and its compiler SDK crates at version `0.14.0-rc.1` from the same exact Git revision, `miden-protocol` and `miden-protocol-build-utils` exactly rc.4, and every compiler-side VM workspace crate exactly `0.29.1` as recorded by `COMPILER_PIPELINE_COMMIT:Cargo.lock`; no later compatible protocol RC or `0.29.x` patch is accepted merely because a manifest range permits it; - `miden-tx-batch-prover` is gone in favor of `miden-tx-batch`; - no attempt was made to unify the accepted version lines. - [x] Repeat the plain-Cargo helper gate on the actual target packaging with an absolute launcher and checkout-private target. Leave inherited cache state unset so the helper must prove dependency staging; never rely on the ambient v0.9 executable or a shared/global target: @@ -767,7 +767,7 @@ Do not begin Phase 5B or any contract-source adaptation unless the hook itself p - [x] Compare read-only against both compiler reference boundaries and report them separately: - tagged `compiler@v0.10.0-rc.1` is the frozen release/API source and predates the build-support packaging; - `COMPILER_PACKAGING_COMMIT:extra/templates/project` supplies only the three explicitly required packaging adaptations; its contract source and integration common files are byte-identical stale v0.15 copies and contain zero procedure markers. Its source/integration behavior is not built by the template-test job; wrapper identity and support-dependency presence are separately integration-test/CI-covered; - - the current target/ref comparison is 33 paths each, 31 common, 18 common byte-identical—not the reference map's broad 31-of-33 count—because target skills/docs and packaging differ; + - label 33 paths each / 31 common / 18 byte-identical as the `BASELINE_COMMIT` comparison. For audited migration commit `6a0c467...`, report scaffold 33 paths, target 35 non-task paths, 33 common, 15 byte-identical, and the two target-only contract lockfiles; - the embedded-WIT deletion is a separate current-task-required API adaptation beyond the three verbatim packaging changes; report the stale planning-checkout state and the exact manifest/three-skill-claim removals rather than misclassifying it as one of the packaging copies; - standalone skill files retain the target's later v0.15 improvements before being ported, no scaffold source/integration file was copied, and no compiler-repository file was edited. - [x] Confirm no generated artifacts, SQLite database, keystore files, secrets, or temporary backups are staged. The authorized ignored keystore mutation may exist locally but must never be inspected, logged, or staged. @@ -776,9 +776,9 @@ Do not begin Phase 5B or any contract-source adaptation unless the hook itself p - [x] Present the green verification evidence and material-change audit, then obtain the required commit approval before committing. Approval received directly from the user on 2026-08-27: “yeah create a local commit. no push yet.” - [x] Preserve the Phase 2 cherry-picked skills commit as a separate, signed history entry immediately above `MAIN_BASE_COMMIT`; never squash, amend, re-author, or fold it into migration work. -- [ ] Create one cohesive signed migration commit containing only `BASELINE_COMMIT..HEAD` migration changes because the port and its documentation must move together. Approved subject: `chore: migrate project template to Miden v0.16`. The attempted normal staging operation failed before changing the index because the managed environment denied `.git/index.lock`. -- [ ] Use a header-only conventional commit, sign it, and add no body, co-author, or generated attribution. -- [ ] Verify the final history shape `origin/main -> separate cherry-picked skills commit -> signed migration commit(s)`, plus every new hash, exact subject, author/committer boundary, and signature. Never amend; any correction becomes a new/fixup commit. +- [x] Create one cohesive signed migration commit containing only `BASELINE_COMMIT..HEAD` migration changes because the port and its documentation must move together. The exact header-only commit is `6a0c467308e4b1fc60e1702beb9ae5a6747accd8` (`chore: migrate project template to Miden v0.16`). +- [x] Use a header-only conventional commit, sign it, and add no body, co-author, or generated attribution. `git verify-commit 6a0c467308e4b1fc60e1702beb9ae5a6747accd8` and `%G?/%GS` report a valid signature by `philipp.keinberger@gmail.com`. +- [x] Verify the migration history shape `origin/main -> separate signed skills commit -> signed migration commit`: `56380d338950d8ca87c7d1bfbae7969c54684ab3 -> 1d47c165550ffe3757fd935b49256bf0370f3ad1 -> 6a0c467308e4b1fc60e1702beb9ae5a6747accd8`. Never amend; the final-audit correction must be a new signed follow-up commit after a separate checkpoint. - [x] Do not push or open a PR. - [x] Return the task's required sections in this exact order: 1. Toolchain Resolution @@ -795,6 +795,17 @@ Do not begin Phase 5B or any contract-source adaptation unless the hook itself p In `Blockers or Follow-ups`, state that PRs #55, #56, and #58 are superseded by the completed v0.16 changes without performing any GitHub action. In `Local Branch and Commit`, report `MAIN_BASE_COMMIT`, source skills commit `80394cd`, resulting `SKILLS_BASE_COMMIT`, each migration commit, and signature status separately. +### Phase 11 — Final independent-audit corrections and signed follow-up + +- [x] Reconfirm clean starting branch `kbg/chore/v16-migration` at signed audited migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8`; re-read frozen compiler `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a` and protocol rc.6 asset source without fetching or changing any revision. +- [x] Independently downgrade only `miden-protocol-build-utils` rc.6 to rc.4 in each contract lock with the precise Cargo update. The diff for each lock is limited to that package's version and checksum and now matches the frozen compiler lock. +- [x] Correct only the two audited asset-guidance passages: guest `asset.key` is the asset ID / vault identity word, `AssetClass` distinguishes assets issued by one faucet, protocol `Asset` uses `to_id_word()`/`to_value_word()`, and fungible amount remains `value[0]`. Update the semantic ledger with exact protocol rc.6 citations. +- [x] Correct external final report, source-verification record, semantic audit, and build-test evidence. Distinguish baseline 33/31/18 from final pre-correction scaffold 33 / target 35 non-task / 33 common / 15 byte-identical / two target-only lockfiles. Record signed migration commit `6a0c467...` and remove the superseded `.git/index.lock` blocker claim. +- [x] Run each contract's canonical plain-Cargo check from its contract directory with absolute `CARGO_MIDEN`, inherited `MIDENC_PACKAGE_CACHE` unset, `--locked --offline --release -vv`, and a genuinely new checkout-private target directory. Record the full command/status, content-addressed package generations, and zero `.staging-*` residue without deleting an existing target. +- [x] Rerun formatting, workspace release build, both isolated compiler builds, unchanged binary build, test listing, full release test, lock/source parsing, focused stale asset search, unchanged-source checks, and `git diff --check`. Do not run the live binary or touch stores/keystore material. +- [x] Review the complete correction diff and require only both contract locks, two asset-guidance skills, this task record, and the named external evidence files. No application behavior, endpoint, auth, fee, funding, CLI, output, test, or transaction-flow change is present. +- [x] Present the verified correction diff and obtain a new explicit checkpoint before creating a signed follow-up commit. Approval received directly from the user on 2026-08-27: “yes i authrioize”. The authorized commit attempt could not create `.git/index.lock` because the current environment exposes `.git` read-only; no files were staged and no commit was created. Once the Git write is performed from an environment with repository-metadata access, deliver this corrected task record in one signed follow-up without amending `6a0c467...`, then add the resulting exact SHA/signature to the external report. Do not push or perform a GitHub action. + ## Stop conditions Stop and report concisely rather than improvising when any of these occurs: @@ -829,7 +840,7 @@ Stop and report concisely rather than improvising when any of these occurs: - Previous complete-plan audit result: **PASS for the superseded 327-line task revision**. It does not attest the current 353-line task's added embedded-WIT correction. - Current 353-line task update: the task now explicitly requires fixing the three stale generated-WIT claims carried by `80394cd` and forbids `project-kind`. This revision also reconciles the task's stale assertion that the target manifest already lacks the WIT table: the planning checkout still contains it, so removal is an explicit migration edit with exact before/final gates. - Current independent audit result: **PASS**. Its initial medium finding identified a broken Markdown-sensitive three-claim regex; the corrected literal scan matches exactly the three baseline claims, all five canonical positive checks match the reconciled reference exactly once, and the re-audit returned no findings. -- Current plan result: **IMPLEMENTATION AND VERIFICATION COMPLETE — LOCAL COMMIT APPROVED BUT ENVIRONMENT-BLOCKED**. The user supplied the required explicit checkpoint approval on 2026-08-27. The approved boundary is one signed, header-only local commit with subject `chore: migrate project template to Miden v0.16`; the managed environment denied `.git/index.lock` before staging anything. Pushing and all GitHub actions remain forbidden. +- Current plan result: **SIGNED MIGRATION COMMIT CREATED; FINAL-AUDIT CORRECTION VERIFIED AND COMMIT-AUTHORIZED**. Signed commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8` remains unchanged with the approved header and history. The narrow correction is fully verified and the separate human checkpoint is recorded above, but the authorized follow-up commit is blocked by this environment's read-only `.git` access. Pushing and all GitHub actions remain forbidden. - First-audit change map: 1. Runtime contradiction -> `Recorded human runtime decision`, Phase 4 exact DevNet probe, Phase 6C one-line endpoint edit, and Phase 8 real-runtime gate. 2. Exact node/runtime pin -> `Authority and resolved source conflicts`, Phase 1 node tag/manifest/lock resolution, and exact Phase 4/8 status acceptance. @@ -855,7 +866,7 @@ Stop and report concisely rather than improvising when any of these occurs: 3. Scaffold source trap -> resolved facts, Phase 4 immutable source/CI evidence, Phase 6 CI-maintained counter example, and Phase 9 drift report forbid copying scaffold `src/`/`integration/` or treating its build as evidence. 4. Complete `## Unreleased` treatment -> Phase 4 classifies all 11 headings as applicable edit or audited N/A; the current task explicitly makes embedded component WIT applicable while the plan avoids unrelated forward-port changes. 5. Tool/source incompatibility -> Phase 1 proves the required post-pin helper with the exact tagged binary in a private probe before product edits; Phase 5B/8 repeat it with absolute `CARGO_MIDEN`, an unset inherited cache, and checkout-private target; stop conditions forbid a moving compiler or manual cache bypass. - 6. Correct drift claim -> resolved facts and Phase 9 report the verified 18-of-31-common equality for this branch while preserving the narrower verified conclusion that both contract sources and all integration files are identical stale copies. + 6. Correct drift claim -> resolved facts and Phase 9 distinguish baseline 33/31/18 from the audited migration commit's scaffold 33, target 35 non-task, 33 common, 15 byte-identical, and two target-only lockfiles while preserving the narrower verified baseline conclusion that both contract sources and all integration files were identical stale copies. - Current-task Git-base/PR update map: 1. Decided base -> `Current-state inventory` and Phase 2 fetch `origin/main`, re-prove disjoint topology, create `kbg/chore/v16-migration`, and cherry-pick `80394cd` with conflict/empty/signing stop gates. 2. Separate authorship/history -> Phase 2 records `MAIN_BASE_COMMIT`, the distinct signed `SKILLS_BASE_COMMIT`, and `BASELINE_COMMIT`; Phase 10 forbids squashing/amending and reports skills/migration commits separately. @@ -869,7 +880,7 @@ Stop and report concisely rather than improvising when any of these occurs: 4. Metadata shape -> Phase 5B and Gate 8 require `[lib].kind`, forbid `project-kind`, and require no leftover `wit` key for the embedded-WIT dependency. - [x] User approved implementation on 2026-08-25: “Execute the plan and start building finally....” -Implementation result: _Phases 1-9 completed on 2026-08-26. The user performed the required separate skills cherry-pick, producing signed `SKILLS_BASE_COMMIT`/`BASELINE_COMMIT` `1d47c165550ffe3757fd935b49256bf0370f3ad1` above `MAIN_BASE_COMMIT` `56380d338950d8ca87c7d1bfbae7969c54684ab3`. The migration uses only immutable compiler pipeline commit `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, whose compiler/SDK/protocol/VM lines remain v0.16 (`0.10.0-rc.1`/`0.14.0-rc.1`/protocol rc.4/VM 0.29.1) and contain no v0.17/future-release substitution. Both contracts build with the isolated compiler, plain-Cargo build-support probes pass, the release workspace and unchanged binary build, and the sole unchanged-semantic `counter_test` passes one/zero/zero. The immediate DevNet probe accepted exact node/block-producer `0.16.0-rc.1`, connected status, stable genesis, and zero base fee. The live binary exited zero and returned publish/consume transaction IDs under the exact `SUBMISSION-ONLY PASS` evidence boundary. All product-only stale-reference, semantic-classification, MASM-empty-inventory, packaging, drift, Git-boundary, diff, and staging gates pass. No migration commit or push has been made; Phase 10 is awaiting the required user approval checkpoint._ +Implementation result: _Phases 1-10 produced signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8` on 2026-08-27 above signed skills baseline `1d47c165550ffe3757fd935b49256bf0370f3ad1` and main base `56380d338950d8ca87c7d1bfbae7969c54684ab3`. The final independent audit then found four narrow evidence/dependency-guidance defects without identifying an application-behavior change: both contract locks leaked `miden-protocol-build-utils` rc.6 instead of frozen compiler rc.4, two asset-guidance passages conflated the asset ID word with `AssetClass` and named removed `to_key_word()`, the canonical plain-Cargo check reused its target and lacked locked/offline reproducibility, and commit/drift evidence remained stale. The correction addresses only those findings and passed the complete fresh verification suite. The user authorized the separate signed follow-up, but this environment could not create `.git/index.lock`; the correction therefore remains an unstaged working-tree diff. No push has been made._ ## Implementation review @@ -880,6 +891,7 @@ Implementation result: _Phases 1-9 completed on 2026-08-26. The user performed t - Live runtime: exact DevNet node and block-producer `0.16.0-rc.1`, connected status, stable genesis, and zero base fee were observed immediately before execution. The binary returned both transaction IDs and exited zero. This is submission-only evidence; it does not prove commitment, finality, confirmed consumption, or a runtime-observed counter value. - Persistent effects: the old v0.15 store was recoverably moved to `/private/tmp/project-template-v15-store-20260826.sqlite3`; a fresh v0.16 DevNet store was created/synced; application-level insertion of the new DevNet key into the existing ignored keystore occurred as explicitly authorized. No key material was inspected or logged. - Final audit: every stale-reference/search gate, semantic symbol ledger, exact zero-MASM inventory, reference drift comparison, `git diff --check`, full-diff classification, and no-staged-secret/artifact check passes. Evidence is in the task output directory named at the top of this file. -- Checkpoint: explicit approval for one signed, header-only local commit with exact subject `chore: migrate project template to Miden v0.16` was received on 2026-08-27. The normal `git add` attempt failed with `Unable to create '.git/index.lock': Operation not permitted`; `git diff --cached --name-only` remains empty and `HEAD` remains `1d47c165550ffe3757fd935b49256bf0370f3ad1`. No push or PR action is authorized. The exact new commit hash and signature result must be added to the external final report and auditor handoff after the approved commit is created from an environment with normal `.git` write access. +- Final-audit correction: both contract closures now use compiler-side build utils rc.4; the two asset passages use `AssetId`/`AssetClass` and `to_id_word()` accurately; both fresh locked/offline plain-Cargo checks publish exactly one content-addressed generation and leave zero staging directories; formatting, builds, test listing, the one-test release suite, source-preservation checks, and the complete correction-diff review all pass. +- Checkpoint: the approved signed migration commit exists at `6a0c467308e4b1fc60e1702beb9ae5a6747accd8` with a valid signature. The user separately authorized the signed final-audit follow-up containing this corrected task record. The current environment cannot create `.git/index.lock`, so the authorized commit remains pending; its resulting exact SHA belongs in the external final report after normal commit creation from a Git-writable environment. No amend, push, PR, or other GitHub action is authorized. Lessons/corrections: _The durable correction rules are now recorded in `tasks/lessons.md`, as required by the repository instructions._ From 03068ada8ea2bf45fd32660810a4d46bef3d1d03 Mon Sep 17 00:00:00 2001 From: keinberger Date: Thu, 27 Aug 2026 17:22:13 +0300 Subject: [PATCH 04/12] docs: reconcile v0.16 migration evidence --- tasks/todo.md | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/tasks/todo.md b/tasks/todo.md index 60e7e2a..99d45ce 100644 --- a/tasks/todo.md +++ b/tasks/todo.md @@ -8,9 +8,9 @@ Third independent audit status: **NEEDS HUMAN — it did not receive the direct Previous complete-plan audit status: **PASS for the superseded 327-line task revision; it does not attest this newer task revision** -Current independent audit status: **REVISE — the final implementation audit found a contract build-utils rc.6 leak, two asset-guidance errors, a non-fresh plain-Cargo reproducibility gate, and stale commit/drift evidence; the narrow correction is in progress** +Current independent audit status: **REVISE — the final implementation audit found a contract build-utils rc.6 leak, two asset-guidance errors, a non-fresh plain-Cargo reproducibility gate, and stale commit/drift evidence; the dependency/guidance findings are fixed in signed correction commit `8de62fe27d0873ab560c891c6ab274e35ceab80e`, and this evidence-only reconciliation addresses the remaining record/reproducibility findings** -Current execution status: **VERIFIED CORRECTION DIFF — signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8` exists; the final-audit correction is a fully verified, uncommitted working-tree diff awaiting creation of the authorized separate signed follow-up commit; the current environment cannot create `.git/index.lock`; no push or remote action is authorized** +Current execution status: **FINAL EVIDENCE RECONCILIATION VERIFIED AND COMMIT-AUTHORIZED — the dependency/guidance correction is committed as signed HEAD `8de62fe27d0873ab560c891c6ab274e35ceab80e`, whose signed parent is migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8`; the fresh raw checks and complete verification suite pass; the authorized evidence-only commit attempt could not create `.git/index.lock` in the current environment, so this task record remains an unstaged tracked diff and has no resulting SHA; no push or remote action is authorized** Task source: `/Users/philipp/Documents/Work/Miden-Coding/ai-tasks/v16-migration/tasks/TASK-project-template-v16-migration.md` (**current 353-line revision read in full; SHA-256 `c095f2c61ebb8a91eb0689fc77004176dc9de7333ba2bd3782bb1a1a1ff836ca`**) @@ -804,7 +804,16 @@ Do not begin Phase 5B or any contract-source adaptation unless the hook itself p - [x] Run each contract's canonical plain-Cargo check from its contract directory with absolute `CARGO_MIDEN`, inherited `MIDENC_PACKAGE_CACHE` unset, `--locked --offline --release -vv`, and a genuinely new checkout-private target directory. Record the full command/status, content-addressed package generations, and zero `.staging-*` residue without deleting an existing target. - [x] Rerun formatting, workspace release build, both isolated compiler builds, unchanged binary build, test listing, full release test, lock/source parsing, focused stale asset search, unchanged-source checks, and `git diff --check`. Do not run the live binary or touch stores/keystore material. - [x] Review the complete correction diff and require only both contract locks, two asset-guidance skills, this task record, and the named external evidence files. No application behavior, endpoint, auth, fee, funding, CLI, output, test, or transaction-flow change is present. -- [x] Present the verified correction diff and obtain a new explicit checkpoint before creating a signed follow-up commit. Approval received directly from the user on 2026-08-27: “yes i authrioize”. The authorized commit attempt could not create `.git/index.lock` because the current environment exposes `.git` read-only; no files were staged and no commit was created. Once the Git write is performed from an environment with repository-metadata access, deliver this corrected task record in one signed follow-up without amending `6a0c467...`, then add the resulting exact SHA/signature to the external report. Do not push or perform a GitHub action. +- [x] Present the verified correction diff and obtain a new explicit checkpoint before creating a signed follow-up commit. Approval received directly from the user on 2026-08-27: “yes i authrioize”. The separately signed correction exists at `8de62fe27d0873ab560c891c6ab274e35ceab80e`, has parent `6a0c467308e4b1fc60e1702beb9ae5a6747accd8`, and changes exactly the two contract locks, two asset-guidance skills, and this task record. This supersedes the earlier environment-local failed attempt; no active Git blocker remains. No push or GitHub action occurred. + +### Phase 12 — Final evidence reconciliation + +- [x] Reconfirm a clean starting worktree on branch `kbg/chore/v16-migration` at signed correction commit `8de62fe27d0873ab560c891c6ab274e35ceab80e`; verify its valid signature, signed parent `6a0c467308e4b1fc60e1702beb9ae5a6747accd8`, and exact five-file correction scope. +- [x] Replace the unrelated old corrected plain-Cargo log with two complete fresh runs from the contract directories. Use new checkout-private targets, absolute `CARGO_MIDEN`, inherited `MIDENC_PACKAGE_CACHE` removed, and `--locked --offline --release -vv`; preserve merged stdout/stderr and the real command statuses. +- [x] Require each fresh run to exit zero, compile its primary contract, emit a completion line, resolve protocol/build-utils rc.4, VM 0.29.1, and Git SDK source `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, publish exactly one `gen-*` directory, and leave zero `.staging-*` directories. +- [x] Reconcile this task record, the external final report, final build/test evidence, and raw plain-Cargo evidence with the signed correction topology and fresh target paths. Historical failures must not appear as the final state. +- [x] Rerun formatting, workspace and contract builds, unchanged binary build, test listing, the full release test, evidence consistency searches, `git diff --check`, and final Git status. All commands pass; `counter_test` remains the only test and reports one passed, zero failed, zero ignored. The live binary was not run and no store/keystore was accessed. +- [x] Present the exact evidence-only tracked diff and verification results for a new explicit commit checkpoint. Approval received directly from the user on 2026-08-27: “yes authriize without push”. The authorized `git add`/signed-commit attempt could not create `.git/index.lock` because repository metadata is read-only in the current environment; nothing was staged and no evidence-only commit was created. The verified task-record diff still requires one signed child of `8de62fe...` from a Git-writable environment. Do not amend, push, or perform any GitHub action; record the resulting exact SHA/signature only in the external evidence after successful creation. ## Stop conditions @@ -840,7 +849,7 @@ Stop and report concisely rather than improvising when any of these occurs: - Previous complete-plan audit result: **PASS for the superseded 327-line task revision**. It does not attest the current 353-line task's added embedded-WIT correction. - Current 353-line task update: the task now explicitly requires fixing the three stale generated-WIT claims carried by `80394cd` and forbids `project-kind`. This revision also reconciles the task's stale assertion that the target manifest already lacks the WIT table: the planning checkout still contains it, so removal is an explicit migration edit with exact before/final gates. - Current independent audit result: **PASS**. Its initial medium finding identified a broken Markdown-sensitive three-claim regex; the corrected literal scan matches exactly the three baseline claims, all five canonical positive checks match the reconciled reference exactly once, and the re-audit returned no findings. -- Current plan result: **SIGNED MIGRATION COMMIT CREATED; FINAL-AUDIT CORRECTION VERIFIED AND COMMIT-AUTHORIZED**. Signed commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8` remains unchanged with the approved header and history. The narrow correction is fully verified and the separate human checkpoint is recorded above, but the authorized follow-up commit is blocked by this environment's read-only `.git` access. Pushing and all GitHub actions remain forbidden. +- Current plan result: **SIGNED MIGRATION AND CORRECTION COMMITS CREATED; FINAL EVIDENCE RECONCILIATION VERIFIED; EVIDENCE-ONLY COMMIT BLOCKED BY CURRENT GIT PERMISSIONS**. Signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8` remains unchanged; signed correction commit `8de62fe27d0873ab560c891c6ab274e35ceab80e` is its direct child and has the exact audited five-file scope. The evidence-only task record, fresh raw plain-Cargo runs, external evidence, builds, tests, searches, and Git checks are green. The authorized commit was not created, and no resulting SHA is claimed. Pushing and all GitHub actions remain forbidden. - First-audit change map: 1. Runtime contradiction -> `Recorded human runtime decision`, Phase 4 exact DevNet probe, Phase 6C one-line endpoint edit, and Phase 8 real-runtime gate. 2. Exact node/runtime pin -> `Authority and resolved source conflicts`, Phase 1 node tag/manifest/lock resolution, and exact Phase 4/8 status acceptance. @@ -880,7 +889,7 @@ Stop and report concisely rather than improvising when any of these occurs: 4. Metadata shape -> Phase 5B and Gate 8 require `[lib].kind`, forbid `project-kind`, and require no leftover `wit` key for the embedded-WIT dependency. - [x] User approved implementation on 2026-08-25: “Execute the plan and start building finally....” -Implementation result: _Phases 1-10 produced signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8` on 2026-08-27 above signed skills baseline `1d47c165550ffe3757fd935b49256bf0370f3ad1` and main base `56380d338950d8ca87c7d1bfbae7969c54684ab3`. The final independent audit then found four narrow evidence/dependency-guidance defects without identifying an application-behavior change: both contract locks leaked `miden-protocol-build-utils` rc.6 instead of frozen compiler rc.4, two asset-guidance passages conflated the asset ID word with `AssetClass` and named removed `to_key_word()`, the canonical plain-Cargo check reused its target and lacked locked/offline reproducibility, and commit/drift evidence remained stale. The correction addresses only those findings and passed the complete fresh verification suite. The user authorized the separate signed follow-up, but this environment could not create `.git/index.lock`; the correction therefore remains an unstaged working-tree diff. No push has been made._ +Implementation result: _Phases 1-10 produced signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8` on 2026-08-27 above signed skills baseline `1d47c165550ffe3757fd935b49256bf0370f3ad1` and main base `56380d338950d8ca87c7d1bfbae7969c54684ab3`. The final independent audit then found four narrow evidence/dependency-guidance defects without identifying an application-behavior change: both contract locks leaked `miden-protocol-build-utils` rc.6 instead of frozen compiler rc.4, two asset-guidance passages conflated the asset ID word with `AssetClass` and named removed `to_key_word()`, the canonical plain-Cargo check reused its target and lacked locked/offline reproducibility, and commit/drift evidence remained stale. Signed correction commit `8de62fe27d0873ab560c891c6ab274e35ceab80e` fixes the dependency/guidance findings without changing application behavior. Phase 12 replaces the unrelated raw probe, reconciles final evidence relative to that signed parent, and passes the complete build/test/evidence verification suite; its future evidence-only commit SHA is not asserted here. No push has been made._ ## Implementation review @@ -892,6 +901,6 @@ Implementation result: _Phases 1-10 produced signed migration commit `6a0c467308 - Persistent effects: the old v0.15 store was recoverably moved to `/private/tmp/project-template-v15-store-20260826.sqlite3`; a fresh v0.16 DevNet store was created/synced; application-level insertion of the new DevNet key into the existing ignored keystore occurred as explicitly authorized. No key material was inspected or logged. - Final audit: every stale-reference/search gate, semantic symbol ledger, exact zero-MASM inventory, reference drift comparison, `git diff --check`, full-diff classification, and no-staged-secret/artifact check passes. Evidence is in the task output directory named at the top of this file. - Final-audit correction: both contract closures now use compiler-side build utils rc.4; the two asset passages use `AssetId`/`AssetClass` and `to_id_word()` accurately; both fresh locked/offline plain-Cargo checks publish exactly one content-addressed generation and leave zero staging directories; formatting, builds, test listing, the one-test release suite, source-preservation checks, and the complete correction-diff review all pass. -- Checkpoint: the approved signed migration commit exists at `6a0c467308e4b1fc60e1702beb9ae5a6747accd8` with a valid signature. The user separately authorized the signed final-audit follow-up containing this corrected task record. The current environment cannot create `.git/index.lock`, so the authorized commit remains pending; its resulting exact SHA belongs in the external final report after normal commit creation from a Git-writable environment. No amend, push, PR, or other GitHub action is authorized. +- Checkpoint: signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8` and signed correction child `8de62fe27d0873ab560c891c6ab274e35ceab80e` both have valid signatures by `philipp.keinberger@gmail.com`. The user explicitly authorized a separate signed evidence-only child without push, but the current environment denied `.git/index.lock` creation; no commit or staging occurred. Its resulting exact SHA belongs only in the external evidence after successful creation from a Git-writable environment. No amend, push, PR, or other GitHub action is authorized. Lessons/corrections: _The durable correction rules are now recorded in `tasks/lessons.md`, as required by the repository instructions._ From 5ef123fe1332b87f82ff68f750be60461b6db284 Mon Sep 17 00:00:00 2001 From: keinberger Date: Thu, 27 Aug 2026 19:08:47 +0300 Subject: [PATCH 05/12] docs: correct v0.16 final commit evidence --- tasks/todo.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tasks/todo.md b/tasks/todo.md index 99d45ce..1645995 100644 --- a/tasks/todo.md +++ b/tasks/todo.md @@ -10,7 +10,7 @@ Previous complete-plan audit status: **PASS for the superseded 327-line task rev Current independent audit status: **REVISE — the final implementation audit found a contract build-utils rc.6 leak, two asset-guidance errors, a non-fresh plain-Cargo reproducibility gate, and stale commit/drift evidence; the dependency/guidance findings are fixed in signed correction commit `8de62fe27d0873ab560c891c6ab274e35ceab80e`, and this evidence-only reconciliation addresses the remaining record/reproducibility findings** -Current execution status: **FINAL EVIDENCE RECONCILIATION VERIFIED AND COMMIT-AUTHORIZED — the dependency/guidance correction is committed as signed HEAD `8de62fe27d0873ab560c891c6ab274e35ceab80e`, whose signed parent is migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8`; the fresh raw checks and complete verification suite pass; the authorized evidence-only commit attempt could not create `.git/index.lock` in the current environment, so this task record remains an unstaged tracked diff and has no resulting SHA; no push or remote action is authorized** +Current execution status: **FINAL COMMIT EVIDENCE CORRECTION IN PROGRESS — the final evidence reconciliation is committed as signed parent `03068ada8ea2bf45fd32660810a4d46bef3d1d03`, whose signed parent is correction commit `8de62fe27d0873ab560c891c6ab274e35ceab80e`; `03068ada...` changes only `tasks/todo.md` and supersedes the earlier environment-local commit failure; this self-relative task-record correction does not claim its future commit's SHA before creation; no push or remote action is authorized** Task source: `/Users/philipp/Documents/Work/Miden-Coding/ai-tasks/v16-migration/tasks/TASK-project-template-v16-migration.md` (**current 353-line revision read in full; SHA-256 `c095f2c61ebb8a91eb0689fc77004176dc9de7333ba2bd3782bb1a1a1ff836ca`**) @@ -813,7 +813,7 @@ Do not begin Phase 5B or any contract-source adaptation unless the hook itself p - [x] Require each fresh run to exit zero, compile its primary contract, emit a completion line, resolve protocol/build-utils rc.4, VM 0.29.1, and Git SDK source `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, publish exactly one `gen-*` directory, and leave zero `.staging-*` directories. - [x] Reconcile this task record, the external final report, final build/test evidence, and raw plain-Cargo evidence with the signed correction topology and fresh target paths. Historical failures must not appear as the final state. - [x] Rerun formatting, workspace and contract builds, unchanged binary build, test listing, the full release test, evidence consistency searches, `git diff --check`, and final Git status. All commands pass; `counter_test` remains the only test and reports one passed, zero failed, zero ignored. The live binary was not run and no store/keystore was accessed. -- [x] Present the exact evidence-only tracked diff and verification results for a new explicit commit checkpoint. Approval received directly from the user on 2026-08-27: “yes authriize without push”. The authorized `git add`/signed-commit attempt could not create `.git/index.lock` because repository metadata is read-only in the current environment; nothing was staged and no evidence-only commit was created. The verified task-record diff still requires one signed child of `8de62fe...` from a Git-writable environment. Do not amend, push, or perform any GitHub action; record the resulting exact SHA/signature only in the external evidence after successful creation. +- [x] Present the exact evidence-only tracked diff and verification results for a new explicit commit checkpoint. Approval received directly from the user on 2026-08-27: “yes authriize without push”. The first environment-local attempt could not create `.git/index.lock`, but that historical failure was superseded by signed evidence commit `03068ada8ea2bf45fd32660810a4d46bef3d1d03` with parent `8de62fe27d0873ab560c891c6ab274e35ceab80e`, exact subject `docs: reconcile v0.16 migration evidence`, and tracked scope only `tasks/todo.md`. No push or GitHub action occurred. ## Stop conditions @@ -849,7 +849,7 @@ Stop and report concisely rather than improvising when any of these occurs: - Previous complete-plan audit result: **PASS for the superseded 327-line task revision**. It does not attest the current 353-line task's added embedded-WIT correction. - Current 353-line task update: the task now explicitly requires fixing the three stale generated-WIT claims carried by `80394cd` and forbids `project-kind`. This revision also reconciles the task's stale assertion that the target manifest already lacks the WIT table: the planning checkout still contains it, so removal is an explicit migration edit with exact before/final gates. - Current independent audit result: **PASS**. Its initial medium finding identified a broken Markdown-sensitive three-claim regex; the corrected literal scan matches exactly the three baseline claims, all five canonical positive checks match the reconciled reference exactly once, and the re-audit returned no findings. -- Current plan result: **SIGNED MIGRATION AND CORRECTION COMMITS CREATED; FINAL EVIDENCE RECONCILIATION VERIFIED; EVIDENCE-ONLY COMMIT BLOCKED BY CURRENT GIT PERMISSIONS**. Signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8` remains unchanged; signed correction commit `8de62fe27d0873ab560c891c6ab274e35ceab80e` is its direct child and has the exact audited five-file scope. The evidence-only task record, fresh raw plain-Cargo runs, external evidence, builds, tests, searches, and Git checks are green. The authorized commit was not created, and no resulting SHA is claimed. Pushing and all GitHub actions remain forbidden. +- Current plan result: **SIGNED MIGRATION, CORRECTION, AND EVIDENCE COMMITS CREATED; FINAL COMMIT EVIDENCE CORRECTION IN PROGRESS**. Signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8`, signed correction commit `8de62fe27d0873ab560c891c6ab274e35ceab80e`, and signed evidence commit `03068ada8ea2bf45fd32660810a4d46bef3d1d03` form a direct-parent chain. The fresh raw plain-Cargo runs, external evidence, builds, tests, searches, and Git checks are green. This self-relative tracked correction records `03068ada...` as its parent and deliberately does not claim its own future SHA. Pushing and all GitHub actions remain forbidden. - First-audit change map: 1. Runtime contradiction -> `Recorded human runtime decision`, Phase 4 exact DevNet probe, Phase 6C one-line endpoint edit, and Phase 8 real-runtime gate. 2. Exact node/runtime pin -> `Authority and resolved source conflicts`, Phase 1 node tag/manifest/lock resolution, and exact Phase 4/8 status acceptance. @@ -889,7 +889,7 @@ Stop and report concisely rather than improvising when any of these occurs: 4. Metadata shape -> Phase 5B and Gate 8 require `[lib].kind`, forbid `project-kind`, and require no leftover `wit` key for the embedded-WIT dependency. - [x] User approved implementation on 2026-08-25: “Execute the plan and start building finally....” -Implementation result: _Phases 1-10 produced signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8` on 2026-08-27 above signed skills baseline `1d47c165550ffe3757fd935b49256bf0370f3ad1` and main base `56380d338950d8ca87c7d1bfbae7969c54684ab3`. The final independent audit then found four narrow evidence/dependency-guidance defects without identifying an application-behavior change: both contract locks leaked `miden-protocol-build-utils` rc.6 instead of frozen compiler rc.4, two asset-guidance passages conflated the asset ID word with `AssetClass` and named removed `to_key_word()`, the canonical plain-Cargo check reused its target and lacked locked/offline reproducibility, and commit/drift evidence remained stale. Signed correction commit `8de62fe27d0873ab560c891c6ab274e35ceab80e` fixes the dependency/guidance findings without changing application behavior. Phase 12 replaces the unrelated raw probe, reconciles final evidence relative to that signed parent, and passes the complete build/test/evidence verification suite; its future evidence-only commit SHA is not asserted here. No push has been made._ +Implementation result: _Phases 1-10 produced signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8` on 2026-08-27 above signed skills baseline `1d47c165550ffe3757fd935b49256bf0370f3ad1` and main base `56380d338950d8ca87c7d1bfbae7969c54684ab3`. The final independent audit then found four narrow evidence/dependency-guidance defects without identifying an application-behavior change: both contract locks leaked `miden-protocol-build-utils` rc.6 instead of frozen compiler rc.4, two asset-guidance passages conflated the asset ID word with `AssetClass` and named removed `to_key_word()`, the canonical plain-Cargo check reused its target and lacked locked/offline reproducibility, and commit/drift evidence remained stale. Signed correction commit `8de62fe27d0873ab560c891c6ab274e35ceab80e` fixes the dependency/guidance findings without changing application behavior. Signed evidence commit `03068ada8ea2bf45fd32660810a4d46bef3d1d03`, a one-file child of `8de62fe...`, records the verified Phase 12 reconciliation. The current self-relative correction updates only final commit evidence and does not assert its future SHA. No push has been made._ ## Implementation review @@ -901,6 +901,6 @@ Implementation result: _Phases 1-10 produced signed migration commit `6a0c467308 - Persistent effects: the old v0.15 store was recoverably moved to `/private/tmp/project-template-v15-store-20260826.sqlite3`; a fresh v0.16 DevNet store was created/synced; application-level insertion of the new DevNet key into the existing ignored keystore occurred as explicitly authorized. No key material was inspected or logged. - Final audit: every stale-reference/search gate, semantic symbol ledger, exact zero-MASM inventory, reference drift comparison, `git diff --check`, full-diff classification, and no-staged-secret/artifact check passes. Evidence is in the task output directory named at the top of this file. - Final-audit correction: both contract closures now use compiler-side build utils rc.4; the two asset passages use `AssetId`/`AssetClass` and `to_id_word()` accurately; both fresh locked/offline plain-Cargo checks publish exactly one content-addressed generation and leave zero staging directories; formatting, builds, test listing, the one-test release suite, source-preservation checks, and the complete correction-diff review all pass. -- Checkpoint: signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8` and signed correction child `8de62fe27d0873ab560c891c6ab274e35ceab80e` both have valid signatures by `philipp.keinberger@gmail.com`. The user explicitly authorized a separate signed evidence-only child without push, but the current environment denied `.git/index.lock` creation; no commit or staging occurred. Its resulting exact SHA belongs only in the external evidence after successful creation from a Git-writable environment. No amend, push, PR, or other GitHub action is authorized. +- Checkpoint: signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8`, signed correction child `8de62fe27d0873ab560c891c6ab274e35ceab80e`, and signed evidence child `03068ada8ea2bf45fd32660810a4d46bef3d1d03` all have valid signatures by `philipp.keinberger@gmail.com`; `03068ada...` changes only `tasks/todo.md`. The current final-state correction requires a new explicit checkpoint and one separate signed child of `03068ada...`; its exact resulting SHA belongs only in the external evidence after creation. No amend, push, PR, or other GitHub action is authorized. Lessons/corrections: _The durable correction rules are now recorded in `tasks/lessons.md`, as required by the repository instructions._ From fba39e7538c2c79449d1ee0bdbb5c9843ed14a8d Mon Sep 17 00:00:00 2001 From: keinberger Date: Sat, 29 Aug 2026 19:29:50 +0300 Subject: [PATCH 06/12] fix(skills): correct FPI argument-tupling guidance --- .claude/skills/rust-sdk-pitfalls/SKILL.md | 17 ++++++++++------- tasks/lessons.md | 2 ++ tasks/todo.md | 8 ++++---- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/.claude/skills/rust-sdk-pitfalls/SKILL.md b/.claude/skills/rust-sdk-pitfalls/SKILL.md index 5fd206d..fa66ff8 100644 --- a/.claude/skills/rust-sdk-pitfalls/SKILL.md +++ b/.claude/skills/rust-sdk-pitfalls/SKILL.md @@ -44,18 +44,21 @@ if balance.as_canonical_u64() > threshold.as_canonical_u64() { ... } **Rule**: For quantity/business logic, ALWAYS convert to `.as_canonical_u64()` before using comparison operators. -## P3: Direct Call Boundary Passes At Most 16 Stack Felts (4 Words) +## P3: Canonical ABI Tupling and the Direct FPI 16-Felt Budget -**Severity**: High — exceeding the 16-felt call boundary is a compile error +**Severity**: High — conflating argument tupling with the direct-call budget gives the wrong result -A direct cross-context / export / FPI call passes its parameters on the MASM operand stack, whose addressable window is 16 felts (4 Words, counting the canonical-ABI result pointer when present). Passing more than 16 flat felts across that boundary is a **compilation error**: after expanding 64-bit values and any result pointer, the flattened parameters must fit in 16 operand-stack felts. (Indirection for larger payloads via the advice provider is planned but not yet implemented, so today the limit is hard.) +Canonical ABI decides whether to tuple the **parameters** from their flat-value count and felt width. If either exceeds 16, it replaces the parameter list with one argument pointer. For an FPI import, an indirect-result pointer is appended only afterward. `plan_fpi_call` then derives the argument-pointer path from the parameter **count** and includes any result pointer in the direct-call felt total. Consequently, parameter-width-only tupling can still be diagnosed as an over-budget direct FPI call, and exactly 16 direct parameter felts plus an indirect-result pointer form a rejected 17-felt call. More than 16 flat parameters use the supported argument-pointer path rather than failing merely because the direct stack window is 16; the FPI executor's separate input/output caps still apply. + +See frozen compiler sources `frontend/wasm/src/component/flat.rs:261-288` and `frontend/wasm/src/component/lower_imports.rs:330-351` at tag `sdk/v0.14.0-rc.1`. ```rust -// COMPILE ERROR — flattens past 16 felts -fn process(a: Word, b: Word, c: Word, d: Word, e: Word) { ... } +// REJECTED for an FPI import: 16 direct parameter felts plus the +// indirect result pointer make a 17-felt direct call. +fn process(a0: Felt, /* ... */, a15: Felt) -> Word { ... } -// OK — keep signatures small, or pass aggregates by reference so each lowers to a pointer -fn process(a: &Word, b: &Word, c: &Word, d: &Word, e: &Word) { ... } +// More than 16 flat parameters trigger canonical-ABI argument tupling; +// they do not fail merely because the direct stack window is 16. ``` ## P4: Storage API Is Typed diff --git a/tasks/lessons.md b/tasks/lessons.md index 3c0d5a9..633a79e 100644 --- a/tasks/lessons.md +++ b/tasks/lessons.md @@ -7,3 +7,5 @@ - When a sandbox forces a standalone Cargo probe under a workspace, isolate it with a probe-only empty `[workspace]` table and run Cargo from the probe root so its `.cargo/config.toml` selects the intended guest target. - Treat a compiler executable pin and a host library dependency as different boundaries. Before promising that two prerelease lines can coexist, resolve the full host graph: Cargo will not duplicate semver-compatible prereleases from the same source when exact requirements conflict. Keep the compiler outside the host graph and pass only its versioned artifact across the process boundary when the frozen compiler and client intentionally use different protocol RCs. - A printed prerelease version is not proof that registry bits equal an unreleased same-version pipeline. When a post-tag pipeline adds generated metadata such as embedded WIT without bumping the package version, test the registry guest against the required cross-package flow; if it fails, source both tool and guest SDK from the one authorized immutable commit and freeze transitive VM patches to that commit's lock rather than accepting later compatible releases. +- Canonical-ABI argument tupling and the direct FPI stack budget are separate decisions. Parameter count/width determines the argument tuple before an indirect-result pointer is appended; the later pointer can turn 16 direct parameter felts into a rejected 17-felt call. +- When a user cites a cross-repository audit handoff while discussing GitHub workflow, resolve the cited repository and requested sequencing before changing remotes or publishing. Do not infer that an unrelated PR handoff authorizes creating a fork. diff --git a/tasks/todo.md b/tasks/todo.md index 1645995..27908ba 100644 --- a/tasks/todo.md +++ b/tasks/todo.md @@ -10,7 +10,7 @@ Previous complete-plan audit status: **PASS for the superseded 327-line task rev Current independent audit status: **REVISE — the final implementation audit found a contract build-utils rc.6 leak, two asset-guidance errors, a non-fresh plain-Cargo reproducibility gate, and stale commit/drift evidence; the dependency/guidance findings are fixed in signed correction commit `8de62fe27d0873ab560c891c6ab274e35ceab80e`, and this evidence-only reconciliation addresses the remaining record/reproducibility findings** -Current execution status: **FINAL COMMIT EVIDENCE CORRECTION IN PROGRESS — the final evidence reconciliation is committed as signed parent `03068ada8ea2bf45fd32660810a4d46bef3d1d03`, whose signed parent is correction commit `8de62fe27d0873ab560c891c6ab274e35ceab80e`; `03068ada...` changes only `tasks/todo.md` and supersedes the earlier environment-local commit failure; this self-relative task-record correction does not claim its future commit's SHA before creation; no push or remote action is authorized** +Current execution status: **FINAL EVIDENCE RECONCILED; PR-READINESS CORRECTION VERIFIED — signed final commit-evidence correction `5ef123fe1332b87f82ff68f750be60461b6db284` is a one-file child of signed evidence commit `03068ada8ea2bf45fd32660810a4d46bef3d1d03`; the signed commit containing this task record corrects the independently re-audited P3/FPI argument-tupling guidance and records its direct `5ef123fe...` parent without claiming its own SHA; the user explicitly authorized pushing this branch directly to `0xMiden/project-template` and opening a draft PR, but no merge is authorized** Task source: `/Users/philipp/Documents/Work/Miden-Coding/ai-tasks/v16-migration/tasks/TASK-project-template-v16-migration.md` (**current 353-line revision read in full; SHA-256 `c095f2c61ebb8a91eb0689fc77004176dc9de7333ba2bd3782bb1a1a1ff836ca`**) @@ -849,7 +849,7 @@ Stop and report concisely rather than improvising when any of these occurs: - Previous complete-plan audit result: **PASS for the superseded 327-line task revision**. It does not attest the current 353-line task's added embedded-WIT correction. - Current 353-line task update: the task now explicitly requires fixing the three stale generated-WIT claims carried by `80394cd` and forbids `project-kind`. This revision also reconciles the task's stale assertion that the target manifest already lacks the WIT table: the planning checkout still contains it, so removal is an explicit migration edit with exact before/final gates. - Current independent audit result: **PASS**. Its initial medium finding identified a broken Markdown-sensitive three-claim regex; the corrected literal scan matches exactly the three baseline claims, all five canonical positive checks match the reconciled reference exactly once, and the re-audit returned no findings. -- Current plan result: **SIGNED MIGRATION, CORRECTION, AND EVIDENCE COMMITS CREATED; FINAL COMMIT EVIDENCE CORRECTION IN PROGRESS**. Signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8`, signed correction commit `8de62fe27d0873ab560c891c6ab274e35ceab80e`, and signed evidence commit `03068ada8ea2bf45fd32660810a4d46bef3d1d03` form a direct-parent chain. The fresh raw plain-Cargo runs, external evidence, builds, tests, searches, and Git checks are green. This self-relative tracked correction records `03068ada...` as its parent and deliberately does not claim its own future SHA. Pushing and all GitHub actions remain forbidden. +- Current plan result: **SIGNED MIGRATION AND EVIDENCE CHAIN COMPLETE; PR-READINESS P3/FPI CORRECTION VERIFIED**. Signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8`, signed dependency/guidance correction `8de62fe27d0873ab560c891c6ab274e35ceab80e`, signed evidence commit `03068ada8ea2bf45fd32660810a4d46bef3d1d03`, and signed final commit-evidence correction `5ef123fe1332b87f82ff68f750be60461b6db284` form a direct-parent chain. The fresh raw plain-Cargo runs, external evidence, builds, tests, searches, and Git checks are green. The signed commit containing this task record is a direct child of `5ef123fe...` and corrects only the pre-PR P3/FPI guidance plus its task/lesson record; its self SHA is recorded externally after creation. Direct branch push and draft-PR creation are authorized; merge remains forbidden. - First-audit change map: 1. Runtime contradiction -> `Recorded human runtime decision`, Phase 4 exact DevNet probe, Phase 6C one-line endpoint edit, and Phase 8 real-runtime gate. 2. Exact node/runtime pin -> `Authority and resolved source conflicts`, Phase 1 node tag/manifest/lock resolution, and exact Phase 4/8 status acceptance. @@ -889,7 +889,7 @@ Stop and report concisely rather than improvising when any of these occurs: 4. Metadata shape -> Phase 5B and Gate 8 require `[lib].kind`, forbid `project-kind`, and require no leftover `wit` key for the embedded-WIT dependency. - [x] User approved implementation on 2026-08-25: “Execute the plan and start building finally....” -Implementation result: _Phases 1-10 produced signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8` on 2026-08-27 above signed skills baseline `1d47c165550ffe3757fd935b49256bf0370f3ad1` and main base `56380d338950d8ca87c7d1bfbae7969c54684ab3`. The final independent audit then found four narrow evidence/dependency-guidance defects without identifying an application-behavior change: both contract locks leaked `miden-protocol-build-utils` rc.6 instead of frozen compiler rc.4, two asset-guidance passages conflated the asset ID word with `AssetClass` and named removed `to_key_word()`, the canonical plain-Cargo check reused its target and lacked locked/offline reproducibility, and commit/drift evidence remained stale. Signed correction commit `8de62fe27d0873ab560c891c6ab274e35ceab80e` fixes the dependency/guidance findings without changing application behavior. Signed evidence commit `03068ada8ea2bf45fd32660810a4d46bef3d1d03`, a one-file child of `8de62fe...`, records the verified Phase 12 reconciliation. The current self-relative correction updates only final commit evidence and does not assert its future SHA. No push has been made._ +Implementation result: _Phases 1-10 produced signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8` on 2026-08-27 above signed skills baseline `1d47c165550ffe3757fd935b49256bf0370f3ad1` and main base `56380d338950d8ca87c7d1bfbae7969c54684ab3`. The final independent audit then found four narrow evidence/dependency-guidance defects without identifying an application-behavior change: both contract locks leaked `miden-protocol-build-utils` rc.6 instead of frozen compiler rc.4, two asset-guidance passages conflated the asset ID word with `AssetClass` and named removed `to_key_word()`, the canonical plain-Cargo check reused its target and lacked locked/offline reproducibility, and commit/drift evidence remained stale. Signed correction commit `8de62fe27d0873ab560c891c6ab274e35ceab80e` fixes the dependency/guidance findings without changing application behavior. Signed evidence commits `03068ada8ea2bf45fd32660810a4d46bef3d1d03` and `5ef123fe1332b87f82ff68f750be60461b6db284` record the verified Phase 12 and final commit-evidence reconciliation. A final pre-PR re-audit against compiler tag `sdk/v0.14.0-rc.1` identified and verified the narrow P3/FPI correction carried by the signed commit containing this task record. No product behavior changed._ ## Implementation review @@ -901,6 +901,6 @@ Implementation result: _Phases 1-10 produced signed migration commit `6a0c467308 - Persistent effects: the old v0.15 store was recoverably moved to `/private/tmp/project-template-v15-store-20260826.sqlite3`; a fresh v0.16 DevNet store was created/synced; application-level insertion of the new DevNet key into the existing ignored keystore occurred as explicitly authorized. No key material was inspected or logged. - Final audit: every stale-reference/search gate, semantic symbol ledger, exact zero-MASM inventory, reference drift comparison, `git diff --check`, full-diff classification, and no-staged-secret/artifact check passes. Evidence is in the task output directory named at the top of this file. - Final-audit correction: both contract closures now use compiler-side build utils rc.4; the two asset passages use `AssetId`/`AssetClass` and `to_id_word()` accurately; both fresh locked/offline plain-Cargo checks publish exactly one content-addressed generation and leave zero staging directories; formatting, builds, test listing, the one-test release suite, source-preservation checks, and the complete correction-diff review all pass. -- Checkpoint: signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8`, signed correction child `8de62fe27d0873ab560c891c6ab274e35ceab80e`, and signed evidence child `03068ada8ea2bf45fd32660810a4d46bef3d1d03` all have valid signatures by `philipp.keinberger@gmail.com`; `03068ada...` changes only `tasks/todo.md`. The current final-state correction requires a new explicit checkpoint and one separate signed child of `03068ada...`; its exact resulting SHA belongs only in the external evidence after creation. No amend, push, PR, or other GitHub action is authorized. +- Checkpoint: signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8`, signed dependency/guidance correction `8de62fe27d0873ab560c891c6ab274e35ceab80e`, signed evidence reconciliation `03068ada8ea2bf45fd32660810a4d46bef3d1d03`, and signed final commit-evidence correction `5ef123fe1332b87f82ff68f750be60461b6db284` all have valid signatures by `philipp.keinberger@gmail.com`. The signed commit containing this task record is a separate direct child of `5ef123fe...` and carries the verified P3/FPI skill correction without amending history. The user authorized a direct push and draft PR on `0xMiden/project-template`; no fork, merge, or unrelated GitHub action is authorized. Lessons/corrections: _The durable correction rules are now recorded in `tasks/lessons.md`, as required by the repository instructions._ From 9002f33e1d799d737d4dd771961009b9e1f0cceb Mon Sep 17 00:00:00 2001 From: keinberger Date: Mon, 31 Aug 2026 19:13:21 +0300 Subject: [PATCH 07/12] chore: extract skills and task records from v0.16 migration --- .claude/skills/local-node-validation/SKILL.md | 122 +-- .claude/skills/miden-client-cli/SKILL.md | 52 +- .claude/skills/miden-concepts/SKILL.md | 24 +- .claude/skills/rust-sdk-patterns/SKILL.md | 232 ++--- .claude/skills/rust-sdk-pitfalls/SKILL.md | 176 ++-- .claude/skills/rust-sdk-source-guide/SKILL.md | 102 +- .../skills/rust-sdk-testing-patterns/SKILL.md | 231 ++--- tasks/lessons.md | 11 - tasks/todo.md | 906 ------------------ 9 files changed, 301 insertions(+), 1555 deletions(-) delete mode 100644 tasks/lessons.md delete mode 100644 tasks/todo.md diff --git a/.claude/skills/local-node-validation/SKILL.md b/.claude/skills/local-node-validation/SKILL.md index 834cb62..fda6cfa 100644 --- a/.claude/skills/local-node-validation/SKILL.md +++ b/.claude/skills/local-node-validation/SKILL.md @@ -11,76 +11,52 @@ Validates that contracts working in MockChain also work against a real Miden nod MockChain simplifies execution in ways that hide real-world failures: -1. **No automatic block production** -- MockChain requires explicit `prove_next_block()`. A live node produces blocks on the sequencer's configured cadence. -2. **No network transport** -- MockChain does not simulate the network transaction builder (ntx-builder) that handles network notes. +1. **No automatic block production** -- MockChain requires explicit `prove_next_block()`. A live node produces blocks on its own schedule. +2. **No network transport** -- MockChain does not simulate the network transaction builder that handles network notes. 3. **No RPC latency or timeouts** -- MockChain executes locally and instantly. Live nodes have gRPC round-trips with configurable timeouts. -4. **No live compatibility enforcement** -- MockChain skips the RPC Accept-header check by which a live node rejects incompatible client requests. +4. **No version/genesis validation** -- MockChain skips the `Accept` header version check that live nodes enforce. 5. **Account update block numbers not tracked** -- MockChain returns chain tip instead of actual update block number. 6. **No mempool or batching** -- MockChain does not simulate transaction queuing, batch formation, or block inclusion delays. -7. **`NoteTag(0)` notes are not delivered by default subscriptions** -- live nodes filter `SyncNotes` responses by the tag list each client has subscribed to. `NoteTag::new(0)` has all-zero routing bits, so the default account-derived subscription that `add_account` registers (`NoteTagRecord::with_account_source(NoteTag::with_account_target(id), id)`) does not match it. Such notes still exist on-chain and remain queryable, but a client only receives them during sync if it explicitly tracks tag 0 via `Client::add_note_tag(...)`. MockChain bypasses sync filtering and surfaces these notes anyway, hiding the gap until live validation. Prefer `NoteTag::with_account_target(account_id)`, a use-case tag constructor, or an explicit `add_note_tag` subscription when notes must reach the recipient via sync. +7. **Genesis hash is cached in the client store** -- after the first sync, the client persists the network's genesis commitment in its SQLite store (default path `store.sqlite3` per `integration/src/helpers.rs`; `local-store.sqlite3` for the local-validation variant introduced in Step 2) and ships it on every Accept header. Switching networks (local node to testnet, or vice versa) without wiping the active store fails with `accept header validation failed`. +8. **`NoteTag(0)` notes are not delivered by default subscriptions** -- live nodes filter `SyncNotes` responses by the tag list each client has subscribed to. `NoteTag::new(0)` has all-zero routing bits, so the default account-derived subscription that `add_account` registers (`NoteTagRecord::with_account_source(NoteTag::with_account_target(id), id)`) does not match it. Such notes still exist on-chain and remain queryable, but a client only receives them during sync if it explicitly tracks tag 0 via `Client::add_note_tag(...)`. MockChain bypasses sync filtering and surfaces these notes anyway, hiding the gap until live validation. Prefer `NoteTag::with_account_target(account_id)`, a use-case tag constructor, or an explicit `add_note_tag` subscription when notes must reach the recipient via sync. ## Prerequisites - [ ] MockChain integration tests pass: `cargo test -p integration --release` -- [ ] A Miden node available locally. The node is **not** a single binary -- it is composed of standalone executables (validator, sequencer, ntx-builder, transaction prover). The client's own test infra installs the full set: `miden-validator`, `miden-node`, `miden-ntx-builder`, `miden-remote-prover` (see `scripts/start-test-node.sh` in the `miden-client` repo). Install them from exact source, or follow the 0xMiden/node quickstart for the authoritative install flow. This project pins `miden-client` and its SQLite store to `0.16.0-rc.2` with protocol/standards/testing `0.16.0-rc.6`; its accepted real-node target is exactly `miden-node v0.16.0-rc.1`, whose source manifest pins protocol `0.16.0-rc.4`. Treat that correspondence as the source-derived validation pairing whose runtime status must still be verified before use, not as equality between the two protocol crate versions and not as permission to accept an arbitrary v0.16 node. -- [ ] Working integration binary exists in `integration/src/bin/` (the current `increment_count.rs` targets DevNet; it is the behavior reference when creating a separate localhost validator) - -> The local-node launch CLI lives in the 0xMiden/node repo, not in `miden-client`. The commands below are the topology the client's `scripts/start-test-node.sh` drives; confirm exact flags against your installed node's `--help` for the version you run. +- [ ] `miden-node` installed and version-matched with the client. Check the `miden-client` version in `integration/Cargo.toml`; the node binary must be on the same minor release. `cargo install miden-node --locked` may pin an older published crate; if so, install from source: `cargo install miden-node --locked --git https://github.com/0xMiden/miden-node --tag v`. `midenup` manages matched toolchains. +- [ ] Working integration binary exists in `integration/src/bin/` ## Step 1: Clean State and Start Local Node -**Every node session must start from clean, task-specific state.** Stale store files and keystore directories cause conflicts, deserialization errors, and misleading test results. Choose fresh paths before starting; move prior state to a recoverable private backup when it must be displaced. Node and client artifacts do not round-trip across protocol versions, so a fresh store is required after any version change. - -The simplest path is the client's bundled helper script, which installs the node binaries (pinned to your `Cargo.lock`), generates genesis, bootstraps each component, and starts the split topology for you: +**Every node session must start from clean state.** Stale store files and keystore directories cause conflicts, deserialization errors, and misleading test results. Always wipe before starting. ```bash -# From a checkout of the miden-client repo pinned to your client version: -./scripts/start-test-node.sh # foreground, streams logs; Ctrl+C stops -# or -./scripts/start-test-node.sh --background # returns once RPC is ready (used by CI) +# 1. Wipe all state from previous runs +rm -rf local-node-data/ local-keystore/ local-store.sqlite3 + +# 2. Bootstrap fresh node +mkdir -p local-node-data +miden-node bundled bootstrap \ + --data-directory local-node-data \ + --accounts-directory . + +# 3. Start node (keep running in separate terminal) +miden-node bundled start \ + --data-directory local-node-data \ + --rpc.url http://0.0.0.0:57291 ``` -This brings up the four-component topology and exposes the RPC on `127.0.0.1:57291` (the client default, `MIDEN_NODE_PORT`). - -If you run the node binaries directly instead of via the script, the shape is below. Treat it as a reference skeleton, not a copy-paste recipe: it omits details the script handles for you (generating the genesis config, supplying the validator's threshold storage-key material, and providing the shared network-tx auth header that the sequencer and ntx-builder must agree on or the sequencer rejects the ntx-builder's transactions). Verify every subcommand and flag against `--help` for your node version, or just use the script. - -```bash -# 1. Generate the genesis block, then bootstrap each component from it. -# The helper script first generates /genesis-config and required account files. -miden-validator genesis --genesis-block-directory /genesis \ - --accounts-directory /accounts --config /genesis-config/genesis.toml -miden-validator bootstrap --data-directory /validator --genesis /genesis/genesis.dat -miden-node bootstrap --data-directory /node --genesis /genesis/genesis.dat -miden-ntx-builder bootstrap --data-directory /ntx-builder --genesis /genesis/genesis.dat - -# 2. Start the components (validator, then sequencer with the RPC, prover, ntx-builder). -# The sequencer and ntx-builder additionally need a matching network-tx auth header -# (--rpc.network-tx-auth-header-value / --rpc.auth-header-value in the script); see the script. -miden-validator start --listen 127.0.0.1:50101 --data-directory /validator -miden-node sequencer --rpc.listen 127.0.0.1:57291 --data-directory /node \ - --validator.url http://127.0.0.1:50101 --ntx-builder.url http://127.0.0.1:50301 \ - --block.interval 3s --batch.interval 1s -miden-remote-prover --kind=transaction --port=50051 -miden-ntx-builder start --listen 127.0.0.1:50301 --rpc.url http://127.0.0.1:57291 \ - --tx-prover.url http://127.0.0.1:50051 --data-directory /ntx-builder -``` - -**This clean-start sequence is mandatory every time.** Do not open prior-session state with the new node; use fresh paths or archive the prior state first. +**This clean-start sequence is mandatory every time.** Do not attempt to reuse state from a previous session. ## Step 2: Adapt helpers.rs for Localhost -In `integration/src/helpers.rs`, add a `setup_local_client()` alongside the existing `setup_client()`. - -`.sqlite_store(..)` is **not** an inherent `ClientBuilder` method -- it comes from an extension trait in the `miden-client-sqlite-store` crate. It must be in scope or the call fails to compile (method not found). `helpers.rs` already imports it at the top of the file: - -```rust -use miden_client_sqlite_store::ClientBuilderSqliteExt; // required for .sqlite_store(..) -``` +In `integration/src/helpers.rs`, add a `setup_local_client()` alongside the existing `setup_client()`: ```rust pub async fn setup_local_client() -> Result { - let endpoint = Endpoint::localhost(); + let endpoint = Endpoint::new("http".into(), "localhost".into(), Some(57291)); let timeout_ms = 10_000; + let rpc_client = Arc::new(GrpcClient::new(&endpoint, timeout_ms)); let keystore_path = std::path::PathBuf::from("../local-keystore"); let keystore = Arc::new(FilesystemKeyStore::new(keystore_path) @@ -89,9 +65,10 @@ pub async fn setup_local_client() -> Result { let store_path = std::path::PathBuf::from("../local-store.sqlite3"); let client = ClientBuilder::new() - .grpc_client(&endpoint, Some(timeout_ms)) + .rpc(rpc_client) .sqlite_store(store_path) .authenticator(keystore.clone()) + .in_debug_mode(true.into()) .build() .await .context("Failed to build local Miden client")?; @@ -100,25 +77,23 @@ pub async fn setup_local_client() -> Result { } ``` -Use separate paths (`local-keystore/`, `local-store.sqlite3`) to avoid contaminating remote-network state. Client debug mode was removed in v0.16; do not restore the removed builder toggle or the `MIDEN_DEBUG` environment switch. +Use separate paths (`local-keystore/`, `local-store.sqlite3`) to avoid contaminating testnet state. ## Step 3: Create Local Validation Binary -Create `integration/src/bin/validate_local.rs` mirroring the existing DevNet binary (`increment_count.rs`) but using `setup_local_client()`. +Create `integration/src/bin/validate_local.rs` mirroring the existing testnet binary (`increment_count.rs`) but using `setup_local_client()`. The binary must: 1. Call `setup_local_client()` instead of `setup_client()` 2. Sync state: `client.sync_state().await?` 3. Build contracts (same as existing binary) -4. Create accounts, create notes, submit transactions via `client.submit_new_transaction(...)` +4. Create accounts, create notes, submit transactions 5. Sync again after each transaction submission 6. Wait for transaction inclusion (poll `sync_state` until account state updates) 7. Verify final state matches MockChain test expectations 8. Print clear pass/fail for each verification step -The first sync is mandatory in v0.16: transaction inputs are sealed before submission, and the client needs trusted local genesis and chain-tip headers to verify the validator set's shared encryption key. `submit_new_transaction` handles sealing; the paired node must support unsealing and rejects plaintext inputs. - -Key differences from the current DevNet binary: +Key differences from testnet binary: - Localhost endpoint (port 57291) - Separate keystore and store paths - Must handle block production timing (sync + wait between submissions) @@ -127,19 +102,15 @@ Key differences from the current DevNet binary: ## Step 4: Run and Verify -Ensure clean client state before running (the node should already be clean from Step 1). A pre-v0.16 or other-network SQLite database is not migratable evidence: move it to a recoverable backup or choose a fresh task-specific store path before the v0.16 client opens it. Keep keystores separate by network and do not inspect or print secret material. - -Before submitting, inspect the chain's `verification_base_fee`. The current project flow has unfunded `AuthSingleSig` and `NoAuth` accounts and is valid unchanged only when that value is zero. On a fee-charging chain, signature auth requires committed fee-conversion information and a funded payment asset; `NoAuth` pays in the native fee asset at 1/1, must be funded in that asset, and does not accept explicit conversion information. Stop rather than silently adding funding or changing auth. - +Ensure clean client state before running (the node should already be clean from Step 1): ```bash +rm -rf local-keystore/ local-store.sqlite3 cargo run --bin validate_local --release ``` ### Verification Checklist - [ ] `sync_state()` succeeds (node reachable, no version mismatch) -- [ ] The sync stores trusted genesis and chain-tip headers before the first sealed submission -- [ ] `verification_base_fee` is compatible with the accounts' funding and auth setup (zero for the unchanged project flow) - [ ] Account creation succeeds (account appears after sync) - [ ] Note publication succeeds (transaction accepted by node) - [ ] Note consumption succeeds (state transitions as expected) @@ -149,14 +120,11 @@ cargo run --bin validate_local --release ## Step 5: Inspect Node Logs -Run the node with verbose logging. The helper script honors `RUST_LOG` and writes a per-component log file per service; if you launch the binaries directly, set it on the process you want to inspect (the sequencer carries the RPC): - +Run the node with verbose logging: ```bash -RUST_LOG=info ./scripts/start-test-node.sh -# or, running the sequencer directly: -RUST_LOG=info miden-node sequencer --rpc.listen 127.0.0.1:57291 --data-directory /node \ - --validator.url http://127.0.0.1:50101 --ntx-builder.url http://127.0.0.1:50301 \ - --block.interval 3s --batch.interval 1s +RUST_LOG=info miden-node bundled start \ + --data-directory local-node-data \ + --rpc.url http://0.0.0.0:57291 ``` Look for: @@ -168,17 +136,11 @@ Look for: | Symptom | Cause | Fix | |---------|-------|-----| -| `Unavailable` RPC error | Node not running or wrong port | Start node, verify the sequencer's RPC is listening on 57291 | -| Version mismatch error | The node/client stack is not the accepted v0.16 pairing | For this project, require client/store `0.16.0-rc.2`, protocol/standards/testing `0.16.0-rc.6`, and node `0.16.0-rc.1`; verify the node's source/tag and runtime status rather than accepting a generic v0.16 label | -| Submission fails before RPC acceptance | The fresh store has not synced trusted genesis/tip headers, or the node cannot unseal v0.16 inputs | Sync first and use the exact v0.16 node/client pairing; do not downgrade to plaintext submission | -| Authentication aborts while paying a fee | The chain has a nonzero base fee but the account lacks the required fee asset/conversion setup | Fund and configure fees only as an explicitly designed behavior change; the unchanged project requires a zero verification base fee | +| `Unavailable` RPC error | Node not running or wrong port | Start node, verify port 57291 | +| `accept header validation failed` after switching networks | Client store cached the genesis commitment from a different network | Delete the active client store (`store.sqlite3` by default; `local-store.sqlite3` for local validation) and re-sync | +| Version mismatch error | Node binary lags client crate (`cargo install miden-node` may pin an older published crate) | Reinstall to match `miden-client` from `integration/Cargo.toml`: `cargo install miden-node --locked --git https://github.com/0xMiden/miden-node --tag v`, or use `midenup` | | Vite or proxy returns 404 on RPC calls from frontend | Proxy targets the wrong path prefix | gRPC paths are `/rpc.Api/` (e.g. `/rpc.Api/Status`, `/rpc.Api/SyncNotes`, `/rpc.Api/GetAccount`); forward the `/rpc.Api` prefix in the proxy config | | Transaction rejected | Invalid proof or state | Check contract code, reset node data, try again | | Account not found after `add_account()` | `add_account()` is local-only; it does not register the account on-chain | Submit a transaction involving the account to deploy it on-chain, then `sync_state()` | -| Store errors or deserialization failures | Stale state from a previous session, or artifacts from an earlier protocol version, which do not round-trip | Re-bootstrap node data from a fresh genesis and give the v0.16 client a fresh SQLite path; archive an existing store instead of opening it with the new client | -| `.sqlite_store(..)` does not compile | Extension trait not in scope | `use miden_client_sqlite_store::ClientBuilderSqliteExt;` | -| Block not produced | Node produces blocks on the sequencer's configured cadence | Submit a transaction; check the sequencer's `--block.interval` (and `--batch.interval`) settings, or consult `miden-node sequencer --help` | - -## Cross-References - -- `miden-client-cli`: for driving a running node from the shell (create accounts, mint, transfer, consume notes) instead of a Rust binary; pair it with this skill's Step 1 node bootstrap for localhost workflows. +| Store errors or deserialization failures | Stale state from a previous session, or cached genesis from a different network | Wipe everything: `rm -rf local-node-data/ local-keystore/ local-store.sqlite3` and re-bootstrap | +| Block not produced | Node produces blocks when transactions arrive | Submit a transaction; check `--block-producer.block-interval` setting | diff --git a/.claude/skills/miden-client-cli/SKILL.md b/.claude/skills/miden-client-cli/SKILL.md index 5b27761..c4f6682 100644 --- a/.claude/skills/miden-client-cli/SKILL.md +++ b/.claude/skills/miden-client-cli/SKILL.md @@ -1,56 +1,58 @@ --- name: miden-client-cli -description: Map to the official Miden client CLI. This project uses the exact `miden-client-cli 0.16.0-rc.2` binary, installed directly and invoked as `miden-client ...`; a midenup-managed `miden client ...` component is acceptable only when its reported version is the same exact RC. Covers install, init, network selection, and canonical command/configuration references. Use when an agent needs to create accounts, query state, mint, transfer, or consume notes against a running Miden node; pair with the local-node-validation skill for localhost workflows. +description: Map to the official Miden client CLI. The recommended path is via midenup, which installs a managed `client` toolchain component and is invoked as `miden client ...` (component invocation through the midenup `miden` wrapper). The underlying / direct-install path is the `miden-client-cli` crate (`cargo install miden-client-cli --locked`), which exposes the binary `miden-client` and is invoked as `miden-client ...`. Both paths run the same upstream binary. Covers install, init, network selection, and where to find the canonical command reference and configuration docs. Use when an agent needs to create accounts, query state, mint, send, or consume notes against a running Miden node from the command line; pair with the local-node-validation skill for localhost workflows. --- # Miden Client CLI -The Miden client CLI is the command-line wrapper around the `miden-client` library. It creates accounts, syncs state, mints assets, submits transactions, and consumes notes against a running Miden node. +The Miden client CLI is the command-line wrapper around the `miden-client` library. It creates accounts, syncs state, mints assets, sends transactions, and consumes notes against a running Miden node. -This skill maps agents to the exact project version and its upstream command reference. Do not mix a store or command set from another client release into the v0.16 workflow. +This skill maps agents to the canonical install paths and upstream command reference. Do not memorize commands or config keys here. Follow the links. When to reach for this skill: the user wants to interact with a node from the shell. For Rust-library work against a localhost node from a binary, see the `local-node-validation` skill. For test-side note construction, see `rust-sdk-testing-patterns`. -## Exact Project Installation +## Two Invocation Paths -Install and verify the same client RC used by `integration/Cargo.toml`: +There are two ways to invoke the same upstream binary. -```sh -cargo install miden-client-cli --version 0.16.0-rc.2 --locked -test "$(miden-client --version)" = "miden-client 0.16.0-rc.2" -``` +**Through midenup (recommended).** Run `miden client `. This is component invocation: the midenup `miden` wrapper looks up the `client` component in the active toolchain and runs its installed executable. `miden client` is **not** an alias; the midenup README alias table only documents short-hand aliases (such as `miden account`, `miden faucet`, `miden new-wallet`, `miden send`), and component invocation is independent of the alias map. The toolchain manifest declares `installed_executable: miden-client` for the `client` component. -The midenup `0.16.0` channel does not supply this exact client RC. `miden client ` remains a valid component-invocation mechanism for a managed toolchain, but use it for this project only after `miden client --version` reports exactly `miden-client 0.16.0-rc.2`. Do not assume a channel name proves component identity. +**Direct install.** Run `cargo install miden-client-cli --locked`, then invoke `miden-client `. This installs the same upstream binary that midenup delegates to. -The exact RC uses `miden-client` and `miden-client-sqlite-store` `0.16.0-rc.2`, backed by protocol/standards/testing `0.16.0-rc.6`. +Both paths execute identically. References: -- midenup install, init, toolchain delegation, and alias docs: [github.com/0xMiden/midenup](https://github.com/0xMiden/midenup). -- Pinned CLI install and setup: [miden-client v0.16.0-rc.2 `bin/miden-cli/README.md`](https://github.com/0xMiden/miden-client/blob/v0.16.0-rc.2/bin/miden-cli/README.md). +- midenup install, init, toolchain delegation, and alias docs: [github.com/0xMiden/midenup](https://github.com/0xMiden/midenup). midenup is unpublished; the canonical install command is `cargo install --path .` or `cargo install --git `. +- miden-client CLI install and setup: [miden-client `bin/miden-cli/README.md`](https://github.com/0xMiden/miden-client/blob/main/bin/miden-cli/README.md). -## First-Time Initialization +## Install via midenup -`init` is optional because the CLI can self-initialize. Explicit initialization is safer when selecting a network and a fresh store. By default it creates global configuration at `~/.miden/miden-client.toml`; pass `--local` to create `./.miden/miden-client.toml`. A local config takes precedence over the global config. +```sh +cargo install midenup && midenup init +midenup install stable +``` -For this repository's temporary DevNet runtime, use a fresh v0.16 local configuration and store: +`midenup init` creates a `miden` symlink in `$CARGO_HOME/bin` (default `~/.cargo/bin`). If `miden` is not found after init, ensure `$CARGO_HOME/bin` is on your `PATH`. + +## First-Time Initialization + +`init` writes a `miden-client.toml` config in the current directory: ```sh -miden-client init --local --network devnet --store-path store.sqlite3 +miden client init --network localhost # or testnet | devnet | http://[:port] ``` -Omitting `--network` selects Testnet. Other accurate choices are `localhost`, `testnet`, or a full custom HTTP(S) RPC URL. Do not open a pre-v0.16 or different-network SQLite store with this client; archive it and initialize a fresh path. For localhost workflows, pair this skill with `local-node-validation`. - -Current v0.16 command changes include `transfer` in place of the removed `send` subcommand, and `account --inspect --verbose` in place of the removed `account --show --with-code`. Use `miden-client --help` for the exact installed command surface. The old client/CLI debug-mode toggle and `--debug` flag are removed. +Subsequent commands operate against that config. For localhost workflows, pair this skill with `local-node-validation`: it boots a local node on `http://0.0.0.0:57291` and prepares a clean keystore. ## Canonical Command Reference -Follow the canonical references at the exact `v0.16.0-rc.2` tag, which matches project-template's pinned client. +Follow the canonical in-repo references on `0xMiden/miden-client` (the active line, which matches project-template's pinned `miden-client = "0.14"`). The `miden-docs` site (`0xMiden.github.io/miden-docs/...`) is not used here because those URLs are not stable. -- CLI Reference: [`docs/external/src/rust-client/cli/index.md`](https://github.com/0xMiden/miden-client/blob/v0.16.0-rc.2/docs/external/src/rust-client/cli/index.md) -- CLI Configuration: [`docs/external/src/rust-client/cli/cli-config.md`](https://github.com/0xMiden/miden-client/blob/v0.16.0-rc.2/docs/external/src/rust-client/cli/cli-config.md) -- Release behavior: [`CHANGELOG.md`](https://github.com/0xMiden/miden-client/blob/v0.16.0-rc.2/CHANGELOG.md). +- CLI Reference: [`docs/external/src/rust-client/cli/index.md`](https://github.com/0xMiden/miden-client/blob/main/docs/external/src/rust-client/cli/index.md) +- CLI Configuration: [`docs/external/src/rust-client/cli/cli-config.md`](https://github.com/0xMiden/miden-client/blob/main/docs/external/src/rust-client/cli/cli-config.md) +- Repo overview and recent release notes: [`0xMiden/miden-client`](https://github.com/0xMiden/miden-client) (browse the `CHANGELOG.md` on `main` for the latest behavioral changes; pin to a release tag if you need a snapshot). -For the live command list and flags, run `miden-client --help` and drill into a command with `miden-client --help`. If an exact-version midenup component is deliberately selected, the equivalent invocation is `miden client ...`. +For the live command list and flags on the installed binary, run `miden client --help` (midenup path) or `miden-client --help` (direct-install path). Drill into a specific command with `miden client --help`. The canonical references above remain authoritative for deeper documentation. ## Cross-References diff --git a/.claude/skills/miden-concepts/SKILL.md b/.claude/skills/miden-concepts/SKILL.md index 10b601e..7ba0c54 100644 --- a/.claude/skills/miden-concepts/SKILL.md +++ b/.claude/skills/miden-concepts/SKILL.md @@ -21,7 +21,7 @@ Key properties: | Transactions involve sender + receiver | Transactions involve **one account only** | | Public state by default | **Private by default** | | Validators execute transactions | **Client executes and proves** locally | -| EVM-style gas metering | Verification fees are chain-configured in v0.16; a zero base fee charges nothing, while computational bounds still apply | +| Gas metering | No gas (computational bounds exist) | | Synchronous contract calls | **Asynchronous** communication via notes | | Accounts are balances + storage | Accounts are **full smart contracts** with code, storage, and vault | @@ -40,7 +40,7 @@ Accounts are composed from **components** — reusable Rust modules annotated wi ### Notes Notes are **UTXO-like messages** for asynchronous inter-account communication. A note contains: - **Script** — Logic that executes when the note is consumed -- **Storage** — Data accessible to the script during execution (`NoteStorage`, backed by `Vec`) +- **Inputs** — Data passed to the script (Vec) - **Assets** — Fungible/non-fungible tokens attached to the note - **Metadata** — Sender, tag, note type (public/private) @@ -53,8 +53,6 @@ A transaction is a **single-account state transition** with 4 phases: 3. Update account state (storage, vault, nonce) 4. Produce output notes (for other accounts to consume later) -The account's authentication procedure authorizes the transition and handles any v0.16 verification fee. The fee is derived from estimated verification cycles and the reference block's `verification_base_fee`. A zero base fee creates no fee note and needs no conversion information. On a fee-charging chain the vault must hold the payment asset: signature auth can commit explicit fee-conversion information, while `NoAuth` pays only in the native fee asset at 1/1 and rejects explicit conversion information. - **Important**: A two-party transfer (Alice sends Bob tokens) requires TWO transactions: 1. Alice's transaction creates a P2ID note with tokens attached 2. Bob's transaction consumes that note, receiving the tokens @@ -64,13 +62,12 @@ The account's authentication procedure authorizes the transition and handles any - **Fungible**: asset amount lives in `asset.value[0]` - **Non-fungible**: Unique token tied to a faucet account - Assets live in account **vaults** and move between accounts via notes -- Issued by **faucet accounts**; faucet components define the asset class and their mint/burn procedures operate on assets +- Created by **faucet accounts** using `faucet::create_fungible_asset()` or `faucet::mint()` ### Felt and Word - **Felt**: Field element in the Goldilocks prime field (p = 2^64 - 2^32 + 1). The fundamental data unit. - **Word**: Array of 4 Felts (32 bytes). Used for cryptographic hashes, storage keys, account IDs. -- **Felt constructors** (Rust `miden_field::Felt` — the same type used host-side in clients/tests *and* guest-side inside `#[component]`/`#[note]` contract code, which re-exports it): `Felt::new(u64)` is **fallible** — it returns `Result` and rejects out-of-range values (delegates to `from_canonical_checked`), so callers must `?`/match it (guest code typically `Felt::new(0).unwrap()`). `Felt::new_unchecked(u64)` is the raw, non-reducing constructor (any `u64`, no validation). Always-succeed constructors (return a bare `Felt`): `Felt::from_u8` / `from_u16` / `from_u32`. Non-panicking but fallible: `Felt::from_canonical_checked(u64) -> Option` (returns `None` when out of range). -- **Word constructors**: `Word::new`, `Word::from([u32; 4])`, `Word::from([Felt; 4])`, `Word::try_from([u64; 4])` +- **Current constructors**: `Felt::new`, `Felt::from_u8` / `from_u16` / `from_u32`, `Felt::from_canonical_checked`, `Word::new`, `Word::from([u32; 4])`, `Word::from([Felt; 4])`, `Word::try_from([u64; 4])` - **Current accessors**: `felt.as_canonical_u64()`, `word.as_elements()`, `word.into_elements()`, `word.as_bytes()`, `word.to_hex()` **WARNING**: Felt arithmetic is **modular**. Subtraction wraps around the prime. Always validate with `.as_canonical_u64()` before subtracting. See the rust-sdk-pitfalls skill for details. @@ -83,19 +80,6 @@ The account's authentication procedure authorizes the transition and handles any | **P2IDE** | P2ID with expiration | Adds block-height timelock; sender can reclaim after expiry | | **SWAP** | Atomic asset exchange | Note offers asset A, requests asset B; consumer provides B | -## Standard Components (miden-standards) - -| Component | Purpose | -|-----------|---------| -| `BasicWallet` | Standard wallet: `receive_asset()`, `move_asset_to_note()` | -| `FungibleFaucet` | Mint/burn fungible tokens; built via `FungibleFaucet::builder()` | -| `NoAuth` | No-signature auth for testing/trusted flows; still pays a nonzero fee from the account vault in the native fee asset at 1/1 | -| `AuthSingleSig` | Production signature authentication — unified auth component covering both Falcon-512 and ECDSA-K256 key types | - -**Auth**: `AuthSingleSig` is a single auth component that dispatches on the key type, so one component handles both Falcon-512 and ECDSA-K256 keys. The Falcon-512 scheme uses Poseidon2 as its hash function and is named `Falcon512Poseidon2`. - -**Fungible faucet**: `FungibleFaucet` is the fungible-faucet component, constructed with the `bon`-generated `FungibleFaucet::builder()` (required setters `.name(TokenName::new(..)?)`, `.symbol(TokenSymbol::new(..)?)`, `.decimals(n)`, `.max_supply(AssetAmount)`, then `.build()?`). - ## Development Model ``` diff --git a/.claude/skills/rust-sdk-patterns/SKILL.md b/.claude/skills/rust-sdk-patterns/SKILL.md index 128acd0..8ce7ed4 100644 --- a/.claude/skills/rust-sdk-patterns/SKILL.md +++ b/.claude/skills/rust-sdk-patterns/SKILL.md @@ -1,131 +1,42 @@ --- name: rust-sdk-patterns -description: Complete guide to writing Miden smart contracts with the Rust SDK. Covers the three-part #[component_storage]/#[component] account-component pattern, #[note]/#[note_script] notes, #[tx_script] scripts, the #[account(...)] wrapper, storage patterns, native functions, asset handling, cross-component calls, P2ID note creation, and asset receiving via component methods. Use when writing, editing, or reviewing Miden Rust contract code. +description: Complete guide to writing Miden smart contracts with the Rust SDK. Covers #[component], #[note], #[tx_script] macros, storage patterns, native functions, asset handling, cross-component calls, P2ID note creation, and asset receiving via component methods. Use when writing, editing, or reviewing Miden Rust contract code. --- # Miden Rust SDK Patterns ## Three Contract Types -### Account Component (three-part pattern) +### Account Component (`#[component]`) Defines reusable logic and storage for accounts. Accounts are composed of one or more components. -An account component is written as **three parts** — the storage struct is annotated `#[component_storage]`, and `#[component]` applies to the API trait and the impl block: +See [counter-account/src/lib.rs](../../../contracts/counter-account/src/lib.rs) for a working example demonstrating `#[component]`, typed `StorageMap`, `get()`/`set()`, and felt arithmetic. -1. `#[component_storage]` on the **storage struct** — declares typed `#[storage(...)]` fields and derives slot names. -2. `#[component]` on a **trait** — the component's exported API (this is the source of the generated WIT interface). -3. `#[component]` on the **`impl Trait for Storage`** block — the behavior, wired to the guest bindings. +**Cargo.toml for accounts:** See [counter-account/Cargo.toml](../../../contracts/counter-account/Cargo.toml) for the required `crate-type`, `miden` dependency, `component` metadata, and `project-kind`. -```rust -#![no_std] -#![feature(alloc_error_handler)] -use miden::{component, component_storage, felt, Felt, StorageMap, Word}; - -#[component_storage] -struct CounterContractStorage { - #[storage(description = "counter contract storage map")] - count_map: StorageMap, -} - -#[component] -trait CounterContract { - #[account_procedure] - fn get_count(&self) -> Felt; - #[account_procedure] - fn increment_count(&mut self) -> Felt; -} - -#[component] -impl CounterContract for CounterContractStorage { - fn get_count(&self) -> Felt { - let key = Word::new([felt!(0), felt!(0), felt!(0), felt!(1)]); - self.count_map.get(key) - } - - fn increment_count(&mut self) -> Felt { - let key = Word::new([felt!(0), felt!(0), felt!(0), felt!(1)]); - let current_value: Felt = self.count_map.get(key); - let new_value = current_value + felt!(1); - self.count_map.set(key, new_value); - new_value - } -} -``` - -Only the trait's methods are exported to WIT. Mark every method that must be callable from notes, transaction scripts, foreign procedure invocation, or sibling components with `#[account_procedure]` on the trait declaration; unmarked methods are not account procedures. Inherent (`impl CounterContractStorage`) methods stay private to the contract — use them for helpers like key derivation. - -See [counter-account/src/lib.rs](../../../contracts/counter-account/src/lib.rs) for the complete working example demonstrating the three-part pattern, typed `StorageMap`, `get()`/`set()`, and felt arithmetic. - -**Project metadata for accounts:** See [counter-account/miden-project.toml](../../../contracts/counter-account/miden-project.toml) for `[lib] path = "src/lib.rs"`, `kind = "account-component"`, the `namespace` (`miden:counter-account/counter-contract@0.1.0`), and `supported-types` under `[package.metadata.miden]`. The [counter-account/Cargo.toml](../../../contracts/counter-account/Cargo.toml) retains `crate-type = ["cdylib"]`, pins guest SDK `miden = "=0.14.0-rc.1"` to compiler revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, and pins `miden-sdk-build-script-support` to the same revision under `[build-dependencies]`. Its `build.rs` calls `miden_sdk_build_script_support::prepare_package_cache();`. - -### Note Script (`#[note]` / `#[note_script]`) +### Note Script (`#[note]`) Executes when a note is consumed by an account. Can call component methods on the consuming account. -A note is two parts: a `#[note]` struct (the note inputs type) and a `#[note]` `impl` block containing exactly one `#[note_script]` entrypoint. The entrypoint takes `self` **by value**, exactly one `Word` argument, and optionally a single reference to an `#[account(...)]` wrapper (`&MyAccount` or `&mut MyAccount`). The consuming account is declared separately with `#[account(...)]`. - -```rust -#![no_std] -#![feature(alloc_error_handler)] -use miden::*; - -// The native (active) account this note runs against: exposes the -// counter-account `CounterContract` component's methods on the wrapper. -#[account(counter_account::CounterContract)] -pub struct Wallet; - -#[note] -struct IncrementNote; - -#[note] -impl IncrementNote { - #[note_script] - fn run(self, _arg: Word, account: &mut Wallet) { - let initial_value = account.get_count(); - account.increment_count(); - let expected_value = initial_value + Felt::from_u32(1); - let final_value = account.get_count(); - assert_eq(final_value, expected_value); - } -} -``` - -See [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) for the working example demonstrating `#[note]`, `#[note_script]`, the `#[account(...)]` wrapper, and a cross-component call. +See [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) for a working example demonstrating `#[note]`, `#[note_script]`, and cross-component calls. -**Project metadata for notes:** See [increment-note/miden-project.toml](../../../contracts/increment-note/miden-project.toml) for `[lib] kind = "note"`, the `namespace` (`miden:increment-note/miden-increment-note@0.1.0`), and the path dependency on the called component (`counter-account = { path = "../counter-account" }`). +**Cargo.toml for notes:** See [increment-note/Cargo.toml](../../../contracts/increment-note/Cargo.toml) for the required `miden` deps, cross-component dependencies, wit deps, and `project-kind = "note-script"`. ### Transaction Script (`#[tx_script]`) One-off logic executed in the context of an account. Used for initialization, admin operations, etc. -`#[tx_script]` annotates a free `fn run`. Its signature is `fn run(arg: Word)` or `fn run(arg: Word, account: &mut MyAccount)` where `MyAccount` is an `#[account(...)]` wrapper. You declare the account wrapper yourself with `#[account(...)]`, and the macro instantiates it as the active account. - ```rust #![no_std] #![feature(alloc_error_handler)] use miden::*; - -// The account this tx-script runs against: the counter-account `CounterContract` component. -#[account(counter_account::CounterContract)] -pub struct Wallet; +use crate::bindings::Account; #[tx_script] -fn run(_arg: Word, account: &mut Wallet) { - account.increment_count(); +fn run(_arg: Word, account: &mut Account) { + account.initialize(); } ``` -**Project metadata for tx scripts:** Like a note, but `[lib] kind = "tx-script"` and `namespace = "miden:base/transaction-script@1.0.0"`. - -## Storage Slot Naming - -Storage slot names are part of the on-chain storage ABI and are derived as: - -``` -:::: -``` - -The **middle segment is the interface segment of the `[lib].namespace`** in `miden-project.toml` (the part between the last `/` and `@`), snake-cased — **not** the snake-cased struct name. This deliberately decouples slot names from private Rust renames. - -Example: package `counter-account` + `namespace = "miden:counter-account/counter-contract@0.1.0"` + field `count_map` derives slot `counter_account::counter_contract::count_map` (see [integration/src/helpers.rs](../../../integration/src/helpers.rs) `counter_storage_slot()` and [counter_test.rs](../../../integration/tests/counter_test.rs)). The version suffix (`@0.1.0`) is ignored so the slot name stays stable. Slots are derived from the slot name; there is no `slot(...)` attribute. See the rust-sdk-pitfalls skill (P5) for more on slot naming. +**Cargo.toml:** Same as account but with `project-kind = "tx-script"`. ## Storage Types @@ -138,20 +49,22 @@ Example: package `counter-account` + `namespace = "miden:counter-account/counter | Module | Key Functions | Purpose | |--------|--------------|---------| -| `native_account::` | `add_asset(Asset) -> Word`, `remove_asset(Asset) -> Word`, `incr_nonce() -> Nonce`, `get_id() -> AccountId` | Modify current account vault/nonce | -| `active_account::` | `get_id() -> AccountId`, `get_asset(Word) -> Word`, `has_asset(Word) -> bool` | Query current account and its current vault | -| `active_note::` | `get_storage() -> Vec`, `get_initial_assets() -> Vec`, `get_sender() -> AccountId` | Query the note being consumed and its creation-time assets | +| `native_account::` | `add_asset(Asset)`, `remove_asset(Asset)`, `incr_nonce()` | Modify account vault/nonce | +| `active_account::` | `get_id() -> AccountId`, `get_balance(AccountId) -> Felt` | Query current account | +| `active_note::` | `get_assets() -> Vec`, `get_sender() -> AccountId` | Query note being consumed (typed note storage arrives as `self` in the `#[note_script]` method; see "Cross-Component Note Pattern" below) | | `note::` | `build_recipient(Word, Word, Vec) -> Recipient` | Build note recipients from serial number, script root, and note storage | | `output_note::` | `create(Tag, NoteType, Recipient) -> NoteIdx`, `add_asset(Asset, NoteIdx)` | Create output notes | -| `faucet::` | `mint(Asset)`, `burn(Asset)` | Mint or burn a pre-built asset; in-transaction asset construction is unavailable | -| `tx::` | `get_block_number() -> BlockNumber`, `get_block_timestamp() -> u32` | Transaction context | -| Intrinsics | `assert(Felt)`, `assertz(Felt)`, `assert_eq(Felt, Felt)` | Validation (`assert` fails unless the felt equals 1; `assertz` fails unless it equals 0) | +| `faucet::` | `create_fungible_asset(Felt) -> Asset`, `mint(Asset)`, `burn(Asset)` | Asset minting | +| `tx::` | `get_block_number() -> Felt`, `get_block_timestamp() -> Felt` | Transaction context | +| Intrinsics | `assert(bool)`, `assertz(Felt)`, `assert_eq(Felt, Felt)` | Validation | ## Asset Handling -`Asset` is a two-word value (`key` + `value`): +`Asset` is now a two-word value: -**Constructor**: `Asset::new(key, value)` builds an Asset from its asset ID word and value word (the arguments are `impl Into`, so e.g. `Asset::new(id_word, value_word)` or from `[Felt; 4]`). +**Constructor**: `Asset::new(word)` creates an Asset from a Word. + +See [miden-bank bank-account](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/contracts/bank-account/src/lib.rs) for complete asset handling patterns including deposit, withdrawal, and balance tracking. ```rust pub struct Asset { @@ -160,51 +73,40 @@ pub struct Asset { } ``` -For fungible assets, the amount lives in `asset.value[0]`. The asset ID / vault identity word lives in `asset.key`; `AssetClass` is the discriminator between assets issued by one faucet. +For fungible assets, the amount lives in `asset.value[0]`. The asset class / vault identity lives in `asset.key`. ```rust // Access fungible amount let amount = asset.value[0]; -// Keep the asset key if you need to persist or compare the asset ID / vault identity +// Keep the asset key if you need to persist or compare the asset class let asset_key = asset.key; -// Add asset to account vault (only from component methods, not note scripts — see pitfall P11) +// Add asset to account vault (only from component methods, not note scripts; see pitfall P11) native_account::add_asset(asset); -// Remove asset from account vault (Asset is Copy, no clone needed) -native_account::remove_asset(asset); +// Remove asset from account vault +native_account::remove_asset(asset.clone()); ``` ## P2ID Output Note Creation -To send assets to another account, create a P2ID (Pay-to-ID) output note. The sequence is: - -1. Build the recipient with `note::build_recipient(serial_number, script_root, inputs)`. -2. Create the note with `output_note::create(tag, note_type, recipient)`, which returns a `NoteIdx`. -3. Move the asset out of the vault and onto the note with `native_account::remove_asset(asset)` + `output_note::add_asset(asset, note_idx)`. - -Because a note script cannot call `native_account::*` (pitfall P11), P2ID creation lives inside an account-component method. See the rust-sdk-pitfalls skill for the exact constants and safety rules: P8 (`note::build_recipient`), P9 (P2ID script root — prefer `script_root()`, do not hardcode), and P10 (constructing `NoteType` via `NoteType::from(felt!(...))`). +To send assets to another account, create a P2ID (Pay-to-ID) output note. See [miden-bank bank-account](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/contracts/bank-account/src/lib.rs) `create_p2id_note()` for a complete working implementation. ## Cross-Component Dependencies -To call another component's methods from a note or tx script, declare the component under `[dependencies]` in `miden-project.toml`: `counter-account = { path = "../counter-account" }`. +To call another component's methods from a note or tx script, two Cargo.toml sections are needed. See [increment-note/Cargo.toml](../../../contracts/increment-note/Cargo.toml) for a working example showing both `[package.metadata.miden.dependencies]` and `[package.metadata.component.target.dependencies]`. -WIT is embedded in its compiled package, so no `[package.metadata.miden.dependencies]` entry is needed. A leftover `wit` key is an error for a dependency package that embeds WIT; it survives only as an escape hatch for dependency packages that do not embed WIT. - -See [increment-note/miden-project.toml](../../../contracts/increment-note/miden-project.toml) for the working ordinary path dependency. - -Then expose the dependency's methods on the consuming account by declaring an `#[account(package::Interface)]` wrapper (`#[account(counter_account::CounterContract)] pub struct Wallet;`) and calling methods on the injected `account` parameter. The package name is the dependency's Rust-style name (`-` replaced with `_`, so `counter-account` → `counter_account`) and `Interface` is its exported WIT interface in UpperCamelCase (`CounterContract`). The macro generates one trait per referenced interface and implements it for the wrapper. Same-module note and transaction-script entrypoints see that generated trait automatically; callers in another module must import it. Give the wrapper a name different from every generated trait, and use UFCS when multiple generated traits expose the same method name. See [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs). +Then import the bindings in your Rust code. See [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) line 13 for the import pattern: `use crate::bindings::miden::target_component::target_component;` ## Common Type Conversions ```rust // Felt from integer let f = felt!(42); // preferred for literals in contract code -let f = Felt::new(42).unwrap(); // fallible: Felt::new returns Result -let f = Felt::new_unchecked(42); // infallible, non-reducing form -let f = Felt::from_u32(42); // infallible (u32 always fits) -let f = Felt::from_canonical_checked(42).unwrap(); // returns Option +let f = Felt::new(42); // construct a Felt from a u64 +let f = Felt::from_u32(42); +let f = Felt::from_canonical_checked(42).unwrap(); // Word from Felts let w = Word::from([f0, f1, f2, f3]); @@ -231,80 +133,58 @@ extern crate alloc; use alloc::vec::Vec; ``` -## Contract Build Support - -Every contract crate uses the guest SDK at exact revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a` and version `=0.14.0-rc.1`. Add `miden-sdk-build-script-support` from that same immutable revision under `[build-dependencies]`, add a `build.rs` that calls `miden_sdk_build_script_support::prepare_package_cache();`, and set `[lib] path = "src/lib.rs"` in `miden-project.toml`. - -```toml -[dependencies] -miden = { version = "=0.14.0-rc.1", git = "https://github.com/0xMiden/compiler", rev = "2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" } - -[build-dependencies] -miden-sdk-build-script-support = { git = "https://github.com/0xMiden/compiler", rev = "2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" } -``` - -```rust -fn main() { - miden_sdk_build_script_support::prepare_package_cache(); -} -``` - -For plain Cargo and IDE analysis, set `CARGO_MIDEN` to the verified absolute `cargo-miden 0.10.0-rc.1` binary installed from that revision and use a checkout-private `CARGO_TARGET_DIR`. Do not manually set `MIDENC_PACKAGE_CACHE`; the build-support wrapper owns its content-addressed package-cache generations. - ## Cross-Component Note Pattern -A note script reads from `active_note::*` and forwards work to a public account-component method through the `#[account(...)]` wrapper. This is the canonical pattern for any note that updates account state, because note scripts cannot call `native_account::*` directly (see `rust-sdk-pitfalls` skill, P11). +A note script reads from `active_note::*` and forwards work to a public account-component method via generated bindings. This is the canonical pattern for any note that updates account state, because note scripts cannot call `native_account::*` directly (see `rust-sdk-pitfalls` skill, P11). -The `#[note]` macro deserializes the note's inputs into the typed note struct, so serialized note storage is turned into typed fields before the script runs. The `#[note_script]` method receives the deserialized note as `self` (by value) and never indexes a raw Felt slice manually. Alongside the required `Word` arg, the method may optionally accept an `#[account(...)]` wrapper reference (`&Wallet` or `&mut Wallet`). See [compiler/sdk/base-macros/src/lib.rs](https://github.com/0xMiden/compiler/blob/main/sdk/base-macros/src/lib.rs) for the macro contract and [compiler/sdk/base-macros/src/note.rs](https://github.com/0xMiden/compiler/blob/main/sdk/base-macros/src/note.rs) for the generated deserialization (each named field is read via `::from_felt_repr(...)` and EOF is asserted at the end). +The `#[note]` macro generates `TryFrom<&[Felt]>` for the note struct, so the note's serialized storage is deserialized into typed fields before the script runs. The `#[note_script]` method receives the deserialized note as `self` (by value) and never indexes a raw Felt slice manually. Alongside the required `Word` arg, the method may optionally accept a `&Account` or `&mut Account` parameter. See [compiler/sdk/base-macros/src/lib.rs](https://github.com/0xMiden/compiler/blob/main/sdk/base-macros/src/lib.rs) for the macro contract and [compiler/sdk/base-macros/src/note.rs](https://github.com/0xMiden/compiler/blob/main/sdk/base-macros/src/note.rs) for the generated deserialization (each named field is read via `::from_felt_repr(...)` and EOF is asserted at the end). -Supported field types include `Felt`, the unsigned integer scalars (`u64`, `u32`, `u8`), `bool`, `Option`, and `Vec` via the `FromFeltRepr` trait (`compiler/sdk/field-repr/repr/src/lib.rs`), plus any user type that opts in with `#[derive(FromFeltRepr)]` (this is how `AccountId` supports the macro — see `compiler/sdk/base-sys/src/bindings/types.rs`). Do **not** use `Asset` or `Word` directly as note struct fields; those types do not currently derive `FromFeltRepr`. If you need asset-shaped data inside the note, flatten it into supported scalar fields and reconstruct inside the script, or keep it on the side as a separate `active_note::get_initial_assets()` read. +Supported field types include `Felt`, the unsigned integer scalars (`u64`, `u32`, `u8`), `bool`, `Option`, and `Vec` via the `FromFeltRepr` trait (`compiler/sdk/field-repr/repr/src/lib.rs`), plus any user type that opts in with `#[derive(FromFeltRepr)]` (this is how `AccountId` supports the macro - see `compiler/sdk/base-sys/src/bindings/types.rs`). Do **not** use `Asset` or `Word` directly as note struct fields; those types do not currently derive `FromFeltRepr`. If you need asset-shaped data inside the note, flatten it into supported scalar fields and reconstruct inside the script, or keep it on the side as a separate `active_note::get_assets()` read. -For the Cargo.toml / `miden-project.toml` wiring (cross-component dependencies + `#[account(...)]` wrapper), see "Cross-Component Dependencies" above. See [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) for the project-template's local example of the `#[note] struct + #[note] impl` macro form. +For Cargo.toml wiring (cross-component dependencies + bindings import), see "Cross-Component Dependencies" above. See [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) for the project-template's local example of the `#[note] struct + #[note] impl` macro form. -**Storage-free case** (unit struct, calls the account wrapper): declare a unit struct (`#[note] struct IncrementNote;`). The script receives the `#[account(...)]` wrapper and calls component methods on it — the counter's [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) is exactly this shape (`account.get_count()` / `account.increment_count()`). For a note that forwards assets, read `active_note::get_sender()` and iterate `active_note::get_initial_assets()`, calling the component method per asset through the wrapper. The macro still generates the deserialization wrapper; for a unit struct it only asserts the note-input Felt slice is empty. +**Storage-free case** (sender + assets, single component call per asset): declare a unit struct (`#[note] struct DepositNote;`). The script reads `active_note::get_sender()` and iterates `active_note::get_assets()`, calling the component method per asset. The macro still generates the deserialization wrapper; for a unit struct it only asserts the storage Felt slice is empty. **Typed-storage case** (note carries scripted data): declare named fields on the note struct. The macro deserializes them in declaration order, and the script accesses them via `self.`. Illustrative shape: ```rust -#[account(counter_account::CounterContract)] -pub struct Wallet; - #[note] -struct TargetedNote { - target_account_id: AccountId, +struct DepositNote { + depositor: AccountId, } #[note] -impl TargetedNote { +impl DepositNote { #[note_script] - fn run(self, _arg: Word, account: &mut Wallet) { - // `self.target_account_id` is deserialized from the note inputs; - // forward work to component methods on `account`. + pub fn run(self, _arg: Word) { + let assets = active_note::get_assets(); + for asset in assets { + bank_account::deposit(self.depositor, asset); + } } } ``` -(`use` statements and crate attributes elided; see [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) for a complete file.) For a verified working example with a typed field and an `&mut` account-wrapper parameter, see [compiler/examples/p2id-note/src/lib.rs](https://github.com/0xMiden/compiler/blob/main/examples/p2id-note/src/lib.rs) (`#[note] struct P2idNote { target_account_id: AccountId }`, where the script asserts `account.get_id() == self.target_account_id` and calls `account.receive_asset(asset)` for each attached asset). +(`use` statements and crate attributes elided; see [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) for a complete file.) For a verified working example with an `&mut Account` parameter, see [compiler/examples/p2id-note/src/lib.rs](https://github.com/0xMiden/compiler/blob/main/examples/p2id-note/src/lib.rs) (`#[note] struct P2idNote { target_account_id: AccountId }`, where the script asserts `account.get_id() == self.target_account_id` and calls `account.receive_asset(asset)` for each attached asset). -**Component side that absorbs the call**: the counter's `CounterContract` component exposes `get_count` / `increment_count` (see [counter-account/src/lib.rs](../../../contracts/counter-account/src/lib.rs)); the note calls those through the wrapper. A component method validates (felt-arithmetic safety, see `rust-sdk-pitfalls` P1), updates storage, and — for a withdraw-style flow — creates a P2ID output note via the P2ID pattern above. +**Component side that absorbs the call**: see [miden-bank bank-account](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/contracts/bank-account/src/lib.rs) for `deposit(...)` and `withdraw(...)` in a fuller example. The component method validates (felt-arithmetic safety, see `rust-sdk-pitfalls` P1), updates storage, and (for `withdraw`) creates a P2ID output note via the existing P2ID pattern. Note: miden-bank currently demonstrates an older raw-indexing variant for its withdraw-request note; treat the typed pattern shown above as the preferred shape for new note scripts. -**Test wiring**: tests pass the serialized Felt representation of the note struct's fields via `NoteBuilder::note_storage([...])`, in declaration order. See `rust-sdk-testing-patterns` skill, "Note Construction" section, for building a note from a compiled `.masp` package with `NoteScript::from_package` + `NoteBuilder`. +**Test wiring**: tests pass the serialized Felt representation of the note struct's fields through `NoteCreationConfig.storage`, in declaration order. See `rust-sdk-testing-patterns` skill, "Note Construction" section, for the helper that builds a note from a compiled `.masp` package and a populated `NoteCreationConfig`. ## Asset Receiving via Component Methods -Note scripts cannot call `native_account::add_asset()` directly (see pitfall P11). The canonical pattern is for an account component to expose a public (trait) method that wraps `native_account::add_asset()`, and the note script calls that method through the `#[account(...)]` wrapper. +Note scripts cannot call `native_account::add_asset()` directly (see pitfall P11). The canonical pattern is for an account component to expose a public method that wraps `native_account::add_asset()`, and note scripts call that method via cross-component bindings. + +See [miden-bank bank-account deposit()](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/contracts/bank-account/src/lib.rs) for the component side: the `deposit()` method validates the deposit, updates storage, and calls `native_account::add_asset()`. -Component side: a trait method (e.g. `deposit`) validates the deposit, updates storage, and calls `native_account::add_asset()`. Note side: the note declares `#[account(package::Interface)] pub struct Wallet;` and, inside `#[note_script] fn run(self, _arg: Word, account: &mut Wallet)`, calls `account.deposit(...)` on that wrapper. It is **not** a free `package::deposit()` call — the call goes through the injected `account`, exactly as the counter's [increment-note/src/lib.rs](../../../contracts/increment-note/src/lib.rs) calls `account.increment_count()`. +See [miden-bank deposit-note](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/contracts/deposit-note/src/lib.rs) for the note side: the note script calls `bank_account::deposit()` via generated bindings. ## Validation Checklist - [ ] `#![no_std]` and `#![feature(alloc_error_handler)]` at top of every contract -- [ ] Account components use the three-part pattern: `#[component_storage]` struct + `#[component]` trait + `#[component]` impl (never `#[component]` on a struct), with `#[account_procedure]` on every trait method that must be callable as an account procedure -- [ ] `crate-type = ["cdylib"]` in `Cargo.toml` -- [ ] Guest `miden = "=0.14.0-rc.1"`, build-support dependency, and `build.rs` all use compiler revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a` -- [ ] Correct `[lib] path = "src/lib.rs"` and `kind` in `miden-project.toml` (`account-component` / `note` / `tx-script`) with the matching `namespace` -- [ ] Typed storage uses `StorageValue` / `StorageMap` with `get()` / `set()`; slot names derive from `::::` -- [ ] Notes/tx-scripts that call a component declare an `#[account(package::Interface)]` wrapper and call methods on the injected `account` -- [ ] Cross-component deps declared under `[dependencies]` in `miden-project.toml` (no `wit` key: WIT is embedded in the compiled package) +- [ ] `crate-type = ["cdylib"]` in Cargo.toml +- [ ] Correct `project-kind` in `[package.metadata.miden]` +- [ ] Typed storage uses `StorageValue` / `StorageMap` with `get()` / `set()` +- [ ] Cross-component deps in both `[package.metadata.miden.dependencies]` and `[package.metadata.component.target.dependencies]` - [ ] Felt arithmetic validated before subtraction (see rust-sdk-pitfalls skill) - [ ] Felt comparisons use `.as_canonical_u64()` (see rust-sdk-pitfalls skill) diff --git a/.claude/skills/rust-sdk-pitfalls/SKILL.md b/.claude/skills/rust-sdk-pitfalls/SKILL.md index fa66ff8..4d044ef 100644 --- a/.claude/skills/rust-sdk-pitfalls/SKILL.md +++ b/.claude/skills/rust-sdk-pitfalls/SKILL.md @@ -44,71 +44,43 @@ if balance.as_canonical_u64() > threshold.as_canonical_u64() { ... } **Rule**: For quantity/business logic, ALWAYS convert to `.as_canonical_u64()` before using comparison operators. -## P3: Canonical ABI Tupling and the Direct FPI 16-Felt Budget +## P3: Function Argument Limit (4 Words / 16 Felts) -**Severity**: High — conflating argument tupling with the direct-call budget gives the wrong result +**Severity**: Medium — causes compilation errors -Canonical ABI decides whether to tuple the **parameters** from their flat-value count and felt width. If either exceeds 16, it replaces the parameter list with one argument pointer. For an FPI import, an indirect-result pointer is appended only afterward. `plan_fpi_call` then derives the argument-pointer path from the parameter **count** and includes any result pointer in the direct-call felt total. Consequently, parameter-width-only tupling can still be diagnosed as an over-budget direct FPI call, and exactly 16 direct parameter felts plus an indirect-result pointer form a rejected 17-felt call. More than 16 flat parameters use the supported argument-pointer path rather than failing merely because the direct stack window is 16; the FPI executor's separate input/output caps still apply. - -See frozen compiler sources `frontend/wasm/src/component/flat.rs:261-288` and `frontend/wasm/src/component/lower_imports.rs:330-351` at tag `sdk/v0.14.0-rc.1`. +Functions can receive at most 4 Words (16 Felts) as arguments. ```rust -// REJECTED for an FPI import: 16 direct parameter felts plus the -// indirect result pointer make a 17-felt direct call. -fn process(a0: Felt, /* ... */, a15: Felt) -> Word { ... } +// PROBLEM — too many arguments +fn process(a: Word, b: Word, c: Word, d: Word, e: Word) { ... } // > 4 Words! -// More than 16 flat parameters trigger canonical-ABI argument tupling; -// they do not fail merely because the direct stack window is 16. +// SOLUTION — pass fat types by reference +fn process(a: &Word, b: &Word, c: &Word, d: &Word, e: &Word) { ... } ``` ## P4: Storage API Is Typed -**Severity**: Medium — the wrong component shape does not compile +**Severity**: Medium — old examples no longer compile -Account storage uses typed slots: +The old `Value` / untyped `StorageMap` API is gone. Account storage is now: - `StorageValue` for a single typed slot - `StorageMap` for typed maps -- `get()` / `set()` methods +- `get()` / `set()` methods instead of `.read()` / `.write()` - `K: WordKey`, `T: WordValue`, `V: WordValue` -An account component is written in **three parts**: annotate the storage struct with `#[component_storage]`, the API `trait` with `#[component]`, and the `impl Trait for Storage` block with `#[component]`. See the working example in `contracts/counter-account/src/lib.rs`: - ```rust -// 1. Storage struct — annotated #[component_storage], NOT #[component]. -// Applying #[component] to a struct is a hard compile error. -#[component_storage] -struct CounterContractStorage { - #[storage(description = "counter contract storage map")] - count_map: StorageMap, -} - -// 2. API trait — defines the exported interface. #[component] -trait CounterContract { - #[account_procedure] - fn get_count(&self) -> Felt; - #[account_procedure] - fn increment_count(&mut self) -> Felt; -} +struct CounterContract { + #[storage(description = "single typed slot")] + counter: StorageValue, -// 3. Implementation — the behavior, wired to the storage struct. -#[component] -impl CounterContract for CounterContractStorage { - fn get_count(&self) -> Felt { - let key = Word::new([felt!(0), felt!(0), felt!(0), felt!(1)]); - self.count_map.get(key) - } - fn increment_count(&mut self) -> Felt { - let key = Word::new([felt!(0), felt!(0), felt!(0), felt!(1)]); - let new_value = self.count_map.get(key) + felt!(1); - self.count_map.set(key, new_value); - new_value - } + #[storage(description = "typed map")] + balances: StorageMap, } ``` -Methods that must be callable from notes, transaction scripts, foreign procedure invocation, or sibling components need `#[account_procedure]` on the `#[component]` trait declaration. Unmarked methods still compile but are not account procedures. If you need custom keys or values, implement `WordKey` / `WordValue` by converting to and from a single `Word`. +If you need custom keys or values, implement `WordKey` / `WordValue` by converting to and from a single `Word`. ## P5: Storage Slot Naming Convention @@ -116,23 +88,15 @@ Methods that must be callable from notes, transaction scripts, foreign procedure Storage slot names follow a strict pattern. Getting it wrong often returns the default value silently. -**Pattern**: `[package_name]::[namespace_interface_segment]::[field_name]` - -**Where the segments come from**: The `#[component_storage]` macro (NOT `#[component]`) processes the `#[storage]` fields and derives slot names. It loads `miden-project.toml` (next to your `Cargo.toml`, NOT `Cargo.toml` itself): +**Pattern**: `[component_package_or_name]::[snake_case(component_struct)]::[field_name]` -- **First segment** = `[package] name`. -- **Middle segment** = the *interface segment* of the `[lib] namespace` value. The namespace is a fully-qualified component id `namespace:package/interface@version`; the interface segment sits between the last `/` and the `@`. This is deliberately decoupled from the Rust storage-struct name, so renaming the private struct cannot change deployed slot names. The struct name (`CounterContractStorage`, …) does NOT appear in the slot name. -- **Last segment** = the `#[storage]` field name. +**Conversion rule**: Replace characters outside `[A-Za-z0-9_]` with `_` in the package or component name. The package comes from `[package.metadata.component] package = "..."`, with any `@version` suffix ignored. -**Conversion rule**: Each segment is sanitized — any `@version` suffix is stripped, the interface segment is passed through `snake_case`, and characters outside `[A-Za-z0-9_]` are replaced with `_` (an empty or leading-`_` segment is prefixed with `x`). Project package names are conventionally kebab-case (e.g. `counter-account`), so the first segment is that name with hyphens replaced by `_` — it does NOT equal the package name verbatim (`counter-account` → `counter_account`). - -| `[package] name` | `[lib] namespace` | Field | Storage Slot Name | -|------------------|-------------------|-------|-------------------| -| `counter-account` | `miden:counter-account/counter-contract@0.1.0` | `count_map` | `counter_account::counter_contract::count_map` | - -The integration code depends on this exact name. In `integration/src/helpers.rs`, `counter_storage_slot()` builds it via `StorageSlotName::new("counter_account::counter_contract::count_map")`; a mismatch there reads the default value instead of the seeded one. - -**Caveat (toolchain-version dependent)**: This naming is a property of the Rust SDK contract macros. This project pins guest `miden = "=0.14.0-rc.1"` and the compiler/build-support source to immutable revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`; its isolated compiler reports `cargo-miden 0.10.0-rc.1`. Those contract-build versions are a separate line from the host's protocol `0.16.0-rc.6` and client `0.16.0-rc.2`. The slot-naming algorithm — `package_name::snake_case(interface_segment)::field`, with non-`[A-Za-z0-9_]` mapped to `_` and `@version` stripped — is stable, but verify against the pinned guest/compiler source rather than assuming a network version. +| Package in Cargo.toml | Component Struct | Field | Storage Slot Name | +|----------------------|------------------|-------|-------------------| +| `miden:counter-account` | `CounterContract` | `count_map` | `miden_counter_account::counter_contract::count_map` | +| `miden:bank-account` | `BankAccount` | `balances` | `miden_bank_account::bank_account::balances` | +| `miden:bank-account` | `BankAccount` | `initialized` | `miden_bank_account::bank_account::initialized` | ## P6: No-std Environment @@ -148,11 +112,11 @@ extern crate alloc; use alloc::vec::Vec; ``` -## P7: Rust SDK `Asset` Is Two Words (Key + Value) +## P7: Asset ABI Is Two Words, Not One -**Severity**: Medium — reconstructing an asset from raw `asset.inner[...]` offsets is wrong +**Severity**: Medium — old `asset.inner[...]` code is stale -In the Rust SDK (`miden::Asset` / `miden_base_sys::bindings::Asset`), an `Asset` is encoded as two words: +`Asset` is now: ```rust pub struct Asset { @@ -165,21 +129,17 @@ pub struct Asset { // Reading the amount from a fungible asset let amount = asset.value[0]; -// Persisting or comparing the asset ID / vault identity +// Persisting or comparing the asset class let asset_key = asset.key; ``` -Use `asset.key` and `asset.value` (or protocol helpers) rather than reconstructing an asset from raw `asset.inner[...]` offsets. - -**SDK vs protocol `Asset`**: the two-word `{key, value}` form is the Rust SDK ABI type, where `key` is the asset ID / vault identity word. At the protocol layer, `Asset` is an enum `{ Fungible, NonFungible }`, and the vault words are obtained via `to_id_word()` / `to_value_word()`. Reading the fungible amount from `value[0]` is correct on both sides. +Do not assume the old single-word asset layout. Use `asset.key` and `asset.value`, or protocol helpers, instead of reconstructing from old `asset.inner[...]` offsets. -**Identity rename trap**: do not blindly rename protocol asset identifiers. In the current protocol, `AssetId` is the per-asset vault identity, while `AssetClass` distinguishes assets issued by the same faucet. Classify each use by meaning before changing it; compilation alone cannot detect a semantic swap. +## P8: `Recipient::compute` Was Removed -## P8: Build Recipients with `note::build_recipient` +**Severity**: Medium — causes compilation errors after upgrading -**Severity**: Medium — calling a nonexistent `Recipient::compute` fails to compile - -Build recipients through the note binding: +Building recipients now goes through the note binding: ```rust extern crate alloc; @@ -192,82 +152,58 @@ let recipient = note::build_recipient( ); ``` -`note::build_recipient` is the Rust SDK alias for the host function `miden::protocol::note::compute_and_store_recipient`, which computes and stores the recipient in one step. You can call either name. - -## P9: P2ID Note Root — Prefer `script_root()`, Do Not Hardcode +## P9: P2ID Note Root Hardcoding **Severity**: Low-Medium — breaks after miden-standards updates -Creating P2ID output notes requires the MAST root of the P2ID script. The root changes whenever the P2ID script or the assembler/hashing changes, so a hardcoded literal is fragile and unverifiable. - -**Source of truth**: Use `P2idNote::script_root()` from `miden-standards` (returns a `NoteScriptRoot`, a `Word` newtype convertible via `.into()`). Derive the root from the dependency rather than embedding a literal, and re-derive after any dependency bump. +Creating P2ID output notes requires the MAST root digest of the P2ID script. This is typically hardcoded as a constant. -```rust -use miden_standards::note::P2idNote; - -// script_root() returns a NoteScriptRoot (a Word newtype); convert to Word when needed. -let p2id_root: Word = P2idNote::script_root().into(); -``` - -**If you must embed a constant** (e.g., inside compiler/contract code that cannot call into miden-standards), regenerate it from the current `miden-standards` version and verify it after every update. The four-limb literal below is ILLUSTRATIVE only — it will not match your build and must not be copied as-is: +For any note that is being created within the compiler code, the MAST root digest is needed. Below you find the example of a P2ID note ```rust -// ILLUSTRATIVE ONLY — will not match your build. Regenerate from -// P2idNote::script_root() for your pinned miden-standards version. -fn p2id_note_root() -> Word { - Word::try_from([ - 13362761878458161062_u64, - 15090726097241769395_u64, - 444910447169617901_u64, - 3558201871398422326_u64, - ]) - .unwrap() +fn p2id_note_root() -> Digest { + Digest::from_word( + Word::try_from([ + 13362761878458161062_u64, + 15090726097241769395_u64, + 444910447169617901_u64, + 3558201871398422326_u64, + ]) + .unwrap(), + ) } ``` -**Risk**: If miden-standards updates the P2ID script, any hardcoded digest becomes invalid and withdrawals silently fail. +**Risk**: If miden-standards updates the P2ID script, this digest becomes invalid and withdrawals silently fail. -**NoteType for P2ID**: P2ID output notes created in contract code are constructed with `NoteType::from(felt!(...))` — `felt!(0)` for private, `felt!(1)` for public (see P10). The kernel rejects any note type other than `0` (private) or `1` (public) with `ERR_NOTE_INVALID_TYPE`. A common working pattern reads the note type from an input note's storage and forwards it through `NoteType::from(note_type)`. +**Mitigation**: Use `P2idNote::script_root()` from miden-standards if available, or verify the hardcoded root matches the current version after dependency updates. + +**NoteType for P2ID**: P2ID output notes created in contract code should use the private note type value via `NoteType::from(felt!(2))` (see P10). Using the public note type triggers an opaque "missing details in advice provider" error at execution time. See [miden-bank withdraw](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/contracts/bank-account/src/lib.rs) for the working pattern. ## P10: NoteType Variants Unavailable in Compiler SDK -**Severity**: Critical -- wrong values panic at runtime, named variants cause compilation errors +**Severity**: Medium -- causes compilation errors -Named enum variants (`NoteType::Private`, `NoteType::Public`) don't exist in contract code — the SDK `NoteType` is an unvalidated transparent `Felt` wrapper. Construct via `NoteType::from()`: +Named enum variants (`NoteType::Private`, `NoteType::Public`, `NoteType::Encrypted`) don't exist in contract code. Construct via `NoteType::from()`: | NoteType | Value | |----------|-------| -| Private (default) | `NoteType::from(felt!(0))` | | Public | `NoteType::from(felt!(1))` | +| Private | `NoteType::from(felt!(2))` | +| Encrypted | `NoteType::from(felt!(3))` | -**Note-type encoding**: the note type is 1-bit — `Private = 0` (the protocol default) and `Public = 1`. Only these two values exist; there is no `Encrypted` type. The SDK wrapper does no validation, so an out-of-range value (e.g. `felt!(2)` or `felt!(3)`) is not caught at compile time — the kernel rejects it at execution time with `ERR_NOTE_INVALID_TYPE` (it asserts `note_type <= 1`). - -When a note forwards a caller-supplied note type, read it from the note's storage and pass it straight into `NoteType::from(note_type)`. +See [miden-bank bank-account](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/contracts/bank-account/src/lib.rs) for `NoteType::from(note_type)` usage. ## P11: Note Scripts Cannot Call Native Account Functions **Severity**: High -- causes runtime failures -Note scripts cannot call `native_account::add_asset()` or other `native_account::` functions directly. The kernel's `authenticate_account_origin` check rejects these calls from a note context. Instead, note scripts must call an account component method (through the `#[account(...)]` wrapper), which then performs the privileged `native_account::` operation internally. +Note scripts cannot call `native_account::add_asset()` or other `native_account::` functions directly. The kernel's `authenticate_account_origin` check rejects these calls from a note context. Instead, note scripts must call an account component method, which then calls `native_account::add_asset()` internally. -See `contracts/increment-note/src/lib.rs` for the wrapper pattern: the note declares its consuming account via `#[account(counter_account::CounterContract)] pub struct Wallet;` and, inside `#[note_script] fn run(self, _arg: Word, account: &mut Wallet)`, calls the component methods on that wrapper (`account.get_count()`, `account.increment_count()`) rather than any `native_account::` function directly. Any asset mutation (e.g. `native_account::add_asset()`) must likewise live inside a component method that the note calls through the wrapper, never in the note script itself. +See [miden-bank deposit-note](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/contracts/deposit-note/src/lib.rs) for the correct pattern: the note script calls `bank_account::deposit()`, which internally calls `native_account::add_asset()`. ## P12: Note Inputs Are Immutable After Creation **Severity**: Low -- causes incorrect architecture -Note inputs (the Felt data the `#[note]` macro deserializes into `self`, read at runtime via `active_note::get_storage()`) are baked at note creation time and cannot be modified after creation. Design the typed note struct's field set and field order carefully before deployment; any later change is a breaking change for existing notes. - -## P13: Compiler and Package-Cache Provenance - -**Severity**: High -- the wrong compiler can build the wrong protocol line or leave stale dependency metadata - -This project uses the isolated `cargo-miden 0.10.0-rc.1` installed from exact compiler revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, not an ambient Cargo subcommand. For direct builds, hooks, tests, plain Cargo, and IDE analysis, derive the binary beneath `${CARGO_HOME:-$HOME/.cargo}/miden-v16-0.10.0-rc.1/bin/cargo-miden`, require its absolute path and exact version, and pass that path through `CARGO_MIDEN` where the build-support wrapper may launch it. - -Every contract crate pins `miden = "=0.14.0-rc.1"` and `miden-sdk-build-script-support` to that same immutable revision, and its `build.rs` calls `prepare_package_cache()`. Use a checkout-private `CARGO_TARGET_DIR`, because Cargo may reuse build-script output between same-name crates that share a target. Never point `MIDENC_PACKAGE_CACHE` at a manually prepared directory to bypass staging; the helper owns its content-addressed generations and must propagate nested build failures. - -## P14: Absolute Account Updates Use Patches - -**Severity**: High -- confusing relative summaries with absolute updates can silently produce the wrong state transition - -An `ExecutedTransaction` exposes an absolute `AccountPatch`; update an in-memory account with `account.apply_patch(executed.account_patch())?`. `TransactionSummary::account_delta()` deliberately remains a relative `AccountDelta` used to describe the transaction summary. Do not substitute that relative summary for an absolute account update. +The Felt slice that the `#[note]` macro deserializes into `self` is baked at note creation time and cannot be modified after creation. Design the typed note struct's field set and field order carefully before deployment; any later change is a breaking change for existing notes. diff --git a/.claude/skills/rust-sdk-source-guide/SKILL.md b/.claude/skills/rust-sdk-source-guide/SKILL.md index c733d1b..2dd39d2 100644 --- a/.claude/skills/rust-sdk-source-guide/SKILL.md +++ b/.claude/skills/rust-sdk-source-guide/SKILL.md @@ -22,9 +22,9 @@ Rule of thumb: if the task involves more than one contract or a pattern not cove This is the single highest-leverage practice for AI-assisted Miden development. -**Build loop**: After every contract edit, invoke the verified isolated compiler directly: `"${CARGO_HOME:-$HOME/.cargo}/miden-v16-0.10.0-rc.1/bin/cargo-miden" miden build --manifest-path contracts//Cargo.toml --release`. The project's build hook derives and verifies that same absolute binary independently of ambient `PATH`. If the build fails: +**Build loop**: After every contract edit, run `cargo miden build --manifest-path contracts//Cargo.toml --release`. The project's build hook does this automatically. If the build fails: 1. Read the error message -2. Translate obvious SDK/compiler errors first: +2. Translate obvious SDK migration errors first: - `.as_u64()` -> `.as_canonical_u64()` - `Recipient::compute(...)` -> `note::build_recipient(...)` - `Value` -> `StorageValue` @@ -33,7 +33,7 @@ This is the single highest-leverage practice for AI-assisted Miden development. 4. Adapt the working pattern to your use case 5. Rebuild -**Test loop**: Write tests alongside contracts. Run `cargo test -p integration --release` (tests compile the contracts via `build_project_in_dir()`, so always build contracts before running them). When tests fail: +**Test loop**: Write tests alongside contracts. Run full repo checks with `cargo make test` (or `cargo test -p integration --release` for a faster integration-only loop). When tests fail: 1. Check the error — is it a build error, a runtime assertion, or a proof failure? 2. For assertion failures: check felt arithmetic (modular wrapping) and storage slot naming 3. For unexpected behavior: compare your code against the closest working example in source repos @@ -51,7 +51,7 @@ The basic skills (rust-sdk-patterns, rust-sdk-testing-patterns, miden-concepts, - When you find a useful pattern in source, extract just what you need — the exact API call, the exact data layout, the exact test setup. **Using sub-agents for exploration**: -- Launch an explore sub-agent with a specific question: "At compiler revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, find how `#[account(...)]` generates and scopes one trait per referenced interface." +- Launch an explore sub-agent with a specific question: "Find how P2ID output notes are created in the miden-bank repository" - The sub-agent searches, reads the relevant files, and returns a focused summary - Your main context stays clean for implementation @@ -72,68 +72,65 @@ When stuck at any stage: search the source repos for a similar working pattern. ## Miden Source Repository Map -Clone these repos alongside your project for reference. Pin the exact refs before using any file as API evidence. +Clone these repos alongside your project for reference. Claude will explore them when needed for advanced patterns. ```bash -# Required: protocol layer — standard note types, account components, and MockChain -git clone --branch v0.16.0-rc.6 https://github.com/0xMiden/protocol.git ../protocol +# Required: contains standard note types and account components +git clone --depth 1 --branch main https://github.com/0xMiden/miden-base.git ../miden-base -# Required: client API for deployment and chain interaction -git clone --branch v0.16.0-rc.2 https://github.com/0xMiden/miden-client.git ../miden-client +# Required: contains SDK, compiler, and 12 working examples +git clone --depth 1 --branch main https://github.com/0xMiden/compiler.git ../compiler -# Required: guest SDK macros, examples, build support, and compiler pipeline. -git clone https://github.com/0xMiden/compiler.git ../compiler -git -C ../compiler checkout 2a5ebf830c910aa5f7bf53ee4df398915ab12f7a +# Required: contains client API for deployment and chain interaction +git clone --depth 1 --branch main https://github.com/0xMiden/miden-client.git ../miden-client -# Required when inspecting MAST/package/VM APIs. -git clone --branch v0.29.1 https://github.com/0xMiden/miden-vm.git ../miden-vm - -# Runtime-only reference for the exact DevNet node package. -git clone --branch v0.16.0-rc.1 https://github.com/0xMiden/miden-node.git ../miden-node +# Recommended: complete working banking app with advanced patterns in the `examples/miden-bank` folder of the tutorials repo +git clone --branch main https://github.com/0xMiden/tutorials.git ../tutorials ``` -### Two version lines and MSRV - -Do not conflate the contract-build line with the host/runtime line: - -- **Contract build:** guest `miden = "=0.14.0-rc.1"`, `miden-sdk-build-script-support`, `cargo-miden`, and `midenc` come from immutable compiler revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`; both executables report `0.10.0-rc.1`. This compiler source resolves protocol rc.4 and VM 0.29 internally. -- **Host integration:** `miden-client`/SQLite store are `0.16.0-rc.2`, protocol/standards/testing are `0.16.0-rc.6`, and `miden-mast-package` is `0.29.1`. The DevNet node package is `0.16.0-rc.1` and its official source pins protocol rc.4. - -The highest MSRV controls the checkout: compiler/guest work needs Rust 1.97; protocol and VM need 1.96.1; the client needs 1.96. `wasm32-wasip2` is required for contract compilation. The integration crate must not depend on the `cargo-miden` library: `build_project_in_dir()` launches the verified isolated binary and reads its emitted `.masp` with `miden-mast-package 0.29.1`. +**Note**: These commands clone the stable `main` branch. Only use `--branch next` if the user explicitly requests the experimental/upcoming version of the compiler or source repos. ### `compiler/` — The Rust-to-MASM Compiler Contains the SDK that powers `#[component]`, `#[note]`, and `#[tx_script]` macros. -- **`examples/`** — working examples covering core SDK patterns: account components, note scripts, transaction scripts, authentication components (NoAuth, RPO Falcon512), wallets, and storage. These are the most reliable reference for "how to write X" questions. Note: there is no faucet example here — for faucet reference, use `crates/miden-standards/src/account/faucets/fungible/mod.rs` (the `FungibleFaucet` component) in the protocol repo, or the compiler's `tests/integration/src/sdk/base/faucet.rs` faucet binding test. -- **`sdk/sdk/MIGRATION.md`** — authoritative migration notes for contract macros, including `#[account_procedure]`, one generated trait per `#[account(...)]` interface, the required build-support wrapper, and embedded component WIT. -- **`sdk/build-script-support/`** and **`extra/templates/project/`** — authoritative only at the frozen revision for package-cache plumbing and the three packaging adaptations used by this project. +- **`examples/`** — 12 working examples covering every SDK pattern: account components, note scripts, transaction scripts, authentication components, wallets, faucets, storage. These are the most reliable reference for "how to write X" questions. -**WARNING**: Prefer `examples/` for contract API patterns. Read `sdk/sdk/MIGRATION.md`, `sdk/build-script-support/`, or template packaging only for the specific build/migration question they define; do not generalize unrelated compiler internals into contract APIs. +**WARNING**: Stay in `examples/` only. Do NOT explore compiler internals (`sdk/`, `codegen/`, etc.) — they are implementation details that will confuse the agent and lead to incorrect code. **Explore when**: Writing any new contract type, finding working code examples for patterns not covered by skills. -### `protocol/` — Protocol Layer and Standard Library +### `miden-base/` — Protocol Layer and Standard Library -The protocol repo (`github.com/0xMiden/protocol`; primary crate `miden-protocol`). Contains the protocol specification, standard components, and standard note types. +Contains the protocol specification, standard components, and standard note types. -- **`crates/miden-standards/`** — Standard note types (P2ID, P2IDE, SWAP, PSWAP, BURN, MINT) and standard account components (BasicWallet, FungibleFaucet, authentication components). Explore to understand note flow patterns and data layouts. +- **`crates/miden-standards/`** — Standard note types (P2ID, P2IDE, SWAP, BURN, MINT) and standard account components (BasicWallet, BasicFungibleFaucet, authentication components). Explore to understand note flow patterns and data layouts. - **`crates/miden-protocol/asm/kernels/transaction/`** — The MASM transaction kernel. Every Rust SDK function (e.g., `native_account::add_asset`, `output_note::create`, `faucet::mint`) maps to a procedure defined here. Start with `api.masm` to find the procedure signature and stack contract, then read the implementation in `lib/` (e.g., `lib/output_note.masm`, `lib/account.masm`, `lib/epilogue.masm`). Useful for understanding exactly what happens under the hood -- for example, whether a function touches the vault, what the conservation check compares, or how note assets are tracked. - **`crates/miden-tx/`** — Rust execution engine (executor, prover, host). Orchestrates transaction execution but rarely needed for understanding contract behavior. Explore only if debugging execution infrastructure or host-level behavior. -- **`crates/miden-testing/`** — MockChain implementation internals. Explore when you need to understand testing infrastructure beyond what the rust-sdk-testing-patterns skill covers. +- **`crates/miden-testing/`** — MockChain implementation internals. Explore when you need to understand testing infrastructure beyond what the testing-patterns skill covers. -**Note**: Protocol standard components are composed from host code. A Rust guest can call a component interface only through a built dependency package with embedded WIT and an `#[account(...)]` wrapper; do not assume a host-side standard component automatically supplies that guest interface. Use the frozen compiler `basic-wallet` example when you need a callable Rust component pattern. +**Note**: Standard components (BasicWallet, etc.) are MASM-only and not callable from Rust SDK (see [compiler#936](https://github.com/0xMiden/compiler/issues/936)). Explore miden-standards to understand note flows and data layouts, not for finding callable Rust APIs. **Explore when**: Understanding note flows, P2ID/SWAP/faucet data layouts, or what SDK functions actually do under the hood (via the kernel MASM). ### `miden-client/` — Client Library -The client repo (`github.com/0xMiden/miden-client`). Contains the Rust API for deploying contracts and interacting with the Miden network. +Contains the Rust API for deploying contracts and interacting with the Miden network. - Rust client for building transactions, syncing state, managing accounts and notes - CLI tool source code for reference on client usage patterns -**Explore when**: Deploying contracts to an approved network, submitting transactions, syncing state, and managing notes on-chain. +**Explore when**: Deploying contracts to testnet, submitting transactions, syncing state, managing notes on-chain. + +### `miden-bank/` — Working Example Application + +A complete banking application built with the Rust SDK. Demonstrates advanced patterns that go beyond the basic skills. + +- Multiple contract types working together (account, deposit note, withdraw note, tx script) +- Advanced patterns: `StorageMap` + `StorageValue` composition, felt arithmetic safety, cross-component calls, P2ID output note creation from within contracts +- Multi-step integration tests with output note verification + +**Explore when**: Building multi-contract applications, understanding how pieces fit together, seeing a complete working app end-to-end. --- @@ -141,16 +138,16 @@ The client repo (`github.com/0xMiden/miden-client`). Contains the Rust API for d | Building This | Explore These Repos | What to Look For | |---|---|---| -| Account component with storage | `compiler/` examples, this project's contracts | `StorageMap` / `StorageValue` patterns, `#[account_procedure]` declarations | -| Note script | `compiler/` examples, this project's contracts | `#[note_script]` pattern, generated account-interface traits, typed note fields | -| Transaction script | `compiler/` examples | `#[tx_script]` pattern, generated account-interface traits | -| Authentication component | `compiler/` examples | Auth component patterns (NoAuth, RPO Falcon512) | -| Faucet (token minting) | `protocol/` standards (`crates/miden-standards/src/account/faucets/fungible/mod.rs`), `compiler/` faucet binding test (`tests/integration/src/sdk/base/faucet.rs`) | `FungibleFaucet` component, `FungibleFaucet::builder()`, mint/burn pattern | -| P2ID output notes | `compiler/` examples, `protocol/` standards (data layouts) | `note::build_recipient`, script root, `output_note` creation | -| Swap notes | `protocol/` standards (data layouts) | SwapNote data layout, tag construction, payback flow | -| Multi-step tests | `protocol/crates/miden-testing/`, this project's integration test | Build transaction → execute → prove → verify, output note verification | +| Account component with storage | `compiler/` examples, `miden-bank/` contracts | `StorageMap` / `StorageValue` patterns, pub method signatures | +| Note script | `compiler/` examples, `miden-bank/` contracts | `#[note_script]` pattern, cross-component calls, note storage parsing | +| Transaction script | `compiler/` examples, `miden-bank/` contracts | `#[tx_script]` pattern, Account binding import | +| Authentication component | `compiler/` examples | Auth component patterns (NoAuth, Falcon512, ECDSA) | +| Faucet (token minting) | `compiler/` examples | BasicFungibleFaucet example, mint/burn pattern | +| P2ID output notes | `miden-bank/` contracts, `miden-base/` standards (data layouts) | `note::build_recipient`, script root, `output_note` creation | +| Swap notes | `miden-base/` standards (data layouts) | SwapNote data layout, tag construction, payback flow | +| Multi-step tests | `miden-bank/` integration tests | Init → operate → verify flow, output note verification | | Client deployment | `miden-client/` | TransactionRequestBuilder, sync, submit patterns | -| SDK function internals | `protocol/` kernel (`crates/miden-protocol/asm/kernels/transaction/`) | `api.masm` for procedure signatures, `lib/*.masm` for implementations | +| SDK function internals | `miden-base/` kernel (`crates/miden-protocol/asm/kernels/transaction/`) | `api.masm` for procedure signatures, `lib/*.masm` for implementations | --- @@ -159,22 +156,23 @@ The client repo (`github.com/0xMiden/miden-client`). Contains the Rust API for d These patterns go beyond what the basic skills cover. For each, the source repos contain working implementations. ### Multi-Component Accounts -Accounts can include standard components (BasicWallet, authentication) alongside custom logic at account creation time. Host code composes installed components; Rust guest calls additionally require a built dependency package with embedded WIT and an `#[account(...)]` wrapper. The frozen `compiler/` examples show the callable component side. +Accounts can include standard components (BasicWallet, authentication) alongside custom logic at account creation time. Standard components are MASM-only (not callable from Rust), but they are composed into accounts via the testing/deployment infrastructure. The `compiler/` examples show how to compose accounts with multiple components. ### Output Note Creation from Contracts -Create output notes (like P2ID) from within contract code. Requires building a recipient with `note::build_recipient(serial_num, script_root, storage)` and then using `output_note::create(...)`. Ground the exact call shape in the frozen compiler examples and the protocol standard note implementation. +Create output notes (like P2ID) from within contract code. Requires building a recipient with `note::build_recipient(serial_num, script_root, storage)` and then using `output_note::create(...)`. The `miden-bank/` withdraw pattern demonstrates this end-to-end. ### Note Storage Protocol -A `#[note]` struct's fields define the serialized Felt representation. The macro deserializes those fields in declaration order into `self` before `#[note_script]` runs; custom field types must implement the current felt-representation traits. Attached assets remain separate and their creation-time values are read with `active_note::get_initial_assets()`. +Notes carry storage data as a `Vec` baked at creation time. The `#[note]` macro generates a `TryFrom<&[Felt]>` for the note struct via the `FromFeltRepr` trait, so the `#[note_script]` method receives the deserialized note as `self` (by value); the script reads typed fields with `self.` and never indexes the raw Felt slice. +Attached assets are separate and should be read with `active_note::get_assets()`. ### Atomic Swaps -The standard SwapNote in `protocol/` (`crates/miden-standards/src/note/swap.rs`) creates a payback P2ID note automatically when consumed. Explore the SwapNote builder to understand tag construction, storage layout, and the payback mechanism. +The standard SwapNote in `miden-base/` creates a payback P2ID note automatically when consumed. Explore the SwapNote builder to understand tag construction, storage layout, and the payback mechanism. ### Account Initialization -Use `#[tx_script]` to initialize accounts before they accept operations. Mark the component method with `#[account_procedure]`, expose it through an `#[account(...)]` wrapper, and call it through the generated interface trait. +Use `#[tx_script]` to initialize accounts before they accept operations. The `miden-bank/` init-tx-script calls `account.initialize()` to set an initialization flag, which is checked before every operation. ### Token Creation (Faucets) -Faucet accounts mint and burn tokens. The `protocol/` `FungibleFaucet` standard component (`crates/miden-standards/src/account/faucets/fungible/mod.rs`) shows how to create and manage fungible tokens; construct it via `FungibleFaucet::builder().name(..).symbol(..).decimals(..).max_supply(..).build()?`. There is no faucet example in `compiler/examples/`; for an SDK-level faucet binding reference use the compiler's `tests/integration/src/sdk/base/faucet.rs`. +Faucet accounts mint and burn fungible or non-fungible tokens. The `compiler/` fungible-faucet example and `miden-base/` BasicFungibleFaucet standard component show how to create and manage tokens. ### P2ID with Expiration (P2IDE) -Send assets with a deadline — the sender can reclaim after the block height passes. The `compiler/` p2ide-note example and `protocol/` P2IDE standard (`crates/miden-standards/src/note/p2ide.rs`) show the timelock pattern. +Send assets with a deadline — the sender can reclaim after the block height passes. The `compiler/` p2ide-note example and `miden-base/` P2IDE standard show the timelock pattern. diff --git a/.claude/skills/rust-sdk-testing-patterns/SKILL.md b/.claude/skills/rust-sdk-testing-patterns/SKILL.md index f1f5f8d..b838ab0 100644 --- a/.claude/skills/rust-sdk-testing-patterns/SKILL.md +++ b/.claude/skills/rust-sdk-testing-patterns/SKILL.md @@ -1,49 +1,25 @@ --- name: rust-sdk-testing-patterns -description: Guide to testing Miden smart contracts with MockChain on the protocol v0.16 RC stack. Covers test setup, contract building, account/note creation, transaction execution, storage verification, faucet setup, output note verification, block numbering, multi-transaction tests, and asset-bearing notes. Use when writing, editing, or debugging Miden integration tests. +description: Guide to testing Miden smart contracts with MockChain. Covers test setup, contract building, account/note creation, transaction execution, storage verification, faucet setup, output note verification, block numbering, multi-transaction tests, and asset-bearing notes. Use when writing, editing, or debugging Miden integration tests. --- # Miden Testing Patterns (MockChain) -These patterns target the frozen v0.16 RC stack: `miden-client 0.16.0-rc.2`, protocol/standards/testing `0.16.0-rc.6`, and `miden-mast-package 0.29.1`. - -The **authoritative working example** in this project is the counter contract: [counter_test.rs](../../../integration/tests/counter_test.rs) is a complete test covering imports, MockChain setup, contract building, account creation with storage, note creation, transaction execution, and storage verification. Mirror it for the patterns below. - ## Test File Setup Tests go in `integration/tests/`. All tests are async and use MockChain for local execution without a network. -The imports [counter_test.rs](../../../integration/tests/counter_test.rs) relies on are: - -```rust -use std::{path::Path, sync::Arc}; - -use integration::helpers::{build_project_in_dir, counter_storage_slot, COUNTER_STORAGE_KEY}; -use miden_client::{ - account::{ - component::InitStorageData, AccountBuilder, AccountComponent, AccountType, StorageMapKey, - }, - auth::AuthSchemeId, - crypto::RandomCoin, - note::NoteScript, - transaction::RawOutputNote, - Word, -}; -use miden_standards::testing::note::NoteBuilder; -use miden_testing::{AccountState, Auth, MockChain}; -``` +See [counter_test.rs](../../../integration/tests/counter_test.rs) for a complete working test covering imports, MockChain setup, contract building, account creation with storage, note creation, transaction execution, and storage verification. ## Step-by-Step Test Pattern ### 1. Initialize MockChain Builder -Start from `let mut builder = MockChain::builder();` (see [counter_test.rs](../../../integration/tests/counter_test.rs)). +See [counter_test.rs](../../../integration/tests/counter_test.rs) line 21 for the pattern: `let mut builder = MockChain::builder();` ### 2. Create Sender/Wallet Accounts -For a bare wallet use `builder.add_existing_wallet(Auth::BasicAuth { auth_scheme: AuthSchemeId::Falcon512Poseidon2 })` (see [counter_test.rs](../../../integration/tests/counter_test.rs)). For wallets with pre-funded assets, use `builder.add_existing_wallet_with_assets(Auth::BasicAuth { auth_scheme: AuthSchemeId::Falcon512Poseidon2 }, [FungibleAsset::new(faucet.id(), 100)?.into()])`. - -> Auth-scheme naming: `miden_client::auth` re-exports the same protocol enum under two names — `AuthScheme` (the protocol name) and `AuthSchemeId` (an alias). Both compile; the field is `Auth::BasicAuth { auth_scheme }`, and the variant `Falcon512Poseidon2` is the same on both. This project uses `AuthSchemeId::Falcon512Poseidon2`. +See [counter_test.rs](../../../integration/tests/counter_test.rs) lines 24-26 for the basic wallet pattern. For wallets with pre-funded assets, use `builder.add_existing_wallet_with_assets(Auth::BasicAuth { auth_scheme: AuthSchemeId::Falcon512Poseidon2 }, [FungibleAsset::new(faucet.id(), 100)?.into()])`. ### 3. Set Up Faucets (for fungible assets) ```rust @@ -53,133 +29,83 @@ let faucet = builder.add_existing_basic_faucet( }, "TOKEN", // token symbol 1000, // max supply - Some(10), // token_supply (None defaults to 0) + Some(10), // total_issuance (None for 0) )?; ``` -The 4th argument is `token_supply: Option` (an explicit `None` is treated as `0`). - ### 4. Build Contracts -Build each project from its directory with the `build_project_in_dir` helper, e.g. `let contract_package = Arc::new(build_project_in_dir(Path::new("../contracts/counter-account"), true)?);` (see [counter_test.rs](../../../integration/tests/counter_test.rs) and [integration/src/helpers.rs](../../../integration/src/helpers.rs) `build_project_in_dir`). +See [counter_test.rs](../../../integration/tests/counter_test.rs) lines 29-35 for the pattern using `build_project_in_dir`. ### 5. Create Account with Storage **Storage slot naming convention** (CRITICAL): ``` -:::: +[component_package_or_name]::[snake_case(component_struct)]::[field_name] ``` -The slot name is part of the on-chain storage ABI and is derived by the compiler's `#[component_storage]` macro, **not** from the Rust struct name: -- `` is the **bare** package name (`[package].name`), with no `miden:` org prefix. -- `` is the `[lib].namespace` **interface** segment — the text between the last `/` and the `@` in the namespace — snake_cased. Because it comes from the declared namespace, renaming the Rust struct cannot change the deployed slot name. -- `` is the Rust storage field's identifier (not its `description`). - -Characters outside `[A-Za-z0-9_]` are replaced with `_` in each segment. - -Example: package `counter-account` with `[lib].namespace = "miden:counter-account/counter-contract@0.1.0"` (see [contracts/counter-account/miden-project.toml](../../../contracts/counter-account/miden-project.toml)) and storage struct `CounterContractStorage` (field `count_map`) yields the slot: -- `counter_account::counter_contract::count_map` +Examples: +- Package `miden:counter-account`, component `CounterContract`, field `count_map` -> `miden_counter_account::counter_contract::count_map` +- Package `miden:bank-account`, component `BankAccount`, field `balances` -> `miden_bank_account::bank_account::balances` -Note the middle segment is `counter_contract` (the interface segment from the namespace), **not** `counter_contract_storage` (the struct) and **not** `counter_account`, and there is no `miden_` org prefix. This is exactly the string [integration/src/helpers.rs](../../../integration/src/helpers.rs) passes to `StorageSlotName::new(...)` in `counter_storage_slot()`. +Rule: Replace characters outside `[A-Za-z0-9_]` with `_` in the package or component name. -The component's storage is declared with the three-part component macro (`#[component_storage]` struct + `#[component]` trait + `#[component]` impl); the storage struct, not the trait, carries the `#[storage]` fields the slot names derive from. Callable component methods carry `#[account_procedure]` on the trait declaration. See the `rust-sdk-patterns` skill for the contract side. - -**Authoritative pattern** (from [counter_test.rs](../../../integration/tests/counter_test.rs)): build the `StorageSlotName`, seed the component's initial storage into `InitStorageData`, build the `AccountComponent` from the compiled package, then register the account with `builder.add_account_from_builder(...)`: +See [counter_test.rs](../../../integration/tests/counter_test.rs) lines 38-54 for the current pattern: populate `InitStorageData`, build the component from the compiled package, then register the account with `builder.add_account_from_builder(...)`. ```rust let counter_storage_slot = counter_storage_slot()?; let mut init_storage_data = InitStorageData::default(); -// The counter's `count_map` is a `StorageMap`; seed its fixed key with 0 -// so the increment note finds an existing entry. `insert_map_entry(slot_name, key, value)` -// takes three args: `slot_name: impl TryInto`, `key`, `value`. init_storage_data.insert_map_entry(counter_storage_slot.clone(), COUNTER_STORAGE_KEY, 0_u64)?; -let counter_component = AccountComponent::from_package(&contract_package, &init_storage_data)?; +let counter_component = + AccountComponent::from_package(&contract_package, &init_storage_data)?; let counter_account = builder.add_account_from_builder( Auth::BasicAuth { auth_scheme: AuthSchemeId::Falcon512Poseidon2, }, AccountBuilder::new([3_u8; 32]) - .account_type(AccountType::Public) + .account_type(AccountType::RegularAccountImmutableCode) + .storage_mode(AccountStorageMode::Public) .with_component(counter_component), AccountState::Exists, )?; ``` -> Account model: -> - `AccountType` is the visibility enum `{ Private, Public }`. -> - Set account visibility via `.account_type(AccountType::Public | ::Private)` — there is no separate `.storage_mode(...)` / `AccountStorageMode` on the builder. -> - Faucet-ness is determined by the installed components. - -For a **single-value** contract slot (a `StorageValue` field on-chain) instead of a map, seed it with `insert_value` — a value slot that has no schema default otherwise makes `AccountComponent::from_package` error with `InitValueNotProvided`: - +For a single-value contract slot (paired with `StorageValue` on-chain) instead of a map: ```rust -let value_slot = StorageSlotName::new("my_account::my_component::initialized")?; let mut init_storage_data = InitStorageData::default(); init_storage_data.insert_value( - StorageValueName::from_slot_name(&value_slot), - Word::default(), // zero Word (an uninitialized flag), NOT a bare integer + "miden_bank_account::bank_account::initialized", + 0_u64, )?; ``` -> Storage-seeding footgun: `InitStorageData::insert_value(name, value)` takes `value: impl Into`. The numeric `From` impls (`u8`/`u16`/`u32`/`u64`) produce a `WordValue::Atomic(string)` that the slot's schema parses — **not** a felt-positioned `Word`. Only `From` yields `[felt, 0, 0, 0]`, and `From`/`From<[Felt; 4]>`/`From<[u32; 4]>` are fully-typed words. For a `StorageValue` slot whose contract reads index `[0]`, seed a `Word` (`Word::default()` for zero). A map slot (like the counter's `count_map`) is seeded per-entry with `insert_map_entry(...)` instead. - ### 6. Create Notes -Build notes with `NoteBuilder`, seeding the `RandomCoin` from the note-script root (see [counter_test.rs](../../../integration/tests/counter_test.rs)): - -```rust -let mut note_rng = RandomCoin::new(Word::from( - NoteScript::from_package(note_package.as_ref())?.root(), -)); -let counter_note = NoteBuilder::new(sender.id(), &mut note_rng) - .package((*note_package).clone()) - .build()?; -``` - -For a note that also carries assets and inputs, configure the extra builder steps: +See [counter_test.rs](../../../integration/tests/counter_test.rs) lines 56-64 for basic note creation with `RandomCoin`, `NoteScript::from_package`, and `NoteBuilder`. +For notes with assets and inputs: ```rust -use miden_client::{asset::FungibleAsset, crypto::RandomCoin, note::NoteScript, Felt, Word}; +use miden_client::{asset::FungibleAsset, crypto::RandomCoin, note::NoteScript, Felt}; use miden_standards::testing::note::NoteBuilder; -let note_script = NoteScript::from_package(note_package.as_ref())?; -let mut note_rng = RandomCoin::new(Word::from(note_script.root())); +let mut note_rng = RandomCoin::new(NoteScript::from_package(note_package.as_ref())?.root()); let note = NoteBuilder::new(sender.id(), &mut note_rng) .package((*note_package).clone()) .add_assets([FungibleAsset::new(faucet.id(), 50)?.into()]) - .note_storage([Felt::from(42_u32), Felt::from(0_u32)])? + .note_storage([Felt::new(42), Felt::new(0)])? .build()?; ``` -> `NoteScript::root()` returns a `NoteScriptRoot` newtype. `RandomCoin::new` needs a `Word`, so convert the root explicitly with `Word::from(...root())` (equivalently `...root().into()` or `...root().as_word()`). - -> `Felt::new(u64)` is **fallible** — it returns `Result`. `note_storage` takes `impl IntoIterator`, so build each felt with the infallible `Felt::from(42_u32)` for in-range literals (`From/From/From` are infallible); for a `u64` use `Felt::new(n)?` or `Felt::new_unchecked(n)`. - ### 7. Add to MockChain and Build -Register accounts (`add_account_from_builder(...)` already registered the counter account in Step 5) and seed notes with `builder.add_output_note(RawOutputNote::Full(counter_note.clone()))`, then `let mut mock_chain = builder.build()?;` (see [counter_test.rs](../../../integration/tests/counter_test.rs)). +See [counter_test.rs](../../../integration/tests/counter_test.rs) lines 66-70 for seeding the note and building the mock chain. `add_account_from_builder(...)` has already registered the account in the builder, so at this stage you usually only need to add notes. ### 8. Execute Transaction -Build the transaction with the current staged builder, then execute and prove it (see [counter_test.rs](../../../integration/tests/counter_test.rs)): - -```rust -let tx_context = mock_chain - .build_transaction(counter_account.clone()) - .authenticated_input_notes([counter_note.id()]) - .build()?; -let executed = tx_context.execute().await?; -mock_chain.add_pending_executed_transaction(&executed)?; -mock_chain.prove_next_block()?; -``` - -The single-transaction counter test does not patch `counter_account` because it is not reused after the build; final state is read from `mock_chain.committed_account(...)` after the block is proven. Multi-transaction tests that retain an in-memory `Account` apply the executed transaction's absolute patch after each execution (see "Multi-Transaction Test Pattern" below). +See [counter_test.rs](../../../integration/tests/counter_test.rs) lines 73-82 for the full execution flow: `build_tx_context` -> `execute()` -> `add_pending_executed_transaction()` -> `prove_next_block()`. The single-transaction counter test does not call `apply_delta()` because `counter_account` is not reused after the build; final state is read from `mock_chain.committed_account(...)` after the block is proven. Multi-transaction tests that keep using the in-memory `Account` variable across steps should call `account.apply_delta(&executed.account_delta())?` after each `execute()` (see "Multi-Transaction Test Pattern" below). ### 9. Execute with Transaction Script - -A compiler project with `kind = "tx-script"` compiles to a `TransactionScript`-kind package, **not** an `Executable`. Because of that, `TransactionScript::from_package` and `Package::unwrap_program` do **not** apply to it: `from_package` calls `package.try_into_program()`, which returns `Err` for a non-executable package, and `unwrap_program` asserts the kind is `Executable` and **panics**. Build the script from the package's MAST forest plus its entry export instead: - ```rust use miden_client::transaction::TransactionScript; @@ -187,14 +113,11 @@ let tx_script_package = Arc::new(build_project_in_dir( Path::new("../contracts/my-tx-script"), true, )?); - -// Locate the entry export ("main"/"run", or the sole export) and build from parts, e.g. a -// small helper that finds the entry procedure root in the MAST forest and calls -// `TransactionScript::from_parts(package.mast.mast_forest().clone(), entrypoint)`. -let tx_script = build_tx_script_from_package(tx_script_package.as_ref())?; +let program = tx_script_package.unwrap_program(); +let tx_script = TransactionScript::new((*program).clone()); let executed = mock_chain - .build_transaction(account.clone()) + .build_tx_context(account.clone(), &[], &[])? .tx_script(tx_script) .build()? .execute() @@ -206,118 +129,96 @@ mock_chain.prove_next_block()?; let updated_account = mock_chain.committed_account(account.id())?; ``` -> Reserve `TransactionScript::from_package(&package)?` (and the `#[doc(hidden)]` `unwrap_program()`) for packages that are genuinely `Executable`. For `kind = "tx-script"` compiler packages, use `from_parts` / a `build_tx_script_from_package`-style helper as above — `from_package` returns an error and `unwrap_program()` panics on them. - ### 10. Verify Storage State -Read state with `account.storage().get_item(&slot)` / `.get_map_item(&slot, StorageMapKey::new(key))` on an in-memory `Account` you keep patch-current, or re-fetch the committed account with `mock_chain.committed_account(account.id())?` after `prove_next_block()` and assert on its storage. Map values come back as scalar words in `[value, 0, 0, 0]` layout, so read index `[0]` (see [counter_test.rs](../../../integration/tests/counter_test.rs)): - -```rust -let count = mock_chain - .committed_account(counter_account.id())? - .storage() - .get_map_item( - &counter_storage_slot, - StorageMapKey::new(COUNTER_STORAGE_KEY), - ) - .expect("Failed to get counter value from storage slot"); -assert_eq!(count[0].as_canonical_u64(), 1); -``` +See [counter_test.rs](../../../integration/tests/counter_test.rs) lines 84-96 for reading the committed account state and asserting on the result. ### 11. Verify Output Notes -**Important**: `add_output_note()` is only available on `MockChainBuilder` (before `build()`) — use it to seed the chain with existing notes. To verify output notes from a transaction, use `expected_output_notes()` on the transaction builder: +**Important**: `add_output_note()` is only available on `MockChainBuilder` (before `build()`); use it to seed the chain with existing notes. To verify output notes from a transaction, use `extend_expected_output_notes()` on `TxContextBuilder`: ```rust -use miden_client::{ - note::{Note, NoteType, PartialNoteMetadata}, - transaction::RawOutputNote, -}; +use miden_client::{note::{Note, NoteAssets, NoteMetadata, NoteRecipient}, transaction::RawOutputNote}; -// Note::new takes a PartialNoteMetadata (sender + note_type + tag). -// Build it with PartialNoteMetadata::new(sender, note_type), -// then optionally `.with_tag(tag)` (the tag defaults to NoteTag::default()). -let partial_metadata = PartialNoteMetadata::new(sender, NoteType::Public).with_tag(tag); -let expected_note = Note::new(expected_assets, partial_metadata, expected_recipient); +let expected_note = Note::new(expected_assets, expected_metadata, expected_recipient); let tx_context = mock_chain - .build_transaction(account.clone()) - .authenticated_input_notes([note.id()]) - .expected_output_notes(vec![RawOutputNote::Full(expected_note)]) + .build_tx_context(account.id(), &[note.id()], &[])? + .extend_expected_output_notes(vec![RawOutputNote::Full(expected_note)]) .build()?; // execute() will verify output notes match let executed = tx_context.execute().await?; ``` -> Note metadata: -> - `Note::new(assets, partial_metadata, recipient)` takes a `PartialNoteMetadata` (sender/type/tag only); there is no `Into` conversion on the parameter. -> - For attachment-bearing notes use `Note::with_attachments(assets, partial_metadata, recipient, attachments)` (attachments are `NoteAttachments`). - ## MockChain Note Interaction Notes flow through MockChain in four steps: -1. **Build** the note from a compiled `.masp` package via `NoteBuilder` (see "Note Construction" below). +1. **Build** the note from a compiled `.masp` package (see "Note Construction" below) or via `NoteBuilder`. 2. **Seed** with `MockChainBuilder::add_output_note(RawOutputNote::Full(note.clone()))` BEFORE `builder.build()`. This places the note on the chain so a later transaction can consume it. `add_output_note(...)` is only available on the builder; once `builder.build()` returns the `MockChain`, output notes can only appear as the result of executing a transaction. `RawOutputNote` is re-exported from `miden_client::transaction`. -3. **Consume** with `mock_chain.build_transaction(account.clone()).authenticated_input_notes([note.id()])`. The transaction's note-script execution reads the consumed note's storage and assets. -4. **Verify** expected output notes with `.expected_output_notes(vec![RawOutputNote::Full(expected.clone())])` on the transaction builder. `tx_context.execute().await?` will assert the produced output notes match. +3. **Consume** by passing the note ID to `mock_chain.build_tx_context(account, &[note.id()], &[])`. The transaction's note-script execution reads the consumed note's storage and assets. +4. **Verify** expected output notes with `.extend_expected_output_notes(vec![RawOutputNote::Full(expected.clone())])` on the `TxContextBuilder`. `tx_context.execute().await?` will assert the produced output notes match. + +After `execute()` and before `add_pending_executed_transaction(...) + prove_next_block()`: if a later step will keep using the in-memory `Account` variable (for example, to build another `tx_context` or assert account state directly), call `account.apply_delta(&executed.account_delta())?` to keep the variable in sync with the chain. Post-block reads should use `mock_chain.committed_account(account.id())?` (see Step 8 above and "Multi-Transaction Test Pattern" below). For block advancement and reference-block semantics, see "MockChain Block Numbering" below. -After `execute()` and before reusing the in-memory `Account` variable, call `account.apply_patch(executed.account_patch())?` to apply the transaction's absolute `AccountPatch`. Post-block reads may instead use `mock_chain.committed_account(account.id())?` (see Step 8 above and "Multi-Transaction Test Pattern" below). For block advancement and reference-block semantics, see "MockChain Block Numbering" below. +End-to-end multi-note example: see [miden-bank withdraw_test.rs](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/integration/tests/withdraw_test.rs) for seeding deposit + withdraw-request notes via `add_output_note(RawOutputNote::Full(...))` before `builder.build()`, then consuming the withdraw-request note and asserting an expected P2ID output note via `extend_expected_output_notes(...)` plus `prove_next_block()`. See [miden-bank deposit_test.rs](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/integration/tests/deposit_test.rs) for the simpler single-note consume + prove cycle. ## Multi-Transaction Test Pattern For contracts requiring initialization before use, each step usually needs its own `execute()` → `add_pending_executed_transaction()` → `prove_next_block()` cycle. Fetch the committed account or note state from `mock_chain` between steps before building the next context. -Whenever a test keeps reading from or reusing the **same in-memory `Account`** across transactions, call `account.apply_patch(executed.account_patch())?` after each `execute()` so later local reads see the latest absolute state. If you instead re-fetch via `mock_chain.committed_account(...)` after `prove_next_block()`, no local patch is needed; that is the single-transaction case shown in [counter_test.rs](../../../integration/tests/counter_test.rs). +Call `account.apply_delta(&executed.account_delta())?` after each `execute()` to keep the in-memory `Account` variable in sync with the chain whenever later steps reuse it (for `build_tx_context(...)`, asserting account state directly, etc.). The miden-bank tutorial tests follow this pattern between every `execute()` and `prove_next_block()`. If the test only reads final state via `mock_chain.committed_account(...)` after the last `prove_next_block()` and never reuses the in-memory variable, `apply_delta` is unnecessary; see [counter_test.rs](../../../integration/tests/counter_test.rs). -Do not generalize this rename to transaction summaries: `TransactionSummary::account_delta()` intentionally returns a relative `AccountDelta`. That relative summary is valid for commitment/summary assertions, while account mutation uses `AccountPatch` and `apply_patch()`. +See [miden-bank withdraw_test.rs](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/integration/tests/withdraw_test.rs) for a complete multi-transaction test demonstrating: initialize bank → deposit assets → withdraw assets (3 sequential transactions with state verification between each step). + +See [miden-bank deposit_test.rs](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/integration/tests/deposit_test.rs) for an end-to-end asset-bearing note test. ## MockChain Block Numbering -Genesis is block 0. Each `prove_next_block()` advances the block number by 1. In contract code, `tx::get_block_number()` returns the **reference block** — the last proven block at the time the transaction started, not the block the transaction will be included in. +Genesis is block 0. Each `prove_next_block()` advances the block number by 1. In contract code, `tx::get_block_number()` returns the **reference block**: the last proven block at the time the transaction started, not the block the transaction will be included in. ## Note Construction -Prefer `NoteBuilder` for creating notes in tests. Start from `NoteBuilder::new(sender.id(), &mut note_rng)`, then configure `.package(...)`, optional `.note_type(...)`, optional `.tag(...)`, optional `.add_assets(...)`, optional `.note_storage(...)?`, optional `.serial_number(...)`, and finally `.build()?`. Seed the `RandomCoin` from `Word::from(NoteScript::from_package(note_package.as_ref())?.root())` (see Step 6 and [counter_test.rs](../../../integration/tests/counter_test.rs)). +Prefer `NoteBuilder` (or mirror its logic with compiled `.masp` package files) for creating notes in tests. Start from `NoteBuilder::new(sender.id(), &mut note_rng)`, then configure `.package(...)`, optional `.add_assets(...)`, optional `.note_storage(...)`, and finally `.build()`. See [counter_test.rs](../../../integration/tests/counter_test.rs) for the working pattern. + +### Building Notes from `.masp` Packages + +When a test or binary needs full control over the note (custom storage Felts, deterministic serial number, P2ID-style metadata, or a real-client publish + consume flow), build directly from a compiled `.masp` package. The canonical pipeline is `NoteScript::from_package(package.as_ref())` paired with `NoteBuilder::new(sender_id, &mut RandomCoin::new(note_script.root())).package((*package).clone()).note_type(...).tag(...).add_assets(...).note_storage(...).serial_number(...).build()`. Project-template's own [counter_test.rs](../../../integration/tests/counter_test.rs) follows this same shape with `NoteBuilder` directly. + +The miden-bank tutorial codifies this as two helpers built on top of `NoteScript::from_package` + `NoteBuilder`: + +- **Real-client path** (`create_note_from_package`): calls `client.rng().draw_word()` and threads it through `NoteBuilder::serial_number(...)` for a fresh per-note serial. Used when the note will be published via a real `TransactionRequestBuilder`. See [miden-bank helpers.rs](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/integration/src/helpers.rs) (`create_note_from_package`). +- **Deterministic test path** (`create_testing_note_from_package`): omits `serial_number(...)`, letting `NoteBuilder` derive the serial deterministically from `RandomCoin::new(note_script.root())`. Used when seeding `MockChainBuilder` with a freshly-built note. See [miden-bank helpers.rs](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/integration/src/helpers.rs) (`create_testing_note_from_package`). -The serial number is what makes a note unique, and the RNG source differs between the deterministic test path and the real-client path: +Both helpers take a `NoteCreationConfig` with four fields: `note_type: NoteType`, `tag: NoteTag`, `assets: NoteAssets`, `storage: Vec`. See [miden-bank helpers.rs](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/integration/src/helpers.rs) (`NoteCreationConfig` struct + `Default` impl). To drive a cross-component note (see `rust-sdk-patterns` "Cross-Component Note Pattern"), populate `NoteCreationConfig.storage` with the serialized Felt representation of the typed note struct's fields in declaration order; the `#[note]` macro deserializes that slice into `self` before the script runs. -- **Deterministic test path**: seed the `RandomCoin` from the note-script root and omit `.serial_number(...)`, letting `NoteBuilder` derive the serial deterministically from `RandomCoin::new(Word::from(note_script.root()))`. Used when seeding `MockChainBuilder` with a freshly-built note. See [counter_test.rs](../../../integration/tests/counter_test.rs). -- **Real-client path**: pass the client's RNG directly (`NoteBuilder::new(sender.id(), client.rng())`) so each note gets a fresh serial, then publish it with a real `TransactionRequestBuilder`. See [integration/src/bin/increment_count.rs](../../../integration/src/bin/increment_count.rs), which builds the note with `client.rng()` + `.tag(0)`, publishes it via `TransactionRequestBuilder::new().own_output_notes(vec![note.clone()]).build()?`, and consumes it via `.input_notes([(note.clone(), None)]).build()?`. For the surrounding client setup (CLI side), see the `miden-client-cli` skill. +Test-side example: see [miden-bank withdraw_test.rs](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/integration/tests/withdraw_test.rs) for a storage vector reaching the note via `NoteCreationConfig { storage, ..Default::default() }` and the seeded `MockChainBuilder.add_output_note(RawOutputNote::Full(...))` call before `builder.build()`. -To drive a **cross-component note** (see the `rust-sdk-patterns` "Cross-Component Note Pattern"), populate the note's `note_storage(...)` with the serialized Felt representation of the typed `#[note]` struct's fields in declaration order; the `#[note]` macro deserializes that slice into `self` before the script runs. The increment note carries no such storage — its `#[note_script] fn run(self, _arg: Word, account: &mut Wallet)` simply calls `account.get_count()` / `account.increment_count()`. +Binary-side example: see [miden-bank deposit.rs](https://github.com/0xMiden/tutorials/blob/main/examples/miden-bank/integration/src/bin/deposit.rs) for `build_project_in_dir(...)` to produce the `.masp` package, `create_note_from_package(...)` to assemble the note, then `TransactionRequestBuilder::own_output_notes(vec![note.clone()])` and `input_notes([(note.clone(), None)])` to publish and consume. For the surrounding client setup (CLI side), see the `miden-client-cli` skill. ## Asset-Bearing Note Example To create a note that carries fungible assets in tests: -1. Create a `FungibleAsset` from a faucet ID and amount, e.g. `FungibleAsset::new(faucet.id(), 50)?`, and wrap into `NoteAssets::new(vec![Asset::Fungible(asset)])?` (or pass via `NoteBuilder::add_assets`). -2. Seed a `RandomCoin` from `Word::from(NoteScript::from_package(note_package.as_ref())?.root())` (the conversion turns the `NoteScriptRoot` into the `Word` that `RandomCoin::new` expects). -3. Pass the asset into `NoteBuilder::add_assets(...)` and any note inputs into `note_storage(...)?`. `note_storage` wants `Item = Felt`; build each input with the infallible `Felt::from(_u32)` for in-range literals (not `Felt::new(u64)`, which is fallible), or `Felt::new_unchecked(n)` for u64 inputs (see Step 6). +1. Create a `FungibleAsset` from a faucet ID and amount. +2. Seed a `RandomCoin` from `NoteScript::from_package(note_package.as_ref())?.root()`. +3. Pass the asset into `NoteBuilder::add_assets(...)` and any note inputs into `note_storage(...)`. 4. Finish with `.package((*note_package).clone()).build()?`. The faucet must be set up first (see Step 3) and the sender wallet must hold sufficient assets (see Step 2). ## Key Dependencies -See [integration/Cargo.toml](../../../integration/Cargo.toml) for the exact host versions: client/SQLite store `0.16.0-rc.2`, protocol/standards/testing `0.16.0-rc.6`, and MAST package `0.29.1`. The integration graph intentionally has no `cargo-miden` library dependency. `build_project_in_dir()` launches the isolated absolute `cargo-miden 0.10.0-rc.1` binary installed from compiler revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, parses its `Compiled ` report, and deserializes the package. Contract manifests pin guest `miden = "=0.14.0-rc.1"` and build support to that same revision. +See [integration/Cargo.toml](../../../integration/Cargo.toml) for the current dependency versions used in this project. ## Validation Checklist - [ ] Test function is `async` and uses `#[tokio::test]` -- [ ] Auth uses `AuthSchemeId::Falcon512Poseidon2` (or the equivalent `AuthScheme::Falcon512Poseidon2` — both name the same protocol enum) -- [ ] `AccountBuilder` uses `.account_type(AccountType::Public | ::Private)` and no `.storage_mode(...)` / no `AccountStorageMode` -- [ ] Storage slot names follow `::::` (bare package name, `[lib].namespace` interface segment, e.g. `counter_account::counter_contract::count_map`) -- [ ] Map slots seeded per-entry via `InitStorageData::insert_map_entry(slot, key, value)`; value slots without a schema default seeded via `InitStorageData::insert_value(StorageValueName::from_slot_name(&slot), ..)` with a `Word` (e.g. `Word::default()`), not a bare integer (numeric `Into` yields an atomic string, not a felt-positioned word) +- [ ] Storage slot names follow `package_or_name::component_struct::field_name` pattern - [ ] All contracts built before account/note creation -- [ ] Transactions use `build_transaction(...).authenticated_input_notes([...]).build()` -- [ ] Host map lookups wrap keys with `StorageMapKey::new(...)`; `InitStorageData::insert_map_entry(...)` still accepts the raw schema key -- [ ] `NoteScript::root()` converted with `Word::from(...)` before seeding `RandomCoin` -- [ ] Note-storage felts built with infallible `Felt::from(_u32)` or `Felt::new_unchecked(_u64)` (`Felt::new(u64)` returns `Result`, so a bare `[Felt::new(..)]` array does not satisfy `Item = Felt`) -- [ ] `Note::new(...)` is passed a `PartialNoteMetadata` (not `NoteMetadata`) -- [ ] `kind = "tx-script"` packages built with `from_parts` / a `build_tx_script_from_package`-style helper (not `from_package`/`unwrap_program`, which error/panic on them) +- [ ] Account storage seeded via `InitStorageData` - [ ] `prove_next_block()` called after `add_pending_executed_transaction()` -- [ ] Post-block assertions read state from `mock_chain.committed_account(...)` (or `account.apply_patch(executed.account_patch())` is called when reusing an in-memory `Account` across transactions) +- [ ] Post-block assertions read state from `mock_chain.committed_account(...)` or other committed chain views - [ ] Notes added to `MockChainBuilder` via `add_output_note(RawOutputNote::Full(...))` before `build()` - [ ] Faucet set up before creating assets diff --git a/tasks/lessons.md b/tasks/lessons.md deleted file mode 100644 index 633a79e..0000000 --- a/tasks/lessons.md +++ /dev/null @@ -1,11 +0,0 @@ -# Migration execution lessons - -- A post-release moving branch is never sufficient provenance for a release migration. Freeze the earliest coherent commit whose package versions, dependency spine, and changelog all identify the requested release line, and explicitly scan for the next release's version families before using it. -- Treat compiler version strings and compiler capabilities as separate evidence. When a build helper depends on a post-tag command checkpoint, install the helper and compiler from the same immutable source and prove the pair with a disposable end-to-end capability probe. -- Keep packaging references and source references separate. Copy only settled packaging changes from a template scaffold; use CI-maintained examples and the migration guide for contract source adaptations. -- Preserve history boundaries even when the filesystem makes Git inconvenient. If `.git/index.lock` is denied, stop and request the exact required Git operation instead of bypassing policy, synthesizing commits with plumbing, or folding a prerequisite commit into the migration diff. -- When a sandbox forces a standalone Cargo probe under a workspace, isolate it with a probe-only empty `[workspace]` table and run Cargo from the probe root so its `.cargo/config.toml` selects the intended guest target. -- Treat a compiler executable pin and a host library dependency as different boundaries. Before promising that two prerelease lines can coexist, resolve the full host graph: Cargo will not duplicate semver-compatible prereleases from the same source when exact requirements conflict. Keep the compiler outside the host graph and pass only its versioned artifact across the process boundary when the frozen compiler and client intentionally use different protocol RCs. -- A printed prerelease version is not proof that registry bits equal an unreleased same-version pipeline. When a post-tag pipeline adds generated metadata such as embedded WIT without bumping the package version, test the registry guest against the required cross-package flow; if it fails, source both tool and guest SDK from the one authorized immutable commit and freeze transitive VM patches to that commit's lock rather than accepting later compatible releases. -- Canonical-ABI argument tupling and the direct FPI stack budget are separate decisions. Parameter count/width determines the argument tuple before an indirect-result pointer is appended; the later pointer can turn 16 direct parameter felts into a rejected 17-felt call. -- When a user cites a cross-repository audit handoff while discussing GitHub workflow, resolve the cited repository and requested sequencing before changing remotes or publishing. Do not infer that an unrelated PR handoff authorizes creating a fork. diff --git a/tasks/todo.md b/tasks/todo.md deleted file mode 100644 index 27908ba..0000000 --- a/tasks/todo.md +++ /dev/null @@ -1,906 +0,0 @@ -# project-template Miden v0.15 to v0.16 migration plan - -First independent audit status: **BLOCKED** - -Second independent audit status: **NEEDS HUMAN — the requested human authorization is now recorded below; its technical findings are incorporated in this revision** - -Third independent audit status: **NEEDS HUMAN — it did not receive the direct human approval messages; its four technical findings are incorporated in this revision** - -Previous complete-plan audit status: **PASS for the superseded 327-line task revision; it does not attest this newer task revision** - -Current independent audit status: **REVISE — the final implementation audit found a contract build-utils rc.6 leak, two asset-guidance errors, a non-fresh plain-Cargo reproducibility gate, and stale commit/drift evidence; the dependency/guidance findings are fixed in signed correction commit `8de62fe27d0873ab560c891c6ab274e35ceab80e`, and this evidence-only reconciliation addresses the remaining record/reproducibility findings** - -Current execution status: **FINAL EVIDENCE RECONCILED; PR-READINESS CORRECTION VERIFIED — signed final commit-evidence correction `5ef123fe1332b87f82ff68f750be60461b6db284` is a one-file child of signed evidence commit `03068ada8ea2bf45fd32660810a4d46bef3d1d03`; the signed commit containing this task record corrects the independently re-audited P3/FPI argument-tupling guidance and records its direct `5ef123fe...` parent without claiming its own SHA; the user explicitly authorized pushing this branch directly to `0xMiden/project-template` and opening a draft PR, but no merge is authorized** - -Task source: `/Users/philipp/Documents/Work/Miden-Coding/ai-tasks/v16-migration/tasks/TASK-project-template-v16-migration.md` (**current 353-line revision read in full; SHA-256 `c095f2c61ebb8a91eb0689fc77004176dc9de7333ba2bd3782bb1a1a1ff836ca`**) - -Required Rust-contract reference map: `/Users/philipp/Documents/Work/Miden-Coding/ai-tasks/v16-migration/resources/V16-RUST-CONTRACT-REFERENCE-MAP.md` (**read in full on 2026-08-25; 222/222 lines**) - -Target repository: `/Users/philipp/Documents/Work/Miden-Coding/project-template` - -Implementation branch: `kbg/chore/v16-migration` - -Evidence directory: `/Users/philipp/Documents/Work/Miden-Coding/ai-tasks/v16-migration/outputs` - -## Objective and invariants - -Port the standalone `0xMiden/project-template` repository from Miden v0.15 to the pinned v0.16 RC stack. This is an API migration, not a rewrite. - -The implementation must preserve all observable behavior: - -- Keep both existing contracts, the single `counter_test`, and the single `increment_count` binary. -- Preserve the test name, test scenario, and final assertion that the stored count is exactly `1`. -- Preserve the binary's zero-argument CLI, execution order, output fields, account roles, note flow, and lack of a post-consumption sync/storage read. -- Apply one narrowly authorized, temporary runtime exception: replace the helper's hard-coded `Endpoint::testnet()` with pinned-client `Endpoint::devnet()` so the real-runtime verification targets `https://rpc.devnet.miden.io`. Do not make the endpoint configurable and do not change any other runtime behavior. Restoring Testnet is a later, separately verified change after Testnet is upgraded. -- Do not refactor, rename for taste, extract helpers, weaken assertions, add features, or copy the compiler scaffold wholesale. -- Keep the contract/compiler dependency line separate from the client/protocol dependency line. -- Do not edit reference repositories, push, open a PR, post to GitHub, or merge anything. -- Stop rather than changing behavior when an API or runtime requirement cannot be satisfied mechanically. - -## Recorded human runtime decision - -**Local decision record:** `RUNTIME-DEVNET-2026-08-24` (a plan-local correlation label, not an invented platform message ID). - -**Approval source and provenance:** the authority is the direct human-authored messages in the originating conversation, not this builder-authored plan, an agent summary, or a generic later approval. On 2026-08-24, after the first audit blocked the Testnet-versus-DevNet contradiction, the user explicitly authorized an **intermediate DevNet endpoint for verification** and stated that the project will be changed back to Testnet after Testnet is upgraded. After the second audit requested a more explicit scope record, the user directly confirmed exactly: “I authorize the temporary hard-coded `Endpoint::devnet()` change, live DevNet account and transaction creation, and application-level insertion of new DevNet keys into the existing keystore.” On 2026-08-25, after the third audit said it had not received those messages, the user directly instructed the builder to “revise everything remaining” and reaffirmed: “you do have my human authiorization for the devnet endpoint.” The 2026-08-24 direct message supplies the complete endpoint, live-side-effect, and existing-keystore scope; the 2026-08-25 direct message reconfirms the endpoint decision. - -Any independent re-audit and the eventual implementation agent must inherit the full originating conversation containing that exact human-authored authorization, or receive an independently human-supplied approval record alongside this file. Before any DevNet edit, account/key creation, store replacement, or transaction submission, the executor must confirm that the exact `RUNTIME-DEVNET-2026-08-24` authorization text is visible in its inherited human-message history. This plan must not be presented as independent proof of its own authorization. If an auditor or executor receives only the repository file, an agent summary, or a generic “approve implementation” message, it must mark authorization unverified and stop for direct re-authorization. - -Decision-complete interpretation, grounded in `miden-client v0.16.0-rc.2` source: - -- The only approved endpoint edit is `integration/src/helpers.rs`: `Endpoint::testnet()` -> `Endpoint::devnet()`. -- At that frozen client tag, `Endpoint::devnet()` is exactly `https://rpc.devnet.miden.io` and maps to `NetworkId::Devnet`. -- The authorized live side effects include public DevNet account creation and transaction submission; any resulting network inclusion cannot be rolled back. Each `increment_count` invocation that successfully completes the application's existing `keystore.add_key` call after `client.add_account` persists one newly generated Falcon-512 sender key. This happens before transaction submission, so a later transaction failure does not roll it back; this exact application-level mutation of the existing keystore is authorized. The `NoAuth` counter adds no auth key. -- The approval does not authorize a CLI flag, environment variable, configuration file, localhost fallback, auth/funding change, alternate transaction flow, extra output, or manual keystore inspection/move/deletion. -- Runtime verification must accept only a status response whose `version` is exactly `0.16.0-rc.1`. The node tag's root `Cargo.toml` must independently prove exact protocol/standards/tx/tx-batch pins `=0.16.0-rc.4`. -- `Endpoint::to_network_id()` and `GrpcClient::get_network_id()` classify the locally configured endpoint; neither is remote network-attestation evidence. The probe may record this as **configured endpoint/network classification** only. -- If the configured endpoint is not exact, DevNet reports another node/block-producer version, or the fee/runtime checks fail, stop. Do not silently use Testnet, a generic v0.16 node, or localhost. - -## Recorded human compiler-source decision - -After Phase 1 proved that `miden-sdk-build-script-support@0.14.0-rc.1` was not published and that the published/tagged `cargo-miden 0.10.0-rc.1` source lacks the helper's required `--stop-after=dependencies` capability, the user explicitly instructed: “Use the compiler source matching the v16 pipeline, even if it has not been released.” - -Decision-complete interpretation: - -- Freeze the authorized compiler source to `COMPILER_PIPELINE_COMMIT=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, the final functional v0.16 pipeline merge before the previously reviewed snapshot's unrelated repository publish-age configuration. Never follow the moving `origin/next` ref after recording it. -- Install `cargo-miden` and `midenc` from that exact Git revision into the isolated v0.16 tool root. Both must still print `0.10.0-rc.1`, but the evidence must also record the source revision because version output alone cannot distinguish this post-tag pipeline. -- Use exact immutable Git sources at `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a` for both `miden-sdk-build-script-support` and guest `miden`, with guest version requirement `=0.14.0-rc.1`. The build-support registry package is unpublished; the published guest rc.1 payload predates the same-version pipeline's embedded-WIT implementation and reproduces `package 'miden:counter-account@0.1.0' not found` after the obsolete WIT key is removed. A disposable two-contract probe proved that changing only the guest source to the authorized pipeline makes both packages build. Every non-compiler host/runtime pin remains unchanged. -- The compatibility probe must exercise this exact source-aligned binary/helper pair. A moving branch, local path dependency, vendored copy, manually supplied package cache, or nearby compiler commit is not authorized. -- Prove the no-v17 boundary before installation: the selected commit's compiler/SDK versions remain `0.10.0-rc.1`/`0.14.0-rc.1`, its compiler dependencies are protocol `=0.16.0-rc.4` and VM `0.29`, its changelogs explicitly classify the changes as protocol 0.16 migration work, and focused release/config/changelog scans contain no protocol 0.17, SDK 0.15, or compiler 0.11 line. The selected functional trees are byte-identical to the later `62c4318...` research snapshot; the only intervening path is `.cargo/config.toml`, which is not included in the selected commit. - -## Authority and resolved source conflicts - -Use this order when evidence disagrees: - -1. The user request and migration task file. -2. Target repository source and unchanged test/binary behavior. -3. Exact source at the frozen pins. -4. For the Rust-contract surface only, `compiler@2a5ebf830c910aa5f7bf53ee4df398915ab12f7a:sdk/sdk/MIGRATION.md` plus CI-maintained examples, with every post-pin section classified rather than applied automatically. -5. `resources/V16-RUST-CONTRACT-REFERENCE-MAP.md` for source routing and `resources/V16-VERSION-TABLE.md` for dependency versions/MSRV. -6. `resources/v16-migration-guide-full.md` for broader client/protocol/VM guidance. -7. The target's existing v0.15 skills. The compiler's whole-project scaffold is authoritative only for the three user-directed packaging changes at the frozen snapshot above; its source and integration files are not implementation precedent. - -Resolved planning facts: - -- The task's embedded “Migration Delta” is still an empty placeholder. Replace that missing operational context with a source-verification log at the exact tags; do not edit the task file. -- The version table's compiler verification command names the guest SDK tag incorrectly. Use `sdk/v0.14.0-rc.1`, not nonexistent `v0.14.0-rc.1`. Both `sdk/v0.14.0-rc.1` and compiler `v0.10.0-rc.1` resolve locally to `084877ef5feed979d0d732bb0ecbd9855a5022b8`. -- The user-directed whole-project packaging reference was first reviewed at `62c4318...`; after the explicit no-v17 instruction, implementation freezes the earlier functional merge `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`. The build-support/compiler/template/SDK trees are byte-identical between those commits; only a repository-level `.cargo/config.toml` was added afterward. Copy the three packaging adaptations from `2a5ebf830...`; retain their exact rc.1 versions while sourcing both support and guest SDK from the authorized immutable pipeline because the registry support is absent and the registry guest payload fails the required embedded-WIT build. -- The whole-project scaffold is packaging-migrated only. Its two contract source files and every common `integration/` file are byte-identical to this target's v0.15 code; it has zero `#[account_procedure]` and retains the old client/tool pins and APIs. The scaffold source/integration behavior is expressly excluded from the build-oriented template tests; separate integration/CI coverage checks only the two wrapper identities and presence of the support dependency. Never copy or use its `src/` or `integration/` as v0.16 precedent, and never treat its own green build as migration evidence. -- The reference map's broad “31 of 33 files identical” count describes neither comparison precisely. At `BASELINE_COMMIT`, scaffold and target each have 33 paths, 31 common, and 18 byte-identical common files; target-only paths are the two contract lockfiles and scaffold-only paths are the two build scripts. At audited migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8`, the scaffold has 33 paths and the target has 35 non-task paths, all 33 scaffold paths are common, 15 are byte-identical, and the two contract lockfiles are target-only. The load-bearing narrower baseline claim—both contract sources and all integration files were byte-identical stale copies—is verified; the final comparison must use the final counts rather than relabeling the baseline counts. -- The current task explicitly applies the embedded-component-WIT migration in addition to the three settled packaging edits: remove increment-note's obsolete `[package.metadata.miden.dependencies]`/`wit` entry and keep only the ordinary path dependency. The planning checkout and `origin/main` still contain the obsolete table, so the task's statement that this file already has no WIT entry is a stale current-state description; the implementation must remove it as a required v0.16 API adaptation rather than assume it is absent. -- The same current-task correction applies to exactly three stale claims in the cherry-picked `.claude/skills/rust-sdk-patterns/SKILL.md`: the note-metadata sentence, the “two places” cross-component block, and the validation-checklist item. Use `outputs/compiler-port/rust-sdk-patterns.RECONCILED.md` as a section-level reference, re-verify each replacement against the target and immutable compiler snapshot, and do not copy the whole file. Never introduce the nonexistent `project-kind` key; `[lib].kind` remains the project-kind mechanism. -- `origin/next`'s 859-line `sdk/sdk/MIGRATION.md` was read in full by numbered sections. Its `## Unreleased` contains 11 headings; seven were added after frozen tag `sdk/v0.14.0-rc.1`. Use them as an audit inventory, not blanket edit instructions. The user's three packaging changes are an explicit exception to that pin rule; all other post-pin changes remain out unless frozen source/build independently requires them. -- Compatibility must be proven, not inferred from matching version strings: the required build helper invokes `cargo miden ... --stop-after=dependencies`, while tagged `cargo-miden v0.10.0-rc.1` lacks that checkpoint alias and successful partial-build handling. The explicit human decision therefore selects the immutable post-tag pipeline commit for both the isolated binaries and Git-revision build-support dependency. Phase 1 must run that exact source-aligned pair through a temporary plain-Cargo capability probe before any target edit. The compiler is intentionally outside the host Cargo graph: its exact protocol rc.4 dependency cannot coexist with the host graph's semver-compatible rc.6 package, so integration launches the isolated executable across a process/artifact boundary. -- The repository owns no `.masm` source files. MASM module-tree verification is an explicit empty-inventory result, not an omitted gate. -- `miden-client v0.16.0-rc.2:crates/rust-client/src/rpc/endpoint.rs` defines `Endpoint::devnet()` as `https://rpc.devnet.miden.io` and maps it to `NetworkId::Devnet`; this is the exact approved temporary endpoint mechanism. -- `miden-node v0.16.0-rc.1` resolves to commit `7999131c0c9b459322a5cc1d0a9b2b9976ea6de0`. Its root `Cargo.toml` declares workspace version `0.16.0-rc.1` and exact `=0.16.0-rc.4` pins for `miden-protocol`, `miden-standards`, `miden-tx`, `miden-tx-batch`, and `miden-block-prover`. Its RPC status handler returns `env!("CARGO_PKG_VERSION")`, so exact string equality is a valid runtime acceptance gate. -- A deployed node's self-reported package version is not cryptographic proof of its source commit. The runtime/source link is an explicit inference: the official DevNet endpoint reports exact package version `0.16.0-rc.1`, while the official release tag independently supplies the rc.4 dependency evidence. Report it as an inference, not attestation. - -## Current-state inventory - -- Git: clean before this planning file, on `chore/sync-skills-v15` at `80394cd`, tracking `origin/chore/sync-skills-v15`. -- Decided implementation base: after a fresh fetch, create `kbg/chore/v16-migration` from `origin/main`, then cherry-pick source commit `80394cd` as its own unsquashed skills commit. Current local evidence matches the task: `origin/main=56380d338950d8ca87c7d1bfbae7969c54684ab3`, merge-base `53be3f148dce715dd1bf03ccfb81246e31eb6f17`; main-only changes touch only three lockfiles, while `80394cd` touches only six skills. Re-prove after fetch and stop if topology/overlap changed. -- Open-PR intent to absorb without interacting with GitHub: #55 becomes direct `miden-protocol = "0.16.0-rc.6"`; #56 becomes the v0.16 client pin in `miden-client-cli`; #58's stale README `config.rs` tree entry stays removed. Report all three as superseded by the migration. -- Contracts: `contracts/counter-account` and `contracts/increment-note`. -- Test: `integration/tests/counter_test.rs::counter_test`. -- Binary: `integration/src/bin/increment_count.rs`; it must be run from `integration/` because it uses `../...` paths. -- Locks: root `Cargo.lock` plus one lockfile per contract. -- Installed baseline tools: `cargo-miden 0.9.0`, `midenc 0.6.0`. -- Rust toolchain: `nightly-2026-04-30` / Rust 1.97 with `wasm32-wasip2`; no toolchain-file change is currently expected. -- Ignored state: `store.sqlite3` is a pre-v0.16 SQLite database (`user_version = 1`); `keystore/` contains an existing key index and key. Never include key material in output logs. The authorized runtime will add a new DevNet key to this existing keystore through the application; no manual keystore operation is allowed. -- The installed `miden` wrapper is not a usable fallback, while the current build hook prefers it merely because the command exists. - -## Expected file-level migration - -| File | Minimal planned adaptation | -| --- | --- | -| `contracts/counter-account/Cargo.toml` | Set guest `miden` version `=0.14.0-rc.1` and source it from authorized immutable Git revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`; add the settled build-support dependency at the same revision. The guest source substitution is required because the published same-version payload lacks the pipeline's working embedded-WIT behavior. | -| `contracts/increment-note/Cargo.toml` | Copy the same exact guest/build-support packaging pins. | -| `contracts/counter-account/build.rs` | Add the exact three-line upstream wrapper calling `miden_sdk_build_script_support::prepare_package_cache();`. | -| `contracts/increment-note/build.rs` | Add the identical exact three-line wrapper. | -| Both contract lockfiles | Resolve the guest/compiler line independently; do not copy the compiler template locks. Match the frozen compiler closure exactly: `miden-protocol` and `miden-protocol-build-utils` `0.16.0-rc.4`, guest/build support from exact Git revision `2a5ebf830...`, and the complete VM family `0.29.1`. | -| Both `miden-project.toml` files | Copy the settled `[lib] path = "src/lib.rs"` line; preserve kind, namespace, ordinary dependencies, and supported account types. In increment-note, also remove the obsolete generated-WIT comment, `[package.metadata.miden.dependencies]` table, and `wit` entry exactly as required by the current task; retain the plain `counter-account` path dependency. Never add `project-kind`. | -| `contracts/counter-account/src/lib.rs` | Add `#[account_procedure]` to `get_count` and `increment_count` on the `#[component]` trait only, modelled on `compiler@2a5ebf830c910aa5f7bf53ee4df398915ab12f7a:examples/counter-contract/src/lib.rs:24,27`. Do not alter either implementation. | -| `contracts/increment-note/src/lib.rs` | No expected source change: `Wallet` does not collide with generated `CounterContract`, both are same-module, and the note has no post-pin `get_entrypoint_root`/felt-representation conflict. Change only if frozen source/compiler output proves otherwise. | -| `integration/Cargo.toml` | Remove the in-process `cargo-miden` library dependency so the compiler line remains outside the host graph; pin direct `miden-protocol 0.16.0-rc.6` (PR #55 intent), client/store `0.16.0-rc.2`, standards/testing `0.16.0-rc.6`, `miden-mast-package 0.29.1`, and compatible direct `rand 0.10`; leave Tokio/anyhow unchanged unless resolution proves necessary. | -| Root `Cargo.lock` | Regenerate only from exact host pins; require no `cargo-miden`/compiler packages, preserve the rc.6 host line, and remove stale `miden-tx-batch-prover`. | -| `integration/src/helpers.rs` | Replace in-process `cargo_miden::run`/`CommandOutput` with an invocation of the exact isolated compiler binary, using the same profile/manifest arguments and parsing the pinned CLI's official `Compiled ` report before unchanged package deserialization; use `rand::Rng`; remove client debug mode; use verification-wrapped `.grpc_client(&endpoint, Some(timeout_ms))`; install `NoAuth` and `AuthSingleSig` via `.with_component`; wrap the Falcon-512 commitment in `Approver`; make the explicitly authorized one-line temporary `Endpoint::testnet()` -> `Endpoint::devnet()` change; remove only the stale “In protocol v0.15” qualifier from the still-valid account-type/storage-visibility comment; preserve account type, add-account/keystore order, paths, and runtime output. | -| `integration/tests/counter_test.rs` | Replace removed `build_tx_context` with `build_transaction(...).authenticated_input_notes([id]).build()`; wrap the map lookup key in `StorageMapKey`; preserve every assertion and remaining step. | -| `integration/src/bin/increment_count.rs` | No expected source change. It will use the approved DevNet endpoint through the helper. Preserve note builders and both request flows. Add fee arguments/funding only with separate explicit approval because that changes behavior. | -| `.claude/hooks/build-contracts.sh` | Before any contract-source edit, derive the isolated binary path directly from the same Cargo-home-root convention used in Phase 1, require version `0.10.0-rc.1`, and never consult ambient `PATH` or the unusable `miden` wrapper. Preserve the hook JSON protocol, trigger, release build, captured tail, and nonzero failure propagation. | -| `README.md` | Replace v0.16 contract-toolchain provisioning through midenup with exact isolated-root checks/direct builds, and retain PR #58's removal of the nonexistent `config.rs` tree entry. Avoid unrelated prose cleanup. | -| `CLAUDE.md` | Add only source-verified v0.16 contract/test/build guidance required to keep examples accurate. | -| `.claude/skills/*/SKILL.md` | Port stale v0.15 pins/APIs and current-binary Testnet descriptions, add the relevant v0.16/temporary-DevNet rules, and preserve the richer `80394cd` skill content. In `rust-sdk-patterns`, fix exactly the three obsolete generated-WIT claims identified by the task and preserve all unrelated richer content. Audit exactly seven skills; do not overwrite them from the compiler scaffold or reconciled output. | -| `.claude/settings.json`, `.gitignore`, `rust-toolchain.toml`, `.cursorrules`, CI, root `Cargo.toml` | Verify but do not edit unless a pinned build or runtime failure demonstrates a migration requirement. The hook itself derives the persistent isolated tool path, so no settings/PATH injection is planned. Obsolete ignore entries alone are not migration work. | - -Known exact host patterns to verify immediately before editing: - -```rust -// Account auth is now an ordinary component. -.with_component(NoAuth) - -.with_component(AuthSingleSig::new(Approver::new( - key_pair.public_key().to_commitment(), - AuthSchemeId::Falcon512Poseidon2, -))) -``` - -```rust -// MockChain transaction migration; preserve the same one-note input set. -let tx_context = mock_chain - .build_transaction(counter_account.clone()) - .authenticated_input_notes([counter_note.id()]) - .build()?; -``` - -```rust -// Account storage now takes the typed map key. -.get_map_item(&counter_storage_slot, StorageMapKey::new(COUNTER_STORAGE_KEY)) -``` - -## Product-only search contract - -Every baseline, documentation, and final stale-reference search must use the exact product roots below. This reaches hidden `.claude/**` and `.github/**` content without traversing planning/evidence files or unrelated repository state: - -```sh -PRODUCT_PATHS=( - Cargo.toml rust-toolchain.toml README.md CLAUDE.md LICENSE - .gitignore .cursorrules .github .claude contracts integration -) -PRODUCT_EXCLUDES=( - --glob '!.git/**' - --glob '!**/Cargo.lock' - --glob '!**/target/**' - --glob '!**/store.sqlite3' - --glob '!**/*.sqlite' - --glob '!**/*.sqlite3' - --glob '!**/keystore/**' - --glob '!**/*.bak' - --glob '!**/*.backup' - --glob '!**/*.orig' - --glob '!**/*~' - --glob '!**/.tmp/**' - --glob '!**/tmp/**' -) -OLD_PIN_PATTERN='\bv?0\.9(?:\.[0-9]+)?\b|\bv?0\.23(?:\.[0-9]+)?\b|\bmiden\b.{0,80}0\.13(?:\.0)?|cargo-miden.{0,80}0\.9(?:\.0)?|midenc.{0,80}0\.6(?:\.0)?|miden-client.{0,80}0\.(?:14|15)(?:\.[0-9]+)?|miden-(?:client-sqlite-store|standards|testing).{0,80}0\.15(?:\.[0-9]+)?|miden-mast-package.{0,80}0\.23(?:\.[0-9]+)?|\brand\b.{0,80}0\.9(?:\.[0-9]+)?' -MIGRATION_INVENTORY_PATTERN="v?0\\.15(?:\\.[0-9]+)?|\\bv15(?:[-_/][[:alnum:].-]+)?\\b|${OLD_PIN_PATTERN}|miden-tx-batch-prover|with_auth_component|in_debug_mode|build_tx_context|AssetVaultKey|AssetId|AssetClass|AccountDelta|AccountPatch|\\b(?:account_delta|account_patch|apply_delta|apply_patch)\\s*\\(|\\.masl|\\bLibrary\\b|\\bKernelLibrary\\b|link_[A-Za-z0-9_]*_library|[A-Za-z0-9_]*_from_dir|Endpoint::testnet|https://rpc\\.testnet\\.miden\\.io|\\b[Tt]estnet\\b" - -OLD_PIN_SAMPLES=$(printf '%s\n' v0.9.0 0.9.2 v0.23 0.23.1) -OLD_PIN_SELF_CHECK=$(printf '%s\n' "$OLD_PIN_SAMPLES" | rg -x "$OLD_PIN_PATTERN") -test "$OLD_PIN_SELF_CHECK" = "$OLD_PIN_SAMPLES" -if printf '%s\n' 0.10.0-rc.1 0.29.1 | rg -q "$OLD_PIN_PATTERN"; then - exit 1 -fi -``` - -The exact before/after inventory command is: - -```sh -rg --hidden -n "$MIGRATION_INVENTORY_PATTERN" \ - "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" -``` - -Inventory the hook and exactly seven local skills in the same evidence log: - -```sh -EXPECTED_SKILLS=$(printf '%s\n' \ - .claude/skills/local-node-validation/SKILL.md \ - .claude/skills/miden-client-cli/SKILL.md \ - .claude/skills/miden-concepts/SKILL.md \ - .claude/skills/rust-sdk-patterns/SKILL.md \ - .claude/skills/rust-sdk-pitfalls/SKILL.md \ - .claude/skills/rust-sdk-source-guide/SKILL.md \ - .claude/skills/rust-sdk-testing-patterns/SKILL.md) -ACTUAL_SKILLS=$(find .claude/skills -mindepth 2 -maxdepth 2 -type f -name SKILL.md | LC_ALL=C sort) -test "$ACTUAL_SKILLS" = "$EXPECTED_SKILLS" -test -f .claude/hooks/build-contracts.sh -CONTROL_PATHS=$(printf '%s\n' .claude/hooks/build-contracts.sh "$ACTUAL_SKILLS") -test "$(printf '%s\n' "$CONTROL_PATHS" | wc -l | tr -d ' ')" -eq 8 -printf '%s\n' "$CONTROL_PATHS" -``` - -Use this exact NUL-safe filename inventory for repository-owned MASM source. It traverses only the declared product roots and prunes the directory equivalents of the product exclusions. Do not use `rg --files` with the mixed `PRODUCT_PATHS` array for this purpose: ripgrep emits explicitly named regular-file arguments even when an extension glob does not match them. - -```sh -MASM_CAPTURE_DIR=$(mktemp -d "${TMPDIR:-/tmp}/project-template-masm.XXXXXX") -MASM_STDOUT="$MASM_CAPTURE_DIR/masm.paths0" -MASM_STDERR="$MASM_CAPTURE_DIR/masm.stderr" -set +e -find "${PRODUCT_PATHS[@]}" \ - \( -type d \( \ - -name .git -o -name target -o -name keystore -o \ - -path 'integration/stores' -o -path '*/integration/stores' -o \ - -name .tmp -o -name tmp \ - \) -prune \) -o \ - \( -type f -name '*.masm' -print0 \) \ - >"$MASM_STDOUT" 2>"$MASM_STDERR" -MASM_STATUS=$? -set -e -printf 'masm_status=%s\n' "$MASM_STATUS" -test "$MASM_STATUS" -eq 0 -test ! -s "$MASM_STDERR" -test ! -s "$MASM_STDOUT" -``` - -Preserve `MASM_STATUS`, the raw NUL-delimited `MASM_STDOUT`, and complete `MASM_STDERR` in the phase's evidence before evaluating the three assertions. The expected current and final result is status `0` with stdout exactly zero bytes and stderr empty. Any stderr or nonzero status invalidates the inventory. If stdout is nonempty, the final assertion must fail: parse every path with a NUL-safe reader, record it, classify whether and how the file is reachable through its exact module declarations/package build, and stop for plan/source reconciliation before editing or continuing. Do not suppress or override the failed empty-inventory assertion. If implementation adds any new top-level product path, update `PRODUCT_PATHS` explicitly and rerun every inventory; never broaden a gate to `.`. - -Run these exact commands before edits, before Phase 7 documentation work, and after all product edits. Preserve complete output and exit status so the baseline and final inventories can be compared. Never use ignored-file bypass flags or `.` as the search root for migration gates. The product-root list deliberately excludes `.git/**`, `tasks/**`, evidence outputs, root stores/keystores, temporary backups, and generated targets; the globs redundantly enforce the safety boundary for matching nested paths. `Cargo.lock` is excluded only from stale-text gates because accepted transitive version skew can legitimately retain older version numbers; lockfiles remain subject to the separate dependency-tree/lock audit. - -## Execution plan - -### Phase 1 — Toolchain resolution (hard gate before migration edits) - -- [x] Create a toolchain evidence log at `outputs/project-template-toolchain-resolution.txt` in the task evidence directory. -- [x] Resolve exact registry releases with `cargo info @` for: - - `cargo-miden@0.10.0-rc.1` - - `midenc@0.10.0-rc.1` - - `miden@0.14.0-rc.1` - - `miden-protocol@0.16.0-rc.6` - - `miden-client@0.16.0-rc.2` - - `miden-client-sqlite-store@0.16.0-rc.2` - - `miden-standards@0.16.0-rc.6` - - `miden-testing@0.16.0-rc.6` - - `miden-mast-package@0.29.1` -- [x] Verify local and live remote tags/commits without reading moving branches: - - protocol `v0.16.0-rc.6` - - miden-client `v0.16.0-rc.2` - - miden-vm `v0.29.1` - - compiler `v0.10.0-rc.1` - - compiler SDK `sdk/v0.14.0-rc.1` - - compiler templates `templates/v0.32.0-rc.1` -- [x] Record that `miden-sdk-build-script-support@0.14.0-rc.1` is absent from crates.io, then apply the explicit human compiler-source decision. Set both `COMPILER_PIPELINE_COMMIT` and `COMPILER_PACKAGING_COMMIT` to immutable `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`; prove it is the earliest `next` mainline integration containing the support/helper, embedded-WIT, protocol rc.4, and VM 0.29 work. Prove no v17/future line by exact versions/changelog scans and record that its relevant functional trees are byte-identical to the later research snapshot. Do not use a moving branch at installation or dependency resolution time. -- [x] Resolve `miden-node v0.16.0-rc.1` exactly. Record tag commit `7999131c0c9b459322a5cc1d0a9b2b9976ea6de0`, root workspace version `0.16.0-rc.1`, and the root manifest plus lock evidence that `miden-block-prover`, `miden-protocol`, `miden-standards`, `miden-testing`, `miden-tx`, and `miden-tx-batch` are all exactly `=0.16.0-rc.4`. Also record protocol rc.4 commit `bbe8ec8020d8fdaa6ea703bce1557b1380942444`. -- [x] Record from `miden-node v0.16.0-rc.1:crates/rpc/src/server/api/status.rs` that the RPC status version is `env!("CARGO_PKG_VERSION")`, and from the pinned block producer source that a healthy producer reports its package version and `connected`. Define the runtime acceptance contract now: status version `0.16.0-rc.1`, block-producer version `0.16.0-rc.1`, block-producer status `connected`; no semver range or prefix match. -- [x] If a local tag is absent, fetch tags in that reference clone and retry once. If it still does not resolve, stop; never substitute a nearby release. (No tag was absent; live exact-tag resolution matched every local object.) -- [x] Print and record `rustc --version`, `cargo --version`, the active toolchain path, and installed `wasm32-wasip2` target. Confirm the highest MSRV, Rust 1.97, is met. -- [x] Record the existing v0.15 `cargo-miden` executable path and its `0.9.0` version before installing anything. -- [x] Preserve the v0.15 baseline tool by resolving one deterministic isolated root. Use this exact convention in both installation and the hook; record the expanded absolute path (expected here: `/Users/philipp/.cargo/miden-v16-0.10.0-rc.1`): - - ```sh - MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}" - MIDEN_V16_TOOL_ROOT="$MIDEN_CARGO_HOME/miden-v16-0.10.0-rc.1" - COMPILER_PIPELINE_COMMIT=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a - cargo install cargo-miden --git https://github.com/0xMiden/compiler \ - --rev "$COMPILER_PIPELINE_COMMIT" --locked --root "$MIDEN_V16_TOOL_ROOT" - cargo install midenc --git https://github.com/0xMiden/compiler \ - --rev "$COMPILER_PIPELINE_COMMIT" --locked --root "$MIDEN_V16_TOOL_ROOT" - ``` - -- [x] Print and verify the isolated binaries directly: `"$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" miden --version` must equal `cargo-miden 0.10.0-rc.1`, and `"$MIDEN_V16_TOOL_ROOT/bin/midenc" --version` must report `0.10.0-rc.1`. Prove the preserved ambient `/Users/philipp/.cargo/bin/cargo-miden` remains `0.9.0`; do not replace it. -- [x] Do not use an unpinned registry install, moving Git branch, local path install, later `next` commit, or `midenup install 0.16`. -- [x] Treat the build-support compatibility question as a **hard pre-edit capability gate**, because a version-string match cannot distinguish the tagged compiler bits from later `origin/next` bits that retain the same version. Record from exact source that the resolved support helper invokes `--stop-after=dependencies`, tagged `v0.10.0-rc.1` lacks that checkpoint alias, and tagged `BuildCommand::exec` does not accept deliberate `CompilerStopped` as success. -- [x] Exercise the actually installed isolated binary and exact Git-revision support crate without changing the target repository: - 1. Set `COMPILER_PACKAGING_COMMIT` to the exact immutable value above; derive `CARGO_MIDEN_BIN="$MIDEN_V16_TOOL_ROOT/bin/cargo-miden"`; require it to be an absolute executable with exact version output. - 2. Create a private `mktemp -d` probe root outside both repositories. Materialize only `extra/templates/project/contracts/counter-account` from `COMPILER_PACKAGING_COMMIT` into that root using a read-only `git archive` of the compiler object; never edit/run Cargo in the compiler checkout. - 3. In the private probe only, replace the unpublished registry build-dependency string with `{ git = "https://github.com/0xMiden/compiler", rev = "2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" }`. Leave `MIDENC_PACKAGE_CACHE` unset, set `CARGO_MIDEN` to the absolute isolated binary, and set `CARGO_TARGET_DIR` to a target directory inside the private probe root. Run `cargo metadata --no-deps --format-version 1` and `cargo check --manifest-path /Cargo.toml --release -vv`, preserving stdout, stderr, status, resolved lock commit/source, nested command line, and cache paths. - 4. Required result: status `0`; the helper launches the exact isolated binary; no ambient `0.9.x` tool is used; its nested dependency-staging build succeeds; a content-addressed `OUT_DIR/**/miden-packages` generation is published; and no `.staging-*` remains. A parse error for `dependencies`, `CompilerStopped`/unreachable error, missing support crate, stale-cache fallback, or nonzero exit blocks the migration before any hook/product edit. - 5. Do not set `MIDENC_PACKAGE_CACHE` manually, change the revision, or use a branch name to bypass this test. If the exact pair fails, report the incompatibility and stop; do not select a later compiler commit. -- [x] Record the final selected lines: the explicitly authorized unreleased v16 compiler pipeline and guest SDK use exact source `2a5ebf830...`, guest version `0.14.0-rc.1`, protocol and protocol build-utils rc.4, and the compiler lock's VM `0.29.1` family; host integration uses protocol rc.6 and MAST package 0.29.1; exact DevNet node `0.16.0-rc.1` uses protocol rc.4. Do not describe or accept this as merely a generic “v0.16 line.” - -Exit only when every executable version is installed and printed, every registry/tag pin plus exact Git source revision and node/protocol pair is proven, the v0.15 tool remains callable for the baseline, and the temporary plain-Cargo capability probe passes with the exact source-aligned isolated `cargo-miden 0.10.0-rc.1`. A green version check without source provenance and a green capability probe is insufficient. - -At the start of every later phase or new shell, rederive `MIDEN_CARGO_HOME` and `MIDEN_V16_TOOL_ROOT` with the exact Phase 1 assignments, require `test -x "$MIDEN_V16_TOOL_ROOT/bin/cargo-miden"`, and recheck exact version output before any v0.16 contract build. An unset/stale variable or bare `cargo miden` is not an accepted v0.16 tool selection. - -### Phase 2 — Git preflight and branch selection - -- [x] Record `git status --short --branch`, `git log --oneline -20`, `git branch -a`, remotes, and `git diff --stat` before any implementation edit. -- [x] Treat `tasks/todo.md` plus the AGENTS-required correction log `tasks/lessons.md` as the only expected planning artifacts. No unrelated worktree change was present. -- [x] After Phase 1 is completely green, run exactly `git fetch --all --prune --tags`. The command was run; Git safely refused to clobber the pre-existing local `v0.9`, `v0.10`, and `v0.11` tags. No tag was deleted or force-updated. A direct live `ls-remote origin refs/heads/main` then proved local `origin/main` exactly matches the live remote at `56380d338950d8ca87c7d1bfbae7969c54684ab3`. -- [x] Re-prove the decided topology after fetch before mutating Git: - - `80394cd` exists and is not already reachable from `origin/main`; - - the merge-base and main-only/skills-only path sets remain disjoint; - - main-only paths are the three lockfiles and skills-only paths are exactly the six named skill files; - - local `kbg/chore/v16-migration` does not exist, so the required `checkout -b` cannot overwrite prior work; - - commit signing is configured and usable before the cherry-pick creates a new commit. Do not change signing configuration or create an unsigned commit merely to advance. -- [x] If any topology/path/signing assertion differs, or the cherry-pick would be empty, stop for a new base decision. All assertions matched; no prohibited base/history action was taken. -- [x] With the assertions green, execute the task's exact base sequence: - - ```sh - git checkout -b kbg/chore/v16-migration origin/main - git cherry-pick 80394cd - git log --oneline -5 - ``` - - A conflict is a hard stop. Never amend, squash, or fold the cherry-picked skills change into the migration; preserve its original author and separate intent. -- [x] Set `MAIN_BASE_COMMIT=56380d338950d8ca87c7d1bfbae7969c54684ab3`, `SKILLS_BASE_COMMIT=1d47c165550ffe3757fd935b49256bf0370f3ad1`, and `BASELINE_COMMIT=$SKILLS_BASE_COMMIT`. The new signed commit's diff against `MAIN_BASE_COMMIT` is exactly the six skills and its patch/source is `80394cd`; all migration comparisons start at `BASELINE_COMMIT`. - -No manifest, source, lockfile, doc, hook, store, or reference-repository changes occur in this phase. - -### Phase 3 — Untouched v0.15 baseline capture - -- [x] Create these external evidence files without changing repository source: - - `outputs/project-template-baseline-inventory.txt` - - `outputs/project-template-baseline-build-test.log` - - `outputs/project-template-baseline-binary.log` -- [x] Record all manifests, contracts, tests, binaries, source-owned `.masm` files, tool versions, and the baseline commit. -- [x] Record the packaging/metadata baseline explicitly: neither contract has `build.rs`; both contract manifests have guest `miden = "0.13"` and no build-support dependency; both project manifests lack `[lib].path`; increment-note still has the obsolete generated-WIT comment/table/key that the current task requires removing. Record the exact three stale generated-WIT claims in the cherry-picked `rust-sdk-patterns` skill as the before-side of their targeted correction. -- [x] Run and preserve the exact focused WIT/project-kind/stale-skill scans later specified in Phase 9 Gate 8. Baseline results were the required obsolete table/key, exactly three skill claims, and `project-kind` status `1` with empty output. -- [x] Run the exact `OLD_PIN_PATTERN` self-check, `MIGRATION_INVENTORY_PATTERN` command, hook/seven-skill inventory, and MASM filename inventory from the product-only search contract. The union matched the expected stale baseline; control inventory was exactly eight paths; MASM status/stdout/stderr were `0`/empty/empty. -- [x] Set `BASELINE_CARGO_MIDEN_BIN` to the exact preserved absolute path recorded in Phase 1, recheck `"$BASELINE_CARGO_MIDEN_BIN" miden --version` equals `cargo-miden 0.9.0`, then build in this order and capture complete output/exit codes: - - ```sh - cargo build -p integration --release - "$BASELINE_CARGO_MIDEN_BIN" miden build --manifest-path contracts/counter-account/Cargo.toml --release - "$BASELINE_CARGO_MIDEN_BIN" miden build --manifest-path contracts/increment-note/Cargo.toml --release - cargo test -p integration --release -- --list - cargo test -p integration --release -- --nocapture - ``` - -- [x] Record the exact test name and result: `counter_test` passed; one passed, zero failed, zero ignored. -- [x] Inventory every binary with `find`/`rg`; `increment_count` is the only one and takes no arguments. -- [x] Query Testnet read-only with exact `miden-client 0.15.3`: RPC and block producer both reported `0.15.0`, producer `connected`. The first repository-root run failed before account creation because the existing ignored store had mismatched migration hashes; the untouched binary then passed from disposable clean v0.15 store/keystore state, returning both transaction IDs with exit `0`. -- [x] The no-compatible-node fallback was not needed because exact status verification and the disposable-state live baseline succeeded. -- [x] Record that the binary does not verify final storage or sync after consumption; the evidence is explicitly submission-only and this behavior will not be “improved.” - -### Phase 4 — Pin-specific source-verification map - -- [x] Write `outputs/project-template-source-verifications.md` before editing code. -- [x] For every non-trivial replacement, cite exact tag/immutable commit, file, symbol/signature, and minimal usage. Read release APIs with `git show :`; never use a moving branch or current reference worktree. The sole `next` exception is the user-directed Rust-contract audit/packaging snapshot already frozen as `COMPILER_PACKAGING_COMMIT`; refer to it by full commit after the one required `git -C compiler show origin/next:` read. -- [x] Record that `V16-RUST-CONTRACT-REFERENCE-MAP.md` was read completely (222 lines), and that a focused sub-agent read all 859 numbered lines of `COMPILER_PACKAGING_COMMIT:sdk/sdk/MIGRATION.md` in ranges 1-180, 181-360, 361-540, 541-720, and 721-859. Preserve the full heading inventory and frozen-tag/post-pin boundary in the source log; do not summarize “Unreleased” as one undifferentiated change set. -- [x] Record immutable compiler-reference evidence before any edit: - - packaging: both upstream contract manifests have exact guest/build-support rc.1 pins, both `build.rs` files contain only `prepare_package_cache()`, and both project manifests add `[lib].path`; - - source: `examples/counter-contract/src/lib.rs:24,27` marks exactly the two callable trait methods; `examples/basic-wallet/src/lib.rs` is the CI-maintained account/asset-operation reference; - - trap: scaffold contract sources and all integration common files hash equal to this v0.15 target, the scaffold contains zero account-procedure markers, and `tests/templates/tests/templates.rs:1-6` expressly excludes the default project scaffold. -- [x] Classify every `## Unreleased` heading as follows, with an exact target symbol scan and frozen-source citation for each row: - - | `MIGRATION.md` section | Project-template disposition | - | --- | --- | - | Transaction summaries are six words | Audited N/A: no guest custom authentication component; host `AuthSingleSig` is not this surface. Do not add guest auth code. | - | Attachment setter aliases are removed | Audited N/A: no attachment setter calls. | - | `#[note]` reserves `get_entrypoint_root` | Audited N/A: `IncrementNote` declares no conflicting item. | - | Contract crates gain a `build.rs` | **Applicable user-directed packaging exception:** add the exact support dependency/wrapper only after Phase 1 compatibility passes. | - | Kernel scalars are typed instead of `Felt` | Frozen-RC-relevant but audited N/A: no listed kernel count/height/nonce/attachment APIs; stored counter remains intentionally `Felt`. | - | Typed transaction-script arguments | Audited N/A: no tx-script crate or `#[tx_script]` entrypoint. | - | Mark account procedures | **Applicable source edit:** mark exactly `get_count` and `increment_count` on the component trait. | - | `#[account(...)]` generates one trait per component | Applicable semantic audit, no extra edit expected: `Wallet` differs from `CounterContract`, the generated trait is same-module/in scope, and both selected methods become callable. | - | Tx-kernel bindings beta.1 | Frozen-RC-relevant but audited N/A: no renamed/removed guest kernel calls; do not add basic-wallet behavior. | - | `#[note]` structs implement `ToFeltRepr` | Audited N/A: the fieldless note has no manual impl/custom field. | - | Component WIT embedded in package | **Applicable by explicit current-task decision:** remove increment-note's obsolete generated-WIT comment/table/key, retain its ordinary path dependency, and correct exactly three stale claims in `rust-sdk-patterns`. Do not generalize this into unrelated metadata cleanup. | - -- [x] Also classify the fully read historical `0.13.0 -> 0.13.1` and `0.12.0 -> 0.13.0` sections as already embodied or absent; do not re-migrate the component trait/storage shape, required project manifest, explicit account wrapper, or protocol-v0.15 bindings. -- [x] Run a focused pre-edit source scan over `contracts/**` and `integration/**` for the non-applicable Unreleased surfaces, including `TransactionSummaryConstructionFailed`, attachment setters, `get_entrypoint_root`, typed kernel count/height/nonce/attachment APIs, `#[tx_script]`, renamed/removed tx-kernel asset APIs, and manual note felt-representation impls. Capture zero matches or classify every match; do not turn prose hits in docs/skills into unrelated code churn. -- [x] Carry forward the already proven adaptations: - - compiler `#[account_procedure]` trait markers and same-module generated interface trait behavior from the CI-maintained counter example; - - exact user-directed guest/build-support versions, wrapper `build.rs`, and mandatory project target path from the immutable packaging snapshot, with both guest/support sources frozen to the authorized pipeline after the registry guest failed embedded-WIT resolution; - - embedded component-WIT handling from the same immutable migration snapshot: ordinary path dependency only for this embedded-WIT package, with no leftover `wit` key; - - basic-wallet account/asset-operation patterns as the guest asset reference, without importing unused behavior into this project; - - client `.grpc_client`, removed debug mode, and response-verification behavior; - - protocol account builder/auth/`Approver` APIs; - - `rand 0.10` trait used by the pinned client RNG; - - `MockChain::build_transaction` authenticated-note builder; - - typed `StorageMapKey` lookup; - - pinned cargo-miden CLI `Compiled ` artifact reporting, unchanged package reader, storage initialization, note builder, and transaction request shapes. -- [x] Prove the **authorized interim DevNet** target and fee policy with a read-only, store-free runtime probe before altering either request or opening the v0.16 SQLite store: - 1. Create a temporary Cargo project under a `mktemp -d` directory outside the target repository, with exact `miden-client = { version = "0.16.0-rc.2", features = ["tonic"] }` and Tokio dependencies. Create its files with the normal patch/edit mechanism, not shell redirection. - 2. Compile and run this pinned-source pattern, capturing output in `outputs/project-template-runtime-probe.log`: - - ```rust - use anyhow::{Context, ensure}; - use miden_client::rpc::{Endpoint, GrpcClient, NodeRpcClient}; - - #[tokio::main] - async fn main() -> anyhow::Result<()> { - let endpoint = Endpoint::devnet(); - ensure!(endpoint.to_string() == "https://rpc.devnet.miden.io"); - let rpc = GrpcClient::new(&endpoint, 10_000); - let status = rpc.get_status_unversioned().await?; - let (latest, _) = rpc.get_block_header_by_number(None, false).await?; - let fees = latest.fee_parameters(); - let block_producer = status - .block_producer - .as_ref() - .context("status omitted block producer")?; - - ensure!(status.version == "0.16.0-rc.1"); - ensure!(status.genesis_commitment.is_some()); - ensure!(status.chain_tip > 0); - ensure!(block_producer.version == "0.16.0-rc.1"); - ensure!(block_producer.status == "connected"); - ensure!(fees.verification_base_fee() == 0); - - println!("endpoint={endpoint}"); - println!("configured_network_id={:?}", endpoint.to_network_id()); - println!("node_version={}", status.version); - println!("node_genesis={:?}", status.genesis_commitment); - println!("chain_tip={}", status.chain_tip); - println!("block_producer_version={}", block_producer.version); - println!("block_producer_status={}", block_producer.status); - println!("latest_block={}", latest.block_num()); - println!("fee_faucet_id={:?}", fees.fee_faucet_id()); - println!("verification_base_fee={}", fees.verification_base_fee()); - Ok(()) - } - ``` - - 3. Add only `anyhow = "1.0"` for executable assertions. Record the temporary probe's resolved dependency tree and exact exit status. - 4. Required runtime result: configured endpoint exactly `https://rpc.devnet.miden.io`; locally configured network classification printed as DevNet; node version exactly `0.16.0-rc.1`; block-producer version exactly `0.16.0-rc.1` with status exactly `connected`; present genesis commitment; nonzero chain tip; retrievable latest header; and `verification_base_fee=0`. - 5. State the evidence boundary precisely: `Endpoint::to_network_id()` and `GrpcClient::get_network_id()` derive identity from the configured URL and are **not** node-reported network identity. Do not claim remote DevNet attestation. The node version is self-reported, and rc.4 is inferred by pairing that exact official package version with the frozen official tag's manifest/lock; the status RPC does not expose protocol version or source commit. - 6. Record the first probe's genesis commitment and require the immediate pre-transaction probe in Phase 8 to return the same value. This is a continuity check between the two observations, not comparison with an independently authoritative DevNet genesis. If remote network identity later becomes a requirement, stop until an authoritative expected genesis commitment is supplied and compared. - 7. The probe is read-only: it creates no client store/account/note/transaction. If any exact result fails, stop before moving the old store, changing the binary, or submitting transactions. Do not accept another RC, a final release, a generic v0.16 status, Testnet, or localhost without a new human decision. -- [x] If another unknown API appears during compilation, stop that edit path and launch a focused read-only pinned-source query. Do not trial-and-error rewrite. - -### Phase 5 — Hook guardrail, then exact dependency and metadata migration - -#### 5A. Repair the contract-build hook before any `contracts/**/src` edit - -- [x] Make `.claude/hooks/build-contracts.sh` the first repository file changed in the migration. Do this before contract manifests/metadata for the safest ordering and, as a hard requirement, before either `contracts/**/src/lib.rs` is edited. -- [x] Remove all `miden`-wrapper and `command -v cargo-miden` detection. The hook must derive exactly one isolated path on every invocation, independent of ambient `PATH`, using `MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}"`, `MIDEN_V16_TOOL_ROOT="$MIDEN_CARGO_HOME/miden-v16-0.10.0-rc.1"`, and `CARGO_MIDEN_BIN="$MIDEN_V16_TOOL_ROOT/bin/cargo-miden"`. Do not fall back to `/Users/philipp/.cargo/bin/cargo-miden`, `cargo miden`, or `miden`. -- [x] Invoke the resolved absolute binary as `"$CARGO_MIDEN_BIN" miden --version` and require the complete output to equal `cargo-miden 0.10.0-rc.1`. A missing executable, panic, nonzero version command, empty output, `cargo-miden 0.9.0`, or any other version is a hard hook failure. -- [x] Invoke the same already-verified absolute binary as `"$CARGO_MIDEN_BIN" miden build --manifest-path "$CARGO_TOML" --release`; this direct form includes the literal `miden` token required by cargo-miden's CLI and proves the version-checked binary is the build binary. -- [x] For missing/mismatched tools, emit JSON in the existing `hookSpecificOutput.additionalContext` protocol naming the derived absolute binary path, expected version and source revision, plus the exact immutable-Git install command from Phase 1 with the expanded root shown to the pioneer; then exit `2`. Never silently skip a contract edit because the wrong tool is installed. -- [x] Retain stdin JSON parsing, `FILE_PATH` compatibility, project/contract path filtering, release profile, complete build-output capture, last-20-lines failure context, success JSON, and propagation of build failures with exit `2`. -- [x] Exercise the exact command from `.claude/settings.json` under the captured **default environment**, without a `PATH` prefix or shell-local tool-root export; supply only the settings-required `CLAUDE_PROJECT_DIR="$PWD"`. Feed representative non-contract and contract JSON input directly to the hook command. Record that ambient `command -v cargo-miden` still resolves the preserved `0.9.0` binary while the hook logs/uses the derived isolated `.../miden-v16-0.10.0-rc.1/bin/cargo-miden`. Required results: non-contract input exits `0` without building; contract input verifies `0.10.0-rc.1`, attempts the affected contract build, and propagates its result. -- [x] Do not require the pre-migration contract-input build to succeed with the v0.16 compiler against untouched v0.15 manifests/source. At this point a source-incompatibility exit `2` is acceptable only when the evidence proves exact-tool preflight, a real attempted build, and correct exit/output propagation. The Phase 5A guardrail itself is then ready; migrated builds must become green in Phase 5B/6. -- [x] On the first actual `contracts/**/src` edit in Phase 6, capture the automatic PostToolUse invocation from the default hook environment and prove it again used the isolated absolute binary. The active Codex patch runtime does not dispatch Claude Code's `.claude/settings.json` hooks, so the executor invoked the exact settings command immediately after the edit with the exact edited path and no tool-path environment override; it succeeded with the derived isolated binary. `.claude/settings.json` remains unchanged. - -Do not begin Phase 5B or any contract-source adaptation unless the hook itself passes these cases. - -#### 5B. Exact pins, build-script support, and target metadata - -- [x] With the Phase 1 support-helper capability gate green, apply the three packaging adaptations from `COMPILER_PACKAGING_COMMIT` before any contract `src` edit. Copy the changed lines/files verbatim, not the whole scaffold files: - 1. In both contract manifests, retain exact guest version `0.14.0-rc.1` but source it from immutable Git revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, and add exactly one `[build-dependencies]` entry `miden-sdk-build-script-support` at that same Git revision. The upstream registry strings were applied first; the support package was absent, and execution then proved that the published guest payload cannot supply the same-version pipeline's embedded WIT. The existing human decision authorizing the unreleased v16 compiler pipeline therefore applies to both sources; no later commit is allowed. - 2. Add one `build.rs` per contract with exactly: - - ```rust - fn main() { - miden_sdk_build_script_support::prepare_package_cache(); - } - ``` - - 3. Add exactly `path = "src/lib.rs"` as the first key under each `[lib]` target. Preserve target kind/namespace, ordinary dependencies, and supported types; never add `project-kind`. -- [x] Apply the current task's separate embedded-WIT API adaptation to `contracts/increment-note/miden-project.toml`: delete only the generated-WIT explanatory comment, `[package.metadata.miden.dependencies]` header, and `counter-account = { wit = "../counter-account/target/generated-wit/" }`; preserve the existing `[dependencies]` table and exact `counter-account = { path = "../counter-account" }` entry. -- [x] Verify the packaging and WIT edits structurally before resolving locks: each contract manifest has exactly one matching build-dependency section/key; each project manifest has exactly one `[lib]` and matching path; increment-note has exactly one ordinary counter-account path dependency and no generated-WIT metadata table/key; neither project manifest contains `project-kind`; and each new `build.rs` byte-compares equal to `COMPILER_PACKAGING_COMMIT:extra/templates/project/`. Compare only the specifically authorized manifest sections rather than replacing whole files. -- [x] Update `integration/Cargo.toml` to the complete host pin set in the file map. Remove `cargo-miden` from the host graph; it is an exact isolated executable, not a host library. Add direct `miden-protocol = "0.16.0-rc.6"` to absorb PR #55's intent; do not omit it merely because protocol is also transitive. Use complete prerelease strings and leave Tokio/anyhow unchanged unless exact resolution proves a requirement. -- [x] Regenerate each contract lock independently from its manifest. -- [x] After each lock is deliberately resolved, run `cargo metadata --locked --no-deps --format-version 1 --manifest-path /Cargo.toml`. Require the exact guest/build-support requirements and no unintended manifest change; metadata inspection must not perform an implicit second lock update. -- [x] Regenerate the root lock from the host pins without blanket `cargo update`; use per-package `--precise` updates or normal resolution from edited exact requirements. The pre-resolution attempt with `cargo-miden` in this graph failed exactly as expected: published rc.1 requires protocol `=0.16.0-alpha.4`, the authorized source compiler requires `=0.16.0-rc.4`, and neither can share Cargo's semver-compatible protocol package slot with required host rc.6. The explicit process/artifact boundary is the resolution; do not downgrade or patch either line. -- [x] Inspect `cargo tree -p integration -d` and all three locks: - - the host graph contains only the frozen client/protocol/VM line and no `cargo-miden`/compiler package; the compiler/build-support line remains in the isolated executable and the two independent contract locks; - - no direct dependency drifted from the frozen pins; - - integration resolves its direct `miden-protocol` exactly `0.16.0-rc.6` alongside client/store rc.2 and standards/testing rc.6; - - both contract locks resolve `miden-sdk-build-script-support` version `0.14.0-rc.1` from exact Git source revision `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, never a branch or later commit; - - both contract locks resolve guest `miden` and its compiler SDK crates at version `0.14.0-rc.1` from the same exact Git revision, `miden-protocol` and `miden-protocol-build-utils` exactly rc.4, and every compiler-side VM workspace crate exactly `0.29.1` as recorded by `COMPILER_PIPELINE_COMMIT:Cargo.lock`; no later compatible protocol RC or `0.29.x` patch is accepted merely because a manifest range permits it; - - `miden-tx-batch-prover` is gone in favor of `miden-tx-batch`; - - no attempt was made to unify the accepted version lines. -- [x] Repeat the plain-Cargo helper gate on the actual target packaging with an absolute launcher and checkout-private target. Leave inherited cache state unset so the helper must prove dependency staging; never rely on the ambient v0.9 executable or a shared/global target: - - ```sh - CARGO_MIDEN_BIN="$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" - PLAIN_CARGO_TARGET="$PWD/target/plain-cargo-v16" - case "$CARGO_MIDEN_BIN" in /*) ;; *) exit 1 ;; esac - test -x "$CARGO_MIDEN_BIN" - test "$("$CARGO_MIDEN_BIN" miden --version)" = 'cargo-miden 0.10.0-rc.1' - (cd contracts/counter-account && \ - env -u MIDENC_PACKAGE_CACHE CARGO_MIDEN="$CARGO_MIDEN_BIN" \ - CARGO_TARGET_DIR="$PLAIN_CARGO_TARGET" \ - cargo check --manifest-path Cargo.toml --release -vv) - (cd contracts/increment-note && \ - env -u MIDENC_PACKAGE_CACHE CARGO_MIDEN="$CARGO_MIDEN_BIN" \ - CARGO_TARGET_DIR="$PLAIN_CARGO_TARGET" \ - cargo check --manifest-path Cargo.toml --release -vv) - ``` - - Cargo discovers each existing `.cargo/config.toml` from the process working directory, not from a child `--manifest-path`; running these from the repository root is invalid because it drops `wasm32-wasip2` and `cfg(miden)`. The counter check passed pre-source. The increment-note pre-source check correctly proved dependency staging but then failed because the still-unmarked counter package exposed no callable interface; rerun it after Phase 6A. Require both final checks to publish content-addressed package generations beneath this target, leave no `.staging-*`, and use only the exact isolated launcher. A nested `dependencies` checkpoint/`CompilerStopped` failure, stale fallback, or cross-checkout target path is a hard stop; do not bypass the helper by setting `MIDENC_PACKAGE_CACHE` manually. -- [x] Run a workspace build, then build both contracts by invoking the isolated binary directly—never bare `cargo miden`: - - ```sh - MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}" - MIDEN_V16_TOOL_ROOT="$MIDEN_CARGO_HOME/miden-v16-0.10.0-rc.1" - CARGO_MIDEN_BIN="$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" - PLAIN_CARGO_TARGET="$PWD/target/plain-cargo-v16" - test "$("$CARGO_MIDEN_BIN" miden --version)" = 'cargo-miden 0.10.0-rc.1' - (cd contracts/counter-account && \ - env -u MIDENC_PACKAGE_CACHE CARGO_MIDEN="$CARGO_MIDEN_BIN" \ - CARGO_TARGET_DIR="$PLAIN_CARGO_TARGET" \ - cargo check --manifest-path Cargo.toml --release -vv) - (cd contracts/increment-note && \ - env -u MIDENC_PACKAGE_CACHE CARGO_MIDEN="$CARGO_MIDEN_BIN" \ - CARGO_TARGET_DIR="$PLAIN_CARGO_TARGET" \ - cargo check --manifest-path Cargo.toml --release -vv) - cargo build --workspace --release - "$CARGO_MIDEN_BIN" miden build --manifest-path contracts/counter-account/Cargo.toml --release - "$CARGO_MIDEN_BIN" miden build --manifest-path contracts/increment-note/Cargo.toml --release - ``` - - Treat compiler errors as the input to the next minimal source adaptation; do not advance to tests while the affected layer is red. - -### Phase 6 — Minimal code migration, highest risk first - -#### 6A. Counter account - -- [x] Using only `COMPILER_PACKAGING_COMMIT:examples/counter-contract/src/lib.rs:20-28` as the source pattern, add `#[account_procedure]` immediately above both trait method declarations and nowhere else. The scaffold copy is forbidden as source evidence because its identical v0.15 trait omits both markers. -- [x] Build `counter-account` in release mode with `"$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" miden build --manifest-path contracts/counter-account/Cargo.toml --release`; never rely on ambient Cargo subcommand resolution. -- [x] Verify the resulting package exposes both account procedures using package metadata if supported; later note execution is the definitive behavior proof. The frozen CLI has no separate package-interface inspection command; the definitive proof passed when the unchanged increment note compiled against both generated calls and `counter_test` executed them to the preserved count-`1` assertion. - -#### 6B. Increment note - -- [x] Build `increment-note` after the counter WIT/package exists with `"$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" miden build --manifest-path contracts/increment-note/Cargo.toml --release`; never rely on ambient Cargo subcommand resolution. -- [x] Keep `Wallet`, `#[account(counter_account::CounterContract)]`, note signature, method calls, arithmetic, and `assert_eq` unchanged. The full Migration Guide audit establishes that the generated `CounterContract` trait is same-module/in scope and does not collide with `Wallet`; the note also has no reserved `get_entrypoint_root` or felt-representation conflict. No trait import/alias was needed. -- [x] If the note cannot call both marked procedures without a behavior-changing rewrite, stop and report. The note compiled and the behavior test passed, so this conditional stop did not trigger. - -#### 6C. Integration helper - -- [x] Replace in-process `cargo_miden::run`/`CommandOutput` in `build_project_in_dir` with the frozen compiler's own source-proven external-process pattern. The implementation derives and verifies the exact binary, sets child `CARGO_MIDEN`, captures failures, accepts exactly one official `Compiled ` report, resolves it against the child working directory, requires a regular file, and retains `Package::read_from_bytes`. -- [x] Apply the recorded runtime decision as a one-line, temporary `Endpoint::testnet()` -> `Endpoint::devnet()` replacement. The pinned constructor was already source-verified as exact `https://rpc.devnet.miden.io`; timeout and configuration behavior are unchanged. -- [x] Change direct `rand` to 0.10 and import `rand::Rng` so `client.rng().fill_bytes` uses the same trait version as the pinned client. -- [x] Replace the manual raw gRPC construction with `.grpc_client(&endpoint, Some(timeout_ms))`, retaining the approved DevNet endpoint and existing timeout while preserving v0.16 response verification. -- [x] Remove only `.in_debug_mode(true.into())`; do not confuse it with the helper's cargo `--debug` build profile. -- [x] Replace `.with_auth_component(NoAuth)` with `.with_component(NoAuth)`. -- [x] Replace the two-argument `AuthSingleSig::new` with the source-proven `AuthSingleSig::new(Approver::new(commitment, AuthSchemeId::Falcon512Poseidon2))`, then pass it through `.with_component`. -- [x] Remove only the stale “In protocol v0.15” qualifier from `AccountCreationConfig::account_type`; retain the accurate statement that `AccountType::Public`/`Private` encodes storage visibility. -- [x] Preserve the client/store/existing-keystore paths, public `AccountType`, storage seed, package reader, printed account ID, `client.add_account` followed by `keystore.add_key`, and all error context. No alternate keystore path or inspection was introduced. -- [x] Run `cargo clean -p integration` once after changing shared helper code, then rebuild integration to avoid stale binaries. The clean reported no stale package artifacts and the release workspace build passed. - -#### 6D. Integration test - -- [x] Import `StorageMapKey` and replace only the removed MockChain transaction-construction API and typed map-key argument. -- [x] Preserve sender auth, counter initial state, note package and ID, transaction execution, pending transaction insertion, block proof, storage slot/key, assertion text, expected value `1`, and test name. -- [x] Run the single test immediately. `counter_test` passed: one passed, zero failed, zero ignored. -- [x] Diff `integration/tests/counter_test.rs` against `BASELINE_COMMIT` and prove that every changed hunk is an API adaptation and lines containing the final assertion are unchanged. The complete diff contains only the import, transaction-builder replacement, and typed lookup key; the assertion block is byte-identical. - -#### 6E. Binary - -- [x] First build `increment_count` unchanged against the migrated helper/dependencies. The release build passed and the binary source has an empty diff against `BASELINE_COMMIT`. -- [x] Preserve `.tag(0)`, the two requests, sync points, print labels/order, no arguments, and no final state read. The complete binary-source diff is empty; the only runtime change is inherited from the authorized helper endpoint. -- [x] On a zero-fee v0.16 environment, do not add fee conversion info or funding code. The read-only DevNet probe reported zero verification base fee and no fee/funding code was added; the immediate runtime probe must repeat this result. -- [x] On a nonzero-fee environment, stop before editing: the fresh sender and `NoAuth` counter both have empty vaults. The sender would need fee conversion info plus a funded fee asset; `NoAuth` must be funded in the native fee asset and rejects explicit conversion info. Adding faucet/funding flow or changing auth/endpoint/CLI beyond the recorded DevNet exception is a separate material behavior change requiring new user approval. The immediate DevNet probe reported zero verification base fee, so this conditional stop did not trigger and no fee/funding behavior was added. - -### Phase 7 — Documentation and skills after the hook migration - -- [x] Before documentation edits, rerun the exact `MIGRATION_INVENTORY_PATTERN` command, exact hook/seven-skill inventory, and exact MASM filename inventory from the product-only search contract. Require `ACTUAL_SKILLS` to equal the seven explicitly named `EXPECTED_SKILLS`, `CONTROL_PATHS` to contain exactly eight paths (one hook plus those seven skills), and MASM status/stdout/stderr to remain `0`/empty/empty. After documentation edits, rerun the same three commands and preserve a before/after comparison. No placeholder pattern or unrestricted ignored-file scan is permitted. -- [x] Update `README.md` only where v0.16 provisioning/commands and current runtime target are stale. State that the v0.16 midenup channel does not provision this contract toolchain, show the exact isolated-root direct RC install/version check, describe `increment_count` as temporarily targeting DevNet—not Testnet—and remove the nonexistent `config.rs` tree entry exactly as intended by PR #58. -- [x] Update `CLAUDE.md` examples and pitfalls to match the working migrated code; include the required per-contract build-support dependency/wrapper and preserve the package-cache/tool provenance caveat. Do not add new architectural advice. -- [x] Document the already-repaired hook's Cargo-home-derived isolated path and exact `cargo-miden 0.10.0-rc.1` requirement where setup guidance describes automatic contract builds. Do not tell pioneers that ambient `PATH` selects the hook compiler. -- [x] Where plain `cargo check`/IDE analysis is documented, state that each contract's `build.rs` calls `prepare_package_cache()`, `CARGO_MIDEN` must select the verified absolute v0.16 binary, and a checkout-private Cargo target avoids cross-checkout cache reuse. Do not suggest manually setting `MIDENC_PACKAGE_CACHE` as a bypass. -- [x] Port the seven local skills in place: - - `local-node-validation`: v0.16 node/client pairing, sealed inputs, fresh SQLite store, fees, removed debug mode, and descriptions of the current `increment_count` binary as DevNet rather than Testnet; - - `miden-client-cli`: current project client `0.16.0-rc.2` and v0.16 CLI behavior, superseding PR #56's intermediate 0.15 update; - - `miden-concepts`: qualify the stale “no gas” claim and reflect fee/auth semantics; - - `rust-sdk-patterns`: account-procedure markers, target paths, build-support wrapper, generated interface traits, and exactly the three current-task embedded-WIT corrections. Replace the note-metadata claim, “two places” dependency block, and checklist claim with ordinary `[dependencies]`-only guidance plus the accurate embedded-WIT/leftover-key rule. Use the reconciled output section-by-section, never as a whole-file replacement, and do not introduce `project-kind`; - - `rust-sdk-pitfalls`: current SDK/compiler pins, deterministic `CARGO_MIDEN`/package-cache rules, and relevant v0.16 silent semantic traps; - - `rust-sdk-source-guide`: corrected repositories/tags, MSRV, and two-version-line workspace; - - `rust-sdk-testing-patterns`: rc.6 dependencies, `build_transaction`, typed map keys, `AccountPatch` terminology, and correct `apply_patch` versus intentionally relative `account_delta` examples. -- [x] Treat each skill example as a claim: verify against exact source or the now-green target code. Delete/weaken no safety guidance. -- [x] Classify every case-insensitive Testnet match from the exact Phase 9 documentation gate. Any statement that calls the current `increment_count` binary or helper Testnet-backed must be changed to DevNet. Accurate generic CLI choices, source-exploration topics, and the explicitly future Testnet-restoration note may remain only with a row explaining why they do not describe current runtime behavior. -- [x] Leave the existing `*.masl` ignore rule untouched unless a pinned build/runtime failure proves it blocks the migration. Do not add generated package artifacts to Git. -- [x] Do not change CI, `.cursorrules`, settings, root workspace structure, or the Rust toolchain merely to modernize them. Edit only if the required local build/quality gate proves a v0.16 incompatibility. - -### Phase 8 — Full verification and real runtime gate - -- [x] Create final evidence logs: - - `outputs/project-template-final-build-test.log` - - `outputs/project-template-final-binary.log` - - `outputs/project-template-final-report.md` -- [x] Run formatting checks without bulk reformatting unrelated code. -- [x] Run, with the isolated v0.16 tool selected, and record full output/exit codes: - - ```sh - MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}" - MIDEN_V16_TOOL_ROOT="$MIDEN_CARGO_HOME/miden-v16-0.10.0-rc.1" - test "$("$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" miden --version)" = 'cargo-miden 0.10.0-rc.1' - cargo build --workspace --release - "$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" miden build --manifest-path contracts/counter-account/Cargo.toml --release - "$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" miden build --manifest-path contracts/increment-note/Cargo.toml --release - cargo build -p integration --bin increment_count --release - cargo test -p integration --release -- --list - cargo test -p integration --release -- --nocapture - ``` - - Require the repeated plain-Cargo checks to exercise the wrapper successfully with the exact launcher, checkout-private target, published cache generations, and zero lingering `.staging-*`. Preserve verbose evidence; the final contract builds do not substitute for this packaging capability. - -- [x] Compare test names and results line by line with the baseline. Required result: the same `counter_test` passes with its assertion intact; zero deleted/ignored/weakened tests. -- [x] Run the exact product-root MASM filename inventory from the search contract and append its complete stdout, stderr, and status. Required result for this repo: status `0`, empty stdout, and empty stderr, proving zero repository-owned `.masm` files in the declared product roots; module declaration reachability is therefore N/A. If a file appears, classify its exact module-declaration/package reachability and stop for reconciliation rather than claiming the empty result. Do not claim generated Rust-contract procedures are covered by this check; prove them through package inspection and successful transaction submission. -- [x] Immediately before store replacement or transaction submission, rerun the exact store-free `Endpoint::devnet()` probe from Phase 4 and append its output. Require the exact configured endpoint/classification, node and block-producer `0.16.0-rc.1` equality, block-producer `connected` status, the same genesis commitment observed in Phase 4, chain/header checks, and `verification_base_fee=0`; a prior result is insufficient because runtime state is time-dependent. Describe package/source/protocol correspondence as the recorded inference, not remote attestation. -- [x] Before any v0.16 client opens the active store path, record the exact ignored `store.sqlite3` path and move it to a task-specific private temporary backup so removal is recoverable. Do not migrate or commit it. Do not manually inspect, copy, move, delete, or print the existing keystore; the later application's `keystore.add_key` mutation is the sole authorized keystore write. -- [x] If the immediate runtime probe is not green, stop at the runtime gate. Do not fall back to Testnet/localhost, accept another node RC, or change auth, funding, CLI, output, request arguments, or transaction flow. The probe was green, so this conditional stop did not trigger. -- [x] From `integration/`, run every binary (currently only `increment_count`) against the approved DevNet node. Label the result **`SUBMISSION-ONLY PASS`** only if the process exits `0`, the publish `submit_new_transaction` returns a transaction ID, the existing intervening `sync_state()` succeeds, the consume `submit_new_transaction` returns a transaction ID, and the same six output fields are printed in the same order. This proves successful submission calls only. Because the preserved binary performs no post-consumption sync, transaction-status query, note-state query, or counter storage read, do not claim on-chain commitment/finality, confirmed note consumption, or a runtime-observed counter value. Attribute semantic execution and the count-`1` assertion to the unchanged passing `counter_test`, not to the live binary. The submissions intentionally create authorized public DevNet side effects and may result in irreversible network inclusion; the binary does not observe that inclusion. -- [x] If committed-state evidence is later required, stop for a separately source-verified, separately approved out-of-band observer plan. Do not add polling, sync, status queries, or storage reads to `increment_count`, because that would violate the preserved-behavior invariant. No such evidence was required or added. -- [x] Record, without printing or inspecting secret material, that normal account setup completed `client.add_account` and then application-level `keystore.add_key` against the existing keystore. This persistent DevNet-key insertion is expected and explicitly authorized. Any manual keystore mutation or alternate keystore path is out of scope. -- [x] Confirm a fresh v0.16 DevNet SQLite store was created and synced; never reopen the archived v0.15/Testnet store with v0.16. Record a follow-up that the future return to Testnet must use a fresh Testnet store and must re-run the same exact-version/fee/runtime gates for the upgraded Testnet stack. -- [x] Compare binary behavior with the baseline/static fallback. A build-only result is failure. The final binary report must use the exact `SUBMISSION-ONLY PASS` label and repeat the unobserved-commitment/count limitations beside the returned IDs. - -### Phase 9 — Stale-reference, drift, and material-change audit - -- [x] Keep `tasks/todo.md` in place. It is planning evidence, not product content, and is excluded by the explicit product roots rather than moved or hidden to manipulate results. Source the exact `PRODUCT_PATHS`/`PRODUCT_EXCLUDES` arrays from the product-only search contract for every command below. -- [x] Gate 1 — stale v0.15 product references: - - ```sh - rg --hidden -n 'v?0\.15(?:\.[0-9]+)?|\bv15(?:[-_/][[:alnum:].-]+)?\b' \ - "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" - ``` - - Required result: zero matches (`rg` exit `1`). This includes dotted v0.15 versions and compact forms/branch names such as `v15` and `kbg/chore/v15-migration`. There are no intentional v0.15 exceptions in product manifests, source, docs, hooks, skills, or settings. Older transitive versions inside excluded `Cargo.lock` files are assessed through the lock/dependency audit instead. - -- [x] Gate 2 — old direct pins/tool versions, including pre-v0.16 lines that do not contain `0.15`: - - ```sh - OLD_PIN_SELF_CHECK=$(printf '%s\n' "$OLD_PIN_SAMPLES" | rg -x "$OLD_PIN_PATTERN") - test "$OLD_PIN_SELF_CHECK" = "$OLD_PIN_SAMPLES" - if printf '%s\n' 0.10.0-rc.1 0.29.1 | rg -q "$OLD_PIN_PATTERN"; then - exit 1 - fi - rg --hidden -n "$OLD_PIN_PATTERN" \ - "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" - ``` - - Required result: the positive and negative self-checks pass, then the product search finds zero matches (`rg` exit `1`). The shared pattern deliberately catches standalone `v0.9.x`/`0.9.x` compiler references and standalone old VM `v0.23`/`0.23.x` references even when nearby text does not name cargo-miden, midenc, or MAST. No product exception is permitted for these old direct pins or tool/VM versions. The frozen new pins (`miden 0.14.0-rc.1`, isolated cargo-miden/midenc `0.10.0-rc.1`, direct protocol/standards/testing rc.6, client/store rc.2, MAST package 0.29.1, rand 0.10) must be verified separately. Verify compiler executables by absolute path/version/source provenance and verify host pins by manifest/metadata; require `cargo-miden` absent from integration metadata and the root lock. - -- [x] Gate 3 — removed crates and APIs: - - ```sh - rg --hidden -n \ - 'miden-tx-batch-prover|with_auth_component|in_debug_mode|build_tx_context|AssetVaultKey|AuthMethod|AuthSingleSigAcl|Asset::vault_key|`(?:Library|KernelLibrary)`|\bKernelLibrary\b|\bmiden_(?:client::assembly|assembly)::Library\b|\bLibrary::[A-Za-z_][A-Za-z0-9_]*|\b(?:Arc|Box|Option|Result|Vec)])|link_[A-Za-z0-9_]*_library|[A-Za-z0-9_]*_from_dir' \ - "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" - ``` - - Required result: zero stale API matches (`rg` exit `1`). This deliberately targets `Library` as a Rust/API symbol rather than matching every English use of the word. - - Then inventory every bare `Library` occurrence: - - ```sh - rg --hidden -n '\bLibrary\b' \ - "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" - ``` - - Classify every result in `outputs/project-template-semantic-symbol-audit.md`. Generic headings/prose such as “Standard Library” and “Client Library” are intentional exceptions and require no edit. Any removed Rust `Library` API context must be remediated and must also make the narrowed stale-API command fail until fixed. This classification prevents unrelated prose churn. - -- [x] Gate 4 — obsolete `.masl` spelling, with one deliberate no-cleanup exception: - - ```sh - rg --hidden -n '\.masl' \ - "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" - ``` - - Required result: exactly one match, `.gitignore:9:*.masl`. It is intentional because deleting an obsolete ignore entry alone is out of migration scope. Any other `.masl` match fails the gate. If a required build/runtime change legitimately alters `.gitignore`, update this expected-line evidence rather than hiding the match. - -- [x] Gate 5 — asset-identity semantic classification: - - ```sh - rg --hidden -n '\b(AssetVaultKey|AssetId|AssetClass)\b' \ - "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" - ``` - - First classify **every** match from the initial run—including any `AssetVaultKey`—in `outputs/project-template-semantic-symbol-audit.md` with path:line, containing symbol, semantic role (`AssetVaultKey` = removed v0.15 vault identity; v0.16 `AssetId` = per-asset vault identity; `AssetClass` = faucet/class identity), action or justified no-action, and pinned-source citation. Use `COMPILER_PACKAGING_COMMIT:examples/basic-wallet/src/lib.rs` as the CI-maintained guest account/asset-operation pattern and exact frozen protocol source for the `AssetId`/`AssetClass` semantic definitions; neither source permits a blind rename. Remediate any stale occurrence, rerun the exact command, and require zero final `AssetVaultKey` matches. Every surviving `AssetId` and `AssetClass` must remain in the final ledger. Zero unclassified initial or final occurrences are allowed; do not infer correctness from compilation. - -- [x] Gate 6 — account-update semantic classification: - - ```sh - rg --hidden -n '\b(AccountDelta|AccountPatch)\b|\b(?:account_delta|account_patch|apply_delta|apply_patch)\s*\(' \ - "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" - ``` - - Classify **every** match from the initial run and every match from the final rerun in the same semantic audit with path:line, semantic role, action/no-action, and pinned-source citation. `AccountPatch`/account `apply_patch()` is required for absolute account updates; `AccountDelta`/`account_delta()` is intentional only for the relative `TransactionSummary` surface. Account-update `apply_delta()` examples are stale and must be migrated. Any update-path `AccountDelta`/`apply_delta`, any relative-summary `AccountPatch`, or any unclassified initial/final match fails the gate. Zero total matches is acceptable only if the captured command output proves there are no product occurrences. - -- [x] Gate 7 — Testnet-specific documentation and source classification: - - ```sh - rg --hidden -n 'Endpoint::testnet' \ - "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" - ``` - - Required result: zero matches (`rg` exit `1`); the current product source and examples must not select Testnet while the authorized interim DevNet behavior is active. - - Then classify Testnet prose/URLs separately: - - ```sh - rg --hidden -ni 'https://rpc\.testnet\.miden\.io|\btestnet\b' \ - "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" - ``` - - Add every match to `outputs/project-template-semantic-symbol-audit.md` with path:line and role. Required result: zero docs/skill statements that describe the **current** helper or `increment_count` binary as Testnet-backed. Accurate generic network choices, source-exploration topics, and the explicit future Testnet-restoration follow-up are intentional exceptions only when classified. Do not erase accurate general Testnet documentation merely to force zero matches. - -- [x] Gate 8 — exact Rust-contract packaging and source-reference boundary: - - Require each contract manifest to contain exactly one `[dependencies]` Git entry for `miden` with version `=0.14.0-rc.1`, URL and full revision equal to the authorized pipeline, plus exactly one `[build-dependencies]` Git entry for `miden-sdk-build-script-support` at that same URL/revision; validate section membership, versions, and resolved lock sources with TOML/lock parsing, not loose text counts. - - Require each project manifest to contain exactly one `[lib] path = "src/lib.rs"`; require increment-note to retain exactly one `counter-account = { path = "../counter-account" }` under `[dependencies]` and contain zero `[package.metadata.miden.dependencies]` tables and zero `wit` keys. Require zero `project-kind` keys in both project manifests. - - Capture stdout, stderr, and status for these focused final scans. The first two must return status `1` with empty stdout/stderr; any status `2` is a gate error rather than a pass: - - ```sh - rg -n '^\[package\.metadata\.miden\.dependencies\]$|^[[:space:]]*[^#].*\bwit[[:space:]]*=' \ - contracts/increment-note/miden-project.toml - rg --hidden -n '\bproject-kind\b' \ - "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}" - ``` - - Then use section-aware TOML parsing to prove the remaining counter-account dependency belongs to `[dependencies]`, its value is exactly `{ path = "../counter-account" }`, and `[lib].kind` remains `note`; a loose text match is not sufficient for section membership. - - Compare `.claude/skills/rust-sdk-patterns/SKILL.md` against the Phase 3 baseline and `rust-sdk-patterns.RECONCILED.md` by the three named sections. Require the old note-metadata WIT-entry claim, “declare ... in two places” block, and “under both ... (wit)” checklist claim to be absent; require their replacements to say that embedded-WIT dependencies use the ordinary `[dependencies]` path, a leftover `wit` key is an error for this package, and the metadata key remains only an escape hatch for packages without embedded WIT. Require all unrelated skill content to remain preserved and zero `project-kind` matches across product roots. - - Run this exact literal stale-claim scan. At Phase 3 baseline it must return status `0`, empty stderr, and exactly three matching lines; at the final gate it must return status `1` with empty stdout/stderr. Status `2` or any baseline count other than three is an error: - - ```sh - rg -n -F \ - -e 'cross-component `[package.metadata.miden.dependencies]` WIT entry' \ - -e 'in **two places**' \ - -e 'under both `[dependencies]` (path) and `[package.metadata.miden.dependencies]` (wit)' \ - .claude/skills/rust-sdk-patterns/SKILL.md - ``` - - - Run exact fixed-string positive checks for the following five canonical strings from the three reconciled sections. Require each to occur on exactly one line with status `0` and empty stderr, then inspect the complete three affected sections semantically: - - ```sh - POSITIVE_WIT_SKILL_PATTERNS=( - '**Project metadata for notes:** See [increment-note/miden-project.toml](../../../contracts/increment-note/miden-project.toml) for `[lib] kind = "note"`, the `namespace` (`miden:increment-note/miden-increment-note@0.1.0`), and the path dependency on the called component (`counter-account = { path = "../counter-account" }`).' - 'declare the component under `[dependencies]` in `miden-project.toml`: `counter-account = { path = "../counter-account" }`.' - 'WIT is embedded in its compiled package, so no `[package.metadata.miden.dependencies]` entry is needed.' - 'it survives only as an escape hatch for dependency packages that do not embed WIT.' - '- [ ] Cross-component deps declared under `[dependencies]` in `miden-project.toml` (no `wit` key: WIT is embedded in the compiled package)' - ) - for expected in "${POSITIVE_WIT_SKILL_PATTERNS[@]}"; do - test "$(rg -n -F -- "$expected" .claude/skills/rust-sdk-patterns/SKILL.md | wc -l | tr -d ' ')" -eq 1 - done - ``` - - - Byte-compare both target `build.rs` files with their same relative paths at `COMPILER_PACKAGING_COMMIT`. Require exactly two target `#[account_procedure]` markers, both on counter trait declarations, and zero in increment-note. - - Record that the scaffold itself still has zero procedure markers and is excluded from compiler template tests. Do not compare/copy scaffold `src/` or `integration/` into the target; their verified equality is evidence that they are stale, not a desired final state. - - Re-run the Phase 5B/8 plain-Cargo checks and require the exact isolated launcher/cache contract. A passing `cargo miden build` alone does not make the build-support packaging gate green. - -- [x] Gate 9 — decided Git base and superseded open-PR intent: - - require branch `kbg/chore/v16-migration`, `MAIN_BASE_COMMIT` equal to the fetched `origin/main`, and one separate signed `SKILLS_BASE_COMMIT` whose diff is exactly the six files from source commit `80394cd`; - - require integration metadata to expose direct `miden-protocol = "0.16.0-rc.6"` (PR #55 intent), not merely a transitive protocol edge; - - require `.claude/skills/miden-client-cli/SKILL.md` to state the v0.16 client `0.16.0-rc.2` and contain no intermediate `0.14`/`0.15` pin (PR #56 intent); - - require the stale README `config.rs` tree entry to be absent (PR #58 intent); - - record in the final report that #55, #56, and #58 are superseded by these v0.16 results. Do not post, close, merge, or otherwise mutate any PR. - -- [x] Rerun the exact union command `rg --hidden -n "$MIGRATION_INVENTORY_PATTERN" "${PRODUCT_EXCLUDES[@]}" "${PRODUCT_PATHS[@]}"`, the exact hook/seven-skill inventory, and the exact MASM filename inventory after Gates 1-9. Compare all three with Phase 3 line by line. Require `.claude/hooks/build-contracts.sh` plus exactly the same seven skill paths to be present, require the MASM result to remain status `0`/empty stdout/empty stderr, and explain every surviving union text match through the gate-specific intentional-exception/semantic ledgers. -- [x] Preserve each command, stdout/stderr, and exit status in the final evidence. Do not add exclusions for product source, docs, hooks, skills, or settings to force green output, and do not substitute an unrestricted scan. - -- [x] Run `git diff --check`, review `git status`, `git diff --stat BASELINE_COMMIT`, and the complete diff. -- [x] Justify every hunk as one of: exact pin/lock resolution, required API adaptation, required v0.16 build/runtime configuration, or documentation of the migrated behavior. Revert all unrelated churn. -- [x] Write a material-behavior/side-effect delta ledger. Its only source-behavior exception is `integration/src/helpers.rs` changing `Endpoint::testnet()` to `Endpoint::devnet()`. It must also record the authorized consequences: public DevNet account creation, transaction submission and possible irreversible network inclusion, plus application-level insertion of the new DevNet key into the existing keystore. Distinguish observed submission/returned IDs from unobserved commitment. Every other source hunk must be API adaptation only and preserve behavior. Any additional material behavior or persistent side effect stops the migration for a new human decision. -- [x] Compare read-only against both compiler reference boundaries and report them separately: - - tagged `compiler@v0.10.0-rc.1` is the frozen release/API source and predates the build-support packaging; - - `COMPILER_PACKAGING_COMMIT:extra/templates/project` supplies only the three explicitly required packaging adaptations; its contract source and integration common files are byte-identical stale v0.15 copies and contain zero procedure markers. Its source/integration behavior is not built by the template-test job; wrapper identity and support-dependency presence are separately integration-test/CI-covered; - - label 33 paths each / 31 common / 18 byte-identical as the `BASELINE_COMMIT` comparison. For audited migration commit `6a0c467...`, report scaffold 33 paths, target 35 non-task paths, 33 common, 15 byte-identical, and the two target-only contract lockfiles; - - the embedded-WIT deletion is a separate current-task-required API adaptation beyond the three verbatim packaging changes; report the stale planning-checkout state and the exact manifest/three-skill-claim removals rather than misclassifying it as one of the packaging copies; - - standalone skill files retain the target's later v0.15 improvements before being ported, no scaffold source/integration file was copied, and no compiler-repository file was edited. -- [x] Confirm no generated artifacts, SQLite database, keystore files, secrets, or temporary backups are staged. The authorized ignored keystore mutation may exist locally but must never be inspected, logged, or staged. - -### Phase 10 — User checkpoint, signed local commit, and final report - -- [x] Present the green verification evidence and material-change audit, then obtain the required commit approval before committing. Approval received directly from the user on 2026-08-27: “yeah create a local commit. no push yet.” -- [x] Preserve the Phase 2 cherry-picked skills commit as a separate, signed history entry immediately above `MAIN_BASE_COMMIT`; never squash, amend, re-author, or fold it into migration work. -- [x] Create one cohesive signed migration commit containing only `BASELINE_COMMIT..HEAD` migration changes because the port and its documentation must move together. The exact header-only commit is `6a0c467308e4b1fc60e1702beb9ae5a6747accd8` (`chore: migrate project template to Miden v0.16`). -- [x] Use a header-only conventional commit, sign it, and add no body, co-author, or generated attribution. `git verify-commit 6a0c467308e4b1fc60e1702beb9ae5a6747accd8` and `%G?/%GS` report a valid signature by `philipp.keinberger@gmail.com`. -- [x] Verify the migration history shape `origin/main -> separate signed skills commit -> signed migration commit`: `56380d338950d8ca87c7d1bfbae7969c54684ab3 -> 1d47c165550ffe3757fd935b49256bf0370f3ad1 -> 6a0c467308e4b1fc60e1702beb9ae5a6747accd8`. Never amend; the final-audit correction must be a new signed follow-up commit after a separate checkpoint. -- [x] Do not push or open a PR. -- [x] Return the task's required sections in this exact order: - 1. Toolchain Resolution - 2. Baseline - 3. Migration Summary - 4. Source Verifications - 5. Files Changed - 6. Material-Change Audit - 7. Test Comparison - 8. Binary Run Log - 9. Drift vs compiler's `extra/templates/project` - 10. Blockers or Follow-ups - 11. Local Branch and Commit - - In `Blockers or Follow-ups`, state that PRs #55, #56, and #58 are superseded by the completed v0.16 changes without performing any GitHub action. In `Local Branch and Commit`, report `MAIN_BASE_COMMIT`, source skills commit `80394cd`, resulting `SKILLS_BASE_COMMIT`, each migration commit, and signature status separately. - -### Phase 11 — Final independent-audit corrections and signed follow-up - -- [x] Reconfirm clean starting branch `kbg/chore/v16-migration` at signed audited migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8`; re-read frozen compiler `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a` and protocol rc.6 asset source without fetching or changing any revision. -- [x] Independently downgrade only `miden-protocol-build-utils` rc.6 to rc.4 in each contract lock with the precise Cargo update. The diff for each lock is limited to that package's version and checksum and now matches the frozen compiler lock. -- [x] Correct only the two audited asset-guidance passages: guest `asset.key` is the asset ID / vault identity word, `AssetClass` distinguishes assets issued by one faucet, protocol `Asset` uses `to_id_word()`/`to_value_word()`, and fungible amount remains `value[0]`. Update the semantic ledger with exact protocol rc.6 citations. -- [x] Correct external final report, source-verification record, semantic audit, and build-test evidence. Distinguish baseline 33/31/18 from final pre-correction scaffold 33 / target 35 non-task / 33 common / 15 byte-identical / two target-only lockfiles. Record signed migration commit `6a0c467...` and remove the superseded `.git/index.lock` blocker claim. -- [x] Run each contract's canonical plain-Cargo check from its contract directory with absolute `CARGO_MIDEN`, inherited `MIDENC_PACKAGE_CACHE` unset, `--locked --offline --release -vv`, and a genuinely new checkout-private target directory. Record the full command/status, content-addressed package generations, and zero `.staging-*` residue without deleting an existing target. -- [x] Rerun formatting, workspace release build, both isolated compiler builds, unchanged binary build, test listing, full release test, lock/source parsing, focused stale asset search, unchanged-source checks, and `git diff --check`. Do not run the live binary or touch stores/keystore material. -- [x] Review the complete correction diff and require only both contract locks, two asset-guidance skills, this task record, and the named external evidence files. No application behavior, endpoint, auth, fee, funding, CLI, output, test, or transaction-flow change is present. -- [x] Present the verified correction diff and obtain a new explicit checkpoint before creating a signed follow-up commit. Approval received directly from the user on 2026-08-27: “yes i authrioize”. The separately signed correction exists at `8de62fe27d0873ab560c891c6ab274e35ceab80e`, has parent `6a0c467308e4b1fc60e1702beb9ae5a6747accd8`, and changes exactly the two contract locks, two asset-guidance skills, and this task record. This supersedes the earlier environment-local failed attempt; no active Git blocker remains. No push or GitHub action occurred. - -### Phase 12 — Final evidence reconciliation - -- [x] Reconfirm a clean starting worktree on branch `kbg/chore/v16-migration` at signed correction commit `8de62fe27d0873ab560c891c6ab274e35ceab80e`; verify its valid signature, signed parent `6a0c467308e4b1fc60e1702beb9ae5a6747accd8`, and exact five-file correction scope. -- [x] Replace the unrelated old corrected plain-Cargo log with two complete fresh runs from the contract directories. Use new checkout-private targets, absolute `CARGO_MIDEN`, inherited `MIDENC_PACKAGE_CACHE` removed, and `--locked --offline --release -vv`; preserve merged stdout/stderr and the real command statuses. -- [x] Require each fresh run to exit zero, compile its primary contract, emit a completion line, resolve protocol/build-utils rc.4, VM 0.29.1, and Git SDK source `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, publish exactly one `gen-*` directory, and leave zero `.staging-*` directories. -- [x] Reconcile this task record, the external final report, final build/test evidence, and raw plain-Cargo evidence with the signed correction topology and fresh target paths. Historical failures must not appear as the final state. -- [x] Rerun formatting, workspace and contract builds, unchanged binary build, test listing, the full release test, evidence consistency searches, `git diff --check`, and final Git status. All commands pass; `counter_test` remains the only test and reports one passed, zero failed, zero ignored. The live binary was not run and no store/keystore was accessed. -- [x] Present the exact evidence-only tracked diff and verification results for a new explicit commit checkpoint. Approval received directly from the user on 2026-08-27: “yes authriize without push”. The first environment-local attempt could not create `.git/index.lock`, but that historical failure was superseded by signed evidence commit `03068ada8ea2bf45fd32660810a4d46bef3d1d03` with parent `8de62fe27d0873ab560c891c6ab274e35ceab80e`, exact subject `docs: reconcile v0.16 migration evidence`, and tracked scope only `tasks/todo.md`. No push or GitHub action occurred. - -## Stop conditions - -Stop and report concisely rather than improvising when any of these occurs: - -- The executor cannot see the exact direct human-authored `RUNTIME-DEVNET-2026-08-24` authorization in inherited history or an independently human-supplied approval record. -- The post-fetch Git topology/path sets differ from the decided `origin/main` plus disjoint `80394cd` model, `kbg/chore/v16-migration` already exists, commit signing is not ready, or the exact cherry-pick conflicts/is empty. Do not merge PR #52, base on the skills branch, amend, squash, or improvise a replacement history. -- A frozen registry/tag pin does not resolve after one tag refresh. -- The immutable compiler source does not resolve exactly to `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`, its no-v17 version/dependency proof changes, the private Phase 1 plain-Cargo probe fails, or the helper uses an ambient/moving compiler/cache bypass. Do not copy the required packaging changes until this compatibility gate passes. -- Any proposed compiler/support/template source differs from `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`; do not substitute a later `origin/next` state even if its printed versions are unchanged. -- Increment-note cannot build with the explicitly required generated-WIT metadata removal, or the compiler indicates this dependency package does not embed WIT. Stop with exact immutable-source/build evidence; do not restore the stale `wit` key, invent another metadata form, or broaden the change without a reconciled human decision. -- The explicit compiler-process/MAST-artifact boundary fails, `cargo-miden` re-enters the host Cargo graph, or the direct host rc.6 line cannot resolve. Do not downgrade/patch the compiler rc.4 or host rc.6 line and do not link the compiler library into integration. -- The integration crate cannot retain direct `miden-protocol = "0.16.0-rc.6"` while satisfying the frozen client/standards/testing pins; do not silently drop PR #55's decided intent or rely only on a transitive edge. -- The untouched baseline is red, or a migrated build/test layer remains red. -- The same blocker is encountered three times. -- A required API or behavior cannot be proven from exact source. -- A test cannot be migrated without changing its meaning or assertion. -- The binary needs a different endpoint than the approved `Endpoint::devnet()`, a different node tag, auth model, funding workflow, CLI, output, or transaction flow. -- The configured endpoint/locally derived classification differs from exact `Endpoint::devnet()`, DevNet's unversioned status is not exactly node `0.16.0-rc.1`, its block producer is not exactly `0.16.0-rc.1` and `connected`, the two observed genesis commitments differ, its header checks fail, or its verification base fee is nonzero. -- The default-environment hook cannot derive and execute the isolated `cargo-miden 0.10.0-rc.1` binary independently of ambient `PATH`. -- The selected v0.16 runtime charges fees and the existing empty accounts cannot run unchanged. -- The application cannot preserve `client.add_account` followed by authorized insertion of the new DevNet key into the existing keystore without manual key handling or secret disclosure. -- Safe handling of unrelated worktree changes, the pre-v0.16 store, key material, or commit signing is unclear. -- Any step would require editing a reference repo, publishing, pushing, opening/merging a PR, or other remote-side mutation. - -## Planning review - -- First independent audit result: **BLOCKED**, not passed. It found an unresolved runtime target, missing exact node grounding, unsafe hook sequencing/tool selection, unrestricted scan commands, underspecified stale/semantic gates, and a false self-audit status. -- Second independent audit result: **NEEDS HUMAN**, not passed. The user has now supplied its requested explicit authorization for the endpoint change, live DevNet account/transaction creation, and application-level DevNet-key insertion into the existing keystore. Its technical findings are also revised below. -- Third independent audit result: **NEEDS HUMAN**, not passed. It did not receive the originating conversation's direct approval messages, so it correctly refused to authenticate the plan's self-transcription. The current re-audit must receive those human messages. Its standalone-version, exact-MASM-inventory, and runtime-evidence findings are incorporated below. -- Post-audit Rust-contract reference update: the user required the full `V16-RUST-CONTRACT-REFERENCE-MAP.md`, immutable compiler packaging/examples, and the complete sectioned `sdk/sdk/MIGRATION.md` review before migration. Those reads are complete and reconciled below; this materially revised plan has not yet received a new full audit. -- Earlier current-task Git-base update: the superseded 327-line task decided `origin/main` plus a separate cherry-pick of `80394cd`, and assigned the superseding intent of PRs #55/#56/#58. Phase 2, dependency/docs work, final gates, and commit reporting implement that still-current decision; no Git mutation has occurred during planning. -- Previous complete-plan audit result: **PASS for the superseded 327-line task revision**. It does not attest the current 353-line task's added embedded-WIT correction. -- Current 353-line task update: the task now explicitly requires fixing the three stale generated-WIT claims carried by `80394cd` and forbids `project-kind`. This revision also reconciles the task's stale assertion that the target manifest already lacks the WIT table: the planning checkout still contains it, so removal is an explicit migration edit with exact before/final gates. -- Current independent audit result: **PASS**. Its initial medium finding identified a broken Markdown-sensitive three-claim regex; the corrected literal scan matches exactly the three baseline claims, all five canonical positive checks match the reconciled reference exactly once, and the re-audit returned no findings. -- Current plan result: **SIGNED MIGRATION AND EVIDENCE CHAIN COMPLETE; PR-READINESS P3/FPI CORRECTION VERIFIED**. Signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8`, signed dependency/guidance correction `8de62fe27d0873ab560c891c6ab274e35ceab80e`, signed evidence commit `03068ada8ea2bf45fd32660810a4d46bef3d1d03`, and signed final commit-evidence correction `5ef123fe1332b87f82ff68f750be60461b6db284` form a direct-parent chain. The fresh raw plain-Cargo runs, external evidence, builds, tests, searches, and Git checks are green. The signed commit containing this task record is a direct child of `5ef123fe...` and corrects only the pre-PR P3/FPI guidance plus its task/lesson record; its self SHA is recorded externally after creation. Direct branch push and draft-PR creation are authorized; merge remains forbidden. -- First-audit change map: - 1. Runtime contradiction -> `Recorded human runtime decision`, Phase 4 exact DevNet probe, Phase 6C one-line endpoint edit, and Phase 8 real-runtime gate. - 2. Exact node/runtime pin -> `Authority and resolved source conflicts`, Phase 1 node tag/manifest/lock resolution, and exact Phase 4/8 status acceptance. - 3. Hook-before-source sequencing -> Phase 5A, which precedes all contract source edits and rejects every cargo-miden version except `0.10.0-rc.1`. - 4. Product-only searches -> `Product-only search contract`, Phase 3 baseline scan, Phase 7 hidden documentation scan, and Phase 9 gates; no `rg -u*` remains as an executable instruction. - 5. Concrete stale/semantic gates -> Phase 9 Gates 1-9 with patterns, exclusions, expected results, intentional exceptions, exhaustive semantic classification, exact packaging/source-boundary checks, and decided Git/PR-intent checks. - 6. Audit truthfulness -> document header and this section preserve the three earlier non-passing verdicts, scope the prior PASS to the superseded task revision, and record the current complete-plan re-audit only after its sole finding was fixed and the audit returned PASS. -- Second-audit change map: - 1. Explicit persistent-effect authorization -> `Recorded human runtime decision`, Phase 6C, Phase 8, and the Phase 9 material-side-effect ledger. - 2. Ambient-PATH-independent hook -> Phase 1's deterministic Cargo-home-derived isolated root and Phase 5A's direct absolute-binary resolution plus default/automatic-hook tests. - 3. Runtime evidence boundary -> `Recorded human runtime decision`, Phase 4's configured-classification/self-reported-version wording and genesis continuity check, Phase 8, and stop conditions. - 4. Complete before/final inventory -> exact `MIGRATION_INVENTORY_PATTERN` and hook/seven-skill commands, Phase 3, Phase 7, Phase 9 Gate 6, and the final before/after comparison. - 5. Focused stale gates -> Phase 9 Gate 1 covers compact `v15`; Gate 3 narrows removed `Library` API contexts and separately classifies allowed generic prose. - 6. Runtime docs and keystore effects -> Phase 7's Testnet classification/current-DevNet wording, Phase 8's explicit existing-keystore semantics, and Phase 9 Gate 7/side-effect ledger. -- Third-audit change map: - 1. Authentic human authorization -> `Recorded human runtime decision` assigns local record `RUNTIME-DEVNET-2026-08-24`, identifies the exact direct conversation message as the sole authority, records its scope/exclusions, distinguishes it from this plan's transcription, and requires both re-auditor and executor to receive the full approval context or stop. - 2. Standalone old compiler/VM versions -> shared `OLD_PIN_PATTERN`, its positive/negative self-check, `MIGRATION_INVENTORY_PATTERN`, Phase 3, and Phase 9 Gate 2 cover standalone `v0.9.x`/`0.9.x` and `v0.23`/`0.23.x` with zero final exceptions and no baseline/final regex drift. - 3. Reproducible empty MASM proof -> `Product-only search contract` defines the exact NUL-safe `find -print0` inventory, raw stdout/stderr/status capture, expected `0`/zero-byte/empty result, mixed-root `rg --files` prohibition, and appeared-file reachability stop; Phases 3, 7, 8, and 9 invoke it. - 4. Submission-only runtime evidence -> Phase 8 defines exact `SUBMISSION-ONLY PASS` criteria (two returned IDs, intervening sync, preserved output, exit `0`), attributes semantic/count proof to `counter_test`, and forbids claims about inclusion, confirmed consumption, finality, or runtime-observed counter state. -- Rust-contract reference update map: - 1. Full prerequisite reads -> header, `Authority and resolved source conflicts`, and Phase 4 record the 222-line reference-map read plus sub-agent review of all 859 Migration Guide lines by numbered range. - 2. Settled packaging copy -> `Expected file-level migration`, Phase 1 immutable commit/support compatibility gate, Phase 5B exact two-manifest/two-build-script/two-project-path changes, Phase 8 plain-Cargo verification, and Phase 9 Gate 8. - 3. Scaffold source trap -> resolved facts, Phase 4 immutable source/CI evidence, Phase 6 CI-maintained counter example, and Phase 9 drift report forbid copying scaffold `src/`/`integration/` or treating its build as evidence. - 4. Complete `## Unreleased` treatment -> Phase 4 classifies all 11 headings as applicable edit or audited N/A; the current task explicitly makes embedded component WIT applicable while the plan avoids unrelated forward-port changes. - 5. Tool/source incompatibility -> Phase 1 proves the required post-pin helper with the exact tagged binary in a private probe before product edits; Phase 5B/8 repeat it with absolute `CARGO_MIDEN`, an unset inherited cache, and checkout-private target; stop conditions forbid a moving compiler or manual cache bypass. - 6. Correct drift claim -> resolved facts and Phase 9 distinguish baseline 33/31/18 from the audited migration commit's scaffold 33, target 35 non-task, 33 common, 15 byte-identical, and two target-only lockfiles while preserving the narrower verified baseline conclusion that both contract sources and all integration files were identical stale copies. -- Current-task Git-base/PR update map: - 1. Decided base -> `Current-state inventory` and Phase 2 fetch `origin/main`, re-prove disjoint topology, create `kbg/chore/v16-migration`, and cherry-pick `80394cd` with conflict/empty/signing stop gates. - 2. Separate authorship/history -> Phase 2 records `MAIN_BASE_COMMIT`, the distinct signed `SKILLS_BASE_COMMIT`, and `BASELINE_COMMIT`; Phase 10 forbids squashing/amending and reports skills/migration commits separately. - 3. PR #55 intent -> expected integration manifest, Phase 1 registry proof, Phase 5B direct `miden-protocol 0.16.0-rc.6`, Phase 9 Gate 9, and the direct-edge stop condition. - 4. PR #56/#58 intent -> Phase 7 updates the client skill directly to rc.2 and removes README's nonexistent `config.rs`; Gate 9 verifies both. - 5. Remote boundary -> Phase 9/final report marks #55/#56/#58 superseded but performs no PR close/comment/merge or other GitHub mutation. -- Current-task embedded-WIT update map: - 1. Honest current state -> `Authority and resolved source conflicts` and Phase 3 record that the planning checkout still contains the obsolete manifest table despite the task's stale “already absent” wording. - 2. Manifest adaptation -> `Expected file-level migration`, Phase 4 classification, and Phase 5B remove only the generated-WIT comment/table/key while preserving the ordinary path dependency. - 3. Exactly three skill fixes -> expected file map, Phase 3 before inventory, Phase 7 section-level edits, and Phase 9 Gate 8 name and verify the note-metadata sentence, “two places” block, and checklist item without replacing unrelated skill content. - 4. Metadata shape -> Phase 5B and Gate 8 require `[lib].kind`, forbid `project-kind`, and require no leftover `wit` key for the embedded-WIT dependency. -- [x] User approved implementation on 2026-08-25: “Execute the plan and start building finally....” - -Implementation result: _Phases 1-10 produced signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8` on 2026-08-27 above signed skills baseline `1d47c165550ffe3757fd935b49256bf0370f3ad1` and main base `56380d338950d8ca87c7d1bfbae7969c54684ab3`. The final independent audit then found four narrow evidence/dependency-guidance defects without identifying an application-behavior change: both contract locks leaked `miden-protocol-build-utils` rc.6 instead of frozen compiler rc.4, two asset-guidance passages conflated the asset ID word with `AssetClass` and named removed `to_key_word()`, the canonical plain-Cargo check reused its target and lacked locked/offline reproducibility, and commit/drift evidence remained stale. Signed correction commit `8de62fe27d0873ab560c891c6ab274e35ceab80e` fixes the dependency/guidance findings without changing application behavior. Signed evidence commits `03068ada8ea2bf45fd32660810a4d46bef3d1d03` and `5ef123fe1332b87f82ff68f750be60461b6db284` record the verified Phase 12 and final commit-evidence reconciliation. A final pre-PR re-audit against compiler tag `sdk/v0.14.0-rc.1` identified and verified the narrow P3/FPI correction carried by the signed commit containing this task record. No product behavior changed._ - -## Implementation review - -- Toolchain: isolated `cargo-miden` and `midenc` `0.10.0-rc.1` resolve from exact source `2a5ebf830c910aa5f7bf53ee4df398915ab12f7a`; the preserved ambient `cargo-miden 0.9.0` is never selected by the hook or contract-build gates. -- Packaging and source: both contracts use exact Git-sourced guest/build-support `0.14.0-rc.1`, exact copied `build.rs` wrappers and `[lib] path`, embedded-WIT metadata removal, and exactly two counter `#[account_procedure]` markers. No compiler repository file or stale scaffold source/integration file was copied or edited. -- Host/API migration: the integration graph resolves the frozen client/store rc.2 and protocol/standards/testing rc.6 line without linking `cargo-miden`; every source edit except the explicitly authorized Testnet-to-DevNet endpoint is an API adaptation. -- Tests/builds: formatting, release workspace build, both contract builds, the unchanged binary build, test listing, and full release test all pass. `counter_test` remains the only test, is not ignored, and passes with its final count-`1` assertion byte-identical. -- Live runtime: exact DevNet node and block-producer `0.16.0-rc.1`, connected status, stable genesis, and zero base fee were observed immediately before execution. The binary returned both transaction IDs and exited zero. This is submission-only evidence; it does not prove commitment, finality, confirmed consumption, or a runtime-observed counter value. -- Persistent effects: the old v0.15 store was recoverably moved to `/private/tmp/project-template-v15-store-20260826.sqlite3`; a fresh v0.16 DevNet store was created/synced; application-level insertion of the new DevNet key into the existing ignored keystore occurred as explicitly authorized. No key material was inspected or logged. -- Final audit: every stale-reference/search gate, semantic symbol ledger, exact zero-MASM inventory, reference drift comparison, `git diff --check`, full-diff classification, and no-staged-secret/artifact check passes. Evidence is in the task output directory named at the top of this file. -- Final-audit correction: both contract closures now use compiler-side build utils rc.4; the two asset passages use `AssetId`/`AssetClass` and `to_id_word()` accurately; both fresh locked/offline plain-Cargo checks publish exactly one content-addressed generation and leave zero staging directories; formatting, builds, test listing, the one-test release suite, source-preservation checks, and the complete correction-diff review all pass. -- Checkpoint: signed migration commit `6a0c467308e4b1fc60e1702beb9ae5a6747accd8`, signed dependency/guidance correction `8de62fe27d0873ab560c891c6ab274e35ceab80e`, signed evidence reconciliation `03068ada8ea2bf45fd32660810a4d46bef3d1d03`, and signed final commit-evidence correction `5ef123fe1332b87f82ff68f750be60461b6db284` all have valid signatures by `philipp.keinberger@gmail.com`. The signed commit containing this task record is a separate direct child of `5ef123fe...` and carries the verified P3/FPI skill correction without amending history. The user authorized a direct push and draft PR on `0xMiden/project-template`; no fork, merge, or unrelated GitHub action is authorized. - -Lessons/corrections: _The durable correction rules are now recorded in `tasks/lessons.md`, as required by the repository instructions._ From 35228ad52605780aa83bfdbf2364bc7d3dd27c7c Mon Sep 17 00:00:00 2001 From: keinberger Date: Mon, 31 Aug 2026 19:13:21 +0300 Subject: [PATCH 08/12] fix: provision frozen compiler in CI --- .github/workflows/ci.yml | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 007cfbe..fd0e025 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,6 +17,27 @@ jobs: run: | rustup update --no-self-update rustc --version + - name: Install frozen Miden compiler + run: | + set -euo pipefail + MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}" + MIDEN_V16_TOOL_ROOT="$MIDEN_CARGO_HOME/miden-v16-0.10.0-rc.1" + COMPILER_PIPELINE_COMMIT=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a + + cargo install cargo-miden --git https://github.com/0xMiden/compiler \ + --rev "$COMPILER_PIPELINE_COMMIT" --locked --root "$MIDEN_V16_TOOL_ROOT" + + test "$("$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" miden --version)" = \ + 'cargo-miden 0.10.0-rc.1' + - name: Build contracts + run: | + set -euo pipefail + MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}" + CARGO_MIDEN_BIN="$MIDEN_CARGO_HOME/miden-v16-0.10.0-rc.1/bin/cargo-miden" + + "$CARGO_MIDEN_BIN" miden build \ + --manifest-path contracts/counter-account/Cargo.toml --release + "$CARGO_MIDEN_BIN" miden build \ + --manifest-path contracts/increment-note/Cargo.toml --release - name: Run integration tests - working-directory: integration - run: cargo test + run: cargo test --locked -p integration --release From e040c56c8b57828c99ed1dd1fce409a9765e1dea Mon Sep 17 00:00:00 2001 From: keinberger Date: Tue, 1 Sep 2026 17:49:37 +0300 Subject: [PATCH 09/12] chore: sync with compiler project template --- .claude/hooks/build-contracts.sh | 17 +- .github/workflows/ci.yml | 31 +- .gitignore | 5 + CLAUDE.md | 85 +- Cargo.lock | 707 +++--- README.md | 72 +- contracts/counter-account/Cargo.lock | 3175 -------------------------- contracts/counter-account/Cargo.toml | 4 +- contracts/increment-note/Cargo.lock | 3175 -------------------------- contracts/increment-note/Cargo.toml | 4 +- integration/Cargo.toml | 11 +- integration/src/helpers.rs | 180 +- integration/tests/counter_test.rs | 13 +- miden-toolchain.toml | 5 + 14 files changed, 487 insertions(+), 6997 deletions(-) delete mode 100644 contracts/counter-account/Cargo.lock delete mode 100644 contracts/increment-note/Cargo.lock create mode 100644 miden-toolchain.toml diff --git a/.claude/hooks/build-contracts.sh b/.claude/hooks/build-contracts.sh index 2996d78..4b88112 100755 --- a/.claude/hooks/build-contracts.sh +++ b/.claude/hooks/build-contracts.sh @@ -18,25 +18,24 @@ if [[ ! -f "$CARGO_TOML" ]]; then exit 0 fi -# Resolve the exact v0.16 compiler independently of ambient PATH. +# Resolve the compiler from the same immutable source revision as the contract SDK. MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}" -MIDEN_V16_TOOL_ROOT="$MIDEN_CARGO_HOME/miden-v16-0.10.0-rc.1" -CARGO_MIDEN_BIN="$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" +COMPILER_REV="5e126fc06d78b2097a7be128f5543cb60817a95e" +COMPILER_ROOT="$MIDEN_CARGO_HOME/miden-v16-compiler-$COMPILER_REV" +CARGO_MIDEN_BIN="$COMPILER_ROOT/bin/cargo-miden" EXPECTED_VERSION="cargo-miden 0.10.0-rc.1" -COMPILER_SOURCE_REVISION="2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" -INSTALL_COMMAND="cargo install cargo-miden --git https://github.com/0xMiden/compiler --rev $COMPILER_SOURCE_REVISION --locked --root $MIDEN_V16_TOOL_ROOT" +INSTALL_COMMAND="cargo install cargo-miden --git https://github.com/0xMiden/compiler --rev $COMPILER_REV --locked --root $COMPILER_ROOT" if [[ ! -x "$CARGO_MIDEN_BIN" ]]; then - jq -n --arg ctx "Contract build FAILED: required compiler is not executable at $CARGO_MIDEN_BIN. Expected '$EXPECTED_VERSION' from source revision $COMPILER_SOURCE_REVISION. Install with: $INSTALL_COMMAND" \ + jq -n --arg ctx "Contract build FAILED: required compiler is not executable at $CARGO_MIDEN_BIN. Install it with: $INSTALL_COMMAND" \ '{"hookSpecificOutput": {"additionalContext": $ctx}}' exit 2 fi VERSION_OUTPUT=$("$CARGO_MIDEN_BIN" miden --version 2>&1) VERSION_EXIT=$? - if [[ $VERSION_EXIT -ne 0 ]] || [[ "$VERSION_OUTPUT" != "$EXPECTED_VERSION" ]]; then - jq -n --arg ctx "Contract build FAILED: compiler at $CARGO_MIDEN_BIN reported '$VERSION_OUTPUT' (exit $VERSION_EXIT); expected '$EXPECTED_VERSION' from source revision $COMPILER_SOURCE_REVISION. Install with: $INSTALL_COMMAND" \ + jq -n --arg ctx "Contract build FAILED: compiler at $CARGO_MIDEN_BIN reported '$VERSION_OUTPUT' (exit $VERSION_EXIT); expected '$EXPECTED_VERSION'. Reinstall it with: $INSTALL_COMMAND" \ '{"hookSpecificOutput": {"additionalContext": $ctx}}' exit 2 fi @@ -51,7 +50,7 @@ if [[ $BUILD_EXIT -eq 0 ]]; then exit 0 else TAIL_OUTPUT=$(echo "$BUILD_OUTPUT" | tail -20) - jq -n --arg ctx "Contract build FAILED using $CARGO_MIDEN_BIN ($EXPECTED_VERSION). Fix compilation errors before continuing."$'\n'"$TAIL_OUTPUT" \ + jq -n --arg ctx "Contract build FAILED with $CARGO_MIDEN_BIN ($EXPECTED_VERSION). Fix compilation errors before continuing."$'\n'"$TAIL_OUTPUT" \ '{"hookSpecificOutput": {"additionalContext": $ctx}}' exit 2 fi diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fd0e025..2f433b5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,27 +17,22 @@ jobs: run: | rustup update --no-self-update rustc --version - - name: Install frozen Miden compiler + - name: Install the source-matched Miden compiler run: | set -euo pipefail - MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}" - MIDEN_V16_TOOL_ROOT="$MIDEN_CARGO_HOME/miden-v16-0.10.0-rc.1" - COMPILER_PIPELINE_COMMIT=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a + COMPILER_REV=5e126fc06d78b2097a7be128f5543cb60817a95e + COMPILER_ROOT="$RUNNER_TEMP/miden-compiler-$COMPILER_REV" - cargo install cargo-miden --git https://github.com/0xMiden/compiler \ - --rev "$COMPILER_PIPELINE_COMMIT" --locked --root "$MIDEN_V16_TOOL_ROOT" + cargo install cargo-miden \ + --git https://github.com/0xMiden/compiler \ + --rev "$COMPILER_REV" \ + --locked \ + --root "$COMPILER_ROOT" - test "$("$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" miden --version)" = \ + test "$("$COMPILER_ROOT/bin/cargo-miden" miden --version)" = \ 'cargo-miden 0.10.0-rc.1' - - name: Build contracts - run: | - set -euo pipefail - MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}" - CARGO_MIDEN_BIN="$MIDEN_CARGO_HOME/miden-v16-0.10.0-rc.1/bin/cargo-miden" - - "$CARGO_MIDEN_BIN" miden build \ - --manifest-path contracts/counter-account/Cargo.toml --release - "$CARGO_MIDEN_BIN" miden build \ - --manifest-path contracts/increment-note/Cargo.toml --release + echo "CARGO_MIDEN=$COMPILER_ROOT/bin/cargo-miden" >> "$GITHUB_ENV" - name: Run integration tests - run: cargo test --locked -p integration --release + working-directory: integration + run: | + cargo test --locked diff --git a/.gitignore b/.gitignore index 007ec5e..54b4630 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,11 @@ local-node-data/ # Ignore contract build artifacts contracts/**/target/ +# Contract crates are cdylib libraries: they do not ship a lockfile, matching the +# single-contract templates. A committed lockfile here can only go stale against the +# SDK requirement in their manifests. +contracts/**/Cargo.lock + # cargo-miden writes the compiled package here when tests build contracts # from the integration crate's working directory integration/target/ diff --git a/CLAUDE.md b/CLAUDE.md index ced0621..7d669cb 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -12,78 +12,34 @@ This is a Miden smart contract project using the Rust SDK and compiler. ## Build & Test -This project uses an immutable v0.16 compiler pipeline rather than the ambient `cargo-miden` or -the v0.16 midenup channel. Install `cargo-miden` and `midenc` from compiler revision -`2a5ebf830c910aa5f7bf53ee4df398915ab12f7a` as shown in `README.md`. Derive and verify the isolated -binary in every shell: +This project follows the compiler template and SDK at immutable compiler revision +`5e126fc06d78b2097a7be128f5543cb60817a95e`. Install `cargo-miden` from that revision as +documented in `README.md`, then derive and verify its absolute path in each shell: ```bash MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}" -MIDEN_V16_TOOL_ROOT="$MIDEN_CARGO_HOME/miden-v16-0.10.0-rc.1" -CARGO_MIDEN_BIN="$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" -test "$("$CARGO_MIDEN_BIN" miden --version)" = 'cargo-miden 0.10.0-rc.1' -test "$("$MIDEN_V16_TOOL_ROOT/bin/midenc" --version)" = 'midenc 0.10.0-rc.1' +COMPILER_REV=5e126fc06d78b2097a7be128f5543cb60817a95e +COMPILER_ROOT="$MIDEN_CARGO_HOME/miden-v16-compiler-$COMPILER_REV" +export CARGO_MIDEN="$COMPILER_ROOT/bin/cargo-miden" +test "$("$CARGO_MIDEN" miden --version)" = 'cargo-miden 0.10.0-rc.1' ``` -Contracts are built individually with that exact binary: - -```bash -"$CARGO_MIDEN_BIN" miden build \ - --manifest-path contracts//Cargo.toml --release +Contracts are built individually with that compiler (not plain `cargo build`): ``` - -Tests run via the workspace: - -```bash -cargo test -p integration --release +"$CARGO_MIDEN" miden build --manifest-path contracts//Cargo.toml --release ``` -Always build contracts before running tests; tests compile contracts via `build_project_in_dir()`. -That helper independently derives and version-checks the same isolated compiler. - -The post-edit hook also derives -`${CARGO_HOME:-$HOME/.cargo}/miden-v16-0.10.0-rc.1/bin/cargo-miden` on every invocation and rejects a -missing or mismatched compiler. It never selects `miden`, `cargo miden`, or `cargo-miden` from -ambient `PATH`. - -### Per-contract build support - -Every contract manifest must use the pinned guest SDK and build-support source: - -```toml -[dependencies] -miden = { version = "=0.14.0-rc.1", git = "https://github.com/0xMiden/compiler", rev = "2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" } +Each contract has a thin `build.rs` that calls `miden-sdk-build-script-support` to populate the +Miden package cache, so plain `cargo check` and IDE analysis resolve dependency packages without +a manual contract build first. The helper gives the compiler named by the `CARGO_MIDEN` +environment variable precedence over an ambient midenup installation. -[build-dependencies] -miden-sdk-build-script-support = { git = "https://github.com/0xMiden/compiler", rev = "2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" } -``` - -Each contract's `build.rs` is exactly: - -```rust -fn main() { - miden_sdk_build_script_support::prepare_package_cache(); -} +Tests run via the workspace: ``` - -For plain `cargo check` or IDE analysis, run Cargo from the contract directory so its -`.cargo/config.toml` is discovered, set `CARGO_MIDEN` to the verified absolute binary, and use a -checkout-private target directory: - -```bash -PROJECT_ROOT="$PWD" -PLAIN_CARGO_TARGET="$PROJECT_ROOT/target/plain-cargo-v16" -( - cd contracts/counter-account - env -u MIDENC_PACKAGE_CACHE \ - CARGO_MIDEN="$CARGO_MIDEN_BIN" \ - CARGO_TARGET_DIR="$PLAIN_CARGO_TARGET" \ - cargo check --release -) +cargo test -p integration --release ``` -Do not set `MIDENC_PACKAGE_CACHE` manually. `prepare_package_cache()` stages dependency packages -under the contract's build output and exports the selected cache to macro expansion. +Always build contracts before running tests; tests compile contracts via `build_project_in_dir()`. ## SDK Quick Reference @@ -93,14 +49,9 @@ See the working examples in this project: - `integration/tests/counter_test.rs`: MockChain integration test Common cargo commands: -- `cargo build -p integration --bin increment_count --release`: build the project's single binary +- `cargo build -p integration --bin --release`: build a specific binary from the integration crate (e.g. `validate_local`, `increment_count`) - `cargo clean -p integration`: run after editing shared library code (e.g. `helpers.rs`) before re-running tests, to avoid stale compiled binaries -`increment_count` currently uses the helper's temporary hard-coded DevNet endpoint -`https://rpc.devnet.miden.io`. Run it from `integration/` because its contract and store paths are -relative to that directory. It creates public DevNet accounts, adds a sender key to the existing -keystore, and submits transactions; returned IDs are submission evidence, not proof of finality. - ## Critical Pitfalls **Felt arithmetic is modular (SECURITY CRITICAL)**: Subtraction wraps around the field modulus instead of panicking. ALWAYS validate before subtraction: @@ -128,5 +79,5 @@ For complex applications beyond basic patterns (multi-contract apps, novel note After modifying contract code, always: 1. Write tests alongside contracts; tests are the primary verification, builds are the secondary check -2. Build the contract: `"$CARGO_MIDEN_BIN" miden build --manifest-path contracts//Cargo.toml --release` +2. Build the contract: `"$CARGO_MIDEN" miden build --manifest-path contracts//Cargo.toml --release` 3. Run tests: `cargo test -p integration --release` diff --git a/Cargo.lock b/Cargo.lock index 352629b..ea332f2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,18 +29,18 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.5" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] [[package]] name = "alloy-primitives" -version = "1.7.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c902f0ca3f8353c41e3e1ec3cf26be49412525bc48ab9d3c4710d7be4f01832" +checksum = "4885c1409b6936c4898e646ef58baf6ec54edaf6d8179f79df805a7b85b7cf3e" dependencies = [ "bytes", "cfg-if", @@ -49,6 +49,7 @@ dependencies = [ "itoa", "paste", "ruint", + "rustc-hash", "sha3 0.11.0", ] @@ -64,41 +65,41 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "1.7.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdcbd48d60e029be4a325c3a2f1312761caea4ed249f18ba9e8ed24ca1bf01e6" +checksum = "840128ed2b2971d6d4668a553fe403a82683d3acc646c73e75887e7157408033" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", - "proc-macro-error3", + "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] name = "alloy-sol-macro-expander" -version = "1.7.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c9f7c535f99a7e7b64cc520968b09ed14cec3715572fcc277cfbff602808cd" +checksum = "63ec265e5d65d725175f6ca7711c970824c90ef9c0d1f1973711d4150ee612dd" dependencies = [ "alloy-sol-macro-input", "const-hex", "heck", "indexmap 2.14.0", - "proc-macro-error3", + "proc-macro-error2", "proc-macro2", "quote", "sha3 0.11.0", - "syn 2.0.119", + "syn 2.0.118", "syn-solidity", ] [[package]] name = "alloy-sol-macro-input" -version = "1.7.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1abd404fbc12f543823005146b73fd07621bdc0baaa950d26995c543a9d73811" +checksum = "89bf01077f18650876cfa682eb1f949967b5cde03f1a51c955c469d2c9b4aa67" dependencies = [ "const-hex", "dunce", @@ -106,15 +107,15 @@ dependencies = [ "macro-string", "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", "syn-solidity", ] [[package]] name = "alloy-sol-types" -version = "1.7.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adfc2ba3fb0e865de4934bcad6d37fc51e9ffcd5294be1322eab38e4494e051b" +checksum = "384cf252de0db2dec52821eac037a7f57e2aa33fe5b900ce6fe39973402341f1" dependencies = [ "alloy-primitives", "alloy-sol-macro", @@ -122,9 +123,9 @@ dependencies = [ [[package]] name = "android_system_properties" -version = "0.1.6" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ "libc", ] @@ -181,9 +182,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.104" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" +checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" [[package]] name = "ark-ff" @@ -287,7 +288,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -297,7 +298,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1479009684adc073dff49a1025d3a7065b317a9ead25aaaca38cdc70058ba8a2" dependencies = [ "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -335,7 +336,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -348,7 +349,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -405,7 +406,7 @@ checksum = "4f153690697a2b91e5e1251ff98411ee5371500a111a0fd317a70e588eb300f9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -415,7 +416,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" dependencies = [ "num-traits", - "rand 0.8.8", + "rand 0.8.6", ] [[package]] @@ -425,7 +426,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" dependencies = [ "num-traits", - "rand 0.8.8", + "rand 0.8.6", ] [[package]] @@ -435,7 +436,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" dependencies = [ "num-traits", - "rand 0.8.8", + "rand 0.8.6", ] [[package]] @@ -445,9 +446,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "367c9c827ed431bff6868b7aa926e05b16eb46603cc8b6e768e4a5553fa1d155" dependencies = [ "num-traits", - "rand 0.8.8", + "rand 0.8.6", ] +[[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.8" @@ -456,13 +463,13 @@ checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" [[package]] name = "async-trait" -version = "0.1.92" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 2.0.118", ] [[package]] @@ -479,7 +486,7 @@ checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -550,9 +557,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.13.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] name = "bitvec" @@ -568,10 +575,11 @@ dependencies = [ [[package]] name = "blake3" -version = "1.8.7" +version = "1.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9e454fc11f76977dc803893aff6304ed33d6a26efae8696573bea74baa27ae" +checksum = "0aa83c34e62843d924f905e0f5c866eb1dd6545fc4d719e803d9ba6030371fce" dependencies = [ + "arrayref", "arrayvec", "cc", "cfg-if", @@ -590,25 +598,27 @@ dependencies = [ [[package]] name = "bon" -version = "3.10.0" +version = "3.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3fac94a66da67200398458a25412bcc3f9b6443b5119a6cad9cf3ccfcd8cc6" +checksum = "a602c73c7b0148ec6d12af6fd5cc7a46e2eacc8878271a999abac56eed12f561" dependencies = [ "bon-macros", + "rustversion", ] [[package]] name = "bon-macros" -version = "3.10.0" +version = "3.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4654961ad0494e4774c5c60b4cb4cd0ae9b9d92d039d901638b1dba97ebebf5" +checksum = "6dee98b0db6a962de883bf5d20362dee4d7ca0d12fe39a7c6c73c844e1cd7c1f" dependencies = [ "darling", "ident_case", - "prettyplease 0.3.0", + "prettyplease", "proc-macro2", "quote", - "syn 3.0.4", + "rustversion", + "syn 2.0.118", ] [[package]] @@ -655,9 +665,9 @@ checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "cc" -version = "1.4.4" +version = "1.2.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad534f4357a5264cce5019c989cf66a4f0dc4e0d1b1d15f8aacec0ff7360273" +checksum = "f5d6cac793997bd970000024b2934968efe83b382de4fdcf4fcb46b6ee4ad996" dependencies = [ "find-msvc-tools", "jobserver", @@ -941,14 +951,14 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] name = "darling" -version = "0.24.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed17f5901b6630b993ca003def43f2f8ef4014fc13b047b57aad617ff32bc2ec" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" dependencies = [ "darling_core", "darling_macro", @@ -956,26 +966,26 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.24.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6837e2cf7485aaae18f86181d2f0e9a7ed297a025e220aeabf63fdebd3a2ddff" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" dependencies = [ "ident_case", "proc-macro2", "quote", "strsim", - "syn 3.0.4", + "syn 2.0.118", ] [[package]] name = "darling_macro" -version = "0.24.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ac7135c3ef02b2f7833bbeb1be5ba7f966dcde8a87c6b87f65a778d71a02785" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ "darling_core", "quote", - "syn 3.0.4", + "syn 2.0.118", ] [[package]] @@ -1027,7 +1037,7 @@ dependencies = [ "defmt-parser", "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -1088,7 +1098,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.119", + "syn 2.0.118", "unicode-xid", ] @@ -1189,14 +1199,14 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] name = "either" -version = "1.18.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "elliptic-curve" @@ -1286,7 +1296,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -1303,9 +1313,9 @@ checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" [[package]] name = "fastrand" -version = "2.5.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" [[package]] name = "fastrlp" @@ -1347,9 +1357,9 @@ checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" [[package]] name = "find-msvc-tools" -version = "0.1.11" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "fixed-hash" @@ -1358,7 +1368,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ "byteorder", - "rand 0.8.8", + "rand 0.8.6", "rustc-hex", "static_assertions", ] @@ -1375,7 +1385,7 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e139bc46ca777eb5efaf62df0ab8cc5fd400866427e56c68b22e414e53bd3be" dependencies = [ - "spin 0.9.9", + "spin 0.9.8", ] [[package]] @@ -1413,9 +1423,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.34" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", @@ -1428,9 +1438,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.34" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", "futures-sink", @@ -1438,15 +1448,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.34" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" -version = "0.3.34" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", @@ -1455,38 +1465,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.34" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-macro" -version = "0.3.34" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 2.0.118", ] [[package]] name = "futures-sink" -version = "0.3.34" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" -version = "0.3.34" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-util" -version = "0.3.34" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-channel", "futures-core", @@ -1571,9 +1581,9 @@ checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" [[package]] name = "glob" -version = "0.3.4" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "gloo-timers" @@ -1600,9 +1610,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.19" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8e5e5a340588f4452631496976cf8636d4a7ecf600239fdc27615d2530bc16" +checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" dependencies = [ "atomic-waker", "bytes", @@ -1688,9 +1698,9 @@ dependencies = [ [[package]] name = "http" -version = "1.5.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" dependencies = [ "bytes", "itoa", @@ -1698,9 +1708,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.1.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http", @@ -1708,9 +1718,9 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.5" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", @@ -1733,9 +1743,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hybrid-array" -version = "0.4.14" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707114b52a152fa7bdb290cd7cd5912d9467273b6d74e21b8d81aca1f8533f6b" +checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c" dependencies = [ "subtle", "typenum", @@ -1744,9 +1754,9 @@ dependencies = [ [[package]] name = "hyper" -version = "1.11.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" dependencies = [ "atomic-waker", "bytes", @@ -1844,7 +1854,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -1893,7 +1903,6 @@ dependencies = [ "miden-client", "miden-client-sqlite-store", "miden-mast-package", - "miden-protocol", "miden-standards", "miden-testing", "rand 0.10.2", @@ -1956,12 +1965,11 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.35" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668b7183bd07af9a4885f5c35b0cc5c83c4607a913c16b7e17291832910d2dcc" +checksum = "961d16382652bfdd8c6f68b223b26a8c93e0d475c672f414411db31c6c5c900e" dependencies = [ "defmt", - "jiff-core", "jiff-static", "jiff-tzdb-platform", "log", @@ -1971,25 +1979,15 @@ dependencies = [ "windows-link", ] -[[package]] -name = "jiff-core" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7feca88439efe53da3754500c1851dedf3cb36c524dd5cf8225cc0794de95d09" -dependencies = [ - "defmt", -] - [[package]] name = "jiff-static" -version = "0.2.35" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a69dcb3a21cfb32ce1cd056169337ca284af0766dd766e7878819b251a49204" +checksum = "d0879bd39df99c4c5e2c6615ccc026391a423dde10532c573e6086eb94a802cc" dependencies = [ - "jiff-core", "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -2019,9 +2017,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.104" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" dependencies = [ "cfg-if", "futures-util", @@ -2044,9 +2042,9 @@ dependencies = [ [[package]] name = "keccak" -version = "0.2.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8f198d1db720e4940b5a493201d199d9f24f568f8f746bd13706243a2f71598" +checksum = "9e24a010dd405bd7ed803e5253182815b41bf2e6a80cc3bfc066658e03a198aa" dependencies = [ "cfg-if", "cpufeatures 0.3.0", @@ -2075,9 +2073,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.189" +version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libm" @@ -2113,9 +2111,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.34" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] name = "logos" @@ -2148,7 +2146,7 @@ dependencies = [ "quote", "regex-syntax", "rustc_version 0.4.1", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -2162,7 +2160,7 @@ dependencies = [ "quote", "regex-automata", "regex-syntax", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -2204,7 +2202,7 @@ checksum = "59a9dbbfc75d2688ed057456ce8a3ee3f48d12eec09229f560f3643b9f275653" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -2224,9 +2222,9 @@ checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "miden-ace-codegen" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acf1f83cb07fb71459b9b02e25cc796c66cecbf16d941befc5b1e56de617e77e" +checksum = "00ff2a44c7f7dc497ac56c74dca5b3465b4b46be066fa88c2c58a8eb1bcb2dc8" dependencies = [ "miden-constraint-compiler", "miden-core", @@ -2257,9 +2255,9 @@ dependencies = [ [[package]] name = "miden-air" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0be68a0e1aaa504c1d8f01df8b092f05734479681831936fb5c90143b6264bf0" +checksum = "84b6d3f3336c8a2da5cd0924c42dd1f339e6c3d5adf3221bc1c005b444fd0bf0" dependencies = [ "miden-ace-codegen", "miden-core", @@ -2273,9 +2271,9 @@ dependencies = [ [[package]] name = "miden-assembly" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f12bedf5b78f33df8c9ba5051e7ee6ceade3d013381749115681d21f71205f" +checksum = "644b31bdda941328f9ff2088382b7de41569c1cc83d6090f63e43d261e9cd262" dependencies = [ "env_logger", "log", @@ -2291,9 +2289,9 @@ dependencies = [ [[package]] name = "miden-assembly-syntax" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cd8362e466fa6d443043775d006a4fffb47cc14eeb0ee0fb9d1cc19a202c916" +checksum = "cad0d5174833b17b498d541d1ef62d73929a143ea56ea5eba719339c15cd0968" dependencies = [ "env_logger", "log", @@ -2314,9 +2312,9 @@ dependencies = [ [[package]] name = "miden-assembly-syntax-cst" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b597b48f80de2b7e79bcee3ff8d0e725232ae9b3a8def3caa468b022f9633c99" +checksum = "ff301e56d9201821a4458564ed19ae9b95c7a219662a422e47bb61d17e0fa7b1" dependencies = [ "miden-debug-types", "miden-rowan", @@ -2392,9 +2390,9 @@ dependencies = [ [[package]] name = "miden-constraint-compiler" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "912e4f83ae8aec19c4c32f257e87a0b5210697726b49c8d935e935f48021eef0" +checksum = "01ef51ec02f0899c5fc6aa4af11eb050094d98e5e6bf8767a4da555d210f2de6" dependencies = [ "miden-core", "miden-crypto", @@ -2402,9 +2400,9 @@ dependencies = [ [[package]] name = "miden-core" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b918c99c63f6d3fe47d31c1e883d9498c31a2f9256a552885b4ccf1302b99d7" +checksum = "3b27f9f91988c5e74b50b543c4e6d37ec729eabcf70db63cf752dedd780f8a90" dependencies = [ "derive_more", "log", @@ -2421,9 +2419,9 @@ dependencies = [ [[package]] name = "miden-core-lib" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0525b45bb230030458386198d208542d0b84ac9984ee0a2af3064abf16f0e861" +checksum = "14df9652fc4963f20d11df9ceb576ccb7831b5dc72fabec5c1b602f51e57909c" dependencies = [ "env_logger", "fs-err", @@ -2442,9 +2440,9 @@ dependencies = [ [[package]] name = "miden-core-lib-codegen" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb7e6020064ca81e121a467ed4765a5fbd5067b081c773afe376e0d466d106c" +checksum = "aad0b8badcf1636150cac0d74aabadd395ba7d570227eb0923ff14f02a278fff" dependencies = [ "miden-core", "miden-precompiles", @@ -2452,9 +2450,9 @@ dependencies = [ [[package]] name = "miden-crypto" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702da94ba7c06406292736d27d6356d1e46210f80d7a565713a010102684d539" +checksum = "7c917b0342d911ae4b7a549bb3ca791c093dac4770f88b02e23b43f3fa8179f5" dependencies = [ "blake3", "cc", @@ -2494,19 +2492,19 @@ dependencies = [ [[package]] name = "miden-crypto-derive" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb7d9477a0db8dc5bd5d1dd72201a86798e347f761f0f92e05a7dcaa3e02ad9" +checksum = "a7c3165dfd7fd6f587ea5731efd1cc8083ca55c23d2d9b3000f83a3948486044" dependencies = [ "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] name = "miden-debug-types" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75ddb5a45d9b663aa6fdaabae0fccd4c4532d6f9300c20c050ee93a3f6b8aa81" +checksum = "4c9f3f8e4a8f54a36fbf00330ac8bd1947627c1786cd49b94a08b741590ed173" dependencies = [ "memchr", "miden-crypto", @@ -2524,9 +2522,9 @@ dependencies = [ [[package]] name = "miden-field" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5425e2e3a137c21d0cf7267eb21ceb8190acef70dd03338195a532bed7d42" +checksum = "58cf9de55b88ec86ad272ff4224d76b3e0cbda49e242e78776b0037ba9b0e857" dependencies = [ "miden-serde-utils", "num-bigint 0.5.1", @@ -2552,9 +2550,9 @@ dependencies = [ [[package]] name = "miden-lifted-air" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f184dd3be9d4c3172d60b846d27ea0ed3e505760b07c1b76891e3af5e2eb983" +checksum = "f67e06d47e246db853a9f3e52ec87fa33a8ffc0fe5be0dd99288b2439312f206" dependencies = [ "p3-air", "p3-challenger", @@ -2566,9 +2564,9 @@ dependencies = [ [[package]] name = "miden-lifted-stark" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "722d5f9c971bd141a75504969121ab0acfb41a782e4f41157029a74e9801ceda" +checksum = "a5ee320597c7712698d06811d9144b0e4f2275a21224ef0238652c947b01198b" dependencies = [ "miden-lifted-air", "miden-stark-transcript", @@ -2589,9 +2587,9 @@ dependencies = [ [[package]] name = "miden-mast-package" -version = "0.29.1" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26062f2e4cb18e7fa9244f8b18fe2adea2bfe3f016431f75f80b5b98249c34f6" +checksum = "1355a2563a52af4399b4a93120a4398f81415b1fc4edb58310de5034cfa3781d" dependencies = [ "hashbrown 0.17.1", "log", @@ -2621,9 +2619,9 @@ dependencies = [ "rustc_version 0.2.3", "rustversion", "serde_json", - "spin 0.9.9", + "spin 0.9.8", "strip-ansi-escapes", - "syn 2.0.119", + "syn 2.0.118", "textwrap", "thiserror", "trybuild", @@ -2638,7 +2636,7 @@ checksum = "86a905f3ea65634dd4d1041a4f0fd0a3e77aa4118341d265af1a94339182222f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -2669,9 +2667,9 @@ dependencies = [ [[package]] name = "miden-package-registry" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f348fa51bf867eb61442b0ff3289e6235f2f3b69d22b845ccf32febc55127c1" +checksum = "a799e66245492c193b0444c3e0ff0fe42418009ec668a3e80c40d9f5b1454aac" dependencies = [ "miden-assembly-syntax", "miden-core", @@ -2685,9 +2683,9 @@ dependencies = [ [[package]] name = "miden-precompiles" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ef4e1524fe66bb812b28e2e8e207e3056ca6c4533e4fe4685fabc3a247ce2ac" +checksum = "073ebeeb4413b9a03c60b0b066f94b8edaa6f50150017a92dc09d3ace92d6976" dependencies = [ "miden-core", "miden-crypto", @@ -2695,9 +2693,9 @@ dependencies = [ [[package]] name = "miden-precompiles-prover" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a39a11eb14824f4d60528c97beb601459d8693d3bc6bbeff2f65899a824701e4" +checksum = "a76663c4d90cc073f9e2d2aa2349b9dcd25bf6c40db5020d27ce59990b6bd5af" dependencies = [ "miden-ace-codegen", "miden-air", @@ -2717,9 +2715,9 @@ dependencies = [ [[package]] name = "miden-processor" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ed69845d784d2efdfdccc4fdf120c377755ba41c5270ce01055b0001fc13cc" +checksum = "2c7331ab96f00f922d29e2f59285f539299061a44ffdeea31b853d2c071f8056" dependencies = [ "hashbrown 0.17.1", "itertools 0.15.0", @@ -2738,9 +2736,9 @@ dependencies = [ [[package]] name = "miden-project" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73ecd22461348d34547756d44bb0b73cfb58b820cdf618c895e2244db377b6a1" +checksum = "6f8201d3a6d0c85c747092309c3c420de42e61e76f71df2189a46411100d120a" dependencies = [ "miden-assembly-syntax", "miden-core", @@ -2802,9 +2800,9 @@ dependencies = [ [[package]] name = "miden-prover" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "550f8a8e9b3b731092947bc23866c284ea623ef519bf793a999dfb1552a4f647" +checksum = "b20c4cabb7a032e7613adff4c637c267bbcaad0d0fa37f7c7addbe7d425bb5c4" dependencies = [ "miden-air", "miden-core", @@ -2828,9 +2826,9 @@ dependencies = [ [[package]] name = "miden-serde-utils" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e745c48c1a2051b47f3e4f0cb22654a0dcade8a924e89633c90df19665da000" +checksum = "f5c21a2acdc1928f86803b3ff3c44564c3f614a7dc47dcd64969a5c856d27988" dependencies = [ "p3-field", "p3-goldilocks", @@ -2856,9 +2854,9 @@ dependencies = [ [[package]] name = "miden-stark-transcript" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a712409cf2ac6aea63abb1ab38132c47b9a3d4b93016381db231abd566c20c8" +checksum = "d503630c353389838fa5d668a0d4550130453c7b2a72b802d4adc1ea39ab5bee" dependencies = [ "p3-challenger", "p3-field", @@ -2868,9 +2866,9 @@ dependencies = [ [[package]] name = "miden-stateful-hasher" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c51589978168e6337a2001cbb4a4c8a200868d55b4d30f0b6241bcb162e4c48" +checksum = "e8c2008195bdb552eeb744074bfc8822049552ccdf7aef3321a32e1ab6be92e6" dependencies = [ "p3-field", "p3-symmetric", @@ -2927,9 +2925,9 @@ dependencies = [ [[package]] name = "miden-utils-core-derive" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b964d634a3d71713d78e0fcd8680e8338af1de05a9704092a7e1a5bab91b59b1" +checksum = "107d04fcd05b0308e6347113ee6dc13599755e5b4d05ecc08d8b5c05f36a5a39" dependencies = [ "proc-macro2", "quote", @@ -2938,9 +2936,9 @@ dependencies = [ [[package]] name = "miden-utils-diagnostics" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3adb8571f6d49572a4c60b56c3e896aa7c39d8fbb62a20579f25e9b836192ed1" +checksum = "f3b444d204bf082cdab14015ff10d5b0b43a10fba662fef09e4753f6d07faf1f" dependencies = [ "miden-debug-types", "miden-miette", @@ -2949,9 +2947,9 @@ dependencies = [ [[package]] name = "miden-utils-indexing" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180da86b4f290b72219c4fe7c5362fdb1711a9a456739e2cb0c3031eb9487641" +checksum = "f6ff225060e2a5cc4dd6c898eef1f04739461d3401b6de1692bf443cfdd302b0" dependencies = [ "miden-serde-utils", "proptest", @@ -2961,9 +2959,9 @@ dependencies = [ [[package]] name = "miden-utils-sync" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8582a4e374c500ce921d15b89735f3a3ddf629bbc82f250ccf85b9d905128467" +checksum = "76b9cb00f01787f8687447cd8a45b3888b470eb35a132df1be9729779d311fd7" dependencies = [ "lock_api", "loom", @@ -2973,9 +2971,9 @@ dependencies = [ [[package]] name = "miden-verifier" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8afd2b71996f9167de50b82e9de848e702740cfd3f3e8bfed8f1686dda87cd" +checksum = "5e049df6008af1fea5a66df8ce98075cc9e00f16122fd5f4e7c4be9a263cae46" dependencies = [ "miden-air", "miden-core", @@ -2990,9 +2988,9 @@ dependencies = [ [[package]] name = "midenc-hir-type" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f72909a4bae8dca4bbd34c28dcbcdff595afc47e48c312a683108f7452bd270b" +checksum = "dcdf2257de8f3486c8f3e93c45219b782bafad62a8694798c05d5b8f3f79c64e" dependencies = [ "miden-formatting", "miden-serde-utils", @@ -3029,7 +3027,7 @@ checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -3043,9 +3041,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.2" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", "wasi", @@ -3118,9 +3116,9 @@ checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" [[package]] name = "num-integer" -version = "0.1.47" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ "num-traits", ] @@ -3435,7 +3433,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -3481,9 +3479,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.9.0" +version = "2.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a07a60cc7a4d00c91f95c685609d1d2f79050e6804b70ebedd7650f0b839bcf" +checksum = "47627dd7305c6a2d6c8c6bcd24c5a4c17dbbf425f4f9c5313e724b38fc9782e9" dependencies = [ "memchr", "ucd-trie", @@ -3517,7 +3515,7 @@ checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -3538,9 +3536,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.34" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" [[package]] name = "poly1305" @@ -3554,9 +3552,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.15.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] name = "portable-atomic-util" @@ -3589,17 +3587,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.119", -] - -[[package]] -name = "prettyplease" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bfe0f4c752e450fc2faf62654f1c134747922825d5b04ca717b8874f41a40c0" -dependencies = [ - "proc-macro2", - "syn 3.0.4", + "syn 2.0.118", ] [[package]] @@ -3646,7 +3634,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "721a1da530b5a2633218dc9f75713394c983c352be88d2d7c9ee85e2c4c21794" dependencies = [ "fixed-hash", - "uint 0.10.1", + "uint 0.10.0", ] [[package]] @@ -3670,32 +3658,32 @@ dependencies = [ ] [[package]] -name = "proc-macro-error-attr3" -version = "3.0.1" +name = "proc-macro-error-attr2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82366fd7d8b7a440d66d13418820c69df9b3908bcb1a0476d7f5ce5d12f5a04d" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" dependencies = [ "proc-macro2", "quote", ] [[package]] -name = "proc-macro-error3" -version = "3.0.1" +name = "proc-macro-error2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b511283ea8a74b4b39447b128c5d00f03a356b7424554b13e298a5550100d9ac" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" dependencies = [ - "proc-macro-error-attr3", + "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] name = "proc-macro2" -version = "1.0.107" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] @@ -3706,9 +3694,9 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.13.0", "num-traits", - "rand 0.9.5", + "rand 0.9.4", "rand_chacha 0.9.0", "rand_xorshift", "regex-syntax", @@ -3723,14 +3711,14 @@ checksum = "fb6dc647500e84a25a85b100e76c85b8ace114c209432dc174f20aac11d4ed6c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] name = "prost" -version = "0.14.4" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1" +checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" dependencies = [ "bytes", "prost-derive", @@ -3738,22 +3726,22 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.14.4" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03da047801ff44bb6a4d407d4860c05fd70bb81714e6b2f3812603d5b145b042" +checksum = "343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7" dependencies = [ "heck", "itertools 0.14.0", "log", "multimap", "petgraph", - "prettyplease 0.2.37", + "prettyplease", "prost", "prost-types", "pulldown-cmark", "pulldown-cmark-to-cmark", "regex", - "syn 2.0.119", + "syn 2.0.118", "tempfile", ] @@ -3767,14 +3755,14 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] name = "prost-reflect" -version = "0.16.5" +version = "0.16.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b80ea363c31af2de2b92e3c07ed1156628f7838c4afb4df75ee78a37fedbd1" +checksum = "590aa145fee8f7a26b5a6055365e7c5e89a5c1caae9869de76ec0ee73181a2f9" dependencies = [ "logos 0.16.1", "miette", @@ -3784,9 +3772,9 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.14.4" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f94967dc7688f3054c7fac87473ffae4cc4c3904800e2d9f5b857246d8963b0a" +checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7" dependencies = [ "prost", ] @@ -3838,25 +3826,25 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.13.0", "memchr", "unicase", ] [[package]] name = "pulldown-cmark-to-cmark" -version = "22.0.1" +version = "22.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab1ad36992cead65f02aa399a373a42730922f1525d988172634fdefdecb8a60" +checksum = "50793def1b900256624a709439404384204a5dc3a6ec580281bfaac35e882e90" dependencies = [ "pulldown-cmark", ] [[package]] name = "quote" -version = "1.0.47" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" dependencies = [ "proc-macro2", ] @@ -3881,9 +3869,9 @@ checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] name = "rand" -version = "0.8.8" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e058c7de0b26af77780c769414d6257830bb240f3c38477dbc2c16e5f54d6d4c" +checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" dependencies = [ "libc", "rand_chacha 0.3.1", @@ -3892,9 +3880,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.5" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" +checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.5", @@ -4009,7 +3997,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.13.0", ] [[package]] @@ -4034,9 +4022,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.13.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +checksum = "2a0e75113e14dc5acb068cd0786884f214f1312650a3d36d269f5c4f3cdee8a2" dependencies = [ "aho-corasick", "memchr", @@ -4046,9 +4034,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.18" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" +checksum = "1f388202e4b80542a0921078cc23b6333bcf1409c1e3f86404cae4766a6131db" dependencies = [ "aho-corasick", "memchr", @@ -4097,9 +4085,9 @@ dependencies = [ [[package]] name = "ruint" -version = "1.20.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e99bff0393163bb25029a6af25d3d8d202ba5b5438a74d1bd8789f5c822970" +checksum = "45caf26f647c19115bf9c453c70ffe4a4a3a6390dceebd942610584f99b8ddce" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", @@ -4115,8 +4103,8 @@ dependencies = [ "parity-scale-codec", "primitive-types 0.12.2", "proptest", - "rand 0.8.8", - "rand 0.9.5", + "rand 0.8.6", + "rand 0.9.4", "rlp", "ruint-macro", "serde_core", @@ -4136,7 +4124,7 @@ version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "165ca6e57b20e1351573e3729b958bc62f0e48025386970b6e4d29e7a7e71f3f" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.13.0", "fallible-iterator", "fallible-streaming-iterator", "hashlink", @@ -4205,18 +4193,18 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.43" +version = "0.23.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06" +checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" dependencies = [ "log", "once_cell", @@ -4241,18 +4229,18 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.15.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" +checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046" dependencies = [ "zeroize", ] [[package]] name = "rustls-webpki" -version = "0.103.15" +version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ "ring", "rustls-pki-types", @@ -4339,7 +4327,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.13.0", "core-foundation", "core-foundation-sys", "libc", @@ -4401,9 +4389,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.229" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", @@ -4434,29 +4422,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.229" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.229" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 2.0.118", ] [[package]] name = "serde_json" -version = "1.0.151" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ "itoa", "memchr", @@ -4467,13 +4455,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.21" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 2.0.118", ] [[package]] @@ -4595,9 +4583,9 @@ checksum = "e8e2fb0f499abb4d162f2bedad68f5ef91a1682b5a03596ddb67efd37768d100" [[package]] name = "socket2" -version = "0.6.5" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", "windows-sys 0.61.2", @@ -4605,9 +4593,9 @@ dependencies = [ [[package]] name = "spin" -version = "0.9.9" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" dependencies = [ "lock_api", ] @@ -4698,9 +4686,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.119" +version = "2.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" dependencies = [ "proc-macro2", "quote", @@ -4720,14 +4708,14 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "1.7.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e452eb8cb83fc8b81597eb07c8d39f770d04905af9c5bffce8bea7213df29960" +checksum = "ec005042c7d952febc1a3ef5b0f6674e9054aa836877a31c90b20e25b3d31744" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -4744,9 +4732,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-triple" -version = "1.0.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a6bfce3d99adfa72d24750a61f782f3036a81e7f86d8841ee1326deaebd171" +checksum = "591ef38edfb78ca4771ee32cf494cb8771944bee237a9b91fc9c1424ac4b777b" [[package]] name = "tempfile" @@ -4758,7 +4746,7 @@ dependencies = [ "getrandom 0.4.3", "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -4793,38 +4781,38 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.20" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.20" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 2.0.118", ] [[package]] name = "thread_local" -version = "1.1.10" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ "cfg-if", ] [[package]] name = "time" -version = "0.3.55" +version = "0.3.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" +checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50" dependencies = [ "deranged", "num-conv", @@ -4842,9 +4830,9 @@ checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.32" +version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" +checksum = "c431b87111666e491a90baa837f914fb45cd5dc3c268591b0220ff5057f2085f" dependencies = [ "num-conv", "time-core", @@ -4876,9 +4864,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.53.1" +version = "1.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" dependencies = [ "bytes", "libc", @@ -4891,13 +4879,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.7.2" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 2.0.118", ] [[package]] @@ -4912,9 +4900,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.19" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3d06f0b082ba57c26b79407372e57cf2a1e28124f78e9479fe80322cf53420b" +checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" dependencies = [ "futures-core", "pin-project-lite", @@ -4924,23 +4912,22 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.19" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", "futures-sink", - "libc", "pin-project-lite", "tokio", ] [[package]] name = "toml" -version = "1.1.4+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5" +checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" dependencies = [ "indexmap 2.14.0", "serde_core", @@ -4962,9 +4949,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.13+spec-1.1.0" +version = "0.25.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" +checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" dependencies = [ "indexmap 2.14.0", "toml_datetime", @@ -4974,18 +4961,18 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.1.3+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ "winnow", ] [[package]] name = "toml_writer" -version = "1.1.2+spec-1.1.0" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" +checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" [[package]] name = "tonic" @@ -5023,10 +5010,10 @@ version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c68f61875ac5293cf72e6c8cf0158086428c82c37229e98c840878f1706b0322" dependencies = [ - "prettyplease 0.2.37", + "prettyplease", "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -5059,12 +5046,12 @@ version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "654e5643eff75d7f8c99197ce1440ed19a3474eada74c12bbac488b2cafdae27" dependencies = [ - "prettyplease 0.2.37", + "prettyplease", "proc-macro2", "prost-build", "prost-types", "quote", - "syn 2.0.119", + "syn 2.0.118", "tempfile", "tonic-build", ] @@ -5144,7 +5131,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -5194,9 +5181,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "trybuild" -version = "1.0.120" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e605bf6b39357663d8ba4e984f8be8da8df6bb32e81031d6889024ea8fd68e4" +checksum = "0710d4dfbeae4f9c390baa784c49858a7468fa433f3fe5d0ec5ebef651cf59f9" dependencies = [ "dissimilar", "glob", @@ -5240,9 +5227,9 @@ dependencies = [ [[package]] name = "uint" -version = "0.10.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f9227a75a5a540a464c832ad4a4195dbdbecd8787610a56262721fde6f04f90" +checksum = "909988d098b2f738727b161a106cfc7cab00c539c2687a8836f8e565976fb53e" dependencies = [ "byteorder", "crunchy", @@ -5392,9 +5379,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.127" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" dependencies = [ "cfg-if", "once_cell", @@ -5405,9 +5392,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.77" +version = "0.4.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b7777d5cc23d0e91404e53ce2d5e8ec7acae3026b16233dba62cd3246457950" +checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" dependencies = [ "js-sys", "wasm-bindgen", @@ -5415,9 +5402,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.127" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5425,22 +5412,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.127" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.127" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" dependencies = [ "unicode-ident", ] @@ -5460,9 +5447,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.104" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c435338968042f4f59a557f690a253676d47ce13ceb55d70100e7facf6620a30" +checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" dependencies = [ "js-sys", "wasm-bindgen", @@ -5474,7 +5461,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -5510,7 +5497,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -5521,7 +5508,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -5632,9 +5619,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "1.0.4" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" dependencies = [ "memchr", ] @@ -5677,22 +5664,22 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.56" +version = "0.8.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" +checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.56" +version = "0.8.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" +checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] @@ -5712,11 +5699,11 @@ checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.118", ] [[package]] name = "zmij" -version = "1.0.23" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/README.md b/README.md index c146092..d5d98ef 100644 --- a/README.md +++ b/README.md @@ -8,27 +8,22 @@ Before getting started, ensure you have the following prerequisites: 1. **Install Rust** - Make sure you have Rust installed on your system. If not, install it from [rustup.rs](https://rustup.rs/) -2. **Install the pinned Miden v0.16 contract toolchain** - The v0.16 midenup channel does not - provision the source-aligned compiler required by this project. Install the immutable compiler - revision into an isolated Cargo root so it does not replace another `cargo-miden` installation: +2. **Install the source-matched Miden compiler** - This project follows the compiler template at + revision `5e126fc06d78b2097a7be128f5543cb60817a95e`. Install `cargo-miden` from that + immutable revision into an isolated Cargo root: ```bash MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}" - MIDEN_V16_TOOL_ROOT="$MIDEN_CARGO_HOME/miden-v16-0.10.0-rc.1" - COMPILER_PIPELINE_COMMIT=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a + COMPILER_REV=5e126fc06d78b2097a7be128f5543cb60817a95e + COMPILER_ROOT="$MIDEN_CARGO_HOME/miden-v16-compiler-$COMPILER_REV" cargo install cargo-miden --git https://github.com/0xMiden/compiler \ - --rev "$COMPILER_PIPELINE_COMMIT" --locked --root "$MIDEN_V16_TOOL_ROOT" - cargo install midenc --git https://github.com/0xMiden/compiler \ - --rev "$COMPILER_PIPELINE_COMMIT" --locked --root "$MIDEN_V16_TOOL_ROOT" + --rev "$COMPILER_REV" --locked --root "$COMPILER_ROOT" - CARGO_MIDEN_BIN="$MIDEN_V16_TOOL_ROOT/bin/cargo-miden" - test "$("$CARGO_MIDEN_BIN" miden --version)" = 'cargo-miden 0.10.0-rc.1' - test "$("$MIDEN_V16_TOOL_ROOT/bin/midenc" --version)" = 'midenc 0.10.0-rc.1' + export CARGO_MIDEN="$COMPILER_ROOT/bin/cargo-miden" + test "$("$CARGO_MIDEN" miden --version)" = 'cargo-miden 0.10.0-rc.1' ``` - Re-derive `MIDEN_CARGO_HOME`, `MIDEN_V16_TOOL_ROOT`, and `CARGO_MIDEN_BIN` in each new shell. - ## **Structure** ```text @@ -76,7 +71,7 @@ This structure provides flexibility as your application grows, allowing you to a To create a new contract crate, run the following command from the workspace root: ```bash -"$CARGO_MIDEN_BIN" miden new --account contracts/my-account +"$CARGO_MIDEN" miden new --account contracts/my-account ``` This will scaffold a new contract crate inside the `contracts/` directory with all the necessary boilerplate. @@ -103,58 +98,35 @@ Tests are located in `integration/tests/`. To add a new test: ```bash # Compile a specific contract -"$CARGO_MIDEN_BIN" miden build \ - --manifest-path contracts/counter-account/Cargo.toml --release +"$CARGO_MIDEN" miden build --manifest-path contracts/counter-account/Cargo.toml # Or navigate to the contract directory cd contracts/counter-account -"$CARGO_MIDEN_BIN" miden build --release +"$CARGO_MIDEN" miden build ``` -The automatic post-edit hook derives the same isolated binary from -`${CARGO_HOME:-$HOME/.cargo}/miden-v16-0.10.0-rc.1`; it does not select a compiler from ambient -`PATH` and rejects any version other than `cargo-miden 0.10.0-rc.1`. - -### Plain Cargo Check and IDE Analysis - -Each contract has a three-line `build.rs` that calls -`miden_sdk_build_script_support::prepare_package_cache()`. For plain `cargo check` or IDE analysis, -select the verified absolute compiler with `CARGO_MIDEN` and use a checkout-private target directory. -Run Cargo from the contract directory so its `.cargo/config.toml` supplies the Miden target settings: - -```bash -PROJECT_ROOT="$PWD" -PLAIN_CARGO_TARGET="$PROJECT_ROOT/target/plain-cargo-v16" -( - cd contracts/counter-account - env -u MIDENC_PACKAGE_CACHE \ - CARGO_MIDEN="$CARGO_MIDEN_BIN" \ - CARGO_TARGET_DIR="$PLAIN_CARGO_TARGET" \ - cargo check --release -) -``` - -Configure an IDE with the same absolute `CARGO_MIDEN` and checkout-private `CARGO_TARGET_DIR`. -Do not set `MIDENC_PACKAGE_CACHE` manually; the build-support wrapper stages and exports it. +Each contract also has a thin `build.rs` that delegates to +`miden-sdk-build-script-support`, keeping plain `cargo check` and IDE analysis working. The +helper populates the Miden package cache with the contract's compiled dependencies, so the SDK +macros resolve them without a manual build. Export the verified absolute `CARGO_MIDEN` path before +running plain Cargo commands or IDE analysis; that explicit path takes precedence over an ambient +midenup installation. ### Run a Binary ```bash # Navigate to integration crate and run a binary cd integration -cargo run --bin increment_count --release +cargo run --bin increment_count ``` -`increment_count` temporarily targets DevNet at `https://rpc.devnet.miden.io` while Testnet is -being upgraded. Running it creates public DevNet accounts, adds a new sender key to the existing -`keystore/`, and submits transactions. Returned transaction IDs prove submission, not finality. - ### Run Tests ```bash -# Run from the workspace root -cargo test -p integration --release # Run all tests -cargo test -p integration --release counter_test # Run the counter test +# Navigate to integration crate and run tests +cd integration +cargo test # Run all tests +cargo test counter_test # Run specific test file ``` ## **Extending the Workspace** diff --git a/contracts/counter-account/Cargo.lock b/contracts/counter-account/Cargo.lock deleted file mode 100644 index f5ddaae..0000000 --- a/contracts/counter-account/Cargo.lock +++ /dev/null @@ -1,3175 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "aead" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1973cfbc1a2daf9cf550e74e1f088c28e7f7d8c1e1418fb6c9dc5184b7e84c99" -dependencies = [ - "crypto-common", - "inout", -] - -[[package]] -name = "aho-corasick" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" -dependencies = [ - "memchr", -] - -[[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", -] - -[[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", -] - -[[package]] -name = "anyhow" -version = "1.0.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" - -[[package]] -name = "arrayvec" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" - -[[package]] -name = "autocfg" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" - -[[package]] -name = "base16ct" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6" - -[[package]] -name = "base64ct" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" - -[[package]] -name = "bech32" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32637268377fc7b10a8c6d51de3e7fba1ce5dd371a96e342b34e6078db558e7f" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" - -[[package]] -name = "blake3" -version = "1.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9e454fc11f76977dc803893aff6304ed33d6a26efae8696573bea74baa27ae" -dependencies = [ - "arrayvec", - "cc", - "cfg-if", - "constant_time_eq", - "cpufeatures", -] - -[[package]] -name = "block-buffer" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" -dependencies = [ - "hybrid-array", -] - -[[package]] -name = "bumpalo" -version = "3.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" - -[[package]] -name = "cc" -version = "1.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad534f4357a5264cce5019c989cf66a4f0dc4e0d1b1d15f8aacec0ff7360273" -dependencies = [ - "find-msvc-tools", - "jobserver", - "libc", - "shlex", -] - -[[package]] -name = "cfg-if" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - -[[package]] -name = "chacha20" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", - "rand_core 0.10.1", -] - -[[package]] -name = "chacha20poly1305" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b89e1c441e926b9c82a8d023f6e1b7ae0adcfaa7d621814e4d60789bac751cb" -dependencies = [ - "aead", - "chacha20", - "cipher", - "poly1305", -] - -[[package]] -name = "cipher" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" -dependencies = [ - "block-buffer", - "crypto-common", - "inout", -] - -[[package]] -name = "cmov" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" - -[[package]] -name = "colorchoice" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" - -[[package]] -name = "const-oid" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" - -[[package]] -name = "constant_time_eq" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" - -[[package]] -name = "counter-account" -version = "0.1.0" -dependencies = [ - "miden", - "miden-sdk-build-script-support", -] - -[[package]] -name = "cpubits" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae" - -[[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.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" - -[[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.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a52aa3fcda4e6302a9f48734f234d35d4721b96f8fe07d073f07ce9df4f0271" -dependencies = [ - "cpubits", - "ctutils", - "hybrid-array", - "num-traits", - "rand_core 0.10.1", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" -dependencies = [ - "hybrid-array", - "rand_core 0.10.1", -] - -[[package]] -name = "ctutils" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" -dependencies = [ - "cmov", - "subtle", -] - -[[package]] -name = "curve25519-dalek" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5eed333089e2e1c1ac8c6c0398e5e2497b4c9926ca6d0365ed1e099afa5bc23" -dependencies = [ - "cfg-if", - "cpufeatures", - "curve25519-dalek-derive", - "digest", - "fiat-crypto", - "rustc_version 0.4.1", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "defmt" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2953bfe4f93bbd20cc71198842756f77d161884c99ebbabc41d80231ded88d1" -dependencies = [ - "bitflags 1.3.2", - "defmt-macros", -] - -[[package]] -name = "defmt-macros" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bad9c72e7ca2137e0dc3813245a0d282fd6daad32fd800af018306a9169b5fe8" -dependencies = [ - "defmt-parser", - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "defmt-parser" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" -dependencies = [ - "thiserror", -] - -[[package]] -name = "der" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69dedd701da44b0536442edf09c81a64b0ab97a7a4a5e3d1971f00027cbc63d" -dependencies = [ - "const-oid", - "zeroize", -] - -[[package]] -name = "derive_more" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" -dependencies = [ - "derive_more-impl", -] - -[[package]] -name = "derive_more-impl" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" -dependencies = [ - "proc-macro2", - "quote", - "rustc_version 0.4.1", - "syn 2.0.119", -] - -[[package]] -name = "digest" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" -dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", - "ctutils", -] - -[[package]] -name = "dissimilar" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aeda16ab4059c5fd2a83f2b9c9e9c981327b18aa8e3b313f7e6563799d4f093e" - -[[package]] -name = "ecdsa" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0681a4fc24c767085329728d8dfba959af91228aa4610cca4f8ce317ba46ae0" -dependencies = [ - "der", - "digest", - "elliptic-curve", - "rfc6979", - "signature", - "spki", - "zeroize", -] - -[[package]] -name = "ed25519" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29fcf32e6c73d1079f83ab4d782de2d81620346a5f38c6237a86a22f8368980a" -dependencies = [ - "pkcs8", - "signature", -] - -[[package]] -name = "ed25519-dalek" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ebaa1a2bf1290ab3bfe5a7b771d050ebffab2711c19a81691c683a5144a25de" -dependencies = [ - "curve25519-dalek", - "ed25519", - "serde", - "sha2", - "signature", - "subtle", - "zeroize", -] - -[[package]] -name = "either" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" - -[[package]] -name = "elliptic-curve" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d65aa39b3a5c1c9c1b745c9a019234bb7a21b77abcb4f4d266d706e2d577d65" -dependencies = [ - "base16ct", - "crypto-bigint", - "crypto-common", - "digest", - "ff", - "group", - "hkdf", - "hybrid-array", - "pkcs8", - "rand_core 0.10.1", - "sec1", - "subtle", - "zeroize", -] - -[[package]] -name = "env_filter" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900d271a03799a1ee8d1ca9b19893b48ca674a9284fefcfb85f05e74ed314217" -dependencies = [ - "log", - "regex", -] - -[[package]] -name = "env_logger" -version = "0.11.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de671bd27a75a797dc9ae289ba1e77276e75e2026408aab65185384e2d5cd3f6" -dependencies = [ - "anstream", - "anstyle", - "env_filter", - "jiff", - "log", -] - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "erased-serde" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" -dependencies = [ - "serde", - "serde_core", - "typeid", -] - -[[package]] -name = "ff" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f686ab92a9fb0eaf188f6c6c87b89490baa6fdb0db4544ba4dc47f7942489f" -dependencies = [ - "rand_core 0.10.1", - "subtle", -] - -[[package]] -name = "fiat-crypto" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" - -[[package]] -name = "find-msvc-tools" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" - -[[package]] -name = "flume" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e139bc46ca777eb5efaf62df0ab8cc5fd400866427e56c68b22e414e53bd3be" -dependencies = [ - "spin 0.9.9", -] - -[[package]] -name = "foldhash" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" - -[[package]] -name = "fs-err" -version = "3.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91aa448ca50d7e79433bdf3ee8d99215430d2ec02ade5aefab2a073a1822e8a" -dependencies = [ - "autocfg", -] - -[[package]] -name = "futures" -version = "0.3.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" - -[[package]] -name = "futures-io" -version = "0.3.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" - -[[package]] -name = "futures-sink" -version = "0.3.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" - -[[package]] -name = "futures-task" -version = "0.3.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" - -[[package]] -name = "futures-util" -version = "0.3.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" -dependencies = [ - "futures-core", - "futures-sink", - "futures-task", - "pin-project-lite", -] - -[[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 = "getrandom" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" -dependencies = [ - "cfg-if", - "libc", - "r-efi 5.3.0", - "wasip2", -] - -[[package]] -name = "getrandom" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "r-efi 6.0.0", - "rand_core 0.10.1", - "wasm-bindgen", -] - -[[package]] -name = "glob" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" - -[[package]] -name = "group" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fd1a1c7a5206c5b7a3f5a0d7ccd3ff85d0c8f5133d62a02680255b0004af5f4" -dependencies = [ - "ff", - "rand_core 0.10.1", - "subtle", -] - -[[package]] -name = "hashbrown" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" -dependencies = [ - "foldhash", -] - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hkdf" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" -dependencies = [ - "hmac", -] - -[[package]] -name = "hmac" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" -dependencies = [ - "digest", -] - -[[package]] -name = "hybrid-array" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707114b52a152fa7bdb290cd7cd5912d9467273b6d74e21b8d81aca1f8533f6b" -dependencies = [ - "subtle", - "typenum", - "zeroize", -] - -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - -[[package]] -name = "indenter" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" - -[[package]] -name = "indexmap" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" -dependencies = [ - "equivalent", - "hashbrown", - "serde", - "serde_core", -] - -[[package]] -name = "inout" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" -dependencies = [ - "hybrid-array", -] - -[[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.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b4baf93f58d4425749ca49a51c50ebab072c5df6994d08fed93541c331481dc" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - -[[package]] -name = "jiff" -version = "0.2.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668b7183bd07af9a4885f5c35b0cc5c83c4607a913c16b7e17291832910d2dcc" -dependencies = [ - "defmt", - "jiff-core", - "jiff-static", - "log", - "portable-atomic", - "portable-atomic-util", - "serde_core", -] - -[[package]] -name = "jiff-core" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7feca88439efe53da3754500c1851dedf3cb36c524dd5cf8225cc0794de95d09" -dependencies = [ - "defmt", -] - -[[package]] -name = "jiff-static" -version = "0.2.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a69dcb3a21cfb32ce1cd056169337ca284af0766dd766e7878819b251a49204" -dependencies = [ - "jiff-core", - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "jobserver" -version = "0.1.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" -dependencies = [ - "getrandom 0.4.3", - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" -dependencies = [ - "cfg-if", - "wasm-bindgen", -] - -[[package]] -name = "k256" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f50113171a713f4a4231ef82eb26703607139b35dcb56241f0ceab2ae1f7d8" -dependencies = [ - "cpubits", - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2", - "wnaf", -] - -[[package]] -name = "keccak" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8f198d1db720e4940b5a493201d199d9f24f568f8f746bd13706243a2f71598" -dependencies = [ - "cfg-if", - "cpufeatures", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[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.189" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" - -[[package]] -name = "libm" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" - -[[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.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" - -[[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 = "matchers" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "memchr" -version = "2.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" - -[[package]] -name = "miden" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" -dependencies = [ - "miden-base", - "miden-base-macros", - "miden-base-sys", - "miden-field", - "miden-field-repr", - "miden-sdk-alloc", - "miden-stdlib-sys", - "miden-tx-script-args", - "wit-bindgen", -] - -[[package]] -name = "miden-ace-codegen" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93a217e3f1fec32105bca7dc421d85ab39199b78d2e43081fc0fa92411de9a84" -dependencies = [ - "miden-constraint-compiler", - "miden-core", - "miden-crypto", - "thiserror", -] - -[[package]] -name = "miden-air" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90b7b3a23756f2bfdba2b37c8d1551b3b531fce0de42e3a9a7f840bb69018106" -dependencies = [ - "miden-ace-codegen", - "miden-core", - "miden-crypto", - "miden-utils-indexing", - "p3-field", - "thiserror", - "tracing", -] - -[[package]] -name = "miden-assembly" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727de4350d9ba263be17d9f93dc4b8d0deebabab29c3bed34f32c4af7b1cf20c" -dependencies = [ - "log", - "miden-assembly-syntax", - "miden-core", - "miden-mast-package", - "miden-package-registry", - "miden-project", - "proptest", - "smallvec", - "thiserror", -] - -[[package]] -name = "miden-assembly-syntax" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3874c53f40656a56f74afe8e957d75667218808894ab8f5dbd91e58a8a0c3393" -dependencies = [ - "log", - "miden-assembly-syntax-cst", - "miden-core", - "miden-debug-types", - "miden-utils-diagnostics", - "midenc-hir-type", - "proptest", - "regex", - "rustc_version 0.4.1", - "semver 1.0.28", - "serde", - "smallvec", - "thiserror", -] - -[[package]] -name = "miden-assembly-syntax-cst" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "151b657a50aee75a0591dbd66d57774e2f9ec1f00fa17d773820e736bcca0cb6" -dependencies = [ - "miden-debug-types", - "miden-rowan", - "miden-utils-diagnostics", - "thiserror", -] - -[[package]] -name = "miden-base" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" -dependencies = [ - "miden-base-sys", - "miden-stdlib-sys", -] - -[[package]] -name = "miden-base-macros" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" -dependencies = [ - "heck", - "miden-assembly-syntax", - "miden-debug-types", - "miden-formatting", - "miden-mast-package", - "miden-project", - "miden-protocol", - "midenc-frontend-wasm-metadata", - "proc-macro2", - "quote", - "semver 1.0.28", - "syn 2.0.119", - "toml", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "miden-base-sys" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" -dependencies = [ - "miden-field-repr", - "miden-stdlib-sys", -] - -[[package]] -name = "miden-constraint-compiler" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b95f126188b824423edbbc5eebf9b61c872905c21e3f1e9e9b69d1afbba12288" -dependencies = [ - "miden-core", - "miden-crypto", -] - -[[package]] -name = "miden-core" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55df0c9b5fddcfc2c03c6e476bec0523328fb85090e716d1ab9a4db1d2267c67" -dependencies = [ - "derive_more", - "log", - "miden-crypto", - "miden-debug-types", - "miden-formatting", - "miden-utils-core-derive", - "miden-utils-indexing", - "miden-utils-sync", - "serde", - "thiserror", -] - -[[package]] -name = "miden-core-lib" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1f5b4dca8d29c99859e3470ec1fadfa89506e6b349ade7fa475574e3104db85" -dependencies = [ - "env_logger", - "fs-err", - "miden-assembly", - "miden-assembly-syntax", - "miden-core", - "miden-core-lib-codegen", - "miden-crypto", - "miden-mast-package", - "miden-package-registry", - "miden-precompiles", - "miden-processor", - "miden-utils-sync", - "thiserror", -] - -[[package]] -name = "miden-core-lib-codegen" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d926e5e8a288a2a55c42541059d8e52c43c10d373643b309add169a3a0eb914" -dependencies = [ - "miden-core", - "miden-precompiles", -] - -[[package]] -name = "miden-crypto" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de00899e7045ee3bea78d4c4c690d8e2c14fff1f3a1ede1fb2922ed699fdda14" -dependencies = [ - "blake3", - "cc", - "chacha20poly1305", - "curve25519-dalek", - "der", - "ed25519-dalek", - "flume", - "hkdf", - "k256", - "miden-crypto-derive", - "miden-field", - "miden-lifted-stark", - "miden-serde-utils", - "num", - "num-complex", - "once_cell", - "p3-blake3", - "p3-challenger", - "p3-dft", - "p3-goldilocks", - "p3-keccak", - "p3-matrix", - "p3-maybe-rayon", - "p3-symmetric", - "p3-util", - "rand 0.10.2", - "rand_chacha 0.10.0", - "serde", - "sha2", - "sha3", - "subtle", - "thiserror", - "x25519-dalek", -] - -[[package]] -name = "miden-crypto-derive" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5b5a5c8b0fd14982e60ebd010f452b06f693b9efa116054487aff1f2657d2f4" -dependencies = [ - "quote", - "syn 2.0.119", -] - -[[package]] -name = "miden-debug-types" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793b37eaafbac33a4c8bf8f57d4c1d0ce8b8a7d25698ddfd2e1a2a6552e94f6c" -dependencies = [ - "memchr", - "miden-crypto", - "miden-formatting", - "miden-miette", - "miden-utils-indexing", - "miden-utils-sync", - "paste", - "proptest", - "serde", - "serde_spanned", - "thiserror", - "zerocopy", -] - -[[package]] -name = "miden-field" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41be9f7f5c0ef020bcedf526afe54b3a97244e207a5385e4453ca47799fe2afe" -dependencies = [ - "miden-serde-utils", - "num-bigint 0.5.1", - "p3-challenger", - "p3-field", - "p3-goldilocks", - "p3-util", - "paste", - "rand 0.10.2", - "serde", - "subtle", - "thiserror", -] - -[[package]] -name = "miden-field-repr" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" -dependencies = [ - "miden-field", - "miden-field-repr-derive", -] - -[[package]] -name = "miden-field-repr-derive" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "miden-formatting" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e392e0a8c34b32671012b439de35fa8987bf14f0f8aac279b97f8b8cc6e263b" -dependencies = [ - "unicode-width 0.1.14", -] - -[[package]] -name = "miden-lifted-air" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0ad52f76750f8b9dc8a7c4bed32644628198fab48daf31167c2f750c939378a" -dependencies = [ - "p3-air", - "p3-challenger", - "p3-field", - "p3-matrix", - "p3-util", - "thiserror", -] - -[[package]] -name = "miden-lifted-stark" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212a017744ef2aaca36f89bad2c880949311ec778586b8405a5e47f9e6ca59de" -dependencies = [ - "miden-lifted-air", - "miden-stark-transcript", - "miden-stateful-hasher", - "p3-challenger", - "p3-dft", - "p3-field", - "p3-goldilocks", - "p3-matrix", - "p3-maybe-rayon", - "p3-symmetric", - "p3-util", - "rand 0.10.2", - "serde", - "thiserror", - "tracing", -] - -[[package]] -name = "miden-mast-package" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26062f2e4cb18e7fa9244f8b18fe2adea2bfe3f016431f75f80b5b98249c34f6" -dependencies = [ - "hashbrown", - "log", - "miden-assembly-syntax", - "miden-core", - "miden-debug-types", - "miden-utils-indexing", - "rustc-hash", - "serde", - "thiserror", - "zerocopy", -] - -[[package]] -name = "miden-miette" -version = "8.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eef536978f24a179d94fa2a41e4f92b28e7d8aab14b8d23df28ad2a3d7098b20" -dependencies = [ - "cfg-if", - "futures", - "indenter", - "lazy_static", - "miden-miette-derive", - "owo-colors", - "regex", - "rustc_version 0.2.3", - "rustversion", - "serde_json", - "spin 0.9.9", - "strip-ansi-escapes", - "syn 2.0.119", - "textwrap", - "thiserror", - "trybuild", - "unicode-width 0.1.14", -] - -[[package]] -name = "miden-miette-derive" -version = "8.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86a905f3ea65634dd4d1041a4f0fd0a3e77aa4118341d265af1a94339182222f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "miden-package-registry" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8653a8792d81ec1807815e5735de98d9d928f89b7bb5280ffadb848e87eb3ed3" -dependencies = [ - "miden-assembly-syntax", - "miden-core", - "miden-mast-package", - "proptest", - "pubgrub", - "serde", - "smallvec", - "thiserror", -] - -[[package]] -name = "miden-precompiles" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d01b98147f622a733c9c206db9e78c7e1a353b2309e34e569e2757a435a77e0" -dependencies = [ - "miden-core", - "miden-crypto", -] - -[[package]] -name = "miden-precompiles-prover" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed0d94d331324d6b378f19ee925a6be6e17731e108d43f034c23653048a8ca0" -dependencies = [ - "miden-air", - "miden-core", - "miden-crypto", - "miden-lifted-air", - "miden-lifted-stark", - "miden-precompiles", - "miden-serde-utils", - "ruint", - "serde", - "serde-wincode", - "thiserror", - "tracing", - "wincode", -] - -[[package]] -name = "miden-processor" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b3f6dbcea246715c7c528bbc2fbee46464493c11ac417c12c9562a229b136f" -dependencies = [ - "hashbrown", - "itertools", - "miden-air", - "miden-core", - "miden-debug-types", - "miden-mast-package", - "miden-precompiles", - "miden-utils-diagnostics", - "miden-utils-indexing", - "paste", - "rayon", - "thiserror", - "tracing", -] - -[[package]] -name = "miden-project" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e02ac82735cd86ea17fcf8614496ce7e462f3e80dbc1113bf821e8197dcda49d" -dependencies = [ - "miden-assembly-syntax", - "miden-core", - "miden-mast-package", - "miden-package-registry", - "proptest", - "serde", - "serde-untagged", - "thiserror", - "toml", -] - -[[package]] -name = "miden-protocol" -version = "0.16.0-rc.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e275feebbe9c2458c5877c5f2a03b8e2152831ce956376f015fc4c50acfffb50" -dependencies = [ - "bech32", - "fs-err", - "getrandom 0.4.3", - "miden-assembly", - "miden-assembly-syntax", - "miden-core", - "miden-core-lib", - "miden-crypto", - "miden-crypto-derive", - "miden-mast-package", - "miden-package-registry", - "miden-processor", - "miden-protocol-build-utils", - "miden-utils-sync", - "miden-verifier", - "rand 0.10.2", - "regex", - "semver 1.0.28", - "thiserror", -] - -[[package]] -name = "miden-protocol-build-utils" -version = "0.16.0-rc.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a35f63db32f2e7ea9fc47abf17023aa509beadd77b6dffc4efff385eef4634b" -dependencies = [ - "fs-err", - "miden-assembly", - "miden-core", - "miden-mast-package", - "miden-package-registry", - "miden-project", - "regex", - "walkdir", -] - -[[package]] -name = "miden-rowan" -version = "0.16.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c13695bf99aabaa21d6572b807c66bb26251aa3d9b75e828b3c99b97a3b1ce7e" -dependencies = [ - "hashbrown", - "rustc-hash", -] - -[[package]] -name = "miden-sdk-alloc" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" - -[[package]] -name = "miden-sdk-build-script-support" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" - -[[package]] -name = "miden-serde-utils" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa5e67d63441ddaec820a7cf0cabefa8312c15db7a1f2b108ce1b3f589eeeb23" -dependencies = [ - "p3-field", - "p3-goldilocks", - "wincode", -] - -[[package]] -name = "miden-stark-transcript" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ebdd546c7583ba045b20afdde9986e42e7070d1f5fb8841e13f3c921110873" -dependencies = [ - "p3-challenger", - "p3-field", - "serde", - "thiserror", -] - -[[package]] -name = "miden-stateful-hasher" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b47d09c4dbfa32918847a4d6426a69d3d527adbf4e01cf1decf714c95b1bf894" -dependencies = [ - "p3-field", - "p3-symmetric", -] - -[[package]] -name = "miden-stdlib-sys" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" -dependencies = [ - "miden-field", -] - -[[package]] -name = "miden-tx-script-args" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" -dependencies = [ - "miden-field", - "miden-field-repr", - "miden-stdlib-sys", -] - -[[package]] -name = "miden-utils-core-derive" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5764abe966b8c0e7cf377e38de4cbcbbc83a3483f111043c461b7208619bdb96" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "miden-utils-diagnostics" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10561ffd67ee21baca489b96fad11e11579573e1f07f1fc5fb8a111d196fea59" -dependencies = [ - "miden-debug-types", - "miden-miette", - "tracing", -] - -[[package]] -name = "miden-utils-indexing" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c18e4f69d5ebe556a72cc9da474acc53eceb4a75c1247b1f542f20f73145deb" -dependencies = [ - "miden-serde-utils", - "proptest", - "serde", - "thiserror", -] - -[[package]] -name = "miden-utils-sync" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa9c0af7dab7842819c02ef386ed1640884db5c2efa32d30da7d4739548f70e" -dependencies = [ - "lock_api", - "loom", - "once_cell", - "parking_lot", -] - -[[package]] -name = "miden-verifier" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900c0473191ecbe2328e3d6550571f0b1ab42d1417f43c1d98a50cafc3ae4ff1" -dependencies = [ - "miden-air", - "miden-core", - "miden-crypto", - "miden-precompiles", - "miden-precompiles-prover", - "miden-serde-utils", - "serde", - "serde-wincode", - "thiserror", -] - -[[package]] -name = "midenc-frontend-wasm-metadata" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" -dependencies = [ - "miden-mast-package", - "serde", - "serde_json", -] - -[[package]] -name = "midenc-hir-type" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f72909a4bae8dca4bbd34c28dcbcdff595afc47e48c312a683108f7452bd270b" -dependencies = [ - "miden-formatting", - "miden-serde-utils", - "serde", - "serde_repr", - "smallvec", - "thiserror", -] - -[[package]] -name = "nu-ansi-term" -version = "0.50.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" -dependencies = [ - "windows-sys", -] - -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint 0.4.8", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93e7820bc0a80a0238e650327316f929ba18d5be054b647490a3a6a339f3e7c0" -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-integer" -version = "0.1.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92800bd69a1eac91786bcfe9da64a897eb72911b8dc3095decbd07429e8048b" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint 0.4.8", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "once_cell" -version = "1.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" -dependencies = [ - "critical-section", - "portable-atomic", -] - -[[package]] -name = "once_cell_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" - -[[package]] -name = "owo-colors" -version = "4.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d211803b9b6b570f68772237e415a029d5a50c65d382910b879fb19d3271f94d" - -[[package]] -name = "p3-air" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddb1be05c0d6f691afe0c9f468018a9a37cfa904dee78a8081ec96eb3cdd88e8" -dependencies = [ - "p3-field", - "p3-matrix", - "tracing", -] - -[[package]] -name = "p3-blake3" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f202f5fbcceb6f56f783d98efb5de27e5a171470e3364de97b0923b39c87ab5" -dependencies = [ - "blake3", - "p3-symmetric", - "p3-util", -] - -[[package]] -name = "p3-challenger" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d5d5e1ecf2c80b09b48ce870e8abd08b643454101c5dc9d0fd71bfbd78224d" -dependencies = [ - "p3-field", - "p3-maybe-rayon", - "p3-monty-31", - "p3-symmetric", - "p3-util", - "tracing", -] - -[[package]] -name = "p3-dft" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4321a952da2721ecd85ca593ea189798dfb4e439a2cc1378ce1442091880f173" -dependencies = [ - "itertools", - "p3-field", - "p3-matrix", - "p3-maybe-rayon", - "p3-util", - "spin 0.12.3", - "tracing", -] - -[[package]] -name = "p3-field" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53db75d38e04fc255826f388eca9d05976733dc9754aa3db411bc9ea1a37c1a0" -dependencies = [ - "itertools", - "num-bigint 0.5.1", - "p3-maybe-rayon", - "p3-util", - "paste", - "rand 0.10.2", - "serde", - "tracing", -] - -[[package]] -name = "p3-goldilocks" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d03b3f31080df31be723b876709246f8f1e532e1c5b82efb5281d705c8304c63" -dependencies = [ - "num-bigint 0.5.1", - "p3-challenger", - "p3-dft", - "p3-field", - "p3-mds", - "p3-poseidon1", - "p3-poseidon2", - "p3-symmetric", - "p3-util", - "paste", - "rand 0.10.2", - "serde", - "spin 0.12.3", -] - -[[package]] -name = "p3-keccak" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae50c8c37eb847c660298fb275e53c025c49b2623a8cfabf67f5322258b2b4db" -dependencies = [ - "p3-symmetric", - "p3-util", - "tiny-keccak", -] - -[[package]] -name = "p3-matrix" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "473eb920c446a6f4536e0d3528fbdca2a23c0e24e1d0d7767452e6d385dd335c" -dependencies = [ - "itertools", - "p3-field", - "p3-maybe-rayon", - "p3-util", - "rand 0.10.2", - "serde", - "tracing", -] - -[[package]] -name = "p3-maybe-rayon" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6fddfd435f96394769414cf5590b77058aa506659bf20d6592e9d1989e04440" - -[[package]] -name = "p3-mds" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "551ba0ab2cccd89f85a99450224898aff224e323bbf61f777ba6344f0896ef10" -dependencies = [ - "p3-dft", - "p3-field", - "p3-symmetric", - "p3-util", - "rand 0.10.2", -] - -[[package]] -name = "p3-monty-31" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "871f635f7340cd0868b17e43e0c98fefdafdaed90469d0725caf6d8372a2a47c" -dependencies = [ - "itertools", - "num-bigint 0.5.1", - "p3-dft", - "p3-field", - "p3-matrix", - "p3-maybe-rayon", - "p3-mds", - "p3-poseidon1", - "p3-poseidon2", - "p3-symmetric", - "p3-util", - "paste", - "rand 0.10.2", - "serde", - "spin 0.12.3", - "tracing", -] - -[[package]] -name = "p3-poseidon1" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d0d304e9a1f29c0d66534aa84e69528e2118351fdce08dcf5898af4e0fecc32" -dependencies = [ - "p3-field", - "p3-mds", - "p3-symmetric", - "rand 0.10.2", -] - -[[package]] -name = "p3-poseidon2" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43eb8a73a26d14becaed1c67c3e8a047e4311d7909b402383c82ca9643ba17c6" -dependencies = [ - "p3-field", - "p3-mds", - "p3-symmetric", - "p3-util", - "rand 0.10.2", -] - -[[package]] -name = "p3-symmetric" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2015ea80cad969b6aabf27a04884286fe1354393b166d968ee0d80a95126b2a4" -dependencies = [ - "itertools", - "p3-field", - "p3-util", - "serde", -] - -[[package]] -name = "p3-util" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5466fc40e6df89d3b291a2eff16b33e68e8571207790370137ec18090aadab" -dependencies = [ - "serde", -] - -[[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 = "pastey" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ee67f1008b1ba2321834326597b8e186293b049a023cdef258527550b9935b4" - -[[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.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "poly1305" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e2d0073b297041425c7c3df6eb4792d598a15323fe63346852b092eca02904c" -dependencies = [ - "cpufeatures", - "universal-hash", -] - -[[package]] -name = "portable-atomic" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" - -[[package]] -name = "portable-atomic-util" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" -dependencies = [ - "portable-atomic", -] - -[[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.119", -] - -[[package]] -name = "primefield" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c555a6e4eb7d4e158fcb028c835c3b8642206ddc279b5c6b202ef9a8bdb592f4" -dependencies = [ - "crypto-bigint", - "crypto-common", - "ff", - "rand_core 0.10.1", - "subtle", - "zeroize", -] - -[[package]] -name = "primeorder" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c9f42978c78a00e3d68f69fc03e57a234debae69da4020a4fb588fcdcd07b06" -dependencies = [ - "elliptic-curve", - "primefield", - "serdect", - "wnaf", -] - -[[package]] -name = "priority-queue" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93980406f12d9f8140ed5abe7155acb10bb1e69ea55c88960b9c2f117445ef96" -dependencies = [ - "equivalent", - "indexmap", - "serde", -] - -[[package]] -name = "proc-macro2" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "proptest" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" -dependencies = [ - "bitflags 2.13.1", - "num-traits", - "rand 0.9.5", - "rand_chacha 0.9.0", - "rand_xorshift", - "regex-syntax", - "unarray", -] - -[[package]] -name = "pubgrub" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f5df7e552bc7edd075f5783a87fbfc21d6a546e32c16985679c488c18192d83" -dependencies = [ - "indexmap", - "log", - "priority-queue", - "rustc-hash", - "thiserror", - "version-ranges", -] - -[[package]] -name = "quote" -version = "1.0.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" -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 = "rand" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" -dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.5", -] - -[[package]] -name = "rand" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" -dependencies = [ - "chacha20", - "getrandom 0.4.3", - "rand_core 0.10.1", -] - -[[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_chacha" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e6af7f3e25ded52c41df4e0b1af2d047e45896c2f3281792ed68a1c243daedb" -dependencies = [ - "ppv-lite86", - "rand_core 0.10.1", -] - -[[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 = "rand_core" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" - -[[package]] -name = "rand_xorshift" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" -dependencies = [ - "rand_core 0.9.5", -] - -[[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 2.13.1", -] - -[[package]] -name = "regex" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" - -[[package]] -name = "rfc6979" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4a459cddafb3fe76b31fd8f1108007566c40301feb64dc7b54656eb7388172b" -dependencies = [ - "crypto-bigint", - "hmac", -] - -[[package]] -name = "ruint" -version = "1.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e99bff0393163bb25029a6af25d3d8d202ba5b5438a74d1bd8789f5c822970" -dependencies = [ - "ruint-macro", -] - -[[package]] -name = "ruint-macro" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" - -[[package]] -name = "rustc-hash" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver 1.0.28", -] - -[[package]] -name = "rustversion" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "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 = "sec1" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d" -dependencies = [ - "base16ct", - "ctutils", - "der", - "hybrid-array", - "subtle", - "zeroize", -] - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" -dependencies = [ - "serde", - "serde_core", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - -[[package]] -name = "serde" -version = "1.0.229" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" -dependencies = [ - "serde_core", - "serde_derive", -] - -[[package]] -name = "serde-untagged" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" -dependencies = [ - "erased-serde", - "serde", - "serde_core", - "typeid", -] - -[[package]] -name = "serde-wincode" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aa9d3a86c66cf10ce79df36f555a5a4c8d72a82515d9ea8ca420e02c925c30f" -dependencies = [ - "serde", - "thiserror", - "wincode", -] - -[[package]] -name = "serde_core" -version = "1.0.229" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.229" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" -dependencies = [ - "proc-macro2", - "quote", - "syn 3.0.4", -] - -[[package]] -name = "serde_json" -version = "1.0.151" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", -] - -[[package]] -name = "serde_repr" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" -dependencies = [ - "proc-macro2", - "quote", - "syn 3.0.4", -] - -[[package]] -name = "serde_spanned" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" -dependencies = [ - "serde_core", -] - -[[package]] -name = "serdect" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66cf8fedced2fcf12406bcb34223dffb92eaf34908ede12fed414c82b7f00b3e" -dependencies = [ - "base16ct", - "serde", -] - -[[package]] -name = "sha2" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha3" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9bad02c26382724b2d2692c6f179285e4b54eeecd7968f52a50059c3c11759" -dependencies = [ - "digest", - "keccak", - "sponge-cursor", -] - -[[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 = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" - -[[package]] -name = "signature" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5" -dependencies = [ - "digest", - "rand_core 0.10.1", -] - -[[package]] -name = "smallvec" -version = "1.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" -dependencies = [ - "serde", -] - -[[package]] -name = "smawk" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8e2fb0f499abb4d162f2bedad68f5ef91a1682b5a03596ddb67efd37768d100" - -[[package]] -name = "spin" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" -dependencies = [ - "lock_api", -] - -[[package]] -name = "spin" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0134f9043ed38b087ac4f7d4af44c79e2c9e5094421fe3164f435ce585953b10" -dependencies = [ - "lock_api", -] - -[[package]] -name = "spki" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d9efca8738c78ee9484207732f728b1ef517bbb1833d6fc0879ca898a522f6f" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "sponge-cursor" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a0219bd7d979d58245a4f41f695e1ac9f8befdffadd7f61f1bae9e39abc6620" - -[[package]] -name = "strip-ansi-escapes" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a8f8038e7e7969abb3f1b7c2a811225e9296da208539e0f79c5251d6cac0025" -dependencies = [ - "vte", -] - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[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.119" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "target-triple" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a6bfce3d99adfa72d24750a61f782f3036a81e7f86d8841ee1326deaebd171" - -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "textwrap" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" -dependencies = [ - "smawk", - "unicode-linebreak", - "unicode-width 0.2.2", -] - -[[package]] -name = "thiserror" -version = "2.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" -dependencies = [ - "proc-macro2", - "quote", - "syn 3.0.4", -] - -[[package]] -name = "thread_local" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - -[[package]] -name = "toml" -version = "1.1.4+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5" -dependencies = [ - "indexmap", - "serde_core", - "serde_spanned", - "toml_datetime", - "toml_parser", - "toml_writer", - "winnow", -] - -[[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_parser" -version = "1.1.3+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" -dependencies = [ - "winnow", -] - -[[package]] -name = "toml_writer" -version = "1.1.2+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" - -[[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.119", -] - -[[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-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 = "trybuild" -version = "1.0.120" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e605bf6b39357663d8ba4e984f8be8da8df6bb32e81031d6889024ea8fd68e4" -dependencies = [ - "dissimilar", - "glob", - "serde", - "serde_derive", - "serde_json", - "target-triple", - "termcolor", - "toml", -] - -[[package]] -name = "typeid" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" - -[[package]] -name = "typenum" -version = "1.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" - -[[package]] -name = "unarray" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" - -[[package]] -name = "unicode-ident" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - -[[package]] -name = "unicode-linebreak" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" - -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - -[[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 = "universal-hash" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4987bdc12753382e0bec4a65c50738ffaabc998b9cdd1f952fb5f39b0048a96" -dependencies = [ - "crypto-common", - "ctutils", -] - -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - -[[package]] -name = "valuable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" - -[[package]] -name = "version-ranges" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e9bd4e9c9ff6a2a9b5969462ba26216af3e010df0377dad8320ab515262ef8" -dependencies = [ - "smallvec", -] - -[[package]] -name = "vte" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "231fdcd7ef3037e8330d8e17e61011a2c244126acc0a982f4040ac3f9f0bc077" -dependencies = [ - "memchr", -] - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "wasip2" -version = "1.0.4+wasi-0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" -dependencies = [ - "wit-bindgen", -] - -[[package]] -name = "wasm-bindgen" -version = "0.2.127" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.127" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.127" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" -dependencies = [ - "bumpalo", - "proc-macro2", - "quote", - "syn 2.0.119", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.127" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "wasm-encoder" -version = "0.247.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b6733b8b91d010a6ac5b0fb237dc46a19650bc4c67db66857e2e787d437204" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.247.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "665fe59e56cc9b419ca6fcca56673e3421d1a5011e3b65caf6b726fd9e041d10" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasmparser" -version = "0.247.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6fb4c2bee46c5ea4d40f8cdb5c131725cd976718ec56f1c8e82fbde5fa2a80" -dependencies = [ - "bitflags 2.13.1", - "hashbrown", - "indexmap", - "semver 1.0.28", -] - -[[package]] -name = "winapi-util" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" -dependencies = [ - "windows-sys", -] - -[[package]] -name = "wincode" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfc6339f1ba427bf7ad7c42403b28e524832ba2ddb5eef1bb2cc3b85db6b7b75" -dependencies = [ - "pastey", - "proc-macro2", - "quote", - "thiserror", -] - -[[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-sys" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" -dependencies = [ - "windows-link", -] - -[[package]] -name = "winnow" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" - -[[package]] -name = "wit-bindgen" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" -dependencies = [ - "wit-bindgen-rust-macro", -] - -[[package]] -name = "wit-bindgen-core" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02dee27a2dc20d1008016c742ec9fc6ea498492994ba3750be7454cbc97ff04c" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5007dae772945b7a5003d69d90a3a4a78929d41f19d004e980c4259a6af4484" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn 2.0.119", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af9237d678e3513ad24e96fe98beacdc0db6405284ba2a2400418cf0d42caa89" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn 2.0.119", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.247.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d567162a6b9843080e5e0053f696623ff694bae8ae017c9ec536d1873bbe3d8" -dependencies = [ - "anyhow", - "bitflags 2.13.1", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.247.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ffe4064318cdf3c08cb99343b44c039fcefe61ccdf58aa9975285f13d74d1fc" -dependencies = [ - "anyhow", - "hashbrown", - "id-arena", - "indexmap", - "log", - "semver 1.0.28", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - -[[package]] -name = "wnaf" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab12e7090f27e2ffd9322651492942d50c2926094af30601e1964337db39daf1" -dependencies = [ - "ff", - "group", - "hybrid-array", -] - -[[package]] -name = "x25519-dalek" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7e8131a03190127fb2263afc72b322ecadae46b6ff8c6f399ff5d02f5559af6" -dependencies = [ - "curve25519-dalek", - "rand_core 0.10.1", -] - -[[package]] -name = "zerocopy" -version = "0.8.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "zeroize" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" - -[[package]] -name = "zmij" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/contracts/counter-account/Cargo.toml b/contracts/counter-account/Cargo.toml index 8c025be..abb3503 100644 --- a/contracts/counter-account/Cargo.toml +++ b/contracts/counter-account/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" crate-type = ["cdylib"] [dependencies] -miden = { version = "=0.14.0-rc.1", git = "https://github.com/0xMiden/compiler", rev = "2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" } +miden = { git = "https://github.com/0xMiden/compiler", rev = "5e126fc06d78b2097a7be128f5543cb60817a95e" } [build-dependencies] -miden-sdk-build-script-support = { git = "https://github.com/0xMiden/compiler", rev = "2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" } +miden-sdk-build-script-support = { git = "https://github.com/0xMiden/compiler", rev = "5e126fc06d78b2097a7be128f5543cb60817a95e" } diff --git a/contracts/increment-note/Cargo.lock b/contracts/increment-note/Cargo.lock deleted file mode 100644 index 1532946..0000000 --- a/contracts/increment-note/Cargo.lock +++ /dev/null @@ -1,3175 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "aead" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1973cfbc1a2daf9cf550e74e1f088c28e7f7d8c1e1418fb6c9dc5184b7e84c99" -dependencies = [ - "crypto-common", - "inout", -] - -[[package]] -name = "aho-corasick" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" -dependencies = [ - "memchr", -] - -[[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", -] - -[[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", -] - -[[package]] -name = "anyhow" -version = "1.0.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" - -[[package]] -name = "arrayvec" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" - -[[package]] -name = "autocfg" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" - -[[package]] -name = "base16ct" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6" - -[[package]] -name = "base64ct" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" - -[[package]] -name = "bech32" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32637268377fc7b10a8c6d51de3e7fba1ce5dd371a96e342b34e6078db558e7f" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" - -[[package]] -name = "blake3" -version = "1.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9e454fc11f76977dc803893aff6304ed33d6a26efae8696573bea74baa27ae" -dependencies = [ - "arrayvec", - "cc", - "cfg-if", - "constant_time_eq", - "cpufeatures", -] - -[[package]] -name = "block-buffer" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" -dependencies = [ - "hybrid-array", -] - -[[package]] -name = "bumpalo" -version = "3.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" - -[[package]] -name = "cc" -version = "1.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad534f4357a5264cce5019c989cf66a4f0dc4e0d1b1d15f8aacec0ff7360273" -dependencies = [ - "find-msvc-tools", - "jobserver", - "libc", - "shlex", -] - -[[package]] -name = "cfg-if" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - -[[package]] -name = "chacha20" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", - "rand_core 0.10.1", -] - -[[package]] -name = "chacha20poly1305" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b89e1c441e926b9c82a8d023f6e1b7ae0adcfaa7d621814e4d60789bac751cb" -dependencies = [ - "aead", - "chacha20", - "cipher", - "poly1305", -] - -[[package]] -name = "cipher" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" -dependencies = [ - "block-buffer", - "crypto-common", - "inout", -] - -[[package]] -name = "cmov" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" - -[[package]] -name = "colorchoice" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" - -[[package]] -name = "const-oid" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" - -[[package]] -name = "constant_time_eq" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" - -[[package]] -name = "cpubits" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae" - -[[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.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" - -[[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.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a52aa3fcda4e6302a9f48734f234d35d4721b96f8fe07d073f07ce9df4f0271" -dependencies = [ - "cpubits", - "ctutils", - "hybrid-array", - "num-traits", - "rand_core 0.10.1", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" -dependencies = [ - "hybrid-array", - "rand_core 0.10.1", -] - -[[package]] -name = "ctutils" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" -dependencies = [ - "cmov", - "subtle", -] - -[[package]] -name = "curve25519-dalek" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5eed333089e2e1c1ac8c6c0398e5e2497b4c9926ca6d0365ed1e099afa5bc23" -dependencies = [ - "cfg-if", - "cpufeatures", - "curve25519-dalek-derive", - "digest", - "fiat-crypto", - "rustc_version 0.4.1", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "defmt" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2953bfe4f93bbd20cc71198842756f77d161884c99ebbabc41d80231ded88d1" -dependencies = [ - "bitflags 1.3.2", - "defmt-macros", -] - -[[package]] -name = "defmt-macros" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bad9c72e7ca2137e0dc3813245a0d282fd6daad32fd800af018306a9169b5fe8" -dependencies = [ - "defmt-parser", - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "defmt-parser" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" -dependencies = [ - "thiserror", -] - -[[package]] -name = "der" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69dedd701da44b0536442edf09c81a64b0ab97a7a4a5e3d1971f00027cbc63d" -dependencies = [ - "const-oid", - "zeroize", -] - -[[package]] -name = "derive_more" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" -dependencies = [ - "derive_more-impl", -] - -[[package]] -name = "derive_more-impl" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" -dependencies = [ - "proc-macro2", - "quote", - "rustc_version 0.4.1", - "syn 2.0.119", -] - -[[package]] -name = "digest" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" -dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", - "ctutils", -] - -[[package]] -name = "dissimilar" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aeda16ab4059c5fd2a83f2b9c9e9c981327b18aa8e3b313f7e6563799d4f093e" - -[[package]] -name = "ecdsa" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0681a4fc24c767085329728d8dfba959af91228aa4610cca4f8ce317ba46ae0" -dependencies = [ - "der", - "digest", - "elliptic-curve", - "rfc6979", - "signature", - "spki", - "zeroize", -] - -[[package]] -name = "ed25519" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29fcf32e6c73d1079f83ab4d782de2d81620346a5f38c6237a86a22f8368980a" -dependencies = [ - "pkcs8", - "signature", -] - -[[package]] -name = "ed25519-dalek" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ebaa1a2bf1290ab3bfe5a7b771d050ebffab2711c19a81691c683a5144a25de" -dependencies = [ - "curve25519-dalek", - "ed25519", - "serde", - "sha2", - "signature", - "subtle", - "zeroize", -] - -[[package]] -name = "either" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" - -[[package]] -name = "elliptic-curve" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d65aa39b3a5c1c9c1b745c9a019234bb7a21b77abcb4f4d266d706e2d577d65" -dependencies = [ - "base16ct", - "crypto-bigint", - "crypto-common", - "digest", - "ff", - "group", - "hkdf", - "hybrid-array", - "pkcs8", - "rand_core 0.10.1", - "sec1", - "subtle", - "zeroize", -] - -[[package]] -name = "env_filter" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900d271a03799a1ee8d1ca9b19893b48ca674a9284fefcfb85f05e74ed314217" -dependencies = [ - "log", - "regex", -] - -[[package]] -name = "env_logger" -version = "0.11.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de671bd27a75a797dc9ae289ba1e77276e75e2026408aab65185384e2d5cd3f6" -dependencies = [ - "anstream", - "anstyle", - "env_filter", - "jiff", - "log", -] - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "erased-serde" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" -dependencies = [ - "serde", - "serde_core", - "typeid", -] - -[[package]] -name = "ff" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f686ab92a9fb0eaf188f6c6c87b89490baa6fdb0db4544ba4dc47f7942489f" -dependencies = [ - "rand_core 0.10.1", - "subtle", -] - -[[package]] -name = "fiat-crypto" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" - -[[package]] -name = "find-msvc-tools" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" - -[[package]] -name = "flume" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e139bc46ca777eb5efaf62df0ab8cc5fd400866427e56c68b22e414e53bd3be" -dependencies = [ - "spin 0.9.9", -] - -[[package]] -name = "foldhash" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" - -[[package]] -name = "fs-err" -version = "3.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91aa448ca50d7e79433bdf3ee8d99215430d2ec02ade5aefab2a073a1822e8a" -dependencies = [ - "autocfg", -] - -[[package]] -name = "futures" -version = "0.3.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" - -[[package]] -name = "futures-io" -version = "0.3.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" - -[[package]] -name = "futures-sink" -version = "0.3.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" - -[[package]] -name = "futures-task" -version = "0.3.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" - -[[package]] -name = "futures-util" -version = "0.3.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" -dependencies = [ - "futures-core", - "futures-sink", - "futures-task", - "pin-project-lite", -] - -[[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 = "getrandom" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" -dependencies = [ - "cfg-if", - "libc", - "r-efi 5.3.0", - "wasip2", -] - -[[package]] -name = "getrandom" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "r-efi 6.0.0", - "rand_core 0.10.1", - "wasm-bindgen", -] - -[[package]] -name = "glob" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" - -[[package]] -name = "group" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fd1a1c7a5206c5b7a3f5a0d7ccd3ff85d0c8f5133d62a02680255b0004af5f4" -dependencies = [ - "ff", - "rand_core 0.10.1", - "subtle", -] - -[[package]] -name = "hashbrown" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" -dependencies = [ - "foldhash", -] - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hkdf" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" -dependencies = [ - "hmac", -] - -[[package]] -name = "hmac" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" -dependencies = [ - "digest", -] - -[[package]] -name = "hybrid-array" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707114b52a152fa7bdb290cd7cd5912d9467273b6d74e21b8d81aca1f8533f6b" -dependencies = [ - "subtle", - "typenum", - "zeroize", -] - -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - -[[package]] -name = "increment-note" -version = "0.1.0" -dependencies = [ - "miden", - "miden-sdk-build-script-support", -] - -[[package]] -name = "indenter" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" - -[[package]] -name = "indexmap" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" -dependencies = [ - "equivalent", - "hashbrown", - "serde", - "serde_core", -] - -[[package]] -name = "inout" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" -dependencies = [ - "hybrid-array", -] - -[[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.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b4baf93f58d4425749ca49a51c50ebab072c5df6994d08fed93541c331481dc" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - -[[package]] -name = "jiff" -version = "0.2.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668b7183bd07af9a4885f5c35b0cc5c83c4607a913c16b7e17291832910d2dcc" -dependencies = [ - "defmt", - "jiff-core", - "jiff-static", - "log", - "portable-atomic", - "portable-atomic-util", - "serde_core", -] - -[[package]] -name = "jiff-core" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7feca88439efe53da3754500c1851dedf3cb36c524dd5cf8225cc0794de95d09" -dependencies = [ - "defmt", -] - -[[package]] -name = "jiff-static" -version = "0.2.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a69dcb3a21cfb32ce1cd056169337ca284af0766dd766e7878819b251a49204" -dependencies = [ - "jiff-core", - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "jobserver" -version = "0.1.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" -dependencies = [ - "getrandom 0.4.3", - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" -dependencies = [ - "cfg-if", - "wasm-bindgen", -] - -[[package]] -name = "k256" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f50113171a713f4a4231ef82eb26703607139b35dcb56241f0ceab2ae1f7d8" -dependencies = [ - "cpubits", - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2", - "wnaf", -] - -[[package]] -name = "keccak" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8f198d1db720e4940b5a493201d199d9f24f568f8f746bd13706243a2f71598" -dependencies = [ - "cfg-if", - "cpufeatures", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[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.189" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" - -[[package]] -name = "libm" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" - -[[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.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" - -[[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 = "matchers" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "memchr" -version = "2.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" - -[[package]] -name = "miden" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" -dependencies = [ - "miden-base", - "miden-base-macros", - "miden-base-sys", - "miden-field", - "miden-field-repr", - "miden-sdk-alloc", - "miden-stdlib-sys", - "miden-tx-script-args", - "wit-bindgen", -] - -[[package]] -name = "miden-ace-codegen" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93a217e3f1fec32105bca7dc421d85ab39199b78d2e43081fc0fa92411de9a84" -dependencies = [ - "miden-constraint-compiler", - "miden-core", - "miden-crypto", - "thiserror", -] - -[[package]] -name = "miden-air" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90b7b3a23756f2bfdba2b37c8d1551b3b531fce0de42e3a9a7f840bb69018106" -dependencies = [ - "miden-ace-codegen", - "miden-core", - "miden-crypto", - "miden-utils-indexing", - "p3-field", - "thiserror", - "tracing", -] - -[[package]] -name = "miden-assembly" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727de4350d9ba263be17d9f93dc4b8d0deebabab29c3bed34f32c4af7b1cf20c" -dependencies = [ - "log", - "miden-assembly-syntax", - "miden-core", - "miden-mast-package", - "miden-package-registry", - "miden-project", - "proptest", - "smallvec", - "thiserror", -] - -[[package]] -name = "miden-assembly-syntax" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3874c53f40656a56f74afe8e957d75667218808894ab8f5dbd91e58a8a0c3393" -dependencies = [ - "log", - "miden-assembly-syntax-cst", - "miden-core", - "miden-debug-types", - "miden-utils-diagnostics", - "midenc-hir-type", - "proptest", - "regex", - "rustc_version 0.4.1", - "semver 1.0.28", - "serde", - "smallvec", - "thiserror", -] - -[[package]] -name = "miden-assembly-syntax-cst" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "151b657a50aee75a0591dbd66d57774e2f9ec1f00fa17d773820e736bcca0cb6" -dependencies = [ - "miden-debug-types", - "miden-rowan", - "miden-utils-diagnostics", - "thiserror", -] - -[[package]] -name = "miden-base" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" -dependencies = [ - "miden-base-sys", - "miden-stdlib-sys", -] - -[[package]] -name = "miden-base-macros" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" -dependencies = [ - "heck", - "miden-assembly-syntax", - "miden-debug-types", - "miden-formatting", - "miden-mast-package", - "miden-project", - "miden-protocol", - "midenc-frontend-wasm-metadata", - "proc-macro2", - "quote", - "semver 1.0.28", - "syn 2.0.119", - "toml", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "miden-base-sys" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" -dependencies = [ - "miden-field-repr", - "miden-stdlib-sys", -] - -[[package]] -name = "miden-constraint-compiler" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b95f126188b824423edbbc5eebf9b61c872905c21e3f1e9e9b69d1afbba12288" -dependencies = [ - "miden-core", - "miden-crypto", -] - -[[package]] -name = "miden-core" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55df0c9b5fddcfc2c03c6e476bec0523328fb85090e716d1ab9a4db1d2267c67" -dependencies = [ - "derive_more", - "log", - "miden-crypto", - "miden-debug-types", - "miden-formatting", - "miden-utils-core-derive", - "miden-utils-indexing", - "miden-utils-sync", - "serde", - "thiserror", -] - -[[package]] -name = "miden-core-lib" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1f5b4dca8d29c99859e3470ec1fadfa89506e6b349ade7fa475574e3104db85" -dependencies = [ - "env_logger", - "fs-err", - "miden-assembly", - "miden-assembly-syntax", - "miden-core", - "miden-core-lib-codegen", - "miden-crypto", - "miden-mast-package", - "miden-package-registry", - "miden-precompiles", - "miden-processor", - "miden-utils-sync", - "thiserror", -] - -[[package]] -name = "miden-core-lib-codegen" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d926e5e8a288a2a55c42541059d8e52c43c10d373643b309add169a3a0eb914" -dependencies = [ - "miden-core", - "miden-precompiles", -] - -[[package]] -name = "miden-crypto" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de00899e7045ee3bea78d4c4c690d8e2c14fff1f3a1ede1fb2922ed699fdda14" -dependencies = [ - "blake3", - "cc", - "chacha20poly1305", - "curve25519-dalek", - "der", - "ed25519-dalek", - "flume", - "hkdf", - "k256", - "miden-crypto-derive", - "miden-field", - "miden-lifted-stark", - "miden-serde-utils", - "num", - "num-complex", - "once_cell", - "p3-blake3", - "p3-challenger", - "p3-dft", - "p3-goldilocks", - "p3-keccak", - "p3-matrix", - "p3-maybe-rayon", - "p3-symmetric", - "p3-util", - "rand 0.10.2", - "rand_chacha 0.10.0", - "serde", - "sha2", - "sha3", - "subtle", - "thiserror", - "x25519-dalek", -] - -[[package]] -name = "miden-crypto-derive" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5b5a5c8b0fd14982e60ebd010f452b06f693b9efa116054487aff1f2657d2f4" -dependencies = [ - "quote", - "syn 2.0.119", -] - -[[package]] -name = "miden-debug-types" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793b37eaafbac33a4c8bf8f57d4c1d0ce8b8a7d25698ddfd2e1a2a6552e94f6c" -dependencies = [ - "memchr", - "miden-crypto", - "miden-formatting", - "miden-miette", - "miden-utils-indexing", - "miden-utils-sync", - "paste", - "proptest", - "serde", - "serde_spanned", - "thiserror", - "zerocopy", -] - -[[package]] -name = "miden-field" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41be9f7f5c0ef020bcedf526afe54b3a97244e207a5385e4453ca47799fe2afe" -dependencies = [ - "miden-serde-utils", - "num-bigint 0.5.1", - "p3-challenger", - "p3-field", - "p3-goldilocks", - "p3-util", - "paste", - "rand 0.10.2", - "serde", - "subtle", - "thiserror", -] - -[[package]] -name = "miden-field-repr" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" -dependencies = [ - "miden-field", - "miden-field-repr-derive", -] - -[[package]] -name = "miden-field-repr-derive" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "miden-formatting" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e392e0a8c34b32671012b439de35fa8987bf14f0f8aac279b97f8b8cc6e263b" -dependencies = [ - "unicode-width 0.1.14", -] - -[[package]] -name = "miden-lifted-air" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0ad52f76750f8b9dc8a7c4bed32644628198fab48daf31167c2f750c939378a" -dependencies = [ - "p3-air", - "p3-challenger", - "p3-field", - "p3-matrix", - "p3-util", - "thiserror", -] - -[[package]] -name = "miden-lifted-stark" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212a017744ef2aaca36f89bad2c880949311ec778586b8405a5e47f9e6ca59de" -dependencies = [ - "miden-lifted-air", - "miden-stark-transcript", - "miden-stateful-hasher", - "p3-challenger", - "p3-dft", - "p3-field", - "p3-goldilocks", - "p3-matrix", - "p3-maybe-rayon", - "p3-symmetric", - "p3-util", - "rand 0.10.2", - "serde", - "thiserror", - "tracing", -] - -[[package]] -name = "miden-mast-package" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26062f2e4cb18e7fa9244f8b18fe2adea2bfe3f016431f75f80b5b98249c34f6" -dependencies = [ - "hashbrown", - "log", - "miden-assembly-syntax", - "miden-core", - "miden-debug-types", - "miden-utils-indexing", - "rustc-hash", - "serde", - "thiserror", - "zerocopy", -] - -[[package]] -name = "miden-miette" -version = "8.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eef536978f24a179d94fa2a41e4f92b28e7d8aab14b8d23df28ad2a3d7098b20" -dependencies = [ - "cfg-if", - "futures", - "indenter", - "lazy_static", - "miden-miette-derive", - "owo-colors", - "regex", - "rustc_version 0.2.3", - "rustversion", - "serde_json", - "spin 0.9.9", - "strip-ansi-escapes", - "syn 2.0.119", - "textwrap", - "thiserror", - "trybuild", - "unicode-width 0.1.14", -] - -[[package]] -name = "miden-miette-derive" -version = "8.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86a905f3ea65634dd4d1041a4f0fd0a3e77aa4118341d265af1a94339182222f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "miden-package-registry" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8653a8792d81ec1807815e5735de98d9d928f89b7bb5280ffadb848e87eb3ed3" -dependencies = [ - "miden-assembly-syntax", - "miden-core", - "miden-mast-package", - "proptest", - "pubgrub", - "serde", - "smallvec", - "thiserror", -] - -[[package]] -name = "miden-precompiles" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d01b98147f622a733c9c206db9e78c7e1a353b2309e34e569e2757a435a77e0" -dependencies = [ - "miden-core", - "miden-crypto", -] - -[[package]] -name = "miden-precompiles-prover" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed0d94d331324d6b378f19ee925a6be6e17731e108d43f034c23653048a8ca0" -dependencies = [ - "miden-air", - "miden-core", - "miden-crypto", - "miden-lifted-air", - "miden-lifted-stark", - "miden-precompiles", - "miden-serde-utils", - "ruint", - "serde", - "serde-wincode", - "thiserror", - "tracing", - "wincode", -] - -[[package]] -name = "miden-processor" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b3f6dbcea246715c7c528bbc2fbee46464493c11ac417c12c9562a229b136f" -dependencies = [ - "hashbrown", - "itertools", - "miden-air", - "miden-core", - "miden-debug-types", - "miden-mast-package", - "miden-precompiles", - "miden-utils-diagnostics", - "miden-utils-indexing", - "paste", - "rayon", - "thiserror", - "tracing", -] - -[[package]] -name = "miden-project" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e02ac82735cd86ea17fcf8614496ce7e462f3e80dbc1113bf821e8197dcda49d" -dependencies = [ - "miden-assembly-syntax", - "miden-core", - "miden-mast-package", - "miden-package-registry", - "proptest", - "serde", - "serde-untagged", - "thiserror", - "toml", -] - -[[package]] -name = "miden-protocol" -version = "0.16.0-rc.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e275feebbe9c2458c5877c5f2a03b8e2152831ce956376f015fc4c50acfffb50" -dependencies = [ - "bech32", - "fs-err", - "getrandom 0.4.3", - "miden-assembly", - "miden-assembly-syntax", - "miden-core", - "miden-core-lib", - "miden-crypto", - "miden-crypto-derive", - "miden-mast-package", - "miden-package-registry", - "miden-processor", - "miden-protocol-build-utils", - "miden-utils-sync", - "miden-verifier", - "rand 0.10.2", - "regex", - "semver 1.0.28", - "thiserror", -] - -[[package]] -name = "miden-protocol-build-utils" -version = "0.16.0-rc.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a35f63db32f2e7ea9fc47abf17023aa509beadd77b6dffc4efff385eef4634b" -dependencies = [ - "fs-err", - "miden-assembly", - "miden-core", - "miden-mast-package", - "miden-package-registry", - "miden-project", - "regex", - "walkdir", -] - -[[package]] -name = "miden-rowan" -version = "0.16.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c13695bf99aabaa21d6572b807c66bb26251aa3d9b75e828b3c99b97a3b1ce7e" -dependencies = [ - "hashbrown", - "rustc-hash", -] - -[[package]] -name = "miden-sdk-alloc" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" - -[[package]] -name = "miden-sdk-build-script-support" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" - -[[package]] -name = "miden-serde-utils" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa5e67d63441ddaec820a7cf0cabefa8312c15db7a1f2b108ce1b3f589eeeb23" -dependencies = [ - "p3-field", - "p3-goldilocks", - "wincode", -] - -[[package]] -name = "miden-stark-transcript" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ebdd546c7583ba045b20afdde9986e42e7070d1f5fb8841e13f3c921110873" -dependencies = [ - "p3-challenger", - "p3-field", - "serde", - "thiserror", -] - -[[package]] -name = "miden-stateful-hasher" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b47d09c4dbfa32918847a4d6426a69d3d527adbf4e01cf1decf714c95b1bf894" -dependencies = [ - "p3-field", - "p3-symmetric", -] - -[[package]] -name = "miden-stdlib-sys" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" -dependencies = [ - "miden-field", -] - -[[package]] -name = "miden-tx-script-args" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" -dependencies = [ - "miden-field", - "miden-field-repr", - "miden-stdlib-sys", -] - -[[package]] -name = "miden-utils-core-derive" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5764abe966b8c0e7cf377e38de4cbcbbc83a3483f111043c461b7208619bdb96" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "miden-utils-diagnostics" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10561ffd67ee21baca489b96fad11e11579573e1f07f1fc5fb8a111d196fea59" -dependencies = [ - "miden-debug-types", - "miden-miette", - "tracing", -] - -[[package]] -name = "miden-utils-indexing" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c18e4f69d5ebe556a72cc9da474acc53eceb4a75c1247b1f542f20f73145deb" -dependencies = [ - "miden-serde-utils", - "proptest", - "serde", - "thiserror", -] - -[[package]] -name = "miden-utils-sync" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa9c0af7dab7842819c02ef386ed1640884db5c2efa32d30da7d4739548f70e" -dependencies = [ - "lock_api", - "loom", - "once_cell", - "parking_lot", -] - -[[package]] -name = "miden-verifier" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900c0473191ecbe2328e3d6550571f0b1ab42d1417f43c1d98a50cafc3ae4ff1" -dependencies = [ - "miden-air", - "miden-core", - "miden-crypto", - "miden-precompiles", - "miden-precompiles-prover", - "miden-serde-utils", - "serde", - "serde-wincode", - "thiserror", -] - -[[package]] -name = "midenc-frontend-wasm-metadata" -version = "0.14.0-rc.1" -source = "git+https://github.com/0xMiden/compiler?rev=2a5ebf830c910aa5f7bf53ee4df398915ab12f7a#2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" -dependencies = [ - "miden-mast-package", - "serde", - "serde_json", -] - -[[package]] -name = "midenc-hir-type" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f72909a4bae8dca4bbd34c28dcbcdff595afc47e48c312a683108f7452bd270b" -dependencies = [ - "miden-formatting", - "miden-serde-utils", - "serde", - "serde_repr", - "smallvec", - "thiserror", -] - -[[package]] -name = "nu-ansi-term" -version = "0.50.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" -dependencies = [ - "windows-sys", -] - -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint 0.4.8", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93e7820bc0a80a0238e650327316f929ba18d5be054b647490a3a6a339f3e7c0" -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-integer" -version = "0.1.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92800bd69a1eac91786bcfe9da64a897eb72911b8dc3095decbd07429e8048b" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint 0.4.8", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "once_cell" -version = "1.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" -dependencies = [ - "critical-section", - "portable-atomic", -] - -[[package]] -name = "once_cell_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" - -[[package]] -name = "owo-colors" -version = "4.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d211803b9b6b570f68772237e415a029d5a50c65d382910b879fb19d3271f94d" - -[[package]] -name = "p3-air" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddb1be05c0d6f691afe0c9f468018a9a37cfa904dee78a8081ec96eb3cdd88e8" -dependencies = [ - "p3-field", - "p3-matrix", - "tracing", -] - -[[package]] -name = "p3-blake3" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f202f5fbcceb6f56f783d98efb5de27e5a171470e3364de97b0923b39c87ab5" -dependencies = [ - "blake3", - "p3-symmetric", - "p3-util", -] - -[[package]] -name = "p3-challenger" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d5d5e1ecf2c80b09b48ce870e8abd08b643454101c5dc9d0fd71bfbd78224d" -dependencies = [ - "p3-field", - "p3-maybe-rayon", - "p3-monty-31", - "p3-symmetric", - "p3-util", - "tracing", -] - -[[package]] -name = "p3-dft" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4321a952da2721ecd85ca593ea189798dfb4e439a2cc1378ce1442091880f173" -dependencies = [ - "itertools", - "p3-field", - "p3-matrix", - "p3-maybe-rayon", - "p3-util", - "spin 0.12.3", - "tracing", -] - -[[package]] -name = "p3-field" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53db75d38e04fc255826f388eca9d05976733dc9754aa3db411bc9ea1a37c1a0" -dependencies = [ - "itertools", - "num-bigint 0.5.1", - "p3-maybe-rayon", - "p3-util", - "paste", - "rand 0.10.2", - "serde", - "tracing", -] - -[[package]] -name = "p3-goldilocks" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d03b3f31080df31be723b876709246f8f1e532e1c5b82efb5281d705c8304c63" -dependencies = [ - "num-bigint 0.5.1", - "p3-challenger", - "p3-dft", - "p3-field", - "p3-mds", - "p3-poseidon1", - "p3-poseidon2", - "p3-symmetric", - "p3-util", - "paste", - "rand 0.10.2", - "serde", - "spin 0.12.3", -] - -[[package]] -name = "p3-keccak" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae50c8c37eb847c660298fb275e53c025c49b2623a8cfabf67f5322258b2b4db" -dependencies = [ - "p3-symmetric", - "p3-util", - "tiny-keccak", -] - -[[package]] -name = "p3-matrix" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "473eb920c446a6f4536e0d3528fbdca2a23c0e24e1d0d7767452e6d385dd335c" -dependencies = [ - "itertools", - "p3-field", - "p3-maybe-rayon", - "p3-util", - "rand 0.10.2", - "serde", - "tracing", -] - -[[package]] -name = "p3-maybe-rayon" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6fddfd435f96394769414cf5590b77058aa506659bf20d6592e9d1989e04440" - -[[package]] -name = "p3-mds" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "551ba0ab2cccd89f85a99450224898aff224e323bbf61f777ba6344f0896ef10" -dependencies = [ - "p3-dft", - "p3-field", - "p3-symmetric", - "p3-util", - "rand 0.10.2", -] - -[[package]] -name = "p3-monty-31" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "871f635f7340cd0868b17e43e0c98fefdafdaed90469d0725caf6d8372a2a47c" -dependencies = [ - "itertools", - "num-bigint 0.5.1", - "p3-dft", - "p3-field", - "p3-matrix", - "p3-maybe-rayon", - "p3-mds", - "p3-poseidon1", - "p3-poseidon2", - "p3-symmetric", - "p3-util", - "paste", - "rand 0.10.2", - "serde", - "spin 0.12.3", - "tracing", -] - -[[package]] -name = "p3-poseidon1" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d0d304e9a1f29c0d66534aa84e69528e2118351fdce08dcf5898af4e0fecc32" -dependencies = [ - "p3-field", - "p3-mds", - "p3-symmetric", - "rand 0.10.2", -] - -[[package]] -name = "p3-poseidon2" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43eb8a73a26d14becaed1c67c3e8a047e4311d7909b402383c82ca9643ba17c6" -dependencies = [ - "p3-field", - "p3-mds", - "p3-symmetric", - "p3-util", - "rand 0.10.2", -] - -[[package]] -name = "p3-symmetric" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2015ea80cad969b6aabf27a04884286fe1354393b166d968ee0d80a95126b2a4" -dependencies = [ - "itertools", - "p3-field", - "p3-util", - "serde", -] - -[[package]] -name = "p3-util" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5466fc40e6df89d3b291a2eff16b33e68e8571207790370137ec18090aadab" -dependencies = [ - "serde", -] - -[[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 = "pastey" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ee67f1008b1ba2321834326597b8e186293b049a023cdef258527550b9935b4" - -[[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.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "poly1305" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e2d0073b297041425c7c3df6eb4792d598a15323fe63346852b092eca02904c" -dependencies = [ - "cpufeatures", - "universal-hash", -] - -[[package]] -name = "portable-atomic" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" - -[[package]] -name = "portable-atomic-util" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" -dependencies = [ - "portable-atomic", -] - -[[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.119", -] - -[[package]] -name = "primefield" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c555a6e4eb7d4e158fcb028c835c3b8642206ddc279b5c6b202ef9a8bdb592f4" -dependencies = [ - "crypto-bigint", - "crypto-common", - "ff", - "rand_core 0.10.1", - "subtle", - "zeroize", -] - -[[package]] -name = "primeorder" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c9f42978c78a00e3d68f69fc03e57a234debae69da4020a4fb588fcdcd07b06" -dependencies = [ - "elliptic-curve", - "primefield", - "serdect", - "wnaf", -] - -[[package]] -name = "priority-queue" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93980406f12d9f8140ed5abe7155acb10bb1e69ea55c88960b9c2f117445ef96" -dependencies = [ - "equivalent", - "indexmap", - "serde", -] - -[[package]] -name = "proc-macro2" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "proptest" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" -dependencies = [ - "bitflags 2.13.1", - "num-traits", - "rand 0.9.5", - "rand_chacha 0.9.0", - "rand_xorshift", - "regex-syntax", - "unarray", -] - -[[package]] -name = "pubgrub" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f5df7e552bc7edd075f5783a87fbfc21d6a546e32c16985679c488c18192d83" -dependencies = [ - "indexmap", - "log", - "priority-queue", - "rustc-hash", - "thiserror", - "version-ranges", -] - -[[package]] -name = "quote" -version = "1.0.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" -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 = "rand" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" -dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.5", -] - -[[package]] -name = "rand" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" -dependencies = [ - "chacha20", - "getrandom 0.4.3", - "rand_core 0.10.1", -] - -[[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_chacha" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e6af7f3e25ded52c41df4e0b1af2d047e45896c2f3281792ed68a1c243daedb" -dependencies = [ - "ppv-lite86", - "rand_core 0.10.1", -] - -[[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 = "rand_core" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" - -[[package]] -name = "rand_xorshift" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" -dependencies = [ - "rand_core 0.9.5", -] - -[[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 2.13.1", -] - -[[package]] -name = "regex" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" - -[[package]] -name = "rfc6979" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4a459cddafb3fe76b31fd8f1108007566c40301feb64dc7b54656eb7388172b" -dependencies = [ - "crypto-bigint", - "hmac", -] - -[[package]] -name = "ruint" -version = "1.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e99bff0393163bb25029a6af25d3d8d202ba5b5438a74d1bd8789f5c822970" -dependencies = [ - "ruint-macro", -] - -[[package]] -name = "ruint-macro" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" - -[[package]] -name = "rustc-hash" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver 1.0.28", -] - -[[package]] -name = "rustversion" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "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 = "sec1" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d" -dependencies = [ - "base16ct", - "ctutils", - "der", - "hybrid-array", - "subtle", - "zeroize", -] - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" -dependencies = [ - "serde", - "serde_core", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - -[[package]] -name = "serde" -version = "1.0.229" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" -dependencies = [ - "serde_core", - "serde_derive", -] - -[[package]] -name = "serde-untagged" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" -dependencies = [ - "erased-serde", - "serde", - "serde_core", - "typeid", -] - -[[package]] -name = "serde-wincode" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aa9d3a86c66cf10ce79df36f555a5a4c8d72a82515d9ea8ca420e02c925c30f" -dependencies = [ - "serde", - "thiserror", - "wincode", -] - -[[package]] -name = "serde_core" -version = "1.0.229" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.229" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" -dependencies = [ - "proc-macro2", - "quote", - "syn 3.0.4", -] - -[[package]] -name = "serde_json" -version = "1.0.151" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", -] - -[[package]] -name = "serde_repr" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" -dependencies = [ - "proc-macro2", - "quote", - "syn 3.0.4", -] - -[[package]] -name = "serde_spanned" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" -dependencies = [ - "serde_core", -] - -[[package]] -name = "serdect" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66cf8fedced2fcf12406bcb34223dffb92eaf34908ede12fed414c82b7f00b3e" -dependencies = [ - "base16ct", - "serde", -] - -[[package]] -name = "sha2" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha3" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9bad02c26382724b2d2692c6f179285e4b54eeecd7968f52a50059c3c11759" -dependencies = [ - "digest", - "keccak", - "sponge-cursor", -] - -[[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 = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" - -[[package]] -name = "signature" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5" -dependencies = [ - "digest", - "rand_core 0.10.1", -] - -[[package]] -name = "smallvec" -version = "1.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" -dependencies = [ - "serde", -] - -[[package]] -name = "smawk" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8e2fb0f499abb4d162f2bedad68f5ef91a1682b5a03596ddb67efd37768d100" - -[[package]] -name = "spin" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" -dependencies = [ - "lock_api", -] - -[[package]] -name = "spin" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0134f9043ed38b087ac4f7d4af44c79e2c9e5094421fe3164f435ce585953b10" -dependencies = [ - "lock_api", -] - -[[package]] -name = "spki" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d9efca8738c78ee9484207732f728b1ef517bbb1833d6fc0879ca898a522f6f" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "sponge-cursor" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a0219bd7d979d58245a4f41f695e1ac9f8befdffadd7f61f1bae9e39abc6620" - -[[package]] -name = "strip-ansi-escapes" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a8f8038e7e7969abb3f1b7c2a811225e9296da208539e0f79c5251d6cac0025" -dependencies = [ - "vte", -] - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[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.119" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "target-triple" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a6bfce3d99adfa72d24750a61f782f3036a81e7f86d8841ee1326deaebd171" - -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "textwrap" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" -dependencies = [ - "smawk", - "unicode-linebreak", - "unicode-width 0.2.2", -] - -[[package]] -name = "thiserror" -version = "2.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" -dependencies = [ - "proc-macro2", - "quote", - "syn 3.0.4", -] - -[[package]] -name = "thread_local" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - -[[package]] -name = "toml" -version = "1.1.4+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5" -dependencies = [ - "indexmap", - "serde_core", - "serde_spanned", - "toml_datetime", - "toml_parser", - "toml_writer", - "winnow", -] - -[[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_parser" -version = "1.1.3+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" -dependencies = [ - "winnow", -] - -[[package]] -name = "toml_writer" -version = "1.1.2+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" - -[[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.119", -] - -[[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-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 = "trybuild" -version = "1.0.120" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e605bf6b39357663d8ba4e984f8be8da8df6bb32e81031d6889024ea8fd68e4" -dependencies = [ - "dissimilar", - "glob", - "serde", - "serde_derive", - "serde_json", - "target-triple", - "termcolor", - "toml", -] - -[[package]] -name = "typeid" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" - -[[package]] -name = "typenum" -version = "1.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" - -[[package]] -name = "unarray" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" - -[[package]] -name = "unicode-ident" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - -[[package]] -name = "unicode-linebreak" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" - -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - -[[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 = "universal-hash" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4987bdc12753382e0bec4a65c50738ffaabc998b9cdd1f952fb5f39b0048a96" -dependencies = [ - "crypto-common", - "ctutils", -] - -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - -[[package]] -name = "valuable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" - -[[package]] -name = "version-ranges" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e9bd4e9c9ff6a2a9b5969462ba26216af3e010df0377dad8320ab515262ef8" -dependencies = [ - "smallvec", -] - -[[package]] -name = "vte" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "231fdcd7ef3037e8330d8e17e61011a2c244126acc0a982f4040ac3f9f0bc077" -dependencies = [ - "memchr", -] - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "wasip2" -version = "1.0.4+wasi-0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" -dependencies = [ - "wit-bindgen", -] - -[[package]] -name = "wasm-bindgen" -version = "0.2.127" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.127" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.127" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" -dependencies = [ - "bumpalo", - "proc-macro2", - "quote", - "syn 2.0.119", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.127" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "wasm-encoder" -version = "0.247.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b6733b8b91d010a6ac5b0fb237dc46a19650bc4c67db66857e2e787d437204" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.247.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "665fe59e56cc9b419ca6fcca56673e3421d1a5011e3b65caf6b726fd9e041d10" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasmparser" -version = "0.247.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6fb4c2bee46c5ea4d40f8cdb5c131725cd976718ec56f1c8e82fbde5fa2a80" -dependencies = [ - "bitflags 2.13.1", - "hashbrown", - "indexmap", - "semver 1.0.28", -] - -[[package]] -name = "winapi-util" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" -dependencies = [ - "windows-sys", -] - -[[package]] -name = "wincode" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfc6339f1ba427bf7ad7c42403b28e524832ba2ddb5eef1bb2cc3b85db6b7b75" -dependencies = [ - "pastey", - "proc-macro2", - "quote", - "thiserror", -] - -[[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-sys" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" -dependencies = [ - "windows-link", -] - -[[package]] -name = "winnow" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" - -[[package]] -name = "wit-bindgen" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" -dependencies = [ - "wit-bindgen-rust-macro", -] - -[[package]] -name = "wit-bindgen-core" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02dee27a2dc20d1008016c742ec9fc6ea498492994ba3750be7454cbc97ff04c" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5007dae772945b7a5003d69d90a3a4a78929d41f19d004e980c4259a6af4484" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn 2.0.119", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af9237d678e3513ad24e96fe98beacdc0db6405284ba2a2400418cf0d42caa89" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn 2.0.119", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.247.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d567162a6b9843080e5e0053f696623ff694bae8ae017c9ec536d1873bbe3d8" -dependencies = [ - "anyhow", - "bitflags 2.13.1", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.247.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ffe4064318cdf3c08cb99343b44c039fcefe61ccdf58aa9975285f13d74d1fc" -dependencies = [ - "anyhow", - "hashbrown", - "id-arena", - "indexmap", - "log", - "semver 1.0.28", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - -[[package]] -name = "wnaf" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab12e7090f27e2ffd9322651492942d50c2926094af30601e1964337db39daf1" -dependencies = [ - "ff", - "group", - "hybrid-array", -] - -[[package]] -name = "x25519-dalek" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7e8131a03190127fb2263afc72b322ecadae46b6ff8c6f399ff5d02f5559af6" -dependencies = [ - "curve25519-dalek", - "rand_core 0.10.1", -] - -[[package]] -name = "zerocopy" -version = "0.8.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "zeroize" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" - -[[package]] -name = "zmij" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/contracts/increment-note/Cargo.toml b/contracts/increment-note/Cargo.toml index 38fd06b..cb4f61b 100644 --- a/contracts/increment-note/Cargo.toml +++ b/contracts/increment-note/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" crate-type = ["cdylib"] [dependencies] -miden = { version = "=0.14.0-rc.1", git = "https://github.com/0xMiden/compiler", rev = "2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" } +miden = { git = "https://github.com/0xMiden/compiler", rev = "5e126fc06d78b2097a7be128f5543cb60817a95e" } [build-dependencies] -miden-sdk-build-script-support = { git = "https://github.com/0xMiden/compiler", rev = "2a5ebf830c910aa5f7bf53ee4df398915ab12f7a" } +miden-sdk-build-script-support = { git = "https://github.com/0xMiden/compiler", rev = "5e126fc06d78b2097a7be128f5543cb60817a95e" } diff --git a/integration/Cargo.toml b/integration/Cargo.toml index 0411222..9402f90 100644 --- a/integration/Cargo.toml +++ b/integration/Cargo.toml @@ -4,12 +4,11 @@ version = "0.1.0" edition.workspace = true [dependencies] -miden-client = { version = "0.16.0-rc.2", features = ["tonic"] } -miden-client-sqlite-store = { version = "0.16.0-rc.2", package = "miden-client-sqlite-store" } -miden-protocol = "0.16.0-rc.6" -miden-standards = { version = "0.16.0-rc.6", features = ["testing"] } -miden-testing = "0.16.0-rc.6" -miden-mast-package = { version = "0.29.1", default-features = false } +miden-client = { version = "0.16.0-rc.1", features = ["tonic"] } +miden-client-sqlite-store = { version = "0.16.0-rc.1", package = "miden-client-sqlite-store" } +miden-standards = { version = "0.16.0-rc.4", features = ["testing"] } +miden-testing = "0.16.0-rc.4" +miden-mast-package = { version = "0.29", default-features = false } tokio = { version = "1.48", features = ["rt-multi-thread", "net", "macros", "fs"] } rand = { version = "0.10" } anyhow = "1.0" diff --git a/integration/src/helpers.rs b/integration/src/helpers.rs index 662b958..3d700c8 100644 --- a/integration/src/helpers.rs +++ b/integration/src/helpers.rs @@ -1,24 +1,19 @@ //! Common helper functions for scripts and tests -use std::{ - env, - path::{Path, PathBuf}, - process::Command, - sync::Arc, -}; +use std::{path::Path, sync::Arc}; -use anyhow::{bail, Context, Result}; +use anyhow::{Context, Result, anyhow, bail}; use miden_client::{ + Client, Felt, Word, account::{ - component::{BasicWallet, InitStorageData, NoAuth}, Account, AccountBuilder, AccountComponent, AccountType, StorageSlotName, + component::{BasicWallet, InitStorageData, NoAuth}, }, - auth::{Approver, AuthSchemeId, AuthSecretKey, AuthSingleSig}, + auth::{AuthSecretKey, AuthSingleSig}, builder::ClientBuilder, keystore::{FilesystemKeyStore, Keystore}, - rpc::Endpoint, + rpc::{Endpoint, GrpcClient}, utils::Deserializable, - Client, Felt, Word, }; use miden_client_sqlite_store::ClientBuilderSqliteExt; use miden_mast_package::Package; @@ -42,8 +37,9 @@ pub struct ClientSetup { /// or client building fails pub async fn setup_client() -> Result { // Initialize RPC connection - let endpoint = Endpoint::devnet(); + let endpoint = Endpoint::testnet(); let timeout_ms = 10_000; + let rpc_client = Arc::new(GrpcClient::new(&endpoint, timeout_ms)); // Initialize keystore let keystore_path = std::path::PathBuf::from("../keystore"); @@ -54,7 +50,7 @@ pub async fn setup_client() -> Result { let store_path = std::path::PathBuf::from("../store.sqlite3"); let client = ClientBuilder::new() - .grpc_client(&endpoint, Some(timeout_ms)) + .rpc(rpc_client) .sqlite_store(store_path) .authenticator(keystore.clone()) .build() @@ -76,113 +72,27 @@ pub async fn setup_client() -> Result { /// # Errors /// Returns an error if compilation fails or if the output is not in the expected format pub fn build_project_in_dir(dir: &Path, release: bool) -> Result { - const EXPECTED_CARGO_MIDEN_VERSION: &str = "cargo-miden 0.10.0-rc.1"; - - let cargo_home = env::var_os("CARGO_HOME") - .map(PathBuf::from) - .or_else(|| env::var_os("HOME").map(|home| PathBuf::from(home).join(".cargo"))) - .context("CARGO_HOME and HOME are both unset; cannot locate the v0.16 compiler")?; - let cargo_miden = cargo_home - .join("miden-v16-0.10.0-rc.1") - .join("bin") - .join("cargo-miden"); - - if !cargo_miden.is_absolute() { - bail!( - "v0.16 cargo-miden path is not absolute: {}", - cargo_miden.display() - ); - } - if !cargo_miden.is_file() { - bail!( - "required v0.16 cargo-miden executable does not exist at {}", - cargo_miden.display() - ); - } - - let version_output = Command::new(&cargo_miden) - .args(["miden", "--version"]) - .output() - .with_context(|| { - format!( - "Failed to execute v0.16 compiler at {}", - cargo_miden.display() - ) - })?; - let version_stdout = String::from_utf8(version_output.stdout) - .context("cargo-miden version output was not valid UTF-8")?; - let version_stdout = version_stdout.trim_end_matches(['\r', '\n']); - let version_stderr = String::from_utf8_lossy(&version_output.stderr); - if !version_output.status.success() - || version_stdout != EXPECTED_CARGO_MIDEN_VERSION - || !version_stderr.is_empty() - { - bail!( - "compiler at {} reported stdout {:?}, stderr {:?}, and status {}; expected exactly {:?}", - cargo_miden.display(), - version_stdout, - version_stderr, - version_output.status, - EXPECTED_CARGO_MIDEN_VERSION - ); - } - let profile = if release { "--release" } else { "--debug" }; - let project_dir = dir - .canonicalize() - .with_context(|| format!("Failed to resolve project directory {}", dir.display()))?; - let manifest_path = project_dir.join("Cargo.toml"); - - let output = Command::new(&cargo_miden) - .args(["miden", "build", profile, "--manifest-path"]) - .arg(&manifest_path) - .env("CARGO_MIDEN", &cargo_miden) - .current_dir(&project_dir) - .output() - .context("Failed to compile project")?; - - let stdout = String::from_utf8_lossy(&output.stdout); - let stderr = String::from_utf8_lossy(&output.stderr); - if !output.status.success() { - bail!( - "Failed to compile project {} (status {}):\nstdout:\n{}\nstderr:\n{}", - project_dir.display(), - output.status, - stdout, - stderr - ); + let profile_name = if release { "release" } else { "debug" }; + let manifest_path = dir.join("Cargo.toml"); + let artifact_path = dir.join("target").join("miden").join(profile_name).join("out.masp"); + + let args = vec![ + profile.to_string(), + "-o".to_string(), + artifact_path.display().to_string(), + "--manifest-path".to_string(), + manifest_path.display().to_string(), + ]; + + let status = miden_build(args).context("Failed to compile project")?; + + if !status.success() { + bail!("Failed to compile project package. See output for details."); } - let artifact_reports = stdout - .lines() - .chain(stderr.lines()) - .filter_map(|line| line.trim().strip_prefix("Compiled ")) - .collect::>(); - let [artifact_report] = artifact_reports.as_slice() else { - bail!( - "cargo-miden must report exactly one compiled artifact, but reported {}:\nstdout:\n{}\nstderr:\n{}", - artifact_reports.len(), - stdout, - stderr - ); - }; - let artifact_path = PathBuf::from(artifact_report); - let artifact_path = if artifact_path.is_absolute() { - artifact_path - } else { - project_dir.join(artifact_path) - }; - if !artifact_path.is_file() { - bail!( - "cargo-miden reported an artifact that is not a regular file: {}", - artifact_path.display() - ); - } - - let package_bytes = std::fs::read(&artifact_path).context(format!( - "Failed to read compiled package from {}", - artifact_path.display() - ))?; + let package_bytes = std::fs::read(&artifact_path) + .context(format!("Failed to read compiled package from {}", artifact_path.display()))?; Package::read_from_bytes(&package_bytes).context("Failed to deserialize package from bytes") } @@ -201,7 +111,7 @@ pub fn counter_storage_slot() -> Result { /// Configuration for creating an account with a custom component pub struct AccountCreationConfig { - /// The account type to create. This also encodes the + /// The account type to create. The account type also encodes the /// storage visibility (`AccountType::Public` / `AccountType::Private`). pub account_type: AccountType, /// Initial component storage data keyed by storage slot schema. @@ -282,15 +192,10 @@ pub async fn create_basic_wallet_account( let builder = AccountBuilder::new(init_seed) .account_type(config.account_type) - .with_component(AuthSingleSig::new(Approver::new( - key_pair.public_key().to_commitment(), - AuthSchemeId::Falcon512Poseidon2, - ))) + .with_component(AuthSingleSig::from_public_key(key_pair.public_key())) .with_component(BasicWallet); - let account = builder - .build() - .context("Failed to build basic wallet account")?; + let account = builder.build().context("Failed to build basic wallet account")?; client .add_account(&account, false) @@ -304,3 +209,28 @@ pub async fn create_basic_wallet_account( Ok(account) } + +fn miden_build(args: impl IntoIterator) -> anyhow::Result { + let mut cmd = match std::env::var_os("CARGO_MIDEN") { + Some(cargo_miden) => { + // The `cargo-miden` binary expects the `miden` subcommand token, + // the same as when cargo invokes it as `cargo miden`. + let mut cmd = std::process::Command::new(cargo_miden); + cmd.arg("miden"); + cmd + } + None if std::env::var_os("MIDENUP_HOME").is_some() => { + std::process::Command::new("miden") + } + None => { + let mut cmd = std::process::Command::new("cargo"); + cmd.arg("miden"); + cmd + } + }; + cmd.arg("build").args(args); + + let mut child = cmd.spawn().map_err(|err| anyhow!("Failed to spawn build command: {err}"))?; + + child.wait().map_err(|err| anyhow!("Build command failed: {err}")) +} diff --git a/integration/tests/counter_test.rs b/integration/tests/counter_test.rs index 5538d4f..990a47c 100644 --- a/integration/tests/counter_test.rs +++ b/integration/tests/counter_test.rs @@ -68,14 +68,14 @@ async fn counter_test() -> anyhow::Result<()> { // Build the mock chain let mut mock_chain = builder.build()?; - // Build the transaction context - let tx_context = mock_chain + // Build the mock transaction + let transaction = mock_chain .build_transaction(counter_account.clone()) - .authenticated_input_notes([counter_note.id()]) + .authenticated_input_note(counter_note.id()) .build()?; // Execute the transaction - let executed_transaction = tx_context.execute().await?; + let executed_transaction = transaction.execute().await?; // Add the executed transaction to the mockchain mock_chain.add_pending_executed_transaction(&executed_transaction)?; @@ -85,10 +85,7 @@ async fn counter_test() -> anyhow::Result<()> { let count = mock_chain .committed_account(counter_account.id())? .storage() - .get_map_item( - &counter_storage_slot, - StorageMapKey::new(COUNTER_STORAGE_KEY), - ) + .get_map_item(&counter_storage_slot, StorageMapKey::new(COUNTER_STORAGE_KEY)) .expect("Failed to get counter value from storage slot"); // Map values are returned as scalar words in `[value, 0, 0, 0]` layout. diff --git a/miden-toolchain.toml b/miden-toolchain.toml new file mode 100644 index 0000000..9ea6fa8 --- /dev/null +++ b/miden-toolchain.toml @@ -0,0 +1,5 @@ +[toolchain] +channel = "0.16.0" +# Only the toolchain components needed for testing +profile = "empty" +components = ["midenc", "cargo-miden", "core", "protocol"] From fbfbb5d73213d51d4b7ba4909368bbaa007d656c Mon Sep 17 00:00:00 2001 From: keinberger Date: Fri, 4 Sep 2026 16:32:47 +0300 Subject: [PATCH 10/12] chore: sync with stable compiler template --- .claude/hooks/build-contracts.sh | 35 +++++++++------------------- .github/workflows/ci.yml | 19 ++++----------- CLAUDE.md | 22 ++++------------- README.md | 28 ++++++---------------- contracts/counter-account/Cargo.toml | 8 +++++-- contracts/increment-note/Cargo.toml | 8 +++++-- integration/src/helpers.rs | 32 ++++++++++++------------- rust-toolchain.toml | 2 +- 8 files changed, 56 insertions(+), 98 deletions(-) diff --git a/.claude/hooks/build-contracts.sh b/.claude/hooks/build-contracts.sh index 4b88112..df16c55 100755 --- a/.claude/hooks/build-contracts.sh +++ b/.claude/hooks/build-contracts.sh @@ -18,39 +18,26 @@ if [[ ! -f "$CARGO_TOML" ]]; then exit 0 fi -# Resolve the compiler from the same immutable source revision as the contract SDK. -MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}" -COMPILER_REV="5e126fc06d78b2097a7be128f5543cb60817a95e" -COMPILER_ROOT="$MIDEN_CARGO_HOME/miden-v16-compiler-$COMPILER_REV" -CARGO_MIDEN_BIN="$COMPILER_ROOT/bin/cargo-miden" -EXPECTED_VERSION="cargo-miden 0.10.0-rc.1" -INSTALL_COMMAND="cargo install cargo-miden --git https://github.com/0xMiden/compiler --rev $COMPILER_REV --locked --root $COMPILER_ROOT" - -if [[ ! -x "$CARGO_MIDEN_BIN" ]]; then - jq -n --arg ctx "Contract build FAILED: required compiler is not executable at $CARGO_MIDEN_BIN. Install it with: $INSTALL_COMMAND" \ - '{"hookSpecificOutput": {"additionalContext": $ctx}}' - exit 2 -fi - -VERSION_OUTPUT=$("$CARGO_MIDEN_BIN" miden --version 2>&1) -VERSION_EXIT=$? -if [[ $VERSION_EXIT -ne 0 ]] || [[ "$VERSION_OUTPUT" != "$EXPECTED_VERSION" ]]; then - jq -n --arg ctx "Contract build FAILED: compiler at $CARGO_MIDEN_BIN reported '$VERSION_OUTPUT' (exit $VERSION_EXIT); expected '$EXPECTED_VERSION'. Reinstall it with: $INSTALL_COMMAND" \ - '{"hookSpecificOutput": {"additionalContext": $ctx}}' - exit 2 +# Detect which build tool is available (midenup installs `miden`, cargo install provides `cargo-miden`) +if command -v miden &> /dev/null; then + BUILD_CMD="miden build" +elif cargo miden --version &> /dev/null; then + BUILD_CMD="cargo miden build" +else + echo '{"hookSpecificOutput": {"additionalContext": "Contract build skipped: neither '\''miden'\'' nor '\''cargo-miden'\'' found. Install via midenup or: cargo install cargo-miden"}}' + exit 0 fi # Run build once, capturing output -BUILD_OUTPUT=$("$CARGO_MIDEN_BIN" miden build --manifest-path "$CARGO_TOML" --release 2>&1) +BUILD_OUTPUT=$($BUILD_CMD --manifest-path "$CARGO_TOML" --release 2>&1) BUILD_EXIT=$? if [[ $BUILD_EXIT -eq 0 ]]; then - jq -n --arg ctx "Contract build succeeded with $CARGO_MIDEN_BIN ($EXPECTED_VERSION)" \ - '{"hookSpecificOutput": {"additionalContext": $ctx}}' + echo '{"hookSpecificOutput": {"additionalContext": "Contract build succeeded"}}' exit 0 else TAIL_OUTPUT=$(echo "$BUILD_OUTPUT" | tail -20) - jq -n --arg ctx "Contract build FAILED with $CARGO_MIDEN_BIN ($EXPECTED_VERSION). Fix compilation errors before continuing."$'\n'"$TAIL_OUTPUT" \ + jq -n --arg ctx "Contract build FAILED. Fix compilation errors before continuing."$'\n'"$TAIL_OUTPUT" \ '{"hookSpecificOutput": {"additionalContext": $ctx}}' exit 2 fi diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2f433b5..456792f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,22 +17,11 @@ jobs: run: | rustup update --no-self-update rustc --version - - name: Install the source-matched Miden compiler + - name: Install midenup and stable compiler components run: | - set -euo pipefail - COMPILER_REV=5e126fc06d78b2097a7be128f5543cb60817a95e - COMPILER_ROOT="$RUNNER_TEMP/miden-compiler-$COMPILER_REV" - - cargo install cargo-miden \ - --git https://github.com/0xMiden/compiler \ - --rev "$COMPILER_REV" \ - --locked \ - --root "$COMPILER_ROOT" - - test "$("$COMPILER_ROOT/bin/cargo-miden" miden --version)" = \ - 'cargo-miden 0.10.0-rc.1' - echo "CARGO_MIDEN=$COMPILER_ROOT/bin/cargo-miden" >> "$GITHUB_ENV" + cargo install --locked midenup && midenup init && midenup install 0.16.0 && midenc --version + echo "MIDENUP_HOME=$(midenup show home)" >> "$GITHUB_ENV" - name: Run integration tests working-directory: integration run: | - cargo test --locked + cargo test diff --git a/CLAUDE.md b/CLAUDE.md index 7d669cb..b04258c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -12,27 +12,15 @@ This is a Miden smart contract project using the Rust SDK and compiler. ## Build & Test -This project follows the compiler template and SDK at immutable compiler revision -`5e126fc06d78b2097a7be128f5543cb60817a95e`. Install `cargo-miden` from that revision as -documented in `README.md`, then derive and verify its absolute path in each shell: - -```bash -MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}" -COMPILER_REV=5e126fc06d78b2097a7be128f5543cb60817a95e -COMPILER_ROOT="$MIDEN_CARGO_HOME/miden-v16-compiler-$COMPILER_REV" -export CARGO_MIDEN="$COMPILER_ROOT/bin/cargo-miden" -test "$("$CARGO_MIDEN" miden --version)" = 'cargo-miden 0.10.0-rc.1' +Contracts are built individually with cargo-miden (not `cargo build`): ``` - -Contracts are built individually with that compiler (not plain `cargo build`): -``` -"$CARGO_MIDEN" miden build --manifest-path contracts//Cargo.toml --release +cargo miden build --manifest-path contracts//Cargo.toml --release ``` Each contract has a thin `build.rs` that calls `miden-sdk-build-script-support` to populate the Miden package cache, so plain `cargo check` and IDE analysis resolve dependency packages without -a manual contract build first. The helper gives the compiler named by the `CARGO_MIDEN` -environment variable precedence over an ambient midenup installation. +a manual `cargo miden build` first. The helper needs `cargo miden` on `PATH` (or a binary named +by the `CARGO_MIDEN` environment variable). Tests run via the workspace: ``` @@ -79,5 +67,5 @@ For complex applications beyond basic patterns (multi-contract apps, novel note After modifying contract code, always: 1. Write tests alongside contracts; tests are the primary verification, builds are the secondary check -2. Build the contract: `"$CARGO_MIDEN" miden build --manifest-path contracts//Cargo.toml --release` +2. Build the contract: `cargo miden build --manifest-path contracts//Cargo.toml --release` 3. Run tests: `cargo test -p integration --release` diff --git a/README.md b/README.md index d5d98ef..bfcfebc 100644 --- a/README.md +++ b/README.md @@ -8,21 +8,7 @@ Before getting started, ensure you have the following prerequisites: 1. **Install Rust** - Make sure you have Rust installed on your system. If not, install it from [rustup.rs](https://rustup.rs/) -2. **Install the source-matched Miden compiler** - This project follows the compiler template at - revision `5e126fc06d78b2097a7be128f5543cb60817a95e`. Install `cargo-miden` from that - immutable revision into an isolated Cargo root: - - ```bash - MIDEN_CARGO_HOME="${CARGO_HOME:-${HOME:?HOME must be set}/.cargo}" - COMPILER_REV=5e126fc06d78b2097a7be128f5543cb60817a95e - COMPILER_ROOT="$MIDEN_CARGO_HOME/miden-v16-compiler-$COMPILER_REV" - - cargo install cargo-miden --git https://github.com/0xMiden/compiler \ - --rev "$COMPILER_REV" --locked --root "$COMPILER_ROOT" - - export CARGO_MIDEN="$COMPILER_ROOT/bin/cargo-miden" - test "$("$CARGO_MIDEN" miden --version)" = 'cargo-miden 0.10.0-rc.1' - ``` +2. **Install midenup toolchain** - Follow the installation instructions at: ## **Structure** @@ -34,6 +20,7 @@ miden-project/ ├── integration/ # Integration crate (scripts + tests) │ ├── src/ │ │ ├── bin/ # Rust binaries for on-chain interactions +│ │ ├── config.rs # Temporary config file (do not modify!) │ │ ├── helpers.rs # Temporary helper file (do not modify!) │ │ └── lib.rs │ └── tests/ # Test files @@ -71,7 +58,7 @@ This structure provides flexibility as your application grows, allowing you to a To create a new contract crate, run the following command from the workspace root: ```bash -"$CARGO_MIDEN" miden new --account contracts/my-account +miden new --account contracts/my-account ``` This will scaffold a new contract crate inside the `contracts/` directory with all the necessary boilerplate. @@ -98,19 +85,18 @@ Tests are located in `integration/tests/`. To add a new test: ```bash # Compile a specific contract -"$CARGO_MIDEN" miden build --manifest-path contracts/counter-account/Cargo.toml +miden build --manifest-path contracts/counter-account/Cargo.toml # Or navigate to the contract directory cd contracts/counter-account -"$CARGO_MIDEN" miden build +miden build ``` Each contract also has a thin `build.rs` that delegates to `miden-sdk-build-script-support`, keeping plain `cargo check` and IDE analysis working. The helper populates the Miden package cache with the contract's compiled dependencies, so the SDK -macros resolve them without a manual build. Export the verified absolute `CARGO_MIDEN` path before -running plain Cargo commands or IDE analysis; that explicit path takes precedence over an ambient -midenup installation. +macros resolve them without a manual build. It needs `cargo miden` on `PATH` (or a binary named +by the `CARGO_MIDEN` environment variable). ### Run a Binary diff --git a/contracts/counter-account/Cargo.toml b/contracts/counter-account/Cargo.toml index abb3503..cc1a85b 100644 --- a/contracts/counter-account/Cargo.toml +++ b/contracts/counter-account/Cargo.toml @@ -7,7 +7,11 @@ edition = "2021" crate-type = ["cdylib"] [dependencies] -miden = { git = "https://github.com/0xMiden/compiler", rev = "5e126fc06d78b2097a7be128f5543cb60817a95e" } + +miden = { version = "0.14" } + [build-dependencies] -miden-sdk-build-script-support = { git = "https://github.com/0xMiden/compiler", rev = "5e126fc06d78b2097a7be128f5543cb60817a95e" } + +miden-sdk-build-script-support = { version = "0.14" } + diff --git a/contracts/increment-note/Cargo.toml b/contracts/increment-note/Cargo.toml index cb4f61b..d508868 100644 --- a/contracts/increment-note/Cargo.toml +++ b/contracts/increment-note/Cargo.toml @@ -7,7 +7,11 @@ edition = "2021" crate-type = ["cdylib"] [dependencies] -miden = { git = "https://github.com/0xMiden/compiler", rev = "5e126fc06d78b2097a7be128f5543cb60817a95e" } + +miden = { version = "0.14" } + [build-dependencies] -miden-sdk-build-script-support = { git = "https://github.com/0xMiden/compiler", rev = "5e126fc06d78b2097a7be128f5543cb60817a95e" } + +miden-sdk-build-script-support = { version = "0.14" } + diff --git a/integration/src/helpers.rs b/integration/src/helpers.rs index 3d700c8..d4fc70d 100644 --- a/integration/src/helpers.rs +++ b/integration/src/helpers.rs @@ -211,22 +211,22 @@ pub async fn create_basic_wallet_account( } fn miden_build(args: impl IntoIterator) -> anyhow::Result { - let mut cmd = match std::env::var_os("CARGO_MIDEN") { - Some(cargo_miden) => { - // The `cargo-miden` binary expects the `miden` subcommand token, - // the same as when cargo invokes it as `cargo miden`. - let mut cmd = std::process::Command::new(cargo_miden); - cmd.arg("miden"); - cmd - } - None if std::env::var_os("MIDENUP_HOME").is_some() => { - std::process::Command::new("miden") - } - None => { - let mut cmd = std::process::Command::new("cargo"); - cmd.arg("miden"); - cmd - } + let mut cmd = match std::env::var_os("MIDENUP_HOME") { + Some(_) => std::process::Command::new("miden"), + None => match std::env::var_os("CARGO_MIDEN") { + Some(cargo_miden) => { + // The `cargo-miden` binary expects the `miden` subcommand token, + // the same as when cargo invokes it as `cargo miden`. + let mut cmd = std::process::Command::new(cargo_miden); + cmd.arg("miden"); + cmd + } + None => { + let mut cmd = std::process::Command::new("cargo"); + cmd.arg("miden"); + cmd + } + }, }; cmd.arg("build").args(args); diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 7735c77..9148f62 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,5 +1,5 @@ [toolchain] -channel = "nightly-2026-04-30" +channel = "nightly-2026-09-01" components = ["rustfmt", "rust-src", "clippy"] targets = ["wasm32-wasip2"] profile = "minimal" From bd930650b673dd82b38f33c9f7cd7513cced3152 Mon Sep 17 00:00:00 2001 From: keinberger Date: Fri, 4 Sep 2026 16:35:42 +0300 Subject: [PATCH 11/12] fix(ci): invoke midenc through midenup --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 456792f..7d52050 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,7 @@ jobs: rustc --version - name: Install midenup and stable compiler components run: | - cargo install --locked midenup && midenup init && midenup install 0.16.0 && midenc --version + cargo install --locked midenup && midenup init && midenup install 0.16.0 && miden midenc --version echo "MIDENUP_HOME=$(midenup show home)" >> "$GITHUB_ENV" - name: Run integration tests working-directory: integration From 3867325cf6226ae78495865c85b6007c3092fcdd Mon Sep 17 00:00:00 2001 From: keinberger Date: Fri, 4 Sep 2026 16:43:44 +0300 Subject: [PATCH 12/12] fix(ci): expose cargo-miden from midenup --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7d52050..b5902ea 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: - name: Install midenup and stable compiler components run: | cargo install --locked midenup && midenup init && midenup install 0.16.0 && miden midenc --version - echo "MIDENUP_HOME=$(midenup show home)" >> "$GITHUB_ENV" + echo "$(midenup show home)/opt" >> "$GITHUB_PATH" - name: Run integration tests working-directory: integration run: |