@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
@@ -0,0 +1,366 @@
1
+ use endpoint_v2::Origin;
2
+ use executor::NativeDropParams;
3
+ use soroban_sdk::testutils::Address as _;
4
+ use soroban_sdk::{
5
+ contract, contractimpl, contracttype,
6
+ testutils::{MockAuth, MockAuthInvoke},
7
+ token::StellarAssetClient,
8
+ Address, Bytes, BytesN, Env, IntoVal, Symbol, Vec,
9
+ };
10
+
11
+ use crate::{ComposeParams, ExecutionParams, ExecutorHelper, ExecutorHelperClient};
12
+
13
+ // =============================================================================
14
+ // Mock Endpoint (provides native_token)
15
+ // =============================================================================
16
+
17
+ #[contract]
18
+ pub struct MockEndpoint;
19
+
20
+ #[contractimpl]
21
+ impl MockEndpoint {
22
+ pub fn __constructor(env: &Env, native_token: &Address) {
23
+ env.storage().instance().set(&Symbol::new(env, "native_token"), native_token);
24
+ }
25
+
26
+ pub fn native_token(env: &Env) -> Address {
27
+ env.storage().instance().get(&Symbol::new(env, "native_token")).unwrap()
28
+ }
29
+ }
30
+
31
+ // =============================================================================
32
+ // Mock Receiver (implements lz_receive)
33
+ // =============================================================================
34
+
35
+ #[contract]
36
+ pub struct MockReceiver;
37
+
38
+ #[contracttype]
39
+ #[derive(Clone, Debug)]
40
+ pub struct LzReceiveRecord {
41
+ pub executor: Address,
42
+ pub origin: Origin,
43
+ pub guid: BytesN<32>,
44
+ pub message: Bytes,
45
+ pub extra_data: Bytes,
46
+ pub value: i128,
47
+ }
48
+
49
+ #[contractimpl]
50
+ impl MockReceiver {
51
+ pub fn __constructor(_env: &Env) {}
52
+
53
+ pub fn lz_receive(
54
+ env: &Env,
55
+ executor: &Address,
56
+ origin: &Origin,
57
+ guid: &BytesN<32>,
58
+ message: &Bytes,
59
+ extra_data: &Bytes,
60
+ value: i128,
61
+ ) {
62
+ executor.require_auth();
63
+ let record = LzReceiveRecord {
64
+ executor: executor.clone(),
65
+ origin: origin.clone(),
66
+ guid: guid.clone(),
67
+ message: message.clone(),
68
+ extra_data: extra_data.clone(),
69
+ value,
70
+ };
71
+ env.storage().instance().set(&Symbol::new(env, "lz_receive"), &record);
72
+ }
73
+
74
+ pub fn get_lz_receive(env: &Env) -> Option<LzReceiveRecord> {
75
+ env.storage().instance().get(&Symbol::new(env, "lz_receive"))
76
+ }
77
+ }
78
+
79
+ // =============================================================================
80
+ // Mock Composer (implements lz_compose)
81
+ // =============================================================================
82
+
83
+ #[contract]
84
+ pub struct MockComposer;
85
+
86
+ #[contracttype]
87
+ #[derive(Clone, Debug)]
88
+ pub struct LzComposeRecord {
89
+ pub executor: Address,
90
+ pub from: Address,
91
+ pub guid: BytesN<32>,
92
+ pub index: u32,
93
+ pub message: Bytes,
94
+ pub extra_data: Bytes,
95
+ pub value: i128,
96
+ }
97
+
98
+ #[contractimpl]
99
+ impl MockComposer {
100
+ pub fn __constructor(_env: &Env) {}
101
+
102
+ pub fn lz_compose(
103
+ env: &Env,
104
+ executor: &Address,
105
+ from: &Address,
106
+ guid: &BytesN<32>,
107
+ index: u32,
108
+ message: &Bytes,
109
+ extra_data: &Bytes,
110
+ value: i128,
111
+ ) {
112
+ executor.require_auth();
113
+ let record = LzComposeRecord {
114
+ executor: executor.clone(),
115
+ from: from.clone(),
116
+ guid: guid.clone(),
117
+ index,
118
+ message: message.clone(),
119
+ extra_data: extra_data.clone(),
120
+ value,
121
+ };
122
+ env.storage().instance().set(&Symbol::new(env, "lz_compose"), &record);
123
+ }
124
+
125
+ pub fn get_lz_compose(env: &Env) -> Option<LzComposeRecord> {
126
+ env.storage().instance().get(&Symbol::new(env, "lz_compose"))
127
+ }
128
+ }
129
+
130
+ // =============================================================================
131
+ // Mock Executor (provides endpoint() and native_drop())
132
+ // =============================================================================
133
+
134
+ #[contract]
135
+ pub struct MockExecutor;
136
+
137
+ #[contracttype]
138
+ #[derive(Clone, Debug)]
139
+ pub struct NativeDropRecord {
140
+ pub admin: Address,
141
+ pub origin: Origin,
142
+ pub dst_eid: u32,
143
+ pub oapp: Address,
144
+ pub params: Vec<NativeDropParams>,
145
+ }
146
+
147
+ #[contractimpl]
148
+ impl MockExecutor {
149
+ pub fn __constructor(env: &Env, endpoint: &Address) {
150
+ env.storage().instance().set(&Symbol::new(env, "endpoint"), endpoint);
151
+ }
152
+
153
+ pub fn endpoint(env: &Env) -> Address {
154
+ env.storage().instance().get(&Symbol::new(env, "endpoint")).unwrap()
155
+ }
156
+
157
+ pub fn native_drop(
158
+ env: &Env,
159
+ admin: &Address,
160
+ origin: &Origin,
161
+ dst_eid: u32,
162
+ oapp: &Address,
163
+ params: &Vec<NativeDropParams>,
164
+ ) {
165
+ admin.require_auth();
166
+ let record = NativeDropRecord {
167
+ admin: admin.clone(),
168
+ origin: origin.clone(),
169
+ dst_eid,
170
+ oapp: oapp.clone(),
171
+ params: params.clone(),
172
+ };
173
+ env.storage().instance().set(&Symbol::new(env, "native_drop"), &record);
174
+ }
175
+
176
+ pub fn get_native_drop(env: &Env) -> Option<NativeDropRecord> {
177
+ env.storage().instance().get(&Symbol::new(env, "native_drop"))
178
+ }
179
+ }
180
+
181
+ // =============================================================================
182
+ // Test Setup
183
+ // =============================================================================
184
+
185
+ pub struct TestSetup<'a> {
186
+ pub env: Env,
187
+ pub executor_helper_client: ExecutorHelperClient<'a>,
188
+ pub executor: Address,
189
+ pub receiver: Address,
190
+ pub composer: Address,
191
+ pub native_token: Address,
192
+ pub native_token_admin: Address,
193
+ pub native_token_admin_client: StellarAssetClient<'a>,
194
+ pub admin: Address,
195
+ }
196
+
197
+ impl<'a> TestSetup<'a> {
198
+ pub fn new() -> Self {
199
+ let env = Env::default();
200
+
201
+ // Native token
202
+ let native_token_admin = Address::generate(&env);
203
+ let native_token_sac = env.register_stellar_asset_contract_v2(native_token_admin.clone());
204
+ let native_token = native_token_sac.address();
205
+ let native_token_admin_client = StellarAssetClient::new(&env, &native_token);
206
+
207
+ // Mock endpoint (with native_token)
208
+ let endpoint = env.register(MockEndpoint, (&native_token,));
209
+
210
+ // Mock executor (with endpoint reference)
211
+ let executor = env.register(MockExecutor, (&endpoint,));
212
+
213
+ // Mock receiver
214
+ let receiver = env.register(MockReceiver, ());
215
+
216
+ // Mock composer
217
+ let composer = env.register(MockComposer, ());
218
+
219
+ // Admin address (value payer)
220
+ let admin = Address::generate(&env);
221
+
222
+ // Register ExecutorHelper contract
223
+ let contract_id = env.register(ExecutorHelper, ());
224
+ let client = ExecutorHelperClient::new(&env, &contract_id);
225
+
226
+ Self {
227
+ env,
228
+ executor_helper_client: client,
229
+ executor,
230
+ receiver,
231
+ composer,
232
+ native_token,
233
+ native_token_admin,
234
+ native_token_admin_client,
235
+ admin,
236
+ }
237
+ }
238
+
239
+ pub fn mint_native(&self, to: &Address, amount: i128) {
240
+ self.env.mock_auths(&[MockAuth {
241
+ address: &self.native_token_admin,
242
+ invoke: &MockAuthInvoke {
243
+ contract: &self.native_token,
244
+ fn_name: "mint",
245
+ args: (to, amount).into_val(&self.env),
246
+ sub_invokes: &[],
247
+ },
248
+ }]);
249
+ self.native_token_admin_client.mint(to, &amount);
250
+ }
251
+
252
+ pub fn balance_native(&self, addr: &Address) -> i128 {
253
+ soroban_sdk::token::TokenClient::new(&self.env, &self.native_token).balance(addr)
254
+ }
255
+
256
+ pub fn mock_lz_receive_auth(&self, executor: &Address, params: &ExecutionParams) {
257
+ self.env.mock_auths(&[MockAuth {
258
+ address: executor,
259
+ invoke: &MockAuthInvoke {
260
+ contract: &params.receiver,
261
+ fn_name: "lz_receive",
262
+ args: (executor, &params.origin, &params.guid, &params.message, &params.extra_data, &params.value)
263
+ .into_val(&self.env),
264
+ sub_invokes: &[],
265
+ },
266
+ }]);
267
+ }
268
+
269
+ pub fn mock_lz_compose_auth(&self, executor: &Address, params: &ComposeParams) {
270
+ self.env.mock_auths(&[MockAuth {
271
+ address: executor,
272
+ invoke: &MockAuthInvoke {
273
+ contract: &params.to,
274
+ fn_name: "lz_compose",
275
+ args: (
276
+ executor,
277
+ &params.from,
278
+ &params.guid,
279
+ &params.index,
280
+ &params.message,
281
+ &params.extra_data,
282
+ &params.value,
283
+ )
284
+ .into_val(&self.env),
285
+ sub_invokes: &[],
286
+ },
287
+ }]);
288
+ }
289
+
290
+ pub fn mock_native_drop_auth(
291
+ &self,
292
+ executor: &Address,
293
+ admin: &Address,
294
+ origin: &Origin,
295
+ dst_eid: u32,
296
+ oapp: &Address,
297
+ params: &Vec<NativeDropParams>,
298
+ ) {
299
+ self.env.mock_auths(&[MockAuth {
300
+ address: admin,
301
+ invoke: &MockAuthInvoke {
302
+ contract: executor,
303
+ fn_name: "native_drop",
304
+ args: (admin, origin, &dst_eid, oapp, params).into_val(&self.env),
305
+ sub_invokes: &[],
306
+ },
307
+ }]);
308
+ }
309
+
310
+ pub fn default_origin(&self) -> Origin {
311
+ Origin { src_eid: 1, sender: BytesN::from_array(&self.env, &[1u8; 32]), nonce: 1 }
312
+ }
313
+
314
+ pub fn default_guid(&self) -> BytesN<32> {
315
+ BytesN::from_array(&self.env, &[2u8; 32])
316
+ }
317
+
318
+ pub fn default_message(&self) -> Bytes {
319
+ Bytes::from_slice(&self.env, &[1, 2, 3, 4])
320
+ }
321
+
322
+ pub fn default_extra_data(&self) -> Bytes {
323
+ Bytes::from_slice(&self.env, &[5, 6, 7, 8])
324
+ }
325
+
326
+ pub fn default_execution_params(&self) -> ExecutionParams {
327
+ ExecutionParams {
328
+ receiver: self.receiver.clone(),
329
+ origin: self.default_origin(),
330
+ guid: self.default_guid(),
331
+ message: self.default_message(),
332
+ extra_data: self.default_extra_data(),
333
+ value: 0,
334
+ gas_limit: 100,
335
+ }
336
+ }
337
+
338
+ pub fn default_compose_params(&self) -> ComposeParams {
339
+ let from = Address::generate(&self.env);
340
+ ComposeParams {
341
+ from,
342
+ to: self.composer.clone(),
343
+ guid: self.default_guid(),
344
+ index: 4,
345
+ message: self.default_message(),
346
+ extra_data: self.default_extra_data(),
347
+ value: 0,
348
+ gas_limit: 100,
349
+ }
350
+ }
351
+
352
+ /// Returns the MockReceiverClient to access mock receiver methods
353
+ pub fn receiver_client(&self) -> MockReceiverClient<'_> {
354
+ MockReceiverClient::new(&self.env, &self.receiver)
355
+ }
356
+
357
+ /// Returns the MockComposerClient to access mock composer methods
358
+ pub fn composer_client(&self) -> MockComposerClient<'_> {
359
+ MockComposerClient::new(&self.env, &self.composer)
360
+ }
361
+
362
+ /// Returns the MockExecutorClient to access mock executor methods
363
+ pub fn executor_client(&self) -> MockExecutorClient<'_> {
364
+ MockExecutorClient::new(&self.env, &self.executor)
365
+ }
366
+ }
@@ -0,0 +1,14 @@
1
+ [package]
2
+ name = "fee-lib-interfaces"
3
+ version.workspace = true
4
+ edition.workspace = true
5
+ license.workspace = true
6
+ publish = false
7
+
8
+ [lib]
9
+ crate-type = ["rlib"]
10
+ doctest = false
11
+
12
+ [dependencies]
13
+ soroban-sdk = { workspace = true }
14
+
@@ -1,6 +1,7 @@
1
- pub mod dvn_fee_lib;
2
- pub mod executor_fee_lib;
3
- pub mod price_feed;
1
+ #![no_std]
2
+ mod dvn_fee_lib;
3
+ mod executor_fee_lib;
4
+ mod price_feed;
4
5
 
