@layerzerolabs/protocol-stellar-v2 0.2.15 → 0.2.18

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 (257) hide show
  1. package/.turbo/turbo-build.log +350 -309
  2. package/.turbo/turbo-lint.log +146 -108
  3. package/.turbo/turbo-test.log +1423 -1238
  4. package/Cargo.lock +12 -0
  5. package/Cargo.toml +3 -0
  6. package/contracts/ERROR_SPEC.md +44 -0
  7. package/contracts/common-macros/src/auth.rs +113 -0
  8. package/contracts/common-macros/src/contract_ttl.rs +84 -0
  9. package/contracts/common-macros/src/lib.rs +181 -30
  10. package/contracts/common-macros/src/lz_contract.rs +83 -0
  11. package/contracts/common-macros/src/tests/{ownable.rs → auth.rs} +48 -15
  12. package/contracts/common-macros/src/tests/contract_ttl.rs +662 -0
  13. package/contracts/common-macros/src/tests/mod.rs +2 -2
  14. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_multisig_code.snap +20 -0
  15. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_ownable_code.snap +24 -0
  16. package/contracts/common-macros/src/tests/snapshots/{common_macros__tests__ownable__snapshot_only_owner_preserves_function_signature.snap → common_macros__tests__auth__snapshot_only_auth_preserves_function_signature.snap} +4 -4
  17. package/contracts/common-macros/src/tests/snapshots/{common_macros__tests__contract_impl__snapshot_generated_contract_impl_code.snap → common_macros__tests__contract_ttl__snapshot_generated_contractimpl_code.snap} +3 -3
  18. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contracttrait_code.snap +69 -0
  19. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +7 -21
  20. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +2 -2
  21. package/contracts/common-macros/src/ttl_configurable.rs +19 -34
  22. package/contracts/common-macros/src/ttl_extendable.rs +36 -0
  23. package/contracts/common-macros/src/upgradeable.rs +5 -5
  24. package/contracts/common-macros/src/utils.rs +9 -0
  25. package/contracts/endpoint-v2/src/constants.rs +4 -4
  26. package/contracts/endpoint-v2/src/endpoint_v2.rs +38 -40
  27. package/contracts/endpoint-v2/src/errors.rs +4 -3
  28. package/contracts/endpoint-v2/src/events.rs +1 -1
  29. package/contracts/endpoint-v2/src/message_lib_manager.rs +18 -5
  30. package/contracts/endpoint-v2/src/messaging_channel.rs +11 -1
  31. package/contracts/endpoint-v2/src/messaging_composer.rs +11 -1
  32. package/contracts/endpoint-v2/src/storage.rs +1 -1
  33. package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +3 -3
  34. package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +1 -1
  35. package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +2 -2
  36. package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +3 -3
  37. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +4 -4
  38. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +3 -3
  39. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +1 -1
  40. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +3 -3
  41. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +1 -1
  42. package/contracts/endpoint-v2/src/tests/messaging_channel/clear_payload.rs +4 -4
  43. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound.rs +1 -1
  44. package/contracts/layerzero-views/src/layerzero_view.rs +3 -6
  45. package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +2 -2
  46. package/contracts/macro-integration-tests/tests/runtime/ownable/{only_owner_guard.rs → only_auth_guard.rs} +1 -1
  47. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +1 -1
  48. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +1 -1
  49. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/mod.rs +0 -1
  50. package/contracts/macro-integration-tests/tests/ui/ownable/fail/{only_owner_missing_env.rs → only_auth_missing_env.rs} +3 -3
  51. package/contracts/macro-integration-tests/tests/ui/ownable/fail/{only_owner_missing_env.stderr → only_auth_missing_env.stderr} +4 -4
  52. package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +2 -3
  53. package/contracts/macro-integration-tests/tests/ui/ownable/pass/{only_owner_env_param_variants.rs → only_auth_env_param_variants.rs} +9 -9
  54. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/minimal_contract.rs +6 -6
  55. package/contracts/message-libs/message-lib-common/src/errors.rs +7 -2
  56. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/decode_packet_header.rs +3 -3
  57. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_lz_receive_option.rs +1 -2
  58. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_native_drop_option.rs +1 -2
  59. package/contracts/message-libs/message-lib-common/src/tests/worker_options/convert_legacy_options.rs +9 -9
  60. package/contracts/message-libs/message-lib-common/src/tests/worker_options/extract_type_3_options.rs +1 -1
  61. package/contracts/message-libs/message-lib-common/src/tests/worker_options/left_pad_to_bytes32.rs +1 -1
  62. package/contracts/message-libs/message-lib-common/src/tests/worker_options/split_worker_options.rs +2 -2
  63. package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +7 -9
  64. package/contracts/message-libs/treasury/src/errors.rs +2 -2
  65. package/contracts/message-libs/treasury/src/events.rs +1 -1
  66. package/contracts/message-libs/treasury/src/interfaces/zro_fee_lib.rs +2 -2
  67. package/contracts/message-libs/treasury/src/storage.rs +1 -1
  68. package/contracts/message-libs/treasury/src/tests/treasury_tests.rs +1 -1
  69. package/contracts/message-libs/treasury/src/treasury.rs +14 -16
  70. package/contracts/message-libs/uln-302/src/receive_uln.rs +13 -2
  71. package/contracts/message-libs/uln-302/src/send_uln.rs +23 -3
  72. package/contracts/message-libs/uln-302/src/uln302.rs +6 -24
  73. package/contracts/oapps/counter/Cargo.toml +14 -1
  74. package/contracts/oapps/counter/integration_tests/mod.rs +4 -1
  75. package/contracts/oapps/counter/integration_tests/{setup.rs → setup_sml.rs} +48 -80
  76. package/contracts/oapps/counter/integration_tests/setup_uln.rs +997 -0
  77. package/contracts/oapps/counter/integration_tests/signing.rs +62 -0
  78. package/contracts/oapps/counter/integration_tests/test_with_sml.rs +24 -55
  79. package/contracts/oapps/counter/integration_tests/test_with_uln.rs +314 -0
  80. package/contracts/oapps/counter/integration_tests/utils.rs +196 -53
  81. package/contracts/oapps/counter/src/counter.rs +67 -43
  82. package/contracts/oapps/counter/src/tests/mod.rs +0 -13
  83. package/contracts/oapps/counter/src/tests/test_counter.rs +5 -7
  84. package/contracts/oapps/oapp/src/errors.rs +5 -1
  85. package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +93 -78
  86. package/contracts/oapps/oapp/src/oapp_core.rs +36 -21
  87. package/contracts/oapps/oapp/src/oapp_options_type3.rs +48 -12
  88. package/contracts/oapps/oapp/src/oapp_receiver.rs +106 -41
  89. package/contracts/oapps/oapp/src/oapp_sender.rs +26 -34
  90. package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +9 -8
  91. package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +25 -17
  92. package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +7 -7
  93. package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +14 -15
  94. package/contracts/oapps/oapp-macros/src/generators.rs +128 -0
  95. package/contracts/oapps/oapp-macros/src/lib.rs +113 -56
  96. package/contracts/oapps/oft/integration-tests/setup.rs +25 -7
  97. package/contracts/oapps/oft/src/errors.rs +6 -1
  98. package/contracts/oapps/oft/src/extensions/oft_fee.rs +8 -8
  99. package/contracts/oapps/oft/src/extensions/pausable.rs +4 -4
  100. package/contracts/oapps/oft/src/extensions/rate_limiter.rs +5 -5
  101. package/contracts/oapps/oft/src/lib.rs +4 -2
  102. package/contracts/oapps/oft/src/oft.rs +24 -64
  103. package/contracts/oapps/oft/src/oft_impl.rs +201 -0
  104. package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +1 -3
  105. package/contracts/oapps/oft/src/oft_types/mint_burn.rs +1 -4
  106. package/contracts/oapps/oft/src/storage.rs +2 -0
  107. package/contracts/oapps/oft/src/tests/extensions/setup.rs +36 -22
  108. package/contracts/oapps/oft/src/tests/extensions/test_oft_fee.rs +5 -3
  109. package/contracts/oapps/oft/src/tests/extensions/test_pausable.rs +5 -3
  110. package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +5 -3
  111. package/contracts/oapps/oft/src/tests/test_decimals.rs +2 -2
  112. package/contracts/oapps/oft/src/tests/test_oft_msg_codec.rs +1 -2
  113. package/contracts/oapps/oft/src/tests/test_utils.rs +45 -23
  114. package/contracts/oapps/oft/src/types.rs +20 -0
  115. package/contracts/oapps/oft-std/integration-tests/setup.rs +4 -2
  116. package/contracts/oapps/oft-std/src/oft.rs +24 -6
  117. package/contracts/upgrader/src/lib.rs +4 -4
  118. package/contracts/utils/src/auth.rs +44 -0
  119. package/contracts/utils/src/errors.rs +27 -5
  120. package/contracts/utils/src/lib.rs +3 -0
  121. package/contracts/utils/src/multisig.rs +211 -0
  122. package/contracts/utils/src/ownable.rs +12 -10
  123. package/contracts/utils/src/tests/buffer_reader.rs +6 -6
  124. package/contracts/utils/src/tests/buffer_writer.rs +6 -6
  125. package/contracts/utils/src/tests/bytes_ext.rs +2 -4
  126. package/contracts/utils/src/tests/mod.rs +1 -0
  127. package/contracts/utils/src/tests/multisig.rs +731 -0
  128. package/contracts/utils/src/tests/option_ext.rs +2 -5
  129. package/contracts/utils/src/tests/ownable.rs +16 -5
  130. package/contracts/utils/src/tests/ttl_configurable.rs +27 -16
  131. package/contracts/utils/src/tests/upgradeable.rs +4 -2
  132. package/contracts/utils/src/ttl_configurable.rs +23 -8
  133. package/contracts/utils/src/ttl_extendable.rs +27 -0
  134. package/contracts/utils/src/upgradeable.rs +2 -0
  135. package/contracts/workers/dvn/Cargo.toml +1 -1
  136. package/contracts/workers/dvn/src/auth.rs +7 -7
  137. package/contracts/workers/dvn/src/dvn.rs +10 -38
  138. package/contracts/workers/dvn/src/errors.rs +0 -7
  139. package/contracts/workers/dvn/src/events.rs +1 -14
  140. package/contracts/workers/dvn/src/interfaces/dvn.rs +2 -2
  141. package/contracts/workers/dvn/src/interfaces/mod.rs +0 -2
  142. package/contracts/workers/dvn/src/storage.rs +3 -13
  143. package/contracts/workers/dvn/src/tests/auth.rs +4 -4
  144. package/contracts/workers/dvn/src/tests/dvn.rs +1 -2
  145. package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +7 -8
  146. package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +11 -8
  147. package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +11 -12
  148. package/contracts/workers/dvn/src/tests/setup.rs +5 -5
  149. package/contracts/workers/dvn-fee-lib/Cargo.toml +1 -1
  150. package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +3 -6
  151. package/contracts/workers/executor/src/auth.rs +80 -16
  152. package/contracts/workers/executor/src/executor.rs +5 -31
  153. package/contracts/workers/executor/src/storage.rs +2 -9
  154. package/contracts/workers/executor-fee-lib/Cargo.toml +1 -1
  155. package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +3 -6
  156. package/contracts/workers/executor-helper/Cargo.toml +1 -1
  157. package/contracts/workers/executor-helper/src/executor_helper.rs +53 -73
  158. package/contracts/workers/price-feed/Cargo.toml +1 -1
  159. package/contracts/workers/price-feed/src/price_feed.rs +7 -10
  160. package/contracts/workers/worker/src/errors.rs +4 -0
  161. package/contracts/workers/worker/src/tests/worker.rs +7 -6
  162. package/contracts/workers/worker/src/worker.rs +20 -16
  163. package/package.json +8 -5
  164. package/sdk/.turbo/turbo-build.log +1 -0
  165. package/sdk/.turbo/turbo-test.log +1009 -0
  166. package/sdk/dist/generated/bml.d.ts +65 -8
  167. package/sdk/dist/generated/bml.js +70 -34
  168. package/sdk/dist/generated/counter.d.ts +167 -42
  169. package/sdk/dist/generated/counter.js +86 -45
  170. package/sdk/dist/generated/dvn.d.ts +282 -229
  171. package/sdk/dist/generated/dvn.js +119 -81
  172. package/sdk/dist/generated/dvn_fee_lib.d.ts +142 -67
  173. package/sdk/dist/generated/dvn_fee_lib.js +64 -24
  174. package/sdk/dist/generated/endpoint.d.ts +97 -22
  175. package/sdk/dist/generated/endpoint.js +75 -37
  176. package/sdk/dist/generated/executor.d.ts +117 -85
  177. package/sdk/dist/generated/executor.js +102 -59
  178. package/sdk/dist/generated/executor_fee_lib.d.ts +162 -78
  179. package/sdk/dist/generated/executor_fee_lib.js +104 -57
  180. package/sdk/dist/generated/executor_helper.d.ts +133 -21
  181. package/sdk/dist/generated/executor_helper.js +99 -50
  182. package/sdk/dist/generated/oft_std.d.ts +233 -55
  183. package/sdk/dist/generated/oft_std.js +99 -54
  184. package/sdk/dist/generated/price_feed.d.ts +142 -67
  185. package/sdk/dist/generated/price_feed.js +64 -24
  186. package/sdk/dist/generated/sml.d.ts +113 -32
  187. package/sdk/dist/generated/sml.js +93 -49
  188. package/sdk/dist/generated/treasury.d.ts +896 -0
  189. package/sdk/dist/generated/treasury.js +219 -0
  190. package/sdk/dist/generated/uln302.d.ts +113 -32
  191. package/sdk/dist/generated/uln302.js +93 -49
  192. package/sdk/dist/generated/upgrader.d.ts +2 -2
  193. package/sdk/dist/generated/upgrader.js +1 -1
  194. package/sdk/dist/index.d.ts +2 -0
  195. package/sdk/dist/index.js +3 -0
  196. package/sdk/dist/wasm/blocked-message-lib.d.ts +1 -0
  197. package/sdk/dist/wasm/blocked-message-lib.js +2 -0
  198. package/sdk/dist/wasm/counter.d.ts +1 -0
  199. package/sdk/dist/wasm/counter.js +2 -0
  200. package/sdk/dist/wasm/dvn-fee-lib.d.ts +1 -0
  201. package/sdk/dist/wasm/dvn-fee-lib.js +2 -0
  202. package/sdk/dist/wasm/dvn.d.ts +1 -0
  203. package/sdk/dist/wasm/dvn.js +2 -0
  204. package/sdk/dist/wasm/endpoint-v2.d.ts +1 -0
  205. package/sdk/dist/wasm/endpoint-v2.js +2 -0
  206. package/sdk/dist/wasm/executor-fee-lib.d.ts +1 -0
  207. package/sdk/dist/wasm/executor-fee-lib.js +2 -0
  208. package/sdk/dist/wasm/executor-helper.d.ts +1 -0
  209. package/sdk/dist/wasm/executor-helper.js +2 -0
  210. package/sdk/dist/wasm/executor.d.ts +1 -0
  211. package/sdk/dist/wasm/executor.js +2 -0
  212. package/sdk/dist/wasm/layerzero-views.d.ts +1 -0
  213. package/sdk/dist/wasm/layerzero-views.js +2 -0
  214. package/sdk/dist/wasm/oft-std.d.ts +1 -0
  215. package/sdk/dist/wasm/oft-std.js +2 -0
  216. package/sdk/dist/wasm/price-feed.d.ts +1 -0
  217. package/sdk/dist/wasm/price-feed.js +2 -0
  218. package/sdk/dist/wasm/simple-message-lib.d.ts +1 -0
  219. package/sdk/dist/wasm/simple-message-lib.js +2 -0
  220. package/sdk/dist/wasm/treasury.d.ts +1 -0
  221. package/sdk/dist/wasm/treasury.js +2 -0
  222. package/sdk/dist/wasm/uln302.d.ts +1 -0
  223. package/sdk/dist/wasm/uln302.js +2 -0
  224. package/sdk/dist/wasm/upgrader.d.ts +1 -0
  225. package/sdk/dist/wasm/upgrader.js +2 -0
  226. package/sdk/dist/wasm.d.ts +15 -0
  227. package/sdk/dist/wasm.js +15 -0
  228. package/sdk/package.json +4 -2
  229. package/sdk/src/index.ts +4 -0
  230. package/sdk/test/counter-sml.test.ts +376 -0
  231. package/sdk/test/counter-uln.test.ts +493 -0
  232. package/sdk/test/{oft.test.ts → oft-sml.test.ts} +185 -310
  233. package/sdk/test/suites/constants.ts +22 -2
  234. package/sdk/test/suites/globalSetup.ts +450 -0
  235. package/sdk/test/suites/localnet.ts +23 -6
  236. package/sdk/test/upgrader.test.ts +7 -16
  237. package/sdk/test/utils.ts +558 -85
  238. package/sdk/vitest.config.ts +21 -0
  239. package/tools/ts-bindings-gen/src/main.rs +1 -0
  240. package/turbo.json +2 -0
  241. package/contracts/common-macros/src/contract_impl.rs +0 -52
  242. package/contracts/common-macros/src/ownable.rs +0 -41
  243. package/contracts/common-macros/src/tests/contract_impl.rs +0 -386
  244. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +0 -12
  245. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/extend_instance_ttl.rs +0 -50
  246. package/contracts/oapps/oapp-macros/src/oapp_core.rs +0 -41
  247. package/contracts/oapps/oapp-macros/src/oapp_full.rs +0 -21
  248. package/contracts/oapps/oapp-macros/src/oapp_options_type3.rs +0 -31
  249. package/contracts/oapps/oapp-macros/src/oapp_receiver.rs +0 -48
  250. package/contracts/oapps/oapp-macros/src/oapp_sender.rs +0 -21
  251. package/contracts/oapps/oapp-macros/src/util.rs +0 -107
  252. package/contracts/oapps/oft/src/constants.rs +0 -5
  253. package/contracts/oapps/oft/src/default_oft_impl.rs +0 -152
  254. package/contracts/workers/dvn/src/interfaces/multisig.rs +0 -56
  255. package/contracts/workers/dvn/src/multisig.rs +0 -157
  256. package/sdk/test/index.test.ts +0 -375
  257. /package/sdk/test/suites/{testUpgradeable.ts → dummyContractClient.ts} +0 -0
