You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Features
Added the AuthTxFeeCollector auth component, which forwards the single asset of every consumed note into one P2ID note for the target given by the auth args, verifies a signature over the transaction summary and leaves the account unchanged (#3844).
Added active_note::get_storage_info and active_note::get_bounded_storage, and switched the standard and agglayer note scripts with a bounded storage layout over to the latter (#3563).
[BREAKING] AggLayer bridge and faucet accounts now map note repricing to an initial FEE_MNGR role instead of the built-in ADMIN role (#3571).
[BREAKING] AggLayer bridge accounts now map emergency pause to an initial PAUSER role, while unpause remains restricted to ADMIN (#3572).
Added the block kernel skeleton, establishing its public input/output contract and the BlockExecutor that runs it (#3703).
Added the miden-objects crate with canonical, no_std-compatible Protobuf representations and validated conversions for protocol objects exchanged between clients and nodes (#3707).
Added canonical Protobuf representations and validated conversions for TransactionInputs (#3776).
[BREAKING] Added EIP-712 transaction-summary signatures for ECDSA approvers to the multisig, multisig_smart, and guarded_multisig authentication components (#3856).
Added LocalTransactionProver::with_execution_options to configure the ExecutionOptions used while proving (#3860).
Added BlockExecutor::with_execution_options and BatchExecutor::with_execution_options to configure the ExecutionOptions used while running the batch and block kernels (#3862).
Added HashMap and BTreeMap field decoding in miden-protobuf, including message and enum values with map keys preserved in conversion errors (#3870).
Added boxed/recursive message decoding and generated oneof into_<variant>() accessors, and optional tonic integration through ConversionError::into_status() in miden-protobuf (#3871).
Added MockChainBuilder::validator_signing_keys in miden-testing to supply validator keys for genesis and subsequent block signing. The default remains three randomly generated validators.
Added TransactionEffects, which captures the effects of an executed transaction without the inputs required to re-execute it, together with its canonical Protobuf representation (#3891).
Added canonical Protobuf representations for Account, AccountStorage, StorageSlot, StorageMap and AssetVault (#3915).
Added miden::protocol::output_note::seal to prevent further asset and attachment changes to an output note and is_sealed to query its sealing state (#3923).
[BREAKING] Added account code upgrades via native_account::upgrade and made account patch and delta commitments cover the code, so code in a patch or delta no longer implies a new account (#3949).
Added the UpgradeNote standard note, which upgrades a network account's code to the code it carries in an attachment (#3958).
UpgradeNote now carries its code in one or more AccountCodeUpgradeAttachment chunks and its script copies the code to the advice map (#3967).
[BREAKING] TX_FEE notes leave their assets in the note for the consuming account's own code to collect (#3843).
Moved MAX_ASSETS_PER_NOTE into miden::protocol_utils::constants (#3821).
[BREAKING] Added a serial_number_block argument to fee::pay_fee and fee::create_and_fund_fee_note. Multisigs use the signed proposal block to keep fee-note serial numbers stable across execution reference blocks; other standard auth components use the execution reference block (#3836).
Added a check that the guardian public key is not one of the approver public keys (#3764).
[BREAKING] Updated the Miden VM and crypto crate family to v0.31.0 and midenc-hir-type to v0.13.0. Execution proofs now include a format version and compatible VM and PVM verifier roots, and protocol deserialization rejects unversioned proof bytes from earlier releases. Verifier outcomes now report separate VM and precompile security parameters (#3806).
[BREAKING] Updated the Miden VM and crypto crate family to v0.30.0 and midenc-hir-type to v0.12.0. LocalTransactionProver::new now takes miden_prover::Prover, CoreLibrary exposes one merged package, and TransactionVerifier::verify now returns VerificationOutcome so callers can handle outstanding precompile work (#3782).
[BREAKING] Removed the BlockProof placeholder in favor of ExecutionProof on ProvenBlock, matching ProvenTransaction and ProvenBatch, and LocalBlockProver::prove now takes an ExecutedBlock (#3703).
Added the miden::protocol::tx::before_block_witness_load kernel event, emitted before a block other than the reference block is read from the partial blockchain (#3699).
[BREAKING] Renamed the config note dispatch selector to the note variant; the config note script roots change (#3838).
Fixed RoleBasedAccessControl role administration becoming permanently unmanageable when a role's admin was delegated to a memberless role (#3476).
[BREAKING] Moved the note_tag MASM module from miden::standards::note_tag to miden::standards::note::note_tag (#3473).
[BREAKING] Moved the note_creator account component MASM namespace from miden::standards::components::wallets::note_creator to miden::standards::components::note::note_creator, and moved the Rust NoteCreator type from account::wallets to account::note_creator (#3473).
[BREAKING] Refactored AccountVaultDelta to track generic assets. FungibleAssetDelta, NonFungibleAssetDelta and NonFungibleDeltaAction were removed (#3485).
[BREAKING] Moved the internal shared helpers of miden::protocol::input_note, miden::protocol::active_note, and the note memory-write helpers into private input_note_internal and note_internal modules (#3501).
[BREAKING] Mint policies can no longer modify the output note's tag, note_type, or RECIPIENT#3760.
[BREAKING] Changed asset callbacks into validation-only interfaces that return no asset value; the transaction kernel retains and uses the original value, preventing callbacks from modifying it. The kernel commitment changes (#3505, #3513).
[BREAKING] Added the miden::standards::expiration MASM module with apply_default and used it to apply a default 20-block transaction expiration limit to the standard allowlist and blocklist transfer policies and the fee manager's estimate_note_fee procedure (#3512).
[BREAKING] Extracted the shared MastForestScript type and MastForestScriptError backing NoteScript / TransactionScript, moving TransactionScript into transaction::script (#3516).
Documented the RBAC freeze-only actor pattern on Authority and added test coverage pinning that a FREEZER can trip the emergency switch but can never unfreeze the account (#3520).
[BREAKING] Replaced the dedicated AggLayer faucet account component with the standard FungibleFaucet. AggLayerFaucet is now a stateless namespace, AgglayerFaucetError and the miden-agglayer-faucet MASM package were removed, AggLayerFaucet::account_builder and create_existing_agglayer_faucet take a token name, and account_builder now takes TokenName / TokenSymbol / AssetAmount rather than &str / Felt (#3525).
[BREAKING] Updated NoteScript::from_package and TransactionScript::from_package to reject executable packages with the new MastForestScriptError::ExecutablePackage, so scripts are identified only by their @note_script / @transaction_script attribute (#3528).
[BREAKING] Updated AccountComponent::from_package to take Package by value (#3528).
[BREAKING] NoteScript::from_parts and TransactionScript::from_parts now return a Result instead of panicking when the specified entrypoint is not in the provided MAST forest (#3548).
[BREAKING] Sorted the procedures of AccountCode after the authentication procedure at index 0, making the account code commitment independent of the order in which components are provided (#3565).
The transaction kernel now validates that a new account's procedures are sorted and unique (#3567).
[BREAKING] Renamed the fungible asset amount extraction procedures so the unsuffixed name is the validating one (#3576):
miden::standards::assets::fungible_asset::value_into_amount to value_into_amount_unchecked.
to_amount to to_amount_unchecked.
try_value_to_amount to value_into_amount.
[BREAKING] AggLayer bridge and faucet account builders now take a concrete BasicConstantFeePolicy and fee faucet ID, constructing their FeePolicyManager internally (#3583).
[BREAKING] The transaction kernel no longer requires assets with AssetComposition::None to have the non-fungible asset layout (#3624).
[BREAKING] Refactored Asset into a struct holding AssetId and AssetValue (#3625).
[BREAKING] Refactored the presence of an asset callback slot imply an enabled asset callback flag: the transaction kernel rejects new accounts that violate this and AccountBuilder derives the flag from the installed callback slots, replacing with_asset_callbacks with enable_asset_callbacks (#3658).
Moved the transaction kernel API procedures into the kernel's api submodule, leaving exec_kernel_proc as the only syscall-invocable kernel procedure (#3646).
Documented that standard note scripts claim only the assets remaining in a note at consumption time (#3650).
[BREAKING] Moved the kernel data section of the transaction kernel memory to address 0, so that exec_kernel_proc becomes reusable across multiple kernels (#3655).
[BREAKING] The account now carries an 8-bit version (#3662).
[BREAKING] Added a 4-bit version to the lowest bits of the asset ID's metadata byte, moving the asset composition to bits 4-5 (#3670).
[BREAKING] Widened the note metadata version field from 4 to 6 bits, moving the note type to bit 6 (#3696).
[BREAKING] Narrowed the block header version field from 32 to 8 bits and set it to the only supported version instead of taking it as a BlockHeader::new parameter (#3696).
[BREAKING] Serialize the version in Account, AccountHeader, PartialNoteMetadata and AssetId (#3697).
[BREAKING] Moved the account delta and patch domain separators into the hasher capacity word. Added a version to their commitments (#3698).
Added the miden::protocol::tx::before_block_witness_load kernel event, emitted before a block other than the reference block is read from the partial blockchain (#3699).
[BREAKING] tx::get_block_commitment now takes the block number to read. Its direct replacement is get_reference_block_commitment. tx::get_block_number was renamed to tx::get_reference_block_number (#3699).
[BREAKING] The transaction summary gained a version and the bound block number, reducing the number of user parameters from seven to six (#3699).
[BREAKING] Removed the BlockProof placeholder in favor of ExecutionProof on ProvenBlock, matching ProvenTransaction and ProvenBatch, and LocalBlockProver::prove now takes an ExecutedBlock (#3703).
[BREAKING] Added structurally validating constructors for BatchAccountUpdate, ProvenBatch, BlockAccountUpdate, and BlockBody (#3706).
[BREAKING] Introduced ProtocolConfig that commits to all kernel's procedures, the fee asset ID and the security policy for recursive verification (#3725).
[BREAKING] Renamed ValidatorKeys to ValidatorConfig and added a quorum to it (#3725).
[BREAKING] The multisig authentication components now bind a caller-chosen block instead of the transaction reference block, so approver signatures stay valid while the chain advances (#3731).
[BREAKING] Multisig approvals now expire relative to the block the transaction summary binds, so a transaction that is executed against a later reference block keeps the deadline the approvers signed (#3737).
[BREAKING] Replaced tx::get_fee_faucet_id with tx::get_fee_asset_id (#3741).
The transaction kernel now validates the version and reserved bit of every input note's metadata (#3743).
[BREAKING] FeeSponsorshipNote is now parsed back from a Note with TryFrom<&Note>, carries a fungible fee asset, and replaces its target_id accessor with tag (#3746).
[BREAKING] Moved the MINT note scripts under a single miden::standards::notes::mint module, replacing notes::mint_fungible and notes::mint_non_fungible with the private mint::fungible and mint::non_fungible submodules (#3751).
[BREAKING] fee::pay_fee now requires the committed conversion info to name the reference block's fee asset at rate 1/1, so the transaction fee is always paid in the native asset at the computed amount (#3763).
Added a check that the guardian public key is not one of the approver public keys (#3764).
[BREAKING] Moved the config note types into the note::config module, so miden_standards::note::PauseConfigNote and its siblings are now miden_standards::note::config::PauseConfigNote (#3779).
[BREAKING] Replaced StandardNote::expected_num_storage_items with StandardNote::num_storage_items, which returns the NumStorageItems a note kind accepts instead of a single value that was neither exact nor a bound for MINT and the config notes, whose storage size constants are now typed as NumStorageItems (#3810).
[BREAKING] Updated the Miden VM and crypto crate family from v0.29.4 to v0.32.0. The cumulative update gives CoreLibrary one merged package, makes LocalTransactionProver::new take miden_prover::Prover, makes TransactionVerifier::verify return VerificationOutcome, adds a format version and compatible VM and PVM verifier roots to execution proof bytes, reports separate VM and precompile security parameters, and moves all Plonky3 dependencies to v0.7.0 (#3782, #3806, #3813).
Added type signatures where missing throughout the protocol and standards Miden Assembly libraries (#3818).
[BREAKING] Every note script now states who may consume it on a Consumers: line and enforces that through the new miden::standards::note::note_target and miden::standards::note::note_reclaim modules, whose shared error constants replace the per-note target-account and reclaim ones (#3820).
Improved Protobuf conversion ergonomics with decode_and_verify, decode_and_verify_with, and decode_and_build_unchecked helpers, combining field decoding and domain construction without repetitive error mapping (#3857).
Disabled asset callbacks on all AggLayer faucets by omitting their unrestricted send and receive policies (#3865).
[BREAKING] Decoded optional, repeated, and map fields now use OptionalField, RepeatedField, and MapField wrappers. These compose verification and unchecked construction, preserve field/index/key context during conversion, and require an explicit duplicate policy when converting to sets. Migrated miden-objects to this collection API (#3870).
[BREAKING] Multisig approvals now expire through the dedicated MultisigAuthArgs::with_approval_expiration_delta (#3884).
[BREAKING] Expanded P2ID note storage to include two salt elements, defaulting to zero, and updated AggLayer MINT outputs to use the four-element layout (#3887).
[BREAKING] AuthNetworkAccount now expands into BasicWallet as well and AuthNetworkAccount::new allowlists the P2ID script root by default, so every network account built with AuthNetworkAccount::new can be deployed by consuming a P2ID note (#3893).
[BREAKING] Updated the Miden VM and crypto crate family to v0.33.0. Execution proof and witness transport now use format 2 and reject v0.32.1 artifacts. Deferred proofs carry portable precompile witnesses, batch proving consumes those witnesses in transaction order, and recursive verifier MAST roots change. Routing parameters now support the Eidos sealing-key variants (#3894).
[BREAKING] Removed the Serializable and Deserializable implementations for ProposedBatch in favor of its protobuf encoding, which verifies the transactions' proofs (#3895).
[BREAKING] Moved miden::protocol::active_account::compute_commitment to miden::protocol::native_account::compute_commitment and restricted it to native-account context (#3908).
[BREAKING] Moved AccountFile from miden-protocol and NoteFile from miden-standards into miden-objects and switched both to Protobuf serialization (#3915).
[BREAKING] StorageMap now drops an entry whose value is empty, which the sparse Merkle tree already treats as absent, so a removed RBAC role no longer fails account reconstruction, and reports an overfull leaf through the new StorageMapError::MaxLeafEntriesExceeded instead of panicking (#3916).
[BREAKING] Linked standard and AggLayer account components dynamically against their libraries (#3925).
Switched the Protobuf MastForest encoding to the hashless format, which roughly halves the size of AccountCode on the wire (#3926).
[BREAKING] Added the version field to the Protobuf PartialAccount message, matching Account (#3933).
[BREAKING] Upgraded Miden VM and crypto from v0.33.0 to v0.34.0, including Plonky3 v0.8.0 and updated VM AIR and recursive verifier roots. Falcon key generation now requires a CryptoRng (#3952).
[BREAKING] AccountCode, NoteScript and TransactionScript now serialize their MAST forest in the hashless format and NoteScript element conversions became NoteScript::{to_elements, try_from_elements} (#3961).
[BREAKING] The USDCx burn policy now rejects burns the withdrawal attester cannot pay out, and the USDCx burn attachment scheme is now 5 (#3983).
Documented that procedure thresholds below the default in the multisig auth components also authorize changes to the procedure's output notes, and recommended sealing them (#3985).
[BREAKING] Extracted the Protobuf MMR representation from PartialBlockchain into a standalone primitives.PartialMmr message.
[BREAKING] Upgraded miden-vm dependencies to v0.35.
[BREAKING] Incremented the MSRV to 1.98.1.
Fixes
The faucet factories now reject a TokenPolicyManager whose policies read a storage slot the account does not install (#3527).
Fixed AuthNetworkAccount accepting empty fee-only transactions, which let callers drain the account's native fee-asset vault (#3729).
[BREAKING] NoteConsumptionChecker now tests notes that can only be consumed together, such as a feature note and its FEE_SPONSORSHIP notes, as one unit, and FailedNote reports a NoteFailure instead of a bare error (#3801).
LocalTransactionProver now leaves precompile claims deferred for the batch prover to settle, instead of proving them per transaction (#3851).
The batch executor now merges the deferred precompile witnesses of its transactions so the batch prover settles them with a single precompile proof (#3859).
Fixed PSWAP output mutation after fills by validating and sealing payback and remainder notes (#3927).
[BREAKING] AuthGuardedMultisig now pays the transaction fee (#3931).
Fixed a panic when verifying a Protobuf MerklePath or PartialMmr with a path longer than 255 nodes (#3970).
[BREAKING] Transaction host creation now returns an error instead of panicking when a new account's partial storage is missing a storage map (#3971).
[BREAKING] Fixed ProposedBlock rejecting account updates when a later batch contains multiple transactions for the same account (#3973).