@layerzerolabs/protocol-stellar-v2 0.2.13 → 0.2.15

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 (319) hide show
  1. package/.turbo/turbo-build.log +384 -278
  2. package/.turbo/turbo-lint.log +110 -78
  3. package/.turbo/turbo-test.log +1248 -1014
  4. package/Cargo.lock +130 -3
  5. package/Cargo.toml +2 -1
  6. package/contracts/common-macros/src/contract_impl.rs +6 -1
  7. package/contracts/common-macros/src/lib.rs +47 -8
  8. package/contracts/common-macros/src/ownable.rs +7 -25
  9. package/contracts/common-macros/src/storage.rs +1 -1
  10. package/contracts/common-macros/src/tests/contract_impl.rs +5 -0
  11. package/contracts/common-macros/src/tests/mod.rs +1 -0
  12. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_impl__snapshot_generated_contract_impl_code.snap +23 -7
  13. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +5 -25
  14. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__storage__snapshot_generated_storage_code.snap +48 -48
  15. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +5 -25
  16. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +21 -0
  17. package/contracts/common-macros/src/tests/upgradeable.rs +31 -0
  18. package/contracts/common-macros/src/ttl_configurable.rs +14 -44
  19. package/contracts/common-macros/src/upgradeable.rs +76 -0
  20. package/contracts/endpoint-v2/src/endpoint_v2.rs +25 -1
  21. package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +175 -8
  22. package/contracts/endpoint-v2/src/tests/endpoint_v2/build_outbound_packet.rs +76 -0
  23. package/contracts/endpoint-v2/src/tests/endpoint_v2/clear.rs +342 -159
  24. package/contracts/endpoint-v2/src/tests/endpoint_v2/delegate.rs +3 -15
  25. package/contracts/endpoint-v2/src/tests/endpoint_v2/initializable.rs +20 -31
  26. package/contracts/endpoint-v2/src/tests/endpoint_v2/lz_receive_alert.rs +126 -164
  27. package/contracts/endpoint-v2/src/tests/endpoint_v2/mod.rs +1 -0
  28. package/contracts/endpoint-v2/src/tests/endpoint_v2/native_token.rs +0 -1
  29. package/contracts/endpoint-v2/src/tests/endpoint_v2/owner.rs +0 -1
  30. package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +311 -304
  31. package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +423 -96
  32. package/contracts/endpoint-v2/src/tests/endpoint_v2/recover_token.rs +1 -1
  33. package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +47 -20
  34. package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +373 -403
  35. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_delegate.rs +96 -22
  36. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +61 -9
  37. package/contracts/endpoint-v2/src/tests/endpoint_v2/transfer_ownership.rs +4 -4
  38. package/contracts/endpoint-v2/src/tests/endpoint_v2/ttl_config.rs +8 -11
  39. package/contracts/endpoint-v2/src/tests/endpoint_v2/verifiable.rs +81 -30
  40. package/contracts/endpoint-v2/src/tests/endpoint_v2/verify.rs +209 -76
  41. package/contracts/endpoint-v2/src/tests/endpoint_v2/zro.rs +0 -1
  42. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library.rs +24 -0
  43. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library_timeout.rs +40 -0
  44. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_send_library.rs +24 -0
  45. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_config.rs +108 -0
  46. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_library_index.rs +52 -0
  47. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_receive_library.rs +92 -0
  48. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_registered_libraries.rs +74 -0
  49. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_send_library.rs +83 -0
  50. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_registered_library.rs +32 -0
  51. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_supported_eid.rs +28 -0
  52. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_valid_receive_library.rs +261 -0
  53. package/contracts/endpoint-v2/src/tests/message_lib_manager/mod.rs +16 -0
  54. package/contracts/endpoint-v2/src/tests/message_lib_manager/receive_library_timeout.rs +62 -0
  55. package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +65 -43
  56. package/contracts/endpoint-v2/src/tests/message_lib_manager/registered_libraries_count.rs +42 -0
  57. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +61 -0
  58. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +3 -5
  59. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +59 -0
  60. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +15 -1
  61. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_config.rs +155 -51
  62. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs +114 -92
  63. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_library.rs +235 -132
  64. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_send_library.rs +93 -87
  65. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library.rs +346 -245
  66. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library_timeout.rs +406 -60
  67. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_send_library.rs +252 -78
  68. package/contracts/endpoint-v2/src/tests/message_lib_manager/timeout.rs +102 -0
  69. package/contracts/endpoint-v2/src/tests/messaging_channel/burn.rs +212 -273
  70. package/contracts/endpoint-v2/src/tests/messaging_channel/clear_payload.rs +203 -0
  71. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound.rs +94 -0
  72. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_nonce.rs +78 -248
  73. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_payload_hash.rs +7 -282
  74. package/contracts/endpoint-v2/src/tests/messaging_channel/lazy_inbound_nonce.rs +6 -274
  75. package/contracts/endpoint-v2/src/tests/messaging_channel/mod.rs +3 -2
  76. package/contracts/endpoint-v2/src/tests/messaging_channel/next_guid.rs +86 -178
  77. package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +328 -212
  78. package/contracts/endpoint-v2/src/tests/messaging_channel/outbound.rs +68 -0
  79. package/contracts/endpoint-v2/src/tests/messaging_channel/outbound_nonce.rs +6 -209
  80. package/contracts/endpoint-v2/src/tests/messaging_channel/skip.rs +207 -159
  81. package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +142 -153
  82. package/contracts/endpoint-v2/src/tests/messaging_composer/compose_queue.rs +6 -179
  83. package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +163 -221
  84. package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +90 -121
  85. package/contracts/endpoint-v2/src/tests/mock.rs +18 -4
  86. package/contracts/endpoint-v2/src/tests/util/build_payload.rs +4 -70
  87. package/contracts/endpoint-v2/src/tests/util/compute_guid.rs +2 -1
  88. package/contracts/endpoint-v2/src/tests/util/keccak256.rs +17 -106
  89. package/contracts/layerzero-views/Cargo.toml +35 -0
  90. package/contracts/layerzero-views/src/errors.rs +10 -0
  91. package/contracts/layerzero-views/src/layerzero_view.rs +229 -0
  92. package/contracts/layerzero-views/src/lib.rs +38 -0
  93. package/contracts/layerzero-views/src/storage.rs +18 -0
  94. package/contracts/layerzero-views/src/tests/layerzero_view_tests.rs +423 -0
  95. package/contracts/layerzero-views/src/tests/mod.rs +4 -0
  96. package/contracts/layerzero-views/src/tests/setup.rs +377 -0
  97. package/contracts/layerzero-views/src/types.rs +50 -0
  98. package/contracts/macro-integration-tests/Cargo.toml +30 -0
  99. package/contracts/macro-integration-tests/src/lib.rs +1 -0
  100. package/contracts/macro-integration-tests/tests/runtime/ownable/initialization.rs +62 -0
  101. package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +22 -0
  102. package/contracts/macro-integration-tests/tests/runtime/ownable/only_owner_guard.rs +97 -0
  103. package/contracts/macro-integration-tests/tests/runtime/ownable/ownership_transfer.rs +101 -0
  104. package/contracts/macro-integration-tests/tests/runtime/storage/keyed_roundtrip.rs +225 -0
  105. package/contracts/macro-integration-tests/tests/runtime/storage/mod.rs +4 -0
  106. package/contracts/macro-integration-tests/tests/runtime/storage/name_override_runtime.rs +52 -0
  107. package/contracts/macro-integration-tests/tests/runtime/storage/ttl_extension.rs +261 -0
  108. package/contracts/macro-integration-tests/tests/runtime/storage/unkeyed_roundtrip.rs +137 -0
  109. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +113 -0
  110. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/extend_instance_ttl.rs +50 -0
  111. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +139 -0
  112. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/mod.rs +3 -0
  113. package/contracts/macro-integration-tests/tests/runtime.rs +5 -0
  114. package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.rs +12 -0
  115. package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.stderr +7 -0
  116. package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.rs +12 -0
  117. package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.stderr +7 -0
  118. package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.rs +21 -0
  119. package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.stderr +7 -0
  120. package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.rs +13 -0
  121. package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.stderr +7 -0
  122. package/contracts/macro-integration-tests/tests/ui/error/pass/attr_on_variant_allowed.rs +20 -0
  123. package/contracts/macro-integration-tests/tests/ui/error/pass/basic_auto_discriminants.rs +15 -0
  124. package/contracts/macro-integration-tests/tests/ui/error/pass/mixed_discriminants.rs +16 -0
  125. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_owner_missing_env.rs +22 -0
  126. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_owner_missing_env.stderr +16 -0
  127. package/contracts/macro-integration-tests/tests/ui/ownable/pass/minimal_contract.rs +26 -0
  128. package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +22 -0
  129. package/contracts/macro-integration-tests/tests/ui/ownable/pass/only_owner_env_param_variants.rs +46 -0
  130. package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.rs +13 -0
  131. package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.stderr +7 -0
  132. package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.rs +13 -0
  133. package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.stderr +7 -0
  134. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.rs +10 -0
  135. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.stderr +7 -0
  136. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.rs +12 -0
  137. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.stderr +7 -0
  138. package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.rs +10 -0
  139. package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.stderr +7 -0
  140. package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.rs +10 -0
  141. package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.stderr +7 -0
  142. package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.rs +12 -0
  143. package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.stderr +7 -0
  144. package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.rs +13 -0
  145. package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.stderr +7 -0
  146. package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.rs +13 -0
  147. package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.stderr +7 -0
  148. package/contracts/macro-integration-tests/tests/ui/storage/pass/default_value_on_variant.rs +14 -0
  149. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_instance_unit_basic.rs +14 -0
  150. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_persistent_named_fields_keyed.rs +16 -0
  151. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_temporary_unit_option.rs +15 -0
  152. package/contracts/macro-integration-tests/tests/ui/storage/pass/name_override.rs +14 -0
  153. package/contracts/macro-integration-tests/tests/ui/storage/pass/no_auto_ttl_extension.rs +19 -0
  154. package/contracts/macro-integration-tests/tests/ui/storage/pass/ttl_provider_basic.rs +15 -0
  155. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/minimal_contract.rs +44 -0
  156. package/contracts/macro-integration-tests/tests/ui_error.rs +11 -0
  157. package/contracts/macro-integration-tests/tests/ui_ownable.rs +11 -0
  158. package/contracts/macro-integration-tests/tests/ui_storage.rs +11 -0
  159. package/contracts/macro-integration-tests/tests/ui_ttl_configurable.rs +12 -0
  160. package/contracts/message-libs/blocked-message-lib/src/lib.rs +17 -17
  161. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/decode_packet_header.rs +64 -0
  162. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet.rs +58 -0
  163. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet_header.rs +138 -0
  164. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/mod.rs +6 -0
  165. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload.rs +30 -0
  166. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload_hash.rs +15 -0
  167. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/test_helper.rs +39 -0
  168. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_dvn_option.rs +57 -0
  169. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_lz_receive_option.rs +50 -0
  170. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_native_drop_option.rs +74 -0
  171. package/contracts/message-libs/message-lib-common/src/tests/worker_options/convert_legacy_options.rs +280 -0
  172. package/contracts/message-libs/message-lib-common/src/tests/worker_options/extract_type_3_options.rs +126 -0
  173. package/contracts/message-libs/message-lib-common/src/tests/worker_options/left_pad_to_bytes32.rs +48 -0
  174. package/contracts/message-libs/message-lib-common/src/tests/worker_options/mod.rs +7 -0
  175. package/contracts/message-libs/message-lib-common/src/tests/worker_options/split_worker_options.rs +139 -0
  176. package/contracts/message-libs/message-lib-common/src/worker_options.rs +31 -1
  177. package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +2 -2
  178. package/contracts/message-libs/treasury/src/errors.rs +0 -1
  179. package/contracts/message-libs/treasury/src/lib.rs +3 -3
  180. package/contracts/message-libs/treasury/src/storage.rs +2 -0
  181. package/contracts/message-libs/treasury/src/treasury.rs +12 -13
  182. package/contracts/message-libs/uln-302/Cargo.toml +1 -1
  183. package/contracts/message-libs/uln-302/src/errors.rs +0 -5
  184. package/contracts/message-libs/uln-302/src/events.rs +5 -6
  185. package/contracts/message-libs/uln-302/src/receive_uln.rs +24 -54
  186. package/contracts/message-libs/uln-302/src/send_uln.rs +89 -135
  187. package/contracts/message-libs/uln-302/src/storage.rs +5 -5
  188. package/contracts/message-libs/uln-302/src/tests/receive_uln302/effective_receive_uln_config.rs +5 -7
  189. package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs +3 -3
  190. package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_send_uln_config.rs +6 -9
  191. package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_executor_configs.rs +2 -2
  192. package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_send_uln_configs.rs +3 -3
  193. package/contracts/message-libs/uln-302/src/tests/setup.rs +9 -0
  194. package/contracts/message-libs/uln-302/src/tests/testing_utils.rs +5 -0
  195. package/contracts/message-libs/uln-302/src/tests/uln302/get_app_receive_uln_config.rs +1 -2
  196. package/contracts/message-libs/uln-302/src/tests/uln302/get_app_send_uln_config.rs +1 -2
  197. package/contracts/message-libs/uln-302/src/tests/uln302/set_config.rs +37 -55
  198. package/contracts/message-libs/uln-302/src/uln302.rs +8 -5
  199. package/contracts/oapps/counter/src/counter.rs +0 -1
  200. package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +306 -224
  201. package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +0 -1
  202. package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +0 -1
  203. package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +0 -1
  204. package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +0 -1
  205. package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_core.rs +1 -0
  206. package/contracts/oapps/oft/integration-tests/setup.rs +10 -3
  207. package/contracts/oapps/oft/integration-tests/utils.rs +1 -1
  208. package/contracts/oapps/oft/src/default_oft_impl.rs +9 -3
  209. package/contracts/oapps/oft/src/extensions/oft_fee.rs +5 -5
  210. package/contracts/oapps/oft/src/extensions/pausable.rs +1 -1
  211. package/contracts/oapps/oft/src/extensions/rate_limiter.rs +18 -18
  212. package/contracts/oapps/oft/src/oft.rs +9 -9
  213. package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +1 -1
  214. package/contracts/oapps/oft/src/tests/extensions/setup.rs +26 -11
  215. package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +1 -1
  216. package/contracts/oapps/oft/src/tests/test_send.rs +4 -4
  217. package/contracts/oapps/oft/src/tests/test_utils.rs +93 -74
  218. package/contracts/oapps/oft-std/Cargo.toml +6 -0
  219. package/contracts/oapps/oft-std/integration-tests/extensions/mod.rs +3 -0
  220. package/contracts/oapps/oft-std/integration-tests/extensions/test_oft_fee.rs +157 -0
  221. package/contracts/oapps/oft-std/integration-tests/extensions/test_pausable.rs +162 -0
  222. package/contracts/oapps/oft-std/integration-tests/extensions/test_rate_limiter.rs +186 -0
  223. package/contracts/oapps/oft-std/integration-tests/mod.rs +3 -0
  224. package/contracts/oapps/oft-std/integration-tests/setup.rs +245 -0
  225. package/contracts/oapps/oft-std/integration-tests/utils.rs +427 -0
  226. package/contracts/oapps/oft-std/src/lib.rs +12 -1
  227. package/contracts/oapps/oft-std/src/oft.rs +122 -25
  228. package/contracts/upgrader/Cargo.toml +19 -0
  229. package/contracts/upgrader/src/lib.rs +96 -0
  230. package/contracts/upgrader/src/tests/mod.rs +1 -0
  231. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract1.wasm +0 -0
  232. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract2.wasm +0 -0
  233. package/contracts/upgrader/src/tests/test_upgrader.rs +120 -0
  234. package/contracts/utils/src/errors.rs +6 -1
  235. package/contracts/utils/src/lib.rs +2 -1
  236. package/contracts/utils/src/ownable.rs +49 -61
  237. package/contracts/utils/src/tests/mod.rs +3 -1
  238. package/contracts/utils/src/tests/option_ext.rs +21 -0
  239. package/contracts/utils/src/tests/ownable.rs +10 -69
  240. package/contracts/utils/src/tests/ttl_configurable.rs +596 -0
  241. package/contracts/utils/src/tests/upgradeable.rs +288 -0
  242. package/contracts/utils/src/{ttl.rs → ttl_configurable.rs} +67 -52
  243. package/contracts/utils/src/upgradeable.rs +54 -0
  244. package/contracts/workers/dvn/Cargo.toml +1 -1
  245. package/contracts/workers/dvn/src/auth.rs +21 -32
  246. package/contracts/workers/dvn/src/dvn.rs +40 -3
  247. package/contracts/workers/dvn/src/errors.rs +1 -0
  248. package/contracts/workers/dvn/src/multisig.rs +10 -6
  249. package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +2 -2
  250. package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +4 -4
  251. package/contracts/workers/dvn-fee-lib/Cargo.toml +1 -2
  252. package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +46 -14
  253. package/contracts/workers/dvn-fee-lib/src/errors.rs +3 -2
  254. package/contracts/workers/dvn-fee-lib/src/lib.rs +5 -11
  255. package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +30 -16
  256. package/contracts/workers/executor/src/executor.rs +16 -2
  257. package/contracts/workers/executor-fee-lib/src/errors.rs +9 -7
  258. package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +154 -119
  259. package/contracts/workers/executor-helper/Cargo.toml +0 -5
  260. package/contracts/workers/executor-helper/src/lib.rs +1 -7
  261. package/contracts/workers/price-feed/Cargo.toml +0 -1
  262. package/contracts/workers/price-feed/src/errors.rs +3 -2
  263. package/contracts/workers/price-feed/src/lib.rs +5 -6
  264. package/contracts/workers/price-feed/src/price_feed.rs +39 -17
  265. package/contracts/workers/worker/Cargo.toml +4 -0
  266. package/contracts/workers/worker/src/interfaces/price_feed.rs +3 -3
  267. package/contracts/workers/worker/src/lib.rs +2 -2
  268. package/contracts/workers/worker/src/tests/mod.rs +4 -0
  269. package/contracts/workers/worker/src/tests/setup.rs +147 -0
  270. package/contracts/workers/worker/src/tests/worker.rs +501 -0
  271. package/contracts/workers/worker/src/worker.rs +10 -16
  272. package/package.json +3 -3
  273. package/sdk/dist/generated/bml.d.ts +40 -30
  274. package/sdk/dist/generated/bml.js +16 -11
  275. package/sdk/dist/generated/counter.d.ts +168 -134
  276. package/sdk/dist/generated/counter.js +26 -21
  277. package/sdk/dist/generated/dvn.d.ts +1932 -0
  278. package/sdk/dist/generated/dvn.js +288 -0
  279. package/sdk/dist/generated/dvn_fee_lib.d.ts +615 -0
  280. package/sdk/dist/generated/dvn_fee_lib.js +123 -0
  281. package/sdk/dist/generated/endpoint.d.ts +75 -41
  282. package/sdk/dist/generated/endpoint.js +22 -17
  283. package/sdk/dist/generated/executor.d.ts +1809 -0
  284. package/sdk/dist/generated/executor.js +269 -0
  285. package/sdk/dist/generated/executor_fee_lib.d.ts +999 -0
  286. package/sdk/dist/generated/executor_fee_lib.js +208 -0
  287. package/sdk/dist/generated/executor_helper.d.ts +869 -0
  288. package/sdk/dist/generated/executor_helper.js +187 -0
  289. package/sdk/dist/generated/oft_std.d.ts +1544 -0
  290. package/sdk/dist/generated/oft_std.js +271 -0
  291. package/sdk/dist/generated/price_feed.d.ts +1002 -0
  292. package/sdk/dist/generated/price_feed.js +170 -0
  293. package/sdk/dist/generated/sml.d.ts +75 -41
  294. package/sdk/dist/generated/sml.js +22 -17
  295. package/sdk/dist/generated/uln302.d.ts +79 -60
  296. package/sdk/dist/generated/uln302.js +37 -37
  297. package/sdk/dist/generated/upgrader.d.ts +70 -0
  298. package/sdk/dist/generated/upgrader.js +19 -0
  299. package/sdk/dist/index.d.ts +8 -0
  300. package/sdk/dist/index.js +11 -0
  301. package/sdk/package.json +4 -3
  302. package/sdk/src/index.ts +13 -0
  303. package/sdk/test/index.test.ts +0 -1
  304. package/sdk/test/oft.test.ts +12 -23
  305. package/sdk/test/suites/testUpgradeable.ts +169 -0
  306. package/sdk/test/upgrader.test.ts +309 -0
  307. package/tools/ts-bindings-gen/src/main.rs +11 -1
  308. package/contracts/endpoint-v2/src/tests/messaging_channel/clear.rs +0 -316
  309. package/contracts/endpoint-v2/src/tests/messaging_channel/internal.rs +0 -388
  310. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1.rs +0 -162
  311. package/contracts/message-libs/message-lib-common/src/tests/worker_options.rs +0 -319
  312. package/contracts/utils/src/tests/ttl.rs +0 -421
  313. /package/contracts/{oapp-macros → oapps/oapp-macros}/Cargo.toml +0 -0
  314. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/lib.rs +0 -0
  315. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_full.rs +0 -0
  316. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_options_type3.rs +0 -0
  317. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_receiver.rs +0 -0
  318. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_sender.rs +0 -0
  319. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/util.rs +0 -0
