@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,12 +1,27 @@
1
- use crate::{events::ComposeSent, storage, tests::endpoint_setup::setup, util::keccak256};
2
- use soroban_sdk::{
3
- testutils::{Address as _, MockAuth, MockAuthInvoke},
4
- Address, Bytes, BytesN, IntoVal,
5
- };
1
+ use soroban_sdk::{testutils::Address as _, Address, Bytes, BytesN};
6
2
  use utils::testing_utils::assert_event;
7
3
 
4
+ use crate::{
5
+ constants::MAX_COMPOSE_INDEX, errors::EndpointError, events::ComposeSent, tests::endpoint_setup::setup,
6
+ tests::endpoint_setup::TestSetup, util::keccak256,
7
+ };
8
+
9
+ fn try_send_compose_with_auth(
10
+ context: &TestSetup,
11
+ from: &Address,
12
+ to: &Address,
13
+ guid: &BytesN<32>,
14
+ index: u32,
15
+ message: &Bytes,
16
+ ) -> Result<Result<(), soroban_sdk::ConversionError>, Result<soroban_sdk::Error, soroban_sdk::InvokeError>> {
17
+ context.mock_auth(from, "send_compose", (from, to, guid, &index, message));
18
+ context.endpoint_client.try_send_compose(from, to, guid, &index, message)
19
+ }
20
+
21
+ // Authorization (from must authorize)
8
22
  #[test]
