@layerzerolabs/protocol-stellar-v2 0.2.19 → 0.2.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/.turbo/turbo-build.log +795 -791
  2. package/.turbo/turbo-lint.log +325 -155
  3. package/.turbo/turbo-test.log +1398 -1277
  4. package/Cargo.lock +122 -111
  5. package/Cargo.toml +32 -16
  6. package/contracts/common-macros/Cargo.toml +7 -7
  7. package/contracts/common-macros/src/auth.rs +18 -37
  8. package/contracts/common-macros/src/contract_ttl.rs +18 -7
  9. package/contracts/common-macros/src/lib.rs +31 -14
  10. package/contracts/common-macros/src/lz_contract.rs +38 -7
  11. package/contracts/common-macros/src/storage.rs +251 -292
  12. package/contracts/common-macros/src/tests/contract_ttl.rs +1 -1
  13. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_multisig_code.snap +6 -12
  14. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_ownable_code.snap +12 -17
  15. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contractimpl_code.snap +2 -1
  16. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +2 -7
  17. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +20 -14
  18. package/contracts/common-macros/src/tests/upgradeable.rs +26 -4
  19. package/contracts/common-macros/src/ttl_configurable.rs +2 -10
  20. package/contracts/common-macros/src/ttl_extendable.rs +2 -10
  21. package/contracts/common-macros/src/upgradeable.rs +61 -26
  22. package/contracts/common-macros/src/utils.rs +0 -9
  23. package/contracts/endpoint-v2/src/lib.rs +3 -2
  24. package/contracts/endpoint-v2/src/tests/endpoint_v2/clear.rs +2 -2
  25. package/contracts/endpoint-v2/src/tests/endpoint_v2/lz_receive_alert.rs +3 -3
  26. package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +4 -4
  27. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_delegate.rs +17 -5
  28. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +4 -4
  29. package/contracts/endpoint-v2/src/tests/endpoint_v2/verify.rs +2 -2
  30. package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +2 -2
  31. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs +6 -6
  32. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_library.rs +67 -37
  33. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_send_library.rs +5 -5
  34. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library.rs +44 -54
  35. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library_timeout.rs +7 -7
  36. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_send_library.rs +8 -8
  37. package/contracts/endpoint-v2/src/tests/messaging_channel/burn.rs +3 -3
  38. package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +4 -4
  39. package/contracts/endpoint-v2/src/tests/messaging_channel/skip.rs +3 -3
  40. package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +2 -2
  41. package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +3 -3
  42. package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +2 -2
  43. package/contracts/layerzero-views/Cargo.toml +0 -1
  44. package/contracts/layerzero-views/src/layerzero_view.rs +1 -13
  45. package/contracts/macro-integration-tests/Cargo.toml +5 -15
  46. package/contracts/macro-integration-tests/tests/runtime/oapp/mod.rs +48 -0
  47. package/contracts/macro-integration-tests/tests/runtime/oapp/oapp_core.rs +170 -0
  48. package/contracts/macro-integration-tests/tests/runtime/oapp/options_type3.rs +154 -0
  49. package/contracts/macro-integration-tests/tests/runtime/oapp/receiver.rs +338 -0
  50. package/contracts/macro-integration-tests/tests/runtime/oapp/sender.rs +435 -0
  51. package/contracts/macro-integration-tests/tests/runtime.rs +1 -0
  52. package/contracts/macro-integration-tests/tests/ui/oapp/fail/custom_wrong_value.rs +8 -0
  53. package/contracts/macro-integration-tests/tests/ui/oapp/fail/custom_wrong_value.stderr +5 -0
  54. package/contracts/macro-integration-tests/tests/ui/oapp/fail/missing_lz_receive_internal.rs +8 -0
  55. package/contracts/macro-integration-tests/tests/ui/oapp/fail/missing_lz_receive_internal.stderr +71 -0
  56. package/contracts/macro-integration-tests/tests/ui/oapp/fail/non_struct_input.rs +10 -0
  57. package/contracts/macro-integration-tests/tests/ui/oapp/fail/non_struct_input.stderr +5 -0
  58. package/contracts/macro-integration-tests/tests/ui/oapp/fail/unknown_custom_option.rs +8 -0
  59. package/contracts/macro-integration-tests/tests/ui/oapp/fail/unknown_custom_option.stderr +5 -0
  60. package/contracts/macro-integration-tests/tests/ui/oapp/fail/wrong_key.rs +8 -0
  61. package/contracts/macro-integration-tests/tests/ui/oapp/fail/wrong_key.stderr +5 -0
  62. package/contracts/macro-integration-tests/tests/ui/oapp/pass/custom_all.rs +38 -0
  63. package/contracts/macro-integration-tests/tests/ui/oapp/pass/custom_single_trait.rs +96 -0
  64. package/contracts/macro-integration-tests/tests/ui/oapp/pass/minimal_contract.rs +64 -0
  65. package/contracts/macro-integration-tests/tests/ui/oapp/pass/struct_with_fields.rs +46 -0
  66. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_env.stderr +8 -0
  67. package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +1 -1
  68. package/contracts/macro-integration-tests/tests/ui/ownable/pass/only_auth_env_param_variants.rs +1 -1
  69. package/contracts/macro-integration-tests/tests/ui_oapp.rs +11 -0
  70. package/contracts/message-libs/message-lib-common/Cargo.toml +0 -1
  71. package/contracts/message-libs/message-lib-common/src/errors.rs +1 -1
  72. package/contracts/message-libs/treasury/Cargo.toml +0 -2
  73. package/contracts/message-libs/treasury/src/tests/treasury_tests.rs +2 -2
  74. package/contracts/message-libs/uln-302/src/events.rs +4 -0
  75. package/contracts/message-libs/uln-302/src/send_uln.rs +22 -6
  76. package/contracts/message-libs/uln-302/src/tests/receive_uln302/effective_receive_uln_config.rs +2 -2
  77. package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs +2 -2
  78. package/contracts/message-libs/uln-302/src/tests/receive_uln302/verify.rs +2 -2
  79. package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_executor_config.rs +2 -2
  80. package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_send_uln_config.rs +2 -2
  81. package/contracts/message-libs/uln-302/src/tests/send_uln302/send.rs +21 -67
  82. package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_executor_configs.rs +2 -2
  83. package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_send_uln_configs.rs +2 -2
  84. package/contracts/oapps/counter/Cargo.toml +5 -6
  85. package/contracts/oapps/counter/integration_tests/setup_uln.rs +1 -1
  86. package/contracts/oapps/counter/integration_tests/utils.rs +19 -12
  87. package/contracts/oapps/oapp/src/errors.rs +1 -1
  88. package/contracts/oapps/oapp/src/interfaces/mod.rs +3 -0
  89. package/contracts/oapps/oapp/src/interfaces/oapp_msg_inspector.rs +47 -0
  90. package/contracts/oapps/oapp/src/lib.rs +1 -0
  91. package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +4 -4
  92. package/contracts/oapps/oapp/src/oapp_core.rs +5 -5
  93. package/contracts/oapps/oapp/src/oapp_options_type3.rs +12 -4
  94. package/contracts/oapps/oapp/src/oapp_receiver.rs +14 -9
  95. package/contracts/oapps/oapp/src/tests/mod.rs +4 -4
  96. package/contracts/oapps/oapp/src/tests/oapp_core.rs +223 -0
  97. package/contracts/oapps/oapp/src/tests/oapp_options_type3.rs +240 -0
  98. package/contracts/oapps/oapp/src/tests/oapp_receiver.rs +381 -0
  99. package/contracts/oapps/oapp/src/tests/oapp_sender.rs +569 -0
  100. package/contracts/oapps/oapp-macros/Cargo.toml +8 -4
  101. package/contracts/oapps/oapp-macros/src/generators.rs +9 -34
  102. package/contracts/oapps/oapp-macros/src/lib.rs +3 -0
  103. package/contracts/oapps/oapp-macros/src/tests/mod.rs +2 -0
  104. package/contracts/oapps/oapp-macros/src/tests/oapp.rs +88 -0
  105. package/contracts/oapps/oapp-macros/src/tests/parse_custom_impls.rs +86 -0
  106. package/contracts/oapps/oapp-macros/src/tests/snapshots/oapp_macros__tests__oapp__snapshot_generate_oapp.snap +103 -0
  107. package/contracts/oapps/oft/integration-tests/utils.rs +28 -8
  108. package/contracts/oapps/oft/src/extensions/oft_fee.rs +153 -75
  109. package/contracts/oapps/oft/src/extensions/pausable.rs +61 -12
  110. package/contracts/oapps/oft/src/extensions/rate_limiter.rs +198 -134
  111. package/contracts/oapps/oft/src/oft.rs +45 -50
  112. package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +1 -1
  113. package/contracts/oapps/oft/src/oft_types/mint_burn.rs +4 -26
  114. package/contracts/oapps/oft-core/Cargo.toml +1 -4
  115. package/contracts/oapps/oft-core/integration-tests/setup.rs +3 -3
  116. package/contracts/oapps/oft-core/integration-tests/utils.rs +21 -3
  117. package/contracts/oapps/oft-core/src/errors.rs +3 -2
  118. package/contracts/oapps/oft-core/src/events.rs +6 -0
  119. package/contracts/oapps/oft-core/src/lib.rs +1 -1
  120. package/contracts/oapps/oft-core/src/oft_core.rs +341 -246
  121. package/contracts/oapps/oft-core/src/storage.rs +7 -3
  122. package/contracts/oapps/oft-core/src/tests/mod.rs +1 -0
  123. package/contracts/oapps/oft-core/src/tests/test_decimals.rs +37 -2
  124. package/contracts/oapps/oft-core/src/tests/test_lz_receive.rs +2 -2
  125. package/contracts/oapps/oft-core/src/tests/test_msg_inspector.rs +323 -0
  126. package/contracts/oapps/oft-core/src/tests/test_send.rs +2 -2
  127. package/contracts/oapps/oft-core/src/tests/test_utils.rs +61 -16
  128. package/contracts/upgrader/src/lib.rs +30 -57
  129. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract1.wasm +0 -0
  130. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract2.wasm +0 -0
  131. package/contracts/upgrader/src/tests/test_upgrader.rs +44 -35
  132. package/contracts/utils/Cargo.toml +0 -1
  133. package/contracts/utils/src/buffer_reader.rs +1 -0
  134. package/contracts/utils/src/errors.rs +4 -2
  135. package/contracts/utils/src/multisig.rs +17 -8
  136. package/contracts/utils/src/ownable.rs +6 -6
  137. package/contracts/utils/src/testing_utils.rs +124 -54
  138. package/contracts/utils/src/tests/multisig.rs +12 -12
  139. package/contracts/utils/src/tests/ownable.rs +6 -6
  140. package/contracts/utils/src/tests/testing_utils.rs +50 -167
  141. package/contracts/utils/src/tests/ttl_configurable.rs +5 -5
  142. package/contracts/utils/src/tests/upgradeable.rs +372 -175
  143. package/contracts/utils/src/ttl_configurable.rs +13 -7
  144. package/contracts/utils/src/upgradeable.rs +48 -23
  145. package/contracts/workers/dvn/Cargo.toml +6 -6
  146. package/contracts/workers/dvn/src/auth.rs +12 -42
  147. package/contracts/workers/dvn/src/dvn.rs +15 -40
  148. package/contracts/workers/dvn/src/errors.rs +0 -1
  149. package/contracts/workers/dvn/src/interfaces/dvn.rs +35 -0
  150. package/contracts/workers/dvn/src/lib.rs +4 -3
  151. package/contracts/workers/dvn/src/tests/auth.rs +1 -1
  152. package/contracts/workers/dvn/src/tests/dvn.rs +19 -15
  153. package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +2 -4
  154. package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +1 -3
  155. package/contracts/workers/dvn/src/tests/setup.rs +5 -9
  156. package/contracts/workers/dvn-fee-lib/Cargo.toml +2 -2
  157. package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +38 -22
  158. package/contracts/workers/dvn-fee-lib/src/lib.rs +12 -2
  159. package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +17 -16
  160. package/contracts/workers/executor/Cargo.toml +4 -0
  161. package/contracts/workers/executor/src/executor.rs +15 -36
  162. package/contracts/workers/executor/src/lib.rs +2 -2
  163. package/contracts/workers/executor/src/tests/auth.rs +394 -0
  164. package/contracts/workers/executor/src/tests/executor.rs +410 -0
  165. package/contracts/workers/executor/src/tests/mod.rs +3 -0
  166. package/contracts/workers/executor/src/tests/setup.rs +250 -0
  167. package/contracts/workers/executor-fee-lib/Cargo.toml +7 -1
  168. package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +62 -15
  169. package/contracts/workers/executor-fee-lib/src/executor_option.rs +28 -1
  170. package/contracts/workers/executor-fee-lib/src/lib.rs +11 -2
  171. package/contracts/workers/executor-fee-lib/src/tests/executor_fee_lib.rs +701 -0
  172. package/contracts/workers/executor-fee-lib/src/tests/executor_option.rs +370 -0
  173. package/contracts/workers/executor-fee-lib/src/tests/mod.rs +4 -0
  174. package/contracts/workers/executor-fee-lib/src/tests/setup.rs +60 -0
  175. package/contracts/workers/executor-helper/Cargo.toml +0 -1
  176. package/contracts/workers/executor-helper/src/lib.rs +3 -0
  177. package/contracts/workers/executor-helper/src/tests/executor_helper.rs +184 -0
  178. package/contracts/workers/executor-helper/src/tests/mod.rs +2 -0
  179. package/contracts/workers/executor-helper/src/tests/setup.rs +366 -0
  180. package/contracts/workers/fee-lib-interfaces/Cargo.toml +14 -0
  181. package/contracts/workers/{worker/src/interfaces/mod.rs → fee-lib-interfaces/src/lib.rs} +4 -3
  182. package/contracts/workers/price-feed/Cargo.toml +7 -1
  183. package/contracts/workers/price-feed/src/events.rs +1 -1
  184. package/contracts/workers/price-feed/src/lib.rs +12 -4
  185. package/contracts/workers/price-feed/src/price_feed.rs +5 -21
  186. package/contracts/workers/price-feed/src/storage.rs +1 -1
  187. package/contracts/workers/price-feed/src/tests/mod.rs +2 -0
  188. package/contracts/workers/price-feed/src/tests/price_feed.rs +869 -0
  189. package/contracts/workers/price-feed/src/tests/setup.rs +70 -0
  190. package/contracts/workers/price-feed/src/types.rs +1 -1
  191. package/contracts/workers/worker/src/errors.rs +1 -4
  192. package/contracts/workers/worker/src/lib.rs +0 -2
  193. package/contracts/workers/worker/src/storage.rs +32 -29
  194. package/contracts/workers/worker/src/tests/setup.rs +2 -8
  195. package/contracts/workers/worker/src/tests/worker.rs +96 -74
  196. package/contracts/workers/worker/src/worker.rs +75 -75
  197. package/docs/error-spec.md +55 -0
  198. package/docs/layerzero-v2-on-stellar.md +447 -0
  199. package/docs/oapp-guide.md +212 -0
  200. package/docs/oft-guide.md +314 -0
  201. package/package.json +3 -3
  202. package/sdk/.turbo/turbo-test.log +268 -263
  203. package/sdk/dist/generated/bml.d.ts +12 -4
  204. package/sdk/dist/generated/bml.js +9 -7
  205. package/sdk/dist/generated/counter.d.ts +306 -298
  206. package/sdk/dist/generated/counter.js +48 -46
  207. package/sdk/dist/generated/dvn.d.ts +450 -411
  208. package/sdk/dist/generated/dvn.js +66 -64
  209. package/sdk/dist/generated/dvn_fee_lib.d.ts +294 -338
  210. package/sdk/dist/generated/dvn_fee_lib.js +33 -64
  211. package/sdk/dist/generated/endpoint.d.ts +108 -100
  212. package/sdk/dist/generated/endpoint.js +21 -19
  213. package/sdk/dist/generated/executor.d.ts +414 -370
  214. package/sdk/dist/generated/executor.js +58 -55
  215. package/sdk/dist/generated/executor_fee_lib.d.ts +333 -377
  216. package/sdk/dist/generated/executor_fee_lib.js +34 -65
  217. package/sdk/dist/generated/executor_helper.d.ts +26 -190
  218. package/sdk/dist/generated/executor_helper.js +23 -28
  219. package/sdk/dist/generated/layerzero_view.d.ts +1271 -0
  220. package/sdk/dist/generated/layerzero_view.js +294 -0
  221. package/sdk/dist/generated/oft.d.ts +408 -385
  222. package/sdk/dist/generated/oft.js +89 -92
  223. package/sdk/dist/generated/price_feed.d.ts +385 -429
  224. package/sdk/dist/generated/price_feed.js +50 -81
  225. package/sdk/dist/generated/sml.d.ts +108 -100
  226. package/sdk/dist/generated/sml.js +21 -19
  227. package/sdk/dist/generated/treasury.d.ts +108 -100
  228. package/sdk/dist/generated/treasury.js +21 -19
  229. package/sdk/dist/generated/uln302.d.ts +108 -100
  230. package/sdk/dist/generated/uln302.js +23 -21
  231. package/sdk/dist/generated/upgrader.d.ts +189 -18
  232. package/sdk/dist/generated/upgrader.js +84 -4
  233. package/sdk/dist/index.d.ts +1 -0
  234. package/sdk/dist/index.js +2 -0
  235. package/sdk/package.json +1 -1
  236. package/sdk/src/index.ts +3 -0
  237. package/sdk/test/oft-sml.test.ts +4 -4
  238. package/sdk/test/suites/localnet.ts +84 -20
  239. package/sdk/test/upgrader.test.ts +2 -3
  240. package/tools/ts-bindings-gen/src/main.rs +2 -1
  241. package/contracts/ERROR_SPEC.md +0 -44
  242. package/contracts/endpoint-v2/ARCHITECTURE.md +0 -233
  243. package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +0 -175
  244. package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +0 -212
  245. package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +0 -153
  246. package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +0 -294
  247. /package/contracts/workers/{worker/src/interfaces → fee-lib-interfaces/src}/dvn_fee_lib.rs +0 -0
  248. /package/contracts/workers/{worker/src/interfaces → fee-lib-interfaces/src}/executor_fee_lib.rs +0 -0
  249. /package/contracts/workers/{worker/src/interfaces → fee-lib-interfaces/src}/price_feed.rs +0 -0