5
6
  pub use dvn_fee_lib::*;
6
7
  pub use executor_fee_lib::*;
@@ -9,12 +9,18 @@ publish = false
9
9
  crate-type = ["cdylib", "rlib"]
10
10
  doctest = false
11
11
 
12
+ [features]
13
+ library = []
14
+ testutils = []
15
+
12
16
  [dependencies]
17
+ cfg-if = { workspace = true }
13
18
  soroban-sdk = { workspace = true }
14
19
  utils = { workspace = true }
15
- worker = { workspace = true }
20
+ fee-lib-interfaces = { workspace = true }
16
21
  common-macros = { workspace = true }
17
22
 
18
23
  [dev-dependencies]
19
24
  soroban-sdk = { workspace = true, features = ["testutils"] }
25
+ utils = { workspace = true, features = ["testutils"] }
20
26
 
@@ -1,6 +1,6 @@
1
1
  use soroban_sdk::{contractevent, Address};
2
2
 
3
- use worker::Price;
3
+ use fee_lib_interfaces::Price;
4
4
 
5
5
  use crate::types::ArbitrumPriceExt;
6
6
 
@@ -1,10 +1,18 @@
1
1
  #![no_std]
2
2
 
3
- mod storage;
4
-
5
3
  pub mod errors;
6
4
  pub mod events;
