Features
- Added single-word
Arraystandard (#2203). - Added
SignedBlockstruct (#2355). - Enabled
CodeBuilderto add advice map entries to compiled scripts (#2275). - Implemented verification of AggLayer deposits (claims) against GER (#2288, #2295).
- Added
Ownable2Stepaccount component with two-step ownership transfer (transfer_ownership,accept_ownership,renounce_ownership) andowner,nominated_ownerprocedures (#2292). - Added double-word array data structure abstraction over storage maps (#2299).
- Added
BlockNumber::MAXconstant to represent the maximum block number (#2324). - Introduced
TokenMetadatatype to encapsulate fungible faucet metadata (#2344). - Added
PackageKindandProcedureExport(#2358). - Added
AccountTargetNetworkNotetype andNetworkNoteExttrait withis_network_note()/as_account_target_network_note()helpers (#2365). - [BREAKING] Added
get_assetandget_initial_assetkernel procedures and removedget_balance,get_initial_balanceandhas_non_fungible_assetkernel procedures (#2369). - Added
p2id::newMASM constructor procedure for creating P2ID notes from MASM code (#2381). - Implemented
assert_valid_gerprocedure for verifying GER against storage (#2388). - Added
P2idNoteStorageandP2ideNoteStorage(#2389). - Added
StandardNote::from_script_root()andStandardNote::name()methods, and exposedNoteTypePUBLIC/PRIVATEmasks as public constants (#2411). - Resolve standard note scripts directly in
TransactionExecutorHostinstead of querying the data store (#2417). - Added AggLayer faucet registry to bridge account with conversion metadata,
CONFIG_AGG_BRIDGEnote for faucet registration, and FPI-based asset conversion inbridge_out(#2426). - Added
DEFAULT_TAGconstant tomiden::standards::note_tagMASM module (#2482). - Added
NoteExecutionHintvariant constants (NONE,ALWAYS,AFTER_BLOCK,ON_BLOCK_SLOT) tomiden::standards::note::execution_hintMASM module (#2493). - Added
Packagesupport inMockChainBuilder&NoteScript(#2502). - Added PSM authentication procedures and integrated them into
AuthMultisig(#2527). - Added
CodeBuilder::with_warnings_as_errors()to promote assembler warning diagnostics to errors (#2558). - Added
MintPolicyConfigfor flexible minting policy enforcement (#2559) - Added
MockChain::add_pending_batch()to allow submitting user batches directly (#2565). - Implemented the
on_before_asset_added_to_accountasset callback (#2571). - Added
ProgramExecutorhooks to support DAP and other custom transaction program executors (#2574). - Added
create_fungible_keyfor construction of fungible asset keys (#2575). - Added metadata hash storage to AggLayer faucet and FPI retrieval during bridge-out leaf construction (#2583).
- Added
SwapNoteStoragefor typed serialization/deserialization of SWAP note storage (#2585). - Added
InputNoteCommitment::from_parts()for construction of input note commitments from a nullifier and optional note header (#2588). - Added
boolschema type to the type registry and updated ACL auth component to use it for boolean config fields (#2591). - Implemented the
on_before_asset_added_to_noteasset callback (#2595). - Added
component_metadata()to all account components to expose their metadata (#2596). - [BREAKING] Changed
native_account::remove_assetto return the asset value remaining in the vault instead of the removed value (#2626). - Implemented
TransactionEventId::event_nameandHost::resolve_eventfor better VM diagnostics during even handler failures (#2628). - Added
FixedWidthStringfor fixed-width UTF-8 string storage inmiden-standards(miden::standards::utils::string). (#2633)
Changes
- [BREAKING] Renamed
NoteInputstoNoteStorageto better reflect that values are stored data associated with a note rather than inputs (#1662, #2316). - Introduced NOTE_MAX_SIZE (256 KiB) and enforce it on individual output notes (#2205, #2651).
- Restructured
miden-agglayer/asmdirectory to separate bridge and faucet into per-component libraries, preventing cross-component procedure exposure (#2294). - Skip requests to the
DataStorefor asset vault witnesses which are already in transaction inputs (#2298). - [BREAKING] Refactored
TransactionAuthenticator::get_public_key()method to returnArc<PublicKey>instead of&PublicKey(#2304). - Removed
NoteType::Encrypted(#2315). - [BREAKING] Updated note tag length to support up to 32 bits (#2329).
- [BREAKING] Renamed
WellKnownComponenttoStandardAccountComponent,WellKnownNotetoStandardNote, andWellKnownNoteAttachmenttoStandardNoteAttachment(#2332). - Added B2AGG and UPDATE_GER note attachment target checks (#2334).
- Removed protocol-reserved faucet sysdata storage slot (#2335).
- [BREAKING] Moved standard note code into individual note modules (#2363).
- [BREAKING] Prefixed transaction kernel events with
miden::protocol(#2364). - [BREAKING] Added
miden::standards::note_tagmodule for account target note tags (#2366). - [BREAKING] Made
AccountComponentMetadataa required parameter ofAccountComponent::new(); removedwith_supported_type,with_supports_all_types, andwith_metadatamethods fromAccountComponent; simplifiedAccountComponentMetadata::new()to take justname; renamedAccountComponentTemplateErrortoComponentMetadataError(#2373, #2395). - [BREAKING] Changed note scripts to be compiled as libraries with
@note_scriptannotation for marking the entrypoint procedure (#2339, #2374). - Made kernel procedure offset constants public and replaced accessor procedures with direct constant usage (#2375).
- Removed redundant note storage item count from advice map (#2376).
- Added
miden::protocol::authmodule with public auth event constants (#2377). - Moved
NoteExecutionHinttomiden-standards(#2378). - [BREAKING] Simplified
NoteMetadata::new()constructor to not require tag parameter; tag defaults to zero and can be set viawith_tag()builder method (#2384). - Unified the underlying representation of
ExitRootandSmtNodeand use type aliases (#2387). - Changed GER storage to a map (#2388).
- [BREAKING] Consolidated authentication components ([#2390] (#2390))
- [BREAKING] Refactored assets in the tx kernel and
miden::protocolfrom one to two words, i.e.ASSETbecomesASSET_KEYandASSET_VALUE(#2396, #2410). - Fixed MASM inline comment casing to adhere to commenting conventions (#2398).
- Prefixed standard account component names with
miden::standards::components(#2400). - Replaced auth event constant workarounds with direct imports now that
miden-assemblyv0.20.6 supports it (#2404). - [BREAKING] Moved padding to the end of
CLAIMNoteStoragelayout (#2405). - [BREAKING] Renamed
miden::protocol::asset::build_fungible_assettomiden::protocol::asset::create_fungible_asset(#2410). - [BREAKING] Renamed
miden::protocol::asset::build_non_fungible_assettomiden::protocol::asset::create_non_fungible_asset(#2410). - Updated account schema commitment construction to accept borrowed schema iterators; added extension trait to enable
AccountBuilder::with_schema_commitment()helper (#2419). - Increased
TokenSymbolmax allowed length from 6 to 12 uppercase characters (#2420). - Introduced
StorageMapKeyandStorageMapKeyHashWord wrappers for type-safe storage map key handling (#2431). - [BREAKING] Changed the layout of fungible and non-fungible assets (#2437).
- [BREAKING] Refactored account ID and nonce memory and advice stack layout (#2442).
- [BREAKING] Removed
hash_account(#2442). - [BREAKING] Renamed
AccountHeader::commitment,Account::commitmentandPartialAccount::commitmenttoto_commitment(#2442). - [BREAKING] Remove
BlockSignertrait (#2447). - [BREAKING] Fixed
TokenSymbol::try_from(Felt)to reject values belowMIN_ENCODED_VALUE; implementedDisplayforTokenSymbolreplacing the fallibleto_string()method; removedDefaultderive (#2464). - [BREAKING] Renamed
SchemaTypeIdtoSchemaType(#2494). - Introduced a dedicated AccountIdKey type to unify and centralize all AccountId → SMT and advice-map key conversions (#2495).
- Updated stale
miden-basereferences toprotocolacross docs, READMEs, code comments, and Cargo.toml repository URL (#2503). - [BREAKING] The native hash function changed from RPO256 to Poseidon2 - see PR description (#2508).
- [BREAKING] Migrated to miden-vm 0.21 and miden-crypto 0.22 (#2508).
- [BREAKING] The stack orientation changed from big-endian to little-endian - see PR description (#2508).
- [BREAKING] Reverse the order of the transaction summary on the stack (#2512).
- [BREAKING] Use
@auth_scriptMASM attribute instead ofauth_prefix to identify authentication procedures in account components (#2534). - [BREAKING] Made
supported_typesa required parameter ofAccountComponentMetadata::new(); removedwith_supported_type,with_supported_types,with_supports_all_types, andwith_supports_regular_typesbuilder methods; addedAccountType::all()andAccountType::regular()helpers (#2554). - Fixed link map entry pointer validation bypass (#2556).
- Fixed overlap in initial and active account storage slot memory region (#2557).
- [BREAKING] Removed
NoteAssets::add_asset;OutputNoteBuildernow accumulates assets in aVecand computes the commitment only whenbuild()is called, avoiding rehashing on every asset addition. (#2577). - Added foreign account ID assertion in
account::load_foreign_account(#2560). - Made
NoteMetadataHeaderandNoteMetadata::to_header()public, addedNoteMetadata::from_header()constructor, and exportedNoteMetadataHeaderfrom thenotemodule (#2561). - [BREAKING] Removed
ProvenTransactionBuilderin favor ofProvenTransaction::new()constructor (#2567). - [BREAKING] Renamed
AccountComponent::get_procedures()toprocedures(), returningimpl Iterator<Item = (AccountProcedureRoot, bool)>(#2597). - Moved
AccountSchemaCommitmentcomponent into a sub-module (#2603). - [BREAKING] Separated
EthAddress(plain 20-byte Ethereum address) andEthEmbeddedAccountId(Miden AccountId encoded as Ethereum address) into distinct types, replacing the singleEthAddressFormatstruct. (#2622). - [BREAKING]
miden::protocol::faucet::burnno longer returns the burnt asset value (#2626). - [BREAKING]
AssetVault::remove_assetreturns the asset value remaining in the vaultOption<Asset>rather than the removed valueAsset(#2626). - [BREAKING] Renamed
MMR FrontiertoMerkle Tree Frontier (MTF), module was renamed frommmr_frontier32_keccaktomerkle_tree_frontier(#2642). - Migrated to miden-vm v0.22 and miden-crypto v0.23 (#2644).
- Removed unnecessary
LexicographicWordwrapper fromStorageMapDeltaandLinkMapoperations sinceWordnow implements the same ordering (#2662). - [BREAKING] Renamed
NoteLocation::node_index_in_blocktoNoteLocation::block_note_tree_index(#2663). - [BREAKING] Made fields of
TransactionOutputsprivate (#2663). - [BREAKING] Renamed
NoteHeader::commitmenttoNoteHeader::to_commitment(#2663). - [BREAKING] Changed
TransactionIdto include fee asset in hash computation, making it commit to entireTransactionHeadercontents. - Explicitly use
get_native_account_active_storage_slots_ptrinaccount::set_itemandaccount::set_map_item. - [BREAKING] Introduced
PrivateNoteHeaderfor output notes and removedRawOutputNote::Headervariant (#2569). - [BREAKING] Changed
asset::create_fungible_assetandfaucet::create_fungible_assetsignature to takeenable_callbacksflag (#2571). - Added Ownable2Step as an Account Component (#2572).
Fixes
- Fixed
PartialAccountTree::track_accountrejecting provably-empty leaves in sparse trees by handlingSmtLeaf::Emptycorrectly (#2598).