@layerzerolabs/protocol-stellar-v2 0.2.18 → 0.2.20

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 (213) hide show
  1. package/.turbo/turbo-build.log +303 -253
  2. package/.turbo/turbo-lint.log +66 -65
  3. package/.turbo/turbo-test.log +1312 -1282
  4. package/Cargo.lock +21 -8
  5. package/Cargo.toml +2 -0
  6. package/contracts/ERROR_SPEC.md +9 -2
  7. package/contracts/common-macros/src/contract_ttl.rs +18 -7
  8. package/contracts/common-macros/src/lib.rs +4 -4
  9. package/contracts/common-macros/src/tests/contract_ttl.rs +1 -1
  10. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contractimpl_code.snap +2 -1
  11. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +7 -12
  12. package/contracts/common-macros/src/upgradeable.rs +15 -21
  13. package/contracts/message-libs/uln-302/src/events.rs +4 -0
  14. package/contracts/message-libs/uln-302/src/send_uln.rs +23 -7
  15. package/contracts/message-libs/uln-302/src/tests/send_uln302/send.rs +38 -64
  16. package/contracts/oapps/counter/Cargo.toml +1 -0
  17. package/contracts/oapps/counter/integration_tests/setup_uln.rs +1 -1
  18. package/contracts/oapps/oapp/src/oapp_receiver.rs +1 -1
  19. package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +113 -65
  20. package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +111 -82
  21. package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +293 -65
  22. package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +331 -56
  23. package/contracts/oapps/oft/Cargo.toml +10 -7
  24. package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_oft_fee.rs +3 -4
  25. package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_pausable.rs +2 -3
  26. package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_rate_limiter.rs +1 -1
  27. package/contracts/oapps/oft/integration-tests/mod.rs +1 -1
  28. package/contracts/oapps/oft/integration-tests/setup.rs +28 -127
  29. package/contracts/oapps/oft/integration-tests/utils.rs +254 -21
  30. package/contracts/oapps/oft/src/extensions/oft_fee.rs +23 -8
  31. package/contracts/oapps/oft/src/extensions/pausable.rs +19 -4
  32. package/contracts/oapps/oft/src/extensions/rate_limiter.rs +52 -28
  33. package/contracts/oapps/oft/src/lib.rs +10 -14
  34. package/contracts/oapps/oft/src/oft.rs +143 -193
  35. package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +9 -11
  36. package/contracts/oapps/oft/src/oft_types/mint_burn.rs +12 -14
  37. package/contracts/oapps/oft/src/oft_types/mod.rs +13 -0
  38. package/contracts/oapps/{oft-std → oft-core}/Cargo.toml +6 -4
  39. package/contracts/oapps/{oft-std → oft-core}/integration-tests/mod.rs +1 -1
  40. package/contracts/oapps/{oft-std → oft-core}/integration-tests/setup.rs +126 -29
  41. package/contracts/oapps/{oft → oft-core}/integration-tests/test_with_sml.rs +3 -3
  42. package/contracts/oapps/oft-core/integration-tests/utils.rs +201 -0
  43. package/contracts/oapps/oft-core/src/lib.rs +18 -0
  44. package/contracts/oapps/oft-core/src/oft_core.rs +479 -0
  45. package/contracts/oapps/{oft → oft-core}/src/tests/mod.rs +0 -2
  46. package/contracts/oapps/{oft → oft-core}/src/tests/test_lz_receive.rs +7 -7
  47. package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_msg_codec.rs +4 -4
  48. package/contracts/oapps/{oft → oft-core}/src/tests/test_resolve_address.rs +3 -3
  49. package/contracts/oapps/{oft → oft-core}/src/tests/test_utils.rs +46 -27
  50. package/contracts/oapps/{oft → oft-core}/src/utils.rs +1 -1
  51. package/contracts/upgrader/src/lib.rs +30 -57
  52. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract1.wasm +0 -0
  53. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract2.wasm +0 -0
  54. package/contracts/upgrader/src/tests/test_upgrader.rs +44 -35
  55. package/contracts/utils/src/buffer_reader.rs +1 -0
  56. package/contracts/utils/src/errors.rs +8 -2
  57. package/contracts/utils/src/ownable.rs +125 -3
  58. package/contracts/utils/src/tests/option_ext.rs +1 -1
  59. package/contracts/utils/src/tests/ownable.rs +445 -7
  60. package/contracts/utils/src/tests/ttl_configurable.rs +2 -2
  61. package/contracts/utils/src/tests/upgradeable.rs +372 -175
  62. package/contracts/utils/src/ttl_configurable.rs +3 -3
  63. package/contracts/utils/src/upgradeable.rs +48 -23
  64. package/contracts/workers/dvn/Cargo.toml +1 -0
  65. package/contracts/workers/dvn/src/auth.rs +12 -42
  66. package/contracts/workers/dvn/src/dvn.rs +16 -31
  67. package/contracts/workers/dvn/src/errors.rs +0 -1
  68. package/contracts/workers/dvn/src/interfaces/dvn.rs +35 -0
  69. package/contracts/workers/dvn/src/lib.rs +4 -3
  70. package/contracts/workers/dvn/src/tests/auth.rs +1 -1
  71. package/contracts/workers/dvn/src/tests/dvn.rs +19 -15
  72. package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +2 -4
  73. package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +1 -3
  74. package/contracts/workers/dvn/src/tests/setup.rs +5 -9
  75. package/contracts/workers/dvn-fee-lib/Cargo.toml +1 -1
  76. package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +3 -5
  77. package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +2 -3
  78. package/contracts/workers/executor/Cargo.toml +1 -0
  79. package/contracts/workers/executor/src/executor.rs +15 -26
  80. package/contracts/workers/executor-fee-lib/Cargo.toml +2 -1
  81. package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +63 -5
  82. package/contracts/workers/executor-fee-lib/src/executor_option.rs +28 -1
  83. package/contracts/workers/executor-fee-lib/src/lib.rs +3 -0
  84. package/contracts/workers/executor-fee-lib/src/tests/executor_fee_lib.rs +701 -0
  85. package/contracts/workers/executor-fee-lib/src/tests/executor_option.rs +370 -0
  86. package/contracts/workers/executor-fee-lib/src/tests/mod.rs +4 -0
  87. package/contracts/workers/executor-fee-lib/src/tests/setup.rs +60 -0
  88. package/contracts/workers/executor-helper/src/lib.rs +3 -0
  89. package/contracts/workers/executor-helper/src/tests/executor_helper.rs +184 -0
  90. package/contracts/workers/executor-helper/src/tests/mod.rs +2 -0
  91. package/contracts/workers/executor-helper/src/tests/setup.rs +366 -0
  92. package/contracts/workers/fee-lib-interfaces/Cargo.toml +14 -0
  93. package/contracts/workers/{worker/src/interfaces/mod.rs → fee-lib-interfaces/src/lib.rs} +4 -3
  94. package/contracts/workers/price-feed/Cargo.toml +2 -1
  95. package/contracts/workers/price-feed/src/events.rs +1 -1
  96. package/contracts/workers/price-feed/src/lib.rs +3 -0
  97. package/contracts/workers/price-feed/src/price_feed.rs +6 -12
  98. package/contracts/workers/price-feed/src/storage.rs +1 -1
  99. package/contracts/workers/price-feed/src/tests/mod.rs +2 -0
  100. package/contracts/workers/price-feed/src/tests/price_feed.rs +869 -0
  101. package/contracts/workers/price-feed/src/tests/setup.rs +70 -0
  102. package/contracts/workers/price-feed/src/types.rs +1 -1
  103. package/contracts/workers/worker/src/errors.rs +0 -3
  104. package/contracts/workers/worker/src/lib.rs +0 -2
  105. package/contracts/workers/worker/src/storage.rs +32 -29
  106. package/contracts/workers/worker/src/tests/setup.rs +1 -7
  107. package/contracts/workers/worker/src/tests/worker.rs +50 -42
  108. package/contracts/workers/worker/src/worker.rs +49 -58
  109. package/package.json +4 -5
  110. package/sdk/.turbo/turbo-test.log +229 -217
  111. package/sdk/dist/generated/bml.d.ts +39 -1
  112. package/sdk/dist/generated/bml.js +33 -8
  113. package/sdk/dist/generated/counter.d.ts +131 -3
  114. package/sdk/dist/generated/counter.js +41 -10
  115. package/sdk/dist/generated/dvn.d.ts +431 -362
  116. package/sdk/dist/generated/dvn.js +80 -55
  117. package/sdk/dist/generated/dvn_fee_lib.d.ts +327 -251
  118. package/sdk/dist/generated/dvn_fee_lib.js +55 -57
  119. package/sdk/dist/generated/endpoint.d.ts +131 -3
  120. package/sdk/dist/generated/endpoint.js +41 -10
  121. package/sdk/dist/generated/executor.d.ts +503 -339
  122. package/sdk/dist/generated/executor.js +80 -48
  123. package/sdk/dist/generated/executor_fee_lib.d.ts +395 -319
  124. package/sdk/dist/generated/executor_fee_lib.js +54 -56
  125. package/sdk/dist/generated/executor_helper.d.ts +53 -187
  126. package/sdk/dist/generated/executor_helper.js +47 -29
  127. package/sdk/dist/generated/layerzero_view.d.ts +1271 -0
  128. package/sdk/dist/generated/layerzero_view.js +294 -0
  129. package/sdk/dist/generated/oft.d.ts +1851 -0
  130. package/sdk/dist/generated/oft.js +347 -0
  131. package/sdk/dist/generated/price_feed.d.ts +329 -253
  132. package/sdk/dist/generated/price_feed.js +55 -57
  133. package/sdk/dist/generated/sml.d.ts +131 -3
  134. package/sdk/dist/generated/sml.js +41 -10
  135. package/sdk/dist/generated/treasury.d.ts +131 -3
  136. package/sdk/dist/generated/treasury.js +41 -10
  137. package/sdk/dist/generated/uln302.d.ts +131 -3
  138. package/sdk/dist/generated/uln302.js +43 -12
  139. package/sdk/dist/generated/upgrader.d.ts +201 -15
  140. package/sdk/dist/generated/upgrader.js +99 -1
  141. package/sdk/dist/index.d.ts +2 -2
  142. package/sdk/dist/index.js +3 -3
  143. package/sdk/package.json +3 -2
  144. package/sdk/src/index.ts +3 -3
  145. package/sdk/test/oft-sml.test.ts +20 -20
  146. package/sdk/test/upgrader.test.ts +2 -3
  147. package/sdk/turbo.json +8 -0
  148. package/tools/ts-bindings-gen/Cargo.toml +2 -0
  149. package/tools/ts-bindings-gen/src/main.rs +53 -5
  150. package/turbo.json +0 -2
  151. package/contracts/oapps/oft/src/interfaces/mint_burn_token.rs +0 -23
  152. package/contracts/oapps/oft/src/interfaces/mod.rs +0 -3
  153. package/contracts/oapps/oft/src/oft_impl.rs +0 -201
  154. package/contracts/oapps/oft/src/tests/extensions/mod.rs +0 -11
  155. package/contracts/oapps/oft/src/tests/extensions/setup.rs +0 -917
  156. package/contracts/oapps/oft/src/tests/extensions/test_oft_fee.rs +0 -751
  157. package/contracts/oapps/oft/src/tests/extensions/test_pausable.rs +0 -434
  158. package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +0 -1080
  159. package/contracts/oapps/oft-std/integration-tests/utils.rs +0 -427
  160. package/contracts/oapps/oft-std/src/lib.rs +0 -16
  161. package/contracts/oapps/oft-std/src/oft.rs +0 -174
  162. package/sdk/dist/generated/oft_std.d.ts +0 -1722
  163. package/sdk/dist/generated/oft_std.js +0 -316
  164. package/sdk/dist/wasm/blocked-message-lib.d.ts +0 -1
  165. package/sdk/dist/wasm/blocked-message-lib.js +0 -2
  166. package/sdk/dist/wasm/counter.d.ts +0 -1
  167. package/sdk/dist/wasm/counter.js +0 -2
  168. package/sdk/dist/wasm/dvn-fee-lib.d.ts +0 -1
  169. package/sdk/dist/wasm/dvn-fee-lib.js +0 -2
  170. package/sdk/dist/wasm/dvn.d.ts +0 -1
  171. package/sdk/dist/wasm/dvn.js +0 -2
  172. package/sdk/dist/wasm/endpoint-v2.d.ts +0 -1
  173. package/sdk/dist/wasm/endpoint-v2.js +0 -2
  174. package/sdk/dist/wasm/executor-fee-lib.d.ts +0 -1
  175. package/sdk/dist/wasm/executor-fee-lib.js +0 -2
  176. package/sdk/dist/wasm/executor-helper.d.ts +0 -1
  177. package/sdk/dist/wasm/executor-helper.js +0 -2
  178. package/sdk/dist/wasm/executor.d.ts +0 -1
  179. package/sdk/dist/wasm/executor.js +0 -2
  180. package/sdk/dist/wasm/layerzero-views.d.ts +0 -1
  181. package/sdk/dist/wasm/layerzero-views.js +0 -2
  182. package/sdk/dist/wasm/oft-std.d.ts +0 -1
  183. package/sdk/dist/wasm/oft-std.js +0 -2
  184. package/sdk/dist/wasm/price-feed.d.ts +0 -1
  185. package/sdk/dist/wasm/price-feed.js +0 -2
  186. package/sdk/dist/wasm/simple-message-lib.d.ts +0 -1
  187. package/sdk/dist/wasm/simple-message-lib.js +0 -2
  188. package/sdk/dist/wasm/treasury.d.ts +0 -1
  189. package/sdk/dist/wasm/treasury.js +0 -2
  190. package/sdk/dist/wasm/uln302.d.ts +0 -1
  191. package/sdk/dist/wasm/uln302.js +0 -2
  192. package/sdk/dist/wasm/upgrader.d.ts +0 -1
  193. package/sdk/dist/wasm/upgrader.js +0 -2
  194. package/sdk/dist/wasm.d.ts +0 -15
  195. package/sdk/dist/wasm.js +0 -15
  196. /package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/mod.rs +0 -0
  197. /package/contracts/oapps/{oft → oft-core}/src/codec/mod.rs +0 -0
  198. /package/contracts/oapps/{oft → oft-core}/src/codec/oft_compose_msg_codec.rs +0 -0
  199. /package/contracts/oapps/{oft → oft-core}/src/codec/oft_msg_codec.rs +0 -0
  200. /package/contracts/oapps/{oft → oft-core}/src/errors.rs +0 -0
  201. /package/contracts/oapps/{oft → oft-core}/src/events.rs +0 -0
  202. /package/contracts/oapps/{oft → oft-core}/src/storage.rs +0 -0
  203. /package/contracts/oapps/{oft → oft-core}/src/tests/test_decimals.rs +0 -0
  204. /package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_compose_msg_codec.rs +0 -0
  205. /package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_version.rs +0 -0
  206. /package/contracts/oapps/{oft → oft-core}/src/tests/test_quote_oft.rs +0 -0
  207. /package/contracts/oapps/{oft → oft-core}/src/tests/test_quote_send.rs +0 -0
  208. /package/contracts/oapps/{oft → oft-core}/src/tests/test_send.rs +0 -0
  209. /package/contracts/oapps/{oft → oft-core}/src/tests/test_token.rs +0 -0
  210. /package/contracts/oapps/{oft → oft-core}/src/types.rs +0 -0
  211. /package/contracts/workers/{worker/src/interfaces → fee-lib-interfaces/src}/dvn_fee_lib.rs +0 -0
  212. /package/contracts/workers/{worker/src/interfaces → fee-lib-interfaces/src}/executor_fee_lib.rs +0 -0
  213. /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::*;