9
- fn test_send_compose_success() {
23
+ #[should_panic(expected = "Error(Auth, InvalidAction)")]
24
+ fn test_send_compose_requires_from_auth() {
10
25
  let context = setup();
11
26
  let env = &context.env;
12
27
  let endpoint_client = &context.endpoint_client;
@@ -14,49 +29,31 @@ fn test_send_compose_success() {
14
29
  let from = Address::generate(env);
15
30
  let to = Address::generate(env);
16
31
  let guid = BytesN::from_array(env, &[1u8; 32]);
17
- let index = 1u32;
18
- let message = Bytes::from_array(env, &[1, 2, 3, 4, 5]);
19
-
20
- // Verify initial state - compose queue should not exist
21
- let initial_queue = env.as_contract(&endpoint_client.address, || {
22
- storage::EndpointStorage::compose_queue(env, &from, &to, &guid, index)
23
- });
24
- assert_eq!(initial_queue, None, "Initial compose queue should be None");
25
-
26
- // Mock auth for 'from' address
27
- env.mock_auths(&[MockAuth {
28
- address: &from,
29
- invoke: &MockAuthInvoke {
30
- contract: &endpoint_client.address,
31
- fn_name: "send_compose",
32
- args: (&from, &to, &guid, &index, &message).into_val(env),
33
- sub_invokes: &[],
34
- },
35
- }]);
32
+ let index = 0u32;
33
+ let message = Bytes::from_array(env, &[1, 2, 3]);
36
34
 
35
+ // No mock_auth for `from` -> should panic at `from.require_auth()`.
37
36
  endpoint_client.send_compose(&from, &to, &guid, &index, &message);
37
+ }
38
38
 
39
- // Verify the event was published
40
- assert_event(
41
- env,
42
- &endpoint_client.address,
43
- ComposeSent { from: from.clone(), to: to.clone(), guid: guid.clone(), index, message: message.clone() },
44
- );
39
+ // Index bounds (<= MAX_COMPOSE_INDEX)
40
+ #[test]
41
+ fn test_send_compose_fails_when_index_exceeds_max() {
42
+ let context = setup();
43
+ let env = &context.env;
45
44
 
46
- // Verify the compose queue was set via public interface
47
- let message_hash = keccak256(env, &message);
48
- let stored_hash = endpoint_client.compose_queue(&from, &to, &guid, &index);
49
- assert_eq!(stored_hash, Some(message_hash.clone()));
45
+ let from = Address::generate(env);
46
+ let to = Address::generate(env);
47
+ let guid = BytesN::from_array(env, &[1u8; 32]);
48
+ let invalid_index = MAX_COMPOSE_INDEX + 1;
49
+ let message = Bytes::from_array(env, &[1, 2, 3]);
50
50
 
51
- // Assert storage change directly
52
- let stored_hash_direct = env.as_contract(&endpoint_client.address, || {
53
- storage::EndpointStorage::compose_queue(env, &from, &to, &guid, index)
54
- });
55
- assert_eq!(stored_hash_direct, Some(message_hash), "Storage should contain the message hash in compose queue");
51
+ let result = try_send_compose_with_auth(&context, &from, &to, &guid, invalid_index, &message);
52
+ assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::InvalidIndex.into());
56
53
  }
57
54
 
58
55
  #[test]
59
- fn test_send_compose_different_indices() {
56
+ fn test_send_compose_succeeds_at_max_index() {
60
57
  let context = setup();
61
58
  let env = &context.env;
62
59
  let endpoint_client = &context.endpoint_client;
@@ -64,85 +61,43 @@ fn test_send_compose_different_indices() {
64
61
  let from = Address::generate(env);
65
62
  let to = Address::generate(env);
66
63
  let guid = BytesN::from_array(env, &[1u8; 32]);
67
- let message1 = Bytes::from_array(env, &[1, 2, 3]);
68
- let message2 = Bytes::from_array(env, &[4, 5, 6]);
64
+ let index = MAX_COMPOSE_INDEX;
65
+ let message = Bytes::from_array(env, &[1, 2, 3]);
69
66
 
70
- // Send compose with index 0
71
- env.mock_auths(&[MockAuth {
72
- address: &from,
73
- invoke: &MockAuthInvoke {
74
- contract: &endpoint_client.address,
75
- fn_name: "send_compose",
76
- args: (&from, &to, &guid, &0u32, &message1).into_val(env),
77
- sub_invokes: &[],
78
- },
79
- }]);
80
- endpoint_client.send_compose(&from, &to, &guid, &0, &message1);
81
-
82
- // Send compose with index 1
83
- env.mock_auths(&[MockAuth {
84
- address: &from,
85
- invoke: &MockAuthInvoke {
86
- contract: &endpoint_client.address,
87
- fn_name: "send_compose",
88
- args: (&from, &to, &guid, &1u32, &message2).into_val(env),
89
- sub_invokes: &[],
90
- },
91
- }]);
92
- endpoint_client.send_compose(&from, &to, &guid, &1, &message2);
93
-
94
- // Verify both compose queues exist
95
- let hash1 = keccak256(env, &message1);
96
- let hash2 = keccak256(env, &message2);
97
- assert_eq!(endpoint_client.compose_queue(&from, &to, &guid, &0), Some(hash1));
98
- assert_eq!(endpoint_client.compose_queue(&from, &to, &guid, &1), Some(hash2));
67
+ context.send_compose_with_auth(&from, &to, &guid, index, &message);
68
+ assert_eq!(endpoint_client.compose_queue(&from, &to, &guid, &index), Some(keccak256(env, &message)));
99
69
  }
100
70
 
71
+ // Successful send_compose stores compose_queue and emits ComposeSent
101
72
  #[test]
102
- fn test_send_compose_different_guids() {
73
+ fn test_send_compose_success() {
103
74
  let context = setup();
104
75
  let env = &context.env;
105
76
  let endpoint_client = &context.endpoint_client;
106
77
 
107
78
  let from = Address::generate(env);
108
79
  let to = Address::generate(env);
109
- let guid1 = BytesN::from_array(env, &[1u8; 32]);
110
- let guid2 = BytesN::from_array(env, &[2u8; 32]);
111
- let index = 0u32;
112
- let message = Bytes::from_array(env, &[1, 2, 3]);
80
+ let guid = BytesN::from_array(env, &[1u8; 32]);
81
+ let index = 1u32;
82
+ let message = Bytes::from_array(env, &[1, 2, 3, 4, 5]);
83
+
84
+ assert_eq!(endpoint_client.compose_queue(&from, &to, &guid, &index), None);
85
+ context.send_compose_with_auth(&from, &to, &guid, index, &message);
86
+
87
+ // Verify the event was published.
88
+ assert_event(
89
+ env,
90
+ &endpoint_client.address,
91
+ ComposeSent { from: from.clone(), to: to.clone(), guid: guid.clone(), index, message: message.clone() },
92
+ );
113
93
 
114
- // Send compose with guid1
115
- env.mock_auths(&[MockAuth {
116
- address: &from,
117
- invoke: &MockAuthInvoke {
118
- contract: &endpoint_client.address,
119
- fn_name: "send_compose",
120
- args: (&from, &to, &guid1, &index, &message).into_val(env),
121
- sub_invokes: &[],
122
- },
123
- }]);
124
- endpoint_client.send_compose(&from, &to, &guid1, &index, &message);
125
-
126
- // Send compose with guid2
127
- env.mock_auths(&[MockAuth {
128
- address: &from,
129
- invoke: &MockAuthInvoke {
130
- contract: &endpoint_client.address,
131
- fn_name: "send_compose",
132
- args: (&from, &to, &guid2, &index, &message).into_val(env),
133
- sub_invokes: &[],
134
- },
135
- }]);
136
- endpoint_client.send_compose(&from, &to, &guid2, &index, &message);
137
-
138
- // Verify both compose queues exist
139
- let message_hash = keccak256(env, &message);
140
- assert_eq!(endpoint_client.compose_queue(&from, &to, &guid1, &index), Some(message_hash.clone()));
141
- assert_eq!(endpoint_client.compose_queue(&from, &to, &guid2, &index), Some(message_hash));
94
+ // Verify the compose queue was set via public interface.
95
+ assert_eq!(endpoint_client.compose_queue(&from, &to, &guid, &index), Some(keccak256(env, &message)));
142
96
  }
143
97
 
98
+ // Empty message is allowed
144
99
  #[test]
145
- fn test_send_compose_empty_message() {
100
+ fn test_send_compose_allows_empty_message() {
146
101
  let context = setup();
147
102
  let env = &context.env;
148
103
  let endpoint_client = &context.endpoint_client;
@@ -153,21 +108,35 @@ fn test_send_compose_empty_message() {
153
108
  let index = 0u32;
154
109
  let message = Bytes::new(env);
155
110
 
156
- // Mock auth for 'from' address
157
- env.mock_auths(&[MockAuth {
158
- address: &from,
159
- invoke: &MockAuthInvoke {
160
- contract: &endpoint_client.address,
161
- fn_name: "send_compose",
162
- args: (&from, &to, &guid, &index, &message).into_val(env),
163
- sub_invokes: &[],
164
- },
165
- }]);
111
+ context.send_compose_with_auth(&from, &to, &guid, index, &message);
112
+ assert_eq!(endpoint_client.compose_queue(&from, &to, &guid, &index), Some(keccak256(env, &message)));
113
+ }
166
114
 
167
- endpoint_client.send_compose(&from, &to, &guid, &index, &message);
115
+ // The compose_queue keying (from/to/guid/index) and uniqueness
116
+ #[test]
117
+ fn test_send_compose_keying_and_compose_exists() {
118
+ let context = setup();
119
+ let env = &context.env;
120
+ let endpoint_client = &context.endpoint_client;
121
+
122
+ let from = Address::generate(env);
123
+ let to = Address::generate(env);
124
+ let guid = BytesN::from_array(env, &[1u8; 32]);
125
+ let message1 = Bytes::from_array(env, &[1, 2, 3]);
126
+ let message2 = Bytes::from_array(env, &[4, 5, 6]);
127
+
128
+ // Baseline: store one compose entry.
129
+ context.send_compose_with_auth(&from, &to, &guid, 0, &message1);
130
+ assert_eq!(endpoint_client.compose_queue(&from, &to, &guid, &0), Some(keccak256(env, &message1)));
131
+
132
+ // Different index should be independent.
133
+ context.send_compose_with_auth(&from, &to, &guid, 1, &message2);
134
+ assert_eq!(endpoint_client.compose_queue(&from, &to, &guid, &1), Some(keccak256(env, &message2)));
135
+
136
+ // Same (from,to,guid,index) => ComposeExists.
137
+ let result = try_send_compose_with_auth(&context, &from, &to, &guid, 0, &message2);
138
+ assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::ComposeExists.into());
168
139
 
169
- // Verify the compose queue was set with empty message hash
170
- let message_hash = keccak256(env, &message);
171
- let stored_hash = endpoint_client.compose_queue(&from, &to, &guid, &index);
172
- assert_eq!(stored_hash, Some(message_hash));
140
+ // Ensure ComposeExists did not overwrite the originally stored entry.
141
+ assert_eq!(endpoint_client.compose_queue(&from, &to, &guid, &0), Some(keccak256(env, &message1)));
173
142
  }
@@ -1,10 +1,10 @@
1
- use crate::{interfaces::MessagingFee, FeeRecipient, FeesAndPacket, MessageLibType, Origin, OutboundPacket};
2
1
  use soroban_sdk::{contract, contractimpl, vec, Address, Bytes, Env, Symbol, Vec};
3
2
 
4
- // ============================================================================
5
- // Mock Receiver Contract for Testing
6
- // ============================================================================
3
+ use crate::{
4
+ interfaces::MessagingFee, FeeRecipient, FeesAndPacket, MessageLibType, Origin, OutboundPacket, SetConfigParam,
5
+ };
7
6
 
7
+ // Mock Receiver Contract for Testing
8
8
  #[contract]
9
9
  pub struct MockReceiver;
10
10
 
@@ -57,6 +57,20 @@ impl MockMessageLib {
57
57
  env.storage().instance().get(&Symbol::new(&env, "supported_eids")).unwrap_or(vec![&env]);
58
58
  supported_eids.contains(eid)
59
59
  }
60
+
61
+ /// Stores config for an OApp. This is a minimal implementation to support endpoint tests.
62
+ pub fn set_config(env: Env, oapp: Address, params: Vec<SetConfigParam>) {
63
+ let prefix = Symbol::new(&env, "cfg");
64
+ for p in params.iter() {
65
+ env.storage().instance().set(&(prefix.clone(), oapp.clone(), p.eid, p.config_type), &p.config);
66
+ }
67
+ }
68
+
69
+ /// Reads config for an OApp. Returns empty bytes if unset.
70
+ pub fn get_config(env: Env, eid: u32, oapp: Address, config_type: u32) -> Bytes {
71
+ let prefix = Symbol::new(&env, "cfg");
72
+ env.storage().instance().get(&(prefix, oapp, eid, config_type)).unwrap_or(Bytes::new(&env))
73
+ }
60
74
  }
61
75
 
62
76
  // Mock send library for testing send/quote operations
@@ -1,6 +1,7 @@
1
- use crate::{tests::endpoint_setup::setup, util::build_payload};
2
1
  use soroban_sdk::{Bytes, BytesN};
3
2
 
3
+ use crate::{tests::endpoint_setup::setup, util::build_payload};
4
+
4
5
  #[test]
5
6
  fn test_build_payload_basic() {
6
7
  let context = setup();
@@ -20,6 +21,8 @@ fn test_build_payload() {
20
21
  let context = setup();
21
22
  let env = &context.env;
22
23
 
24
+ // Mirrors with sui
25
+
23
26
  // Create a guid with 32 periods (ASCII 46 = '.')
24
27
  let guid_bytes = [46u8; 32];
25
28
  let guid = BytesN::from_array(env, &guid_bytes);
@@ -42,7 +45,6 @@ fn test_build_payload() {
42
45
  assert_eq!(payload, expected);
43
46
  }
44
47
 
45
-
46
48
  #[test]
47
49
  fn test_build_payload_empty_message() {
48
50
  let context = setup();
@@ -56,71 +58,3 @@ fn test_build_payload_empty_message() {
56
58
  // Payload should be just the 32 bytes of GUID
57
59
  assert_eq!(payload.len(), 32);
58
60
  }
59
-
60
- #[test]
61
- fn test_build_payload_large_message() {
62
- let context = setup();
63
- let env = &context.env;
64
-
65
- let guid = BytesN::from_array(env, &[1u8; 32]);
66
- let message = Bytes::from_array(env, &[255u8; 1000]);
67
-
68
- let payload = build_payload(env, &guid, &message);
69
-
70
- // Payload should be 32 bytes (guid) + 1000 bytes (message)
71
- assert_eq!(payload.len(), 32 + 1000);
72
- }
73
-
74
-
75
- #[test]
76
- fn test_build_payload_all_zero_guid() {
77
- let context = setup();
78
- let env = &context.env;
79
-
80
- let guid = BytesN::from_array(env, &[0u8; 32]);
81
- let message = Bytes::from_array(env, &[1, 2, 3]);
82
-
83
- let payload = build_payload(env, &guid, &message);
84
-
85
- // Should successfully build payload with all-zero GUID
86
- assert_eq!(payload.len(), 32 + 3);
87
-
88
- // First 32 bytes should be zeros
89
- for i in 0..32 {
90
- assert_eq!(payload.get(i).unwrap(), 0u8);
91
- }
92
- }
93
-
94
-
95
- #[test]
96
- fn test_build_payload_single_byte_message() {
97
- let context = setup();
98
- let env = &context.env;
99
-
100
- let guid = BytesN::from_array(env, &[1u8; 32]);
101
- let message = Bytes::from_array(env, &[42]);
102
-
103
- let payload = build_payload(env, &guid, &message);
104
-
105
- // Payload should be 32 bytes (guid) + 1 byte (message)
106
- assert_eq!(payload.len(), 33);
107
- assert_eq!(payload.get(32).unwrap(), 42u8);
108
- }
109
-
110
-
111
- #[test]
112
- fn test_build_payload_preserves_message_order() {
113
- let context = setup();
114
- let env = &context.env;
115
-
116
- let guid = BytesN::from_array(env, &[0u8; 32]);
117
- let message = Bytes::from_array(env, &[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
118
-
119
- let payload = build_payload(env, &guid, &message);
120
-
121
- // Verify message bytes are preserved in order after GUID
122
- for i in 0..10 {
123
- assert_eq!(payload.get(32 + i).unwrap(), (i + 1) as u8);
124
- }
125
- }
126
-
@@ -1,7 +1,8 @@
1
- use crate::{tests::endpoint_setup::setup, util::compute_guid};
2
1
  use hex_literal::hex;
3
2
  use soroban_sdk::{address_payload::AddressPayload, testutils::Address as _, Address, BytesN, Env};
4
3
 
4
+ use crate::{tests::endpoint_setup::setup, util::compute_guid};
5
+
5
6
  #[test]
6
7
  fn test_compute_guid_basic() {
7
8
  let context = setup();
@@ -1,115 +1,26 @@
1
- use crate::{tests::endpoint_setup::setup, util::keccak256};
2
- use soroban_sdk::Bytes;
3
-
4
- #[test]
5
- fn test_keccak256_basic() {
6
- let context = setup();
7
- let env = &context.env;
8
-
9
- let message = Bytes::from_array(env, &[1, 2, 3, 4, 5]);
10
-
11
- let hash = keccak256(env, &message);
12
-
13
- // Hash should be 32 bytes
14
- assert_eq!(hash.len(), 32);
15
- }
16
-
17
- #[test]
18
- fn test_keccak256_empty_message() {
19
- let context = setup();
20
- let env = &context.env;
21
-
22
- let message = Bytes::new(env);
23
-
24
- let hash = keccak256(env, &message);
25
-
26
- // Hash of empty message should still be 32 bytes
27
- assert_eq!(hash.len(), 32);
28
- }
29
-
30
- #[test]
31
- fn test_keccak256_deterministic() {
32
- let context = setup();
33
- let env = &context.env;
34
-
35
- let message = Bytes::from_array(env, &[1, 2, 3, 4, 5]);
36
-
37
- // Hash the same message twice
38
- let hash1 = keccak256(env, &message);
39
- let hash2 = keccak256(env, &message);
40
-
41
- // Should produce the same hash
42
- assert_eq!(hash1, hash2);
43
- }
44
-
45
- #[test]
46
- fn test_keccak256_different_messages() {
47
- let context = setup();
48
- let env = &context.env;
1
+ use hex_literal::hex;
2
+ use soroban_sdk::{Bytes, BytesN};
49
3
 
50
- let message1 = Bytes::from_array(env, &[1, 2, 3]);
51
- let message2 = Bytes::from_array(env, &[4, 5, 6]);
52
-
53
- let hash1 = keccak256(env, &message1);
54
- let hash2 = keccak256(env, &message2);
55
-
56
- // Different messages should produce different hashes
57
- assert_ne!(hash1, hash2);
58
- }
59
-
60
- #[test]
61
- fn test_keccak256_single_byte() {
62
- let context = setup();
63
- let env = &context.env;
64
-
65
- let message = Bytes::from_array(env, &[42]);
66
-
67
- let hash = keccak256(env, &message);
68
-
69
- // Hash should be 32 bytes
70
- assert_eq!(hash.len(), 32);
71
- }
72
-
73
- #[test]
74
- fn test_keccak256_large_message() {
75
- let context = setup();
76
- let env = &context.env;
77
-
78
- let message = Bytes::from_array(env, &[255u8; 1000]);
79
-
80
- let hash = keccak256(env, &message);
81
-
82
- // Hash should still be 32 bytes
83
- assert_eq!(hash.len(), 32);
84
- }
85
-
86
- #[test]
87
- fn test_keccak256_all_zeros() {
88
- let context = setup();
89
- let env = &context.env;
90
-
91
- let message = Bytes::from_array(env, &[0u8; 100]);
92
-
93
- let hash = keccak256(env, &message);
94
-
95
- // Hash should be 32 bytes
96
- assert_eq!(hash.len(), 32);
97
- }
4
+ use crate::{tests::endpoint_setup::setup, util::keccak256};
98
5
 
99
6
  #[test]
100
- fn test_keccak256_very_long_message() {
7
+ fn test_keccak256() {
101
8
  let context = setup();
102
9
  let env = &context.env;
103
10
 
104
- // Create a very long message (e.g., 10000 bytes)
105
- let mut data = [0u8; 10000];
106
- for i in 0..10000 {
107
- data[i] = (i % 256) as u8;
108
- }
109
- let message = Bytes::from_array(env, &data);
11
+ // Mirrors with sui
110
12
 
111
- let hash = keccak256(env, &message);
13
+ // keccak256("")
14
+ let empty = Bytes::new(env);
15
+ let empty_hash = keccak256(env, &empty);
16
+ let expected_empty =
17
+ BytesN::from_array(env, &hex!("c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"));
18
+ assert_eq!(empty_hash, expected_empty);
112
19
 
113
- // Hash should still be 32 bytes regardless of input size
114
- assert_eq!(hash.len(), 32);
20
+ // keccak256("hello world")
21
+ let message = Bytes::from_slice(env, b"hello world");
22
+ let message_hash = keccak256(env, &message);
23
+ let expected_message =
24
+ BytesN::from_array(env, &hex!("47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"));
25
+ assert_eq!(message_hash, expected_message);
115
26
  }
@@ -0,0 +1,35 @@
1
+ [package]
2
+ name = "layerzero-views"
3
+ version.workspace = true
4
+ edition.workspace = true
5
+ license.workspace = true
6
+ publish = false
7
+
8
+ [lib]
9
+ crate-type = ["cdylib", "rlib"]
10
+ doctest = false
11
+
12
+ [features]
13
+ library = []
14
+ testutils = []
15
+ # Network selection
16
+ mainnet = []
17
+ testnet = []
18
+ sandbox = []
19
+
20
+ [dependencies]
21
+ cfg-if = { workspace = true }
22
+ soroban-sdk = { workspace = true }
23
+ # workspace dependencies
24
+ utils = { workspace = true }
25
+ common-macros = { workspace = true }
26
+ endpoint-v2 = { workspace = true, features = ["library"] }
27
+ message-lib-common = { workspace = true }
28
+ uln302 = { workspace = true, features = ["library"] }
29
+
30
+ [dev-dependencies]
31
+ soroban-sdk = { workspace = true, features = ["testutils"] }
32
+ endpoint-v2 = { workspace = true, features = ["testutils"] }
33
+ message-lib-common = { workspace = true, features = ["testutils"] }
34
+ utils = { workspace = true, features = ["testutils"] }
35
+ uln302 = { workspace = true, features = ["testutils"] }
@@ -0,0 +1,10 @@
1
+ //! Error types for LayerZero view contracts.
2
+
3
+ use common_macros::contract_error;
4
+
5
+ /// Errors for LayerZeroView contract.
6
+ #[contract_error]
7
+ pub enum LayerZeroViewError {
8
+ /// Invalid packet header (dst_eid mismatch).
9
+ InvalidEID,
10
+ }