@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
@@ -7,11 +7,8 @@ use crate::{
7
7
  storage::WorkerStorage,
8
8
  };
9
9
  use common_macros::contract_trait;
10
- use soroban_sdk::{assert_with_error, panic_with_error, Address, Bytes, Env, Vec};
11
- use utils::{
12
- auth::{enforce_auth, require_auth, Auth},
13
- option_ext::OptionExt,
14
- };
10
+ use soroban_sdk::{assert_with_error, panic_with_error, Address, Env, Vec};
11
+ use utils::auth::{self, Auth};
15
12
 
16
13
  /// Worker interface providing common functionality for LayerZero workers.
17
14
  ///
@@ -31,8 +28,8 @@ pub trait Worker: Auth {
31
28
  ///
32
29
  /// # Arguments
33
30
  /// * `paused` - `true` to pause, `false` to unpause
34
- fn set_paused(env: &Env, paused: bool) {
35
- let authorizer = enforce_auth::<Self>(env);
31
+ fn set_paused(env: &soroban_sdk::Env, paused: bool) {
32
+ let authorizer = auth::enforce_auth::<Self>(env);
36
33
  assert_with_error!(env, Self::paused(env) != paused, WorkerError::PauseStatusUnchanged);
37
34
 
38
35
  WorkerStorage::set_paused(env, &paused);
@@ -43,6 +40,19 @@ pub trait Worker: Auth {
43
40
  }
44
41
  }
45
42
 
43
+ /// Sets admin status for an address.
44
+ ///
45
+ /// Admins can configure worker settings like fee multipliers, deposit addresses,
46
+ /// and supported option types.
47
+ ///
48
+ /// # Arguments
49
+ /// * `admin` - The address to set admin status for
50
+ /// * `active` - `true` to add admin, `false` to remove
51
+ fn set_admin(env: &soroban_sdk::Env, admin: &soroban_sdk::Address, active: bool) {
52
+ auth::require_auth::<Self>(env);
53
+ set_admin_no_auth::<Self>(env, admin, active);
54
+ }
55
+
46
56
  /// Sets whether a message library is supported by this worker.
47
57
  ///
48
58
  /// Message libraries (e.g., ULN302) call workers to assign jobs. Only supported
@@ -51,8 +61,8 @@ pub trait Worker: Auth {
51
61
  /// # Arguments
52
62
  /// * `message_lib` - The message library contract address
53
63
  /// * `supported` - `true` to add support, `false` to remove support
54
- fn set_supported_message_lib(env: &Env, message_lib: &Address, supported: bool) {
55
- require_auth::<Self>(env);
64
+ fn set_supported_message_lib(env: &soroban_sdk::Env, message_lib: &soroban_sdk::Address, supported: bool) {
65
+ auth::require_auth::<Self>(env);
56
66
  set_message_lib_no_auth::<Self>(env, message_lib, supported);
57
67
  }
58
68
 
@@ -65,8 +75,8 @@ pub trait Worker: Auth {
65
75
  /// # Arguments
66
76
  /// * `oapp` - The OApp contract address
67
77
  /// * `allowed` - `true` to add to allowlist, `false` to remove
68
- fn set_allowlist(env: &Env, oapp: &Address, allowed: bool) {
69
- require_auth::<Self>(env);
78
+ fn set_allowlist(env: &soroban_sdk::Env, oapp: &soroban_sdk::Address, allowed: bool) {
79
+ auth::require_auth::<Self>(env);
70
80
 
71
81
  let is_on_list = Self::is_on_allowlist(env, oapp);
72
82
  if allowed {
@@ -95,8 +105,8 @@ pub trait Worker: Auth {
95
105
  /// # Arguments
96
106
  /// * `oapp` - The OApp contract address
97
107
  /// * `denied` - `true` to add to denylist, `false` to remove
98
- fn set_denylist(env: &Env, oapp: &Address, denied: bool) {
99
- require_auth::<Self>(env);
108
+ fn set_denylist(env: &soroban_sdk::Env, oapp: &soroban_sdk::Address, denied: bool) {
109
+ auth::require_auth::<Self>(env);
100
110
  let is_on_list = Self::is_on_denylist(env, oapp);
101
111
 
102
112
  if denied {
@@ -123,7 +133,7 @@ pub trait Worker: Auth {
123
133
  /// # Arguments
124
134
  /// * `admin` - Admin address (must provide authorization)
125
135
  /// * `multiplier_bps` - Multiplier in basis points (10000 = 1x, 12000 = 1.2x)
126
- fn set_default_multiplier_bps(env: &Env, admin: &Address, multiplier_bps: u32) {
136
+ fn set_default_multiplier_bps(env: &soroban_sdk::Env, admin: &soroban_sdk::Address, multiplier_bps: u32) {
127
137
  require_admin_auth::<Self>(env, admin);
128
138
  set_default_multiplier_bps_no_auth(env, multiplier_bps);
129
139
  }
@@ -135,7 +145,11 @@ pub trait Worker: Auth {
135
145
  /// # Arguments
136
146
  /// * `admin` - Admin address (must provide authorization)
137
147
  /// * `deposit_address` - Address to receive collected fees
138
- fn set_deposit_address(env: &Env, admin: &Address, deposit_address: &Address) {
148
+ fn set_deposit_address(
149
+ env: &soroban_sdk::Env,
150
+ admin: &soroban_sdk::Address,
151
+ deposit_address: &soroban_sdk::Address,
152
+ ) {
139
153
  require_admin_auth::<Self>(env, admin);
140
154
  WorkerStorage::set_deposit_address(env, deposit_address);
141
155
  SetDepositAddress { deposit_address: deposit_address.clone() }.publish(env);
@@ -146,11 +160,16 @@ pub trait Worker: Auth {
146
160
  /// # Arguments
147
161
  /// * `admin` - Admin address (must provide authorization)
148
162
  /// * `eid` - Destination endpoint ID (chain identifier)
149
- /// * `option_types` - Encoded supported option types
150
- fn set_supported_option_types(env: &Env, admin: &Address, eid: u32, option_types: Bytes) {
163
+ /// * `option_types` - Supported option types. Each byte represents an option type.
164
+ fn set_supported_option_types(
165
+ env: &soroban_sdk::Env,
166
+ admin: &soroban_sdk::Address,
167
+ eid: u32,
168
+ option_types: &soroban_sdk::Bytes,
169
+ ) {
151
170
  require_admin_auth::<Self>(env, admin);
152
- WorkerStorage::set_supported_option_types(env, eid, &option_types);
153
- SetSupportedOptionTypes { dst_eid: eid, option_types }.publish(env);
171
+ WorkerStorage::set_supported_option_types(env, eid, option_types);
172
+ SetSupportedOptionTypes { dst_eid: eid, option_types: option_types.clone() }.publish(env);
154
173
  }
155
174
 
156
175
  /// Sets the worker fee library contract address.
@@ -160,7 +179,7 @@ pub trait Worker: Auth {
160
179
  /// # Arguments
161
180
  /// * `admin` - Admin address (must provide authorization)
162
181
  /// * `worker_fee_lib` - Fee library contract address implementing `IExecutorFeeLib`
163
- fn set_worker_fee_lib(env: &Env, admin: &Address, worker_fee_lib: &Address) {
182
+ fn set_worker_fee_lib(env: &soroban_sdk::Env, admin: &soroban_sdk::Address, worker_fee_lib: &soroban_sdk::Address) {
164
183
  require_admin_auth::<Self>(env, admin);
165
184
  WorkerStorage::set_worker_fee_lib(env, worker_fee_lib);
166
185
  SetWorkerFeeLib { fee_lib: worker_fee_lib.clone() }.publish(env);
@@ -174,7 +193,7 @@ pub trait Worker: Auth {
174
193
  /// # Arguments
175
194
  /// * `admin` - Admin address (must provide authorization)
176
195
  /// * `price_feed` - Price feed contract address implementing `ILayerZeroPriceFeed`
177
- fn set_price_feed(env: &Env, admin: &Address, price_feed: &Address) {
196
+ fn set_price_feed(env: &soroban_sdk::Env, admin: &soroban_sdk::Address, price_feed: &soroban_sdk::Address) {
178
197
  require_admin_auth::<Self>(env, admin);
179
198
  WorkerStorage::set_price_feed(env, price_feed);
180
199
  SetPriceFeed { price_feed: price_feed.clone() }.publish(env);
@@ -184,29 +203,29 @@ pub trait Worker: Auth {
184
203
  // View Functions
185
204
  // ========================================================================
186
205
 
206
+ /// Returns whether the worker is paused.
207
+ fn paused(env: &soroban_sdk::Env) -> bool {
208
+ WorkerStorage::paused(env)
209
+ }
210
+
187
211
  /// Returns whether an address is an admin.
188
212
  ///
189
213
  /// # Arguments
190
214
  /// * `admin` - The address to check
191
- fn is_admin(env: &Env, admin: &Address) -> bool {
215
+ fn is_admin(env: &soroban_sdk::Env, admin: &soroban_sdk::Address) -> bool {
192
216
  Self::admins(env).contains(admin)
193
217
  }
194
218
 
195
219
  /// Returns all admin addresses.
196
- fn admins(env: &Env) -> Vec<Address> {
197
- WorkerStorage::admins(env).unwrap_or(Vec::new(env))
198
- }
199
-
200
- /// Returns whether the worker is paused.
201
- fn paused(env: &Env) -> bool {
202
- WorkerStorage::paused(env)
220
+ fn admins(env: &soroban_sdk::Env) -> soroban_sdk::Vec<soroban_sdk::Address> {
221
+ WorkerStorage::admins(env)
203
222
  }
204
223
 
205
224
  /// Returns whether a message library is supported.
206
225
  ///
207
226
  /// # Arguments
208
227
  /// * `message_lib` - Message library contract address
209
- fn is_supported_message_lib(env: &Env, message_lib: &Address) -> bool {
228
+ fn is_supported_message_lib(env: &soroban_sdk::Env, message_lib: &soroban_sdk::Address) -> bool {
210
229
  Self::message_libs(env).contains(message_lib)
211
230
  }
212
231
 
@@ -214,23 +233,28 @@ pub trait Worker: Auth {
214
233
  ///
215
234
  /// # Returns
216
235
  /// Vector of supported message library contract addresses.
217
- fn message_libs(env: &Env) -> Vec<Address> {
218
- WorkerStorage::message_libs(env).unwrap_or(Vec::new(env))
236
+ fn message_libs(env: &soroban_sdk::Env) -> soroban_sdk::Vec<soroban_sdk::Address> {
237
+ WorkerStorage::message_libs(env)
219
238
  }
220
239
 
221
240
  /// Returns whether an OApp is on the allowlist.
222
241
  ///
223
242
  /// # Arguments
224
243
  /// * `oapp` - OApp contract address
225
- fn is_on_allowlist(env: &Env, oapp: &Address) -> bool {
244
+ fn is_on_allowlist(env: &soroban_sdk::Env, oapp: &soroban_sdk::Address) -> bool {
226
245
  WorkerStorage::has_allowlist(env, oapp)
227
246
  }
228
247
 
248
+ /// Returns the number of addresses on the allowlist.
249
+ fn allowlist_size(env: &soroban_sdk::Env) -> u32 {
250
+ WorkerStorage::allowlist_size(env)
251
+ }
252
+
229
253
  /// Returns whether an OApp is on the denylist.
230
254
  ///
231
255
  /// # Arguments
232
256
  /// * `oapp` - OApp contract address
233
- fn is_on_denylist(env: &Env, oapp: &Address) -> bool {
257
+ fn is_on_denylist(env: &soroban_sdk::Env, oapp: &soroban_sdk::Address) -> bool {
234
258
  WorkerStorage::has_denylist(env, oapp)
235
259
  }
236
260
 
@@ -242,42 +266,37 @@ pub trait Worker: Auth {
242
266
  /// 3. Otherwise → denied
243
267
  ///
244
268
  /// # Arguments
245
- /// * `sender` - OApp contract address to check
246
- fn has_acl(env: &Env, sender: &Address) -> bool {
247
- !Self::is_on_denylist(env, sender) && (Self::allowlist_size(env) == 0 || Self::is_on_allowlist(env, sender))
248
- }
249
-
250
- /// Returns the number of addresses on the allowlist.
251
- fn allowlist_size(env: &Env) -> u32 {
252
- WorkerStorage::allowlist_size(env)
269
+ /// * `oapp` - OApp contract address to check
270
+ fn has_acl(env: &soroban_sdk::Env, oapp: &soroban_sdk::Address) -> bool {
271
+ !Self::is_on_denylist(env, oapp) && (Self::allowlist_size(env) == 0 || Self::is_on_allowlist(env, oapp))
253
272
  }
254
273
 
255
274
  /// Returns the default fee multiplier in basis points.
256
- fn default_multiplier_bps(env: &Env) -> u32 {
257
- WorkerStorage::default_multiplier_bps(env).unwrap_or(0)
275
+ fn default_multiplier_bps(env: &soroban_sdk::Env) -> u32 {
276
+ WorkerStorage::default_multiplier_bps(env)
258
277
  }
259
278
 
260
279
  /// Returns the deposit address where fees are collected.
261
- fn deposit_address(env: &Env) -> Address {
262
- WorkerStorage::deposit_address(env).unwrap_or_panic(env, WorkerError::DepositAddressNotSet)
263
- }
264
-
265
- /// Returns the price feed contract address.
266
- fn price_feed(env: &Env) -> Address {
267
- WorkerStorage::price_feed(env).unwrap_or_panic(env, WorkerError::PriceFeedNotSet)
280
+ fn deposit_address(env: &soroban_sdk::Env) -> Option<soroban_sdk::Address> {
281
+ WorkerStorage::deposit_address(env)
268
282
  }
269
283
 
270
284
  /// Returns supported option types for a destination endpoint.
271
285
  ///
272
286
  /// # Arguments
273
287
  /// * `eid` - Destination endpoint ID (chain identifier)
274
- fn get_supported_option_types(env: &Env, eid: u32) -> Option<Bytes> {
288
+ fn get_supported_option_types(env: &soroban_sdk::Env, eid: u32) -> Option<soroban_sdk::Bytes> {
275
289
  WorkerStorage::supported_option_types(env, eid)
276
290
  }
277
291
 
278
292
  /// Returns the worker fee library contract address.
279
- fn worker_fee_lib(env: &Env) -> Address {
280
- WorkerStorage::worker_fee_lib(env).unwrap_or_panic(env, WorkerError::WorkerFeeLibNotSet)
293
+ fn worker_fee_lib(env: &soroban_sdk::Env) -> Option<soroban_sdk::Address> {
294
+ WorkerStorage::worker_fee_lib(env)
295
+ }
296
+
297
+ /// Returns the price feed contract address.
298
+ fn price_feed(env: &soroban_sdk::Env) -> Option<soroban_sdk::Address> {
299
+ WorkerStorage::price_feed(env)
281
300
  }
282
301
  }
283
302
 
@@ -305,16 +324,8 @@ pub fn init_worker<T: Worker>(
305
324
  worker_fee_lib: &Address,
306
325
  deposit_address: &Address,
307
326
  ) {
308
- assert_with_error!(env, T::admins(env).is_empty(), WorkerError::ReInitialize);
309
- assert_with_error!(env, !admins.is_empty(), WorkerError::NoAdminsProvided);
310
-
311
- for admin in admins {
312
- set_admin_no_auth::<T>(env, &admin, true);
313
- }
314
-
315
- for lib in message_libs {
316
- set_message_lib_no_auth::<T>(env, &lib, true);
317
- }
327
+ admins.iter().for_each(|admin| set_admin_no_auth::<T>(env, &admin, true));
328
+ message_libs.iter().for_each(|lib| set_message_lib_no_auth::<T>(env, &lib, true));
318
329
 
319
330
  set_price_feed_no_auth(env, price_feed);
320
331
  set_default_multiplier_bps_no_auth(env, default_multiplier_bps);
@@ -373,16 +384,6 @@ pub fn assert_supported_message_lib<T: Worker>(env: &Env, message_lib: &Address)
373
384
  // Admin Setter Functions with authentication
374
385
  // ============================================================================================
375
386
 
376
- /// Sets admin status for an address by authorizer (owner/multisig).
377
- ///
378
- /// # Arguments
379
- /// * `admin` - The address to set admin status for
380
- /// * `active` - `true` to add admin, `false` to remove
381
- pub fn set_admin_by_owner<T: Worker>(env: &Env, admin: &Address, active: bool) {
382
- require_auth::<T>(env);
383
- set_admin_no_auth::<T>(env, admin, active);
384
- }
385
-
386
387
  /// Sets admin status for an address by admin.
387
388
  ///
388
389
  /// # Arguments
@@ -414,7 +415,6 @@ fn set_admin_no_auth<T: Worker>(env: &Env, admin: &Address, active: bool) {
414
415
  admins.push_back(admin.clone());
415
416
  } else {
416
417
  // Remove admin - ensure present
417
- assert_with_error!(env, admins.len() > 1, WorkerError::AttemptingToRemoveOnlyAdmin);
418
418
  let Some(index) = admins.first_index_of(admin) else {
419
419
  panic_with_error!(env, WorkerError::AdminNotFound);
420
420
  };
@@ -0,0 +1,55 @@
1
+ # Stellar LayerZero Protocol - Error Code Specification
2
+
3
+ This document defines the error code allocation strategy for the Stellar LayerZero contracts.
4
+
5
+ ## Purpose
6
+
7
+ Each library has a unique error code range to:
8
+
9
+ - **Prevent collisions**: Avoid error code conflicts between different libraries
10
+ - **Enable traceability**: Quickly identify which library an error originated from based on its code
11
+ - **Simplify debugging**: Error codes are globally unique, making it easier to track and diagnose issues
12
+
13
+ ## Allocation Rules
14
+
15
+ - **Contract-specific errors**: Each contract uses auto-incrementing error codes starting from 1. These are local to the contract and do not need global uniqueness since the contract address provides context.
16
+ - **Library errors**: Libraries that are shared across multiple contracts use reserved ranges (1000+) to ensure global uniqueness.
17
+ - **Library allocation**: Each library is allocated a 100-unit block (e.g., 1000-1099, 1100-1199). Total errors in one library should not exceed 100.
18
+ - **Sub-range allocation**: Each error type within a library is allocated a 10-unit block. If an error type exceeds 10 errors, it extends into the next block but the following error type should start at the next 10-unit boundary.
19
+ - **Auto-increment**: Within each error enum, values auto-increment from the starting value.
20
+
21
+ ## Error Code Ranges
22
+
23
+ ### Contract-Specific Errors (1-999)
24
+
25
+ Contract-specific errors auto-increment from 1 and are scoped to each contract.
26
+
27
+ | Contract | Location |
28
+ | ----------------- | ----------------------------------------------- |
29
+ | EndpointV2 | `endpoint-v2/src/errors.rs` |
30
+ | ULN302 | `message-libs/uln-302/src/errors.rs` |
31
+ | Treasury | `message-libs/treasury/src/errors.rs` |
32
+ | SimpleMessageLib | `message-libs/simple-message-lib/src/errors.rs` |
33
+ | DVN | `workers/dvn/src/errors.rs` |
34
+ | Executor | `workers/executor/src/errors.rs` |
35
+ | DVN Fee Lib | `workers/dvn-fee-lib/src/errors.rs` |
36
+ | Executor Fee Lib | `workers/executor-fee-lib/src/errors.rs` |
37
+ | Price Feed | `workers/price-feed/src/errors.rs` |
38
+ | LayerZero Views | `layerzero-views/src/errors.rs` |
39
+ | Counter (example) | `oapps/counter/src/errors.rs` |
40
+
41
+ ### Library Errors (1000+)
42
+
43
+ Libraries shared across contracts use reserved ranges for global uniqueness.
44
+
45
+ | Range | Category | Library | Location |
46
+ | --------- | ------------ | ------------------ | ----------------------------------------------- |
47
+ | 1000-1099 | Protocol Lib | utils | `utils/src/errors.rs` |
48
+ | 1100-1199 | Protocol Lib | message-lib-common | `message-libs/message-lib-common/src/errors.rs` |
49
+ | 1200-1299 | Protocol Lib | worker | `workers/worker/src/errors.rs` |
50
+ | 1300-1999 | Protocol Lib | (reserved) | Future protocol libs |
51
+ | 2000-2099 | OApp Lib | oapp | `oapps/oapp/src/errors.rs` |
52
+ | 2100-2999 | OApp Lib | (reserved) | Future OApp libs |
53
+ | 3000-3099 | OFT Lib | oft-core | `oapps/oft-core/src/errors.rs` |
54
+ | 3100-3199 | OFT Lib | oft (extensions) | `oapps/oft/src/extensions/` |
55
+ | 3200-3999 | OFT Lib | (reserved) | Future OFT libs |