@@ -12,9 +12,10 @@ doctest = false
12
12
  [dependencies]
13
13
  soroban-sdk = { workspace = true }
14
14
  utils = { workspace = true }
15
- worker = { workspace = true }
15
+ fee-lib-interfaces = { workspace = true }
16
16
  common-macros = { workspace = true }
17
17
 
18
18
  [dev-dependencies]
19
19
  soroban-sdk = { workspace = true, features = ["testutils"] }
20
+ utils = { workspace = true, features = ["testutils"] }
20
21
 
@@ -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
 
@@ -8,3 +8,6 @@ pub mod price_feed;
8
8
  pub mod types;
9
9
 
10
10
  pub use price_feed::{LzPriceFeed, LzPriceFeedClient};
11
+
12
+ #[cfg(test)]
13
+ mod tests;
@@ -1,7 +1,7 @@
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
4
  use utils::upgradeable::UpgradeableInternal;
4
- use worker::{FeeEstimate, ILayerZeroPriceFeed, Price};
5
5
 
6
6
  use crate::{
7
7
  errors::PriceFeedError,
@@ -102,9 +102,7 @@ impl LzPriceFeed {
102
102
  /// Set the fee model type for destination EIDs (owner only)
103
103
  #[only_auth]
104
104
  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
- }
105
+ params.iter().for_each(|param| PriceFeedStorage::set_eid_to_model_type(env, param.dst_eid, &param.model_type));
108
106
  }
