diff --git a/Cargo.lock b/Cargo.lock index 9646215b..470a4c8d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -16,9 +16,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "0.8.14" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac4b22b3e51cac09fd2adfcc73b55f447b4df669f983c13f7894ec82b607c63f" +checksum = "24acd2f5ba97c7a320e67217274bc81fe3c3174b8e6144ec875d9d54e760e278" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -28,9 +28,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.8.14" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9db948902dfbae96a73c2fbf1f7abec62af034ab883e4c777c3fd29702bd6e2c" +checksum = "ec878088ec6283ce1e90d280316aadd3d6ce3de06ff63d68953c855e7e447e92" dependencies = [ "alloy-rlp", "bytes", @@ -39,7 +39,6 @@ dependencies = [ "derive_more", "foldhash", "hashbrown 0.15.1", - "hex-literal", "indexmap 2.6.0", "itoa", "k256", @@ -66,9 +65,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.8.14" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bfd7853b65a2b4f49629ec975fee274faf6dff15ab8894c620943398ef283c0" +checksum = "8d039d267aa5cbb7732fa6ce1fd9b5e9e29368f580f80ba9d7a8450c794de4b2" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", @@ -80,9 +79,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-expander" -version = "0.8.14" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82ec42f342d9a9261699f8078e57a7a4fda8aaa73c1a212ed3987080e6a9cd13" +checksum = "620ae5eee30ee7216a38027dec34e0585c55099f827f92f50d11e3d2d3a4a954" dependencies = [ "alloy-sol-macro-input", "const-hex", @@ -98,9 +97,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-input" -version = "0.8.14" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2c50e6a62ee2b4f7ab3c6d0366e5770a21cad426e109c2f40335a1b3aff3df" +checksum = "ad9f7d057e00f8c5994e4ff4492b76532c51ead39353aa2ed63f8c50c0f4d52e" dependencies = [ "const-hex", "dunce", @@ -113,9 +112,9 @@ dependencies = [ [[package]] name = "alloy-sol-type-parser" -version = "0.8.14" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac17c6e89a50fb4a758012e4b409d9a0ba575228e69b539fe37d7a1bd507ca4a" +checksum = "74e60b084fe1aef8acecda2743ff2d93c18ff3eb67a2d3b12f62582a1e66ef5e" dependencies = [ "serde", "winnow", @@ -123,9 +122,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.8.14" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9dc0fffe397aa17628160e16b89f704098bf3c9d74d5d369ebc239575936de5" +checksum = "c1382302752cd751efd275f4d6ef65877ddf61e0e6f5ac84ef4302b79a33a31a" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -906,9 +905,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" [[package]] name = "funty" @@ -1395,9 +1394,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.89" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] @@ -1755,9 +1754,9 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "soroban-builtin-sdk-macros" -version = "22.1.0" +version = "22.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df6c3137afcdb5a62b9ed3b1994ff9439351eaa795d8d33f758b4386ce2d0060" +checksum = "cf2e42bf80fcdefb3aae6ff3c7101a62cf942e95320ed5b518a1705bc11c6b2f" dependencies = [ "itertools", "proc-macro2", @@ -1767,9 +1766,9 @@ dependencies = [ [[package]] name = "soroban-env-common" -version = "22.1.0" +version = "22.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24deb45507c219d3608f04768c3b700b627bc345cc4c19e31c4cc57fc7d77be9" +checksum = "027cd856171bfd6ad2c0ffb3b7dfe55ad7080fb3050c36ad20970f80da634472" dependencies = [ "arbitrary", "crate-git-revision", @@ -1786,9 +1785,9 @@ dependencies = [ [[package]] name = "soroban-env-guest" -version = "22.1.0" +version = "22.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b010a822db635139fcfdb29be8a333606e5204c445e044d3450a5c47eaba20a" +checksum = "9a07dda1ae5220d975979b19ad4fd56bc86ec7ec1b4b25bc1c5d403f934e592e" dependencies = [ "soroban-env-common", "static_assertions", @@ -1796,9 +1795,9 @@ dependencies = [ [[package]] name = "soroban-env-host" -version = "22.1.0" +version = "22.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee57de1756bae449a52da032c8312113f355cbcf7e906fbb8957a44827999dc" +checksum = "66e8b03a4191d485eab03f066336112b2a50541a7553179553dc838b986b94dd" dependencies = [ "ark-bls12-381", "ark-ec", @@ -1832,9 +1831,9 @@ dependencies = [ [[package]] name = "soroban-env-macros" -version = "22.1.0" +version = "22.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1528c2d0d19ab70e9947f930f8707fdc0e9bfd4baf6d275b8a2f67482c2f2d99" +checksum = "00eff744764ade3bc480e4909e3a581a240091f3d262acdce80b41f7069b2bd9" dependencies = [ "itertools", "proc-macro2", @@ -1847,9 +1846,9 @@ dependencies = [ [[package]] name = "soroban-ledger-snapshot" -version = "22.0.2" +version = "22.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8c348b829dbd5b1c4a9d9858ddf5c793c24ca94373feb82290cdf9746b1fa5" +checksum = "22fa784df79d0d30432ba999906bd47fcad12b2980d1bd651992f2191c7c92f4" dependencies = [ "serde", "serde_json", @@ -1861,9 +1860,9 @@ dependencies = [ [[package]] name = "soroban-sdk" -version = "22.0.2" +version = "22.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686982e1358a954c23032c51e15c70829abc1cffe7c7c0a7a21047a2267f97dc" +checksum = "84bf0c0e19b20977d27b66a5659951893b0ea25f2a01692196861c6db700ada3" dependencies = [ "arbitrary", "bytes-lit", @@ -1883,9 +1882,9 @@ dependencies = [ [[package]] name = "soroban-sdk-macros" -version = "22.0.2" +version = "22.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad3dcc9d5fd9ddf5c8b5c9cdcf3807ccc127bfaef1be23fc4a5d51ad167381f7" +checksum = "9612ffb704c7a36703e86a60f286dbd3e1ffca42237a8b353328a05d88f8b028" dependencies = [ "crate-git-revision", "darling", @@ -1903,9 +1902,9 @@ dependencies = [ [[package]] name = "soroban-spec" -version = "22.0.2" +version = "22.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "343672b1374951b1f601c07eca944db2c4f0d5c47e94b29d8fb2d42af1215f30" +checksum = "709db692196f0600678cd8ec2a7e2b269dd63a32477dcdec5b3a353fb26bb128" dependencies = [ "base64 0.13.1", "stellar-xdr", @@ -1915,9 +1914,9 @@ dependencies = [ [[package]] name = "soroban-spec-rust" -version = "22.0.2" +version = "22.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47205064fcd8fefe5dba103612cabb448dac64829a3e7bbcca221550a22f59df" +checksum = "457bba1f081b7b78ef219bc5a523649df4927dd0625dfa723a0682b36fb198de" dependencies = [ "prettyplease", "proc-macro2", @@ -1931,9 +1930,9 @@ dependencies = [ [[package]] name = "soroban-token-sdk" -version = "22.0.2" +version = "22.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8783237676bc8a5eb155299af14165f2792e719e967aaf52546428247843a107" +checksum = "35f005b48d0eb3975c99cee4d3f8da021a5dc3d54e9d2350aa5834946fab9c28" dependencies = [ "soroban-sdk", ] @@ -2085,9 +2084,9 @@ dependencies = [ [[package]] name = "stellar-xdr" -version = "22.0.0" +version = "22.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20c2130275cc730d042b3082f51145f0486f5a543d6d72fced02ed9048b82b57" +checksum = "2ce69db907e64d1e70a3dce8d4824655d154749426a6132b25395c49136013e4" dependencies = [ "arbitrary", "base64 0.13.1", @@ -2135,9 +2134,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.14" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0523f59468a2696391f2a772edc089342aacd53c3caa2ac3264e598edf119b" +checksum = "b84e4d83a0a6704561302b917a932484e1cae2d8c6354c64be8b7bac1c1fe057" dependencies = [ "paste", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index 1106f309..d1fc1a83 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,26 +8,27 @@ rust-version = "1.81.0" license = "MIT OR Apache-2.0" [workspace.dependencies] -soroban-sdk = { version = "22.0.2" } -soroban-token-sdk = { version = "22.0.2" } -proc-macro2 = { version = "1.0" } -cfg-if = { version = "1.0" } -stellar-axelar-std = { version = "^0.1.0", path = "packages/axelar-std", features = ["derive"] } -stellar-axelar-std-derive = { version = "^0.1.0", path = "packages/axelar-std-derive" } +alloy-primitives = { version = "0.8.19", default-features = false, features = [ + "std", +] } +alloy-sol-types = { version = "0.8.19", default-features = false, features = [ + "std", +] } +cfg-if = { version = "1.0", default-features = false } +goldie = { version = "0.5.0", default-features = false } +hex = { version = "0.4", default-features = false } +paste = { version = "1.0", default-features = false } +proc-macro2 = { version = "1.0", default-features = false } +rand = { version = "0.8.5", default-features = false } +soroban-sdk = { version = "22.0.5" } +soroban-token-sdk = { version = "22.0.5" } stellar-axelar-gas-service = { version = "^0.1.0", path = "contracts/axelar-gas-service" } stellar-axelar-gateway = { version = "^0.1.0", path = "contracts/axelar-gateway" } stellar-axelar-operators = { version = "^0.1.0", path = "contracts/axelar-operators" } +stellar-axelar-std = { version = "^0.1.0", path = "packages/axelar-std", features = ["derive"] } +stellar-axelar-std-derive = { version = "^0.1.0", path = "packages/axelar-std-derive" } stellar-interchain-token = { version = "^0.1.0", path = "contracts/interchain-token" } stellar-interchain-token-service = { version = "^0.1.0", path = "contracts/interchain-token-service" } -alloy-primitives = { version = "0.8.14", default-features = false, features = [ - "std", -] } -alloy-sol-types = { version = "0.8.14", default-features = false, features = [ - "std", -] } -goldie = "0.5.0" -hex = { version = "0.4" } -paste = "1.0" [workspace.lints.clippy] nursery = { level = "warn", priority = -1 } diff --git a/contracts/axelar-gas-service/tests/test.rs b/contracts/axelar-gas-service/tests/test.rs index 196ad219..032ecc17 100644 --- a/contracts/axelar-gas-service/tests/test.rs +++ b/contracts/axelar-gas-service/tests/test.rs @@ -143,9 +143,6 @@ fn pay_gas() { &Bytes::new(&env), ); - assert_eq!(0, token_client.balance(&spender)); - assert_eq!(gas_amount, token_client.balance(&contract_id)); - assert_last_emitted_event( &env, &contract_id, @@ -155,11 +152,14 @@ fn pay_gas() { destination_chain, destination_address, env.crypto().keccak256(&payload), - spender, + spender.clone(), token, ), (Bytes::new(&env),), ); + + assert_eq!(0, token_client.balance(&spender)); + assert_eq!(gas_amount, token_client.balance(&contract_id)); } #[test] @@ -223,9 +223,6 @@ fn add_gas() { client.add_gas(&sender, &message_id, &spender, &token); - assert_eq!(0, token_client.balance(&spender)); - assert_eq!(gas_amount, token_client.balance(&contract_id)); - assert_last_emitted_event( &env, &contract_id, @@ -233,11 +230,14 @@ fn add_gas() { Symbol::new(&env, "gas_added"), sender, message_id, - spender, + spender.clone(), token, ), (), ); + + assert_eq!(0, token_client.balance(&spender)); + assert_eq!(gas_amount, token_client.balance(&contract_id)); } #[test] @@ -322,15 +322,19 @@ fn collect_fees() { client.collect_fees(&gas_collector, &token); - assert_eq!(refund_amount, token_client.balance(&gas_collector)); - assert_eq!(supply - refund_amount, token_client.balance(&contract_id)); - assert_last_emitted_event( &env, &contract_id, - (Symbol::new(&env, "gas_collected"), gas_collector, token), + ( + Symbol::new(&env, "gas_collected"), + gas_collector.clone(), + token, + ), (), ); + + assert_eq!(refund_amount, token_client.balance(&gas_collector)); + assert_eq!(supply - refund_amount, token_client.balance(&contract_id)); } #[test] @@ -396,18 +400,18 @@ fn refund() { client.refund(&message_id, &receiver, &token); - assert_eq!(refund_amount, token_client.balance(&receiver)); - assert_eq!(supply - refund_amount, token_client.balance(&contract_id)); - assert_last_emitted_event( &env, &contract_id, ( Symbol::new(&env, "gas_refunded"), message_id, - receiver, + receiver.clone(), token, ), (), ); + + assert_eq!(refund_amount, token_client.balance(&receiver)); + assert_eq!(supply - refund_amount, token_client.balance(&contract_id)); } diff --git a/contracts/axelar-gateway/Cargo.toml b/contracts/axelar-gateway/Cargo.toml index e5fdbf49..701ba7e5 100644 --- a/contracts/axelar-gateway/Cargo.toml +++ b/contracts/axelar-gateway/Cargo.toml @@ -12,18 +12,18 @@ crate-type = ["cdylib", "rlib"] [dependencies] cfg-if = { workspace = true } ed25519-dalek = { version = "^2.1", default-features = false, optional = true } -rand = { version = "0.8.5", optional = true } -rand_chacha = "0.3" +rand = { workspace = true, optional = true } soroban-sdk = { workspace = true } stellar-axelar-std = { workspace = true } [dev-dependencies] ed25519-dalek = { version = "^2.1" } goldie = { workspace = true } -hex = "0.4" +hex = { workspace = true } hex-literal = "0.4" paste = { workspace = true } -rand = { version = "0.8.5" } +rand = { workspace = true } +rand_chacha = { version = "0.3" } soroban-sdk = { workspace = true, features = ["testutils"] } stellar-axelar-gateway = { workspace = true, features = ["testutils"] } stellar-axelar-std = { workspace = true, features = ["testutils"] } diff --git a/contracts/axelar-gateway/src/testutils.rs b/contracts/axelar-gateway/src/testutils.rs index 0c5564c1..963f85e9 100644 --- a/contracts/axelar-gateway/src/testutils.rs +++ b/contracts/axelar-gateway/src/testutils.rs @@ -55,11 +55,6 @@ pub fn get_approve_hash(env: &Env, messages: Vec) -> BytesN<32> { .into() } -pub fn deterministic_rng() -> rand_chacha::ChaCha20Rng { - use rand::SeedableRng; - rand_chacha::ChaCha20Rng::seed_from_u64(42) -} - pub fn generate_test_message(env: &Env) -> (Message, Bytes) { generate_test_message_with_rng(env, rand::thread_rng()) } diff --git a/contracts/axelar-gateway/tests/gateway.rs b/contracts/axelar-gateway/tests/gateway.rs index 40c45ecc..1bab1c73 100644 --- a/contracts/axelar-gateway/tests/gateway.rs +++ b/contracts/axelar-gateway/tests/gateway.rs @@ -6,8 +6,8 @@ use stellar_axelar_gateway::event::{ }; #[cfg(any(test, feature = "testutils"))] use stellar_axelar_gateway::testutils::{ - deterministic_rng, generate_proof, generate_signers_set, generate_signers_set_with_rng, - generate_test_message, generate_test_message_with_rng, get_approve_hash, randint, + generate_proof, generate_signers_set, generate_signers_set_with_rng, generate_test_message, + generate_test_message_with_rng, get_approve_hash, randint, }; use stellar_axelar_gateway::types::Message; use stellar_axelar_std::{assert_auth, assert_auth_err, assert_contract_err, events}; @@ -18,6 +18,11 @@ use utils::setup_env; const DESTINATION_CHAIN: &str = "ethereum"; const DESTINATION_ADDRESS: &str = "0x4EFE356BEDeCC817cb89B4E9b796dB8bC188DC59"; +fn deterministic_rng() -> rand_chacha::ChaCha20Rng { + use rand::SeedableRng; + rand_chacha::ChaCha20Rng::seed_from_u64(42) +} + #[test] fn call_contract() { let (env, _signers, client) = setup_env(1, 5); @@ -31,7 +36,6 @@ fn call_contract() { user, client.call_contract(&user, &destination_chain, &destination_address, &payload) ); - goldie::assert!(events::fmt_last_emitted_event::(&env)); } @@ -50,8 +54,6 @@ fn validate_message() { _, ) = generate_test_message(&env); - let prev_event_count = env.events().all().len(); - let approved = assert_auth!( contract_address, client.validate_message( @@ -63,8 +65,7 @@ fn validate_message() { ) ); assert!(!approved); - - assert_eq!(env.events().all().len(), prev_event_count); + assert_eq!(env.events().all().len(), 0); } #[test] @@ -84,7 +85,6 @@ fn approve_message() { let proof = generate_proof(&env, data_hash, signers); client.approve_messages(&messages, &proof); - goldie::assert!(events::fmt_last_emitted_event::(&env)); let is_approved = client.is_message_approved( @@ -125,7 +125,6 @@ fn execute_approved_message() { ) ); assert!(approved); - goldie::assert!(events::fmt_last_emitted_event::(&env)); let is_approved = client.is_message_approved( @@ -182,10 +181,8 @@ fn approve_messages_skip_duplicate_message() { let proof = generate_proof(&env, data_hash, signers); client.approve_messages(&messages, &proof); - let prev_event_count = env.events().all().len(); - assert!(client.try_approve_messages(&messages, &proof).is_ok()); - - assert_eq!(env.events().all().len(), prev_event_count); + client.approve_messages(&messages, &proof); + assert_eq!(env.events().all().len(), 0); } #[test] @@ -203,7 +200,6 @@ fn rotate_signers() { let bypass_rotation_delay = false; client.rotate_signers(&new_signers.signers, &proof, &bypass_rotation_delay); - goldie::assert!(events::fmt_last_emitted_event::(&env)); } @@ -229,7 +225,6 @@ fn approve_messages_after_rotation() { let proof = generate_proof(&env, data_hash, new_signers); client.approve_messages(&messages, &proof); - goldie::assert!(events::fmt_last_emitted_event::(&env)); } @@ -250,7 +245,6 @@ fn rotate_signers_bypass_rotation_delay() { client.operator(), client.rotate_signers(&new_signers.signers, &proof, &bypass_rotation_delay) ); - goldie::assert!(events::fmt_last_emitted_event::(&env)); } diff --git a/contracts/interchain-token-service/tests/executable.rs b/contracts/interchain-token-service/tests/executable.rs index f84f3d74..1903304d 100644 --- a/contracts/interchain-token-service/tests/executable.rs +++ b/contracts/interchain-token-service/tests/executable.rs @@ -169,12 +169,11 @@ fn interchain_transfer_execute_succeeds() { gateway_client.approve_messages(&messages, &proof); client.execute(&source_chain, &message_id, &source_address, &payload); + goldie::assert!(events::fmt_last_emitted_event::(&env)); let token = token::TokenClient::new(&env, &client.token_address(&token_id)); assert_eq!(token.balance(&executable_id), amount); - goldie::assert!(events::fmt_last_emitted_event::(&env)); - let executable_client = test::ExecutableContractClient::new(&env, &executable_id); assert_eq!(executable_client.message(), Some(data)); } diff --git a/contracts/interchain-token-service/tests/flow_limit.rs b/contracts/interchain-token-service/tests/flow_limit.rs index 32b7cc44..1b2df17a 100644 --- a/contracts/interchain-token-service/tests/flow_limit.rs +++ b/contracts/interchain-token-service/tests/flow_limit.rs @@ -155,10 +155,9 @@ fn set_flow_limit_succeeds() { client.operator(), client.set_flow_limit(&token_id, &Some(dummy_flow_limit())) ); + goldie::assert!(events::fmt_last_emitted_event::(&env)); assert_eq!(client.flow_limit(&token_id), Some(dummy_flow_limit())); - - goldie::assert!(events::fmt_last_emitted_event::(&env)); } #[test] diff --git a/contracts/interchain-token-service/tests/register_canonical_token.rs b/contracts/interchain-token-service/tests/register_canonical_token.rs index e8978a4e..b6f859eb 100644 --- a/contracts/interchain-token-service/tests/register_canonical_token.rs +++ b/contracts/interchain-token-service/tests/register_canonical_token.rs @@ -18,17 +18,15 @@ fn register_canonical_token_succeeds() { let expected_id = client.interchain_token_id(&Address::zero(&env), &expected_deploy_salt); assert_eq!(client.register_canonical_token(&token_address), expected_id); + goldie::assert!(events::fmt_last_emitted_event::< + InterchainTokenIdClaimedEvent, + >(&env)); assert_eq!(client.token_address(&expected_id), token_address); - assert_eq!( client.token_manager_type(&expected_id), TokenManagerType::LockUnlock ); - - goldie::assert!(events::fmt_last_emitted_event::< - InterchainTokenIdClaimedEvent, - >(&env)); } #[test] diff --git a/packages/axelar-std/src/error.rs b/packages/axelar-std/src/error.rs index de6a4b97..c8b5817a 100644 --- a/packages/axelar-std/src/error.rs +++ b/packages/axelar-std/src/error.rs @@ -135,14 +135,18 @@ macro_rules! assert_auth { ($caller:expr, $client:ident . $method:ident ( $($arg:expr),* $(,)? )) => {{ use soroban_sdk::IntoVal; + // Evaluate the expression before the method call. + // If the expression itself called the contract, e.g. client.owner(), + // then this will prevent events from being reset when checking the auth after the call. + let caller = $caller.clone(); + // Paste is used to concatenate the method name with the `try_` prefix paste::paste! { let result = $client .mock_auths(&[$crate::mock_auth!( $client.env, - $caller, - $client.$method($($arg),*), - &[] + caller, + $client.$method($($arg),*) )]) .[]($($arg),*); } @@ -160,7 +164,7 @@ macro_rules! assert_auth { assert_eq!( $client.env.auths(), std::vec![( - $caller.clone(), + caller, soroban_sdk::testutils::AuthorizedInvocation { function: soroban_sdk::testutils::AuthorizedFunction::Contract(( $client.address.clone(), @@ -181,13 +185,14 @@ macro_rules! assert_auth_err { ($caller:expr, $client:ident . $method:ident ( $($arg:expr),* $(,)? )) => {{ use soroban_sdk::xdr::{ScError, ScErrorCode, ScVal}; + let caller = $caller.clone(); + paste::paste! { let call_result = $client .mock_auths(&[$crate::mock_auth!( $client.env, - $caller, - $client.$method($($arg),*), - &[] + caller, + $client.$method($($arg),*) )]) .[]($($arg),*); } @@ -229,6 +234,6 @@ macro_rules! mock_auth { $caller:expr, $client:ident . $method:ident ( $($arg:expr),* $(,)? ) ) => {{ - mock_auth!($env, $caller, $client.$method($($arg),*), &[]) + $crate::mock_auth!($env, $caller, $client.$method($($arg),*), &[]) }}; } diff --git a/packages/axelar-std/src/interfaces/upgradable.rs b/packages/axelar-std/src/interfaces/upgradable.rs index 6d314ab8..3dc0b9bf 100644 --- a/packages/axelar-std/src/interfaces/upgradable.rs +++ b/packages/axelar-std/src/interfaces/upgradable.rs @@ -205,13 +205,12 @@ mod test { assert!(client.migration_data().is_none()); assert_auth!(owner, client.migrate(&())); + goldie::assert!(events::fmt_last_emitted_event::(&env)); assert_eq!( client.migration_data(), Some(String::from_str(&env, "migrated")) ); - - goldie::assert!(events::fmt_last_emitted_event::(&env)) } #[test] @@ -234,10 +233,9 @@ mod test { }; assert_auth!(owner, client.migrate(&data)); + goldie::assert!(events::fmt_last_emitted_event::(&env)); assert_eq!(client.migration_data(), Some(data.data1)); - - goldie::assert!(events::fmt_last_emitted_event::(&env)) } // Because migration happens on a contract loaded from WASM, code coverage analysis doesn't recognize