Skip to content

Tracking PR for v0.14.0 release#2303

Draft
bobbinth wants to merge 190 commits intomainfrom
next
Draft

Tracking PR for v0.14.0 release#2303
bobbinth wants to merge 190 commits intomainfrom
next

Conversation

@bobbinth
Copy link
Contributor

This is a tracking PR for v0.14.0 release.

avorylli and others added 30 commits January 17, 2026 09:47
* Add ExecError wrapper for better error reporting

* Add errors module to tx_context

* Refactor execute_code to use ExecError

Updated error handling in execute_code function to use ExecError instead of ExecutionError.

* Wrap ExecutionError in ExecError for assertions

* Refactor error handling to use 'anyhow' in tests

Refactor error handling in tests to use 'anyhow' for better context management. Update function signatures to return 'anyhow::Result' instead of 'miette::Result'.

* Replace miette with anyhow for error handling

* Update lib.rs

* Update Cargo.toml

* chore: rename `ExecError` method names

* chore: remove anyhow::anyhow! error mapping

---------

Co-authored-by: Philipp Gackstatter <PhilippGackstatter@users.noreply.github.com>
* chore: share serde across the workspace

* chore: share tokio

* chore: unify fs-err
Co-authored-by: Bobbin Threadbare <43513081+bobbinth@users.noreply.github.com>
* feat: rename NoteInputs to NoteStorage

This commit renames the NoteInputs type to NoteStorage throughout the codebase
to better reflect that these values represent stored data associated with a note
rather than inputs.

Changes include:
- Renamed NoteInputs struct to NoteStorage
- Renamed inputs.rs to storage.rs
- Updated MAX_INPUTS_PER_NOTE to MAX_NOTE_STORAGE_ITEMS
- Updated all related method names: inputs() -> storage(), num_values() -> len(), values() -> items()
- Updated all variable names: note_inputs -> note_storage
- Updated Assembly files with new terminology
- Updated error messages and constants
- Updated documentation

Closes #1662

* chore: complete note inputs to note storage rename

Address review feedback:
- Rename INPUT_NOTE_NUM_INPUTS_OFFSET to INPUT_NOTE_STORAGE_LENGTH_OFFSET
- Rename INPUT_NOTE_INPUTS_COMMITMENT_OFFSET to INPUT_NOTE_STORAGE_COMMITMENT_OFFSET
- Rename *_NUM_INPUTS constants to *_STORAGE_LENGTH
- Rename ERR_*_WRONG_NUMBER_OF_INPUTS to ERR_*_UNEXPECTED_STORAGE_LENGTH
- Rename mint_inputs.rs to mint_storage.rs
- Update function names: parse_p2id_inputs -> parse_p2id_storage
- Update error messages to use 'note storage items' terminology
- Update test helpers and assertions

* fix: rename remaining num_expected_inputs to expected_storage_length

* chore: rename remaining note inputs references to note storage

- Rename P2ID_NOTE_NUM_INPUTS to P2ID_NOTE_STORAGE_LENGTH
- Rename RPO_CLAIM_NOTE_INPUTS_COMMITMENT to RPO_CLAIM_NOTE_STORAGE_COMMITMENT
- Update comments: "note inputs" -> "note storage"
- Update error messages to use "note storage" terminology

* address PR review comments: rename get_inputs to get_storage

Changes based on Philip's review comments:
- B2AGG.masm: B2AGG_NOTE_INPUTS_COUNT → B2AGG_NOTE_STORAGE_LEN
- B2AGG.masm: ERR_B2AGG_WRONG_NUMBER_OF_INPUTS → ERR_B2AGG_UNEXPECTED_STORAGE_LENGTH
- lib.rs: claim_inputs → claim_storage_items
- prologue.masm: INPUT_COMMITMENT → STORAGE_COMMITMENT in comment
- active_note.masm: get_inputs → get_storage procedure rename
- note.masm: various comment updates (inputs → storage)
- shared_utils/note.masm: input values → storage values
- tx_args.rs: storage_commitment |-> inputs → storage_commitment |-> storage_items
- Updated all callers of get_inputs to get_storage

* fix: correct NoteError import path after merge

* fix: update generated files and fix import order

* Apply suggestions from code review

* chore: regenerate error files

* chore: revert foreign_inputs_len change

* Apply suggestions from code review

Co-authored-by: Philipp Gackstatter <PhilippGackstatter@users.noreply.github.com>

---------

Co-authored-by: Farukest <farukest@users.noreply.github.com>
Co-authored-by: Philipp Gackstatter <PhilippGackstatter@users.noreply.github.com>
Co-authored-by: Alexander John Lee <77119221+partylikeits1983@users.noreply.github.com>
* feat: working array

chore: simplify test

chore: be explicit about padding

* chore: add changelog entry for Array component (#2204)

* Initial plan

* chore: add changelog entry for PR 2203

Co-authored-by: mmagician <8402446+mmagician@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: mmagician <8402446+mmagician@users.noreply.github.com>

* fix: set_map_item no longer returns old root

* chore: change Try to TryFrom for AccountComponent

* chore: correct the docs

* chore: masm doc corrections

* chore: use BeWord instead of Word

* chore: adjust masm comment about max len

* Update crates/miden-standards/asm/account_components/array.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* chore: turn array into utility

chore: remove component code

* chore: lint, simplify test & comments

* chore: remove unnecessary comments

* chore: remove duplicated changelog entry

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Andrey Khmuro <andrey@polygon.technology>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Alexander John Lee <77119221+partylikeits1983@users.noreply.github.com>
* feat: impl fist frontier version, add (yet buggy) test

* test: fix the test, fix the bug in algorithm

* chore: update changelog

* docs: add docs for the MMR frontier in the masm file

* refactor: update the doc comments, slightly update code

* refactor: update docs and comments, add overflow check, update test

* test: add more leaves

* test: add zero root test

* chore: rename `root` -> `expected_root`

in leaf assertion tests

* chore: lint

* chore: revert to using old dir structure

* fix: update max leaves constants and comments

* chore: regen errors file

* fix: first assert valid u32, only then u32lte

---------

Co-authored-by: Marti <marti@miden.team>
…2312)

* feat: impl fist frontier version, add (yet buggy) test

* test: fix the test, fix the bug in algorithm

* chore: update changelog

