@layerzerolabs/protocol-stellar-v2 0.2.8

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 (265) hide show
  1. package/.turbo/turbo-build.log +727 -0
  2. package/.turbo/turbo-lint.log +158 -0
  3. package/.turbo/turbo-test.log +796 -0
  4. package/Cargo.lock +2237 -0
  5. package/Cargo.toml +63 -0
  6. package/clippy.toml +7 -0
  7. package/contracts/common-macros/Cargo.toml +20 -0
  8. package/contracts/common-macros/src/error.rs +53 -0
  9. package/contracts/common-macros/src/event.rs +16 -0
  10. package/contracts/common-macros/src/lib.rs +255 -0
  11. package/contracts/common-macros/src/ownable.rs +63 -0
  12. package/contracts/common-macros/src/snapshots/common_macros__tests__tests__snapshot_generated_storage_code.snap +310 -0
  13. package/contracts/common-macros/src/storage.rs +439 -0
  14. package/contracts/common-macros/src/tests.rs +287 -0
  15. package/contracts/common-macros/src/ttl_configurable.rs +60 -0
  16. package/contracts/endpoint-v2/ARCHITECTURE.md +233 -0
  17. package/contracts/endpoint-v2/Cargo.toml +30 -0
  18. package/contracts/endpoint-v2/src/constants.rs +52 -0
  19. package/contracts/endpoint-v2/src/endpoint_v2.rs +305 -0
  20. package/contracts/endpoint-v2/src/errors.rs +29 -0
  21. package/contracts/endpoint-v2/src/events.rs +207 -0
  22. package/contracts/endpoint-v2/src/interfaces/layerzero_composer.rs +26 -0
  23. package/contracts/endpoint-v2/src/interfaces/layerzero_endpoint_v2.rs +170 -0
  24. package/contracts/endpoint-v2/src/interfaces/layerzero_receiver.rs +43 -0
  25. package/contracts/endpoint-v2/src/interfaces/message_lib.rs +62 -0
  26. package/contracts/endpoint-v2/src/interfaces/message_lib_manager.rs +220 -0
  27. package/contracts/endpoint-v2/src/interfaces/messaging_channel.rs +121 -0
  28. package/contracts/endpoint-v2/src/interfaces/messaging_composer.rs +63 -0
  29. package/contracts/endpoint-v2/src/interfaces/mod.rs +17 -0
  30. package/contracts/endpoint-v2/src/interfaces/send_lib.rs +70 -0
  31. package/contracts/endpoint-v2/src/lib.rs +22 -0
  32. package/contracts/endpoint-v2/src/message_lib_manager.rs +315 -0
  33. package/contracts/endpoint-v2/src/messaging_channel.rs +218 -0
  34. package/contracts/endpoint-v2/src/messaging_composer.rs +76 -0
  35. package/contracts/endpoint-v2/src/storage.rs +78 -0
  36. package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +131 -0
  37. package/contracts/endpoint-v2/src/tests/endpoint_v2/clear.rs +237 -0
  38. package/contracts/endpoint-v2/src/tests/endpoint_v2/delegate.rs +42 -0
  39. package/contracts/endpoint-v2/src/tests/endpoint_v2/initializable.rs +76 -0
  40. package/contracts/endpoint-v2/src/tests/endpoint_v2/lz_receive_alert.rs +211 -0
  41. package/contracts/endpoint-v2/src/tests/endpoint_v2/mod.rs +18 -0
  42. package/contracts/endpoint-v2/src/tests/endpoint_v2/native_token.rs +10 -0
  43. package/contracts/endpoint-v2/src/tests/endpoint_v2/owner.rs +10 -0
  44. package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +424 -0
  45. package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +144 -0
  46. package/contracts/endpoint-v2/src/tests/endpoint_v2/recover_token.rs +72 -0
  47. package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +29 -0
  48. package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +513 -0
  49. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_delegate.rs +43 -0
  50. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +27 -0
  51. package/contracts/endpoint-v2/src/tests/endpoint_v2/transfer_ownership.rs +30 -0
  52. package/contracts/endpoint-v2/src/tests/endpoint_v2/ttl_config.rs +202 -0
  53. package/contracts/endpoint-v2/src/tests/endpoint_v2/verifiable.rs +59 -0
  54. package/contracts/endpoint-v2/src/tests/endpoint_v2/verify.rs +172 -0
  55. package/contracts/endpoint-v2/src/tests/endpoint_v2/zro.rs +23 -0
  56. package/contracts/endpoint-v2/src/tests/message_lib_manager/mod.rs +10 -0
  57. package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +131 -0
  58. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +35 -0
  59. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +28 -0
  60. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_config.rs +79 -0
  61. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs +246 -0
  62. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_library.rs +285 -0
  63. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_send_library.rs +180 -0
  64. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library.rs +405 -0
  65. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library_timeout.rs +80 -0
  66. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_send_library.rs +131 -0
  67. package/contracts/endpoint-v2/src/tests/messaging_channel/burn.rs +358 -0
  68. package/contracts/endpoint-v2/src/tests/messaging_channel/clear.rs +316 -0
  69. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_nonce.rs +288 -0
  70. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_payload_hash.rs +316 -0
  71. package/contracts/endpoint-v2/src/tests/messaging_channel/internal.rs +388 -0
  72. package/contracts/endpoint-v2/src/tests/messaging_channel/lazy_inbound_nonce.rs +307 -0
  73. package/contracts/endpoint-v2/src/tests/messaging_channel/mod.rs +10 -0
  74. package/contracts/endpoint-v2/src/tests/messaging_channel/next_guid.rs +239 -0
  75. package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +324 -0
  76. package/contracts/endpoint-v2/src/tests/messaging_channel/outbound_nonce.rs +242 -0
  77. package/contracts/endpoint-v2/src/tests/messaging_channel/skip.rs +232 -0
  78. package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +212 -0
  79. package/contracts/endpoint-v2/src/tests/messaging_composer/compose_queue.rs +213 -0
  80. package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +269 -0
  81. package/contracts/endpoint-v2/src/tests/messaging_composer/mod.rs +4 -0
  82. package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +173 -0
  83. package/contracts/endpoint-v2/src/tests/mock.rs +132 -0
  84. package/contracts/endpoint-v2/src/tests/mod.rs +12 -0
  85. package/contracts/endpoint-v2/src/tests/util/build_payload.rs +126 -0
  86. package/contracts/endpoint-v2/src/tests/util/compute_guid.rs +82 -0
  87. package/contracts/endpoint-v2/src/tests/util/keccak256.rs +115 -0
  88. package/contracts/endpoint-v2/src/tests/util/mod.rs +3 -0
  89. package/contracts/endpoint-v2/src/util.rs +52 -0
  90. package/contracts/message-libs/Cargo.toml +12 -0
  91. package/contracts/message-libs/block-message-lib/Cargo.toml +19 -0
  92. package/contracts/message-libs/block-message-lib/src/lib.rs +70 -0
  93. package/contracts/message-libs/lib.rs +2 -0
  94. package/contracts/message-libs/message-lib-common/Cargo.toml +24 -0
  95. package/contracts/message-libs/message-lib-common/src/errors.rs +20 -0
  96. package/contracts/message-libs/message-lib-common/src/interfaces/dvn.rs +55 -0
  97. package/contracts/message-libs/message-lib-common/src/interfaces/executor.rs +46 -0
  98. package/contracts/message-libs/message-lib-common/src/interfaces/mod.rs +7 -0
  99. package/contracts/message-libs/message-lib-common/src/interfaces/treasury.rs +17 -0
  100. package/contracts/message-libs/message-lib-common/src/lib.rs +14 -0
  101. package/contracts/message-libs/message-lib-common/src/packet_codec_v1.rs +99 -0
  102. package/contracts/message-libs/message-lib-common/src/testing_utils.rs +27 -0
  103. package/contracts/message-libs/message-lib-common/src/tests/mod.rs +2 -0
  104. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1.rs +162 -0
  105. package/contracts/message-libs/message-lib-common/src/tests/worker_options.rs +319 -0
  106. package/contracts/message-libs/message-lib-common/src/worker_options.rs +190 -0
  107. package/contracts/message-libs/simple-message-lib/Cargo.toml +26 -0
  108. package/contracts/message-libs/simple-message-lib/src/errors.rs +11 -0
  109. package/contracts/message-libs/simple-message-lib/src/lib.rs +14 -0
  110. package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +136 -0
  111. package/contracts/message-libs/simple-message-lib/src/storage.rs +27 -0
  112. package/contracts/message-libs/simple-message-lib/src/test.rs +280 -0
  113. package/contracts/message-libs/treasury/Cargo.toml +27 -0
  114. package/contracts/message-libs/treasury/src/errors.rs +10 -0
  115. package/contracts/message-libs/treasury/src/events.rs +28 -0
  116. package/contracts/message-libs/treasury/src/interfaces/mod.rs +3 -0
  117. package/contracts/message-libs/treasury/src/interfaces/zro_fee_lib.rs +20 -0
  118. package/contracts/message-libs/treasury/src/lib.rs +20 -0
  119. package/contracts/message-libs/treasury/src/storage.rs +18 -0
  120. package/contracts/message-libs/treasury/src/tests/mod.rs +2 -0
  121. package/contracts/message-libs/treasury/src/tests/setup.rs +112 -0
  122. package/contracts/message-libs/treasury/src/tests/treasury_tests.rs +562 -0
  123. package/contracts/message-libs/treasury/src/treasury.rs +140 -0
  124. package/contracts/message-libs/uln-302/Cargo.toml +28 -0
  125. package/contracts/message-libs/uln-302/src/config_validation.rs +173 -0
  126. package/contracts/message-libs/uln-302/src/errors.rs +29 -0
  127. package/contracts/message-libs/uln-302/src/events.rs +72 -0
  128. package/contracts/message-libs/uln-302/src/interfaces/mod.rs +5 -0
  129. package/contracts/message-libs/uln-302/src/interfaces/receive.rs +82 -0
  130. package/contracts/message-libs/uln-302/src/interfaces/send.rs +159 -0
  131. package/contracts/message-libs/uln-302/src/lib.rs +20 -0
  132. package/contracts/message-libs/uln-302/src/receive.rs +199 -0
  133. package/contracts/message-libs/uln-302/src/send.rs +349 -0
  134. package/contracts/message-libs/uln-302/src/storage.rs +47 -0
  135. package/contracts/message-libs/uln-302/src/tests/config/mod.rs +2 -0
  136. package/contracts/message-libs/uln-302/src/tests/config/oapp_uln_config.rs +291 -0
  137. package/contracts/message-libs/uln-302/src/tests/config/uln_config.rs +163 -0
  138. package/contracts/message-libs/uln-302/src/tests/mod.rs +7 -0
  139. package/contracts/message-libs/uln-302/src/tests/receive_uln302/commit_verification.rs +183 -0
  140. package/contracts/message-libs/uln-302/src/tests/receive_uln302/confirmations.rs +128 -0
  141. package/contracts/message-libs/uln-302/src/tests/receive_uln302/effective_receive_uln_config.rs +104 -0
  142. package/contracts/message-libs/uln-302/src/tests/receive_uln302/mod.rs +66 -0
  143. package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs +79 -0
  144. package/contracts/message-libs/uln-302/src/tests/receive_uln302/verifiable.rs +463 -0
  145. package/contracts/message-libs/uln-302/src/tests/receive_uln302/verify.rs +173 -0
  146. package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_executor_config.rs +132 -0
  147. package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_send_uln_config.rs +117 -0
  148. package/contracts/message-libs/uln-302/src/tests/send_uln302/mod.rs +6 -0
  149. package/contracts/message-libs/uln-302/src/tests/send_uln302/quote.rs +586 -0
  150. package/contracts/message-libs/uln-302/src/tests/send_uln302/send.rs +834 -0
  151. package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_executor_configs.rs +95 -0
  152. package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_send_uln_configs.rs +80 -0
  153. package/contracts/message-libs/uln-302/src/tests/setup.rs +268 -0
  154. package/contracts/message-libs/uln-302/src/tests/testing_utils.rs +47 -0
  155. package/contracts/message-libs/uln-302/src/tests/uln302/get_app_receive_uln_config.rs +51 -0
  156. package/contracts/message-libs/uln-302/src/tests/uln302/get_app_send_uln_config.rs +51 -0
  157. package/contracts/message-libs/uln-302/src/tests/uln302/get_oapp_executor_config.rs +48 -0
  158. package/contracts/message-libs/uln-302/src/tests/uln302/mod.rs +4 -0
  159. package/contracts/message-libs/uln-302/src/tests/uln302/set_config.rs +998 -0
  160. package/contracts/message-libs/uln-302/src/uln302.rs +117 -0
  161. package/contracts/oapp-macros/Cargo.toml +21 -0
  162. package/contracts/oapp-macros/src/lib.rs +408 -0
  163. package/contracts/oapp-macros/src/oapp_core.rs +49 -0
  164. package/contracts/oapp-macros/src/oapp_full.rs +15 -0
  165. package/contracts/oapp-macros/src/oapp_options_type3.rs +46 -0
  166. package/contracts/oapp-macros/src/oapp_receiver.rs +67 -0
  167. package/contracts/oapp-macros/src/oapp_sender.rs +23 -0
  168. package/contracts/oapp-macros/src/util.rs +103 -0
  169. package/contracts/oapp-macros/tests/test_macros.rs +522 -0
  170. package/contracts/oapps/Cargo.toml +12 -0
  171. package/contracts/oapps/counter/Cargo.toml +24 -0
  172. package/contracts/oapps/counter/integration_tests/mod.rs +3 -0
  173. package/contracts/oapps/counter/integration_tests/setup.rs +201 -0
  174. package/contracts/oapps/counter/integration_tests/test_with_sml.rs +166 -0
  175. package/contracts/oapps/counter/integration_tests/utils.rs +144 -0
  176. package/contracts/oapps/counter/src/codec.rs +63 -0
  177. package/contracts/oapps/counter/src/counter.rs +235 -0
  178. package/contracts/oapps/counter/src/errors.rs +9 -0
  179. package/contracts/oapps/counter/src/lib.rs +16 -0
  180. package/contracts/oapps/counter/src/options.rs +30 -0
  181. package/contracts/oapps/counter/src/storage.rs +33 -0
  182. package/contracts/oapps/counter/src/tests/mod.rs +37 -0
  183. package/contracts/oapps/counter/src/tests/test_codec.rs +64 -0
  184. package/contracts/oapps/counter/src/tests/test_counter.rs +390 -0
  185. package/contracts/oapps/counter/src/u256_ext.rs +21 -0
  186. package/contracts/oapps/lib.rs +2 -0
  187. package/contracts/oapps/oapp/Cargo.toml +21 -0
  188. package/contracts/oapps/oapp/src/errors.rs +9 -0
  189. package/contracts/oapps/oapp/src/lib.rs +10 -0
  190. package/contracts/oapps/oapp/src/oapp_core.rs +92 -0
  191. package/contracts/oapps/oapp/src/oapp_options_type3.rs +89 -0
  192. package/contracts/oapps/oapp/src/oapp_receiver.rs +72 -0
  193. package/contracts/oapps/oapp/src/oapp_sender.rs +66 -0
  194. package/contracts/oapps/oapp/src/tests/mod.rs +4 -0
  195. package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +162 -0
  196. package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +180 -0
  197. package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +157 -0
  198. package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +283 -0
  199. package/contracts/utils/Cargo.toml +21 -0
  200. package/contracts/utils/src/buffer_reader.rs +143 -0
  201. package/contracts/utils/src/buffer_writer.rs +117 -0
  202. package/contracts/utils/src/bytes_ext.rs +19 -0
  203. package/contracts/utils/src/errors.rs +30 -0
  204. package/contracts/utils/src/lib.rs +15 -0
  205. package/contracts/utils/src/option_ext.rs +38 -0
  206. package/contracts/utils/src/ownable.rs +88 -0
  207. package/contracts/utils/src/testing_utils.rs +100 -0
  208. package/contracts/utils/src/tests/buffer_reader.rs +1006 -0
  209. package/contracts/utils/src/tests/buffer_writer.rs +330 -0
  210. package/contracts/utils/src/tests/bytes_ext.rs +77 -0
  211. package/contracts/utils/src/tests/mod.rs +4 -0
  212. package/contracts/utils/src/tests/ownable.rs +149 -0
  213. package/contracts/utils/src/ttl.rs +164 -0
  214. package/contracts/workers/Cargo.toml +13 -0
  215. package/contracts/workers/executor/Cargo.toml +26 -0
  216. package/contracts/workers/executor/src/events.rs +22 -0
  217. package/contracts/workers/executor/src/executor.rs +347 -0
  218. package/contracts/workers/executor/src/interfaces/executor.rs +40 -0
  219. package/contracts/workers/executor/src/interfaces/mod.rs +5 -0
  220. package/contracts/workers/executor/src/interfaces/types.rs +51 -0
  221. package/contracts/workers/executor/src/lib.rs +10 -0
  222. package/contracts/workers/executor/src/storage.rs +23 -0
  223. package/contracts/workers/lib.rs +2 -0
  224. package/contracts/workers/worker-common/Cargo.toml +18 -0
  225. package/contracts/workers/worker-common/src/constants.rs +17 -0
  226. package/contracts/workers/worker-common/src/errors.rs +6 -0
  227. package/contracts/workers/worker-common/src/events.rs +34 -0
  228. package/contracts/workers/worker-common/src/interfaces/executor_fee_lib.rs +35 -0
  229. package/contracts/workers/worker-common/src/interfaces/mod.rs +7 -0
  230. package/contracts/workers/worker-common/src/interfaces/price_feed.rs +40 -0
  231. package/contracts/workers/worker-common/src/interfaces/worker.rs +60 -0
  232. package/contracts/workers/worker-common/src/lib.rs +19 -0
  233. package/contracts/workers/worker-common/src/storage.rs +32 -0
  234. package/contracts/workers/worker-common/src/worker_common.rs +166 -0
  235. package/package.json +25 -0
  236. package/rust-toolchain.toml +4 -0
  237. package/rustfmt.toml +17 -0
  238. package/sdk/.turbo/turbo-build.log +4 -0
  239. package/sdk/dist/generated/bml.d.ts +452 -0
  240. package/sdk/dist/generated/bml.js +72 -0
  241. package/sdk/dist/generated/counter.d.ts +824 -0
  242. package/sdk/dist/generated/counter.js +125 -0
  243. package/sdk/dist/generated/endpoint.d.ts +1676 -0
  244. package/sdk/dist/generated/endpoint.js +216 -0
  245. package/sdk/dist/generated/sml.d.ts +810 -0
  246. package/sdk/dist/generated/sml.js +132 -0
  247. package/sdk/dist/generated/uln302.d.ts +1227 -0
  248. package/sdk/dist/generated/uln302.js +185 -0
  249. package/sdk/dist/index.d.ts +5 -0
  250. package/sdk/dist/index.js +5 -0
  251. package/sdk/node_modules/.bin/tsc +21 -0
  252. package/sdk/node_modules/.bin/tsserver +21 -0
  253. package/sdk/node_modules/.bin/vitest +21 -0
  254. package/sdk/node_modules/.bin/zx +21 -0
  255. package/sdk/package.json +40 -0
  256. package/sdk/src/index.ts +5 -0
  257. package/sdk/test/index.test.ts +271 -0
  258. package/sdk/test/suites/constants.ts +13 -0
  259. package/sdk/test/suites/deploy.ts +277 -0
  260. package/sdk/test/suites/localnet.ts +42 -0
  261. package/sdk/test/suites/scan.ts +189 -0
  262. package/sdk/tsconfig.json +106 -0
  263. package/tools/ts-bindings-gen/Cargo.toml +14 -0
  264. package/tools/ts-bindings-gen/src/main.rs +147 -0
  265. package/turbo.json +12 -0