109
107
 
110
108
  // ========================================================================
@@ -115,9 +113,7 @@ impl LzPriceFeed {
115
113
  pub fn set_price(env: &Env, price_updater: &Address, prices: &Vec<UpdatePrice>) {
116
114
  Self::require_price_updater(env, price_updater);
117
115
 
118
- for update in prices.iter() {
119
- Self::set_price_internal(env, update.eid, &update.price);
120
- }
116
+ prices.iter().for_each(|update| Self::set_price_internal(env, update.eid, &update.price));
121
117
  }
122
118
 
123
119
  /// Set price for Arbitrum with extension (price updater or owner)
@@ -134,7 +130,7 @@ impl LzPriceFeed {
134
130
 
135
131
  /// Set the native token price in USD (price updater or owner).
136
132
  ///
137
- /// Kept as a standalone contract function (not part of the canonical `worker::ILayerZeroPriceFeed` interface).
133
+ /// Kept as a standalone contract function (not part of the canonical `fee_lib_interfaces::ILayerZeroPriceFeed` interface).
138
134
  pub fn set_native_token_price_usd(env: &Env, price_updater: &Address, native_token_price_usd: u128) {
139
135
  Self::require_price_updater(env, price_updater);
140
136
  PriceFeedStorage::set_native_price_usd(env, &native_token_price_usd);
@@ -275,10 +271,8 @@ impl LzPriceFeed {
275
271
  // Upgradeable Implementation
276
272
  // ============================================================================
277
273
 
274
+ /// No migration logic needed for initial upgrade capability
278
275
  impl UpgradeableInternal for LzPriceFeed {
279
276
  type MigrationData = ();
280
-
281
- fn __migrate(_env: &Env, _migration_data: &Self::MigrationData) {
282
- // No migration logic needed for initial upgrade capability
283
- }
277
+ fn __migrate(_env: &Env, _migration_data: &Self::MigrationData) {}
284
278
  }
@@ -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;