@@ -0,0 +1,83 @@
1
+ //! LzContract wrapper macro for Stellar smart contracts.
2
+ //!
3
+ //! This module provides the `#[lz_contract]` macro which combines commonly used
4
+ //! LayerZero contract attributes into a single macro invocation.
5
+
6
+ use proc_macro2::TokenStream;
7
+ use quote::quote;
8
+ use syn::{
9
+ parse::{Parse, ParseStream},
10
+ punctuated::Punctuated,
11
+ Error, Ident, ItemStruct, Token,
12
+ };
13
+
14
+ /// Configuration options for the `#[lz_contract]` macro.
15
+ #[derive(Debug, Default)]
16
+ pub struct LzContractConfig {
17
+ /// If true, adds `#[upgradeable]` for contract upgrade support.
18
+ pub upgradeable: bool,
19
+ /// If true, uses `#[multisig]` instead of `#[ownable]` for auth.
20
+ pub multisig: bool,
21
+ }
22
+
23
+ impl Parse for LzContractConfig {
24
+ fn parse(input: ParseStream) -> syn::Result<Self> {
25
+ if input.is_empty() {
26
+ return Ok(Self::default());
27
+ }
28
+
29
+ let idents = Punctuated::<Ident, Token![,]>::parse_terminated(input)?;
30
+ let mut config = Self::default();
31
+
32
+ for ident in idents {
33
+ match ident.to_string().as_str() {
34
+ "upgradeable" => config.upgradeable = true,
35
+ "multisig" => config.multisig = true,
36
+ _ => {
37
+ return Err(Error::new(ident.span(), "expected one of `upgradeable`, `multisig`"));
38
+ }
39
+ }
40
+ }
41
+
42
+ Ok(config)
43
+ }
44
+ }
45
+
46
+ /// Generates a complete LayerZero contract with common macro attributes.
47
+ ///
48
+ /// # Default (no options)
49
+ /// Generates:
50
+ /// - `#[soroban_sdk::contract]` - Soroban contract
51
+ /// - `#[common_macros::ttl_configurable]` - TTL configuration with auth
52
+ /// - `#[common_macros::ttl_extendable]` - Manual TTL extension
53
+ /// - `#[common_macros::ownable]` - Single-owner access control
54
+ ///
55
+ /// # Options
56
+ /// - `upgradeable` - Adds `#[common_macros::upgradeable]` for contract upgrade support
57
+ /// - `multisig` - Uses `#[common_macros::multisig]` instead of `#[common_macros::ownable]`
58
+ pub fn generate_lz_contract(attr: TokenStream, input: TokenStream) -> TokenStream {
59
+ let config: LzContractConfig =
60
+ syn::parse2(attr).unwrap_or_else(|e| panic!("failed to parse lz_contract config: {}", e));
61
+ let item: ItemStruct = syn::parse2(input).unwrap_or_else(|e| panic!("failed to parse struct: {}", e));
62
+
63
+ let auth = if config.multisig {
64
+ quote! { #[common_macros::multisig] }
65
+ } else {
66
+ quote! { #[common_macros::ownable] }
67
+ };
68
+
69
+ let upgrade = if config.upgradeable {
70
+ quote! { #[common_macros::upgradeable] }
71
+ } else {
72
+ quote! {}
73
+ };
74
+
75
+ quote! {
76
+ #[soroban_sdk::contract]
77
+ #[common_macros::ttl_configurable]
78
+ #[common_macros::ttl_extendable]
79
+ #auth
80
+ #upgrade
81
+ #item
82
+ }
83
+ }
@@ -2,6 +2,7 @@ use proc_macro2::TokenStream;
2
2
  use quote::quote;
3
3
 
4
4
  use crate::tests::test_helpers::{assert_panics_contains, non_struct_item_inputs};
5
+
5
6
  // ============================================
6
7
  // Snapshot Test: Ownable Code Generation
7
8
  // ============================================
@@ -11,21 +12,40 @@ fn snapshot_generated_ownable_code() {
11
12
  let input = quote! {
12
13
  pub struct MyContract;
13
14
  };
14
- let result = crate::ownable::generate_ownable_impl(input);
15
+ let result = crate::auth::generate_ownable_impl(input);
16
+ let formatted = prettyplease::unparse(&syn::parse2::<syn::File>(result).expect("failed to parse generated code"));
17
+
18
+ insta::assert_snapshot!(formatted);
19
+ }
20
+
21
+ // ============================================
22
+ // Snapshot Test: Multisig Code Generation
23
+ // ============================================
24
+
25
+ #[test]
26
+ fn snapshot_generated_multisig_code() {
27
+ let input = quote! {
28
+ pub struct MyContract;
29
+ };
30
+ let result = crate::auth::generate_multisig_impl(input);
15
31
  let formatted = prettyplease::unparse(&syn::parse2::<syn::File>(result).expect("failed to parse generated code"));
16
32
 
17
33
  insta::assert_snapshot!(formatted);
18
34
  }
19
35
 
36
+ // ============================================
37
+ // Snapshot Test: Only Auth Macro
38
+ // ============================================
39
+
20
40
  #[test]
21
- fn snapshot_only_owner_preserves_function_signature() {
41
+ fn snapshot_only_auth_preserves_function_signature() {
22
42
  // Test with borrowed Env (&Env) - should use env directly
23
43
  let input_borrowed = quote! {
24
44
  pub(crate) async fn admin_action<T: Clone>(env: &Env, value: T) -> Result<T, Error> {
25
45
  Ok(value.clone())
26
46
  }
27
47
  };
28
- let result_borrowed = crate::ownable::prepend_only_owner_check(input_borrowed);
48
+ let result_borrowed = crate::auth::prepend_only_auth_check(input_borrowed);
29
49
  let formatted_borrowed =
30
50
  prettyplease::unparse(&syn::parse2::<syn::File>(result_borrowed).expect("failed to parse generated code"));
31
51
 
@@ -35,7 +55,7 @@ fn snapshot_only_owner_preserves_function_signature() {
35
55
  Ok(value.clone())
36
56
  }
37
57
  };
38
- let result_owned = crate::ownable::prepend_only_owner_check(input_owned);
58
+ let result_owned = crate::auth::prepend_only_auth_check(input_owned);
39
59
  let formatted_owned =
40
60
  prettyplease::unparse(&syn::parse2::<syn::File>(result_owned).expect("failed to parse generated code"));
41
61
 
@@ -49,30 +69,30 @@ fn snapshot_only_owner_preserves_function_signature() {
49
69
  }
50
70
 
51
71
  // ============================================
52
- // prepend_only_owner_check Tests
72
+ // prepend_only_auth_check Tests
53
73
  // ============================================
54
74
 
55
- /// Helper function to verify that the owner check is correctly inserted at the beginning of a function.
56
- fn assert_owner_check_inserted(input: TokenStream, expected_env_ref: &str, test_name: &str) {
57
- let result_tokens = crate::ownable::prepend_only_owner_check(input);
75
+ /// Helper function to verify that the auth check is correctly inserted at the beginning of a function.
76
+ fn assert_auth_check_inserted(input: TokenStream, expected_env_ref: &str, test_name: &str) {
77
+ let result_tokens = crate::auth::prepend_only_auth_check(input);
58
78
  let output_fn: syn::ItemFn =
59
79
  syn::parse2(result_tokens).unwrap_or_else(|e| panic!("{}: failed to parse output function: {}", test_name, e));
60
80
 
61
81
  assert!(!output_fn.block.stmts.is_empty(), "{}: function body should contain at least one statement", test_name);
62
82
 
63
83
  let first_stmt = &output_fn.block.stmts[0];
64
- let expected_stmt = format!("utils::ownable::require_owner_auth::<Self>({});", expected_env_ref);
84
+ let expected_stmt = format!("utils::auth::require_auth::<Self>({});", expected_env_ref);
65
85
  let actual_stmt = quote::quote!(#first_stmt).to_string().replace(" ", "");
66
86
 
67
87
  assert_eq!(
68
88
  actual_stmt, expected_stmt,
69
- "{}: expected owner check statement '{}', but got '{}'",
89
+ "{}: expected auth check statement '{}', but got '{}'",
70
90
  test_name, expected_stmt, actual_stmt
71
91
  );
72
92
  }
73
93
 
74
94
  #[test]
75
- fn test_only_owner_inserts_correct_code_at_the_beginning() {
95
+ fn test_only_auth_inserts_correct_code_at_the_beginning() {
76
96
  // (description, input, expected_env_ref)
77
97
  // Owned Env should produce &env, reference Env should produce env directly
78
98
  let test_cases = vec![
@@ -88,12 +108,12 @@ fn test_only_owner_inserts_correct_code_at_the_beginning() {
88
108
  ];
89
109
 
90
110
  for (description, input, expected_env_ref) in test_cases {
91
- assert_owner_check_inserted(input, expected_env_ref, description);
111
+ assert_auth_check_inserted(input, expected_env_ref, description);
92
112
  }
93
113
  }
94
114
 
95
115
  #[test]
96
- fn test_only_owner_requires_env_param() {
116
+ fn test_only_auth_requires_env_param() {
97
117
  // ============================================
98
118
  // Error Cases: Missing/Invalid Env Argument Patterns
99
119
  // ============================================
@@ -109,7 +129,7 @@ fn test_only_owner_requires_env_param() {
109
129
 
110
130
  for (case, input) in cases {
111
131
  assert_panics_contains(case, "function must have an Env argument", || {
112
- crate::ownable::prepend_only_owner_check(input.clone());
132
+ crate::auth::prepend_only_auth_check(input.clone());
113
133
  });
114
134
  }
115
135
  }
@@ -122,7 +142,20 @@ fn test_only_owner_requires_env_param() {
122
142
  fn test_ownable_rejects_non_struct_inputs() {
123
143
  for (case, input) in non_struct_item_inputs() {
124
144
  assert_panics_contains(case, "failed to parse struct", || {
125
- crate::ownable::generate_ownable_impl(input.clone());
145
+ crate::auth::generate_ownable_impl(input.clone());
146
+ });
147
+ }
148
+ }
149
+
150
+ // ============================================
151
+ // Error Cases: multisig macro non-struct input
152
+ // ============================================
153
+
154
+ #[test]
155
+ fn test_multisig_rejects_non_struct_inputs() {
156
+ for (case, input) in non_struct_item_inputs() {
157
+ assert_panics_contains(case, "failed to parse struct", || {
158
+ crate::auth::generate_multisig_impl(input.clone());
126
159
  });
127
160
  }
128
161
  }