@layerzerolabs/protocol-stellar-v2 0.2.8 → 0.2.10

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 (239) hide show
  1. package/.turbo/turbo-build.log +443 -302
  2. package/.turbo/turbo-lint.log +118 -96
  3. package/.turbo/turbo-test.log +853 -731
  4. package/Cargo.lock +120 -37
  5. package/Cargo.toml +8 -5
  6. package/contracts/common-macros/src/contract_impl.rs +44 -0
  7. package/contracts/common-macros/src/lib.rs +86 -40
  8. package/contracts/common-macros/src/ownable.rs +24 -32
  9. package/contracts/common-macros/src/storage.rs +95 -120
  10. package/contracts/common-macros/src/tests/contract_impl.rs +289 -0
  11. package/contracts/common-macros/src/tests/mod.rs +9 -0
  12. package/contracts/common-macros/src/tests/ownable.rs +151 -0
  13. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_impl__snapshot_generated_contract_impl_code.snap +85 -0
  14. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +30 -0
  15. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_only_owner_preserves_function_signature.snap +9 -0
  16. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__storage__snapshot_generated_storage_code.snap +1072 -0
  17. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +45 -0
  18. package/contracts/common-macros/src/tests/storage.rs +485 -0
  19. package/contracts/common-macros/src/tests/test_helpers.rs +93 -0
  20. package/contracts/common-macros/src/tests/ttl_configurable.rs +34 -0
  21. package/contracts/common-macros/src/ttl_configurable.rs +31 -14
  22. package/contracts/common-macros/src/utils.rs +27 -0
  23. package/contracts/endpoint-v2/ARCHITECTURE.md +4 -4
  24. package/contracts/endpoint-v2/src/endpoint_v2.rs +18 -15
  25. package/contracts/endpoint-v2/src/interfaces/message_lib.rs +2 -3
  26. package/contracts/endpoint-v2/src/interfaces/message_lib_manager.rs +5 -3
  27. package/contracts/endpoint-v2/src/interfaces/messaging_channel.rs +2 -2
  28. package/contracts/endpoint-v2/src/interfaces/messaging_composer.rs +2 -2
  29. package/contracts/endpoint-v2/src/interfaces/send_lib.rs +4 -4
  30. package/contracts/endpoint-v2/src/lib.rs +6 -5
  31. package/contracts/endpoint-v2/src/message_lib_manager.rs +14 -6
  32. package/contracts/endpoint-v2/src/messaging_channel.rs +6 -2
  33. package/contracts/endpoint-v2/src/messaging_composer.rs +6 -2
  34. package/contracts/endpoint-v2/src/storage.rs +10 -7
  35. package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +16 -16
  36. package/contracts/endpoint-v2/src/tests/endpoint_v2/ttl_config.rs +46 -46
  37. package/contracts/endpoint-v2/src/tests/mock.rs +2 -2
  38. package/contracts/endpoint-v2/src/util.rs +8 -2
  39. package/contracts/message-libs/block-message-lib/Cargo.toml +1 -0
  40. package/contracts/message-libs/block-message-lib/src/lib.rs +5 -5
  41. package/contracts/message-libs/message-lib-common/src/errors.rs +8 -8
  42. package/contracts/message-libs/message-lib-common/src/interfaces/dvn.rs +0 -1
  43. package/contracts/message-libs/message-lib-common/src/interfaces/mod.rs +3 -3
  44. package/contracts/message-libs/message-lib-common/src/lib.rs +0 -2
  45. package/contracts/message-libs/message-lib-common/src/packet_codec_v1.rs +4 -6
  46. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1.rs +2 -2
  47. package/contracts/message-libs/message-lib-common/src/tests/worker_options.rs +11 -11
  48. package/contracts/message-libs/message-lib-common/src/worker_options.rs +10 -16
  49. package/contracts/message-libs/simple-message-lib/src/errors.rs +0 -4
  50. package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +49 -34
  51. package/contracts/message-libs/simple-message-lib/src/storage.rs +3 -7
  52. package/contracts/message-libs/simple-message-lib/src/test.rs +3 -3
  53. package/contracts/message-libs/treasury/src/storage.rs +1 -2
  54. package/contracts/message-libs/treasury/src/tests/setup.rs +3 -2
  55. package/contracts/message-libs/treasury/src/tests/treasury_tests.rs +0 -13
  56. package/contracts/message-libs/treasury/src/treasury.rs +18 -21
  57. package/contracts/message-libs/uln-302/Cargo.toml +1 -0
  58. package/contracts/message-libs/uln-302/src/interfaces/mod.rs +4 -4
  59. package/contracts/message-libs/uln-302/src/interfaces/{receive.rs → receive_uln.rs} +3 -3
  60. package/contracts/message-libs/uln-302/src/interfaces/{send.rs → send_uln.rs} +8 -80
  61. package/contracts/message-libs/uln-302/src/lib.rs +5 -4
  62. package/contracts/message-libs/uln-302/src/{receive.rs → receive_uln.rs} +20 -12
  63. package/contracts/message-libs/uln-302/src/{send.rs → send_uln.rs} +19 -13
  64. package/contracts/message-libs/uln-302/src/storage.rs +1 -2
  65. package/contracts/message-libs/uln-302/src/tests/config/uln_config.rs +3 -2
  66. package/contracts/message-libs/uln-302/src/tests/send_uln302/send.rs +30 -30
  67. package/contracts/message-libs/uln-302/src/tests/setup.rs +12 -11
  68. package/contracts/message-libs/uln-302/src/tests/uln302/set_config.rs +1 -1
  69. package/contracts/message-libs/uln-302/src/{config_validation.rs → types.rs} +79 -11
  70. package/contracts/message-libs/uln-302/src/uln302.rs +15 -10
  71. package/contracts/oapp-macros/Cargo.toml +2 -8
  72. package/contracts/oapp-macros/src/lib.rs +57 -311
  73. package/contracts/oapp-macros/src/oapp_core.rs +23 -32
  74. package/contracts/oapp-macros/src/oapp_full.rs +8 -2
  75. package/contracts/oapp-macros/src/oapp_options_type3.rs +21 -36
  76. package/contracts/oapp-macros/src/oapp_receiver.rs +38 -57
  77. package/contracts/oapp-macros/src/oapp_sender.rs +12 -14
  78. package/contracts/oapp-macros/src/util.rs +14 -10
  79. package/contracts/oapps/counter/Cargo.toml +2 -1
  80. package/contracts/oapps/counter/integration_tests/utils.rs +4 -4
  81. package/contracts/oapps/counter/src/codec.rs +8 -9
  82. package/contracts/oapps/counter/src/counter.rs +156 -147
  83. package/contracts/oapps/counter/src/storage.rs +1 -2
  84. package/contracts/oapps/counter/src/tests/test_codec.rs +5 -5
  85. package/contracts/oapps/counter/src/tests/test_counter.rs +11 -13
  86. package/contracts/oapps/oapp/Cargo.toml +1 -0
  87. package/contracts/oapps/oapp/src/errors.rs +1 -1
  88. package/contracts/oapps/oapp/src/lib.rs +3 -0
  89. package/contracts/oapps/oapp/src/macro_tests/mod.rs +1 -0
  90. package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +312 -0
  91. package/contracts/oapps/oapp/src/oapp_core.rs +52 -53
  92. package/contracts/oapps/oapp/src/oapp_options_type3.rs +18 -28
  93. package/contracts/oapps/oapp/src/oapp_receiver.rs +82 -31
  94. package/contracts/oapps/oapp/src/oapp_sender.rs +55 -13
  95. package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +16 -3
  96. package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +33 -8
  97. package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +6 -9
  98. package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +28 -15
  99. package/contracts/oapps/oft/Cargo.toml +27 -0
  100. package/contracts/oapps/oft/integration-tests/mod.rs +3 -0
  101. package/contracts/oapps/oft/integration-tests/setup.rs +320 -0
  102. package/contracts/oapps/oft/integration-tests/test_with_sml.rs +155 -0
  103. package/contracts/oapps/oft/integration-tests/utils.rs +201 -0
  104. package/contracts/oapps/oft/src/codec/mod.rs +2 -0
  105. package/contracts/oapps/oft/src/codec/oft_compose_msg_codec.rs +55 -0
  106. package/contracts/oapps/oft/src/codec/oft_msg_codec.rs +62 -0
  107. package/contracts/oapps/oft/src/constants.rs +5 -0
  108. package/contracts/oapps/oft/src/errors.rs +8 -0
  109. package/contracts/oapps/oft/src/events.rs +19 -0
  110. package/contracts/oapps/oft/src/interfaces/mint_burn_token.rs +23 -0
  111. package/contracts/oapps/oft/src/interfaces/mod.rs +3 -0
  112. package/contracts/oapps/oft/src/lib.rs +22 -0
  113. package/contracts/oapps/oft/src/macro_tests/mod.rs +2 -0
  114. package/contracts/oapps/oft/src/macro_tests/test_all_default.rs +41 -0
  115. package/contracts/oapps/oft/src/macro_tests/test_override.rs +83 -0
  116. package/contracts/oapps/oft/src/oft.rs +320 -0
  117. package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +50 -0
  118. package/contracts/oapps/oft/src/oft_types/mint_burn.rs +50 -0
  119. package/contracts/oapps/oft/src/oft_types/mod.rs +10 -0
  120. package/contracts/oapps/oft/src/storage.rs +11 -0
  121. package/contracts/oapps/oft/src/tests/mod.rs +13 -0
  122. package/contracts/oapps/oft/src/tests/test_decimals.rs +89 -0
  123. package/contracts/oapps/oft/src/tests/test_lz_receive.rs +282 -0
  124. package/contracts/oapps/oft/src/tests/test_oft_compose_msg_codec.rs +68 -0
  125. package/contracts/oapps/oft/src/tests/test_oft_msg_codec.rs +136 -0
  126. package/contracts/oapps/oft/src/tests/test_oft_version.rs +13 -0
  127. package/contracts/oapps/oft/src/tests/test_quote_oft.rs +159 -0
  128. package/contracts/oapps/oft/src/tests/test_quote_send.rs +195 -0
  129. package/contracts/oapps/oft/src/tests/test_resolve_address.rs +37 -0
  130. package/contracts/oapps/oft/src/tests/test_send.rs +915 -0
  131. package/contracts/oapps/oft/src/tests/test_token.rs +47 -0
  132. package/contracts/oapps/oft/src/tests/test_utils.rs +789 -0
  133. package/contracts/oapps/oft/src/types.rs +38 -0
  134. package/contracts/oapps/oft/src/utils.rs +67 -0
  135. package/contracts/oapps/oft-mint-burn/Cargo.toml +26 -0
  136. package/contracts/oapps/oft-mint-burn/src/lib.rs +3 -0
  137. package/contracts/oapps/oft-mint-burn/src/oft.rs +28 -0
  138. package/contracts/oapps/oft-mint-burn/src/tests/mod.rs +1 -0
  139. package/contracts/utils/src/buffer_reader.rs +8 -9
  140. package/contracts/utils/src/buffer_writer.rs +11 -5
  141. package/contracts/utils/src/errors.rs +5 -5
  142. package/contracts/utils/src/ownable.rs +14 -6
  143. package/contracts/utils/src/testing_utils.rs +11 -1
  144. package/contracts/utils/src/tests/buffer_reader.rs +491 -730
  145. package/contracts/utils/src/tests/buffer_writer.rs +336 -148
  146. package/contracts/utils/src/tests/bytes_ext.rs +125 -40
  147. package/contracts/utils/src/tests/mod.rs +3 -0
  148. package/contracts/utils/src/tests/ownable.rs +379 -27
  149. package/contracts/utils/src/tests/test_helper.rs +47 -0
  150. package/contracts/utils/src/tests/testing_utils.rs +555 -0
  151. package/contracts/utils/src/tests/ttl.rs +421 -0
  152. package/contracts/utils/src/ttl.rs +29 -89
  153. package/contracts/workers/dvn/Cargo.toml +31 -0
  154. package/contracts/workers/dvn/src/auth.rs +66 -0
  155. package/contracts/workers/dvn/src/dvn.rs +143 -0
  156. package/contracts/workers/dvn/src/errors.rs +21 -0
  157. package/contracts/workers/dvn/src/events.rs +19 -0
  158. package/contracts/workers/dvn/src/interfaces/dvn.rs +12 -0
  159. package/contracts/workers/dvn/src/interfaces/mod.rs +5 -0
  160. package/contracts/workers/dvn/src/interfaces/multisig.rs +15 -0
  161. package/contracts/workers/dvn/src/lib.rs +24 -0
  162. package/contracts/workers/dvn/src/multisig.rs +127 -0
  163. package/contracts/workers/dvn/src/storage.rs +35 -0
  164. package/contracts/workers/dvn/src/tests/auth.rs +237 -0
  165. package/contracts/workers/dvn/src/tests/dvn.rs +349 -0
  166. package/contracts/workers/dvn/src/tests/key_pair.rs +66 -0
  167. package/contracts/workers/dvn/src/tests/mod.rs +5 -0
  168. package/contracts/workers/dvn/src/tests/multisig/mod.rs +3 -0
  169. package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +133 -0
  170. package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +108 -0
  171. package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +109 -0
  172. package/contracts/workers/dvn/src/tests/setup.rs +109 -0
  173. package/contracts/workers/dvn/src/types.rs +26 -0
  174. package/contracts/workers/dvn-fee-lib/Cargo.toml +24 -0
  175. package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +113 -0
  176. package/contracts/workers/dvn-fee-lib/src/errors.rs +8 -0
  177. package/contracts/workers/dvn-fee-lib/src/lib.rs +17 -0
  178. package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +282 -0
  179. package/contracts/workers/dvn-fee-lib/src/tests/mod.rs +1 -0
  180. package/contracts/workers/executor/Cargo.toml +10 -7
  181. package/contracts/workers/executor/src/errors.rs +8 -0
  182. package/contracts/workers/executor/src/events.rs +4 -7
  183. package/contracts/workers/executor/src/interfaces/executor.rs +72 -22
  184. package/contracts/workers/executor/src/interfaces/mod.rs +0 -2
  185. package/contracts/workers/executor/src/lib.rs +16 -7
  186. package/contracts/workers/executor/src/lz_executor.rs +308 -0
  187. package/contracts/workers/executor/src/storage.rs +24 -16
  188. package/contracts/workers/executor-fee-lib/Cargo.toml +22 -0
  189. package/contracts/workers/executor-fee-lib/src/errors.rs +15 -0
  190. package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +215 -0
  191. package/contracts/workers/executor-fee-lib/src/executor_option.rs +203 -0
  192. package/contracts/workers/executor-fee-lib/src/lib.rs +7 -0
  193. package/contracts/workers/executor-helper/Cargo.toml +29 -0
  194. package/contracts/workers/executor-helper/src/executor_helper.rs +161 -0
  195. package/contracts/workers/executor-helper/src/lib.rs +11 -0
  196. package/contracts/workers/{worker-common → worker}/Cargo.toml +1 -4
  197. package/contracts/workers/worker/src/errors.rs +24 -0
  198. package/contracts/workers/worker/src/events.rs +62 -0
  199. package/contracts/workers/worker/src/interfaces/dvn_fee_lib.rs +75 -0
  200. package/contracts/workers/worker/src/interfaces/executor_fee_lib.rs +84 -0
  201. package/contracts/workers/{worker-common → worker}/src/interfaces/mod.rs +2 -2
  202. package/contracts/workers/worker/src/interfaces/price_feed.rs +85 -0
  203. package/contracts/workers/worker/src/lib.rs +14 -0
  204. package/contracts/workers/worker/src/storage.rs +63 -0
  205. package/contracts/workers/worker/src/worker.rs +459 -0
  206. package/package.json +3 -3
  207. package/sdk/dist/generated/bml.d.ts +88 -17
  208. package/sdk/dist/generated/bml.js +62 -16
  209. package/sdk/dist/generated/counter.d.ts +281 -102
  210. package/sdk/dist/generated/counter.js +93 -41
  211. package/sdk/dist/generated/endpoint.d.ts +128 -105
  212. package/sdk/dist/generated/endpoint.js +47 -45
  213. package/sdk/dist/generated/sml.d.ts +212 -69
  214. package/sdk/dist/generated/sml.js +103 -53
  215. package/sdk/dist/generated/uln302.d.ts +270 -173
  216. package/sdk/dist/generated/uln302.js +112 -64
  217. package/sdk/package.json +11 -11
  218. package/sdk/test/index.test.ts +147 -42
  219. package/sdk/test/suites/constants.ts +7 -3
  220. package/sdk/test/suites/deploy.ts +65 -42
  221. package/sdk/test/suites/localnet.ts +2 -2
  222. package/sdk/test/suites/scan.ts +28 -25
  223. package/sdk/test/utils.ts +199 -0
  224. package/sdk/tsconfig.json +93 -95
  225. package/tools/ts-bindings-gen/src/main.rs +2 -0
  226. package/contracts/common-macros/src/snapshots/common_macros__tests__tests__snapshot_generated_storage_code.snap +0 -310
  227. package/contracts/common-macros/src/tests.rs +0 -287
  228. package/contracts/oapp-macros/tests/test_macros.rs +0 -522
  229. package/contracts/workers/executor/src/executor.rs +0 -347
  230. package/contracts/workers/executor/src/interfaces/types.rs +0 -51
  231. package/contracts/workers/worker-common/src/constants.rs +0 -17
  232. package/contracts/workers/worker-common/src/errors.rs +0 -6
  233. package/contracts/workers/worker-common/src/events.rs +0 -34
  234. package/contracts/workers/worker-common/src/interfaces/executor_fee_lib.rs +0 -35
  235. package/contracts/workers/worker-common/src/interfaces/price_feed.rs +0 -40
  236. package/contracts/workers/worker-common/src/interfaces/worker.rs +0 -60
  237. package/contracts/workers/worker-common/src/lib.rs +0 -19
  238. package/contracts/workers/worker-common/src/storage.rs +0 -32
  239. package/contracts/workers/worker-common/src/worker_common.rs +0 -166
