@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,316 @@
1
+ use soroban_sdk::{testutils::Address as _, Address, BytesN};
2
+
3
+ use crate::{endpoint_v2::EndpointV2, storage, tests::endpoint_setup::setup};
4
+
5
+ #[test]
6
+ fn test_inbound_payload_hash_not_set() {
7
+ let test_setup = setup();
8
+ let env = &test_setup.env;
9
+ let endpoint_client = &test_setup.endpoint_client;
10
+
11
+ let receiver = Address::generate(env);
12
+ let src_eid = 2;
13
+ let sender = BytesN::from_array(env, &[1u8; 32]);
14
+ let nonce = 1;
15
+
16
+ // When no payload hash is set, should return None
17
+ let payload_hash = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &nonce);
18
+ assert_eq!(payload_hash, None);
19
+ }
20
+
21
+ #[test]
22
+ fn test_inbound_payload_hash_after_setting() {
23
+ let test_setup = setup();
24
+ let env = &test_setup.env;
25
+ let endpoint_client = &test_setup.endpoint_client;
26
+
27
+ let receiver = Address::generate(env);
28
+ let src_eid = 2;
29
+ let sender = BytesN::from_array(env, &[1u8; 32]);
30
+ let nonce = 1;
31
+ let expected_hash = BytesN::from_array(env, &[0xabu8; 32]);
32
+
33
+ // Set payload hash using inbound function
34
+ env.as_contract(&endpoint_client.address, || {
35
+ EndpointV2::inbound(env, &receiver, src_eid, &sender, nonce, &expected_hash)
36
+ });
37
+
38
+ // Verify payload hash is retrieved correctly
39
+ let payload_hash = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &nonce);
40
+ assert_eq!(payload_hash, Some(expected_hash));
41
+ }
42
+
43
+ #[test]
44
+ fn test_inbound_payload_hash_different_nonces() {
45
+ let test_setup = setup();
46
+ let env = &test_setup.env;
47
+ let endpoint_client = &test_setup.endpoint_client;
48
+
49
+ let receiver = Address::generate(env);
50
+ let src_eid = 2;
51
+ let sender = BytesN::from_array(env, &[1u8; 32]);
52
+ let hash1 = BytesN::from_array(env, &[0xabu8; 32]);
53
+ let hash2 = BytesN::from_array(env, &[0xcdu8; 32]);
54
+ let hash3 = BytesN::from_array(env, &[0xefu8; 32]);
55
+
56
+ // Set payload hashes for different nonces
57
+ env.as_contract(&endpoint_client.address, || EndpointV2::inbound(env, &receiver, src_eid, &sender, 1, &hash1));
58
+ env.as_contract(&endpoint_client.address, || EndpointV2::inbound(env, &receiver, src_eid, &sender, 5, &hash2));
59
+ env.as_contract(&endpoint_client.address, || EndpointV2::inbound(env, &receiver, src_eid, &sender, 10, &hash3));
60
+
61
+ // Verify each nonce has its own independent payload hash
62
+ let retrieved_hash1 = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &1);
63
+ let retrieved_hash2 = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &5);
64
+ let retrieved_hash3 = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &10);
65
+
66
+ assert_eq!(retrieved_hash1, Some(hash1));
67
+ assert_eq!(retrieved_hash2, Some(hash2));
68
+ assert_eq!(retrieved_hash3, Some(hash3));
69
+
70
+ // Verify unset nonces return None
71
+ let unset_hash = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &2);
72
+ assert_eq!(unset_hash, None);
73
+ }
74
+
75
+ #[test]
76
+ fn test_inbound_payload_hash_different_receivers() {
77
+ let test_setup = setup();
78
+ let env = &test_setup.env;
79
+ let endpoint_client = &test_setup.endpoint_client;
80
+
81
+ let receiver1 = Address::generate(env);
82
+ let receiver2 = Address::generate(env);
83
+ let src_eid = 2;
84
+ let sender = BytesN::from_array(env, &[1u8; 32]);
85
+ let nonce = 1;
86
+ let hash1 = BytesN::from_array(env, &[0xabu8; 32]);
87
+ let hash2 = BytesN::from_array(env, &[0xcdu8; 32]);
88
+
89
+ // Set payload hashes for different receivers
90
+ env.as_contract(&endpoint_client.address, || EndpointV2::inbound(env, &receiver1, src_eid, &sender, nonce, &hash1));
91
+ env.as_contract(&endpoint_client.address, || EndpointV2::inbound(env, &receiver2, src_eid, &sender, nonce, &hash2));
92
+
93
+ // Verify each receiver has its own independent payload hash
94
+ let retrieved_hash1 = endpoint_client.inbound_payload_hash(&receiver1, &src_eid, &sender, &nonce);
95
+ let retrieved_hash2 = endpoint_client.inbound_payload_hash(&receiver2, &src_eid, &sender, &nonce);
96
+
97
+ assert_eq!(retrieved_hash1, Some(hash1));
98
+ assert_eq!(retrieved_hash2, Some(hash2));
99
+
100
+ // Verify a third receiver returns None
101
+ let receiver3 = Address::generate(env);
102
+ let unset_hash = endpoint_client.inbound_payload_hash(&receiver3, &src_eid, &sender, &nonce);
103
+ assert_eq!(unset_hash, None);
104
+ }
105
+
106
+ #[test]
107
+ fn test_inbound_payload_hash_different_src_eids() {
108
+ let test_setup = setup();
109
+ let env = &test_setup.env;
110
+ let endpoint_client = &test_setup.endpoint_client;
111
+
112
+ let receiver = Address::generate(env);
113
+ let src_eid1 = 2;
114
+ let src_eid2 = 3;
115
+ let sender = BytesN::from_array(env, &[1u8; 32]);
116
+ let nonce = 1;
117
+ let hash1 = BytesN::from_array(env, &[0xabu8; 32]);
118
+ let hash2 = BytesN::from_array(env, &[0xcdu8; 32]);
119
+
120
+ // Set payload hashes for different source EIDs
121
+ env.as_contract(&endpoint_client.address, || EndpointV2::inbound(env, &receiver, src_eid1, &sender, nonce, &hash1));
122
+ env.as_contract(&endpoint_client.address, || EndpointV2::inbound(env, &receiver, src_eid2, &sender, nonce, &hash2));
123
+
124
+ // Verify each src_eid has its own independent payload hash
125
+ let retrieved_hash1 = endpoint_client.inbound_payload_hash(&receiver, &src_eid1, &sender, &nonce);
126
+ let retrieved_hash2 = endpoint_client.inbound_payload_hash(&receiver, &src_eid2, &sender, &nonce);
127
+
128
+ assert_eq!(retrieved_hash1, Some(hash1));
129
+ assert_eq!(retrieved_hash2, Some(hash2));
130
+
131
+ // Verify a third src_eid returns None
132
+ let src_eid3 = 4;
133
+ let unset_hash = endpoint_client.inbound_payload_hash(&receiver, &src_eid3, &sender, &nonce);
134
+ assert_eq!(unset_hash, None);
135
+ }
136
+
137
+ #[test]
138
+ fn test_inbound_payload_hash_different_senders() {
139
+ let test_setup = setup();
140
+ let env = &test_setup.env;
141
+ let endpoint_client = &test_setup.endpoint_client;
142
+
143
+ let receiver = Address::generate(env);
144
+ let src_eid = 2;
145
+ let sender1 = BytesN::from_array(env, &[1u8; 32]);
146
+ let sender2 = BytesN::from_array(env, &[2u8; 32]);
147
+ let nonce = 1;
148
+ let hash1 = BytesN::from_array(env, &[0xabu8; 32]);
149
+ let hash2 = BytesN::from_array(env, &[0xcdu8; 32]);
150
+
151
+ // Set payload hashes for different senders
152
+ env.as_contract(&endpoint_client.address, || EndpointV2::inbound(env, &receiver, src_eid, &sender1, nonce, &hash1));
153
+ env.as_contract(&endpoint_client.address, || EndpointV2::inbound(env, &receiver, src_eid, &sender2, nonce, &hash2));
154
+
155
+ // Verify each sender has its own independent payload hash
156
+ let retrieved_hash1 = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender1, &nonce);
157
+ let retrieved_hash2 = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender2, &nonce);
158
+
159
+ assert_eq!(retrieved_hash1, Some(hash1));
160
+ assert_eq!(retrieved_hash2, Some(hash2));
161
+
162
+ // Verify a third sender returns None
163
+ let sender3 = BytesN::from_array(env, &[3u8; 32]);
164
+ let unset_hash = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender3, &nonce);
165
+ assert_eq!(unset_hash, None);
166
+ }
167
+
168
+ #[test]
169
+ fn test_inbound_payload_hash_after_removal() {
170
+ let test_setup = setup();
171
+ let env = &test_setup.env;
172
+ let endpoint_client = &test_setup.endpoint_client;
173
+
174
+ let receiver = Address::generate(env);
175
+ let src_eid = 2;
176
+ let sender = BytesN::from_array(env, &[1u8; 32]);
177
+ let nonce = 1;
178
+ let payload_hash = BytesN::from_array(env, &[0xabu8; 32]);
179
+
180
+ // Set payload hash
181
+ env.as_contract(&endpoint_client.address, || {
182
+ EndpointV2::inbound(env, &receiver, src_eid, &sender, nonce, &payload_hash)
183
+ });
184
+
185
+ // Verify payload hash is set
186
+ let retrieved_before = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &nonce);
187
+ assert_eq!(retrieved_before, Some(payload_hash));
188
+
189
+ // Remove payload hash
190
+ env.as_contract(&endpoint_client.address, || {
191
+ storage::EndpointStorage::remove_inbound_payload_hash(env, &receiver, src_eid, &sender, nonce)
192
+ });
193
+
194
+ // Verify payload hash is removed
195
+ let retrieved_after = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &nonce);
196
+ assert_eq!(retrieved_after, None);
197
+ }
198
+
199
+ #[test]
200
+ fn test_inbound_payload_hash_overwrite() {
201
+ let test_setup = setup();
202
+ let env = &test_setup.env;
203
+ let endpoint_client = &test_setup.endpoint_client;
204
+
205
+ let receiver = Address::generate(env);
206
+ let src_eid = 2;
207
+ let sender = BytesN::from_array(env, &[1u8; 32]);
208
+ let nonce = 1;
209
+ let initial_hash = BytesN::from_array(env, &[0xabu8; 32]);
210
+ let new_hash = BytesN::from_array(env, &[0xcdu8; 32]);
211
+
212
+ // Set initial payload hash
213
+ env.as_contract(&endpoint_client.address, || {
214
+ storage::EndpointStorage::set_inbound_payload_hash(env, &receiver, src_eid, &sender, nonce, &initial_hash)
215
+ });
216
+
217
+ let retrieved_initial = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &nonce);
218
+ assert_eq!(retrieved_initial, Some(initial_hash));
219
+
220
+ // Overwrite with new payload hash
221
+ env.as_contract(&endpoint_client.address, || {
222
+ storage::EndpointStorage::set_inbound_payload_hash(env, &receiver, src_eid, &sender, nonce, &new_hash)
223
+ });
224
+
225
+ let retrieved_new = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &nonce);
226
+ assert_eq!(retrieved_new, Some(new_hash));
227
+ }
228
+
229
+ #[test]
230
+ fn test_inbound_payload_hash_multiple_paths_independence() {
231
+ let test_setup = setup();
232
+ let env = &test_setup.env;
233
+ let endpoint_client = &test_setup.endpoint_client;
234
+
235
+ let receiver1 = Address::generate(env);
236
+ let receiver2 = Address::generate(env);
237
+ let src_eid1 = 2;
238
+ let src_eid2 = 3;
239
+ let sender1 = BytesN::from_array(env, &[1u8; 32]);
240
+ let sender2 = BytesN::from_array(env, &[2u8; 32]);
241
+ let nonce = 1;
242
+
243
+ let hash_r1_e1_s1 = BytesN::from_array(env, &[0x11u8; 32]);
244
+ let hash_r1_e1_s2 = BytesN::from_array(env, &[0x12u8; 32]);
245
+ let hash_r1_e2_s1 = BytesN::from_array(env, &[0x13u8; 32]);
246
+ let hash_r2_e1_s1 = BytesN::from_array(env, &[0x14u8; 32]);
247
+
248
+ // Set payload hashes for different combinations
249
+ env.as_contract(&endpoint_client.address, || {
250
+ EndpointV2::inbound(env, &receiver1, src_eid1, &sender1, nonce, &hash_r1_e1_s1)
251
+ });
252
+ env.as_contract(&endpoint_client.address, || {
253
+ EndpointV2::inbound(env, &receiver1, src_eid1, &sender2, nonce, &hash_r1_e1_s2)
254
+ });
255
+ env.as_contract(&endpoint_client.address, || {
256
+ EndpointV2::inbound(env, &receiver1, src_eid2, &sender1, nonce, &hash_r1_e2_s1)
257
+ });
258
+ env.as_contract(&endpoint_client.address, || {
259
+ EndpointV2::inbound(env, &receiver2, src_eid1, &sender1, nonce, &hash_r2_e1_s1)
260
+ });
261
+
262
+ // Verify all paths are independent
263
+ assert_eq!(endpoint_client.inbound_payload_hash(&receiver1, &src_eid1, &sender1, &nonce), Some(hash_r1_e1_s1));
264
+ assert_eq!(endpoint_client.inbound_payload_hash(&receiver1, &src_eid1, &sender2, &nonce), Some(hash_r1_e1_s2));
265
+ assert_eq!(endpoint_client.inbound_payload_hash(&receiver1, &src_eid2, &sender1, &nonce), Some(hash_r1_e2_s1));
266
+ assert_eq!(endpoint_client.inbound_payload_hash(&receiver2, &src_eid1, &sender1, &nonce), Some(hash_r2_e1_s1));
267
+
268
+ // Verify unset paths return None
269
+ assert_eq!(endpoint_client.inbound_payload_hash(&receiver2, &src_eid1, &sender2, &nonce), None);
270
+ assert_eq!(endpoint_client.inbound_payload_hash(&receiver2, &src_eid2, &sender1, &nonce), None);
271
+ assert_eq!(endpoint_client.inbound_payload_hash(&receiver2, &src_eid2, &sender2, &nonce), None);
272
+ }
273
+
274
+ #[test]
275
+ fn test_inbound_payload_hash_zero_hash() {
276
+ let test_setup = setup();
277
+ let env = &test_setup.env;
278
+ let endpoint_client = &test_setup.endpoint_client;
279
+
280
+ let receiver = Address::generate(env);
281
+ let src_eid = 2;
282
+ let sender = BytesN::from_array(env, &[1u8; 32]);
283
+ let nonce = 1;
284
+ let zero_hash = BytesN::from_array(env, &[0u8; 32]);
285
+
286
+ // Set zero hash (should be allowed by storage, even though inbound function rejects it)
287
+ env.as_contract(&endpoint_client.address, || {
288
+ storage::EndpointStorage::set_inbound_payload_hash(env, &receiver, src_eid, &sender, nonce, &zero_hash)
289
+ });
290
+
291
+ // Verify zero hash is retrieved correctly
292
+ let retrieved_hash = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &nonce);
293
+ assert_eq!(retrieved_hash, Some(zero_hash));
294
+ }
295
+
296
+ #[test]
297
+ fn test_inbound_payload_hash_max_hash() {
298
+ let test_setup = setup();
299
+ let env = &test_setup.env;
300
+ let endpoint_client = &test_setup.endpoint_client;
301
+
302
+ let receiver = Address::generate(env);
303
+ let src_eid = 2;
304
+ let sender = BytesN::from_array(env, &[1u8; 32]);
305
+ let nonce = 1;
306
+ let max_hash = BytesN::from_array(env, &[0xffu8; 32]);
307
+
308
+ // Set max hash
309
+ env.as_contract(&endpoint_client.address, || {
310
+ storage::EndpointStorage::set_inbound_payload_hash(env, &receiver, src_eid, &sender, nonce, &max_hash)
311
+ });
312
+
313
+ // Verify max hash is retrieved correctly
314
+ let retrieved_hash = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &nonce);
315
+ assert_eq!(retrieved_hash, Some(max_hash));
316
+ }