@@ -1,20 +1,14 @@
1
1
  ---
2
2
  source: contracts/common-macros/src/tests/auth.rs
3
- assertion_line: 33
4
3
  expression: formatted
5
4
  ---
6
5
  pub struct MyContract;
7
6
  use utils::{auth::Auth as _, multisig::Multisig as _};
8
- #[doc(hidden)]
9
- mod __multisig_impl_my_contract {
10
- use super::*;
11
- use utils::{auth::Auth, multisig::Multisig};
12
- #[common_macros::contract_impl]
13
- impl Auth for MyContract {
14
- fn authorizer(env: &soroban_sdk::Env) -> soroban_sdk::Address {
15
- env.current_contract_address()
16
- }
7
+ #[common_macros::contract_impl]
8
+ impl utils::auth::Auth for MyContract {
9
+ fn authorizer(env: &soroban_sdk::Env) -> soroban_sdk::Address {
10
+ env.current_contract_address()
17
11
  }
18
- #[common_macros::contract_impl(contracttrait)]
19
- impl Multisig for MyContract {}
20
12
  }
13
+ #[common_macros::contract_impl(contracttrait)]
14
+ impl utils::multisig::Multisig for MyContract {}
@@ -1,24 +1,19 @@
1
1
  ---
2
2
  source: contracts/common-macros/src/tests/auth.rs
3
- assertion_line: 18
4
3
  expression: formatted
5
4
  ---
6
5
  pub struct MyContract;
7
- use utils::{auth::Auth as _, ownable::{Ownable as _, OwnableInitializer as _}};
8
- #[doc(hidden)]
9
- mod __ownable_impl_my_contract {
10
- use super::*;
11
- use utils::{
12
- auth::Auth, errors::OwnableError, option_ext::OptionExt as _,
13
- ownable::{Ownable, OwnableInitializer},
14
- };
15
- impl OwnableInitializer for MyContract {}
16
- #[common_macros::contract_impl]
17
- impl Auth for MyContract {
18
- fn authorizer(env: &soroban_sdk::Env) -> soroban_sdk::Address {
19
- <Self as Ownable>::owner(env).unwrap_or_panic(env, OwnableError::OwnerNotSet)
20
- }
6
+ use utils::{
7
+ auth::Auth as _, option_ext::OptionExt as _,
8
+ ownable::{Ownable as _, OwnableInitializer as _},
9
+ };
10
+ impl utils::ownable::OwnableInitializer for MyContract {}
11
+ #[common_macros::contract_impl]
12
+ impl utils::auth::Auth for MyContract {
13
+ fn authorizer(env: &soroban_sdk::Env) -> soroban_sdk::Address {
14
+ <Self as utils::ownable::Ownable>::owner(env)
15
+ .unwrap_or_panic(env, utils::errors::OwnableError::OwnerNotSet)
21
16
  }
22
- #[common_macros::contract_impl(contracttrait)]
23
- impl Ownable for MyContract {}
24
17
  }
18
+ #[common_macros::contract_impl(contracttrait)]
19
+ impl utils::ownable::Ownable for MyContract {}
@@ -52,8 +52,9 @@ impl MyContract {
52
52
  pub(crate) fn pub_crate_with_env(env: Env, value: u32) -> u32 {
53
53
  value * 7
54
54
  }
55
- /// Constructor method - should NOT have TTL extension
55
+ /// Constructor method - should have init_default_ttl_configs
56
56
  pub fn __constructor(env: &Env, value: u32) {
57
+ utils::ttl_configurable::init_default_ttl_configs(env);
57
58
  let _ = value * 2;
58
59
  }
59
60
  }
@@ -6,10 +6,5 @@ pub struct MyContract {
6
6
  some_field: u32,
7
7
  }
8
8
  use utils::ttl_configurable::TtlConfigurable as _;
9
- #[doc(hidden)]
10
- mod __ttl_configurable_impl_my_contract {
11
- use super::*;
12
- use utils::ttl_configurable::{TtlConfig, TtlConfigurable};
13
- #[common_macros::contract_impl(contracttrait)]
14
- impl TtlConfigurable for MyContract {}
15
- }
9
+ #[common_macros::contract_impl(contracttrait)]
10
+ impl utils::ttl_configurable::TtlConfigurable for MyContract {}
@@ -1,21 +1,27 @@
1
1
  ---
2
2
  source: contracts/common-macros/src/tests/upgradeable.rs
3
- assertion_line: 17
4
- expression: formatted
3
+ expression: combined
5
4
  ---
5
+ // ============================================
6
+ // Default: requires manual UpgradeableInternal
7
+ // ============================================
8
+
6
9
  pub struct MyContract;
7
10
  use utils::upgradeable::Upgradeable as _;
8
11
  soroban_sdk::contractmeta!(key = "binver", val = "0.0.1");
9
- type MigrationData = <MyContract as utils::upgradeable::UpgradeableInternal>::MigrationData;
10
- /// Implement the Upgradeable trait for the contract.
11
- #[common_macros::contract_impl]
12
- impl utils::upgradeable::Upgradeable for MyContract {
13
- #[common_macros::only_auth]
14
- fn upgrade(env: &soroban_sdk::Env, new_wasm_hash: soroban_sdk::BytesN<32>) {
15
- utils::upgradeable::upgrade(env, new_wasm_hash)
16
- }
17
- #[common_macros::only_auth]
18
- fn migrate(env: &soroban_sdk::Env, migration_data: &MigrationData) {
19
- utils::upgradeable::migrate::<Self>(env, migration_data)
20
- }
12
+ #[common_macros::contract_impl(contracttrait)]
13
+ impl utils::upgradeable::Upgradeable for MyContract {}
14
+
15
+ // ============================================
16
+ // With no_migration: auto-generates impl
17
+ // ============================================
18
+
19
+ pub struct MyContract;
20
+ use utils::upgradeable::Upgradeable as _;
21
+ soroban_sdk::contractmeta!(key = "binver", val = "0.0.1");
22
+ impl utils::upgradeable::UpgradeableInternal for MyContract {
23
+ type MigrationData = ();
24
+ fn __migrate(_env: &soroban_sdk::Env, _migration_data: &Self::MigrationData) {}
21
25
  }
26
+ #[common_macros::contract_impl(contracttrait)]
27
+ impl utils::upgradeable::Upgradeable for MyContract {}
@@ -1,3 +1,4 @@
1
+ use proc_macro2::TokenStream;
1
2
  use quote::quote;
2
3
 
3
4
  use crate::tests::test_helpers::{assert_panics_contains, non_struct_item_inputs};
@@ -11,10 +12,29 @@ fn snapshot_generated_upgradeable_code() {
11
12
  let input = quote! {
12
13
  pub struct MyContract;
13
14
  };
14
- let result = crate::upgradeable::generate_upgradeable_impl(input);
15
- let formatted = prettyplease::unparse(&syn::parse2::<syn::File>(result).expect("failed to parse generated code"));
16
15
 
17
- insta::assert_snapshot!(formatted);
16
+ // Test default behavior (requires manual UpgradeableInternal impl)
17
+ let default_result = crate::upgradeable::generate_upgradeable_impl(TokenStream::new(), input.clone());
18
+ let default_formatted =
19
+ prettyplease::unparse(&syn::parse2::<syn::File>(default_result).expect("failed to parse generated code"));
20
+
21
+ // Test with no_migration (auto-generates UpgradeableInternal impl)
22
+ let no_migration_result = crate::upgradeable::generate_upgradeable_impl(quote! { no_migration }, input);
23
+ let no_migration_formatted =
24
+ prettyplease::unparse(&syn::parse2::<syn::File>(no_migration_result).expect("failed to parse generated code"));
25
+
26
+ let combined = format!(
27
+ "// ============================================\n\
28
+ // Default: requires manual UpgradeableInternal\n\
29
+ // ============================================\n\n\
30
+ {default_formatted}\n\
31
+ // ============================================\n\
32
+ // With no_migration: auto-generates impl\n\
33
+ // ============================================\n\n\
34
+ {no_migration_formatted}"
35
+ );
36
+
37
+ insta::assert_snapshot!(combined);
18
38
  }
19
39
 
20
40
  // ============================================
@@ -23,9 +43,11 @@ fn snapshot_generated_upgradeable_code() {
23
43
 
24
44
  #[test]
25
45
  fn test_upgradeable_rejects_non_struct_inputs() {
46
+ let attr = TokenStream::new();
26
47
  for (case, input) in non_struct_item_inputs() {
48
+ let attr_clone = attr.clone();
27
49
  assert_panics_contains(case, "failed to parse struct", || {
28
- crate::upgradeable::generate_upgradeable_impl(input.clone());
50
+ crate::upgradeable::generate_upgradeable_impl(attr_clone, input.clone());
29
51
  });
30
52
  }
31
53
  }
@@ -1,6 +1,5 @@
1
1
  //! TtlConfigurable macro for Stellar smart contracts.
2
2
 
3
- use crate::utils;
4
3
  use proc_macro2::TokenStream;
5
4
  use quote::quote;
6
5
  use syn::ItemStruct;
@@ -16,20 +15,13 @@ use syn::ItemStruct;
16
15
  pub fn generate_ttl_configurable_impl(input: TokenStream) -> TokenStream {
17
16
  let item_struct: ItemStruct = syn::parse2(input).unwrap_or_else(|e| panic!("failed to parse struct: {}", e));
18
17
  let name = &item_struct.ident;
19
- let impl_mod = utils::impl_mod_ident(name, "ttl_configurable");
20
18
 
21
19
  quote! {
22
20
  #item_struct
23
21
 
24
22
  use utils::ttl_configurable::TtlConfigurable as _;
25
23
 
26
- #[doc(hidden)]
27
- mod #impl_mod {
28
- use super::*;
29
- use utils::ttl_configurable::{TtlConfig, TtlConfigurable};
30
-
31
- #[common_macros::contract_impl(contracttrait)]
32
- impl TtlConfigurable for #name {}
33
- }
24
+ #[common_macros::contract_impl(contracttrait)]
25
+ impl utils::ttl_configurable::TtlConfigurable for #name {}
34
26
  }
35
27
  }
@@ -1,6 +1,5 @@
1
1
  //! TtlExtendable macro for Stellar smart contracts.
2
2
 
3
- use crate::utils;
4
3
  use proc_macro2::TokenStream;
5
4
  use quote::quote;
6
5
  use syn::ItemStruct;
@@ -17,20 +16,13 @@ use syn::ItemStruct;
17
16
  pub fn generate_ttl_extendable_impl(input: TokenStream) -> TokenStream {
18
17
  let item_struct: ItemStruct = syn::parse2(input).unwrap_or_else(|e| panic!("failed to parse struct: {}", e));
19
18
  let name = &item_struct.ident;
20
- let impl_mod = utils::impl_mod_ident(name, "ttl_extendable");
21
19
 
22
20
  quote! {
23
21
  #item_struct
24
22
 
25
23
  use utils::ttl_extendable::TtlExtendable as _;
26
24
 
27
- #[doc(hidden)]
28
- mod #impl_mod {
29
- use super::*;
30
- use utils::ttl_extendable::TtlExtendable;
31
-
32
- #[soroban_sdk::contractimpl(contracttrait)]
33
- impl TtlExtendable for #name {}
34
- }
25
+ #[soroban_sdk::contractimpl(contracttrait)]
26
+ impl utils::ttl_extendable::TtlExtendable for #name {}
35
27
  }
36
28
  }
@@ -1,6 +1,34 @@
1
+ //! Upgradeable macro for Stellar smart contracts.
2
+
1
3
  use proc_macro2::TokenStream;
2
4
  use quote::quote;
3
- use syn::ItemStruct;
5
+ use syn::{
6
+ parse::{Parse, ParseStream},
7
+ Ident, ItemStruct,
8
+ };
9
+
10
+ /// Configuration options for the `#[upgradeable]` macro.
11
+ #[derive(Debug, Default)]
12
+ pub struct UpgradeableConfig {
13
+ /// If true, generates a default no-op `UpgradeableInternal` implementation.
14
+ /// Use this for initial deployments when no migration logic is needed yet.
15
+ pub no_migration: bool,
16
+ }
17
+
18
+ impl Parse for UpgradeableConfig {
19
+ fn parse(input: ParseStream) -> syn::Result<Self> {
20
+ if input.is_empty() {
21
+ return Ok(Self::default());
22
+ }
23
+
24
+ let ident: Ident = input.parse()?;
25
+ if ident == "no_migration" {
26
+ Ok(Self { no_migration: true })
27
+ } else {
28
+ Err(syn::Error::new(ident.span(), "expected `no_migration`"))
29
+ }
30
+ }
31
+ }
4
32
 
5
33
  /// Generates the upgradeable implementation from the `#[upgradeable]` attribute macro.
6
34
  ///
@@ -10,51 +38,58 @@ use syn::ItemStruct;
10
38
  ///
11
39
  /// # Behavior
12
40
  ///
13
- /// - Implements the `upgrade` and `migrate` functions with auth-based access control.
41
+ /// - Implements the `Upgradeable` trait using its default methods (which include auth).
14
42
  /// - Sets the contract crate version as `"binver"` metadata using
15
43
  /// `soroban_sdk::contractmeta!`. Gets the crate version via the env variable
16
44
  /// `CARGO_PKG_VERSION` which corresponds to the "version" attribute in
17
45
  /// Cargo.toml. If no such attribute or if it is "0.0.0", skips this step.
18
- /// - Requires the contract to implement `Auth` and `UpgradeableInternal` traits.
46
+ /// - By default, requires the contract to implement `UpgradeableInternal` trait.
47
+ /// - With `no_migration` flag, generates a default no-op `UpgradeableInternal` impl.
19
48
  ///
20
49
  /// # Example
21
50
  /// ```ignore
22
- /// #[ownable] // or implement Multisig for self-owning contracts
51
+ /// // Requires manual UpgradeableInternal implementation (default, safety first)
52
+ /// #[ownable]
23
53
  /// #[upgradeable]
24
54
  /// pub struct MyContract;
55
+ ///
56
+ /// // Auto-generates no-op UpgradeableInternal (for initial deployment)
57
+ /// #[ownable]
58
+ /// #[upgradeable(no_migration)]
59
+ /// pub struct MyContract;
25
60
  /// ```
26
- pub fn generate_upgradeable_impl(input: TokenStream) -> TokenStream {
27
- let item_struct: ItemStruct = syn::parse2(input).unwrap_or_else(|e| panic!("failed to parse struct: {}", e));
61
+ pub fn generate_upgradeable_impl(attr: TokenStream, input: TokenStream) -> TokenStream {
62
+ let config: UpgradeableConfig =
63
+ syn::parse2(attr).unwrap_or_else(|e| panic!("failed to parse upgradeable config: {}", e));
64
+ let item_struct: ItemStruct =
65
+ syn::parse2(input).unwrap_or_else(|e| panic!("failed to parse struct: {}", e));
28
66
  let name = &item_struct.ident;
29
67
 
30
68
  let binver = set_binver_from_env();
31
69
 
32
- let upgradeable_impl = quote! {
33
- use utils::upgradeable::Upgradeable as _;
34
-
35
- #binver
36
-
37
- // Type alias to avoid path complexity in contractimpl
38
- type MigrationData = <#name as utils::upgradeable::UpgradeableInternal>::MigrationData;
39
-
40
- /// Implement the Upgradeable trait for the contract.
41
- #[common_macros::contract_impl]
42
- impl utils::upgradeable::Upgradeable for #name {
43
- #[common_macros::only_auth]
44
- fn upgrade(env: &soroban_sdk::Env, new_wasm_hash: soroban_sdk::BytesN<32>) {
45
- utils::upgradeable::upgrade(env, new_wasm_hash)
46
- }
47
-
48
- #[common_macros::only_auth]
49
- fn migrate(env: &soroban_sdk::Env, migration_data: &MigrationData) {
50
- utils::upgradeable::migrate::<Self>(env, migration_data)
70
+ // Generate default UpgradeableInternal impl only when no_migration is set
71
+ let default_internal_impl = if config.no_migration {
72
+ quote! {
73
+ impl utils::upgradeable::UpgradeableInternal for #name {
74
+ type MigrationData = ();
75
+ fn __migrate(_env: &soroban_sdk::Env, _migration_data: &Self::MigrationData) {}
51
76
  }
52
77
  }
78
+ } else {
79
+ quote! {}
53
80
  };
54
81
 
55
82
  quote! {
56
83
  #item_struct
57
- #upgradeable_impl
84
+
85
+ use utils::upgradeable::Upgradeable as _;
86
+
87
+ #binver
88
+
89
+ #default_internal_impl
90
+
91
+ #[common_macros::contract_impl(contracttrait)]
92
+ impl utils::upgradeable::Upgradeable for #name {}
58
93
  }
59
94
  }
60
95
 
@@ -1,4 +1,3 @@
1
- use heck::ToSnakeCase;
2
1
  use proc_macro2::TokenStream;
3
2
  use quote::quote;
4
3
  use syn::{punctuated::Punctuated, token::Comma, FnArg, Ident, Pat, Type, TypePath};
@@ -55,11 +54,3 @@ pub fn is_env_type(ty: &Type) -> bool {
55
54
  fn is_reference_type(ty: &Type) -> bool {
56
55
  matches!(ty, Type::Reference(_))
57
56
  }
58
-
59
- /// Creates a unique hidden module identifier for trait implementations.
60
- ///
61
- /// Generates a module name in the format `__{trait_name}_impl_{struct_name}` to avoid
62
- /// name collisions when multiple traits are implemented for the same struct.
63
- pub fn impl_mod_ident(struct_name: &Ident, trait_name: &str) -> Ident {
64
- Ident::new(&format!("__{}_impl_{}", trait_name, struct_name.to_string().to_snake_case()), struct_name.span())
65
- }
@@ -1,11 +1,12 @@
1
1
  #![no_std]
2
2
 
3
3
  pub mod constants;
4
- mod errors;
5
4
  pub mod events;
6
- mod interfaces;
7
5
  pub mod util;
8
6
 
7
+ mod errors;
8
+ mod interfaces;
9
+
9
10
  pub use errors::*;
10
11
  pub use interfaces::*;
11
12
 
@@ -1,5 +1,5 @@
1
1
  use soroban_sdk::{testutils::Address as _, Address, Bytes, BytesN};
2
- use utils::testing_utils::assert_event;
2
+ use utils::testing_utils::assert_eq_event;
3
3
 
4
4
  use crate::{
5
5
  errors::EndpointError,
@@ -116,7 +116,7 @@ fn test_clear_emits_packet_delivered_event() {
116
116
 
117
117
  clear_packet_with_auth(&context, &receiver, &origin, &receiver, &guid, &message);
118
118
 
119
- assert_event(env, &endpoint_client.address, PacketDelivered { origin: origin.clone(), receiver: receiver.clone() });
119
+ assert_eq_event(env, &endpoint_client.address, PacketDelivered { origin: origin.clone(), receiver: receiver.clone() });
120
120
  }
121
121
 
122
122
  // Lazy inbound nonce updates
@@ -1,5 +1,5 @@
1
1
  use soroban_sdk::{testutils::Address as _, Address, Bytes, BytesN, Env};
2
- use utils::testing_utils::assert_event;
2
+ use utils::testing_utils::assert_eq_event;
3
3
 
4
4
  use crate::{
5
5
  endpoint_v2::EndpointV2Client, events::LzReceiveAlert, tests::endpoint_setup::setup,
@@ -87,7 +87,7 @@ fn test_lz_receive_alert_auth() {
87
87
  &f.reason,
88
88
  );
89
89
 
90
- assert_event(
90
+ assert_eq_event(
91
91
  env,
92
92
  &endpoint_client.address,
93
93
  LzReceiveAlert {
@@ -155,7 +155,7 @@ fn test_lz_receive_alert_with_empty_data() {
155
155
  &f.reason,
156
156
  );
157
157
 
158
- assert_event(
158
+ assert_eq_event(
159
159
  env,
160
160
  &endpoint_client.address,
161
161
  LzReceiveAlert {
@@ -1,5 +1,5 @@
1
1
  use soroban_sdk::{testutils::Address as _, vec, Address, Bytes, BytesN, Env};
2
- use utils::testing_utils::assert_event;
2
+ use utils::testing_utils::assert_contains_event;
3
3
 
4
4
  use crate::{
5
5
  errors::EndpointError,
@@ -53,7 +53,7 @@ fn test_send_with_native_fee_exact_payment() {
53
53
 
54
54
  // Verify PacketSent event was published
55
55
  // MockSendLib::send returns encoded_packet = packet.message.clone()
56
- assert_event(
56
+ assert_contains_event(
57
57
  env,
58
58
  &endpoint_client.address,
59
59
  PacketSent {
@@ -146,7 +146,7 @@ fn test_send_with_zro_fee() {
146
146
  assert_eq!(receipt.fee.zro_fee, 25);
147
147
 
148
148
  // Verify PacketSent event was published
149
- assert_event(
149
+ assert_contains_event(
150
150
  env,
151
151
  &endpoint_client.address,
152
152
  PacketSent {
@@ -436,7 +436,7 @@ fn test_send_with_non_empty_options_emits_event_and_charges_fee() {
436
436
  assert_eq!(receipt.fee.zro_fee, 0);
437
437
 
438
438
  // Verify PacketSent event captures options and encoded packet.
439
- assert_event(
439
+ assert_contains_event(
440
440
  env,
441
441
  &endpoint_client.address,
442
442
  PacketSent { encoded_packet: params.message.clone(), options: options.clone(), send_library: send_lib.clone() },
@@ -1,5 +1,5 @@
1
1
  use soroban_sdk::{testutils::Address as _, Address};
2
- use utils::testing_utils::assert_event;
2
+ use utils::testing_utils::assert_eq_event;
3
3
 
4
4
  use crate::{events::DelegateSet, tests::endpoint_setup::setup};
5
5
 
@@ -21,7 +21,11 @@ fn test_set_delegate() {
21
21
  context.set_delegate_with_auth(&oapp, &delegate_option);
22
22
 
23
23
  // Verify event emission.
24
- assert_event(env, &endpoint_client.address, DelegateSet { oapp: oapp.clone(), delegate: Some(delegate.clone()) });
24
+ assert_eq_event(
25
+ env,
26
+ &endpoint_client.address,
27
+ DelegateSet { oapp: oapp.clone(), delegate: Some(delegate.clone()) },
28
+ );
25
29
 
26
30
  // Verify state update via public interface.
27
31
  let actual_delegate = endpoint_client.delegate(&oapp);
@@ -41,13 +45,21 @@ fn test_set_delegate_overwrites_existing_delegate() {
41
45
  // Set delegate to A.
42
46
  let delegate_a_opt = Some(delegate_a.clone());
43
47
  context.set_delegate_with_auth(&oapp, &delegate_a_opt);
44
- assert_event(env, &endpoint_client.address, DelegateSet { oapp: oapp.clone(), delegate: Some(delegate_a.clone()) });
48
+ assert_eq_event(
49
+ env,
50
+ &endpoint_client.address,
51
+ DelegateSet { oapp: oapp.clone(), delegate: Some(delegate_a.clone()) },
52
+ );
45
53
  assert_eq!(endpoint_client.delegate(&oapp), Some(delegate_a.clone()));
46
54
 
47
55
  // Overwrite delegate with B.
48
56
  let delegate_b_opt = Some(delegate_b.clone());
49
57
  context.set_delegate_with_auth(&oapp, &delegate_b_opt);
50
- assert_event(env, &endpoint_client.address, DelegateSet { oapp: oapp.clone(), delegate: Some(delegate_b.clone()) });
58
+ assert_eq_event(
59
+ env,
60
+ &endpoint_client.address,
61
+ DelegateSet { oapp: oapp.clone(), delegate: Some(delegate_b.clone()) },
62
+ );
51
63
  assert_eq!(endpoint_client.delegate(&oapp), Some(delegate_b.clone()));
52
64
  }
53
65
 
@@ -91,7 +103,7 @@ fn test_set_delegate_remove() {
91
103
  context.set_delegate_with_auth(&oapp, &remove_option);
92
104
 
93
105
  // Verify event emission.
94
- assert_event(env, &endpoint_client.address, DelegateSet { oapp: oapp.clone(), delegate: None });
106
+ assert_eq_event(env, &endpoint_client.address, DelegateSet { oapp: oapp.clone(), delegate: None });
95
107
 
96
108
  // Verify state update via public interface.
97
109
  let stored_delegate_after = endpoint_client.delegate(&oapp);
@@ -1,5 +1,5 @@
1
1
  use soroban_sdk::{testutils::Address as _, Address};
2
- use utils::testing_utils::assert_event;
2
+ use utils::testing_utils::assert_eq_event;
3
3
 
4
4
  use crate::{events::ZroSet, tests::endpoint_setup::setup, tests::endpoint_setup::TestSetup};
5
5
 
@@ -23,7 +23,7 @@ fn test_set_zro() {
23
23
  set_zro_with_auth(&context, &context.zro_token_client.address);
24
24
 
25
25
  // Verify event emission.
26
- assert_event(env, &endpoint_client.address, ZroSet { zro: context.zro_token_client.address.clone() });
26
+ assert_eq_event(env, &endpoint_client.address, ZroSet { zro: context.zro_token_client.address.clone() });
27
27
 
28
28
  // Verify state update via public interface.
29
29
  let zro_token = endpoint_client.zro();
@@ -43,12 +43,12 @@ fn test_set_zro_overwrites_existing_zro() {
43
43
 
44
44
  // Set ZRO to the first address.
45
45
  set_zro_with_auth(&context, &context.zro_token_client.address);
46
- assert_event(env, &endpoint_client.address, ZroSet { zro: context.zro_token_client.address.clone() });
46
+ assert_eq_event(env, &endpoint_client.address, ZroSet { zro: context.zro_token_client.address.clone() });
47
47
  assert_eq!(endpoint_client.zro(), Some(context.zro_token_client.address.clone()));
48
48
 
49
49
  // Overwrite ZRO with the second address.
50
50
  set_zro_with_auth(&context, &zro_addr_2);
51
- assert_event(env, &endpoint_client.address, ZroSet { zro: zro_addr_2.clone() });
51
+ assert_eq_event(env, &endpoint_client.address, ZroSet { zro: zro_addr_2.clone() });
52
52
  assert_eq!(endpoint_client.zro(), Some(zro_addr_2));
53
53
  }
54
54
 
@@ -1,5 +1,5 @@
1
1
  use soroban_sdk::{vec, Bytes, BytesN, Env};
2
- use utils::testing_utils::assert_event;
2
+ use utils::testing_utils::assert_eq_event;
3
3
 
4
4
  use crate::{
5
5
  errors::EndpointError,
@@ -51,7 +51,7 @@ fn test_verify_success() {
51
51
  endpoint_client.verify(&receive_lib, &origin, &receiver, &payload_hash);
52
52
 
53
53
  // Verify PacketVerified event was published
54
- assert_event(
54
+ assert_eq_event(
55
55
  env,
56
56
  &endpoint_client.address,
57
57
  PacketVerified { origin: origin.clone(), receiver: receiver.clone(), payload_hash: payload_hash.clone() },
@@ -1,5 +1,5 @@
1
1
  use soroban_sdk::{testutils::Address as _, vec, Address};
2
- use utils::testing_utils::assert_event;
2
+ use utils::testing_utils::assert_eq_event;
3
3
 
4
4
  use crate::{
5
5
  errors::EndpointError,
@@ -27,7 +27,7 @@ fn test_register_library() {
27
27
  context.register_library_with_auth(&lib);
28
28
 
29
29
  // Verify event emission.
30
- assert_event(env, &endpoint_client.address, LibraryRegistered { new_lib: lib.clone() });
30
+ assert_eq_event(env, &endpoint_client.address, LibraryRegistered { new_lib: lib.clone() });
31
31
 
32
32
  // Verify state update via public interface.
33
33
  assert!(endpoint_client.is_registered_library(&lib));
@@ -1,5 +1,5 @@
1
1
  use soroban_sdk::{testutils::Address as _, testutils::Ledger, vec, Address};
2
- use utils::testing_utils::assert_event;
2
+ use utils::testing_utils::assert_eq_event;
3
3
 
4
4
  use crate::{
5
5
  errors::EndpointError,
@@ -171,7 +171,7 @@ fn test_set_default_receive_lib_timeout_success() {
171
171
  set_default_receive_lib_timeout_with_auth(&context, context.eid, &timeout);
172
172
 
173
173
  // Verify event emission.
174
- assert_event(
174
+ assert_eq_event(
175
175
  env,
176
176
  &endpoint_client.address,
177
177
  DefaultReceiveLibTimeoutSet { src_eid: context.eid, timeout: timeout.clone() },
@@ -203,7 +203,7 @@ fn test_set_default_receive_lib_timeout_success_with_send_and_receive_type() {
203
203
  set_default_receive_lib_timeout_with_auth(&context, context.eid, &timeout);
204
204
 
205
205
  // Verify event emission.
206
- assert_event(
206
+ assert_eq_event(
207
207
  env,
208
208
  &endpoint_client.address,
209
209
  DefaultReceiveLibTimeoutSet { src_eid: context.eid, timeout: timeout.clone() },
@@ -224,7 +224,7 @@ fn test_set_default_receive_lib_timeout_success_with_none() {
224
224
  set_default_receive_lib_timeout_with_auth(&context, context.eid, &None);
225
225
 
226
226
  // Verify event emission.
227
- assert_event(env, &endpoint_client.address, DefaultReceiveLibTimeoutSet { src_eid: context.eid, timeout: None });
227
+ assert_eq_event(env, &endpoint_client.address, DefaultReceiveLibTimeoutSet { src_eid: context.eid, timeout: None });
228
228
 
229
229
  // Verify state update via public interface.
230
230
  assert_eq!(endpoint_client.default_receive_library_timeout(&context.eid), None);
@@ -250,7 +250,7 @@ fn test_set_default_receive_lib_timeout_clears_existing_timeout() {
250
250
 
251
251
  // First set a timeout.
252
252
  set_default_receive_lib_timeout_with_auth(&context, context.eid, &timeout);
253
- assert_event(
253
+ assert_eq_event(
254
254
  env,
255
255
  &endpoint_client.address,
256
256
  DefaultReceiveLibTimeoutSet { src_eid: context.eid, timeout: timeout.clone() },
@@ -259,6 +259,6 @@ fn test_set_default_receive_lib_timeout_clears_existing_timeout() {
259
259
 
260
260
  // Then clear it.
261
261
  set_default_receive_lib_timeout_with_auth(&context, context.eid, &None);
262
- assert_event(env, &endpoint_client.address, DefaultReceiveLibTimeoutSet { src_eid: context.eid, timeout: None });
262
+ assert_eq_event(env, &endpoint_client.address, DefaultReceiveLibTimeoutSet { src_eid: context.eid, timeout: None });
263
263
  assert_eq!(endpoint_client.default_receive_library_timeout(&context.eid), None);
264
264
  }