@@ -0,0 +1,72 @@
1
+ use crate::{errors::OAppError, oapp_core::OAppCore};
2
+ use endpoint_v2::{ILayerZeroReceiver, LayerZeroEndpointV2Client, Origin};
3
+ use soroban_sdk::{assert_with_error, Address, Bytes, BytesN, Env};
4
+
5
+ // =====================================================
6
+ // OAppReceiver Traits
7
+ // =====================================================
8
+
9
+ pub trait OAppReceiver: ILayerZeroReceiver {
10
+ /// Indicates whether an address is an approved composeMsg sender to the Endpoint.
11
+ ///
12
+ /// Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.
13
+ /// The default sender IS the OAppReceiver implementer.
14
+ ///
15
+ /// # Arguments
16
+ /// * `origin` - The origin information containing the source endpoint and sender address
17
+ /// * `message` - The lzReceive payload
18
+ /// * `sender` - The sender address to check
19
+ ///
20
+ /// # Returns
21
+ /// True if the sender is a valid composeMsg sender, false otherwise
22
+ fn is_compose_msg_sender(env: &Env, origin: &Origin, message: &Bytes, sender: &Address) -> bool;
23
+ }
24
+
25
+ // =====================================================
26
+ // Implement overrides for the OAppReceiver trait
27
+ // =====================================================
28
+
29
+ pub trait OAppReceiverOverrides: OAppCore {
30
+ fn __is_compose_msg_sender(env: &Env, _origin: &Origin, _message: &Bytes, sender: &Address) -> bool {
31
+ env.current_contract_address() == *sender
32
+ }
33
+
34
+ fn __allow_initialize_path(env: &Env, origin: &Origin) -> bool {
35
+ let peer = Self::peer(env, origin.src_eid);
36
+ peer.is_some_and(|peer| peer == origin.sender)
37
+ }
38
+
39
+ fn __next_nonce(_env: &Env, _src_eid: u32, _sender: &BytesN<32>) -> u64 {
40
+ 0
41
+ }
42
+
43
+ fn __lz_receive(
44
+ env: &Env,
45
+ executor: &Address,
46
+ origin: &Origin,
47
+ guid: &BytesN<32>,
48
+ message: &Bytes,
49
+ extra_data: &Bytes,
50
+ value: i128,
51
+ );
52
+ }
53
+
54
+ // =====================================================
55
+ // Helper functions
56
+ // =====================================================
57
+
58
+ pub fn verify_and_clear_payload<T: OAppCore>(
59
+ env: &Env,
60
+ executor: &Address,
61
+ origin: &Origin,
62
+ guid: &BytesN<32>,
63
+ message: &Bytes,
64
+ ) {
65
+ executor.require_auth();
66
+ assert_with_error!(env, Some(origin.sender.clone()) == T::peer(env, origin.src_eid), OAppError::OnlyPeer);
67
+
68
+ let contract_address = env.current_contract_address();
69
+ let endpoint_address = T::endpoint(env);
70
+ let endpoint = LayerZeroEndpointV2Client::new(env, &endpoint_address);
71
+ endpoint.clear(&contract_address, origin, &contract_address, guid, message);
72
+ }
@@ -0,0 +1,66 @@
1
+ use crate::{errors::OAppError, oapp_core::OAppCore};
2
+ use endpoint_v2::{LayerZeroEndpointV2Client, MessagingFee, MessagingParams, MessagingReceipt};
3
+ use soroban_sdk::{token::TokenClient, Address, Bytes, Env};
4
+ use utils::option_ext::OptionExt;
5
+
6
+ pub trait OAppSenderOverrides: OAppCore {
7
+ fn __quote(env: &Env, dst_eid: u32, message: &Bytes, options: &Bytes, pay_in_zro: bool) -> MessagingFee {
8
+ let endpoint = Self::endpoint(env);
9
+ let endpoint_client = LayerZeroEndpointV2Client::new(env, &endpoint);
10
+ let receiver = Self::peer(env, dst_eid).unwrap_or_panic(env, OAppError::NoPeer);
11
+ endpoint_client.quote(
12
+ &env.current_contract_address(),
13
+ &MessagingParams { dst_eid, receiver, message: message.clone(), options: options.clone(), pay_in_zro },
14
+ )
15
+ }
16
+
17
+ fn __lz_send(
18
+ env: &Env,
19
+ sender: &Address,
20
+ dst_eid: u32,
21
+ message: &Bytes,
22
+ options: &Bytes,
23
+ fee: &MessagingFee,
24
+ refund_address: &Address,
25
+ ) -> MessagingReceipt {
26
+ Self::__pay_native(env, sender, fee.native_fee);
27
+ if fee.zro_fee > 0 {
28
+ Self::__pay_zro(env, sender, fee.zro_fee);
29
+ }
30
+
31
+ let oapp = env.current_contract_address();
32
+ let endpoint = Self::endpoint(env);
33
+ let endpoint_client = LayerZeroEndpointV2Client::new(env, &endpoint);
34
+ let peer = Self::peer(env, dst_eid).unwrap_or_panic(env, OAppError::NoPeer);
35
+
36
+ endpoint_client.send(
37
+ &oapp,
38
+ &MessagingParams {
39
+ dst_eid,
40
+ receiver: peer,
41
+ message: message.clone(),
42
+ options: options.clone(),
43
+ pay_in_zro: fee.zro_fee > 0,
44
+ },
45
+ refund_address,
46
+ )
47
+ }
48
+
49
+ fn __pay_native(env: &Env, payer: &Address, native_fee: i128) {
50
+ let endpoint = Self::endpoint(env);
51
+ let endpoint_client = LayerZeroEndpointV2Client::new(env, &endpoint);
52
+ let native_token = endpoint_client.native_token();
53
+ let token_client = TokenClient::new(env, &native_token);
54
+
55
+ token_client.transfer(payer, &endpoint, &native_fee);
56
+ }
57
+
58
+ fn __pay_zro(env: &Env, payer: &Address, zro_fee: i128) {
59
+ let endpoint = Self::endpoint(env);
60
+ let endpoint_client = LayerZeroEndpointV2Client::new(env, &endpoint);
61
+ let zro_token = endpoint_client.zro().unwrap_or_panic(env, OAppError::ZROTokenUnavailable);
62
+ let token_client = TokenClient::new(env, &zro_token);
63
+
64
+ token_client.transfer(payer, &endpoint, &zro_fee);
65
+ }
66
+ }
@@ -0,0 +1,4 @@
1
+ mod test_oapp_core;
2
+ mod test_oapp_options_type3;
3
+ mod test_oapp_receiver;
4
+ mod test_oapp_sender;
@@ -0,0 +1,162 @@
1
+ use crate::{self as oapp, oapp_core::PeerSet};
2
+ use soroban_sdk::{
3
+ contract, contractimpl,
4
+ testutils::{Address as _, MockAuth, MockAuthInvoke},
5
+ Address, BytesN, Env, IntoVal,
6
+ };
7
+ use utils::ownable::Ownable;
8
+ use utils::testing_utils::assert_event;
9
+
10
+ #[contract]
11
+ pub struct DummyEndpoint;
12
+
13
+ #[contractimpl]
14
+ impl DummyEndpoint {
15
+ pub fn set_delegate(_env: Env, _oapp: &Address, _delegate: &Option<Address>) {
16
+ // do nothing
17
+ }
18
+ }
19
+
20
+ #[oapp_macros::oapp_core]
21
+ pub struct DummyOApp;
22
+
23
+ #[contractimpl]
24
+ impl DummyOApp {
25
+ pub fn __constructor(env: &Env, owner: &Address, endpoint: &Address) {
26
+ Self::__init_owner(env, owner);
27
+ Self::__oapp_initialize(env, endpoint, &None);
28
+ }
29
+ }
30
+
31
+ const REMOTE_EID: u32 = 100;
32
+ const UNSET_EID: u32 = 999;
33
+
34
+ struct TestSetup<'a> {
35
+ env: Env,
36
+ owner: Address,
37
+ endpoint: Address,
38
+ oapp_client: DummyOAppClient<'a>,
39
+ }
40
+
41
+ fn setup<'a>() -> TestSetup<'a> {
42
+ let env = Env::default();
43
+
44
+ let owner = Address::generate(&env);
45
+ soroban_sdk::log!(&env, "owner: {}", owner);
46
+ let endpoint = env.register(DummyEndpoint, ());
47
+ soroban_sdk::log!(&env, "endpoint: {}", endpoint);
48
+ let oapp = env.register(DummyOApp, (&owner, &endpoint));
49
+ soroban_sdk::log!(&env, "oapp: {}", oapp);
50
+ let oapp_client = DummyOAppClient::new(&env, &oapp);
51
+ TestSetup { env, owner, endpoint, oapp_client }
52
+ }
53
+
54
+ #[test]
55
+ fn test_set_peer() {
56
+ let TestSetup { env, owner, oapp_client, .. } = setup();
57
+
58
+ let test_peer: BytesN<32> = BytesN::from_array(&env, &[33; 32]);
59
+ let test_peer_option = Some(test_peer.clone());
60
+ env.mock_auths(&[MockAuth {
61
+ address: &owner,
62
+ invoke: &MockAuthInvoke {
63
+ contract: &oapp_client.address,
64
+ fn_name: "set_peer",
65
+ args: (&REMOTE_EID, &test_peer_option).into_val(&env),
66
+ sub_invokes: &[],
67
+ },
68
+ }]);
69
+ oapp_client.set_peer(&REMOTE_EID, &test_peer_option);
70
+
71
+ // assert event
72
+ assert_event(&env, &oapp_client.address, PeerSet { eid: REMOTE_EID, peer: Some(test_peer.clone()) });
73
+
74
+ // Test getting peer for set eid
75
+ let retrieved_peer = oapp_client.peer(&REMOTE_EID);
76
+ assert_eq!(Some(test_peer), retrieved_peer);
77
+
78
+ // Test getting peer for unset eid
79
+ let retrieved_peer = oapp_client.peer(&UNSET_EID);
80
+ assert_eq!(None, retrieved_peer);
81
+ }
82
+
83
+ #[test]
84
+ #[should_panic(expected = "HostError: Error(Auth, InvalidAction)")]
85
+ fn test_set_peer_unauthorized() {
86
+ let TestSetup { env, oapp_client, .. } = setup();
87
+
88
+ let test_peer: BytesN<32> = BytesN::from_array(&env, &[33; 32]);
89
+ oapp_client.set_peer(&REMOTE_EID, &Some(test_peer));
90
+ }
91
+
92
+ #[test]
93
+ fn test_get_peer_success() {
94
+ let TestSetup { env, oapp_client, .. } = setup();
95
+ env.mock_all_auths();
96
+
97
+ let test_peer: BytesN<32> = BytesN::from_array(&env, &[1; 32]);
98
+ oapp_client.set_peer(&REMOTE_EID, &Some(test_peer.clone()));
99
+
100
+ let retrieved_peer = oapp_client.peer(&REMOTE_EID);
101
+ assert_eq!(Some(test_peer), retrieved_peer);
102
+ }
103
+
104
+ #[test]
105
+ fn test_get_peer_returns_none_for_unset_eid() {
106
+ let TestSetup { oapp_client, .. } = setup();
107
+
108
+ let result = oapp_client.peer(&UNSET_EID);
109
+ assert_eq!(result, None);
110
+ }
111
+
112
+ #[test]
113
+ fn test_update_peer() {
114
+ let TestSetup { env, oapp_client, .. } = setup();
115
+ env.mock_all_auths();
116
+
117
+ // Set initial peer
118
+ let initial_peer: BytesN<32> = BytesN::from_array(&env, &[1; 32]);
119
+ oapp_client.set_peer(&REMOTE_EID, &Some(initial_peer));
120
+
121
+ // Update to new peer
122
+ let updated_peer: BytesN<32> = BytesN::from_array(&env, &[2; 32]);
123
+ oapp_client.set_peer(&REMOTE_EID, &Some(updated_peer.clone()));
124
+
125
+ let retrieved_peer = oapp_client.peer(&REMOTE_EID);
126
+ assert_eq!(Some(updated_peer), retrieved_peer);
127
+ }
128
+
129
+ #[test]
130
+ fn test_set_delegate() {
131
+ let TestSetup { env, owner, oapp_client, .. } = setup();
132
+
133
+ let delegate = Address::generate(&env);
134
+ let delegate_option = Some(delegate.clone());
135
+ env.mock_auths(&[MockAuth {
136
+ address: &owner,
137
+ invoke: &MockAuthInvoke {
138
+ contract: &oapp_client.address,
139
+ fn_name: "set_delegate",
140
+ args: (&delegate_option,).into_val(&env),
141
+ sub_invokes: &[],
142
+ },
143
+ }]);
144
+ oapp_client.set_delegate(&delegate_option);
145
+ }
146
+
147
+ #[test]
148
+ #[should_panic(expected = "HostError: Error(Auth, InvalidAction)")]
149
+ fn test_set_delegate_unauthorized() {
150
+ let TestSetup { env, oapp_client, .. } = setup();
151
+
152
+ let delegate = Address::generate(&env);
153
+ oapp_client.set_delegate(&Some(delegate));
154
+ }
155
+
156
+ #[test]
157
+ fn test_get_endpoint() {
158
+ let TestSetup { endpoint, oapp_client, .. } = setup();
159
+
160
+ let retrieved_endpoint = oapp_client.endpoint();
161
+ assert_eq!(endpoint, retrieved_endpoint);
162
+ }
@@ -0,0 +1,180 @@
1
+ use crate as oapp;
2
+ use crate::oapp_options_type3::EnforcedOptionParam;
3
+ use crate::oapp_options_type3::EnforcedOptionSet;
4
+ use crate::oapp_options_type3::OAppOptionsType3;
5
+ use soroban_sdk::contractimpl;
6
+ use soroban_sdk::{
7
+ contract,
8
+ testutils::{Address as _, MockAuth, MockAuthInvoke},
9
+ vec, Address, Bytes, Env, IntoVal,
10
+ };
11
+ use utils::ownable::Ownable;
12
+ use utils::testing_utils::assert_event;
13
+
14
+ const OPTION_TYPE_3: u32 = 3;
15
+ const REMOTE_EID_1: u32 = 100;
16
+ const REMOTE_EID_2: u32 = 200;
17
+ const MSG_TYPE_SEND: u32 = 1;
18
+ const MSG_TYPE_RECEIVE: u32 = 2;
19
+
20
+ #[contract]
21
+ #[common_macros::ownable]
22
+ #[oapp_macros::oapp_options_type3]
23
+ pub struct DummyOAppOptionsType3;
24
+
25
+ #[contractimpl]
26
+ impl DummyOAppOptionsType3 {
27
+ pub fn __constructor(env: &Env, owner: &Address) {
28
+ Self::__init_owner(env, owner);
29
+ }
30
+ }
31
+
32
+ struct TestSetup<'a> {
33
+ env: Env,
34
+ owner: Address,
35
+ oapp_client: DummyOAppOptionsType3Client<'a>,
36
+ }
37
+
38
+ fn setup<'a>() -> TestSetup<'a> {
39
+ let env = Env::default();
40
+
41
+ let owner = Address::generate(&env);
42
+ let oapp = env.register(DummyOAppOptionsType3, (&owner,));
43
+ let oapp_client = DummyOAppOptionsType3Client::new(&env, &oapp);
44
+
45
+ TestSetup { env, owner, oapp_client }
46
+ }
47
+
48
+ fn create_valid_options(env: &Env, data: &[u8]) -> Bytes {
49
+ let mut buffer = Bytes::from_array(env, &(OPTION_TYPE_3 as u16).to_be_bytes());
50
+ buffer.extend_from_slice(data);
51
+ buffer
52
+ }
53
+
54
+ #[test]
55
+ fn test_set_and_get_enforced_options() {
56
+ let TestSetup { env, owner, oapp_client, .. } = setup();
57
+
58
+ // Create enforced options for different eid/msg_type combinations
59
+ let options1 = create_valid_options(&env, &[1, 2, 3, 4]);
60
+ let options2 = create_valid_options(&env, &[5, 6, 7, 8]);
61
+
62
+ let enforced_params = vec![
63
+ &env,
64
+ EnforcedOptionParam { eid: REMOTE_EID_1, msg_type: MSG_TYPE_SEND, options: options1.clone() },
65
+ EnforcedOptionParam { eid: REMOTE_EID_2, msg_type: MSG_TYPE_RECEIVE, options: options2.clone() },
66
+ ];
67
+ env.mock_auths(&[MockAuth {
68
+ address: &owner,
69
+ invoke: &MockAuthInvoke {
70
+ contract: &oapp_client.address,
71
+ fn_name: "set_enforced_options",
72
+ args: (&enforced_params,).into_val(&env),
73
+ sub_invokes: &[],
74
+ },
75
+ }]);
76
+
77
+ oapp_client.set_enforced_options(&enforced_params);
78
+
79
+ // assert events
80
+ assert_event(&env, &oapp_client.address, EnforcedOptionSet { enforced_option_params: enforced_params.clone() });
81
+
82
+ // Verify options were set correctly
83
+ let retrieved1 = oapp_client.enforced_options(&REMOTE_EID_1, &MSG_TYPE_SEND);
84
+ assert_eq!(retrieved1, options1);
85
+
86
+ let retrieved2 = oapp_client.enforced_options(&REMOTE_EID_2, &MSG_TYPE_RECEIVE);
87
+ assert_eq!(retrieved2, options2);
88
+ }
89
+
90
+ #[test]
91
+ #[should_panic(expected = "HostError: Error(Auth, InvalidAction)")]
92
+ fn test_set_enforced_options_unauthorized() {
93
+ let TestSetup { env, oapp_client, .. } = setup();
94
+
95
+ let options = create_valid_options(&env, &[1, 2, 3, 4]);
96
+ let enforced_params =
97
+ vec![&env, EnforcedOptionParam { eid: REMOTE_EID_1, msg_type: MSG_TYPE_SEND, options: options.clone() }];
98
+ oapp_client.set_enforced_options(&enforced_params);
99
+ }
100
+
101
+ #[test]
102
+ fn test_combine_options_with_empty_enforced() {
103
+ let TestSetup { env, oapp_client, .. } = setup();
104
+
105
+ let extra_options = create_valid_options(&env, &[9, 10, 11]);
106
+ // When no enforced options are set, should return extra options
107
+ let combined = oapp_client.combine_options(&REMOTE_EID_1, &MSG_TYPE_SEND, &extra_options);
108
+ assert_eq!(combined, extra_options);
109
+ }
110
+
111
+ #[test]
112
+ fn test_combine_options_with_empty_extra() {
113
+ let TestSetup { env, oapp_client, .. } = setup();
114
+
115
+ // This test now simply validates that empty extra options return empty result
116
+ // when no enforced options are set
117
+ let empty_extra = Bytes::new(&env);
118
+ let combined = oapp_client.combine_options(&REMOTE_EID_1, &MSG_TYPE_SEND, &empty_extra);
119
+ assert_eq!(combined, empty_extra);
120
+ }
121
+
122
+ #[test]
123
+ fn test_combine_options_both_present() {
124
+ let TestSetup { env, oapp_client, .. } = setup();
125
+ env.mock_all_auths();
126
+
127
+ let enforced = create_valid_options(&env, &[1, 2, 3]);
128
+ oapp_client.set_enforced_options(&vec![
129
+ &env,
130
+ EnforcedOptionParam { eid: REMOTE_EID_1, msg_type: MSG_TYPE_SEND, options: enforced.clone() },
131
+ ]);
132
+
133
+ let extra = create_valid_options(&env, &[4, 5, 6]);
134
+ let combined = oapp_client.combine_options(&REMOTE_EID_1, &MSG_TYPE_SEND, &extra);
135
+
136
+ let mut expected_combined = enforced;
137
+ expected_combined.append(&extra.slice(2..));
138
+
139
+ // Should return extra options when no enforced options exist
140
+ assert_eq!(combined, expected_combined);
141
+ }
142
+
143
+ #[test]
144
+ fn test_update_enforced_options() {
145
+ let TestSetup { env, oapp_client, .. } = setup();
146
+ env.mock_all_auths();
147
+
148
+ // Set initial options
149
+ let initial_options = create_valid_options(&env, &[1, 2, 3]);
150
+ let params = vec![
151
+ &env,
152
+ EnforcedOptionParam { eid: REMOTE_EID_1, msg_type: MSG_TYPE_SEND, options: initial_options.clone() },
153
+ ];
154
+ oapp_client.set_enforced_options(&params);
155
+
156
+ // Verify initial options
157
+ let retrieved = oapp_client.enforced_options(&REMOTE_EID_1, &MSG_TYPE_SEND);
158
+ assert_eq!(retrieved, initial_options);
159
+
160
+ // Update with new options
161
+ let updated_options = create_valid_options(&env, &[9, 8, 7, 6, 5]);
162
+ let update_params = vec![
163
+ &env,
164
+ EnforcedOptionParam { eid: REMOTE_EID_1, msg_type: MSG_TYPE_SEND, options: updated_options.clone() },
165
+ ];
166
+ oapp_client.set_enforced_options(&update_params);
167
+
168
+ // Verify options were updated
169
+ let retrieved_after_update = oapp_client.enforced_options(&REMOTE_EID_1, &MSG_TYPE_SEND);
170
+ assert_eq!(retrieved_after_update, updated_options);
171
+ }
172
+
173
+ #[test]
174
+ fn test_get_enforced_options_for_unset_combination() {
175
+ let TestSetup { env, oapp_client, .. } = setup();
176
+
177
+ // Try to get options for an eid/msg_type that hasn't been set
178
+ let result = oapp_client.enforced_options(&999, &999);
179
+ assert_eq!(result, Bytes::new(&env));
180
+ }
@@ -0,0 +1,157 @@
1
+ use crate as oapp;
2
+ use crate::oapp_core::OAppCoreStorage;
3
+ use crate::oapp_receiver::OAppReceiverOverrides;
4
+ use crate::tests::test_oapp_core::DummyEndpoint;
5
+ use crate::{errors::OAppError, oapp_receiver::OAppReceiver};
6
+ use endpoint_v2::{ILayerZeroReceiver, Origin};
7
+ use soroban_sdk::contractimpl;
8
+ use soroban_sdk::{assert_with_error, testutils::Address as _, Address, Bytes, BytesN, Env};
9
+ use utils::option_ext::OptionExt;
10
+ use utils::ownable::Ownable;
11
+
12
+ #[oapp_macros::oapp_receiver]
13
+ pub struct DummyOAppReceiver;
14
+
15
+ impl OAppReceiverOverrides for DummyOAppReceiver {
16
+ fn __lz_receive(
17
+ _env: &Env,
18
+ _executor: &Address,
19
+ _origin: &Origin,
20
+ _guid: &BytesN<32>,
21
+ _message: &Bytes,
22
+ _extra_data: &Bytes,
23
+ _value: i128,
24
+ ) {
25
+ // do nothing
26
+ }
27
+ }
28
+
29
+ #[contractimpl]
30
+ impl DummyOAppReceiver {
31
+ pub fn __constructor(env: &Env, owner: &Address, endpoint: &Address) {
32
+ Self::__init_owner(env, owner);
33
+ Self::__oapp_initialize(env, endpoint, &None);
34
+ }
35
+
36
+ pub fn assert_allowed_peer(env: &Env, origin: &Origin) {
37
+ let peer = OAppCoreStorage::peer(env, origin.src_eid).unwrap_or_panic(env, OAppError::NoPeer);
38
+ assert_with_error!(env, peer == origin.sender, OAppError::OnlyPeer);
39
+ }
40
+ }
41
+
42
+ const REMOTE_EID: u32 = 100;
43
+ const UNSET_EID: u32 = 999;
44
+
45
+ struct TestSetup<'a> {
46
+ env: Env,
47
+ #[allow(dead_code)]
48
+ owner: Address,
49
+ #[allow(dead_code)]
50
+ endpoint: Address,
51
+ #[allow(dead_code)]
52
+ native_token: Address,
53
+ oapp_client: DummyOAppReceiverClient<'a>,
54
+ }
55
+
56
+ fn setup<'a>() -> TestSetup<'a> {
57
+ let env = Env::default();
58
+
59
+ let owner = Address::generate(&env);
60
+ let endpoint = env.register(DummyEndpoint, ());
61
+ let native_token = Address::generate(&env);
62
+ let oapp = env.register(DummyOAppReceiver, (&owner, &endpoint));
63
+ let oapp_client = DummyOAppReceiverClient::new(&env, &oapp);
64
+ TestSetup { env, owner, endpoint, native_token, oapp_client }
65
+ }
66
+
67
+ #[test]
68
+ fn test_is_compose_msg_sender_same_contract() {
69
+ let TestSetup { env, oapp_client, .. } = setup();
70
+
71
+ let origin = Origin { src_eid: REMOTE_EID, sender: BytesN::from_array(&env, &[1; 32]), nonce: 1 };
72
+ let message = Bytes::from_array(&env, &[1, 2, 3, 4]);
73
+
74
+ // Test with same contract address (should return true)
75
+ let result = oapp_client.is_compose_msg_sender(&origin, &message, &oapp_client.address);
76
+ assert_eq!(result, true);
77
+ }
78
+
79
+ #[test]
80
+ fn test_is_compose_msg_sender_different_contract() {
81
+ let TestSetup { env, oapp_client, .. } = setup();
82
+
83
+ let origin = Origin { src_eid: REMOTE_EID, sender: BytesN::from_array(&env, &[1; 32]), nonce: 1 };
84
+ let message = Bytes::from_array(&env, &[1, 2, 3, 4]);
85
+ let different_sender = Address::generate(&env);
86
+
87
+ // Test with different sender address (should return false)
88
+ let result = oapp_client.is_compose_msg_sender(&origin, &message, &different_sender);
89
+ assert_eq!(result, false);
90
+ }
91
+
92
+ #[test]
93
+ fn test_allow_initialize_path_with_matching_peer() {
94
+ let TestSetup { env, oapp_client, .. } = setup();
95
+ env.mock_all_auths();
96
+
97
+ let peer_bytes: BytesN<32> = BytesN::from_array(&env, &[5; 32]);
98
+ oapp_client.set_peer(&REMOTE_EID, &Some(peer_bytes.clone()));
99
+
100
+ let origin = Origin { src_eid: REMOTE_EID, sender: peer_bytes.clone(), nonce: 1 };
101
+
102
+ let result = oapp_client.allow_initialize_path(&origin);
103
+ assert_eq!(result, true);
104
+ }
105
+
106
+ #[test]
107
+ fn test_allow_initialize_path_with_non_matching_peer() {
108
+ let TestSetup { env, oapp_client, .. } = setup();
109
+ env.mock_all_auths();
110
+
111
+ let peer_bytes: BytesN<32> = BytesN::from_array(&env, &[5; 32]);
112
+ oapp_client.set_peer(&REMOTE_EID, &Some(peer_bytes));
113
+
114
+ let different_sender: BytesN<32> = BytesN::from_array(&env, &[6; 32]);
115
+ let origin = Origin { src_eid: REMOTE_EID, sender: different_sender, nonce: 1 };
116
+
117
+ let result = oapp_client.allow_initialize_path(&origin);
118
+ assert_eq!(result, false);
119
+ }
120
+
121
+ #[test]
122
+ fn test_allow_initialize_path_with_no_peer_set() {
123
+ let TestSetup { env, oapp_client, .. } = setup();
124
+
125
+ let origin = Origin { src_eid: UNSET_EID, sender: BytesN::from_array(&env, &[5; 32]), nonce: 1 };
126
+
127
+ let result = oapp_client.allow_initialize_path(&origin);
128
+ assert_eq!(result, false);
129
+ }
130
+
131
+ #[test]
132
+ fn test_assert_allowed_peer_wrong_sender() {
133
+ let TestSetup { env, oapp_client, .. } = setup();
134
+ env.mock_all_auths();
135
+
136
+ let peer_bytes: BytesN<32> = BytesN::from_array(&env, &[7; 32]);
137
+ oapp_client.set_peer(&REMOTE_EID, &Some(peer_bytes));
138
+
139
+ let wrong_sender: BytesN<32> = BytesN::from_array(&env, &[8; 32]);
140
+ let origin = Origin { src_eid: REMOTE_EID, sender: wrong_sender, nonce: 1 };
141
+
142
+ // This should panic with OnlyPeer error
143
+ let result = oapp_client.try_assert_allowed_peer(&origin);
144
+ assert_eq!(result.err().unwrap().ok().unwrap(), OAppError::OnlyPeer.into());
145
+ }
146
+
147
+ #[test]
148
+ fn test_assert_allowed_peer_no_peer() {
149
+ let TestSetup { env, oapp_client, .. } = setup();
150
+ env.mock_all_auths();
151
+
152
+ let origin = Origin { src_eid: UNSET_EID, sender: BytesN::from_array(&env, &[7; 32]), nonce: 1 };
153
+
154
+ // This should panic with NoPeer error
155
+ let result = oapp_client.try_assert_allowed_peer(&origin);
156
+ assert_eq!(result.err().unwrap().ok().unwrap(), OAppError::NoPeer.into());
157
+ }