@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,202 @@
1
+ use crate::tests::endpoint_setup::setup;
2
+ use soroban_sdk::{testutils::Address as _, Address};
3
+ use utils::{
4
+ errors::TtlError,
5
+ ttl::{TtlConfig, TtlConfigData},
6
+ };
7
+
8
+ fn ttl_defaults(env: &soroban_sdk::Env, contract: &Address) -> (TtlConfig, TtlConfig) {
9
+ env.as_contract(contract, || {
10
+ (
11
+ TtlConfigData::instance(env).expect("instance config should exist"),
12
+ TtlConfigData::persistent(env).expect("persistent config should exist"),
13
+ )
14
+ })
15
+ }
16
+
17
+ #[test]
18
+ fn test_set_ttl_config_success() {
19
+ let context = setup();
20
+ let env = &context.env;
21
+ let endpoint = &context.endpoint_client;
22
+
23
+ let max_ttl = env.as_contract(&context.endpoint_client.address, || env.storage().max_ttl());
24
+
25
+ let instance_threshold = max_ttl / 4;
26
+ let instance_extend_to = instance_threshold + 1;
27
+ let persistent_threshold = max_ttl / 5;
28
+ let persistent_extend_to = persistent_threshold + 2;
29
+
30
+ let instance_config = Some(TtlConfig::new(instance_threshold, instance_extend_to));
31
+ let persistent_config = Some(TtlConfig::new(persistent_threshold, persistent_extend_to));
32
+
33
+ context.mock_owner_auth("set_ttl_config", (&instance_config, &persistent_config, &None::<TtlConfig>));
34
+ endpoint.set_ttl_config(&instance_config, &persistent_config, &None);
35
+
36
+ let (stored_instance, stored_persistent) = ttl_defaults(env, &context.endpoint_client.address);
37
+
38
+ assert_eq!(stored_instance, TtlConfig::new(instance_threshold, instance_extend_to));
39
+ assert_eq!(stored_persistent, TtlConfig::new(persistent_threshold, persistent_extend_to));
40
+ }
41
+
42
+ #[test]
43
+ #[should_panic(expected = "Error(Auth, InvalidAction)")]
44
+ fn test_set_ttl_config_requires_owner() {
45
+ let context = setup();
46
+ let env = &context.env;
47
+ let endpoint = &context.endpoint_client;
48
+ let attacker = Address::generate(env);
49
+
50
+ let instance_config = Some(TtlConfig::new(1, 2));
51
+ let persistent_config = Some(TtlConfig::new(1, 2));
52
+
53
+ context.mock_auth(&attacker, "set_ttl_config", (&instance_config, &persistent_config));
54
+
55
+ endpoint.set_ttl_config(&instance_config, &persistent_config, &None);
56
+ }
57
+
58
+ #[test]
59
+ fn test_panic_set_ttl_config_invalid_instance_range() {
60
+ let context = setup();
61
+ let env = &context.env;
62
+ let endpoint = &context.endpoint_client;
63
+
64
+ let max_ttl = env.as_contract(&context.endpoint_client.address, || env.storage().max_ttl());
65
+ let instance_threshold = max_ttl / 4 + 2;
66
+ let instance_extend_to = instance_threshold - 1; // Invalid: extend_to < threshold
67
+
68
+ let instance_config = Some(TtlConfig::new(instance_threshold, instance_extend_to));
69
+ let persistent_config = Some(TtlConfig::new(1, 2));
70
+
71
+ context.mock_owner_auth("set_ttl_config", (&instance_config, &persistent_config, &None::<TtlConfig>));
72
+
73
+ assert_eq!(
74
+ endpoint.try_set_ttl_config(&instance_config, &persistent_config, &None).unwrap_err().unwrap(),
75
+ TtlError::InvalidTtlConfig.into()
76
+ );
77
+ }
78
+
79
+ #[test]
80
+ fn test_panic_set_ttl_config_exceeds_max_ttl() {
81
+ let context = setup();
82
+ let env = &context.env;
83
+ let endpoint = &context.endpoint_client;
84
+
85
+ let max_ttl = env.as_contract(&context.endpoint_client.address, || env.storage().max_ttl());
86
+ let instance_extend_to = max_ttl.checked_add(1).expect("max_ttl is at u32::MAX");
87
+
88
+ let instance_config = Some(TtlConfig::new(1, instance_extend_to)); // Invalid: extend_to > max_ttl
89
+ let persistent_config = Some(TtlConfig::new(1, 2));
90
+
91
+ context.mock_owner_auth("set_ttl_config", (&instance_config, &persistent_config, &None::<TtlConfig>));
92
+
93
+ assert_eq!(
94
+ endpoint.try_set_ttl_config(&instance_config, &persistent_config, &None).unwrap_err().unwrap(),
95
+ TtlError::InvalidTtlConfig.into()
96
+ );
97
+ }
98
+
99
+ // ============================================================================
100
+ // Frozen TTL Config Tests
101
+ // ============================================================================
102
+
103
+ #[test]
104
+ fn test_is_ttl_config_frozen_default_false() {
105
+ let context = setup();
106
+ let endpoint = &context.endpoint_client;
107
+
108
+ assert!(!endpoint.is_ttl_config_frozen());
109
+ }
110
+
111
+ #[test]
112
+ fn test_freeze_ttl_config_success() {
113
+ let context = setup();
114
+ let endpoint = &context.endpoint_client;
115
+
116
+ assert!(!endpoint.is_ttl_config_frozen());
117
+
118
+ context.mock_owner_auth("freeze_ttl_config", ());
119
+ endpoint.freeze_ttl_config();
120
+
121
+ assert!(endpoint.is_ttl_config_frozen());
122
+ }
123
+
124
+ #[test]
125
+ #[should_panic(expected = "Error(Auth, InvalidAction)")]
126
+ fn test_freeze_ttl_config_requires_owner() {
127
+ let context = setup();
128
+ let env = &context.env;
129
+ let endpoint = &context.endpoint_client;
130
+ let attacker = Address::generate(env);
131
+
132
+ context.mock_auth(&attacker, "freeze_ttl_config", ());
133
+ endpoint.freeze_ttl_config();
134
+ }
135
+
136
+ #[test]
137
+ fn test_freeze_ttl_config_already_frozen() {
138
+ let context = setup();
139
+ let endpoint = &context.endpoint_client;
140
+
141
+ // First freeze
142
+ context.mock_owner_auth("freeze_ttl_config", ());
143
+ endpoint.freeze_ttl_config();
144
+
145
+ // Try to freeze again
146
+ context.mock_owner_auth("freeze_ttl_config", ());
147
+ assert_eq!(endpoint.try_freeze_ttl_config().unwrap_err().unwrap(), TtlError::TtlConfigAlreadyFrozen.into());
148
+ }
149
+
150
+ #[test]
151
+ fn test_set_ttl_config_fails_when_frozen() {
152
+ let context = setup();
153
+ let endpoint = &context.endpoint_client;
154
+
155
+ // Freeze first
156
+ context.mock_owner_auth("freeze_ttl_config", ());
157
+ endpoint.freeze_ttl_config();
158
+
159
+ // Try to set TTL config after freeze
160
+ let instance_config = Some(TtlConfig::new(1, 2));
161
+ let persistent_config = Some(TtlConfig::new(1, 2));
162
+
163
+ context.mock_owner_auth("set_ttl_config", (&instance_config, &persistent_config, &None::<TtlConfig>));
164
+ assert_eq!(
165
+ endpoint.try_set_ttl_config(&instance_config, &persistent_config, &None).unwrap_err().unwrap(),
166
+ TtlError::TtlConfigFrozen.into()
167
+ );
168
+ }
169
+
170
+ #[test]
171
+ fn test_set_ttl_config_then_freeze() {
172
+ let context = setup();
173
+ let env = &context.env;
174
+ let endpoint = &context.endpoint_client;
175
+
176
+ // Set custom TTL config
177
+ let instance_config = Some(TtlConfig::new(100, 200));
178
+ let persistent_config = Some(TtlConfig::new(300, 400));
179
+
180
+ context.mock_owner_auth("set_ttl_config", (&instance_config, &persistent_config, &None::<TtlConfig>));
181
+ endpoint.set_ttl_config(&instance_config, &persistent_config, &None);
182
+
183
+ // Freeze
184
+ context.mock_owner_auth("freeze_ttl_config", ());
185
+ endpoint.freeze_ttl_config();
186
+
187
+ // Verify config is preserved after freeze
188
+ let (stored_instance, stored_persistent) = ttl_defaults(env, &context.endpoint_client.address);
189
+ assert_eq!(stored_instance, TtlConfig::new(100, 200));
190
+ assert_eq!(stored_persistent, TtlConfig::new(300, 400));
191
+
192
+ // Verify frozen
193
+ assert!(endpoint.is_ttl_config_frozen());
194
+
195
+ // Verify cannot modify after freeze
196
+ let new_instance_config = Some(TtlConfig::new(500, 600));
197
+ context.mock_owner_auth("set_ttl_config", (&new_instance_config, &persistent_config, &None::<TtlConfig>));
198
+ assert_eq!(
199
+ endpoint.try_set_ttl_config(&new_instance_config, &persistent_config, &None).unwrap_err().unwrap(),
200
+ TtlError::TtlConfigFrozen.into()
201
+ );
202
+ }
@@ -0,0 +1,59 @@
1
+ use crate::{tests::endpoint_setup::setup, Origin};
2
+ use soroban_sdk::{testutils::Address as _, BytesN};
3
+
4
+ #[test]
5
+ fn test_verifiable_with_new_path() {
6
+ let context = setup();
7
+ let endpoint_client = &context.endpoint_client;
8
+ let receiver = soroban_sdk::Address::generate(&context.env);
9
+ let src_eid = 2;
10
+ let sender = BytesN::from_array(&context.env, &[1u8; 32]);
11
+ let origin = Origin { src_eid, sender, nonce: 1 };
12
+
13
+ // For a new path (lazy nonce is 0), nonce 1 > 0 should be verifiable
14
+ let result = endpoint_client.verifiable(&origin, &receiver);
15
+ assert!(result);
16
+ }
17
+
18
+ #[test]
19
+ fn test_verifiable_with_higher_nonce() {
20
+ let context = setup();
21
+ let endpoint_client = &context.endpoint_client;
22
+ let receiver = soroban_sdk::Address::generate(&context.env);
23
+ let src_eid = 2;
24
+ let sender = BytesN::from_array(&context.env, &[1u8; 32]);
25
+ let origin = Origin { src_eid, sender, nonce: 10 };
26
+
27
+ // For a new path (lazy nonce is 0), nonce 10 > 0 should be verifiable
28
+ let result = endpoint_client.verifiable(&origin, &receiver);
29
+ assert!(result);
30
+ }
31
+
32
+ #[test]
33
+ fn test_verifiable_after_skip() {
34
+ let context = setup();
35
+ let env = &context.env;
36
+ let endpoint_client = &context.endpoint_client;
37
+ let receiver = soroban_sdk::Address::generate(env);
38
+ let src_eid = 2;
39
+ let sender = BytesN::from_array(env, &[1u8; 32]);
40
+
41
+ // Skip nonce 1
42
+ use soroban_sdk::{testutils::MockAuth, testutils::MockAuthInvoke, IntoVal};
43
+ env.mock_auths(&[MockAuth {
44
+ address: &receiver,
45
+ invoke: &MockAuthInvoke {
46
+ contract: &endpoint_client.address,
47
+ fn_name: "skip",
48
+ args: (&receiver, &receiver, &src_eid, &sender, &1u64).into_val(env),
49
+ sub_invokes: &[],
50
+ },
51
+ }]);
52
+ endpoint_client.skip(&receiver, &receiver, &src_eid, &sender, &1);
53
+
54
+ // Now lazy_nonce = 1, nonce 2 > 1 should be verifiable
55
+ let origin = Origin { src_eid, sender, nonce: 2 };
56
+ let result = endpoint_client.verifiable(&origin, &receiver);
57
+ assert!(result);
58
+ }
59
+
@@ -0,0 +1,172 @@
1
+ use crate::util::build_payload;
2
+ use crate::{
3
+ events::PacketVerified,
4
+ storage,
5
+ tests::{endpoint_setup::setup, mock::MockReceiver},
6
+ util::keccak256,
7
+ Origin,
8
+ };
9
+ use soroban_sdk::{
10
+ testutils::{MockAuth, MockAuthInvoke},
11
+ vec, Bytes, BytesN, IntoVal,
12
+ };
13
+ use utils::testing_utils::assert_event;
14
+
15
+ #[test]
16
+ fn test_verify_success() {
17
+ let context = setup();
18
+ let env = &context.env;
19
+ let endpoint_client = &context.endpoint_client;
20
+
21
+ let src_eid = 2u32;
22
+ let sender = BytesN::from_array(env, &[1u8; 32]);
23
+ let receiver = env.register(MockReceiver, ());
24
+ let nonce = 1u64;
25
+
26
+ // Setup receive library
27
+ let receive_lib = context.setup_mock_receive_lib(vec![env, src_eid]);
28
+ context.mock_owner_auth("register_library", (&receive_lib,));
29
+ endpoint_client.register_library(&receive_lib);
30
+ context.mock_owner_auth("set_default_receive_library", (&src_eid, &receive_lib, &0u64));
31
+ endpoint_client.set_default_receive_library(&src_eid, &receive_lib, &0);
32
+
33
+ // Create payload hash
34
+ let message = Bytes::from_array(env, &[1, 2, 3, 4]);
35
+ let guid = BytesN::from_array(env, &[5u8; 32]);
36
+ let payload = build_payload(env, &guid, &message);
37
+ let payload_hash = keccak256(env, &payload);
38
+
39
+ let origin = Origin { src_eid, sender: sender.clone(), nonce };
40
+
41
+ // Verify initial state - inbound payload hash should not exist
42
+ let initial_hash = env.as_contract(&endpoint_client.address, || {
43
+ storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, nonce)
44
+ });
45
+ assert_eq!(initial_hash, None, "Initial inbound payload hash should be None");
46
+
47
+ // Mock auth for receive_lib
48
+ env.mock_auths(&[MockAuth {
49
+ address: &receive_lib,
50
+ invoke: &MockAuthInvoke {
51
+ contract: &endpoint_client.address,
52
+ fn_name: "verify",
53
+ args: (&receive_lib, &origin, &receiver, &payload_hash).into_val(env),
54
+ sub_invokes: &[],
55
+ },
56
+ }]);
57
+
58
+ endpoint_client.verify(&receive_lib, &origin, &receiver, &payload_hash);
59
+
60
+ // Verify PacketVerified event was published
61
+ assert_event(
62
+ env,
63
+ &endpoint_client.address,
64
+ PacketVerified { origin: origin.clone(), receiver: receiver.clone(), payload_hash: payload_hash.clone() },
65
+ );
66
+
67
+ // Verify inbound payload hash was stored via public interface
68
+ let stored_hash = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &nonce);
69
+ assert_eq!(stored_hash, Some(payload_hash.clone()));
70
+
71
+ // Assert storage change directly
72
+ let stored_hash_direct = env.as_contract(&endpoint_client.address, || {
73
+ storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, nonce)
74
+ });
75
+ assert_eq!(stored_hash_direct, Some(payload_hash), "Storage should contain the inbound payload hash");
76
+ }
77
+
78
+ #[test]
79
+ fn test_verify_stores_payload_hash() {
80
+ let context = setup();
81
+ let env = &context.env;
82
+ let endpoint_client = &context.endpoint_client;
83
+
84
+ let src_eid = 2u32;
85
+ let sender = BytesN::from_array(env, &[1u8; 32]);
86
+ let receiver = env.register(MockReceiver, ());
87
+ let nonce = 1u64;
88
+
89
+ // Setup receive library
90
+ let receive_lib = context.setup_mock_receive_lib(vec![env, src_eid]);
91
+ context.mock_owner_auth("register_library", (&receive_lib,));
92
+ endpoint_client.register_library(&receive_lib);
93
+ context.mock_owner_auth("set_default_receive_library", (&src_eid, &receive_lib, &0u64));
94
+ endpoint_client.set_default_receive_library(&src_eid, &receive_lib, &0);
95
+
96
+ // Create payload hash
97
+ let message = Bytes::from_array(env, &[1, 2, 3, 4]);
98
+ let guid = BytesN::from_array(env, &[5u8; 32]);
99
+ let payload = build_payload(env, &guid, &message);
100
+ let payload_hash = keccak256(env, &payload);
101
+
102
+ let origin = Origin { src_eid, sender: sender.clone(), nonce };
103
+
104
+ // Mock auth for receive_lib
105
+ env.mock_auths(&[MockAuth {
106
+ address: &receive_lib,
107
+ invoke: &MockAuthInvoke {
108
+ contract: &endpoint_client.address,
109
+ fn_name: "verify",
110
+ args: (&receive_lib, &origin, &receiver, &payload_hash).into_val(env),
111
+ sub_invokes: &[],
112
+ },
113
+ }]);
114
+
115
+ endpoint_client.verify(&receive_lib, &origin, &receiver, &payload_hash);
116
+
117
+ // Verify inbound payload hash was stored
118
+ let stored_hash = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &nonce);
119
+ assert_eq!(stored_hash, Some(payload_hash));
120
+ }
121
+
122
+ #[test]
123
+ fn test_verify_multiple_nonces() {
124
+ let context = setup();
125
+ let env = &context.env;
126
+ let endpoint_client = &context.endpoint_client;
127
+
128
+ let src_eid = 2u32;
129
+ let sender = BytesN::from_array(env, &[1u8; 32]);
130
+ let receiver = env.register(MockReceiver, ());
131
+
132
+ // Setup receive library
133
+ let receive_lib = context.setup_mock_receive_lib(vec![env, src_eid]);
134
+ context.mock_owner_auth("register_library", (&receive_lib,));
135
+ endpoint_client.register_library(&receive_lib);
136
+ context.mock_owner_auth("set_default_receive_library", (&src_eid, &receive_lib, &0u64));
137
+ endpoint_client.set_default_receive_library(&src_eid, &receive_lib, &0);
138
+
139
+ // Verify nonce 1
140
+ let payload_hash1 = BytesN::from_array(env, &[1u8; 32]);
141
+ let origin1 = Origin { src_eid, sender: sender.clone(), nonce: 1 };
142
+ env.mock_auths(&[MockAuth {
143
+ address: &receive_lib,
144
+ invoke: &MockAuthInvoke {
145
+ contract: &endpoint_client.address,
146
+ fn_name: "verify",
147
+ args: (&receive_lib, &origin1, &receiver, &payload_hash1).into_val(env),
148
+ sub_invokes: &[],
149
+ },
150
+ }]);
151
+ endpoint_client.verify(&receive_lib, &origin1, &receiver, &payload_hash1);
152
+
153
+ // Verify nonce 2
154
+ let payload_hash2 = BytesN::from_array(env, &[2u8; 32]);
155
+ let origin2 = Origin { src_eid, sender: sender.clone(), nonce: 2 };
156
+ env.mock_auths(&[MockAuth {
157
+ address: &receive_lib,
158
+ invoke: &MockAuthInvoke {
159
+ contract: &endpoint_client.address,
160
+ fn_name: "verify",
161
+ args: (&receive_lib, &origin2, &receiver, &payload_hash2).into_val(env),
162
+ sub_invokes: &[],
163
+ },
164
+ }]);
165
+ endpoint_client.verify(&receive_lib, &origin2, &receiver, &payload_hash2);
166
+
167
+ // Verify both payload hashes were stored
168
+ let stored_hash1 = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &1);
169
+ let stored_hash2 = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &2);
170
+ assert_eq!(stored_hash1, Some(payload_hash1));
171
+ assert_eq!(stored_hash2, Some(payload_hash2));
172
+ }
@@ -0,0 +1,23 @@
1
+ use crate::tests::endpoint_setup::setup;
2
+
3
+ #[test]
4
+ fn test_zro_when_not_set() {
5
+ let context = setup();
6
+ let endpoint_client = &context.endpoint_client;
7
+
8
+ let zro_token = endpoint_client.zro();
9
+ assert_eq!(zro_token, None);
10
+ }
11
+
12
+ #[test]
13
+ fn test_zro_after_set() {
14
+ let context = setup();
15
+ let endpoint_client = &context.endpoint_client;
16
+
17
+ // Set ZRO token
18
+ context.mock_owner_auth("set_zro", (&context.zro_token_client.address,));
19
+ endpoint_client.set_zro(&context.zro_token_client.address);
20
+
21
+ let zro_token = endpoint_client.zro();
22
+ assert_eq!(zro_token, Some(context.zro_token_client.address));
23
+ }
@@ -0,0 +1,10 @@
1
+ mod register_library;
2
+ mod require_registered;
3
+ mod require_supported_eid;
4
+ mod set_config;
5
+ mod set_default_receive_lib_timeout;
6
+ mod set_default_receive_library;
7
+ mod set_default_send_library;
8
+ mod set_receive_library;
9
+ mod set_receive_library_timeout;
10
+ mod set_send_library;
@@ -0,0 +1,131 @@
1
+ use crate::{
2
+ events::LibraryRegistered,
3
+ storage,
4
+ tests::{
5
+ endpoint_setup::setup,
6
+ mock::{MockMessageLib, MockValidMessageLib},
7
+ },
8
+ };
9
+ use soroban_sdk::{testutils::Address as _, vec, Address};
10
+ use utils::testing_utils::assert_event;
11
+
12
+ use crate::errors::EndpointError;
13
+
14
+ #[test]
15
+ fn test_register_library() {
16
+ let context = setup();
17
+ let env = &context.env;
18
+ let endpoint_client = &context.endpoint_client;
19
+
20
+ // mock a valid message lib
21
+ let lib = env.register(MockValidMessageLib, ());
22
+
23
+ // Verify initial state - library count should be 0
24
+ let initial_count =
25
+ env.as_contract(&endpoint_client.address, || storage::EndpointStorage::registered_library_count(env));
26
+ assert_eq!(initial_count, 0, "Initial library count should be 0");
27
+
28
+ // Mock owner auth for register_library
29
+ context.mock_owner_auth("register_library", (&lib,));
30
+
31
+ endpoint_client.register_library(&lib);
32
+
33
+ // Assert event was published
34
+ assert_event(env, &endpoint_client.address, LibraryRegistered { new_lib: lib.clone() });
35
+
36
+ // Assert public interface methods work
37
+ assert!(endpoint_client.is_registered_library(&lib));
38
+
39
+ let libraries = endpoint_client.get_registered_libraries(&0, &1);
40
+ assert_eq!(libraries, vec![&env, lib.clone()]);
41
+
42
+ // Assert storage changes directly
43
+ let lib_clone = lib.clone();
44
+ env.as_contract(&endpoint_client.address, || {
45
+ // Verify library was assigned ID 0 (first library)
46
+ let library_id = storage::EndpointStorage::library_to_index(env, &lib_clone);
47
+ assert_eq!(library_id, Some(0), "Library should be assigned ID 0");
48
+
49
+ // Verify ID 0 maps back to the library
50
+ let stored_lib = storage::EndpointStorage::index_to_library(env, 0);
51
+ assert_eq!(stored_lib, Some(lib_clone.clone()), "ID 0 should map to the registered library");
52
+
53
+ // Verify library count was incremented
54
+ let new_count = storage::EndpointStorage::registered_library_count(env);
55
+ assert_eq!(new_count, 1, "Library count should be incremented to 1");
56
+
57
+ // Verify has_library_to_id returns true
58
+ let has_library = storage::EndpointStorage::has_library_to_index(env, &lib_clone);
59
+ assert!(has_library, "has_library_to_id should return true for registered library");
60
+ });
61
+ }
62
+
63
+ #[test]
64
+ fn test_register_library_is_already_registered() {
65
+ let context = setup();
66
+ let env = &context.env;
67
+ let endpoint_client = &context.endpoint_client;
68
+
69
+ // mock a valid message lib
70
+ let lib = env.register(MockValidMessageLib, ());
71
+
72
+ // First registration with owner auth
73
+ context.mock_owner_auth("register_library", (&lib,));
74
+ endpoint_client.register_library(&lib);
75
+
76
+ // Try to register the same library again with owner auth
77
+ context.mock_owner_auth("register_library", (&lib,));
78
+ let result = endpoint_client.try_register_library(&lib);
79
+
80
+ assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::AlreadyRegistered.into());
81
+ }
82
+
83
+ #[test]
84
+ fn test_register_library_is_unsupported_interface() {
85
+ let context = setup();
86
+ let env = &context.env;
87
+ let endpoint_client = &context.endpoint_client;
88
+
89
+ let random_lib_address = Address::generate(env);
90
+
91
+ // Mock owner auth for register_library
92
+ context.mock_owner_auth("register_library", (&random_lib_address,));
93
+
94
+ let result = endpoint_client.try_register_library(&random_lib_address);
95
+ assert!(result.is_err());
96
+ }
97
+
98
+ #[test]
99
+ fn test_register_library_owner_auth() {
100
+ let context = setup();
101
+ let env = &context.env;
102
+ let endpoint_client = &context.endpoint_client;
103
+
104
+ // Deploy a mock message library contract
105
+ let lib = env.register(MockMessageLib, ());
106
+
107
+ // Mock owner auth for register_library
108
+ context.mock_owner_auth("register_library", (&lib,));
109
+
110
+ // should succeed
111
+ endpoint_client.register_library(&lib);
112
+
113
+ let library = endpoint_client.get_registered_libraries(&0, &1);
114
+ assert_eq!(library, vec![env, lib]);
115
+ }
116
+
117
+ #[test]
118
+ #[should_panic(expected = "Error(Auth, InvalidAction)")]
119
+ fn test_register_library_without_owner_auth() {
120
+ let context = setup();
121
+ let env = &context.env;
122
+ let endpoint_client = &context.endpoint_client;
123
+
124
+ let lib = Address::generate(env);
125
+ let non_owner = Address::generate(env);
126
+
127
+ // Mock auth for non-owner
128
+ context.mock_auth(&non_owner, "register_library", (&lib,));
129
+
130
+ endpoint_client.register_library(&lib);
131
+ }
@@ -0,0 +1,35 @@
1
+ use crate::{
2
+ tests::{endpoint_setup::setup, mock::MockValidMessageLib},
3
+ EndpointV2,
4
+ };
5
+ use soroban_sdk::{testutils::Address as _, Address};
6
+
7
+ // Unit tests for require functions
8
+
9
+ #[test]
10
+ #[should_panic(expected = "Error(Contract, #15)")] // EndpointError::OnlyRegisteredLib
11
+ fn test_require_registered_with_unregistered_lib() {
12
+ let context = setup();
13
+ let env = &context.env;
14
+ let endpoint_client = &context.endpoint_client;
15
+ let unregistered_lib = Address::generate(env);
16
+
17
+ env.as_contract(&endpoint_client.address, || EndpointV2::require_registered(env, &unregistered_lib));
18
+ }
19
+
20
+ #[test]
21
+ fn test_require_registered_with_registered_lib() {
22
+ let context = setup();
23
+ let env = &context.env;
24
+ let endpoint_client = &context.endpoint_client;
25
+
26
+ // Register a valid message lib
27
+ let lib = env.register(MockValidMessageLib, ());
28
+
29
+ // Mock owner auth for register_library
30
+ context.mock_owner_auth("register_library", (&lib,));
31
+ endpoint_client.register_library(&lib);
32
+
33
+ // Should not panic
34
+ env.as_contract(&endpoint_client.address, || EndpointV2::require_registered(env, &lib));
35
+ }
@@ -0,0 +1,28 @@
1
+ use crate::{tests::endpoint_setup::setup, EndpointV2, MessageLibType};
2
+ use soroban_sdk::{testutils::Address as _, vec, Address};
3
+
4
+ #[test]
5
+ #[should_panic(expected = "Error(Contract, #22)")] // EndpointError::UnsupportedEid
6
+ fn test_require_supported_eid_with_unsupported() {
7
+ let context = setup();
8
+ let env = &context.env;
9
+ let endpoint_client = &context.endpoint_client;
10
+
11
+ let unsupported_eid = context.eid + 1;
12
+ let send_lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, context.eid]);
13
+ env.as_contract(&endpoint_client.address, || EndpointV2::require_supported_eid(env, &send_lib, unsupported_eid));
14
+ }
15
+
16
+ #[test]
17
+ #[should_panic(expected = "trying to get non-existing value for contract instance")]
18
+ fn test_require_supported_eid_with_non_deployed_lib() {
19
+ let context = setup();
20
+ let env = &context.env;
21
+ let endpoint_client = &context.endpoint_client;
22
+
23
+ // Address that doesn't have a contract deployed
24
+ let non_existent_lib = Address::generate(env);
25
+ env.as_contract(&endpoint_client.address, || {
26
+ EndpointV2::require_supported_eid(env, &non_existent_lib, context.eid)
27
+ });
28
+ }