@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
@@ -1,15 +1,13 @@
1
1
  use crate::{errors::SimpleMessageLibError, storage::SmlStorage};
2
- use common_macros::{contract_impl, only_owner, ownable, ttl_configurable};
2
+ use common_macros::{contract_impl, lz_contract, only_auth};
3
3
  use endpoint_v2::{
4
4
  FeeRecipient, FeesAndPacket, IMessageLib, ISendLib, LayerZeroEndpointV2Client, MessageLibType, MessageLibVersion,
5
5
  MessagingFee, Origin, OutboundPacket, SetConfigParam,
6
6
  };
7
7
  use message_lib_common::packet_codec_v1;
8
- use soroban_sdk::{address_payload::AddressPayload, contract, panic_with_error, vec, Address, Bytes, BytesN, Env, Vec};
8
+ use soroban_sdk::{address_payload::AddressPayload, panic_with_error, vec, Address, Bytes, BytesN, Env, Vec};
9
9
 
10
- #[contract]
11
- #[ttl_configurable]
12
- #[ownable]
10
+ #[lz_contract]
13
11
  pub struct SimpleMessageLib;
14
12
 
15
13
  #[contract_impl]
@@ -43,22 +41,22 @@ impl SimpleMessageLib {
43
41
  // Admin Manager
44
42
  // ============================================================================================
45
43
 
46
- #[only_owner]
44
+ #[only_auth]
47
45
  pub fn set_fee_recipient(env: &Env, fee_recipient: &Address) {
48
46
  SmlStorage::set_fee_recipient(env, fee_recipient);
49
47
  }
50
48
 
51
- #[only_owner]
49
+ #[only_auth]
52
50
  pub fn set_native_fee(env: &Env, native_fee: &i128) {
53
51
  SmlStorage::set_native_fee(env, native_fee);
54
52
  }
55
53
 
56
- #[only_owner]
54
+ #[only_auth]
57
55
  pub fn set_zro_fee(env: &Env, zro_fee: &i128) {
58
56
  SmlStorage::set_zro_fee(env, zro_fee);
59
57
  }
60
58
 
61
- #[only_owner]
59
+ #[only_auth]
62
60
  pub fn set_whitelisted_caller(env: &Env, whitelisted_caller: &Address) {
63
61
  SmlStorage::set_whitelisted_caller(env, whitelisted_caller);
64
62
  }
@@ -4,6 +4,6 @@ use common_macros::contract_error;
4
4
  pub enum TreasuryError {
5
5
  InvalidNativeFeeBp,
6
6
  InvalidTotalNativeFee,
7
- InvalidZROFee,
8
- ZROFeeLibNotSet,
7
+ InvalidZroFee,
8
+ ZroFeeLibNotSet,
9
9
  }
@@ -17,7 +17,7 @@ pub struct FeeEnabledSet {
17
17
  /// Emitted when the ZRO fee library is set or removed.
18
18
  #[contractevent]
19
19
  #[derive(Clone, Debug, Eq, PartialEq)]
20
- pub struct ZROFeeLibSet {
20
+ pub struct ZroFeeLibSet {
21
21
  pub zro_fee_lib: Option<Address>,
22
22
  }
23
23
 
@@ -4,8 +4,8 @@ use soroban_sdk::{contractclient, Address, Env};
4
4
  ///
5
5
  /// The ZRO token fee library calculates treasury fees when paying in ZRO tokens.
6
6
  /// This allows for custom fee calculation logic when users opt to pay fees in ZRO.
7
- #[contractclient(name = "ZROFeeLibClient")]
8
- pub trait IZROFeeLib {
7
+ #[contractclient(name = "ZroFeeLibClient")]
8
+ pub trait IZroFeeLib {
9
9
  /// Get the treasury fee in ZRO tokens based on the worker fee.
10
10
  ///
11
11
  /// # Arguments
@@ -15,5 +15,5 @@ pub enum TreasuryStorage {
15
15
 
16
16
  /// Address of the ZRO token fee library contract for custom fee calculations
17
17
  #[instance(Address)]
18
- ZROFeeLib,
18
+ ZroFeeLib,
19
19
  }
@@ -70,7 +70,7 @@ fn test_get_fee_zro_payment_requires_fee_lib() {
70
70
 
71
71
  // Should fail when trying to pay in ZRO without fee lib set
72
72
  let result = setup.treasury.try_get_fee(&sender, &dst_eid, &1000, &true);
73
- assert_eq!(result.err().unwrap().ok().unwrap(), TreasuryError::ZROFeeLibNotSet.into());
73
+ assert_eq!(result.err().unwrap().ok().unwrap(), TreasuryError::ZroFeeLibNotSet.into());
74
74
  }
75
75
 
76
76
  // ============================================================================
@@ -1,20 +1,18 @@
1
1
  use crate::{
2
2
  errors::TreasuryError,
3
- events::{FeeEnabledSet, NativeFeeBpSet, TokenWithdrawn, ZROFeeLibSet},
4
- interfaces::ZROFeeLibClient,
3
+ events::{FeeEnabledSet, NativeFeeBpSet, TokenWithdrawn, ZroFeeLibSet},
4
+ interfaces::ZroFeeLibClient,
5
5
  storage::TreasuryStorage,
6
6
  };
7
- use common_macros::{contract_impl, only_owner, ownable, ttl_configurable};
7
+ use common_macros::{contract_impl, lz_contract, only_auth};
8
8
  use message_lib_common::interfaces::ILayerZeroTreasury;
9
- use soroban_sdk::{assert_with_error, contract, token::Client, Address, Env};
9
+ use soroban_sdk::{assert_with_error, token::Client, Address, Env};
10
10
  use utils::option_ext::OptionExt;
11
11
 
12
12
  /// Denominator for basis point calculations (10000 = 100%).
13
13
  const BPS_DENOMINATOR: u32 = 10000;
14
14
 
15
- #[contract]
16
- #[ttl_configurable]
17
- #[ownable]
15
+ #[lz_contract]
18
16
  pub struct Treasury;
19
17
 
20
18
  #[contract_impl]
@@ -31,7 +29,7 @@ impl Treasury {
31
29
  ///
32
30
  /// # Arguments
33
31
  /// * `native_fee_bp` - Fee percentage in basis points (0-10000, where 10000 = 100%)
34
- #[only_owner]
32
+ #[only_auth]
35
33
  pub fn set_native_fee_bp(env: &Env, native_fee_bp: u32) {
36
34
  assert_with_error!(env, native_fee_bp <= BPS_DENOMINATOR, TreasuryError::InvalidNativeFeeBp);
37
35
  TreasuryStorage::set_native_fee_bp(env, &native_fee_bp);
@@ -42,7 +40,7 @@ impl Treasury {
42
40
  ///
43
41
  /// # Arguments
44
42
  /// * `fee_enabled` - Whether fee collection is enabled
45
- #[only_owner]
43
+ #[only_auth]
46
44
  pub fn set_fee_enabled(env: &Env, fee_enabled: bool) {
47
45
  TreasuryStorage::set_fee_enabled(env, &fee_enabled);
48
46
  FeeEnabledSet { fee_enabled }.publish(env);
@@ -52,10 +50,10 @@ impl Treasury {
52
50
  ///
53
51
  /// # Arguments
54
52
  /// * `zro_fee_lib` - The ZRO fee library contract address, or `None` to remove
55
- #[only_owner]
53
+ #[only_auth]
56
54
  pub fn set_zro_fee_lib(env: &Env, zro_fee_lib: &Option<Address>) {
57
55
  TreasuryStorage::set_or_remove_zro_fee_lib(env, zro_fee_lib);
58
- ZROFeeLibSet { zro_fee_lib: zro_fee_lib.clone() }.publish(env);
56
+ ZroFeeLibSet { zro_fee_lib: zro_fee_lib.clone() }.publish(env);
59
57
  }
60
58
 
61
59
  /// Withdraws any token (including native XLM) from the contract to a specified address.
@@ -66,7 +64,7 @@ impl Treasury {
66
64
  /// * `token` - The token contract address (can be native XLM or any other token)
67
65
  /// * `to` - The recipient address
68
66
  /// * `amount` - The amount to withdraw (must be positive)
69
- #[only_owner]
67
+ #[only_auth]
70
68
  pub fn withdraw_token(env: &Env, token: &Address, to: &Address, amount: i128) {
71
69
  Client::new(env, token).transfer(&env.current_contract_address(), to, &amount);
72
70
  TokenWithdrawn { token: token.clone(), to: to.clone(), amount }.publish(env);
@@ -101,9 +99,9 @@ impl Treasury {
101
99
  }
102
100
 
103
101
  /// Returns the ZRO fee library client, panics if not set.
104
- fn expect_zro_fee_lib_client(env: &Env) -> ZROFeeLibClient<'static> {
105
- let fee_lib = Self::zro_fee_lib(env).unwrap_or_panic(env, TreasuryError::ZROFeeLibNotSet);
106
- ZROFeeLibClient::new(env, &fee_lib)
102
+ fn expect_zro_fee_lib_client(env: &Env) -> ZroFeeLibClient<'static> {
103
+ let fee_lib = Self::zro_fee_lib(env).unwrap_or_panic(env, TreasuryError::ZroFeeLibNotSet);
104
+ ZroFeeLibClient::new(env, &fee_lib)
107
105
  }
108
106
  }
109
107
 
@@ -130,7 +128,7 @@ impl ILayerZeroTreasury for Treasury {
130
128
 
131
129
  let zro_fee =
132
130
  Self::expect_zro_fee_lib_client(env).get_fee(sender, &dst_eid, &total_native_fee, &native_treasury_fee);
133
- assert_with_error!(env, zro_fee >= 0, TreasuryError::InvalidZROFee);
131
+ assert_with_error!(env, zro_fee >= 0, TreasuryError::InvalidZroFee);
134
132
  zro_fee
135
133
  }
136
134
  }
@@ -1,4 +1,15 @@
1
- use super::*;
1
+ use super::{Uln302, Uln302Args, Uln302Client};
2
+ use crate::{
3
+ errors::Uln302Error,
4
+ events::{DefaultReceiveUlnConfigsSet, PayloadVerified, ReceiveUlnConfigSet},
5
+ interfaces::{IReceiveUln302, OAppUlnConfig, SetDefaultUlnConfigParam, UlnConfig},
6
+ storage::UlnStorage,
7
+ };
8
+ use common_macros::{contract_impl, only_auth};
9
+ use endpoint_v2::{util, LayerZeroEndpointV2Client, Origin};
10
+ use message_lib_common::packet_codec_v1::{self, PacketHeader};
11
+ use soroban_sdk::{address_payload::AddressPayload, assert_with_error, Address, Bytes, BytesN, Env, Vec};
12
+ use utils::option_ext::OptionExt;
2
13
 
3
14
  // ============================================================================================
4
15
  // IReceiveUln302 Contract Implementation
@@ -61,7 +72,7 @@ impl IReceiveUln302 for Uln302 {
61
72
  /// Sets default receive ULN configurations for multiple source endpoints.
62
73
  ///
63
74
  /// Validates each config and stores it as the default for the specified source EID.
64
- #[only_owner]
75
+ #[only_auth]
65
76
  fn set_default_receive_uln_configs(env: &Env, params: &Vec<SetDefaultUlnConfigParam>) {
66
77
  for param in params {
67
78
  param.config.validate_default_config(env);
@@ -1,4 +1,24 @@
1
- use super::*;
1
+ use super::{Uln302, Uln302Args, Uln302Client};
2
+ use crate::{
3
+ errors::Uln302Error,
4
+ events::{
5
+ DVNFeePaid, DefaultExecutorConfigsSet, DefaultSendUlnConfigsSet, ExecutorConfigSet, ExecutorFeePaid,
6
+ SendUlnConfigSet,
7
+ },
8
+ interfaces::{
9
+ ExecutorConfig, ISendUln302, OAppExecutorConfig, OAppUlnConfig, SetDefaultExecutorConfigParam,
10
+ SetDefaultUlnConfigParam, UlnConfig,
11
+ },
12
+ storage::UlnStorage,
13
+ };
14
+ use common_macros::{contract_impl, only_auth};
15
+ use endpoint_v2::{FeeRecipient, FeesAndPacket, ISendLib, MessagingFee, OutboundPacket};
16
+ use message_lib_common::{
17
+ interfaces::{LayerZeroDVNClient, LayerZeroExecutorClient, LayerZeroTreasuryClient},
18
+ packet_codec_v1, worker_options,
19
+ };
20
+ use soroban_sdk::{assert_with_error, bytes, vec, Address, Bytes, BytesN, Env, Map, Vec};
21
+ use utils::option_ext::OptionExt;
2
22
 
3
23
  // ==============================================================================
4
24
  // ISendLib Contract Implementation
@@ -96,7 +116,7 @@ impl ISendLib for Uln302 {
96
116
  #[contract_impl]
97
117
  impl ISendUln302 for Uln302 {
98
118
  /// Sets default executor configurations for multiple destination endpoints.
99
- #[only_owner]
119
+ #[only_auth]
100
120
  fn set_default_executor_configs(env: &Env, params: &Vec<SetDefaultExecutorConfigParam>) {
101
121
  for param in params {
102
122
  param.config.validate_default_config(env);
@@ -106,7 +126,7 @@ impl ISendUln302 for Uln302 {
106
126
  }
107
127
 
108
128
  /// Sets default send ULN configurations for multiple destination endpoints.
109
- #[only_owner]
129
+ #[only_auth]
110
130
  fn set_default_send_uln_configs(env: &Env, params: &Vec<SetDefaultUlnConfigParam>) {
111
131
  for param in params {
112
132
  param.config.validate_default_config(env);
@@ -1,30 +1,14 @@
1
1
  use crate::{
2
2
  errors::Uln302Error,
3
- events::{
4
- DVNFeePaid, DefaultExecutorConfigsSet, DefaultReceiveUlnConfigsSet, DefaultSendUlnConfigsSet,
5
- ExecutorConfigSet, ExecutorFeePaid, PayloadVerified, ReceiveUlnConfigSet, SendUlnConfigSet,
6
- },
7
- interfaces::{
8
- ExecutorConfig, IReceiveUln302, ISendUln302, OAppExecutorConfig, OAppUlnConfig, SetDefaultExecutorConfigParam,
9
- SetDefaultUlnConfigParam, UlnConfig,
10
- },
3
+ interfaces::{IReceiveUln302, ISendUln302},
11
4
  storage::UlnStorage,
12
5
  };
13
- use common_macros::{contract_impl, only_owner, ownable, ttl_configurable};
14
- use endpoint_v2::{
15
- util, FeeRecipient, FeesAndPacket, IMessageLib, ISendLib, LayerZeroEndpointV2Client, MessageLibType,
16
- MessageLibVersion, MessagingFee, Origin, OutboundPacket, SetConfigParam,
17
- };
18
- use message_lib_common::{
19
- interfaces::{LayerZeroDVNClient, LayerZeroExecutorClient, LayerZeroTreasuryClient},
20
- packet_codec_v1::{self, PacketHeader},
21
- worker_options,
22
- };
6
+ use common_macros::{contract_impl, lz_contract};
7
+ use endpoint_v2::{IMessageLib, MessageLibType, MessageLibVersion, SetConfigParam};
23
8
  use soroban_sdk::{
24
- address_payload::AddressPayload,
25
- assert_with_error, bytes, contract, panic_with_error, vec,
9
+ assert_with_error, panic_with_error,
26
10
  xdr::{FromXdr, ToXdr},
27
- Address, Bytes, BytesN, Env, Map, Vec,
11
+ Address, Bytes, Env, Vec,
28
12
  };
29
13
  use utils::option_ext::OptionExt;
30
14
 
@@ -32,9 +16,7 @@ pub const CONFIG_TYPE_EXECUTOR: u32 = 1;
32
16
  pub const CONFIG_TYPE_SEND_ULN: u32 = 2;
33
17
  pub const CONFIG_TYPE_RECEIVE_ULN: u32 = 3;
34
18
 
35
- #[contract]
36
- #[ttl_configurable]
37
- #[ownable]
19
+ #[lz_contract]
38
20
  pub struct Uln302;
39
21
 
40
22
  #[contract_impl]
@@ -22,4 +22,17 @@ assert_unordered = "0.3.5"
22
22
  simple-message-lib = { workspace = true }
23
23
  message-lib-common = { workspace = true, features = ["testutils"] }
24
24
  endpoint-v2 = { workspace = true, features = ["testutils"] }
25
- executor = { workspace = true, features = ["testutils"] }
25
+ executor = { workspace = true, features = ["testutils"] }
26
+ uln302 = { workspace = true, features = ["testutils"] }
27
+ dvn = { workspace = true, features = ["testutils"] }
28
+ dvn-fee-lib = { workspace = true }
29
+ executor-fee-lib = { workspace = true }
30
+ worker = { workspace = true }
31
+ treasury = { workspace = true, features = ["testutils"] }
32
+ price-feed = { workspace = true }
33
+ executor-helper = { workspace = true }
34
+ # For real DVN signature verification in integration tests
35
+ k256 = "0.13"
36
+ sha3 = "0.10"
37
+ rand = "0.8"
38
+ ed25519-dalek = "2"
@@ -1,3 +1,6 @@
1
- mod setup;
1
+ mod setup_sml;
2
+ mod setup_uln;
3
+ mod signing;
2
4
  mod test_with_sml;
5
+ mod test_with_uln;
3
6
  mod utils;
@@ -2,17 +2,17 @@ extern crate std;
2
2
 
3
3
  use crate::{
4
4
  counter::{Counter, CounterClient},
5
- integration_tests::utils::address_to_bytes32,
5
+ integration_tests::utils::{
6
+ address_to_bytes32, decode_packet, register_library, set_peer, set_zro, ChainSetupCommon,
7
+ },
6
8
  };
7
- use endpoint_v2::{EndpointV2, EndpointV2Client};
9
+ use endpoint_v2::{EndpointV2, EndpointV2Client, OutboundPacket};
10
+ use message_lib_common::packet_codec_v1;
8
11
  use simple_message_lib::{SimpleMessageLib, SimpleMessageLibClient};
9
12
  use soroban_sdk::{
10
- address_payload::AddressPayload,
11
- log,
12
13
  testutils::{Address as _, MockAuth, MockAuthInvoke},
13
- Address, BytesN, Env, IntoVal,
14
+ Address, Bytes, Env, IntoVal,
14
15
  };
15
- use utils::buffer_reader::BufferReader;
16
16
 
17
17
  pub struct ChainSetup<'a> {
18
18
  pub eid: u32,
@@ -23,6 +23,38 @@ pub struct ChainSetup<'a> {
23
23
  pub counter: CounterClient<'a>,
24
24
  }
25
25
 
26
+ impl<'a> ChainSetupCommon<'a> for ChainSetup<'a> {
27
+ fn counter(&self) -> &CounterClient<'a> {
28
+ &self.counter
29
+ }
30
+ fn endpoint(&self) -> &EndpointV2Client<'a> {
31
+ &self.endpoint
32
+ }
33
+ fn native_token(&self) -> &Address {
34
+ &self.native_token
35
+ }
36
+ fn owner(&self) -> &Address {
37
+ &self.owner
38
+ }
39
+ fn validate_packet(&self, env: &Env, packet_event: &(Bytes, Bytes, Address)) -> OutboundPacket {
40
+ let packet = decode_packet(env, &packet_event.0);
41
+ let encoded_header = packet_codec_v1::encode_packet_header(env, &packet);
42
+ let payload_hash = packet_codec_v1::payload_hash(env, &packet);
43
+
44
+ env.mock_auths(&[MockAuth {
45
+ address: &self.owner,
46
+ invoke: &MockAuthInvoke {
47
+ contract: &self.sml.address,
48
+ fn_name: "validate_packet",
49
+ args: (&encoded_header, &payload_hash).into_val(env),
50
+ sub_invokes: &[],
51
+ },
52
+ }]);
53
+ self.sml.validate_packet(&encoded_header, &payload_hash);
54
+ packet
55
+ }
56
+ }
57
+
26
58
  pub struct TestSetup<'a> {
27
59
  pub env: Env,
28
60
 
@@ -31,7 +63,7 @@ pub struct TestSetup<'a> {
31
63
  }
32
64
 
33
65
  fn setup_chain<'a>(env: &Env, owner: &Address) -> ChainSetup<'a> {
34
- // Create ZRO token
66
+ // Create ZRO token for endpoint fees
35
67
  let zro_sac = env.register_stellar_asset_contract_v2(owner.clone());
36
68
  let zro_token = zro_sac.address();
37
69
 
@@ -44,19 +76,8 @@ fn setup_chain<'a>(env: &Env, owner: &Address) -> ChainSetup<'a> {
44
76
  let sml = SimpleMessageLibClient::new(env, &sml_address);
45
77
  let counter = CounterClient::new(env, &counter_address);
46
78
 
47
- // Set ZRO token in endpoint
48
- env.mock_auths(&[MockAuth {
49
- address: &owner,
50
- invoke: &MockAuthInvoke {
51
- contract: &endpoint_address,
52
- fn_name: "set_zro",
53
- args: (&zro_token,).into_val(env),
54
- sub_invokes: &[],
55
- },
56
- }]);
57
- endpoint.set_zro(&zro_token);
58
-
59
- register_library(env, &owner, &endpoint, &sml.address);
79
+ set_zro(env, owner, &endpoint, &zro_token);
80
+ register_library(env, owner, &endpoint, &sml.address);
60
81
 
61
82
  let eid = endpoint.eid();
62
83
  let native_token = endpoint.native_token();
@@ -66,25 +87,20 @@ fn setup_chain<'a>(env: &Env, owner: &Address) -> ChainSetup<'a> {
66
87
  pub fn setup<'a>() -> TestSetup<'a> {
67
88
  let env = Env::default();
68
89
  let owner = Address::generate(&env);
69
- let sac = env.register_stellar_asset_contract_v2(owner.clone());
70
- log!(&env, "native_token: {:?}", sac.address());
71
90
 
72
91
  let chain_a = setup_chain(&env, &owner);
73
92
  let chain_b = setup_chain(&env, &owner);
74
93
 
75
- log!(&env, "endpoint_a: {:?}", chain_a.endpoint.address);
76
- log!(&env, "native_token_a: {:?}", chain_a.native_token);
77
- log!(&env, "counter_a: {:?}", chain_a.counter.address);
78
- log!(&env, "sml_a: {:?}", chain_a.sml.address);
79
-
80
- log!(&env, "endpoint_b: {:?}", chain_b.endpoint.address);
81
- log!(&env, "native_token_b: {:?}", chain_b.native_token);
82
- log!(&env, "counter_b: {:?}", chain_b.counter.address);
83
- log!(&env, "sml_b: {:?}", chain_b.sml.address);
84
-
85
94
  TestSetup { env, chain_a, chain_b }
86
95
  }
87
96
 
97
+ pub fn wired_setup<'a>() -> TestSetup<'a> {
98
+ let test_setup = setup();
99
+ wire_endpoint(&test_setup.env, &[&test_setup.chain_a, &test_setup.chain_b]);
100
+ wire_counter(&test_setup.env, &[&test_setup.chain_a, &test_setup.chain_b]);
101
+ test_setup
102
+ }
103
+
88
104
  pub fn wire_endpoint(env: &Env, chains: &[&ChainSetup<'_>]) {
89
105
  for chain in chains {
90
106
  for other_chain in chains {
@@ -114,33 +130,6 @@ pub fn wire_counter(env: &Env, chains: &[&ChainSetup<'_>]) {
114
130
  }
115
131
  }
116
132
 
117
- pub fn set_peer(env: &Env, owner: &Address, counter: &CounterClient<'_>, dst_eid: u32, peer: &BytesN<32>) {
118
- let peer_option = Some(peer.clone());
119
- env.mock_auths(&[MockAuth {
120
- address: owner,
121
- invoke: &MockAuthInvoke {
122
- contract: &counter.address,
123
- fn_name: "set_peer",
124
- args: (&dst_eid, &peer_option).into_val(env),
125
- sub_invokes: &[],
126
- },
127
- }]);
128
- counter.set_peer(&dst_eid, &peer_option);
129
- }
130
-
131
- pub fn register_library(env: &Env, owner: &Address, endpoint: &EndpointV2Client<'_>, lib: &Address) {
132
- env.mock_auths(&[MockAuth {
133
- address: owner,
134
- invoke: &MockAuthInvoke {
135
- contract: &endpoint.address,
136
- fn_name: "register_library",
137
- args: (lib,).into_val(env),
138
- sub_invokes: &[],
139
- },
140
- }]);
141
- endpoint.register_library(lib);
142
- }
143
-
144
133
  pub fn set_default_send_library(
145
134
  env: &Env,
146
135
  owner: &Address,
@@ -178,24 +167,3 @@ pub fn set_default_receive_library(
178
167
  }]);
179
168
  endpoint.set_default_receive_library(&src_eid, lib, &0u64);
180
169
  }
181
-
182
- pub fn decode_packet(env: &Env, encoded_packet: &soroban_sdk::Bytes) -> endpoint_v2::OutboundPacket {
183
- use message_lib_common::packet_codec_v1::*;
184
-
185
- let header = decode_packet_header(env, &encoded_packet.slice(0..HEADER_LENGTH));
186
- let payload = encoded_packet.slice(HEADER_LENGTH..);
187
-
188
- let mut payload_reader = BufferReader::new(&payload);
189
- let guid = payload_reader.read_bytes_n::<32>();
190
- let message = payload_reader.read_bytes_until_end();
191
-
192
- endpoint_v2::OutboundPacket {
193
- nonce: header.nonce,
194
- src_eid: header.src_eid,
195
- sender: Address::from_payload(env, AddressPayload::ContractIdHash(header.sender)),
196
- dst_eid: header.dst_eid,
197
- receiver: header.receiver,
198
- guid,
199
- message,
200
- }
201
- }