* docs: add docs for the MMR frontier in the masm file

* refactor: update the doc comments, slightly update code

* refactor: update docs and comments, add overflow check, update test

* test: add more leaves

* test: add zero root test

* chore: rename `root` -> `expected_root`

in leaf assertion tests

* chore: lint

* chore: revert to using old dir structure

* feat: generate test vectors with foundry

* feat: use agglayer submodule instead of copying source files

* chore: use generated test vectors in compat tests

* chore: remove the human-readable fn

* chore: split test vectors

into leaf<>root<>count paris; and canonical zeros

* chore: remove unnecessary metadata

* chore: cleanup readme

* changelog

* chore: ignore submodule from typos check

* chore: exclude submodule from toml fmt

* fix: update max leaves constants and comments

* chore: regen errors file

* refactor: use foundry cheatcode (#2314)

* chore: use workspace serde dep

* chore: cleanup changelog

---------

Co-authored-by: Andrey Khmuro <akhmuro@gmail.com>
Co-authored-by: Alexander John Lee <77119221+partylikeits1983@users.noreply.github.com>
* feat: add leafType param

fix after merge

* changelog
* feat: UPDATE_GER note outline

* feat: working update ger note

* chore: swap upper, lower GER parts

* lint: regen error file
igamigo and others added 30 commits March 16, 2026 12:22
* feat: wip CLAIM note flow reorientation

* wip: build MINT note from aggbridge

* wip: created MINT note encodes incorrect public P2ID or public P2ID  not in DataStore

* feat: working e2e CLAIM flow reordering

* fix: cleanup rm debug.stack

* refactor: improve readability of MINT note memory addresses

* refactor: fix stack comments

* fix: rm println statements

* Update crates/miden-agglayer/asm/agglayer/bridge/bridge_config.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* Update crates/miden-agglayer/asm/agglayer/bridge/bridge_config.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* Update crates/miden-agglayer/asm/agglayer/bridge/bridge_config.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* Update crates/miden-agglayer/asm/agglayer/bridge/bridge_config.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* Update crates/miden-agglayer/asm/note_scripts/CLAIM.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* Update crates/miden-agglayer/asm/agglayer/bridge/bridge_config.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* Update crates/miden-agglayer/asm/agglayer/bridge/bridge_config.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* Update crates/miden-agglayer/asm/agglayer/bridge/bridge_in.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* Update crates/miden-agglayer/asm/agglayer/bridge/bridge_in.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* Update crates/miden-agglayer/asm/agglayer/bridge/bridge_in.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* refactor: improve bridge_in doc comments

* refactor: add constants for memory addresses

* refactor: cleanup memory layout in bridge_in

* fix: update comment in CLAIM note

* refactor: remove redundant dropw

* refactor: use execution_hint::ALWAYS

* refactor: rm redundant const note type

* refactor: simplify loc_store/load ops in bridge_in

* refactor: decompose build_mint_output_note into modular helpers

* refactor: remove pad(x) stack comments from exec'ed procs

* feat: add constants for attachement types

* fix: add call to verify_u256_scale_down procedure

* refactor: use ATTACHMENT_KIND_NONE const

* fix: use truncate_stack proc for FPI call & exec compatibility

* refactor: add get_scale & get_scale_inner for call vs exec

* refactor: use local memory for TOKEN_ADDR_HASH_PTR

* refactor: look up faucet by token address only once during claim

* fix: fix array comment syntax

* refactor: rm pad comments from exec'ed proc

* refactor: rm swapw & replace w padw

* fix: update comment

* refactor: refactor is_token_registered proc

* chore: more explicit mem constant names

* fix: explicit pad before FPI call

* refactor: remove unused bridge account ID storage slot from AggLayer faucet

* chore: opinionated improvements to #2528 (#2602)

* chore: pass faucet ID on stack to verify_claim_amount

* chore: pass faucet ID on stack to build_mint_output_note

* chore: completely remove CLAIM_FAUCET_ID_PREFIX_MEM_ADDR

* chore: drop "y" in verify_u128_to_native_amount_conversion

* chore: avoid uplicating y only to drop it later

* chore: adjust comments; no longer reading faucetID from mem

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: rename to output & fix copilot suggestion

---------

Co-authored-by: Alexander John Lee <77119221+partylikeits1983@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: riemann <aleqvids@gmail.com>

* refactor: move bridge & faucet code from lib.rs to dedicated modules

---------

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>
Co-authored-by: Marti <marti@miden.team>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* feat(agglayer): process CLAIM notes from a rollup

Support rollup deposits (mainnet_flag=0) in bridge-in verification.
Previously only mainnet deposits were supported and rollup deposits
would panic. Rollup deposits use two-level Merkle proof verification:
first computing the local exit root from the leaf, then verifying it
against the rollup exit root.

Closes #2394

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: extract leading zeros/flag validation from global index helpers

Address review feedback:
- Remove leading zeros assertion and mainnet flag validation from
  process_global_index_mainnet and process_global_index_rollup helpers.
  These are now done once in verify_leaf before branching.
- The helpers now take [rollup_index_le, leaf_index_le] instead of the
  full 8-element global index.
- In process_global_index_rollup, removed unnecessary byte-swap before
  asserting zero (zero is byte-order-independent). This is now moot
  since the mainnet flag is no longer checked in the helper.
- Updated MASM unit tests to match the new helper signatures.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: regenerate agglayer error constants

Include the auto-generated ERR_MAINNET_FLAG_INVALID constant in the
committed errors file to fix the generated files CI check.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: use non-zero indices in rollup test vectors and fix stack bug

Use non-zero leafIndex (2) and indexRollup (5) in the rollup test
vectors to exercise byte-ordering and stack manipulation paths.

This exposed a bug in verify_leaf's rollup branch: the stack
rearrangement after process_global_index_rollup had leaf_index and
rollup_index in the wrong positions, which was masked when both
were zero.

Also restructure the rollup exit tree test helper to use an
SMT-style approach (setLocalExitRootAt) matching the real
PolygonRollupManager.getRollupExitRoot() construction.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: use distinct error messages for mainnet/rollup flag validation

Split ERR_BRIDGE_NOT_MAINNET into two errors:
- ERR_BRIDGE_NOT_MAINNET: "mainnet flag must be 1 for a mainnet deposit"
- ERR_BRIDGE_NOT_ROLLUP: "mainnet flag must be 0 for a rollup deposit"

The previous error text "bridge not mainnet" read backwards when used
in the rollup helper to reject a mainnet flag.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: clarify mainnet flag comment and add ERR_MAINNET_FLAG_INVALID test

- Fix stale comment in verify_leaf that incorrectly referenced
  "stack position 2" for the mainnet flag (it's at position 5)
- Add explicit MASM test for the mainnet flag boolean validation
  (ERR_MAINNET_FLAG_INVALID) which rejects flag values >= 2

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: remove stale constant reference and useless inline test

- Fix comment referencing non-existent MAINNET_FLAG_STACK_POS constant
- Remove test_mainnet_flag_rejects_invalid_value: it inlined the same
  logic as verify_leaf rather than testing verify_leaf itself, so it
  only proved u32lt.2 works on the value 3, not that verify_leaf
  actually performs the check

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: unify GlobalIndex validation and reject invalid flag values

Make validate_mainnet() and validate_rollup() private, exposing only
validate() which checks the mainnet flag is a valid boolean (0 or 1)
before dispatching. This fixes a bug where flag values >= 2 were
incorrectly accepted by validate_rollup() since is_mainnet() returned
false for any non-1 value.

Add mainnet_flag() accessor and a test for invalid flag rejection.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: define memory pointers relative to existing constants

Express SMT_PROOF_LOCAL_EXIT_ROOT_PTR and SMT_PROOF_ROLLUP_EXIT_ROOT_PTR
relative to PROOF_DATA_PTR and each other, rather than hard-coding
absolute values.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: regroup and document memory layout constants

Reorganize constants into clear sections: proof data memory layout
(with address map comment), leaf data, calculate_root locals, and
data sizes. Define GLOBAL_INDEX_PTR relative to
SMT_PROOF_ROLLUP_EXIT_ROOT_PTR for a fully chained layout.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Apply suggestions from code review

* Fix rollup deposit merkle proof stack setup (#2576)

Co-authored-by: Cursor Agent <cursoragent@cursor.com>

* Apply suggestions from code review

Co-authored-by: Alexander John Lee <77119221+partylikeits1983@users.noreply.github.com>

---------

Co-authored-by: Claude (Opus) <noreply@anthropic.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Alexander John Lee <77119221+partylikeits1983@users.noreply.github.com>
* feat: wip CLAIM note flow reorientation

* wip: build MINT note from aggbridge

* wip: created MINT note encodes incorrect public P2ID or public P2ID  not in DataStore

* feat: working e2e CLAIM flow reordering

* fix: cleanup rm debug.stack

* refactor: improve readability of MINT note memory addresses

* refactor: fix stack comments

* fix: rm println statements

* Update crates/miden-agglayer/asm/agglayer/bridge/bridge_config.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* Update crates/miden-agglayer/asm/agglayer/bridge/bridge_config.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* Update crates/miden-agglayer/asm/agglayer/bridge/bridge_config.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* Update crates/miden-agglayer/asm/agglayer/bridge/bridge_config.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* Update crates/miden-agglayer/asm/note_scripts/CLAIM.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* Update crates/miden-agglayer/asm/agglayer/bridge/bridge_config.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* Update crates/miden-agglayer/asm/agglayer/bridge/bridge_config.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* Update crates/miden-agglayer/asm/agglayer/bridge/bridge_in.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* Update crates/miden-agglayer/asm/agglayer/bridge/bridge_in.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* Update crates/miden-agglayer/asm/agglayer/bridge/bridge_in.masm

Co-authored-by: Andrey Khmuro <andrey@polygon.technology>

* feat: add CGI chain hash computation

* test: [WiP-1] first iteration, not building

* test: [WiP-2] building state

* test: updated script, failing

* test: update script (passing)

* refactor: improve bridge_in doc comments

* refactor: add constants for memory addresses

* refactor: cleanup memory layout in bridge_in

* fix: update comment in CLAIM note

* refactor: remove redundant dropw

* refactor: use execution_hint::ALWAYS

* refactor: rm redundant const note type

* refactor: simplify loc_store/load ops in bridge_in

* refactor: decompose build_mint_output_note into modular helpers

* refactor: remove pad(x) stack comments from exec'ed procs

* feat: add constants for attachement types

* refactor: create ctorage slots for CGI chain hash, use actiual procedure in test

* refactor: incapsulate CGI hash computation

* fix: add call to verify_u256_scale_down procedure

* refactor: use ATTACHMENT_KIND_NONE const

* fix: use truncate_stack proc for FPI call & exec compatibility

* refactor: add get_scale & get_scale_inner for call vs exec

* test: update solidity contracts to generate CGI chain hash. Test is failing

* test: fix bug, test is passing

* chore: fix doc format

* refactor: use local memory for TOKEN_ADDR_HASH_PTR

* refactor: look up faucet by token address only once during claim

* fix: fix array comment syntax

* refactor: rm pad comments from exec'ed proc

* refactor: rm swapw & replace w padw

* fix: update comment

* refactor: refactor is_token_registered proc

* chore: more explicit mem constant names

* fix: explicit pad before FPI call

* refactor: remove unused bridge account ID storage slot from AggLayer faucet

* chore: opinionated improvements to #2528 (#2602)

* chore: pass faucet ID on stack to verify_claim_amount

* chore: pass faucet ID on stack to build_mint_output_note

* chore: completely remove CLAIM_FAUCET_ID_PREFIX_MEM_ADDR

* chore: drop "y" in verify_u128_to_native_amount_conversion

* chore: avoid uplicating y only to drop it later

* chore: adjust comments; no longer reading faucetID from mem

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: rename to output & fix copilot suggestion

---------

Co-authored-by: Alexander John Lee <77119221+partylikeits1983@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: riemann <aleqvids@gmail.com>

* refactor: move bridge & faucet code from lib.rs to dedicated modules

* refactor: remove unused code, update list of bridge storage slots, update docs

* refactor: create constants for local memory offsets

* refactor: move verifyLeafBridgeHarness to helpers, remove unused code, remove local memory usage for leaf value

* test: generate CGI chain hash during ClaimAssetTestVectorsRollupTx

---------

Co-authored-by: riemann <aleqvids@gmail.com>
Co-authored-by: Alexander John Lee <77119221+partylikeits1983@users.noreply.github.com>
Co-authored-by: Marti <marti@miden.team>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
… interface (#2612)

* chore: verify_leaf_bridge no longer in bridge interface

* chore: make proc exec context

* chore: remove unused proc locals

* chore: rearrange procs in bridge_in file
* feat: implement CLAIM note nullifier tracking

* feat: implement h(leafIndex, sourceChain) nullifier computation

* refactor: add set_and_check_claimed proc & refactor verify_leaf

* refactor: add empty line after stack comment

Co-authored-by: Alexander John Lee <77119221+partylikeits1983@users.noreply.github.com>

* refactor: minor formatting cleanup

* refactor: clean up verify_leaf comments and use consistent memory approach

* refactor(bridge_in): use descriptive memory constants and safe overflow check
* refactor: update RandomCoin, use position of LeafIndex

* chore: update deny file

* chore: use version from crates.io, update deny file
* refactor: normalize storage slot naming

* chore: roll back the changes

* refactor: update storage slot names
)

* feat(agglayer): store and use metadata hash for bridge-out leaves

The metadata_hash field in bridge-out leaves was previously zeroed,
which would cause EVM-side claim verification to fail (no preimage
for bytes32(0) under keccak256). This stores a pre-computed
keccak256(abi.encode(name, symbol, decimals)) in faucet storage and
reads it via FPI during bridge-out leaf construction.

Changes:
- Add MetadataHash::from_token_info and encode_token_metadata helpers
  with Solidity ABI encoding compatibility (verified against test vectors)
- Add metadata_hash_lo/hi storage slots to AggLayerFaucet
- Add get_metadata_hash FPI-callable procedure to faucet MASM
- Update bridge_out.masm to fetch metadata hash via FPI instead of
  pushing zeros
- Export get_metadata_hash from faucet component
- Regenerate Solidity MMR test vectors with real metadata hash
- Add TODO in register_faucet for future on-chain verification

Closes #2453

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: address self-review feedback on metadata hash

- Add bounds assertion to encode_token_metadata for string lengths
- Make encode_token_metadata pub(crate) since it's only used internally

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: allow CC0-1.0 license in cargo-deny for tiny-keccak

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: add changelog entry for metadata hash feature

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: replace tiny-keccak with miden-crypto and alloy-sol-types for ABI encoding

Swap `tiny-keccak` for `miden_crypto::hash::keccak::Keccak256` to avoid
an extra cargo dependency, and replace the hand-rolled ABI encoding with
`alloy-sol-types` `sol!` macro for type-safe `abi.encode(string, string,
uint8)`. Tests now read expected values from the test vector JSON instead
of hardcoding them.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: replace truncate_stack with explicit drops in get_metadata_hash

Use `swapdw dropw dropw` instead of `exec.sys::truncate_stack` to
explicitly drop the 8 excess padding elements in `get_metadata_hash`.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: simplify TODO comment and compute METADATA_HASH inline in Solidity test

Replace verbose TODO in bridge_config.masm with a concise version
referencing issue #2586. In the Solidity test, compute METADATA_HASH via
`keccak256(abi.encode(...))` instead of hardcoding the constant.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: consolidate tests

* chore: address Copilot review comments

Use workspace dependency for serde in dev-dependencies and rename
sol!-generated TokenMetadata to SolTokenMetadata to avoid ambiguity.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Update crates/miden-agglayer/asm/agglayer/faucet/mod.masm

* fix: explicit pad before FPI call in metadata hash retrieval

Add padw padw padw padw before the get_metadata_hash FPI call,
matching the pattern established in bridge_in.masm (cfb6211).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: explicit pad and reorder FPI setup for metadata hash retrieval

- Add padw padw padw padw before the get_metadata_hash FPI call,
  matching the pattern from bridge_in.masm (cfb6211).
- Reorder: load PROC_MAST_ROOT first via procref, then faucet ID
  on top via mem_load, eliminating movup.5 movup.5.
- Use temp global memory (not loc_loadw_be) to load faucet ID after
  procref, since loc_loadw_be after procref conflicts with FPI state.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: explicit padding comments; load proc-ref before faucet ID

* chore: rearrange mem writing sections

* chore: no need to store faucet ID to mem

* Apply suggestion from @mmagician

* Update deny.toml

* refactor: encode token metadata in Solidity test vectors, read from JSON in tests

Token name, symbol, and decimals are now defined as constants in
MMRTestVectors.t.sol and serialized to mmr_frontier_vectors.json.
The Rust bridge_out test reads these from the JSON vectors instead
of hardcoding "AGG" and 8.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: add (4) annotations to word-sized stack comments in bridge_out

Adds consistent (4) count annotations to ASSET, AMOUNT_U256,
PROC_MAST_ROOT, and METADATA_HASH stack comments so the stack
depth is verifiable at a glance.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Revert "fix: add (4) annotations to word-sized stack comments in bridge_out"

This reverts commit ac582b3.

* chore: clean up stack comments for storing leaf data

---------

Co-authored-by: Claude (Opus) <noreply@anthropic.com>
---------

Co-authored-by: Bobbin Threadbare <43513081+bobbinth@users.noreply.github.com>
* chore: refactor tx kernel from `ASSET` to `ASSET_KEY` and `ASSET_VALUE` (#2396)

* chore: refactor `miden::protocol` from `ASSET` to `ASSET_KEY` and `ASSET_VALUE` (#2410)

* feat: adapt the layout of `Asset`s to the double word representation (#2437)

* feat: migrate to miden VM 0.21 and miden crypto 0.22 (#2508)

* feat: optimize layouts and procedures for little-endian (#2512)

* chore: use `get_balance` helper in account_delta

* chore: Add `TryFrom<Word> for AssetVaultKey`

* feat: refactor `asset.masm`

* feat: add `fungible_asset.masm`

* feat: refactor `asset_vault.masm`

* feat: refactor `faucet.masm`

* feat: refactor `account.masm`

* feat: refactor `account_delta.masm`

* feat: refactor `epilogue.masm`

* feat: refactor `output_note.masm`

* feat: refactor `prologue.masm`

* chore: increase `NOTE_MEM_SIZE` to 3072

* chore: adapt `NoteAssets` commitment

* feat: refactor `note.masm`

* chore: refactor `api.masm`

* chore: regenerate kernel proc hashes

* chore: add changelog

* fix: faucet::mint output docs

* chore: update memory.rs input/output note memory layouts

* fix: duplicate num assets in memory.rs table

* feat: move `build_asset_vault_key` to shared utils

* feat: refactor `faucet::mint`

* feat: refactor `faucet::burn`

* chore: refactor `create_non_fungible_asset` for uniformity

* feat: refactor `native_account::remove_asset`

* chore: move `mock::util` lib to miden-standards

* feat: refactor `move_asset_to_note`

* feat: add asset key to SWAP storage

* feat: refactor `native_account::add_asset`

* chore: refactor `receive_asset`

* feat: refactor `output_note::add_asset`

* chore: deduplicate epilogue asset preservation test

* chore: remove re-export of vault key builder procedures

* chore: regenerate kernel procedure hashes

* chore: add changelog

* fix: doc link to mock util lib

* chore: improve send_note_body impl and test

* fix: replace leftover `ASSET`s with `ASSET_VALUE`

* chore: update protocol library docs

* fix: rename leftover `ASSET` to `ASSET_VALUE`

* chore: remove unused error

* chore: regenerate tx kernel errors

* chore: improve note assets commitment computation

* fix: input notes memory assertions

* chore: add renamed procedures to changelog

* fix: incorrect stack and doc comment

* fix: p2id::new test

* feat: validate new asset layouts

* chore: update asset procedure calls in faucet

* feat: add create_fungible_asset_unchecked

* chore: change has_non_fungible_asset to take asset key

* feat: include full faucet ID limbs in asset delta

* chore: remove into `Word` conversions for assets

* feat: Implement strongly typed asset vault key

* chore: temporarily remove asset vault key hash

* chore: remove asset from word conversion

* feat: update `Asset` docs

* chore: remove unused (non-)fungible asset builders

* feat: refactor asset serialization and tests

* chore: add validation in get_asset and get_initial_asset

* chore: adapt miden-standards to changed asset def

* chore: adapt miden-tx to changed asset def

* feat: return native asset ID and fee amount as tx output

* chore: update create_non_fungible_asset faucet/asset APIs

* chore: adapt tests to new asset layouts

* feat: validate asset ID prefix in non-fungible assets

* chore: drop trailing "asset" from `asset::validate_asset`

* chore: rewrite asset validation tests

* chore: merge validate_value in `fungible_asset`

* chore: remove unused build_asset_vault_key procedures

* chore: remove `LexicographicWord` wrapper in non-fungible asset delta

* chore: update asset::create_non_fungible_asset signature in docs

* fix: test name, vault key display impl, remove unused errors

* fix: intra doc links

* chore: add changelog

* Initial plan

* Address review nits: add load_asset_key_and_value utility, use explicit ASSET_PTR constants, rename variables, add test

Co-authored-by: mmagician <8402446+mmagician@users.noreply.github.com>

* Fix load_asset_key_and_value procedure and usages in prologue and epilogue

Co-authored-by: mmagician <8402446+mmagician@users.noreply.github.com>

* Run cargo fmt to fix formatting issues

Co-authored-by: mmagician <8402446+mmagician@users.noreply.github.com>

* Rename asset_value back to asset in tx_event.rs

Co-authored-by: mmagician <8402446+mmagician@users.noreply.github.com>

* Run cargo fmt to fix formatting after variable rename

Co-authored-by: mmagician <8402446+mmagician@users.noreply.github.com>

* chore: simplify fungible_asset merge and add split

* chore: remove outdated edge case handling in vault

* chore: convert u64s from BE to LE

* feat: migrate rpo256 -> poseidon2

* chore: upgrade miden VM & crypto in Cargo.toml

* chore: refactor memory.masm from BE to LE

* chore: update broken imports in `miden-protocol`

* chore: introduce `FromNum` and `TryFromNum` traits

* chore: FieldElement import, as_int, and read_many_iter in `protocol`

* chore: replace imports in miden-protocol-macros

* chore: update imports in miden-standards

* chore: update imports in miden-tx

* chore: deactivate agglayer in workspace and miden-testing

* chore: update imports in miden-testing

* chore: migrate account ID and asset-related MASM modules to LE

* chore: migrate account, delta and note-related MASM modules to LE

* chore: migrate prologue & epilogue to LE

* chore: update empty SMT root

* chore: migrate tx and api.masm modules to LE

* chore: reverse tx stack inputs and outputs

* chore: migrate miden::protocol from BE to LE

* chore: swap order of link map operands on adv stack

* chore: swap prefix/suffix in asset vault test

* chore: use more resilient way to write test_transaction_epilogue

* chore: migrate tests in miden-testing from BE to LE

* chore: update schema type IDs for falcon512_poseidon2::pub_key

* chore: migrate miden::standards::{access, auth} from BE to LE

* chore: migrate miden::standards::faucets from BE to LE

* chore: migrate miden::standards::data_structures from BE to LE

* chore: migrate miden::standards::notes from BE to LE

* chore: migrate miden::standards::{wallets, attachments} from BE to LE

* fix: mmr authentication path for latest block

* chore: use falcon512_poseidon2::encode_signature for sig prep

* chore: update protocol library docs

* chore: remove @BigEndian from type defs

* fix: avoid using undeclared stack

* feat: reexport asset::mem_load

* chore: migrate singlesig_acl from be to le

* fix: multisig stack layouts after migration

* chore: update Cargo.lock and regenerate kernel proc hashes

* chore: cargo update to latest crypto and VM patch releases

* fix: unused imports after miden-field upgrade

* chore: use `Felt::{from, try_from}` and remove `(Try)FromNum`

* chore: remove temp mmr fix and adapt find_half_key_value call

* chore: regenerate kernel proc hashes

* chore: make toml

* chore: add changelog entry

* fix: outdated doc links

* fix: make format

* chore: deactivate miden-agglayer in check-features.sh

* chore: allow bincode in deny.toml

* fix: deny.toml entries and upgrade toml to 1.0

* fix: transaction context builder doc test

* feat: Add `Asset::as_elements`

* chore: use `asset::mem_load` in swap note

* fix: update agglayer::bridge::bridge_out to new asset layout

* chore: remove `Ord for Asset` impl

* chore: re-add error when asset-to-be-removed is not present

* chore: remove whitespace in docs

* chore: `cargo update`

* chore: use seed digest 2 and 3 as account ID suffix and prefix

* chore: remove `AccountId::try_from<[Felt; 2]>`; add `try_from_elements`

* chore: consistently use `RATE0, RATE1, CAPACITY` for hasher state

* chore: optimize account_id::validate for little-endian order

* chore: optimize account ID seed validation

* chore: reverse tx summary stack layout

* feat: optimize `account::is_slot_id_lt` for little-endian layout

* chore: regenerate kernel proc hashes

* chore: add changelog

* chore: rename `Falcon512Rpo` to `Falcon512Poseidon2`

* chore: rename `_ADDRESS` to `_PTR` in swap

* chore: rename `asset::{mem_store, mem_load}` to store/load

* chore: use imports instead of absolute paths

* chore: reword non-fungible asset key collision resistance

* chore: add `AssetId::is_empty`

* chore: remove unnecessary imports in `AssetVault`

* chore: spell out asset key layout in has_non_fungible_asset

* chore: validate account ID type in AssetVaultKey::new

* fix: typo in Asset docs

* chore: prefix `get/into_faucet_id` with `key`

* chore: prefix `get/into_asset_id` with `key`

* chore: suffix `is_(non_)fungible_asset` with `key`

* chore: address review comments

* chore: update outdated tx kernel input/output docs

* chore: LE layout for upcoming fpi account ID; fix stack comments

* chore: replace `type Word` with built-in `word`

* fix: asset::mem_store using `_be` instructions

* chore: update `add_input_notes` docs

* chore: Add `fungible_asset::to_amount`

* chore: replace `swap.3` with `movdn.3`

* chore: rename `get_balance_from_fungible_asset` to `value_into_amount`

* chore: use more explicit `poseidon2::copy_digest`

* chore: ensure asset vault key validity for fungible keys

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: mmagician <8402446+mmagician@users.noreply.github.com>
Co-authored-by: Bobbin Threadbare <bobbinth@protonmail.com>

* fix: remove unused MASM imports (#2543)

* feat: Enable warnings_as_errors in assembler

* fix: remove unused imports in miden-protocol

* fix: remove unused imports in miden-standards

* fix: enable `miden-crypto/std` in `testing` feature to fix MSRV check (#2544)

The migration to miden-crypto 0.22 replaced `winter_rand_utils::rand_value`
with `miden_crypto::rand::test_utils::rand_value`, which is gated behind
`#[cfg(any(test, feature = "std"))]`. Since the workspace dependency uses
`default-features = false`, crates depending on `miden-protocol/testing`
without `std` failed to compile, breaking the release-dry-run MSRV check.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: enable CI on merge queue trigger (#2540)

* chore: enable CI on merge queue trigger

* Update .github/workflows/build-docs.yml

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* feat: enable warning as errors for `CodeBuilder` (#2558)

* refactor: enforce defining supported types on metadata (#2554)

* feat: enforce maximum serialized size for output notes (#2205)

* feat: introduce `AccountIdKey` (#2495)

* Introducing a dedicated AccountIdKey type to unify and centralize all AccountId

* changelog for introduce AccountIdKey type

* refactor: clean up comments and improve code readability in AccountIdKey and tests

* refactor: update AccountIdKey conversion method and clean up imports

* refactor: reorganize AccountIdKey indices and clean up related code

* Apply suggestions from code review

* Update crates/miden-protocol/src/block/account_tree/account_id_key.rs

* Update crates/miden-protocol/src/block/account_tree/account_id_key.rs

* feat: validate account ID in `AccountTree::new`

---------

Co-authored-by: Bobbin Threadbare <43513081+bobbinth@users.noreply.github.com>
Co-authored-by: Philipp Gackstatter <PhilippGackstatter@users.noreply.github.com>

* fix: make format and remove unused import (#2564)

* feat: make `NoteMetadataHeader` public (#2561)

* chore: ProvenBlock constructor with validation (#2553)

* refactor: include fee in TransactionId computation

* refactor: remove `Ord` and `PartialOrd` from `StorageSlot` (#2549)

* chore: Replace SMT leaf conversion function (#2271)

* feat: add ability to submit user batches for the MockChain (#2565)

* chore: Explicitly use `get_native_account_active_storage_slots_ptr` in `account::set_item` and `account::set_map_item`

* chore: fix typos

* feat: integrate PSM contracts to AuthMultisig  (#2527)

* chore: remove `ProvenTransactionBuilder` in favor of `ProvenTransaction::new` (#2567)

* feat: implement `Ownable2Step` (#2292)

* feat: implement two-step ownership management for account components

- Add `ownable2step.masm` to provide two-step ownership functionality, requiring explicit acceptance of ownership transfers.
- Create Rust module for `Ownable2Step` struct to manage ownership state and storage layout.
- Introduce error handling for ownership operations in `standards.rs`.
- Develop comprehensive tests for ownership transfer, acceptance, and renouncement scenarios in `ownable2step.rs`.

* feat: add Ownable2Step account component for two-step ownership transfer

* fix: correct ownership word layout and update transfer ownership logic in ownable2step

* Refactor ownership management to use Ownable2Step pattern

- Updated the access control mechanism to implement a two-step ownership transfer pattern in the ownable2step module.
- Modified the storage layout to accommodate the new ownership structure, reversing the order of owner and nominated owner fields.
- Refactored the network fungible faucet to utilize the new Ownable2Step for ownership management.
- Adjusted related tests to validate the new ownership transfer logic and ensure correct behavior when transferring and accepting ownership.
- Updated error handling to reflect changes in ownership management, including new error messages for ownership transfer scenarios.

* refactor: update ownership word layout and adjust related logic in Ownable2Step

* refactor: rename owner and nominated_owner to get_owner and get_nominated_owner for consistency

* refactor: streamline ownership management in tests by utilizing Ownable2Step according to philip

* fix: `make format`

---------

Co-authored-by: Bobbin Threadbare <43513081+bobbinth@users.noreply.github.com>
Co-authored-by: Philipp Gackstatter <PhilippGackstatter@users.noreply.github.com>

* feat: prefix account components with miden::standards namespace (#2400)

* refactor: rename output note structs (#2569)

* feat: add `create_fungible_key` proc for fungible asset vault keys (#2575)

* feat(asm): add create_fungible_key proc for fungible asset vault keys

* chore: re-export create_fungible_key from `protocol::asset`

* chore: add changelog

---------

Co-authored-by: Philipp Gackstatter <PhilippGackstatter@users.noreply.github.com>

* feat: migrate miden-agglayer to VM 0.21 and crypto 0.22 (#2546)

* feat: migrate miden-agglayer to VM 0.21 and crypto 0.22

Re-enable the miden-agglayer crate in the workspace and apply all
necessary API and convention changes from the VM 0.21 migration:

Rust changes:
- Remove FieldElement trait imports (removed from miden-core)
- Felt::as_int() -> Felt::as_canonical_u64()
- Program import moved to miden_core::program::Program
- bytes_to_packed_u32_felts -> bytes_to_packed_u32_elements (miden_core::utils)
- AccountId::try_from([Felt;2]) -> AccountId::try_from_elements(suffix, prefix)
- Serializable/Deserializable from miden_assembly::serde (was ::utils)

MASM changes:
- rpo256 -> poseidon2 (hash function migration)
- asset::mem_store/mem_load -> asset::store/load (procedure renames)
- u64::overflowing_mul -> u64::widening_mul
- u128_sub_no_underflow rewritten for LE convention (u64 procedures
  now use [lo, hi] input/output order)
- verify_u128_to_native_amount_conversion updated for LE result order

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: migrate agglayer tests and fix LE convention issues

Re-enable agglayer tests in miden-testing and fix all compilation
and runtime errors from the VM 0.21 migration:

Test compilation fixes:
- FieldElement import removal, as_int -> as_canonical_u64
- AuthScheme::Falcon512Rpo -> Falcon512Poseidon2
- AdviceInputs path: miden_processor::advice::AdviceInputs
- FastProcessor::new_debug -> new().with_advice().with_debugging()
- StackInputs::new(vec![]) -> new(&[])
- bytes_to_packed_u32_felts -> bytes_to_packed_u32_elements
- AccountId::try_from -> try_from_elements

MASM runtime fixes:
- eth_address.masm: fix u32split LE output order in build_felt
  verification (movup.4 -> movup.3 for lo/hi comparison)
- bridge_out.masm: fix create_burn_note note_idx corruption -
  loc_loadw_be overwrites top 4 stack elements including both
  copies from dup; save note_idx to local instead (pre-existing
  bug that only manifested with multiple output notes)
- bridge_out.masm: fix num_leaves storage LE ordering - push
  new_leaf_count to stack top for Word[0] storage, use
  mem_storew_le instead of mem_storew_be for loading
- bridge_config.masm: update GER hash from Rpo256 to Poseidon2
- canonical_zeros: remove .rev() from build.rs generation, swap
  push order for LE memory layout
- Word element ordering fixes for bridge admin, GER manager,
  faucet registry keys, and conversion metadata

Test expectation fixes:
- Rpo256 -> Poseidon2 for GER hash computation
- Removed word reversal in root/proof reading (LE convention)
- Fixed expected storage value ordering
- mem_storew_be -> mem_storew_le in test MASM code

All 39 agglayer tests pass.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* style: apply rustfmt formatting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: address PR review comments

- Extract `create_id_key(id: AccountId) -> Word` helper and reuse for
  bridge_admin, ger_manager, bridge_account_id, and faucet_registry_key
- Replace `felts_to_bytes` with re-export of `packed_u32_elements_to_bytes`
  from miden-core (identical implementation)
- Remove stale comment in config_note.rs
- Use `Felt::ONE` instead of `Felt::new(1)` in config_bridge test
- Add TODO comments referencing issue #2548 for getter helpers
- Simplify note_idx handling: use `padw` before `loc_loadw_le` instead of
  saving to a local variable; revert @Locals(15) to @Locals(14)
- Switch `loc_storew_be`/`loc_loadw_be` to `_le` variants in create_burn_note
- Add stack state comments before third overflowing_sub in u128_sub_no_underflow

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: padding is 15

* remove utils re-export, faucet_registry_key

* chore: drop 4 words

* fix: pad before call invoc.; explicit stack comments

* fix: unnecesary dup and incorrect movup

* style: codify multi-element naming convention for MASM stack comments

Add convention to masm_doc_comment_fmt.md:
- `value` = single felt
- `value(N)` = N felts (non-word)
- `VALUE` = word (4 felts, no (4) suffix needed)

Apply throughout agglayer MASM: drop redundant (4) from ASSET_KEY,
ASSET_VALUE, SERIAL_NUM, SCRIPT_ROOT, RECIPIENT, NOTE_ATTACHMENT,
PROC_MAST_ROOT, OLD_VALUE, VALUE, U256_LO, U256_HI.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: update comments on poseidon inputs

* Update crates/miden-protocol/masm_doc_comment_fmt.md

Co-authored-by: Philipp Gackstatter <PhilippGackstatter@users.noreply.github.com>

* chore: test for high x3

* fix: correctly rearrange lo/hi for sub

* chore: more explicit sub comments

* chore: revert changes to faucet config slot

* chore: revert prefix<>suffix storage ordering

* fix: store flag values at word[0] for LE convention

Change GER_KNOWN_FLAG and IS_FAUCET_REGISTERED_FLAG to be stored at
word[0] instead of word[3]. Under LE, `push.0.0.0.FLAG` puts FLAG at
stack top = word[0], matching the documented layout [1, 0, 0, 0].

Previously `push.FLAG.0.0.0` placed FLAG at stack bottom = word[3],
resulting in Word([0, 0, 0, 1]) which contradicted the docs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: use felts directly instead of extracting u64

* chore: fix build

* Apply suggestion from @PhilippGackstatter

Co-authored-by: Philipp Gackstatter <PhilippGackstatter@users.noreply.github.com>

* chore: use AccountIdKey

* refactor: push explicit zeros, dont assume padding is 0

* refactor: simplify assert_faucet_registered by asserting first

* chore: re-add miden-agglayer to feature checks

Now that miden-agglayer has been migrated, add it back to the
check-features.sh loop.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: explicit pointers for storing prefix/suffix

* refactor: swap to_account_id output to LE convention [suffix, prefix]

All other bridge/faucet MASM procedures use [suffix, prefix] (suffix on
top) for account IDs on the stack. Align to_account_id with this
convention by adding a swap at the end, and update all callers:
- faucet/mod.masm: update get_destination_account_id_data, claim, and
  build_p2id_output_note to handle the new stack order
- solidity_miden_address_conversion test: swap stack index expectations

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude (Opus) <noreply@anthropic.com>
Co-authored-by: Bobbin Threadbare <43513081+bobbinth@users.noreply.github.com>
Co-authored-by: Philipp Gackstatter <PhilippGackstatter@users.noreply.github.com>
Co-authored-by: Bobbin Threadbare <bobbinth@protonmail.com>

* feat: make `Ownable2Step` an `AccountComponent` (#2572)

* feat: add `from_parts_unchecked()` method for `InputNoteCommitment` (#2588)

* feat: support bool types on schemas (#2591)

* fix: move recompute logic to `OutputNoteBuilder::add_asset` to avoid repeated hashing (#2577)

* fix: move recompute logic to OutputNoteBuilder::add_asset to avoid rehashing

* changelog and lint

* chore: add `NoteAssets::into_vec`

---------

Co-authored-by: Bobbin Threadbare <43513081+bobbinth@users.noreply.github.com>
Co-authored-by: Philipp Gackstatter <PhilippGackstatter@users.noreply.github.com>

* feat: expose `AccountComponentMetadata` through public method (#2596)

* fix: `TokenSymbol::try_from(Felt)` underflow (#2568)

* feat: implement asset callback support in tx kernel (#2571)

* feat: implement `on_before_asset_added_to_note` callback (#2595)

* feat: add support for callbacks in non-fungible assets

* chore: add test for block list note callback

* feat: implement `on_before_asset_added_to_note` callback

* chore: add test to make sure inputs are received correctly

* chore: deduplicate test setup code

* chore: add changelog

* fix: non-fungible asset delta not including asset metadata

* chore: deduplicate callback invocation procedures

* chore: deduplicate blocked account test

* chore: deduplicate note callback test

* chore: test empty callback proc root slot

* chore: Introduce `end_foreign_callback_context`

* feat: validate asset metadata (#2609)

* feat: flexible Minting Policies for Token Standards (#2559)

* refactor: move storage schema component into a separate file (#2603)

* feat: add `Package` support in `MockChainBuilder` & `NoteScript` (#2502)

* feat: introduce `SwapNoteStorage` (#2592)

* feat: add callback docs (#2604)

* feat: add hooks to enable TX debugging (#2574)

* Migrate to Miden VM `v0.22.0-alpha.1` (#2625)

* refactor: update RandomCoin, use position of LeafIndex

* chore: update deny file

* chore: use version from crates.io, update deny file

* fix: swap FAUCET_ID_SUFFIX/PREFIX constants in CONFIG_AGG_BRIDGE

The constants FAUCET_ID_SUFFIX and FAUCET_ID_PREFIX were swapped
relative to the actual storage layout in config_note.rs (suffix at
index 5, prefix at index 6). This caused register_faucet to store
with a mismatched key, so lookups returned empty.

Also fix the misleading doc comment in config_note.rs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* lint

* fix: use Ownable2Step and OwnerControlled components for agglayer faucet

The NetworkFungibleFaucet's mint_and_send now requires Ownable2Step
for ownership verification and OwnerControlled for mint policy
management. Migrate the agglayer faucet from a custom owner_config
storage slot to these standard components:

- Remove bridge_account_id from AggLayerFaucet (ownership is now
  handled by the Ownable2Step component)
- Add Ownable2Step and OwnerControlled as companion components in
  the faucet account builder
- Use Ownable2Step::try_from_storage to extract the owner in
  bridge_account_id() helper

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: include Ownable2Step and OwnerControlled in faucet code commitment

The build.rs computes the faucet code commitment for validation checks.
After adding Ownable2Step and OwnerControlled as companion components,
the code commitment must include their procedures.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: use mem_storew_le for MINT note storage in bridge_in

The MINT note script reads storage with mem_loadw_le (LE convention),
so the bridge must store the P2ID script root, serial number, and
attachment data using mem_storew_le to match. Using mem_storew_be
caused the P2ID script root hash to be stored with reversed elements,
making it unresolvable by the kernel.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: bridge_in endianness + clippy warnings

- Use mem_storew_le for MINT note storage in bridge_in.masm to match
  the MINT note script's mem_loadw_le reads (VM 0.21 byte-endianness).
- Add MintNote::script() to bridge_in TX3 context.
- Fix clippy useless_conversion warnings in bridge.rs.
- Formatting fix in faucet.rs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: add `FixedWidthString<N>` utility  (#2633)

* Update crates/miden-agglayer/src/bridge.rs

* chore: fix padding comments

* chore: add owner controlled slot names to faucet

---------

Co-authored-by: Philipp Gackstatter <PhilippGackstatter@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Bobbin Threadbare <bobbinth@protonmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: igamigo <ignacio.amigo@lambdaclass.com>
Co-authored-by: Forostovec <ilonaforostovec22@gmail.com>
Co-authored-by: Nikhil Patil <nikhil876706@gmail.com>
Co-authored-by: Bobbin Threadbare <43513081+bobbinth@users.noreply.github.com>
Co-authored-by: Santiago Pittella <87827390+SantiagoPittella@users.noreply.github.com>
Co-authored-by: Serge Radinovich <47865535+sergerad@users.noreply.github.com>
Co-authored-by: Percy Dikec <112529374+PercyDikec@users.noreply.github.com>
Co-authored-by: onurinanc <e191322@metu.edu.tr>
Co-authored-by: Himess <95512809+Himess@users.noreply.github.com>
Co-authored-by: Arthur Abeilice <afa7789@gmail.com>
Co-authored-by: Poulav <bpoulav@gmail.com>
Co-authored-by: juan518munoz <62400508+juan518munoz@users.noreply.github.com>
Co-authored-by: Tomas Fabrizio Orsi <tomas.orsi@lambdaclass.com>
Co-authored-by: djole <djolertrk@gmail.com>
Co-authored-by: Andrey Khmuro <andrey@polygon.technology>
chore: Record `next` merge into `agglayer` branch
chore: bring changes from v0.14.0-beta into `next`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-from-maintainers PRs that come from internal contributors or integration partners. They should be given priority

Projects

None yet

Development

Successfully merging this pull request may close these issues.