@@ -1,388 +0,0 @@
1
- use soroban_sdk::{testutils::Address as _, Address, Bytes, BytesN};
2
-
3
- use crate::{endpoint_v2::EndpointV2, storage, tests::endpoint_setup::setup};
4
-
5
- // ============================================================================
6
- // Tests for outbound function
7
- // ============================================================================
8
-
9
- #[test]
10
- fn test_outbound() {
11
- let test_setup = setup();
12
- let env = &test_setup.env;
13
- let endpoint_client = &test_setup.endpoint_client;
14
-
15
- let sender = Address::generate(env);
16
- let dst_eid = 2;
17
- let receiver = BytesN::from_array(env, &[1u8; 32]);
18
-
19
- // First call should return nonce 1
20
- let nonce1 = env.as_contract(&endpoint_client.address, || EndpointV2::outbound(env, &sender, dst_eid, &receiver));
21
- assert_eq!(nonce1, 1);
22
-
23
- // Second call should return nonce 2
24
- let nonce2 = env.as_contract(&endpoint_client.address, || EndpointV2::outbound(env, &sender, dst_eid, &receiver));
25
- assert_eq!(nonce2, 2);
26
-
27
- // Third call should return nonce 3
28
- let nonce3 = env.as_contract(&endpoint_client.address, || EndpointV2::outbound(env, &sender, dst_eid, &receiver));
29
- assert_eq!(nonce3, 3);
30
-
31
- // Different sender should have independent nonce counter (starts at 1)
32
- let different_sender = Address::generate(env);
33
- let nonce_diff_sender =
34
- env.as_contract(&endpoint_client.address, || EndpointV2::outbound(env, &different_sender, dst_eid, &receiver));
35
- assert_eq!(nonce_diff_sender, 1);
36
-
37
- // Different dst_eid should have independent nonce counter (starts at 1)
38
- let different_dst_eid = 3;
39
- let nonce_diff_dst =
40
- env.as_contract(&endpoint_client.address, || EndpointV2::outbound(env, &sender, different_dst_eid, &receiver));
41
- assert_eq!(nonce_diff_dst, 1);
42
-
43
- // Different receiver should have independent nonce counter (starts at 1)
44
- let different_receiver = BytesN::from_array(env, &[2u8; 32]);
45
- let nonce_diff_receiver =
46
- env.as_contract(&endpoint_client.address, || EndpointV2::outbound(env, &sender, dst_eid, &different_receiver));
47
- assert_eq!(nonce_diff_receiver, 1);
48
-
49
- // Verify storage was updated correctly for original path
50
- let stored_nonce = env.as_contract(&endpoint_client.address, || {
51
- storage::EndpointStorage::outbound_nonce(env, &sender, dst_eid, &receiver)
52
- });
53
- assert_eq!(stored_nonce, 3);
54
- }
55
-
56
- // ============================================================================
57
- // Tests for inbound function
58
- // ============================================================================
59
-
60
- #[test]
61
- fn test_inbound_success() {
62
- let test_setup = setup();
63
- let env = &test_setup.env;
64
- let endpoint_client = &test_setup.endpoint_client;
65
-
66
- let receiver = Address::generate(env);
67
- let src_eid = 2;
68
- let sender = BytesN::from_array(env, &[1u8; 32]);
69
- let nonce = 1;
70
- let payload_hash = BytesN::from_array(env, &[0xabu8; 32]); // Valid non-empty payload hash
71
-
72
- // Call inbound with non-empty payload hash - should succeed
73
- env.as_contract(&endpoint_client.address, || {
74
- EndpointV2::inbound(env, &receiver, src_eid, &sender, nonce, &payload_hash)
75
- });
76
-
77
- // Verify storage was updated correctly
78
- let stored_hash = env.as_contract(&endpoint_client.address, || {
79
- storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, nonce)
80
- });
81
- assert_eq!(stored_hash, Some(payload_hash.clone()));
82
-
83
- // Test with different nonce for same path
84
- let nonce2 = 2;
85
- let payload_hash2 = BytesN::from_array(env, &[0xcdu8; 32]); // Different payload hash
86
- env.as_contract(&endpoint_client.address, || {
87
- EndpointV2::inbound(env, &receiver, src_eid, &sender, nonce2, &payload_hash2)
88
- });
89
-
90
- let stored_hash2 = env.as_contract(&endpoint_client.address, || {
91
- storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, nonce2)
92
- });
93
- assert_eq!(stored_hash2, Some(payload_hash2.clone()));
94
-
95
- // Test with different receiver - should have independent storage
96
- let different_receiver = Address::generate(env);
97
- let payload_hash3 = BytesN::from_array(env, &[0xefu8; 32]);
98
- env.as_contract(&endpoint_client.address, || {
99
- EndpointV2::inbound(env, &different_receiver, src_eid, &sender, nonce, &payload_hash3)
100
- });
101
-
102
- let stored_hash_diff = env.as_contract(&endpoint_client.address, || {
103
- storage::EndpointStorage::inbound_payload_hash(
104
- env,
105
- &different_receiver,
106
- src_eid,
107
- &sender,
108
- nonce,
109
- )
110
- });
111
- assert_eq!(stored_hash_diff, Some(payload_hash3.clone()));
112
-
113
- // Original receiver's storage should be unchanged
114
- let original_hash = env.as_contract(&endpoint_client.address, || {
115
- storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, nonce)
116
- });
117
- assert_eq!(original_hash, Some(payload_hash));
118
- }
119
-
120
- #[test]
121
- #[should_panic(expected = "Error(Contract, #11)")] // EndpointError::InvalidPayloadHash
122
- fn test_inbound_empty_payload_hash() {
123
- let test_setup = setup();
124
- let env = &test_setup.env;
125
- let endpoint_client = &test_setup.endpoint_client;
126
-
127
- let receiver = Address::generate(env);
128
- let src_eid = 2;
129
- let sender = BytesN::from_array(env, &[1u8; 32]);
130
- let nonce = 1;
131
- let empty_hash = BytesN::from_array(env, &[0u8; 32]); // empty_payload_hash - now invalid
132
-
133
- // Should panic with InvalidPayloadHash error because empty hash is not allowed
134
- env.as_contract(&endpoint_client.address, || {
135
- EndpointV2::inbound(env, &receiver, src_eid, &sender, nonce, &empty_hash)
136
- });
137
- }
138
-
139
- // ============================================================================
140
- // Tests for clear_payload function
141
- // ============================================================================
142
-
143
- #[test]
144
- fn test_clear_payload_success() {
145
- let test_setup = setup();
146
- let env = &test_setup.env;
147
- let endpoint_client = &test_setup.endpoint_client;
148
-
149
- let receiver = Address::generate(env);
150
- let src_eid = 2;
151
- let sender = BytesN::from_array(env, &[1u8; 32]);
152
- let nonce = 1;
153
- let payload = Bytes::from_array(env, &[0xaa, 0xbb, 0xcc]);
154
-
155
- // Compute the expected hash
156
- let payload_hash = env.as_contract(&endpoint_client.address, || {
157
- BytesN::from_array(env, &env.crypto().keccak256(&payload).to_array())
158
- });
159
-
160
- // First store the payload hash via inbound
161
- env.as_contract(&endpoint_client.address, || {
162
- EndpointV2::inbound(env, &receiver, src_eid, &sender, nonce, &payload_hash)
163
- });
164
-
165
- // Verify it's stored
166
- let stored_hash = env.as_contract(&endpoint_client.address, || {
167
- storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, nonce)
168
- });
169
- assert_eq!(stored_hash, Some(payload_hash.clone()));
170
-
171
- // Clear the payload
172
- env.as_contract(&endpoint_client.address, || {
173
- EndpointV2::clear_payload(env, &receiver, src_eid, &sender, nonce, &payload)
174
- });
175
-
176
- // Verify it's removed from storage
177
- let cleared_hash = env.as_contract(&endpoint_client.address, || {
178
- storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, nonce)
179
- });
180
- assert_eq!(cleared_hash, None);
181
-
182
- // Verify lazy nonce was updated
183
- let lazy_nonce = env.as_contract(&endpoint_client.address, || {
184
- storage::EndpointStorage::lazy_inbound_nonce(env, &receiver, src_eid, &sender)
185
- });
186
- assert_eq!(lazy_nonce, nonce);
187
- }
188
-
189
- #[test]
190
- fn test_clear_payload_with_lazy_nonce_update() {
191
- let test_setup = setup();
192
- let env = &test_setup.env;
193
- let endpoint_client = &test_setup.endpoint_client;
194
-
195
- let receiver = Address::generate(env);
196
- let src_eid = 2;
197
- let sender = BytesN::from_array(env, &[1u8; 32]);
198
-
199
- // Store three payloads (nonce 1, 2, 3)
200
- let payload1 = Bytes::from_array(env, &[0x01]);
201
- let payload2 = Bytes::from_array(env, &[0x02]);
202
- let payload3 = Bytes::from_array(env, &[0x03]);
203
-
204
- let hash1 = env.as_contract(&endpoint_client.address, || {
205
- BytesN::from_array(env, &env.crypto().keccak256(&payload1).to_array())
206
- });
207
- let hash2 = env.as_contract(&endpoint_client.address, || {
208
- BytesN::from_array(env, &env.crypto().keccak256(&payload2).to_array())
209
- });
210
- let hash3 = env.as_contract(&endpoint_client.address, || {
211
- BytesN::from_array(env, &env.crypto().keccak256(&payload3).to_array())
212
- });
213
-
214
- env.as_contract(&endpoint_client.address, || EndpointV2::inbound(env, &receiver, src_eid, &sender, 1, &hash1));
215
- env.as_contract(&endpoint_client.address, || EndpointV2::inbound(env, &receiver, src_eid, &sender, 2, &hash2));
216
- env.as_contract(&endpoint_client.address, || EndpointV2::inbound(env, &receiver, src_eid, &sender, 3, &hash3));
217
-
218
- // Lazy nonce should be 0 (not updated yet)
219
- let lazy_nonce = env.as_contract(&endpoint_client.address, || {
220
- storage::EndpointStorage::lazy_inbound_nonce(env, &receiver, src_eid, &sender)
221
- });
222
- assert_eq!(lazy_nonce, 0);
223
-
224
- // Clear payload 3 directly (skipping 1 and 2)
225
- env.as_contract(&endpoint_client.address, || {
226
- EndpointV2::clear_payload(env, &receiver, src_eid, &sender, 3, &payload3)
227
- });
228
-
229
- // Lazy nonce should be updated to 3
230
- let lazy_nonce = env.as_contract(&endpoint_client.address, || {
231
- storage::EndpointStorage::lazy_inbound_nonce(env, &receiver, src_eid, &sender)
232
- });
233
- assert_eq!(lazy_nonce, 3);
234
-
235
- // Payload 3 should be cleared
236
- let hash3_after = env.as_contract(&endpoint_client.address, || {
237
- storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, 3)
238
- });
239
- assert_eq!(hash3_after, None);
240
- }
241
-
242
- #[test]
243
- fn test_clear_payload_sequential() {
244
- let test_setup = setup();
245
- let env = &test_setup.env;
246
- let endpoint_client = &test_setup.endpoint_client;
247
-
248
- let receiver = Address::generate(env);
249
- let src_eid = 2;
250
- let sender = BytesN::from_array(env, &[1u8; 32]);
251
-
252
- // Store three payloads
253
- let payload1 = Bytes::from_array(env, &[0x01]);
254
- let payload2 = Bytes::from_array(env, &[0x02]);
255
- let payload3 = Bytes::from_array(env, &[0x03]);
256
-
257
- let hash1 = env.as_contract(&endpoint_client.address, || {
258
- BytesN::from_array(env, &env.crypto().keccak256(&payload1).to_array())
259
- });
260
- let hash2 = env.as_contract(&endpoint_client.address, || {
261
- BytesN::from_array(env, &env.crypto().keccak256(&payload2).to_array())
262
- });
263
- let hash3 = env.as_contract(&endpoint_client.address, || {
264
- BytesN::from_array(env, &env.crypto().keccak256(&payload3).to_array())
265
- });
266
-
267
- env.as_contract(&endpoint_client.address, || EndpointV2::inbound(env, &receiver, src_eid, &sender, 1, &hash1));
268
- env.as_contract(&endpoint_client.address, || EndpointV2::inbound(env, &receiver, src_eid, &sender, 2, &hash2));
269
- env.as_contract(&endpoint_client.address, || EndpointV2::inbound(env, &receiver, src_eid, &sender, 3, &hash3));
270
-
271
- // Clear them in order: 1, 2, 3
272
- env.as_contract(&endpoint_client.address, || {
273
- EndpointV2::clear_payload(env, &receiver, src_eid, &sender, 1, &payload1)
274
- });
275
- env.as_contract(&endpoint_client.address, || {
276
- EndpointV2::clear_payload(env, &receiver, src_eid, &sender, 2, &payload2)
277
- });
278
- env.as_contract(&endpoint_client.address, || {
279
- EndpointV2::clear_payload(env, &receiver, src_eid, &sender, 3, &payload3)
280
- });
281
-
282
- // All should be cleared
283
- let hash1_after = env.as_contract(&endpoint_client.address, || {
284
- storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, 1)
285
- });
286
- let hash2_after = env.as_contract(&endpoint_client.address, || {
287
- storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, 2)
288
- });
289
- let hash3_after = env.as_contract(&endpoint_client.address, || {
290
- storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, 3)
291
- });
292
-
293
- assert_eq!(hash1_after, None);
294
- assert_eq!(hash2_after, None);
295
- assert_eq!(hash3_after, None);
296
-
297
- // Lazy nonce should be 3
298
- let lazy_nonce = env.as_contract(&endpoint_client.address, || {
299
- storage::EndpointStorage::lazy_inbound_nonce(env, &receiver, src_eid, &sender)
300
- });
301
- assert_eq!(lazy_nonce, 3);
302
- }
303
-
304
- #[test]
305
- #[should_panic(expected = "Error(Contract, #19)")] // EndpointError::PayloadHashNotFound
306
- fn test_clear_payload_wrong_payload() {
307
- let test_setup = setup();
308
- let env = &test_setup.env;
309
- let endpoint_client = &test_setup.endpoint_client;
310
-
311
- let receiver = Address::generate(env);
312
- let src_eid = 2;
313
- let sender = BytesN::from_array(env, &[1u8; 32]);
314
- let nonce = 1;
315
-
316
- let payload = Bytes::from_array(env, &[0xaa, 0xbb, 0xcc]);
317
- let wrong_payload = Bytes::from_array(env, &[0xdd, 0xee, 0xff]); // Different payload
318
-
319
- let payload_hash = env.as_contract(&endpoint_client.address, || {
320
- BytesN::from_array(env, &env.crypto().keccak256(&payload).to_array())
321
- });
322
-
323
- // Store the correct hash
324
- env.as_contract(&endpoint_client.address, || {
325
- EndpointV2::inbound(env, &receiver, src_eid, &sender, nonce, &payload_hash)
326
- });
327
-
328
- // Try to clear with wrong payload - should panic
329
- env.as_contract(&endpoint_client.address, || {
330
- EndpointV2::clear_payload(env, &receiver, src_eid, &sender, nonce, &wrong_payload)
331
- });
332
- }
333
-
334
- #[test]
335
- #[should_panic(expected = "Error(Contract, #10)")] // EndpointError::InvalidNonce
336
- fn test_clear_payload_not_stored() {
337
- let test_setup = setup();
338
- let env = &test_setup.env;
339
- let endpoint_client = &test_setup.endpoint_client;
340
-
341
- let receiver = Address::generate(env);
342
- let src_eid = 2;
343
- let sender = BytesN::from_array(env, &[1u8; 32]);
344
- let nonce = 1;
345
- let payload = Bytes::from_array(env, &[0xaa, 0xbb, 0xcc]);
346
-
347
- // Try to clear without storing first - should panic with InvalidNonce
348
- // (because intermediate nonce validation fails before checking payload hash)
349
- env.as_contract(&endpoint_client.address, || {
350
- EndpointV2::clear_payload(env, &receiver, src_eid, &sender, nonce, &payload)
351
- });
352
- }
353
-
354
- #[test]
355
- #[should_panic(expected = "Error(Contract, #10)")] // EndpointError::InvalidNonce
356
- fn test_clear_payload_missing_intermediate_nonce() {
357
- let test_setup = setup();
358
- let env = &test_setup.env;
359
- let endpoint_client = &test_setup.endpoint_client;
360
-
361
- let receiver = Address::generate(env);
362
- let src_eid = 2;
363
- let sender = BytesN::from_array(env, &[1u8; 32]);
364
-
365
- // Store only nonce 1 and 3, skip nonce 2
366
- let payload1 = Bytes::from_array(env, &[0x01]);
367
- let payload3 = Bytes::from_array(env, &[0x03]);
368
-
369
- let hash1 = env.as_contract(&endpoint_client.address, || {
370
- BytesN::from_array(env, &env.crypto().keccak256(&payload1).to_array())
371
- });
372
- let hash3 = env.as_contract(&endpoint_client.address, || {
373
- BytesN::from_array(env, &env.crypto().keccak256(&payload3).to_array())
374
- });
375
-
376
- env.as_contract(&endpoint_client.address, || EndpointV2::inbound(env, &receiver, src_eid, &sender, 1, &hash1));
377
- env.as_contract(&endpoint_client.address, || EndpointV2::inbound(env, &receiver, src_eid, &sender, 3, &hash3));
378
-
379
- // Clear nonce 1 first
380
- env.as_contract(&endpoint_client.address, || {
381
- EndpointV2::clear_payload(env, &receiver, src_eid, &sender, 1, &payload1)
382
- });
383
-
384
- // Try to clear nonce 3 - should panic because nonce 2 is missing
385
- env.as_contract(&endpoint_client.address, || {
386
- EndpointV2::clear_payload(env, &receiver, src_eid, &sender, 3, &payload3)
387
- });
388
- }
@@ -1,162 +0,0 @@
1
- use crate::packet_codec_v1::*;
2
- use endpoint_v2::{
3
- util::{compute_guid, keccak256},
4
- OutboundPacket,
5
- };
6
- use hex_literal::hex;
7
- use soroban_sdk::{address_payload::AddressPayload, Address, Bytes, BytesN, Env};
8
- use utils::buffer_reader::BufferReader;
9
-
10
- // Test constants matching Sui's test values
11
- const TEST_SRC_EID: u32 = 101;
12
- const TEST_DST_EID: u32 = 102;
13
- const TEST_NONCE: u64 = 0x123456789abcdef0;
14
- const TEST_MESSAGE: [u8; 5] = hex!("0102030405");
15
- // @0x1234567890abcdef1234567890abcdef12345678 padded to 32 bytes
16
- const TEST_SENDER_BYTES: [u8; 32] = hex!("0000000000000000000000001234567890abcdef1234567890abcdef12345678");
17
- // @0x9876543210fedcba9876543210fedcba98765432 padded to 32 bytes
18
- const TEST_RECEIVER_BYTES: [u8; 32] = hex!("0000000000000000000000009876543210fedcba9876543210fedcba98765432");
19
-
20
- #[test]
21
- fn test_encode_decode_packet_header() {
22
- let env = Env::default();
23
- let packet = create_test_outbound_packet(&env);
24
-
25
- // Encode the packet header
26
- let encoded_header = encode_packet_header(&env, &packet);
27
-
28
- // Verify the encoded header has the correct length
29
- assert_eq!(encoded_header.len(), HEADER_LENGTH); // HEADER_LENGTH = 81
30
-
31
- // Decode the header back
32
- let decoded_header = decode_packet_header(&env, &encoded_header);
33
-
34
- // Verify all fields match
35
- assert_eq!(decoded_header.version, PACKET_VERSION);
36
- assert_eq!(decoded_header.nonce, TEST_NONCE);
37
- assert_eq!(decoded_header.src_eid, TEST_SRC_EID);
38
- assert_eq!(decoded_header.dst_eid, TEST_DST_EID);
39
- assert_eq!(decoded_header.sender, BytesN::from_array(&env, &TEST_SENDER_BYTES));
40
- assert_eq!(decoded_header.receiver, BytesN::from_array(&env, &TEST_RECEIVER_BYTES));
41
- }
42
-
43
- #[test]
44
- fn test_payload_functions() {
45
- let env = Env::default();
46
- let packet = create_test_outbound_packet(&env);
47
-
48
- // Test payload extraction
49
- let payload_result = payload(&env, &packet);
50
-
51
- // Expected payload is guid + message
52
- let mut expected_payload = Bytes::new(&env);
53
- expected_payload.extend_from_array(&packet.guid.to_array());
54
- expected_payload.append(&packet.message);
55
- assert_eq!(payload_result, expected_payload);
56
-
57
- // Test payload hash
58
- let hash_result = payload_hash(&env, &packet);
59
- let expected_hash = keccak256(&env, &payload_result);
60
- assert_eq!(hash_result, expected_hash);
61
- }
62
-
63
- #[test]
64
- #[should_panic(expected = "Error(Contract, #1001)")] // PacketCodecV1Error::InvalidPacketHeader
65
- fn test_invalid_header_length() {
66
- let env = Env::default();
67
- // Create a header with wrong length (too short) - only 3 bytes instead of 81
68
- let invalid_header = Bytes::from_array(&env, &[0x01, 0x02, 0x03]);
69
- decode_packet_header(&env, &invalid_header);
70
- }
71
-
72
- #[test]
73
- #[should_panic(expected = "Error(Contract, #1002)")] // PacketCodecV1Error::InvalidPacketVersion
74
- fn test_invalid_packet_version() {
75
- let env = Env::default();
76
- // Create a header with correct length but wrong version
77
- let mut invalid_header_bytes: [u8; 81] = [0u8; HEADER_LENGTH as usize];
78
- invalid_header_bytes[0] = 2; // Wrong version (should be 1)
79
- let invalid_header = Bytes::from_array(&env, &invalid_header_bytes);
80
- decode_packet_header(&env, &invalid_header);
81
- }
82
-
83
- #[test]
84
- fn test_header_getters() {
85
- let env = Env::default();
86
- let header = create_test_header(&env);
87
- // Test all getter/field accesses
88
- assert_eq!(header.version, PACKET_VERSION);
89
- assert_eq!(header.nonce, TEST_NONCE);
90
- assert_eq!(header.src_eid, TEST_SRC_EID);
91
- assert_eq!(header.dst_eid, TEST_DST_EID);
92
- assert_eq!(header.sender, BytesN::from_array(&env, &TEST_SENDER_BYTES));
93
- assert_eq!(header.receiver, BytesN::from_array(&env, &TEST_RECEIVER_BYTES));
94
- }
95
-
96
- #[test]
97
- fn test_empty_message() {
98
- let env = Env::default();
99
- let empty_message = Bytes::new(&env);
100
- let packet = create_test_outbound_packet_with_message(&env, empty_message);
101
-
102
- // Test encoding and decoding with empty message
103
- let encoded = encode_packet(&env, &packet);
104
- let (header, decoded_guid, decoded_message) = decode_packet_for_test(&env, &encoded);
105
-
106
- assert_eq!(header.src_eid, TEST_SRC_EID);
107
- assert_eq!(decoded_guid, packet.guid);
108
- assert_eq!(decoded_message.len(), 0);
109
- }
110
-
111
- #[test]
112
- fn test_large_message() {
113
- let env = Env::default();
114
-
115
- // Create a large message (1024 bytes, matching Sui's 1KB)
116
- let mut large_msg_array = [0u8; 1024];
117
- for (i, byte) in large_msg_array.iter_mut().enumerate() {
118
- *byte = (i % 256) as u8;
119
- }
120
- let large_message = Bytes::from_slice(&env, &large_msg_array);
121
- let packet = create_test_outbound_packet_with_message(&env, large_message.clone());
122
-
123
- // Test encoding and decoding with large message
124
- let encoded = encode_packet(&env, &packet);
125
- let (header, decoded_guid, decoded_message) = decode_packet_for_test(&env, &encoded);
126
-
127
- assert_eq!(header.src_eid, TEST_SRC_EID);
128
- assert_eq!(decoded_guid, packet.guid);
129
- assert_eq!(decoded_message.len(), 1024);
130
- assert_eq!(decoded_message, large_message);
131
- }
132
-
133
- fn create_test_header(env: &Env) -> PacketHeader {
134
- let mut header_bytes = Bytes::new(env);
135
- header_bytes.extend_from_array(&[PACKET_VERSION]); // version
136
- header_bytes.extend_from_array(&TEST_NONCE.to_be_bytes()); // nonce
137
- header_bytes.extend_from_array(&TEST_SRC_EID.to_be_bytes()); // src_eid
138
- header_bytes.extend_from_array(&TEST_SENDER_BYTES); // sender
139
- header_bytes.extend_from_array(&TEST_DST_EID.to_be_bytes()); // dst_eid
140
- header_bytes.extend_from_array(&TEST_RECEIVER_BYTES); // receiver
141
- decode_packet_header(env, &header_bytes)
142
- }
143
-
144
- fn create_test_outbound_packet(env: &Env) -> OutboundPacket {
145
- create_test_outbound_packet_with_message(env, Bytes::from_array(env, &TEST_MESSAGE))
146
- }
147
-
148
- fn create_test_outbound_packet_with_message(env: &Env, message: Bytes) -> OutboundPacket {
149
- let sender =
150
- Address::from_payload(env, AddressPayload::ContractIdHash(BytesN::from_array(env, &TEST_SENDER_BYTES)));
151
- let receiver = BytesN::from_array(env, &TEST_RECEIVER_BYTES);
152
- let guid = compute_guid(env, TEST_NONCE, TEST_SRC_EID, &sender, TEST_DST_EID, &receiver);
153
- OutboundPacket { nonce: TEST_NONCE, src_eid: TEST_SRC_EID, sender, dst_eid: TEST_DST_EID, receiver, guid, message }
154
- }
155
-
156
- fn decode_packet_for_test(env: &Env, encoded: &Bytes) -> (PacketHeader, BytesN<32>, Bytes) {
157
- let mut reader = BufferReader::new(encoded);
158
- let header = decode_packet_header(env, &reader.read_bytes(HEADER_LENGTH));
159
- let guid = reader.read_bytes_n();
160
- let message = reader.read_bytes_until_end();
161
- (header, guid, message)
162
- }