7
- pub mod price_feed;
8
5
  pub mod types;
9
6
 
10
- pub use price_feed::{LzPriceFeed, LzPriceFeedClient};
7
+ cfg_if::cfg_if! {
8
+ // Include implementation when NOT in library mode, OR when testutils is enabled (for tests)
9
+ if #[cfg(any(not(feature = "library"), feature = "testutils"))] {
10
+ mod storage;
11
+ mod price_feed;
12
+ // Export the contract and client for testing purposes
13
+ pub use price_feed::{LzPriceFeed, LzPriceFeedClient};
14
+ }
15
+ }
16
+
17
+ #[cfg(test)]
18
+ mod tests;
@@ -1,7 +1,6 @@
1
1
  use common_macros::{contract_impl, lz_contract, only_auth};
2
+ use fee_lib_interfaces::{FeeEstimate, ILayerZeroPriceFeed, Price};
2
3
  use soroban_sdk::{assert_with_error, panic_with_error, Address, Env, Vec};
3
- use utils::upgradeable::UpgradeableInternal;
4
- use worker::{FeeEstimate, ILayerZeroPriceFeed, Price};
5
4
 
6
5
  use crate::{
7
6
  errors::PriceFeedError,
@@ -10,7 +9,7 @@ use crate::{
10
9
  types::{ArbitrumPriceExt, ModelType, SetEidToModelTypeParam, UpdatePrice, UpdatePriceExt},
11
10
  };
12
11
 
13
- #[lz_contract(upgradeable)]
12
+ #[lz_contract(upgradeable(no_migration))]
14
13
  pub struct LzPriceFeed;
15
14
 
16
15
  #[contract_impl]
@@ -102,9 +101,7 @@ impl LzPriceFeed {
102
101
  /// Set the fee model type for destination EIDs (owner only)
103
102
  #[only_auth]
104
103
  pub fn set_eid_to_model_type(env: &Env, params: &Vec<SetEidToModelTypeParam>) {
105
- for param in params.iter() {
106
- PriceFeedStorage::set_eid_to_model_type(env, param.dst_eid, &param.model_type);
107
- }
104
+ params.iter().for_each(|param| PriceFeedStorage::set_eid_to_model_type(env, param.dst_eid, &param.model_type));
108
105
  }
109
106
 
110
107
  // ========================================================================
@@ -115,9 +112,7 @@ impl LzPriceFeed {
115
112
  pub fn set_price(env: &Env, price_updater: &Address, prices: &Vec<UpdatePrice>) {
116
113
  Self::require_price_updater(env, price_updater);
117
114
 
118
- for update in prices.iter() {
119
- Self::set_price_internal(env, update.eid, &update.price);
120
- }
115
+ prices.iter().for_each(|update| Self::set_price_internal(env, update.eid, &update.price));
121
116
  }
122
117
 
123
118
  /// Set price for Arbitrum with extension (price updater or owner)
@@ -134,7 +129,7 @@ impl LzPriceFeed {
134
129
 
135
130
  /// Set the native token price in USD (price updater or owner).
136
131
  ///
137
- /// Kept as a standalone contract function (not part of the canonical `worker::ILayerZeroPriceFeed` interface).
132
+ /// Kept as a standalone contract function (not part of the canonical `fee_lib_interfaces::ILayerZeroPriceFeed` interface).
138
133
  pub fn set_native_token_price_usd(env: &Env, price_updater: &Address, native_token_price_usd: u128) {
139
134
  Self::require_price_updater(env, price_updater);
140
135
  PriceFeedStorage::set_native_price_usd(env, &native_token_price_usd);
@@ -271,14 +266,3 @@ impl LzPriceFeed {
271
266
  }
272
267
  }
273
268
 
274
- // ============================================================================
275
- // Upgradeable Implementation
276
- // ============================================================================
277
-
278
- impl UpgradeableInternal for LzPriceFeed {
279
- type MigrationData = ();
280
-
281
- fn __migrate(_env: &Env, _migration_data: &Self::MigrationData) {
282
- // No migration logic needed for initial upgrade capability
283
- }
284
- }
@@ -1,6 +1,6 @@
1
1
  use common_macros::storage;
2
+ use fee_lib_interfaces::Price;
2
3
  use soroban_sdk::Address;
3
- use worker::Price;
4
4
 
5
5
  use crate::types::{ArbitrumPriceExt, ModelType};
6
6
 
@@ -0,0 +1,2 @@
1
+ mod price_feed;
2
+ mod setup;