@@ -1,347 +0,0 @@
1
- use crate::{
2
- events::{DstConfigSet, NativeDropApplied},
3
- interfaces::{DstConfig, ExecutionParams, IExecutor, NativeDropParams, SetDstConfigParam},
4
- storage::ExecutorData,
5
- ComposeParams,
6
- };
7
- use endpoint_v2::{
8
- FeeRecipient, LayerZeroComposerClient, LayerZeroEndpointV2Client, LayerZeroReceiverClient, MessagingComposerClient,
9
- };
10
- use message_lib_common::ILayerZeroExecutor;
11
- use soroban_sdk::{assert_with_error, bytes, contract, contractimpl, token, vec, Address, Bytes, Env, Vec};
12
- use stellar_access::access_control::AccessControl;
13
- use stellar_macros::{default_impl, only_role, when_not_paused};
14
- use worker_common::{ExecutorFeeLibClient, FeeParams, IWorker, WorkerCommon, WorkerError};
15
-
16
- // ============================================================================
17
- // Executor Contract
18
- // ============================================================================
19
-
20
- #[contract]
21
- pub struct LzExecutor;
22
-
23
- // ============================================================================
24
- // Constructor
25
- // ============================================================================
26
-
27
- #[contractimpl()]
28
- impl LzExecutor {
29
- /// Constructor - Initialize the executor contract
30
- /// Follows the EVM pattern: initialize(endpoint, messageLibs, priceFeed, roleAdmin, admins)
31
- pub fn __constructor(
32
- env: &Env,
33
- endpoint: &Address,
34
- message_libs: &Vec<Address>,
35
- price_feed: &Address,
36
- default_multiplier_bps: u32,
37
- role_admin: &Address,
38
- admins: &Vec<Address>,
39
- ) {
40
- // Initialize WorkerCommon (handles access control and basic worker setup)
41
- WorkerCommon::initialize(env, role_admin, message_libs, price_feed, default_multiplier_bps, admins);
42
-
43
- // Store executor-specific data
44
- ExecutorData::set_endpoint(env, endpoint);
45
-
46
- // Get and store the local EID from the endpoint
47
- let endpoint_client = LayerZeroEndpointV2Client::new(env, endpoint);
48
- let local_eid = endpoint_client.eid();
49
- ExecutorData::set_local_eid(env, &local_eid);
50
- }
51
-
52
- pub(crate) fn endpoint(env: &Env) -> Address {
53
- ExecutorData::endpoint(env).unwrap()
54
- }
55
- }
56
-
57
- // ============================================================================
58
- // IWorker Implementation (delegate to WorkerCommon)
59
- // ============================================================================
60
-
61
- #[contractimpl]
62
- impl IWorker for LzExecutor {
63
- // ========================================================================
64
- // Mutable Functions
65
- // ========================================================================
66
-
67
- fn set_paused(env: &Env, paused: bool) {
68
- WorkerCommon::set_paused(env, paused);
69
- }
70
-
71
- fn set_default_multiplier_bps(env: &Env, admin: &Address, multiplier_bps: u32) {
72
- WorkerCommon::set_default_multiplier_bps(env, admin, multiplier_bps);
73
- }
74
-
75
- fn set_deposit_address(env: &Env, admin: &Address, deposit_address: &Address) {
76
- WorkerCommon::set_deposit_address(env, admin, deposit_address);
77
- }
78
-
79
- fn set_price_feed(env: &Env, admin: &Address, price_feed: &Address) {
80
- WorkerCommon::set_price_feed(env, admin, price_feed);
81
- }
82
-
83
- fn set_supported_option_types(env: &Env, admin: &Address, eid: u32, option_types: Bytes) {
84
- WorkerCommon::set_supported_option_types(env, admin, eid, option_types);
85
- }
86
-
87
- fn set_worker_fee_lib(env: &Env, admin: &Address, worker_fee_lib: &Address) {
88
- WorkerCommon::set_worker_fee_lib(env, admin, worker_fee_lib);
89
- }
90
-
91
- // ========================================================================
92
- // View Functions
93
- // ========================================================================
94
-
95
- fn paused(env: &Env) -> bool {
96
- WorkerCommon::paused(env)
97
- }
98
-
99
- fn default_multiplier_bps(env: &Env) -> u32 {
100
- WorkerCommon::default_multiplier_bps(env)
101
- }
102
-
103
- fn deposit_address(env: &Env) -> Address {
104
- WorkerCommon::deposit_address(env)
105
- }
106
-
107
- fn price_feed(env: &Env) -> Address {
108
- WorkerCommon::price_feed(env)
109
- }
110
-
111
- fn get_supported_option_types(env: &Env, eid: u32) -> Bytes {
112
- WorkerCommon::get_supported_option_types(env, eid)
113
- }
114
-
115
- fn worker_fee_lib(env: &Env) -> Address {
116
- WorkerCommon::worker_fee_lib(env)
117
- }
118
-
119
- fn has_acl(env: &Env, sender: &Address) -> bool {
120
- WorkerCommon::has_acl(env, sender)
121
- }
122
-
123
- fn allowlist_size(env: &Env) -> u32 {
124
- WorkerCommon::allowlist_size(env)
125
- }
126
- }
127
-
128
- // ============================================================================
129
- // IExecutor Implementation
130
- // ============================================================================
131
-
132
- #[contractimpl]
133
- impl IExecutor for LzExecutor {
134
- // === Destination Configuration ===
135
-
136
- #[only_role(admin, "ADMIN")]
137
- fn set_dst_config(env: &Env, admin: &Address, params: &Vec<SetDstConfigParam>) {
138
- for param in params.iter() {
139
- ExecutorData::set_dst_config(env, param.dst_eid, &param.dst_config);
140
- }
141
- DstConfigSet { params: params.clone() }.publish(env);
142
- }
143
-
144
- // === Execution Functions ===
145
-
146
- #[only_role(admin, "ADMIN")]
147
- fn native_drop(
148
- env: &Env,
149
- admin: &Address,
150
- origin: &endpoint_v2::Origin,
151
- dst_eid: u32,
152
- oapp: &Address,
153
- native_drop_params: &Vec<NativeDropParams>,
154
- ) {
155
- let endpoint = Self::endpoint(env);
156
- let native_token_client =
157
- token::TokenClient::new(env, &LayerZeroEndpointV2Client::new(env, &endpoint).native_token());
158
-
159
- let mut success = vec![env];
160
-
161
- for param in native_drop_params.iter() {
162
- // Attempt to transfer native tokens to the receiver
163
- // In Stellar, we use the token client to transfer
164
- let transfer_success = native_token_client
165
- .try_transfer(&env.current_contract_address(), &param.receiver, &param.amount)
166
- .is_ok();
167
-
168
- success.push_back(transfer_success);
169
- }
170
-
171
- NativeDropApplied {
172
- origin: origin.clone(),
173
- dst_eid,
174
- oapp: oapp.clone(),
175
- native_drop_params: native_drop_params.clone(),
176
- success,
177
- }
178
- .publish(env);
179
- }
180
-
181
- #[only_role(admin, "ADMIN")]
182
- fn execute(env: &Env, admin: &Address, execution_params: &ExecutionParams) {
183
- let endpoint = Self::endpoint(env);
184
- let endpoint_client = LayerZeroEndpointV2Client::new(env, &endpoint);
185
- let native_token_client = token::TokenClient::new(env, &endpoint_client.native_token());
186
-
187
- // Transfer value to receiver if needed (matching EVM pattern)
188
- if execution_params.value > 0 {
189
- native_token_client.transfer(admin, env.current_contract_address(), &execution_params.value);
190
- }
191
-
192
- // Call lz_receive on the receiver
193
- let receiver_client = LayerZeroReceiverClient::new(env, &execution_params.receiver);
194
-
195
- // Try to execute lz_receive (matching EVM try-catch pattern)
196
- let result = receiver_client.try_lz_receive(
197
- &env.current_contract_address(),
198
- &execution_params.origin,
199
- &execution_params.guid,
200
- &execution_params.message,
201
- &execution_params.extra_data,
202
- &execution_params.value,
203
- );
204
-
205
- // If execution failed, call lz_receive_alert on endpoint (matching EVM catch block)
206
- if result.is_err() {
207
- // Get the error reason - in Stellar we just use an empty bytes for simplicity
208
- let reason = bytes![env];
209
- endpoint_client.lz_receive_alert(
210
- &env.current_contract_address(),
211
- &execution_params.origin,
212
- &execution_params.receiver,
213
- &execution_params.guid,
214
- &execution_params.gas_limit,
215
- &execution_params.value,
216
- &execution_params.message,
217
- &execution_params.extra_data,
218
- &reason,
219
- );
220
- }
221
- }
222
-
223
- #[only_role(admin, "ADMIN")]
224
- fn compose(env: &Env, admin: &Address, compose_params: &ComposeParams) {
225
- let endpoint = ExecutorData::endpoint(env).expect("endpoint not set");
226
- let endpoint_client = LayerZeroEndpointV2Client::new(env, &endpoint);
227
- let native_token_client = token::TokenClient::new(env, &endpoint_client.native_token());
228
-
229
- // Transfer value to composer if needed (matching EVM pattern)
230
- if compose_params.value > 0 {
231
- native_token_client.transfer(admin, env.current_contract_address(), &compose_params.value);
232
- }
233
-
234
- // Call lz_compose on the composer
235
- let composer_client = LayerZeroComposerClient::new(env, &compose_params.to);
236
-
237
- // Try to execute lz_compose (matching EVM try-catch pattern)
238
- let result = composer_client.try_lz_compose(
239
- &env.current_contract_address(),
240
- &compose_params.from,
241
- &compose_params.guid,
242
- &compose_params.index,
243
- &compose_params.message,
244
- &compose_params.extra_data,
245
- &compose_params.value,
246
- );
247
-
248
- // If execution failed, call lz_compose_alert on endpoint (matching EVM catch block)
249
- if result.is_err() {
250
- // Get the error reason - in Stellar we just use an empty bytes for simplicity
251
- let reason = bytes![env];
252
-
253
- // lz_compose_alert is on MessagingComposerClient, not LayerZeroEndpointV2Client
254
- let composer_client = MessagingComposerClient::new(env, &endpoint);
255
- composer_client.lz_compose_alert(
256
- &env.current_contract_address(),
257
- &compose_params.from,
258
- &compose_params.to,
259
- &compose_params.guid,
260
- &compose_params.index,
261
- &compose_params.gas_limit,
262
- &compose_params.value,
263
- &compose_params.message,
264
- &compose_params.extra_data,
265
- &reason,
266
- );
267
- }
268
- }
269
-
270
- // View Functions
271
-
272
- fn dst_config(env: &Env, dst_eid: u32) -> Option<DstConfig> {
273
- ExecutorData::dst_config(env, dst_eid)
274
- }
275
- }
276
-
277
- // ============================================================================
278
- // IMsgLibExecutor Implementation (for message libraries)
279
- // ============================================================================
280
-
281
- #[contractimpl]
282
- impl ILayerZeroExecutor for LzExecutor {
283
- #[only_role(_send_lib, "MSG_LIB")]
284
- #[when_not_paused()]
285
- fn assign_job(
286
- env: &Env,
287
- _send_lib: &Address,
288
- sender: &Address,
289
- dst_eid: u32,
290
- calldata_size: u32,
291
- options: &Bytes,
292
- ) -> FeeRecipient {
293
- let fee = Self::get_fee(env, _send_lib, sender, dst_eid, calldata_size, options);
294
- let recipient = WorkerCommon::deposit_address(env);
295
- FeeRecipient { amount: fee, address: recipient }
296
- }
297
-
298
- #[when_not_paused()]
299
- fn get_fee(
300
- env: &Env,
301
- _send_lib: &Address,
302
- sender: &Address,
303
- dst_eid: u32,
304
- calldata_size: u32,
305
- options: &Bytes,
306
- ) -> i128 {
307
- // Check ACL
308
- assert_with_error!(env, WorkerCommon::has_acl(env, sender), WorkerError::NotAllowed);
309
-
310
- // Get the dst_config
311
- let dst_config = Self::dst_config(env, dst_eid).unwrap_or(DstConfig {
312
- lz_receive_base_gas: 0,
313
- multiplier_bps: 0,
314
- floor_margin_usd: 0,
315
- native_cap: 0,
316
- lz_compose_base_gas: 0,
317
- });
318
-
319
- // Build FeeParams for the executor fee lib
320
- let fee_params = FeeParams {
321
- sender: sender.clone(),
322
- dst_eid,
323
- calldata_size,
324
- options: options.clone(),
325
- price_feed: WorkerCommon::price_feed(env),
326
- default_multiplier_bps: WorkerCommon::default_multiplier_bps(env),
327
- lz_receive_base_gas: dst_config.lz_receive_base_gas,
328
- lz_compose_base_gas: dst_config.lz_compose_base_gas,
329
- floor_margin_usd: dst_config.floor_margin_usd,
330
- native_cap: dst_config.native_cap,
331
- multiplier_bps: dst_config.multiplier_bps,
332
- };
333
-
334
- // Call the executor fee lib to get the fee
335
- let fee_lib = WorkerCommon::worker_fee_lib(env);
336
- let fee_lib_client = ExecutorFeeLibClient::new(env, &fee_lib);
337
- fee_lib_client.get_fee(&fee_lib, &fee_params)
338
- }
339
- }
340
-
341
- // ============================================================================
342
- // AccessControl Implementation (default from stellar-access)
343
- // ============================================================================
344
-
345
- #[default_impl]
346
- #[contractimpl]
347
- impl AccessControl for LzExecutor {}
@@ -1,51 +0,0 @@
1
- use endpoint_v2::Origin;
2
- use soroban_sdk::{contracttype, Address, Bytes, BytesN};
3
-
4
- #[contracttype]
5
- #[derive(Clone, Debug)]
6
- pub struct DstConfig {
7
- pub lz_receive_base_gas: u64,
8
- pub multiplier_bps: u32,
9
- pub floor_margin_usd: u128,
10
- pub native_cap: u128,
11
- pub lz_compose_base_gas: u64,
12
- }
13
-
14
- #[contracttype]
15
- #[derive(Clone, Debug)]
16
- pub struct SetDstConfigParam {
17
- pub dst_eid: u32,
18
- pub dst_config: DstConfig,
19
- }
20
-
21
- #[contracttype]
22
- #[derive(Clone, Debug)]
23
- pub struct ExecutionParams {
24
- pub receiver: Address,
25
- pub origin: Origin,
26
- pub guid: BytesN<32>,
27
- pub message: Bytes,
28
- pub extra_data: Bytes,
29
- pub value: i128,
30
- pub gas_limit: i128,
31
- }
32
-
33
- #[contracttype]
34
- #[derive(Clone, Debug)]
35
- pub struct NativeDropParams {
36
- pub receiver: Address,
37
- pub amount: i128,
38
- }
39
-
40
- #[contracttype]
41
- #[derive(Clone, Debug)]
42
- pub struct ComposeParams {
43
- pub from: Address,
44
- pub to: Address,
45
- pub guid: BytesN<32>,
46
- pub index: u32,
47
- pub message: Bytes,
48
- pub extra_data: Bytes,
49
- pub value: i128,
50
- pub gas_limit: i128,
51
- }
@@ -1,17 +0,0 @@
1
- use soroban_sdk::{symbol_short, Symbol};
2
-
3
- // ============================================================================
4
- // Role Constants (matching EVM Worker.sol)
5
- // ============================================================================
6
-
7
- /// MESSAGE_LIB_ROLE - Role for message libraries that can interact with the worker
8
- pub const MESSAGE_LIB_ROLE: Symbol = symbol_short!("MSG_LIB");
9
-
10
- /// ALLOWLIST - Role for addresses allowed to use the worker
11
- pub const ALLOWLIST: Symbol = symbol_short!("ALLOW");
12
-
13
- /// DENYLIST - Role for addresses denied from using the worker
14
- pub const DENYLIST: Symbol = symbol_short!("DENY");
15
-
16
- /// ADMIN_ROLE - Role for admins who can configure worker settings
17
- pub const ADMIN_ROLE: Symbol = symbol_short!("ADMIN");
@@ -1,6 +0,0 @@
1
- use common_macros::contract_error;
2
-
3
- #[contract_error]
4
- pub enum WorkerError {
5
- NotAllowed = 12000,
6
- }
@@ -1,34 +0,0 @@
1
- use soroban_sdk::{contractevent, Address, Bytes};
2
-
3
- // === Worker Events ===
4
- // Note: Role-related events (RoleGranted, RoleRevoked, etc.) are emitted by OpenZeppelin AccessControl
5
- #[contractevent(topics = ["SetDefaultMultiplierBps"])]
6
- #[derive(Clone, Debug, Eq, PartialEq)]
7
- pub struct SetDefaultMultiplierBps {
8
- pub multiplier_bps: u32,
9
- }
10
-
11
- #[contractevent(topics = ["SetDepositAddress"])]
12
- #[derive(Clone, Debug, Eq, PartialEq)]
13
- pub struct SetDepositAddress {
14
- pub deposit_address: Address,
15
- }
16
-
17
- #[contractevent(topics = ["SetPriceFeed"])]
18
- #[derive(Clone, Debug, Eq, PartialEq)]
19
- pub struct SetPriceFeed {
20
- pub price_feed: Address,
21
- }
22
-
23
- #[contractevent(topics = ["SetSupportedOptionTypes"])]
24
- #[derive(Clone, Debug, Eq, PartialEq)]
25
- pub struct SetSupportedOptionTypes {
26
- pub dst_eid: u32,
27
- pub option_types: Bytes,
28
- }
29
-
30
- #[contractevent(topics = ["SetWorkerFeeLib"])]
31
- #[derive(Clone, Debug, Eq, PartialEq)]
32
- pub struct SetWorkerFeeLib {
33
- pub fee_lib: Address,
34
- }
@@ -1,35 +0,0 @@
1
- use soroban_sdk::{contractclient, contracttype, Address, Bytes, Env};
2
-
3
- /// FeeParams - Parameters for standard fee calculation same with the Sui
4
- #[contracttype]
5
- #[derive(Clone, Debug)]
6
- pub struct FeeParams {
7
- // message params
8
- pub sender: Address,
9
- pub dst_eid: u32,
10
- pub calldata_size: u32,
11
- pub options: Bytes,
12
- // common configed params
13
- pub price_feed: Address,
14
- pub default_multiplier_bps: u32,
15
- // by dst_eid configed params
16
- pub lz_receive_base_gas: u64,
17
- pub lz_compose_base_gas: u64,
18
- pub floor_margin_usd: u128,
19
- pub native_cap: u128,
20
- pub multiplier_bps: u32,
21
- }
22
-
23
- /// IExecutorFeeLib - Interface for calculating executor fees
24
- /// This interface is called by the Executor contract to calculate fees
25
- /// It uses the PriceFeed interface to get price information
26
- #[contractclient(name = "ExecutorFeeLibClient")]
27
- pub trait IExecutorFeeLib {
28
- /// Calculate fee (view function, standard params)
29
- /// Called by get_fee in the Executor contract
30
- fn get_fee(env: &Env, fee_lib: &Address, params: &FeeParams) -> i128;
31
-
32
- /// Returns the current contract version.
33
- /// Because not allow return u8, use u32 instead.
34
- fn version(env: &Env) -> (u64, u32);
35
- }
@@ -1,40 +0,0 @@
1
- use soroban_sdk::{contractclient, contracttype, Address, Env};
2
-
3
- /// Struct to encapsulate the return values of estimate_fee_by_eid
4
- #[contracttype]
5
- #[derive(Clone, Debug)]
6
- pub struct EstimateFeeResult {
7
- pub fee: i128,
8
- pub price_ratio: u128,
9
- pub price_ratio_denominator: u128,
10
- pub native_price_usd: u128,
11
- }
12
-
13
- /// ILayerZeroPriceFeed - Interface for price feed contract
14
- /// This interface provides price information for fee calculation
15
- /// Called by ExecutorFeeLib to get pricing data
16
- #[contractclient(name = "LayerZeroPriceFeedClient")]
17
- pub trait ILayerZeroPriceFeed {
18
- /// Estimate fee with detailed breakdown by endpoint ID
19
- /// This is the main function called by ExecutorFeeLib
20
- /// @param dst_eid - Destination endpoint ID
21
- /// @param calldata_size - Size of the calldata in bytes
22
- /// @param gas - Gas amount needed for execution
23
- /// @return (fee, price_ratio, price_ratio_denominator, native_price_usd)
24
- fn estimate_fee_by_eid(
25
- env: &Env,
26
- fee_lib: &Address,
27
- dst_eid: u32,
28
- calldata_size: u64,
29
- gas: u128,
30
- ) -> EstimateFeeResult;
31
-
32
- /// Get the native token price in USD
33
- /// @return native_token_price_usd - The price of the native token in USD
34
- fn native_token_price_usd(env: &Env) -> u128;
35
-
36
- /// Set the native token price in USD
37
- /// @param price_updater - The address of the price updater
38
- /// @param native_token_price_usd - The new price of the native token in USD
39
- fn set_native_token_price_usd(env: &Env, price_updater: &Address, native_token_price_usd: u128);
40
- }
@@ -1,60 +0,0 @@
1
- use soroban_sdk::{contractclient, Address, Bytes, Env};
2
-
3
- /// IWorker - Base worker interface for managing fees, price feeds, and admin operations
4
- /// Uses OpenZeppelin AccessControl for role-based access management
5
- #[contractclient(name = "WorkerClient")]
6
- pub trait IWorker {
7
- // ========================================================================
8
- // Mutable Functions
9
- // ========================================================================
10
-
11
- /// Set the paused state of the worker (requires DEFAULT_ADMIN_ROLE)
12
- fn set_paused(env: &Env, paused: bool);
13
-
14
- /// Set the default multiplier in basis points (ADMIN_ROLE only)
15
- fn set_default_multiplier_bps(env: &Env, admin: &Address, multiplier_bps: u32);
16
-
17
- /// Set the deposit address where fees are collected (admin only)
18
- fn set_deposit_address(env: &Env, admin: &Address, deposit_address: &Address);
19
-
20
- /// Set the price feed address (admin only)
21
- fn set_price_feed(env: &Env, admin: &Address, price_feed: &Address);
22
-
23
- /// Set supported option types for a destination endpoint (ADMIN_ROLE only)
24
- fn set_supported_option_types(env: &Env, admin: &Address, eid: u32, option_types: Bytes);
25
-
26
- /// Set the worker fee library address (ADMIN_ROLE only)
27
- fn set_worker_fee_lib(env: &Env, admin: &Address, worker_fee_lib: &Address);
28
-
29
- // ========================================================================
30
- // View Functions
31
- // ========================================================================
32
-
33
- /// Check if the worker is paused
34
- fn paused(env: &Env) -> bool;
35
-
36
- /// Get the default multiplier in basis points
37
- fn default_multiplier_bps(env: &Env) -> u32;
38
-
39
- /// Get the deposit address
40
- fn deposit_address(env: &Env) -> Address;
41
-
42
- /// Get the current price feed address
43
- fn price_feed(env: &Env) -> Address;
44
-
45
- /// Get supported option types for a destination endpoint
46
- fn get_supported_option_types(env: &Env, eid: u32) -> Bytes;
47
-
48
- /// Get the worker fee library address
49
- fn worker_fee_lib(env: &Env) -> Address;
50
-
51
- /// Check if an address has ACL permission
52
- /// ACL logic (matching EVM Worker.sol):
53
- /// 1) if address has DENYLIST role -> deny
54
- /// 2) else if allowlist is empty (size == 0) OR address has ALLOWLIST role -> allow
55
- /// 3) else deny
56
- fn has_acl(env: &Env, sender: &Address) -> bool;
57
-
58
- /// Get the size of the allowlist (number of accounts with ALLOWLIST role)
59
- fn allowlist_size(env: &Env) -> u32;
60
- }
@@ -1,19 +0,0 @@
1
- #![no_std]
2
-
3
- mod interfaces;
4
- mod worker_common;
5
-
6
- pub mod constants;
7
- pub mod errors;
8
- pub mod events;
9
- pub mod storage;
10
-
11
- pub use constants::*;
12
- pub use errors::*;
13
- pub use events::*;
14
- pub use interfaces::*;
15
- pub use storage::*;
16
- pub use worker_common::*;
17
-
18
- // #[cfg(test)]
19
- // mod tests;
@@ -1,32 +0,0 @@
1
- use common_macros::storage;
2
- use soroban_sdk::{Address, Bytes};
3
- use utils::ttl::DefaultTtlConfigProvider;
4
-
5
- // ============================================================================
6
- // Worker Storage
7
- // ============================================================================
8
- // Note: Access control (roles) are managed by OpenZeppelin AccessControl module
9
- // We only keep worker-specific data here
10
-
11
- #[storage(DefaultTtlConfigProvider)]
12
- pub enum WorkerData {
13
- /// Address where fees are deposited
14
- #[instance(Address)]
15
- DepositAddress,
16
-
17
- /// Price feed address for fee calculation
18
- #[instance(Address)]
19
- PriceFeed,
20
-
21
- /// Worker fee library address
22
- #[instance(Address)]
23
- WorkerFeeLib,
24
-
25
- /// Default multiplier in basis points for fee calculation
26
- #[instance(u32)]
27
- DefaultMultiplierBps,
28
-
29
- /// Supported option types for a destination EID
30
- #[persistent(Bytes)]
31
- SupportedOptionTypes { eid: u32 },
32
- }