From f1047ddd0bbb69415ed506380ad0153d741091c9 Mon Sep 17 00:00:00 2001 From: Marti Date: Sun, 1 Mar 2026 15:32:46 +0000 Subject: [PATCH] chore: update protocol to rev 3154a3 --- Cargo.lock | 72 +++++++++++++----- bin/network-monitor/src/deploy/wallet.rs | 8 +- bin/network-monitor/src/remote_prover.rs | 3 +- bin/remote-prover/src/server/tests.rs | 9 ++- bin/stress-test/src/seeding/mod.rs | 10 ++- .../src/db/models/queries/tests.rs | 9 ++- crates/store/Cargo.toml | 1 + crates/store/build.rs | 67 ++++++++++++++-- .../src/db/models/queries/accounts/tests.rs | 35 ++++++--- crates/store/src/db/tests.rs | 49 +++++++++--- crates/store/src/genesis/config/mod.rs | 12 +-- .../agglayer_faucet_eth.mac | Bin 17931 -> 11393 bytes .../agglayer_faucet_usdc.mac | Bin 17931 -> 11393 bytes .../samples/02-with-account-files/bridge.mac | Bin 17955 -> 19129 bytes crates/store/src/genesis/config/tests.rs | 19 +++-- crates/store/src/inner_forest/tests.rs | 9 ++- 16 files changed, 227 insertions(+), 76 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 402c1541f1..5119d2ae68 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1537,6 +1537,15 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8591b0bcc8a98a64310a2fae1bb3e9b8564dd10e381e6e28010fde8e8e8568db" +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "static_assertions", +] + [[package]] name = "fixedbitset" version = "0.5.7" @@ -2074,7 +2083,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.2", + "socket2 0.5.10", "system-configuration", "tokio", "tower-service", @@ -2620,7 +2629,7 @@ checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "miden-agglayer" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base?branch=next#0904e2c610ab49bf6ee13cf349c05c8621f23cd2" +source = "git+https://github.com/0xMiden/miden-base?branch=next#3154a371939125e5cc3faf39a7c42447db67584f" dependencies = [ "fs-err", "miden-assembly", @@ -2630,7 +2639,9 @@ dependencies = [ "miden-protocol", "miden-standards", "miden-utils-sync", + "primitive-types", "regex", + "thiserror 2.0.18", "walkdir", ] @@ -2689,7 +2700,7 @@ dependencies = [ [[package]] name = "miden-block-prover" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base?branch=next#0904e2c610ab49bf6ee13cf349c05c8621f23cd2" +source = "git+https://github.com/0xMiden/miden-base?branch=next#3154a371939125e5cc3faf39a7c42447db67584f" dependencies = [ "miden-protocol", "thiserror 2.0.18", @@ -3224,7 +3235,7 @@ dependencies = [ [[package]] name = "miden-protocol" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base?branch=next#0904e2c610ab49bf6ee13cf349c05c8621f23cd2" +source = "git+https://github.com/0xMiden/miden-base?branch=next#3154a371939125e5cc3faf39a7c42447db67584f" dependencies = [ "bech32", "fs-err", @@ -3254,7 +3265,7 @@ dependencies = [ [[package]] name = "miden-protocol-macros" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base?branch=next#0904e2c610ab49bf6ee13cf349c05c8621f23cd2" +source = "git+https://github.com/0xMiden/miden-base?branch=next#3154a371939125e5cc3faf39a7c42447db67584f" dependencies = [ "proc-macro2", "quote", @@ -3336,7 +3347,7 @@ dependencies = [ [[package]] name = "miden-standards" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base?branch=next#0904e2c610ab49bf6ee13cf349c05c8621f23cd2" +source = "git+https://github.com/0xMiden/miden-base?branch=next#3154a371939125e5cc3faf39a7c42447db67584f" dependencies = [ "fs-err", "miden-assembly", @@ -3353,7 +3364,7 @@ dependencies = [ [[package]] name = "miden-testing" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base?branch=next#0904e2c610ab49bf6ee13cf349c05c8621f23cd2" +source = "git+https://github.com/0xMiden/miden-base?branch=next#3154a371939125e5cc3faf39a7c42447db67584f" dependencies = [ "anyhow", "itertools 0.14.0", @@ -3376,7 +3387,7 @@ dependencies = [ [[package]] name = "miden-tx" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base?branch=next#0904e2c610ab49bf6ee13cf349c05c8621f23cd2" +source = "git+https://github.com/0xMiden/miden-base?branch=next#3154a371939125e5cc3faf39a7c42447db67584f" dependencies = [ "miden-processor", "miden-protocol", @@ -3389,7 +3400,7 @@ dependencies = [ [[package]] name = "miden-tx-batch-prover" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base?branch=next#0904e2c610ab49bf6ee13cf349c05c8621f23cd2" +source = "git+https://github.com/0xMiden/miden-base?branch=next#3154a371939125e5cc3faf39a7c42447db67584f" dependencies = [ "miden-protocol", "miden-tx", @@ -4014,6 +4025,16 @@ dependencies = [ "syn 2.0.114", ] +[[package]] +name = "primitive-types" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "721a1da530b5a2633218dc9f75713394c983c352be88d2d7c9ee85e2c4c21794" +dependencies = [ + "fixed-hash", + "uint", +] + [[package]] name = "proc-macro-crate" version = "3.4.0" @@ -4194,7 +4215,7 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls 0.23.36", - "socket2 0.6.2", + "socket2 0.5.10", "thiserror 2.0.18", "tokio", "tracing", @@ -4232,7 +4253,7 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.2", + "socket2 0.5.10", "tracing", "windows-sys 0.60.2", ] @@ -4541,7 +4562,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.4.15", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -5035,6 +5056,12 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + [[package]] name = "string_cache" version = "0.8.9" @@ -5812,6 +5839,18 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +[[package]] +name = "uint" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "909988d098b2f738727b161a106cfc7cab00c539c2687a8836f8e565976fb53e" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + [[package]] name = "unarray" version = "0.1.4" @@ -6259,15 +6298,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-sys" version = "0.60.2" diff --git a/bin/network-monitor/src/deploy/wallet.rs b/bin/network-monitor/src/deploy/wallet.rs index de687ab6d4..ba074a60f8 100644 --- a/bin/network-monitor/src/deploy/wallet.rs +++ b/bin/network-monitor/src/deploy/wallet.rs @@ -4,10 +4,10 @@ use std::path::Path; use anyhow::Result; use miden_node_utils::crypto::get_rpo_random_coin; -use miden_protocol::account::auth::AuthSecretKey; +use miden_protocol::account::auth::{AuthScheme, AuthSecretKey}; use miden_protocol::account::{Account, AccountFile, AccountStorageMode, AccountType}; use miden_protocol::crypto::dsa::falcon512_rpo::SecretKey; -use miden_standards::AuthScheme; +use miden_standards::AuthMethod; use miden_standards::account::wallets::create_basic_wallet; use rand::{Rng, SeedableRng}; use rand_chacha::ChaCha20Rng; @@ -22,7 +22,9 @@ use crate::COMPONENT; pub fn create_wallet_account() -> Result<(Account, SecretKey)> { let mut rng = ChaCha20Rng::from_seed(rand::random()); let secret_key = SecretKey::with_rng(&mut get_rpo_random_coin(&mut rng)); - let auth = AuthScheme::Falcon512Rpo { pub_key: secret_key.public_key().into() }; + let auth = AuthMethod::SingleSig { + approver: (secret_key.public_key().into(), AuthScheme::Falcon512Rpo), + }; let init_seed: [u8; 32] = rng.random(); let wallet_account = create_basic_wallet( diff --git a/bin/network-monitor/src/remote_prover.rs b/bin/network-monitor/src/remote_prover.rs index 791315d3b8..b103a60c42 100644 --- a/bin/network-monitor/src/remote_prover.rs +++ b/bin/network-monitor/src/remote_prover.rs @@ -8,6 +8,7 @@ use std::time::Duration; use anyhow::Context; use miden_node_proto::clients::{Builder as ClientBuilder, RemoteProverClient}; use miden_node_proto::generated as proto; +use miden_protocol::account::auth::AuthScheme; use miden_protocol::asset::{Asset, FungibleAsset}; use miden_protocol::note::NoteType; use miden_protocol::testing::account_id::{ACCOUNT_ID_PUBLIC_FUNGIBLE_FAUCET, ACCOUNT_ID_SENDER}; @@ -277,7 +278,7 @@ pub async fn generate_mock_transaction() -> anyhow::Result { // Create an account with basic authentication let account = mock_chain_builder - .add_existing_wallet(Auth::BasicAuth) + .add_existing_wallet(Auth::BasicAuth { auth_scheme: AuthScheme::Falcon512Rpo }) .context("Failed to add wallet to mock chain")?; // Create a fungible asset diff --git a/bin/remote-prover/src/server/tests.rs b/bin/remote-prover/src/server/tests.rs index 46bea96e7a..d51b5c1da3 100644 --- a/bin/remote-prover/src/server/tests.rs +++ b/bin/remote-prover/src/server/tests.rs @@ -5,6 +5,7 @@ use std::time::Duration; use assert_matches::assert_matches; use miden_protocol::MIN_PROOF_SECURITY_LEVEL; +use miden_protocol::account::auth::AuthScheme; use miden_protocol::asset::{Asset, FungibleAsset}; use miden_protocol::batch::{ProposedBatch, ProvenBatch}; use miden_protocol::note::NoteType; @@ -61,7 +62,9 @@ impl ProofRequest { async fn mock_tx() -> ExecutedTransaction { // Create a mock transaction to send to the server let mut mock_chain_builder = MockChainBuilder::new(); - let account = mock_chain_builder.add_existing_wallet(Auth::BasicAuth).unwrap(); + let account = mock_chain_builder + .add_existing_wallet(Auth::BasicAuth { auth_scheme: AuthScheme::Falcon512Rpo }) + .unwrap(); let fungible_asset_1: Asset = FungibleAsset::new(ACCOUNT_ID_PUBLIC_FUNGIBLE_FAUCET.try_into().unwrap(), 100) @@ -91,7 +94,9 @@ impl ProofRequest { async fn mock_batch() -> ProposedBatch { // Create a mock transaction to send to the server let mut mock_chain_builder = MockChainBuilder::new(); - let account = mock_chain_builder.add_existing_wallet(Auth::BasicAuth).unwrap(); + let account = mock_chain_builder + .add_existing_wallet(Auth::BasicAuth { auth_scheme: AuthScheme::Falcon512Rpo }) + .unwrap(); let fungible_asset_1: Asset = FungibleAsset::new(ACCOUNT_ID_PUBLIC_FUNGIBLE_FAUCET.try_into().unwrap(), 100) diff --git a/bin/stress-test/src/seeding/mod.rs b/bin/stress-test/src/seeding/mod.rs index 70cbf04fda..777ac993e7 100644 --- a/bin/stress-test/src/seeding/mod.rs +++ b/bin/stress-test/src/seeding/mod.rs @@ -10,6 +10,7 @@ use miden_node_proto::domain::batch::BatchInputs; use miden_node_proto::generated::store::rpc_client::RpcClient; use miden_node_store::{DataDirectory, GenesisState, Store}; use miden_node_utils::tracing::grpc::OtelInterceptor; +use miden_protocol::account::auth::AuthScheme; use miden_protocol::account::delta::AccountUpdateDetails; use miden_protocol::account::{ Account, @@ -46,7 +47,7 @@ use miden_protocol::transaction::{ }; use miden_protocol::utils::Serializable; use miden_protocol::{Felt, ONE, Word}; -use miden_standards::account::auth::AuthFalcon512Rpo; +use miden_standards::account::auth::AuthSingleSig; use miden_standards::account::faucets::BasicFungibleFaucet; use miden_standards::account::wallets::BasicWallet; use miden_standards::note::P2idNote; @@ -325,7 +326,7 @@ fn create_account(public_key: PublicKey, index: u64, storage_mode: AccountStorag AccountBuilder::new(init_seed.try_into().unwrap()) .account_type(AccountType::RegularAccountImmutableCode) .storage_mode(storage_mode) - .with_auth_component(AuthFalcon512Rpo::new(public_key.into())) + .with_auth_component(AuthSingleSig::new(public_key.into(), AuthScheme::Falcon512Rpo)) .with_component(BasicWallet) .build() .unwrap() @@ -343,7 +344,10 @@ fn create_faucet() -> Account { .account_type(AccountType::FungibleFaucet) .storage_mode(AccountStorageMode::Private) .with_component(BasicFungibleFaucet::new(token_symbol, 2, Felt::new(u64::MAX)).unwrap()) - .with_auth_component(AuthFalcon512Rpo::new(key_pair.public_key().into())) + .with_auth_component(AuthSingleSig::new( + key_pair.public_key().into(), + AuthScheme::Falcon512Rpo, + )) .build() .unwrap() } diff --git a/crates/ntx-builder/src/db/models/queries/tests.rs b/crates/ntx-builder/src/db/models/queries/tests.rs index 7bd9b2cfea..2b558a49da 100644 --- a/crates/ntx-builder/src/db/models/queries/tests.rs +++ b/crates/ntx-builder/src/db/models/queries/tests.rs @@ -540,9 +540,9 @@ fn note_script_insert_is_idempotent() { /// /// Uses `AccountBuilder` with minimal components needed for serialization. fn mock_account(_account_id: NetworkAccountId) -> miden_protocol::account::Account { - use miden_protocol::account::auth::PublicKeyCommitment; + use miden_protocol::account::auth::{AuthScheme, PublicKeyCommitment}; use miden_protocol::account::{AccountBuilder, AccountComponent}; - use miden_standards::account::auth::AuthFalcon512Rpo; + use miden_standards::account::auth::AuthSingleSig; let component_code = miden_standards::code_builder::CodeBuilder::default() .compile_component_code("test::interface", "pub proc test_proc push.1.2 add end") @@ -559,7 +559,10 @@ fn mock_account(_account_id: NetworkAccountId) -> miden_protocol::account::Accou .account_type(AccountType::RegularAccountImmutableCode) .storage_mode(AccountStorageMode::Network) .with_component(component) - .with_auth_component(AuthFalcon512Rpo::new(PublicKeyCommitment::from(Word::default()))) + .with_auth_component(AuthSingleSig::new( + PublicKeyCommitment::from(Word::default()), + AuthScheme::Falcon512Rpo, + )) .build_existing() .unwrap() } diff --git a/crates/store/Cargo.toml b/crates/store/Cargo.toml index f9be6de10b..17dcf96196 100644 --- a/crates/store/Cargo.toml +++ b/crates/store/Cargo.toml @@ -55,6 +55,7 @@ fs-err = { workspace = true } miden-agglayer = { branch = "next", features = ["testing"], git = "https://github.com/0xMiden/miden-base" } miden-node-rocksdb-cxx-linkage-fix = { workspace = true } miden-protocol = { features = ["std"], workspace = true } +miden-standards = { workspace = true } [dev-dependencies] assert_matches = { workspace = true } diff --git a/crates/store/build.rs b/crates/store/build.rs index f7ba0825c8..c03975760c 100644 --- a/crates/store/build.rs +++ b/crates/store/build.rs @@ -4,9 +4,18 @@ use std::path::PathBuf; use std::sync::Arc; -use miden_agglayer::{create_existing_agglayer_faucet, create_existing_bridge_account}; -use miden_protocol::account::{Account, AccountCode, AccountFile}; +use miden_agglayer::{ + EthAddressFormat, + create_existing_agglayer_faucet, + create_existing_bridge_account, +}; +use miden_protocol::account::auth::AuthScheme; +use miden_protocol::account::{Account, AccountCode, AccountFile, AccountStorageMode, AccountType}; +use miden_protocol::crypto::dsa::falcon512_rpo::SecretKey; +use miden_protocol::crypto::rand::RpoRandomCoin; use miden_protocol::{Felt, Word}; +use miden_standards::AuthMethod; +use miden_standards::account::wallets::create_basic_wallet; fn main() { build_rs::output::rerun_if_changed("src/db/migrations"); @@ -35,25 +44,65 @@ fn generate_agglayer_sample_accounts() { // Create the directory if it doesn't exist fs_err::create_dir_all(&samples_dir).expect("Failed to create samples directory"); - // Use deterministic seeds for reproducible builds - // WARNING: DO NOT USE THIS IN PRODUCTION + // Use deterministic seeds for reproducible builds. + // WARNING: DO NOT USE THESE IN PRODUCTION let bridge_seed: Word = Word::new([Felt::new(1u64); 4]); let eth_faucet_seed: Word = Word::new([Felt::new(2u64); 4]); let usdc_faucet_seed: Word = Word::new([Felt::new(3u64); 4]); + // Create bridge admin and GER manager as proper wallet accounts. + // WARNING: DO NOT USE THESE IN PRODUCTION + let bridge_admin_key = + SecretKey::with_rng(&mut RpoRandomCoin::new(Word::new([Felt::new(4u64); 4]))); + let ger_manager_key = + SecretKey::with_rng(&mut RpoRandomCoin::new(Word::new([Felt::new(5u64); 4]))); + + let bridge_admin = create_basic_wallet( + [4u8; 32], + AuthMethod::SingleSig { + approver: (bridge_admin_key.public_key().into(), AuthScheme::Falcon512Rpo), + }, + AccountType::RegularAccountImmutableCode, + AccountStorageMode::Public, + ) + .expect("bridge admin account should be valid"); + + let ger_manager = create_basic_wallet( + [5u8; 32], + AuthMethod::SingleSig { + approver: (ger_manager_key.public_key().into(), AuthScheme::Falcon512Rpo), + }, + AccountType::RegularAccountImmutableCode, + AccountStorageMode::Public, + ) + .expect("GER manager account should be valid"); + + let bridge_admin_id = bridge_admin.id(); + let ger_manager_id = ger_manager.id(); + // Create the bridge account first (faucets need to reference it) // Use "existing" variant so accounts have nonce > 0 (required for genesis) - let bridge_account = create_existing_bridge_account(bridge_seed); + let bridge_account = + create_existing_bridge_account(bridge_seed, bridge_admin_id, ger_manager_id); let bridge_account_id = bridge_account.id(); + // Placeholder Ethereum addresses for sample faucets. + // WARNING: DO NOT USE THESE ADDRESSES IN PRODUCTION + let eth_origin_address = EthAddressFormat::new([1u8; 20]); + let usdc_origin_address = EthAddressFormat::new([2u8; 20]); + // Create AggLayer faucets using "existing" variant - // ETH: 18 decimals, max supply of 1 billion tokens + // ETH: 8 decimals (protocol max is 12), max supply of 1 billion tokens let eth_faucet = create_existing_agglayer_faucet( eth_faucet_seed, "ETH", - 18, + 8, Felt::new(1_000_000_000), + Felt::new(0), bridge_account_id, + ð_origin_address, + 0u32, + 10u8, ); // USDC: 6 decimals, max supply of 10 billion tokens @@ -62,7 +111,11 @@ fn generate_agglayer_sample_accounts() { "USDC", 6, Felt::new(10_000_000_000), + Felt::new(0), bridge_account_id, + &usdc_origin_address, + 0u32, + 10u8, ); // Strip source location decorators from account code to ensure deterministic output. diff --git a/crates/store/src/db/models/queries/accounts/tests.rs b/crates/store/src/db/models/queries/accounts/tests.rs index e9f529855f..0065a1e2cf 100644 --- a/crates/store/src/db/models/queries/accounts/tests.rs +++ b/crates/store/src/db/models/queries/accounts/tests.rs @@ -13,7 +13,7 @@ use diesel::{ }; use diesel_migrations::MigrationHarness; use miden_node_utils::fee::test_fee_params; -use miden_protocol::account::auth::PublicKeyCommitment; +use miden_protocol::account::auth::{AuthScheme, PublicKeyCommitment}; use miden_protocol::account::component::AccountComponentMetadata; use miden_protocol::account::delta::AccountUpdateDetails; use miden_protocol::account::{ @@ -36,7 +36,7 @@ use miden_protocol::block::{BlockAccountUpdate, BlockHeader, BlockNumber}; use miden_protocol::crypto::dsa::ecdsa_k256_keccak::SecretKey; use miden_protocol::utils::{Deserializable, Serializable}; use miden_protocol::{EMPTY_WORD, Felt, Word}; -use miden_standards::account::auth::AuthFalcon512Rpo; +use miden_standards::account::auth::AuthSingleSig; use miden_standards::code_builder::CodeBuilder; use super::*; @@ -156,7 +156,10 @@ fn create_test_account_with_storage() -> (Account, AccountId) { .account_type(AccountType::RegularAccountImmutableCode) .storage_mode(AccountStorageMode::Public) .with_component(component) - .with_auth_component(AuthFalcon512Rpo::new(PublicKeyCommitment::from(EMPTY_WORD))) + .with_auth_component(AuthSingleSig::new( + PublicKeyCommitment::from(EMPTY_WORD), + AuthScheme::Falcon512Rpo, + )) .build_existing() .unwrap(); @@ -423,7 +426,10 @@ fn test_upsert_accounts_updates_is_latest_flag() { .account_type(AccountType::RegularAccountImmutableCode) .storage_mode(AccountStorageMode::Public) .with_component(component_2) - .with_auth_component(AuthFalcon512Rpo::new(PublicKeyCommitment::from(EMPTY_WORD))) + .with_auth_component(AuthSingleSig::new( + PublicKeyCommitment::from(EMPTY_WORD), + AuthScheme::Falcon512Rpo, + )) .build_existing() .unwrap(); @@ -520,7 +526,10 @@ fn test_upsert_accounts_with_multiple_storage_slots() { .account_type(AccountType::RegularAccountImmutableCode) .storage_mode(AccountStorageMode::Public) .with_component(component) - .with_auth_component(AuthFalcon512Rpo::new(PublicKeyCommitment::from(EMPTY_WORD))) + .with_auth_component(AuthSingleSig::new( + PublicKeyCommitment::from(EMPTY_WORD), + AuthScheme::Falcon512Rpo, + )) .build_existing() .unwrap(); @@ -547,11 +556,12 @@ fn test_upsert_accounts_with_multiple_storage_slots() { "Storage commitment mismatch" ); - // Note: Auth component adds 1 storage slot, so 3 component slots + 1 auth = 4 total + // Note: AuthSingleSig adds 2 storage slots (pub key + scheme id), so 3 component slots + 2 auth + // = 5 total assert_eq!( queried_storage.slots().len(), - 4, - "Expected 4 storage slots (3 component + 1 auth)" + 5, + "Expected 5 storage slots (3 component + 2 auth)" ); // The storage commitment matching proves that all values are correctly preserved. @@ -586,7 +596,10 @@ fn test_upsert_accounts_with_empty_storage() { .account_type(AccountType::RegularAccountImmutableCode) .storage_mode(AccountStorageMode::Public) .with_component(component) - .with_auth_component(AuthFalcon512Rpo::new(PublicKeyCommitment::from(EMPTY_WORD))) + .with_auth_component(AuthSingleSig::new( + PublicKeyCommitment::from(EMPTY_WORD), + AuthScheme::Falcon512Rpo, + )) .build_existing() .unwrap(); @@ -613,8 +626,8 @@ fn test_upsert_accounts_with_empty_storage() { "Storage commitment mismatch for empty storage" ); - // Note: Auth component adds 1 storage slot, so even "empty" accounts have 1 slot - assert_eq!(queried_storage.slots().len(), 1, "Expected 1 storage slot (auth component)"); + // Note: AuthSingleSig adds 2 storage slots (pub key + scheme id) + assert_eq!(queried_storage.slots().len(), 2, "Expected 2 storage slots (auth component)"); // Verify the storage header blob exists in database let storage_header_exists: Option = SelectDsl::select( diff --git a/crates/store/src/db/tests.rs b/crates/store/src/db/tests.rs index 7bc633f95a..6791860795 100644 --- a/crates/store/src/db/tests.rs +++ b/crates/store/src/db/tests.rs @@ -4,7 +4,7 @@ use std::sync::{Arc, Mutex}; use diesel::{Connection, SqliteConnection}; use miden_node_proto::domain::account::AccountSummary; use miden_node_utils::fee::{test_fee, test_fee_params}; -use miden_protocol::account::auth::PublicKeyCommitment; +use miden_protocol::account::auth::{AuthScheme, PublicKeyCommitment}; use miden_protocol::account::component::AccountComponentMetadata; use miden_protocol::account::delta::AccountUpdateDetails; use miden_protocol::account::{ @@ -62,7 +62,7 @@ use miden_protocol::transaction::{ }; use miden_protocol::utils::{Deserializable, Serializable}; use miden_protocol::{EMPTY_WORD, Felt, FieldElement, Word}; -use miden_standards::account::auth::AuthFalcon512Rpo; +use miden_standards::account::auth::AuthSingleSig; use miden_standards::code_builder::CodeBuilder; use miden_standards::note::{NetworkAccountTarget, NoteExecutionHint, P2idNote}; use pretty_assertions::assert_eq; @@ -1148,7 +1148,10 @@ fn create_account_with_code(code_str: &str, seed: [u8; 32]) -> Account { .account_type(AccountType::RegularAccountUpdatableCode) .storage_mode(AccountStorageMode::Public) .with_component(component) - .with_auth_component(AuthFalcon512Rpo::new(PublicKeyCommitment::from(EMPTY_WORD))) + .with_auth_component(AuthSingleSig::new( + PublicKeyCommitment::from(EMPTY_WORD), + AuthScheme::Falcon512Rpo, + )) .build_existing() .unwrap() } @@ -1246,7 +1249,10 @@ fn mock_account_code_and_storage( .storage_mode(storage_mode) .with_assets(assets) .with_component(account_component) - .with_auth_component(AuthFalcon512Rpo::new(PublicKeyCommitment::from(EMPTY_WORD))) + .with_auth_component(AuthSingleSig::new( + PublicKeyCommitment::from(EMPTY_WORD), + AuthScheme::Falcon512Rpo, + )) .build_existing() .unwrap() } @@ -1410,7 +1416,10 @@ async fn genesis_with_account_assets() { .storage_mode(AccountStorageMode::Public) .with_component(account_component) .with_assets([fungible_asset.into()]) - .with_auth_component(AuthFalcon512Rpo::new(PublicKeyCommitment::from(EMPTY_WORD))) + .with_auth_component(AuthSingleSig::new( + PublicKeyCommitment::from(EMPTY_WORD), + AuthScheme::Falcon512Rpo, + )) .build_existing() .unwrap(); @@ -1462,7 +1471,10 @@ async fn genesis_with_account_storage_map() { .account_type(AccountType::RegularAccountImmutableCode) .storage_mode(AccountStorageMode::Public) .with_component(account_component) - .with_auth_component(AuthFalcon512Rpo::new(PublicKeyCommitment::from(EMPTY_WORD))) + .with_auth_component(AuthSingleSig::new( + PublicKeyCommitment::from(EMPTY_WORD), + AuthScheme::Falcon512Rpo, + )) .build_existing() .unwrap(); @@ -1512,7 +1524,10 @@ async fn genesis_with_account_assets_and_storage() { .storage_mode(AccountStorageMode::Public) .with_component(account_component) .with_assets([fungible_asset.into()]) - .with_auth_component(AuthFalcon512Rpo::new(PublicKeyCommitment::from(EMPTY_WORD))) + .with_auth_component(AuthSingleSig::new( + PublicKeyCommitment::from(EMPTY_WORD), + AuthScheme::Falcon512Rpo, + )) .build_existing() .unwrap(); @@ -1546,7 +1561,10 @@ async fn genesis_with_multiple_accounts() { .account_type(AccountType::RegularAccountImmutableCode) .storage_mode(AccountStorageMode::Public) .with_component(account_component1) - .with_auth_component(AuthFalcon512Rpo::new(PublicKeyCommitment::from(EMPTY_WORD))) + .with_auth_component(AuthSingleSig::new( + PublicKeyCommitment::from(EMPTY_WORD), + AuthScheme::Falcon512Rpo, + )) .build_existing() .unwrap(); @@ -1568,7 +1586,10 @@ async fn genesis_with_multiple_accounts() { .storage_mode(AccountStorageMode::Public) .with_component(account_component2) .with_assets([fungible_asset.into()]) - .with_auth_component(AuthFalcon512Rpo::new(PublicKeyCommitment::from(EMPTY_WORD))) + .with_auth_component(AuthSingleSig::new( + PublicKeyCommitment::from(EMPTY_WORD), + AuthScheme::Falcon512Rpo, + )) .build_existing() .unwrap(); @@ -1594,7 +1615,10 @@ async fn genesis_with_multiple_accounts() { .account_type(AccountType::RegularAccountUpdatableCode) .storage_mode(AccountStorageMode::Public) .with_component(account_component3) - .with_auth_component(AuthFalcon512Rpo::new(PublicKeyCommitment::from(EMPTY_WORD))) + .with_auth_component(AuthSingleSig::new( + PublicKeyCommitment::from(EMPTY_WORD), + AuthScheme::Falcon512Rpo, + )) .build_existing() .unwrap(); @@ -2058,7 +2082,10 @@ fn db_roundtrip_account_storage_with_maps() { .account_type(AccountType::RegularAccountUpdatableCode) .storage_mode(AccountStorageMode::Public) .with_component(account_component) - .with_auth_component(AuthFalcon512Rpo::new(PublicKeyCommitment::from(EMPTY_WORD))) + .with_auth_component(AuthSingleSig::new( + PublicKeyCommitment::from(EMPTY_WORD), + AuthScheme::Falcon512Rpo, + )) .build_existing() .unwrap(); diff --git a/crates/store/src/genesis/config/mod.rs b/crates/store/src/genesis/config/mod.rs index ae071c175e..f2cfe40b8f 100644 --- a/crates/store/src/genesis/config/mod.rs +++ b/crates/store/src/genesis/config/mod.rs @@ -7,7 +7,7 @@ use std::str::FromStr; use indexmap::IndexMap; use miden_node_utils::crypto::get_rpo_random_coin; use miden_node_utils::signer::BlockSigner; -use miden_protocol::account::auth::AuthSecretKey; +use miden_protocol::account::auth::{AuthScheme, AuthSecretKey}; use miden_protocol::account::{ Account, AccountBuilder, @@ -26,8 +26,8 @@ use miden_protocol::block::FeeParameters; use miden_protocol::crypto::dsa::falcon512_rpo::SecretKey as RpoSecretKey; use miden_protocol::errors::TokenSymbolError; use miden_protocol::{Felt, FieldElement, ONE}; -use miden_standards::AuthScheme; -use miden_standards::account::auth::AuthFalcon512Rpo; +use miden_standards::AuthMethod; +use miden_standards::account::auth::AuthSingleSig; use miden_standards::account::faucets::{BasicFungibleFaucet, TokenMetadata}; use miden_standards::account::wallets::create_basic_wallet; use rand::distr::weighted::Weight; @@ -221,7 +221,9 @@ impl GenesisConfig { let mut rng = ChaCha20Rng::from_seed(rand::random()); let secret_key = RpoSecretKey::with_rng(&mut get_rpo_random_coin(&mut rng)); - let auth = AuthScheme::Falcon512Rpo { pub_key: secret_key.public_key().into() }; + let auth = AuthMethod::SingleSig { + approver: (secret_key.public_key().into(), AuthScheme::Falcon512Rpo), + }; let init_seed: [u8; 32] = rng.random(); let account_type = if has_updatable_code { @@ -429,7 +431,7 @@ impl FungibleFaucetConfig { } = self; let mut rng = ChaCha20Rng::from_seed(rand::random()); let secret_key = RpoSecretKey::with_rng(&mut get_rpo_random_coin(&mut rng)); - let auth = AuthFalcon512Rpo::new(secret_key.public_key().into()); + let auth = AuthSingleSig::new(secret_key.public_key().into(), AuthScheme::Falcon512Rpo); let init_seed: [u8; 32] = rng.random(); let max_supply = Felt::try_from(max_supply) diff --git a/crates/store/src/genesis/config/samples/02-with-account-files/agglayer_faucet_eth.mac b/crates/store/src/genesis/config/samples/02-with-account-files/agglayer_faucet_eth.mac index 6bd49fefd83ede7e1dec802e6d17b06c13c1587d..b76116b5740b069ba4065aaaef0fccbc60a84fe2 100644 GIT binary patch delta 7484 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 J264_c_%9#m1kL~e literal 17931 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 diff --git a/crates/store/src/genesis/config/samples/02-with-account-files/agglayer_faucet_usdc.mac b/crates/store/src/genesis/config/samples/02-with-account-files/agglayer_faucet_usdc.mac index fcd0e4f9b65b163ff36e1c3f0434fea54eb29eed..8e0c2650be4dcbad07a83758a16ffcd3b1b78ebd 100644 GIT binary patch delta 7479 zcmc&&2|Sct`+lBb%$OOnuUUs-hG8rf$}VduL&A8oRVb+_g)){BQkJKbwNgY9QdCs( zYEhvQqM`*!mQs}cI}cND-}dYKzu))&zVrJ%x#v9Bxvu-Z&pG!wPX`m>DA!~WHaBgH z|N0Gq1_oZfz5!mL8-ffBHhS&!*|5XFz-Mb<$cCU`|E+-@{(&2}dT2u!(4e0h;U^n4 z|8*`c4wn@4gY-N3_rEEkN%FlIm{$N0r+}vrJXgSzugitS!pdA!E{Ke*hUG-1Sb7|< z=v43?G(lE10^@~A3|8!X2Lve~GdOiN`iqO2%gs{ajKHzTKP<%`mckE9{<{UsQ`#mK zxx{9l5lFUA=tF9e5d~aY5X740C{S3yfYBcoRBhJ01woe7p8;%6H$Z4pFp7!*$LaZN z+#Jmu(GS=>&XO|_PsMBfO#Dmb`Qgh^-+oZetNh=U5eIGx8&CKn3xC3sf7cPVqT-*- z!N03KC#;Pyxs?$ZBVtRZvSwyyXVGWQKoW84AH`fvZ$c3syT1fC0I4zO-PiLS#pLaHN?r1)z}_~x2EygunyDJzOA)XyU8+n z9eOG2%h-CBZPVi6x20d0+m430{kM#4vd7zKX4rf!V={M(9P)P zg0;{nNpvcM8$2MaKOE$rbI?26jjP^u(g#9rVr8U$xXa==3o%etQ3f~4x&WA17C+j9 zHhsj7U_wGIJ}TZCPo=0KjWC7%QySHO>};GgAFCiWB0`oPFv{{BgLmcK6vLrId8tGy zl}nmSg2MA>cEsPW2KL|V*?(a#ivMSn=Y{8L6a;~C^50fQ(+NTB|C#c<@Lc>qm#M$4 zeE-pG&&T|8$m~A~zlWj8Jg{O)`ToPRJyYKR` zPwz`gr7uR)5(&yI+nQiaFvG(H68J}1Nm;(=^!AxI>z?=s2x)6`;Z=|hJdF*B;#uEs zCuBT26aqtM6}4b2xB%b)1(5-ogq#Fg#e{^UW%07;LzKV^3E_z(0TB^Aj!0tgl9XZj zmwV0>S@<3sC&Kb(swBl?o+P(FEE1PB*N<)m7FszW2zkV#$pt}qXz@fuaEKDGE@(Qa z)_0}vf9LQxEn(pWb6{yAk!t~K6uF6$VRPa6SS#;X88t2|N?{GIc(lB5uk2hE|EIN( zN)^yi7>T3d6;FFSkaHPvD3Up} zz*$MibTjP(ZgBKuS;pR*3X*^Voy)M4>#lv-RnsHGH=I7D%l>AZ|VzXAzQ9t5qc1ry~>58-MU^#%Mz~H`WTfdVp zKugH2j%)k5{F_;uUBBt}=G=WpJ>dQ#X|Mu0ucAto0Z{aKvvqze;v9U|#lP3TYcd`a zP>@k0kj!jh*cVl0O|}hw5<#X_R$=8qOgO|rmCRNEnLx*N3&jzx_e`D7+T+2q@tx!S zHjfdRbzu*?N~n{(@70PhieLl}z&-qU*pqgyR5)?1&_TnP_b2Ve%aeF#9y@>8`Ko* z&_srugZizqqjk$7mN3e>N!P0Lwgm`W4Vnisl91JswMCN3#y;$_aIu82#U2ZW6M_Xw z9E=NYx13$)fz+w0GF5;&x+GpJ$@d!d<<{Q(9d5d`(kj{Bu>L}S^diU3-re=OnRoQ% z(Fp}}aIwFP?xWqs@~T=WVNSR8^O|+5ws^TEMQ2>H`P~}Ep`}=aN1uYR#3CB{_E>e0 z0|FAIPsSX?BKi6htOl5JBJx z_oRMzm7jF1?XJU=2lwt56TR;HDHWDNJN5K09d5VpXqUVC?$JDs&G1`Qk!*j-JApAe zYB?^jP$D}7T9%`|x5}$`?_~TJuT|(u;RDZMwn#(yKy#=@?b~Wy>`|FzLt;A#3Ld^k zDfU_AP2v{sIKl_QgHE2C(Re*n?0G)i-U=e;r3X-U!${ynQ@J690olY=qbbicpa#j7B!%7nr>B>5O zs|3-zm4hdfFiS!D(OY7yKY4URzemMW=lyE!YSo4TEUa^11H)7`Heq(61F8SW;UlTP zE*x@lDSs@RrM7I(FvDQN_@Qhyv9afVDcNt4|31TcJ~kA3I?SF=<_rSwZs78F%8V^C ztI=LqXHg1$A}@3U^$9Vgz!q0(6U0 z4*pg$3U@hitW4{VDLtD%ofApg@NG)$b5!`6i#Cpz7p5?~mI!Uih#2DFGzO|y4dfm} zinJv$A9;}rS`^Ge0@A8Qfo+g!EfuUS&=f+b+GNZU0$OdcD?kE-kWg(hb|tU`k$Uh- zpMVT$+hbRQ4q?Pphm3UqfeR!4I%JF?0jbcTU>(uOBb$f4SI~(Qs1+*aHzx}&fnQp{c3<_g8BTx&#+d>W7PDpTg2`!k+$Ad zNvGPJ$*n&a)10^WcGy)@v7?S0+`%ZGufMO38B;Giv^8Af7WK5Ab=9K-`vwFgcW$#8 zv<78iuCXJdKLtIo#q;H-XD&%r9x$F{d%`&U6$=8l=DFaotT*ni0EZqplEbNmmaW__ z3ijM`?ki%?zCFgWksG=3h>YVWEZAL&ku?ILty8XA3KatG-i9AS&=`dwa$(G@(#uPd8B_R~jO zwx3*4^~qzy{@A-CF?BXTI8q$&9oI^E`O3gEzpu){E0j%aiD3)BHNi;peqg2gxl zI{0u1l~4Ju7V;CU=ebkN=PBUzaCm08I)UEk=~l+7_4SaOF#u%XX`xwfZ?jt}jDihCT_gNRXFMxIo&yVH|p#Gd<2%Vi|9 zg{RVI$dO2$Sh)pz&5CPw54Uk5?j>#7o)Mx%IM&xM(SbA@wRQ3t*&j$&^vSYR9CR%v zYy^a84I_REtgT(zc0W7yvw1$_arNxl_AHgq7sU$}QoVJOf1ilu@STqEOw_!3Eu#Ar zY2A?&ZE|sR?z!-hC#?G2=TD77i);KKHe>?sHPFdupGVP>>QY&!o0_V6Uf!PivLKXz z>?;dgcHmI7fA$%F5HYyCK!N>9dhu#)1OK=JXJj3ra|hYNn;%>KG6mKeP#C z5XC*%$2^32@1v8^QTs%n8bZc8T4@Nz%gJEfqNZ9lTBDL^iyTnER_s$=kbk|&W2b>& zWCEX8Ld0)Hn`1nzVkZp!nw`7i2%t7m*joTt8a$ojw;uZ4OIfka8$;T!n0wveobVT3 zrz}_L$Dh;&ogaAx0zbk3{y{0n*QR|N{%CO7v}?v9VNvkF<6eol;wvlj#Hl!>Cu!4G z;3vB4UzIQ`?5tP@9`^1sPT6H+5_=8}57rJm8A)oEf~j zXUFudLBy6Sg+&i#8N{DT#ylV(hpG11U4Tmlc}*o_cLO(N5MCM?6G%ifX!h7}@Jbem zqLEdDiC`GG#tbdJvop|9oUl?Uq}@YzL%}v>)mLWDtat~#gf>0*O(Vz|nkqX2@Sw*= z$(_6s`mN&T?qGj)zIMvZMf_~1SIIbwI-}`QzP#fREgS)$& zWmk4kxI;B&soJTH;tlEAb@w6xpDe&R{?0UeoWsvOBB{W{ipSY+MN->V?sLt`-?!uC zOI5wyyXT!$VC49ZrPInS`}C%f+2u-jMu1&!k22SZ3deZXyP#(7DkMNnl@-+%8~&!7dfpKVH?DkkP6 z>N}r1+@17%V0Q^~cN!7lSEsP!0TkSNA^X&rx7U|^{#b%<=y$y!wDv@-OF!|+qSceP z9mH-Y=6_27^6~(8tzQ~43y0%ko5)#0!OJ|7Q}Y@wnU>`=>MB~!nw<`>;7pcl_f&~c zq-BA%z#BRrjd^5bMz&0~wBG84@V9p)=ko=LV3`A5HuT%YiT!~uG_edbk7u|C6Z*H5 zC&fj5;(l9Xy|oorumd>+fD3`Jy33v7#HlS|N55`e6+&6Y{M;STk!e_Rd&dl3K<4)H z+lPUJ=y6P0-MWY_rFT!Kb8u~3=X2z1@4f{B=ia@e?dXxdn>lTW3WMuA6c$9c8dkTk z`#Pra=FB-&HR#NxkL54QdE>V;A`BFV?uI4<5K5@~x(F{$HX=P|W9v4HrM1pGq8+%UgkoOh{IE@q6-k`5w4g+JWa z;C&!J{Xm~|2uBNGujxG$_2uhG?8yf$%+tHRoxRM1Ru!<%B_2NTsgOSJ9cmaHklK>O ztjM-l%)d0TrQ7MC)TwTPeVHJG=*L{jmxMGcq@+QSTDm!hEh%Ls6JT1LezAb?|-kdw5BBD>+f^vW``1XQ~l~ylu8#gmDjQ+G(oUF3yM7vl5 zyRiSJtp(4-iyBFd9x{jUS1Cm6p(=QO^^s!0;cHy8HYP-Cjh95JJ@bv3z_rR8WLfT2 zTI;=R7q(dBsx?u$z(bU2H`5b@NZGLjlu1k(T^kmQTm3J+ksq(*HUh3My%N)K0AZUxcnz>VT zkD$o%Lfxs?dy|CC4+I3d^ACoe^AtFwcBJ;;kpkc#6#&T!DSRUQpE4$lJcU|nExJPQ z(W1Ny{q`QE-z=0A_*&CnO+uVC?Xg9GlZF&(k})?(NF(UD031?76c}V|37}C!Y#88h zA|Zhc3VK?Zs3Ym1qnCu-03G18s!>PY11#__QXLW0B4aOuQR;}k78#?&2hJ@Dz7o8m zgHGg@xjY+2TR1N)2#dqgFd0^c)nF}n39Jtr!*=jW*b!a>uZ4euePMri3mgpZg2Uk` z_yBwePJ&Zl1Wt!fz-QqSxD2j@ufw@Hq@zfr0N};6@DGi2?3#A*amc<;lOu7wSIkSEUaIan3dP EFVTquyZ`_I literal 17931 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 diff --git a/crates/store/src/genesis/config/samples/02-with-account-files/bridge.mac b/crates/store/src/genesis/config/samples/02-with-account-files/bridge.mac index bf7a8dea266f9877563f2eab003f2cf1c71b1877..9bab86857e41263ed164fe0a4b733e635d102a11 100644 GIT binary patch literal 19129 zcmdtI2RPO5|37|?y@~9R5jr>=qpXxD6lG-P*n3nmB0@$+AsI&3%;KhAUC<8>cq78b5Z1l%-mzmX&y7wjyp zF3QN5+1Q*n^RRN3kui6+v$U}SJ(d^jF7D8O{`snh`idsQ6-4sk39Knncke$wf8NR! ziQNB>?jK@ptej0Qm|Zjjzke3HgBuRia)#y6A@Y(8ywRjr+5VFhB$D$V!$7x;%*D$W zOwL=GxmmgVQ^CLV9QcQXA7)ycUAC}tHF37Gv2$^C_CO-p|3QV7IXgPKnw)q17rFoZ z^FMvu*6yGDf9W}W?5sA_HH42OrvbnBfkzNLPT*Mq&rN@PLP8`jJ_;W}iFKHliaL-~ z`U-1Q#!5PDQ=2WvMWTO8 z#BPNDyG-GhzaNfTsic0&_==e|CTAc2_(U=a*%WU zcvN@i)oyY8Z4!ZaW546((N7Fv&=1dYF#Kbh{bKkUl*WTU@`;h={+CR$>}uy`mBtY8 z!CC(y5Al=0A0mEb3pB>EQR>05vv90$VEV}$LGtElH1T8HtQ1l!O94sh~ zz2JvE0TxmQH7w=MZv;0hC`U9(iU5t0Bmh4SVex;Apiw_%1&xxx68<$JjwSl*4>2t9 zUw@$f(($8$xJBvFC>jD$Iy8!cKy(ipMMfY>iAIqCb-QE?0kGm%DI(sbAbwW!t6C(+ z{vs8`*dJN@c_I=2D#OITDu$o+|JZx~gF{f|LT%S-Ed7tz{C^(lpOpOA0HKZjFV#PK zq1gVa8}9%8N{sm1wz0F`|GeDq^!$DQ{vYfLyLMur)c>eVT(l^$ZVYZr^qB{Bu_LXi z@3R|1?n5KgSW6rMp4Av?QLJqAefLe>^d#)kmfS6qp=d3L;JCY<{4~>cAyD^Ydj4D# zKNaA=bb}fG&!q#(@-GI6e_h2t6z&=UPFXltz%PCvjNreNwufogtDltYLNv+@+IfD| zFwbrzf7*?p65RuqT^eX(WBS`h^;b8voWhL&ADo|liQWTg?bQJuD+ra2>hXXzK78} z@!TkX83qePx9g9=U|*qS6AX@%8o>J*c7k8h0PYcBotT3F0y`3H_Z$L$sGfAN84b(v zCG^_^18Z$c9~h9*H9UZU2S0ir3@AGK>tIkf#SgzIBCu3>9OY2gAF9udXSRhUzToiX zhC$xmF&Y?T^||b1`o%WQj)@FehppkEV2yTp2q3T_UfiV+_(SzFFB}74IWH z2d_BxG7R$X>8!&bWANh^3`i>CiXec%Hm!AxK;RG6zpQ+_GtFYvg@s{(q&&<^FxZl2 z_lJQxQ(6ZMX68-BVKBfjfGfT4y+^J=U4N+l%D2@hSfW*%0dy^bz_QbFJ%Yg=O)ogD z*!A$c7vP?^jF~&?hy0gGp&kTwHD3l!)gP*VRNb8j%VD{DhzthCdgTN#c-JMn3WI2T z_MN%V>p!#;kI55c-=HA`R^oOIyg2-!`kKh0*RY)L7x8vd-YrP&3HRuzO}M}yBBr1n z1`|UwJC;?wa;1ZM5ZKCo|85BUq55-Q%Nk%gH&*;QVbF0hB^3r_&0jCUz%zgECm8VB zf9{7t&HDv-Dk89kHrZWJ*B`3ai{)#BB@Wj}2*5yz%=sP+JWa<2VbJ6ewzKz?iX0Pz zd(H$g!HYiv`{`=a1E}i{)z59m?Sm!CxRLHuoLZ#z6x?&Tb@Mw6zD{ZEEC9@p1V!N< zt&4BgAb`N~i;qx4;1AUg$Ia|y+Ig;$4;J`&<2eru;y(u+gMp~wcj%%6fwetcvy&j= zXMSIx9t3u<{Y5PV{!qP_t4A{QaV%5p+))^8uPfxhK=^h2&Qx>?@DhT1Ty?48Z615` znk`(g2&@6R37#;2sNSvJJ{cCx#yP4F1EPkco#4~54(uF21|)CE!9y{}mv_LDjyyak z!EwX>zdG%t%)T6gMUO2j*}#BB=1emT%1`<1#Jp3b58hy~oI`y(Py{aw`fj?A#K9+d~ z`Z%@_uY?N*g#6t*t8Z99_&VHE{8GXa28u0%+b~#By9)0D2yEj!-aAm&AF7|uGYf|$ zKI?C&hJkd~-JO&#k?>!IduaL+U16|DNR|cz*N0Q^W{AL&l^fJSU4N*4WIDJ7mYDxF zWTythoqX-#9wDY64;bJNQtx=5Q7&`~?r~g@oP_`a`>N5E00Mug-pj9w1C|r={1m)= zVH?J2{NSF&SV?CXSnRpn4}$FPjTf2iKadvfQH<4&1t1dG;J zr`$=0n_VwFxv`^4Rj`NHOCDzVFbCcB46aiI)>`;W-+!Ur?^X&oEHO1U{51@ogo>Pk z!Tfph>o7?2r;39?rXR`98wjsUD_ouktklhCRM6NTde30hwX@p1A935UBk^6o53G#5 zKYXVM=2wo%!#yTy+}SWFzC5i00R%Rh$4dhOf2iIIq5Bw?V@w)m4g-1z!<{v*jKOxN z&=|8A2H>IV_hWYEeL>C%n2f+)SMdvl#{Nt_icXY3907kN#VEdeaRa_VB7tOr#=|WR zZpBTYSNNZ zflI=ws;%@b)yWHKXg1+|t)fGQ{mCTO4;_itk zV022wev@yv<_MT|!M?m(nttzHY&Mosr&4{m(`*=o4yr=Xh=F1r(O*dug7y8&Ehq7> zY$V?MZzDtftB~zFg5Ei9ArQXtpYvu*d?GvaT5cclYFfAxfZtLkNPaK6lDsg_{J>54 z7y+#HZD5v?Ut>N`$+y5Tb9JpVq2B)5_`n!#e~^=SKZ&FBVI=Gn0^#+EP4)uK7AXZn z@^sBz?Cp=7YA!rCZoIB$XX5?fdL$1=^KI*kNXYNWOekbjAZj*>N{CwaJo@s@%F@F5 zxg*vy)bLgaxR}0gW1mYzMhqg%m~TIB$v8-F4(~eYrOHdBmjkz?tvh%Imt+r32RifN z?eH*-7u?Q<5-S8GWhP!WVo<}I#J{!2<)isvZ|jq);EQkg!46ab#fJWN2|*7{HrFNN z49i#NCz93MVyzQ3{oN;y-U%R&41za5NN?>{>_s_}{U0zw`%DBeC7SPVuZcwMy?WR@ z#2Vuicv%7X0X59biRYKAC;dlO_>Ij=qbc81q@@&o(s_V3%h$j3G~qTIIgka}_>8F( z!9Mc=WmH2bV?1OckaZ+NBf7A@eTl2LZiIC83o$GXftl@*-oG%^>7K^CKkt6i>cjmE z=}mbLvfJ+lzE-z2d}>Vzc=!kejfzI4Lh*+2s$#XbaND_xgCF=P_vtbhJw0^7R+{sB zT{B3WJfzq3!9f)^KRTs3gRQ!aef>|PvJ8yk%F^`r@ex1Ko^#Hp2KK=g@+TXA2{8x})U%DBp5RQk;FlQfeDD`FmsSUyYbhopq}>sbFLu@tJB? zwnNvUQ=;I57NGhbisp$&e3njcRx`aB*iCx0leqhJ*yzIJgT<`$hD3(a%Evgzr~ za;AGZgmneVu4ERjM*83P3}(J1bi@lR$|4lwr}AHCXBs64^V@LkH!@I!JV;iAh!(rMa4_%Z;<)9Z`L zC%YoWN*LFlAy+Yad()>tsi-#bY~#~GOYh@*ZnA**5dnF7(R+#SxZEDS8Tq=j_R`$B znCuR1$EDf1){B+FZCvjZAmc#uwMaYiK&>n`)3n<;*#3BI)BJV$vXHLKN|W&(_r2NU zc}hDx%po51RpQ*spOD{M$(fR{oRm~XUap&}1IAQISd}K0qwIhO)oQHGbg-P*XW~ld z?&WSrdWt2zXBpo=Mz#+SaJ(xK5I}+hO9f=#oeckmkY~u=+(pe%K5hxZUZK9HmW46T zzNr&MzD@`WSH6&GN%b%*;sh<&h>~A@2wwP%jAR6ltmY zyg@GV$UUkysnNml6?G!)-L1{}8of-yLY_l>0`4Gh@(_<+8=ouAGfu#Gs3YdBg@5CX zL!%#3wRzUigz9dKqipHsIK98i8@Mg_@kYLVot2S5;=B!_*vlFISz$OGqSPoF(MjIL=7Ey0TG%@$%`9t zy7U?}51Pc>9)zb8$x?Mn|cybBi{U@Qc0D8>1_B9#@1p z_vp9s5N3vF($adhkFkL`L-M5GkA`$9Y|Xq>HpWNqO-mMazLePPBVFIyBbU`*zqR)O z@B`x66>ygE1p8n_@OZAeR{0FGM?D&73E0EE^yymTan+RQ8#ukcs{;WLXEMN*6}Vw8 zyBu>svgqLVS_bSz&JfG19FhmMwk=6wW~POs;a3h&&nz5FeC78y(Tn?~ueKWIRXGe@ za2@C^jEtZsJi;P#&1Od}!dFU>k;G{@tb=OJ&fonxTQB+XF}_opecnR%*e>u8DyTvm z16WfL>@kZs`Foy}Tl2XETN#R3F6LXcGf=p+JzmL3nIBT`$lMW#5t=m&WkWxX;Qg5C zd-=%Y+|GuX>~*K>RGEn%jqX`#Ry@V==C2Q8X$CMh$h3)&S98o+BwsHxzS>J;B-i)A zjzVMNHvFCj{HUxys#7I1VtZ!l(}9?;d2iJoiiT|a3SN6Gzs^#quJB?UC-0;Yas#VL zrzQXJW~5_ERZ1YknU}6k4`0w0Z22iM=@y9X@Hkzj9SWlI+AiN=DtGa}bn?adOM(y8 z@3pFJ&d1^ZnRl7Ih<(=vod``TgJ$+$@90c((IPg)Lsz!$W`r=@mR9TsFqt`>1}w_Cks<^-XS1jF)}=yAYrC z+AM*u#s?>GdQF)<=dSM0vome>sP|bc3{(;1yZ!2tLa)03`g=lEX+97IHD7nhqn&7{ zQ})pqtO+1!$F4*pVw_qK8Q6=vkFbu>Y=heXWB)r zi$5XKty2y=klH`-PzKaJXs)8pXQ zrvj=ME3a8*>yH@zkLt36Ow7+&6jozzCi5K)l;A zDUS2{%8Mf)Z(wgl)R&%DHCi%ZxP=-)+=)HlEq?H%AX#K>&x>1?#Timd z0}F4BTqHCT{EV1;jH%HbHAkmCsy0%ZU9TJVL3K|9p6g*3&zd2v*sK>{VA#nlTX}S! zk$7pn4_P5^?7SZJkcbJ|^g*3IEsShz5VE{uOgKpP>8l5t`yt)Jf_q&Q=`8#40GGP1 z{W#voVwDsM;g{AdF-c5$>nxM%51i_~Ihj1${h!AYQ+bVod{jVsB?feFv|0F(C#SD@ zc4;1_{K6lStL*&b!jbXAy>VlE^N)l0LA(pBlD@sU;g>3voeH{ZxyjCaneL5qi%*+a z%#pO2O{Y2m;sWvZl{MUc(Wp-n@G@nfue!jy#8J%;{RRKo>znQaD=8h;A~^em%|~9f zWLzNPnXE}%b8}bO>ZGCxwq|hsmZR23dl_?D8OVdywZf<#*QV^5(m22GTJe^?d14J= z({FP3;9(9YTDb6P?*|m9`L;az^56o;gENup!`kkSrZ-MwroO4t6dyWjAh3WZ_drGo zr}x~(@~pk+pk&3n!JJ8+%`&2^Ej(ua@zQffY-4#wD`McFBM=^RVN(${2)dHI^+Nz$9X54p|z1CoD@%d2b1Hk__u5uJEP4EP2%k9#+wba zDsa5=igHp*?b_0*LsTlrNz>tb-12V4*?W{DmIpaD=SrR5;CR0~$7+H2?FA+6pnkbz zNUx)Xr0mPLutm0dqQ?H?>t<;7#6TVMYvWfs&I02A4`DO=^<^B^CEfn+g|}5n7O9-v zHA!A#Oe)tO-G8N!T@wyD0h+Jqeb3e-CWp!7kG(5?EM4+FkX)mjp2Dvk!*J$J^+sUB z&b=c7GkD;>zvpL7bOpg(hJ&{jWSKX{Jeo8=;C<06m6bsS%jg38ptIt)E+5*FZsSAU zN7pTA=)U-hB05N8LYd z*4DY-W?oRIs1N25ls93nPW!CD=6CV(mk(0L-IO$ZnZwGL+Zgp$e9_u}p;H?05a0}h zP$xPbH^Az@(c~R6QWAjO)7Ag9iEmVNvhvA!F2+;-{NU179^%>bj_*fX1s*|#zrepF z(ok$0b2SAN&a(8o`eNI0HATSlg?QO-R=*_GX6la`+9VxMx-Ox${;sktzbWaad%|~@ zYo_Xkz&?lY)u!;JGMovY*l&lloZ?-eOBnJO;N$#CzqT`gl8L@tLzTh2ms`DXjITz>Rw8AAgdvOzu59x}O|M{v3+_`Raa zc&)R+_~t1sozEAyUS1ASwduT%XAVe^zvjrmBdT`A=T)2DsC+$pX099kI>J3YZ9i@2 zgW=Ew)T#yW1DxFv4SfW$1%>wJ_x;CJ%by9#Prn{d$%^b5OFf@$@xiiD<~&aC{S&I0 z!!!-?2NLJ4POPTx#sBs~DAC1(zE89YTiJ}Tw*s=5!DAny^-ZU^gdwJA`^>^4N0GU# z{F(5)jf{YY0`ap+vP_{kdFe{CUJ^WE$2Rkbke_0lu# z7r#yhaBeji*m0>joyh?yGJr zpoyIkLD}QJA}M5uiMI3oW>+rzBV| zKj=}AxVUV259bFDHg5l+i>ePAncmgW`B#@@Z}Brv(A1Vmuk(7R@V*Rpf?ke5oz~2x zQq~SuWgrjGBEa+NH)>ZL&ojO@<+Jhiy=qQr^xXpEI$us) zY+0gZ@piK_p^5A}M|u(ngWk<99y@tR{xgd{^S$j^e=e2?1&w4iKc=;5dY-wnYU1=|eJmwgcLhGd53llo{|H|9PM#c<-UPSJ1i?o&kQq~+gRA@%i% zZ@}5dyf1UI>{*_-;M>Gw9IdXOgb^OE-1}}$+N~Ro7ag^`>kVY>1J4=TM&1_r5nUZB zY6M|_)7iQ-Ud{E_EBw|fjFxZPyfb}(4^UjJ3x(Bm3R%MwZ>xRZNBxlH%>CYr>ICd_ zwWbatrwfLCyKs8VPecWL_`+V-`I2v_NHxb|=%LV2<)!2(FS3gU*bWo30O*hd>IE?q zz!j`r^KraK#<)V;vBGj}n|^XW%MtrBVkpK)LKmDhT zHTWc_`#xTaC0~iV>NCIL5s#C%CpCP(6hm)T$;M@k-jrdJqJFfLg6W|*H>gp`7Ag~2 zPjI|cVV`GbiUZVxl!LP6C*(T$TMjFGI7+uwyKh{)pF#NG%?}=5xU@3oZQV4XGsqN5 z#t;I3j(`t+#&Z=UBl?xCGfZQtwW3Lw$)?JMz5}~DFP0i<2E_z#U1Kn1zO*ZvYSi;c@>bnxs2=G zLak@GKZb6sksGKN(4Bd|vX}Rrwyk>;hMZkSCj{gJ;+dO%_`Gm#qo~hj=A+WXP1l1x z^apMf2E^Qn$#%ZXG9O-u(<^$=$u#cNT$@u^PxQ)_&yv1LQfl5rqSUQ&!`<#18$&mN zAKXA5fAP3>?u7n`*}$h`mjZjEQC_5GEgZJDg41IB#l`(dLIDTTYfNYCAn@phc$3E6?NQt9{sApH4OtIY(a@sc<-*@1iXm6 zljp>%iwTb~=DQV33%xQ)r=1aWq@(O&y63N@lq(ql;sWv59LF~Lq*9bkG0)V@IzKA) z38o~!LNvUKQ^_RVM}2!8$n%BtZV>kml-S(R_%6~eN3ei8Z$3rvZemT6{GmHjj)CRP zyOAI+&|y1kR(awgVpC3tG=@K;M_gTrZNw^PAZ)Mze@QZ9Onx~Ea3J34{e6|~g=d~Zgp1AAQ>}A?}GS4Fv@O&X&=F``TUy+d^ZMl zXl`3)rrzSQjRF3`dTrVcWwmmIw5u6b1|;8UxG&n$vf+KDaHFrqiT&`!B)~)Pg6H0v zU&#g^mx|~{PHp)OsbJ#L>Fd3L=P43C1uSIxc`?TVKOkP+!}Sr~$L?Wi5%PgoC#Fvb z$;z27<)|{ACt6xHmw4}Y0D5Tzb^5z|;5c0To<3##d1ou_s4>h#zDyQXwTJ}3qXN8dT?v9+?plfoHkSG}o>e-< z2pJDH(ph3;X7SAP)5lZ=aDD`R_OYIokY_m=Xq|6_r}FV>t}2~!LVb@7RZCuJ|K{U^ zI9_a((8;bjN0f82&#i-$-|dG*=H>DfGanU*Osr@q3T!pucGM384>luZ4 zIS&rqjG?jr8Z4!3z~69$y#E1+3qP<=q;8wGrsMNi%Xux|$HDbq?`p1U97`$Dy{$*+ zc$q3}^%At{gE)sCRElR^<$gnJHe3`a^K=V4%hket&ZwxN@Q8_=n&he{jyG6teY`W) z486>CB6|r@)h<03JWQiSBCFwfw{6nw6kRNir$Y8A?h>oQ{H^S5*ZC8w?VDPwm$}oa z{9O16uH^b;+}8o|19xYLEBD=J_39p9qUI+X>jImQyMCze7%z|Y8Xim5leTBF(>QsJ zt&LY|+F7pUmqs2}P_F9~bzInZCdoRok0>DK2IZ=I8jyto55-Dfl0v&KO+%T0+gyrO zh=$&Xb!}y?Pm=O*R7>QiFKB4<0RGA^yhojk6h9&1RC%h}eJjCNhn(XH*{v_BVmDMo zN`ogM`yhGNC0m-;FywaMV%tm|IfcVFjOjFL#OU7BereP!32zN*#L4@eeUE`G0q`vA zwg>A!s_&*4{aQkQc!J;C*~!z>q_b-34zuv#H=E^8K;D2}nitOBOat?&c)PO-3lZ$P z1wtf?S)LGhzBvnJVA>W>Tl$|!RMcQzmyF~g5c?~y`y}q zwow8dw_#scsBl9Lfyth#f3hNevGU4Ii9_Z&kTe8>Q!7`F@#y(w^DPO<$5mP37Ee_; z3FPV|Gz@iC3ZEP7`q_;G&d7?srS!{a?*B^aO+YX`EFi79rAVQpkRxEXWB)!@e5tzAb z=V)r6{e5hwr;v@_VOc(!MmIBIK4M6mz-YVUro2rjKDhY z|Exi9Zg?&YAt4vqSWey=mXQhM$qNH{_5OmE7Xk=I%*WUhrdYF##82O$=6yT7ee1iF zjpPsmV=>@BJVOO3wlNUkvnDWRz12x=Xy{N3=3DA-&TC-VsK5ZCtST~m?a*ka>Z;qy)AG?%>1_8lXUg1**pzF^ z6-6{(_u=G?u7(L{o5^vFRx~?K>LU8ov@y}iyo-7s1b9>?+i(1VJb6(dkAuGT^>g{qC<%u1Qe=W4+PU* z=_pQKs{{26`HOj)eu(!dv8@MDsgA1Sy*G-V!lzBFwC)@YP7PmrjBlif(|cy9`ohhW z!sA{=kJvQ^+M@Q9m^Mq;g%|2PtTwCYxwo$#$P)wd=+DTj6^}2R3=0ZjeBB?~%Wy1u zQpJ||{X}N)HN}cLh6WH9NN*b9m`}cbC{=imgW{dnQSH@LLpRqiA8;((AmO`9Nw5#_ z5aQtB_|W&YK4K%EygTfS&5Yq{E)j#FK%}Ky7QSvwvGtj_CLj;uwPv!hx;D36d{z61 zX5S^#?prFw&*$k*HxOCeG^ms#yA6205N|u%yZ2IY$HUk&pW69#^bqS@3#~;)8uP`x zRBBRHL+LFbeh@FkjVE+Z<*R{V0jAo*83ExDi4OX$DsdU+rw%S(OO2@k4 zCz)h@`lm~m2(MzWFWr5w%!IYSs98t7>dITlYXkN{JSmnZ3kHT$CqnK#X&bEe?LPZp zQscpJa#MkBXL~2pHW%ReLcD4N@J;sf(o@T&zBbV`cCskTxHvQMeGhYQGkjx65}4}% z_CdT2@^349U5Fcv&YG`>C;K(YyN@404o$U)?KO{3xL^I@G%jzyJFj&DS&+X8MmdXV z_>3Gfo&J?Wg4vTsnKBo?YF+NidG%mq;}k-t3;1ym@bKLQ_HBHZGj?7vznEJjVo6T( zO*!N4;;d4U41LNqW5h?mf%0n-Eme^HDUKNb`9ftWE$gs|)AvtS@);aOX4Y}iW|U{2VSmyJwPgTeDHc;h^hGL2FI|A5V4=rWX4& zwA5y{lis0M$Hm3B`07!VQTKaE1;JEO9*0NHOB${p(yu2!S@`%M{`R1{EsnSBV4`!5 zlrbegwbH9)RFRE=>sD5rGcjIgHh4D}x&&w8|ST?PxDWf zppSJo6y=f%eM*@CXV?l!K;+O;)lc@rPrERv*|%-1%Px<&r-*bZ=8jX`%N5&QpfUht zK|CRm4Y#YvApA;{yPvD4$dZ6u{mVIb=TOhL!y#X=e42|m`z~{j$C&m;`wuSOQk_p3 z6;R9!qIB5r#hAJEOy6T#5ehNXeES8RB%D5$9m)^t4Z7epa#WpDX4`ay++x1`_>`dk zlJGF#NC9F=#>QscC2d0GFHN0K8}x1N^#;?i6ft;h(5=QzJ~b%#0`dm&EG(~#8~C~< zvJ!Q;Y2Qf27hNu?Kj&R(yM2;9OrBNt5DzCHfl^2-%Xy70y~}5!n3xr?U(#}e6207L zUgUeR1R?mY?Q0;+0=nDfKb9TkqO3gOpy+I2&7T;qtEnDnY+0~Bx4gB!LeO|@hbUi3 z%#(gNh2L-~QlM7IJ@8~e={^zGuKLyHDE{F}GjHCx)tZ&6 zwkU=0G$QmKb4HFl8dZJ+0)9?dAjW6qh~kSX&yeA(qZhd10=(9^n;)@}sdDBg`SsqZ zh_T;Mi|{S7GHN+&K&-P!TWLFQ)#esLcUqc4^bLA;{rmnII@A2a(nY`ZfDEo*)JBuT~t z9_T4@P?(6@%&AQQ9^^+`teI^3loO5HKyZUYH|A;RIvqCVqUbGZ(o@|lt&D7ToPY%4 z{JVOFS-{3XWtDxR={^d_XNGYHp#T*J7O(a_Az&solYXm{IEdP_XS`Z zr1xUIio@&T3zef@C;g5koykA5T=mc+&P`yS_SSx)GyYqPKpr$dx`T&q?MqZqZt%BJ zLZ_V3cE83caW|KG;-y5g_tnrlQjlIbz|)=mT*o>alXG~>+-lY-((|#b0vAT|d!OvN z_J&P25CyPZw?I9_050Vkd zisV6xA`c>Ek;jnANOhzR@*L6xX@;~wS|J^fPDpR0A2JXbjEq3uK_(y{ARi)AkZH(l zWHquL*^K;v>_Lto$B^U5DdYlj9f^mBB*H^d;UQ`9kPLW84m_j)9`X<#(i{)zhKKaT zL;Bz$gYb|y@sPLhkg<5k`*_H7JY*pr@;x5%6CQFD4>^yATmwSzk!1KtDtsgZK9UH|b literal 17955 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 TestResult { #[test] fn parsing_account_from_file() -> TestResult { + use miden_protocol::account::auth::AuthScheme; use miden_protocol::account::{AccountFile, AccountStorageMode, AccountType}; - use miden_standards::AuthScheme; + use miden_standards::AuthMethod; use miden_standards::account::wallets::create_basic_wallet; use tempfile::tempdir; @@ -97,7 +98,9 @@ fn parsing_account_from_file() -> TestResult { let secret_key = miden_protocol::crypto::dsa::falcon512_rpo::SecretKey::with_rng( &mut miden_node_utils::crypto::get_rpo_random_coin(&mut rng), ); - let auth = AuthScheme::Falcon512Rpo { pub_key: secret_key.public_key().into() }; + let auth = AuthMethod::SingleSig { + approver: (secret_key.public_key().into(), AuthScheme::Falcon512Rpo), + }; let test_account = create_basic_wallet( init_seed, @@ -138,8 +141,9 @@ path = "test_account.mac" #[test] fn parsing_native_faucet_from_file() -> TestResult { + use miden_protocol::account::auth::AuthScheme; use miden_protocol::account::{AccountBuilder, AccountFile, AccountStorageMode, AccountType}; - use miden_standards::account::auth::AuthFalcon512Rpo; + use miden_standards::account::auth::AuthSingleSig; use tempfile::tempdir; // Create a temporary directory for our test files @@ -152,7 +156,7 @@ fn parsing_native_faucet_from_file() -> TestResult { let secret_key = miden_protocol::crypto::dsa::falcon512_rpo::SecretKey::with_rng( &mut miden_node_utils::crypto::get_rpo_random_coin(&mut rng), ); - let auth = AuthFalcon512Rpo::new(secret_key.public_key().into()); + let auth = AuthSingleSig::new(secret_key.public_key().into(), AuthScheme::Falcon512Rpo); let faucet_component = BasicFungibleFaucet::new(TokenSymbol::new("MIDEN").unwrap(), 6, Felt::new(1_000_000_000))?; @@ -198,8 +202,9 @@ verification_base_fee = 0 #[test] fn native_faucet_from_file_must_be_faucet_type() -> TestResult { + use miden_protocol::account::auth::AuthScheme; use miden_protocol::account::{AccountFile, AccountStorageMode, AccountType}; - use miden_standards::AuthScheme; + use miden_standards::AuthMethod; use miden_standards::account::wallets::create_basic_wallet; use tempfile::tempdir; @@ -213,7 +218,9 @@ fn native_faucet_from_file_must_be_faucet_type() -> TestResult { let secret_key = miden_protocol::crypto::dsa::falcon512_rpo::SecretKey::with_rng( &mut miden_node_utils::crypto::get_rpo_random_coin(&mut rng), ); - let auth = AuthScheme::Falcon512Rpo { pub_key: secret_key.public_key().into() }; + let auth = AuthMethod::SingleSig { + approver: (secret_key.public_key().into(), AuthScheme::Falcon512Rpo), + }; let regular_account = create_basic_wallet( init_seed, diff --git a/crates/store/src/inner_forest/tests.rs b/crates/store/src/inner_forest/tests.rs index 9e90bfa29d..79bdbd0c8c 100644 --- a/crates/store/src/inner_forest/tests.rs +++ b/crates/store/src/inner_forest/tests.rs @@ -447,7 +447,7 @@ fn test_storage_map_incremental_updates() { #[test] fn test_empty_storage_map_entries_query() { - use miden_protocol::account::auth::PublicKeyCommitment; + use miden_protocol::account::auth::{AuthScheme, PublicKeyCommitment}; use miden_protocol::account::component::AccountComponentMetadata; use miden_protocol::account::{ AccountBuilder, @@ -457,7 +457,7 @@ fn test_empty_storage_map_entries_query() { StorageMap, StorageSlot, }; - use miden_standards::account::auth::AuthFalcon512Rpo; + use miden_standards::account::auth::AuthSingleSig; use miden_standards::code_builder::CodeBuilder; let mut forest = InnerForest::new(); @@ -482,7 +482,10 @@ fn test_empty_storage_map_entries_query() { .account_type(AccountType::RegularAccountImmutableCode) .storage_mode(AccountStorageMode::Public) .with_component(account_component) - .with_auth_component(AuthFalcon512Rpo::new(PublicKeyCommitment::from(EMPTY_WORD))) + .with_auth_component(AuthSingleSig::new( + PublicKeyCommitment::from(EMPTY_WORD), + AuthScheme::Falcon512Rpo, + )) .build_existing() .unwrap();