Skip to content

v0.15.0

Choose a tag to compare

@bobbinth bobbinth released this 22 May 20:32
· 18 commits to main since this release
21e3bea

Features

  • Added a FungibleTokenMetadata component supporting name, description, logo URI, and external links, along with MASM procedures for retrieving token metadata (get_token_metadata, get_max_supply, get_decimals, get_token_symbol). Also aligned fungible faucet token metadata with the standard by using the canonical storage slot, enabling compatibility with MASM metadata getters (#2439).
  • Added PSWAP (partial swap) note for decentralized partial-fill asset exchange with remainder note re-creation (#2636).
  • [BREAKING] Renamed NoteId to NoteDetailsCommitment, new NoteId struct now includes the NoteMetadata (#1731).
  • Added lock/unlock path for Miden-native tokens in the AggLayer bridge: is_native flag in faucet_registry_map, bridge-local faucet_metadata_map (replacing FPI to faucets for conversion data), and lock_asset / unlock_and_send procedures so the bridge holds native assets in its own vault instead of burn/mint via a faucet (#2771).
  • [BREAKING] Added support for multiple attachments per note (#2795, #2849):
  • [BREAKING] Removed AccountStorageMode::Network; network accounts are now identified via NetworkAccountNoteAllowlist (#2900).
  • Added PswapAttachment scheme and PswapNote::payback_note / remainder_note discovery helpers so creators can reconstruct private paybacks from on-chain commitments (#2909).
  • Added benchmark for ECDSA signed transaction (#2967).

Changes

  • Documented the miden::protocol::account_id module in the protocol library docs (#2607).
  • [BREAKING] Renamed procedure_digest! to procedure_root! and return AccountProcedureRoot instead of Word (#2621).
  • [BREAKING] Introduced AssetComposition and encoded composition in the asset vault key's metadata byte (#2631).
  • Added BlockNumber::saturating_sub() (#2660).
  • [BREAKING] Renamed ProvenBatch::new to new_unchecked (#2687).
  • Added ShortCapitalString type and related TokenSymbol and RoleSymbol types (#2690).
  • [BREAKING] Renamed the guarded multisig component-facing APIs from multisig_guardian / AuthMultisigGuardian to guarded_multisig / AuthGuardedMultisig, while retaining the guardian auth namespace and guardian-specific procedures.
  • Added shared ProcedurePolicy for AuthMultisig (#2670).
  • [BREAKING] Changed NoteType encoding from 2 bits to 1 and makes NoteType::Private the default (#2691).
  • [BREAKING] Renamed native_asset_id to fee_faucet_id (#2718).
  • Added AssetAmount wrapper type for validated fungible asset amounts (#2721).
  • Added validation of leaf type on CLAIM note processing to prevent message leaves from being processed as asset claims (#2730).
  • [BREAKING] Removed redundant outputs from kernel procedures: note::write_assets_to_memory, active_note::get_assets, input_note::get_assets, output_note::get_assets, active_note::get_storage, and faucet::mint no longer return values identical to their inputs (#2733).
  • Added metadata_into_note_type procedure to note.masm for extracting note type from metadata header (#2738).
  • [BREAKING] Reduced MAX_ASSETS_PER_NOTE from 255 to 64 and NOTE_MEM_SIZE from 3072 to 1024 (#2741).
  • [BREAKING] Stored origin_network in LE-packed format in AggLayer faucet storage (#2745).
  • Optimized B2AGG processing with selective load/save of Local Exit Tree frontier entries, halving frontier storage map syscalls (#2752).
  • [BREAKING] Renamed extract_sender_from_metadata to metadata_into_sender and extract_attachment_info_from_metadata to metadata_into_attachment_info in note.masm (#2758).
  • Updated SwapNote::build_tag to use 1-bit NoteType encoding, increasing script root bits from 14 to 15 (#2758).
  • Use number of storage slots from native account in account delta commitment computation (#2770).
  • [BREAKING] Added cycle counts to notes returned by NoteConsumptionInfo and removed public fields from related types (#2772).
  • Added TransactionScript::from_package() method to create TransactionScript from miden-mast-package::Package (#2779).
  • [BREAKING] Removed unused payback_attachment from SwapNoteStorage and attachment from MintNoteStorage (#2789).
  • Automatically enable concurrent feature in miden-tx for std context (#2791).
  • Added Pausable standard component with pause, unpause, is_paused procedures and on_before_asset_added_to_account, on_before_asset_added_to_note callbacks (#2793).
  • Added trace row counts to bench-tx.json (#2794).
  • [BREAKING] Renamed set_attachment to add_attachment, set_word_attachment to add_word_attachment, and set_array_attachment to add_array_attachment in miden::protocol::output_note (#2795, #2849).
  • Added foundations for AuthMultisigSmart (#2806).
  • Added tx::get_tx_script_root kernel procedure returning the root of the executed transaction script (empty word if no script was executed) (#2816).
  • Added AuthNetworkAccount auth component that rejects transactions which execute a tx script or consume input notes outside of a fixed allowlist of note script roots (#2817).
  • Added basic blocklist transfer policy with owner-managed admin (block_account/unblock_account) and runtime policy switching via the protocol-reserved asset callback slots ([#2820])(#2820).
  • [BREAKING] Renamed OwnerControlledBlocklist to BlocklistOwnerControlled.
  • Added basic allowlist transfer policy (default-deny dual of the blocklist) with owner-managed admin (allow_account/disallow_account) and runtime policy switching via the protocol-reserved asset callback slots.
  • Derive Hash implementation for StorageMapKey and StorageMapKeyHash to allow using those values as keys in containers (#2843).
  • [BREAKING] Replaced metadata_into_attachment_info with metadata_into_attachment_schemes in miden::protocol::note (#2795, #2849).
  • [BREAKING] All get_metadata procedures (active_note, input_note, output_note) no longer return attachments (#2795, #2849).
  • [BREAKING] Added NoteScriptRoot newtype wrapping note script roots (#2851).
  • Re-exported MIN_STACK_DEPTH from miden-processor (#2856).
  • [BREAKING] Renamed NoteId to NoteDetailsCommitment, new NoteId struct now includes the NoteMetadata (#2861).
  • Added metadata_into_tag helper for extracting the tag from metadata. This should be used instead of extracting the tag manually from the header (#2871).
  • [BREAKING] Renamed note::build_recipient_hash to note::compute_recipient and note::build_recipient to note::compute_and_store_recipient (#2875).
  • Added standardized NetworkAccountNoteAllowlist slot for detecting network accounts (#2883).
  • [BREAKING] Merged BasicFungibleFaucet and NetworkFungibleFaucet (#2890).
  • [BREAKING] Renamed NoteMetadata to PartialNoteMetadata and renamed NoteMetadataHeader to NoteMetadata (#2887).
  • [BREAKING] Renamed account ID version 0 to version 1 and made encoded version 0 invalid (#2842).
  • [BREAKING] Changed note metadata version 1 to encode as 1, leaving encoded version 0 invalid.
  • [BREAKING] Added NetworkAccount wrapper for convenient network account identification (#2915).
  • [BREAKING] Replaced the FungibleFaucetBuilder with a bon builder on FungibleFaucet (#2916).
  • [BREAKING] Removed StandardNote::is_compatible_with and AccountInterfaceExt::is_compatible_with (#2920).
  • [BREAKING] Introduced AccountComponentName string wrapper (#2621).
  • Added Authority account component (#2925).
  • [BREAKING] FungibleAsset::amount() and AssetVault::get_balance() now return AssetAmount (#2928).
  • [BREAKING] Upgraded miden-vm to v0.23 and miden-crypto to v0.25. Notable downstream changes: dropped the immediate form of adv_push in kernel and standards MASM, marked cross-module-referenced MASM constants and procedures pub, migrated to the split Host/BaseHost trait surface, renamed Felt::new call sites to the preserved-behavior Felt::new_unchecked, switched ecdsa_k256_keccak/eddsa_25519_sha512 SecretKey references to the new SigningKey/KeyExchangeKey types, and recomputed the kernel's EMPTY_SMT_ROOT constant for the Plonky3-aligned Poseidon2 and domain-separated SmtLeaf::hash (#2931).
  • [BREAKING] Removed AccountType and renamed AccountStorageMode to AccountType (#2939, #2942).
  • [BREAKING] Updated note nullifiers to include note metadata and attachments commitment (#2953).
  • Exposed token_config_slot_value on FungibleFaucet to allow reading the token config word directly from the account storage (#2954).

Fixes

  • Fixed auth components to use initial storage state for authentication (#2677).
  • Made deserialization of AccountCode more robust (#2788).
  • [BREAKING] Replaced NoAuth with the new AuthNetworkAccount auth component on the AggLayer bridge and AggLayer faucet, closing the forged-MINT attack surface where any transaction against the bridge could emit a bridge-authored MINT note (#2797, #2818).
  • Renamed the AggLayer faucet registry flag constant for clarity (#2812).
  • Fixed output_note::add_asset and output_note::set_attachment to no longer accept invalid note indices (#2824).
  • [BREAKING] Keyed the AggLayer faucet token registry by (origin_token_address, origin_network) instead of origin_token_address alone, preventing same-address cross-network mint collisions on CLAIM (#2860).
  • Validated PartialBlockchain invariants on deserialization (#2888).
  • Fixed set_procedure_threshold in the multisig auth component validating per-procedure overrides against initial num_approvers.
  • Bound MINT notes to their faucet (#2911).
  • Fixed LocalTransactionProver accumulating MastForest entries across prove() calls, causing capacity_overflow panics in WASM environments where linear memory fragmentation prevents subsequent allocations (#2918).
  • Fixed TokenPolicyManager::manager_storage_slots to register the protocol-reserved asset-callback storage slots whenever any transfer policy is configured (including TransferAllowAll), so every minted asset carries AssetCallbackFlag::Enabled and future set_send_policy / set_receive_policy switches apply uniformly to the entire circulating supply (#2946).
  • Fixed create_fungible_faucet leaving authority-gated setters unauthenticated under AccessControl::AuthControlled: the AuthSingleSigAcl trigger list now contains every authority-gated setter root (set_max_supply, set_description, set_logo_uri, set_external_link, set_mint_policy, set_burn_policy, set_send_policy, set_receive_policy) in addition to mint_and_send. (#2958).
  • [BREAKING] Added missing transaction ref_block_commitment validation in ProposedBatch::new (#2971).