@layerzerolabs/protocol-stellar-v2 0.2.13 → 0.2.18

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 (435) hide show
  1. package/.turbo/turbo-build.log +484 -337
  2. package/.turbo/turbo-lint.log +126 -56
  3. package/.turbo/turbo-test.log +1403 -984
  4. package/Cargo.lock +142 -3
  5. package/Cargo.toml +5 -1
  6. package/contracts/ERROR_SPEC.md +44 -0
  7. package/contracts/common-macros/src/auth.rs +113 -0
  8. package/contracts/common-macros/src/contract_ttl.rs +84 -0
  9. package/contracts/common-macros/src/lib.rs +219 -29
  10. package/contracts/common-macros/src/lz_contract.rs +83 -0
  11. package/contracts/common-macros/src/storage.rs +1 -1
  12. package/contracts/common-macros/src/tests/{ownable.rs → auth.rs} +48 -15
  13. package/contracts/common-macros/src/tests/contract_ttl.rs +662 -0
  14. package/contracts/common-macros/src/tests/mod.rs +3 -2
  15. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_multisig_code.snap +20 -0
  16. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_ownable_code.snap +24 -0
  17. package/contracts/common-macros/src/tests/snapshots/{common_macros__tests__ownable__snapshot_only_owner_preserves_function_signature.snap → common_macros__tests__auth__snapshot_only_auth_preserves_function_signature.snap} +4 -4
  18. package/contracts/common-macros/src/tests/snapshots/{common_macros__tests__contract_impl__snapshot_generated_contract_impl_code.snap → common_macros__tests__contract_ttl__snapshot_generated_contractimpl_code.snap} +26 -10
  19. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contracttrait_code.snap +69 -0
  20. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__storage__snapshot_generated_storage_code.snap +48 -48
  21. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +7 -41
  22. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +21 -0
  23. package/contracts/common-macros/src/tests/upgradeable.rs +31 -0
  24. package/contracts/common-macros/src/ttl_configurable.rs +21 -66
  25. package/contracts/common-macros/src/ttl_extendable.rs +36 -0
  26. package/contracts/common-macros/src/upgradeable.rs +76 -0
  27. package/contracts/common-macros/src/utils.rs +9 -0
  28. package/contracts/endpoint-v2/src/constants.rs +4 -4
  29. package/contracts/endpoint-v2/src/endpoint_v2.rs +58 -36
  30. package/contracts/endpoint-v2/src/errors.rs +4 -3
  31. package/contracts/endpoint-v2/src/events.rs +1 -1
  32. package/contracts/endpoint-v2/src/message_lib_manager.rs +18 -5
  33. package/contracts/endpoint-v2/src/messaging_channel.rs +11 -1
  34. package/contracts/endpoint-v2/src/messaging_composer.rs +11 -1
  35. package/contracts/endpoint-v2/src/storage.rs +1 -1
  36. package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +175 -8
  37. package/contracts/endpoint-v2/src/tests/endpoint_v2/build_outbound_packet.rs +76 -0
  38. package/contracts/endpoint-v2/src/tests/endpoint_v2/clear.rs +342 -159
  39. package/contracts/endpoint-v2/src/tests/endpoint_v2/delegate.rs +3 -15
  40. package/contracts/endpoint-v2/src/tests/endpoint_v2/initializable.rs +20 -31
  41. package/contracts/endpoint-v2/src/tests/endpoint_v2/lz_receive_alert.rs +126 -164
  42. package/contracts/endpoint-v2/src/tests/endpoint_v2/mod.rs +1 -0
  43. package/contracts/endpoint-v2/src/tests/endpoint_v2/native_token.rs +0 -1
  44. package/contracts/endpoint-v2/src/tests/endpoint_v2/owner.rs +0 -1
  45. package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +311 -304
  46. package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +423 -96
  47. package/contracts/endpoint-v2/src/tests/endpoint_v2/recover_token.rs +1 -1
  48. package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +47 -20
  49. package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +373 -403
  50. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_delegate.rs +96 -22
  51. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +62 -10
  52. package/contracts/endpoint-v2/src/tests/endpoint_v2/transfer_ownership.rs +4 -4
  53. package/contracts/endpoint-v2/src/tests/endpoint_v2/ttl_config.rs +8 -11
  54. package/contracts/endpoint-v2/src/tests/endpoint_v2/verifiable.rs +81 -30
  55. package/contracts/endpoint-v2/src/tests/endpoint_v2/verify.rs +209 -76
  56. package/contracts/endpoint-v2/src/tests/endpoint_v2/zro.rs +0 -1
  57. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library.rs +24 -0
  58. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library_timeout.rs +40 -0
  59. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_send_library.rs +24 -0
  60. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_config.rs +108 -0
  61. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_library_index.rs +52 -0
  62. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_receive_library.rs +92 -0
  63. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_registered_libraries.rs +74 -0
  64. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_send_library.rs +83 -0
  65. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_registered_library.rs +32 -0
  66. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_supported_eid.rs +28 -0
  67. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_valid_receive_library.rs +261 -0
  68. package/contracts/endpoint-v2/src/tests/message_lib_manager/mod.rs +16 -0
  69. package/contracts/endpoint-v2/src/tests/message_lib_manager/receive_library_timeout.rs +62 -0
  70. package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +65 -43
  71. package/contracts/endpoint-v2/src/tests/message_lib_manager/registered_libraries_count.rs +42 -0
  72. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +61 -0
  73. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +4 -6
  74. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +59 -0
  75. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +16 -2
  76. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_config.rs +155 -51
  77. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs +114 -92
  78. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_library.rs +235 -132
  79. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_send_library.rs +93 -87
  80. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library.rs +346 -245
  81. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library_timeout.rs +406 -60
  82. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_send_library.rs +252 -78
  83. package/contracts/endpoint-v2/src/tests/message_lib_manager/timeout.rs +102 -0
  84. package/contracts/endpoint-v2/src/tests/messaging_channel/burn.rs +212 -273
  85. package/contracts/endpoint-v2/src/tests/messaging_channel/clear_payload.rs +203 -0
  86. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound.rs +94 -0
  87. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_nonce.rs +78 -248
  88. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_payload_hash.rs +7 -282
  89. package/contracts/endpoint-v2/src/tests/messaging_channel/lazy_inbound_nonce.rs +6 -274
  90. package/contracts/endpoint-v2/src/tests/messaging_channel/mod.rs +3 -2
  91. package/contracts/endpoint-v2/src/tests/messaging_channel/next_guid.rs +86 -178
  92. package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +328 -212
  93. package/contracts/endpoint-v2/src/tests/messaging_channel/outbound.rs +68 -0
  94. package/contracts/endpoint-v2/src/tests/messaging_channel/outbound_nonce.rs +6 -209
  95. package/contracts/endpoint-v2/src/tests/messaging_channel/skip.rs +207 -159
  96. package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +142 -153
  97. package/contracts/endpoint-v2/src/tests/messaging_composer/compose_queue.rs +6 -179
  98. package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +163 -221
  99. package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +90 -121
  100. package/contracts/endpoint-v2/src/tests/mock.rs +18 -4
  101. package/contracts/endpoint-v2/src/tests/util/build_payload.rs +4 -70
  102. package/contracts/endpoint-v2/src/tests/util/compute_guid.rs +2 -1
  103. package/contracts/endpoint-v2/src/tests/util/keccak256.rs +17 -106
  104. package/contracts/layerzero-views/Cargo.toml +35 -0
  105. package/contracts/layerzero-views/src/errors.rs +10 -0
  106. package/contracts/layerzero-views/src/layerzero_view.rs +226 -0
  107. package/contracts/layerzero-views/src/lib.rs +38 -0
  108. package/contracts/layerzero-views/src/storage.rs +18 -0
  109. package/contracts/layerzero-views/src/tests/layerzero_view_tests.rs +423 -0
  110. package/contracts/layerzero-views/src/tests/mod.rs +4 -0
  111. package/contracts/layerzero-views/src/tests/setup.rs +377 -0
  112. package/contracts/layerzero-views/src/types.rs +50 -0
  113. package/contracts/macro-integration-tests/Cargo.toml +30 -0
  114. package/contracts/macro-integration-tests/src/lib.rs +1 -0
  115. package/contracts/macro-integration-tests/tests/runtime/ownable/initialization.rs +62 -0
  116. package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +22 -0
  117. package/contracts/macro-integration-tests/tests/runtime/ownable/only_auth_guard.rs +97 -0
  118. package/contracts/macro-integration-tests/tests/runtime/ownable/ownership_transfer.rs +101 -0
  119. package/contracts/macro-integration-tests/tests/runtime/storage/keyed_roundtrip.rs +225 -0
  120. package/contracts/macro-integration-tests/tests/runtime/storage/mod.rs +4 -0
  121. package/contracts/macro-integration-tests/tests/runtime/storage/name_override_runtime.rs +52 -0
  122. package/contracts/macro-integration-tests/tests/runtime/storage/ttl_extension.rs +261 -0
  123. package/contracts/macro-integration-tests/tests/runtime/storage/unkeyed_roundtrip.rs +137 -0
  124. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +113 -0
  125. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +139 -0
  126. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/mod.rs +2 -0
  127. package/contracts/macro-integration-tests/tests/runtime.rs +5 -0
  128. package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.rs +12 -0
  129. package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.stderr +7 -0
  130. package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.rs +12 -0
  131. package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.stderr +7 -0
  132. package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.rs +21 -0
  133. package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.stderr +7 -0
  134. package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.rs +13 -0
  135. package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.stderr +7 -0
  136. package/contracts/macro-integration-tests/tests/ui/error/pass/attr_on_variant_allowed.rs +20 -0
  137. package/contracts/macro-integration-tests/tests/ui/error/pass/basic_auto_discriminants.rs +15 -0
  138. package/contracts/macro-integration-tests/tests/ui/error/pass/mixed_discriminants.rs +16 -0
  139. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_env.rs +22 -0
  140. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_env.stderr +16 -0
  141. package/contracts/macro-integration-tests/tests/ui/ownable/pass/minimal_contract.rs +26 -0
  142. package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +21 -0
  143. package/contracts/macro-integration-tests/tests/ui/ownable/pass/only_auth_env_param_variants.rs +46 -0
  144. package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.rs +13 -0
  145. package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.stderr +7 -0
  146. package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.rs +13 -0
  147. package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.stderr +7 -0
  148. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.rs +10 -0
  149. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.stderr +7 -0
  150. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.rs +12 -0
  151. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.stderr +7 -0
  152. package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.rs +10 -0
  153. package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.stderr +7 -0
  154. package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.rs +10 -0
  155. package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.stderr +7 -0
  156. package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.rs +12 -0
  157. package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.stderr +7 -0
  158. package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.rs +13 -0
  159. package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.stderr +7 -0
  160. package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.rs +13 -0
  161. package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.stderr +7 -0
  162. package/contracts/macro-integration-tests/tests/ui/storage/pass/default_value_on_variant.rs +14 -0
  163. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_instance_unit_basic.rs +14 -0
  164. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_persistent_named_fields_keyed.rs +16 -0
  165. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_temporary_unit_option.rs +15 -0
  166. package/contracts/macro-integration-tests/tests/ui/storage/pass/name_override.rs +14 -0
  167. package/contracts/macro-integration-tests/tests/ui/storage/pass/no_auto_ttl_extension.rs +19 -0
  168. package/contracts/macro-integration-tests/tests/ui/storage/pass/ttl_provider_basic.rs +15 -0
  169. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/minimal_contract.rs +44 -0
  170. package/contracts/macro-integration-tests/tests/ui_error.rs +11 -0
  171. package/contracts/macro-integration-tests/tests/ui_ownable.rs +11 -0
  172. package/contracts/macro-integration-tests/tests/ui_storage.rs +11 -0
  173. package/contracts/macro-integration-tests/tests/ui_ttl_configurable.rs +12 -0
  174. package/contracts/message-libs/blocked-message-lib/src/lib.rs +17 -17
  175. package/contracts/message-libs/message-lib-common/src/errors.rs +7 -2
  176. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/decode_packet_header.rs +64 -0
  177. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet.rs +58 -0
  178. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet_header.rs +138 -0
  179. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/mod.rs +6 -0
  180. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload.rs +30 -0
  181. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload_hash.rs +15 -0
  182. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/test_helper.rs +39 -0
  183. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_dvn_option.rs +57 -0
  184. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_lz_receive_option.rs +49 -0
  185. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_native_drop_option.rs +73 -0
  186. package/contracts/message-libs/message-lib-common/src/tests/worker_options/convert_legacy_options.rs +280 -0
  187. package/contracts/message-libs/message-lib-common/src/tests/worker_options/extract_type_3_options.rs +126 -0
  188. package/contracts/message-libs/message-lib-common/src/tests/worker_options/left_pad_to_bytes32.rs +48 -0
  189. package/contracts/message-libs/message-lib-common/src/tests/worker_options/mod.rs +7 -0
  190. package/contracts/message-libs/message-lib-common/src/tests/worker_options/split_worker_options.rs +139 -0
  191. package/contracts/message-libs/message-lib-common/src/worker_options.rs +31 -1
  192. package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +7 -9
  193. package/contracts/message-libs/treasury/src/errors.rs +2 -3
  194. package/contracts/message-libs/treasury/src/events.rs +1 -1
  195. package/contracts/message-libs/treasury/src/interfaces/zro_fee_lib.rs +2 -2
  196. package/contracts/message-libs/treasury/src/lib.rs +3 -3
  197. package/contracts/message-libs/treasury/src/storage.rs +3 -1
  198. package/contracts/message-libs/treasury/src/tests/treasury_tests.rs +1 -1
  199. package/contracts/message-libs/treasury/src/treasury.rs +23 -26
  200. package/contracts/message-libs/uln-302/Cargo.toml +1 -1
  201. package/contracts/message-libs/uln-302/src/errors.rs +0 -5
  202. package/contracts/message-libs/uln-302/src/events.rs +5 -6
  203. package/contracts/message-libs/uln-302/src/receive_uln.rs +37 -56
  204. package/contracts/message-libs/uln-302/src/send_uln.rs +112 -138
  205. package/contracts/message-libs/uln-302/src/storage.rs +5 -5
  206. package/contracts/message-libs/uln-302/src/tests/receive_uln302/effective_receive_uln_config.rs +5 -7
  207. package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs +3 -3
  208. package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_send_uln_config.rs +6 -9
  209. package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_executor_configs.rs +2 -2
  210. package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_send_uln_configs.rs +3 -3
  211. package/contracts/message-libs/uln-302/src/tests/setup.rs +9 -0
  212. package/contracts/message-libs/uln-302/src/tests/testing_utils.rs +5 -0
  213. package/contracts/message-libs/uln-302/src/tests/uln302/get_app_receive_uln_config.rs +1 -2
  214. package/contracts/message-libs/uln-302/src/tests/uln302/get_app_send_uln_config.rs +1 -2
  215. package/contracts/message-libs/uln-302/src/tests/uln302/set_config.rs +37 -55
  216. package/contracts/message-libs/uln-302/src/uln302.rs +10 -25
  217. package/contracts/oapps/counter/Cargo.toml +14 -1
  218. package/contracts/oapps/counter/integration_tests/mod.rs +4 -1
  219. package/contracts/oapps/counter/integration_tests/setup_sml.rs +169 -0
  220. package/contracts/oapps/counter/integration_tests/setup_uln.rs +997 -0
  221. package/contracts/oapps/counter/integration_tests/signing.rs +62 -0
  222. package/contracts/oapps/counter/integration_tests/test_with_sml.rs +24 -55
  223. package/contracts/oapps/counter/integration_tests/test_with_uln.rs +314 -0
  224. package/contracts/oapps/counter/integration_tests/utils.rs +196 -53
  225. package/contracts/oapps/counter/src/counter.rs +67 -44
  226. package/contracts/oapps/counter/src/tests/mod.rs +0 -13
  227. package/contracts/oapps/counter/src/tests/test_counter.rs +5 -7
  228. package/contracts/oapps/oapp/src/errors.rs +5 -1
  229. package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +318 -221
  230. package/contracts/oapps/oapp/src/oapp_core.rs +36 -21
  231. package/contracts/oapps/oapp/src/oapp_options_type3.rs +48 -12
  232. package/contracts/oapps/oapp/src/oapp_receiver.rs +106 -41
  233. package/contracts/oapps/oapp/src/oapp_sender.rs +26 -34
  234. package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +9 -9
  235. package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +25 -18
  236. package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +7 -8
  237. package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +14 -16
  238. package/contracts/oapps/oapp-macros/src/generators.rs +128 -0
  239. package/contracts/oapps/oapp-macros/src/lib.rs +211 -0
  240. package/contracts/oapps/oft/integration-tests/setup.rs +34 -9
  241. package/contracts/oapps/oft/integration-tests/utils.rs +1 -1
  242. package/contracts/oapps/oft/src/errors.rs +6 -1
  243. package/contracts/oapps/oft/src/extensions/oft_fee.rs +13 -13
  244. package/contracts/oapps/oft/src/extensions/pausable.rs +5 -5
  245. package/contracts/oapps/oft/src/extensions/rate_limiter.rs +23 -23
  246. package/contracts/oapps/oft/src/lib.rs +4 -2
  247. package/contracts/oapps/oft/src/oft.rs +31 -71
  248. package/contracts/oapps/oft/src/oft_impl.rs +201 -0
  249. package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +2 -4
  250. package/contracts/oapps/oft/src/oft_types/mint_burn.rs +1 -4
  251. package/contracts/oapps/oft/src/storage.rs +2 -0
  252. package/contracts/oapps/oft/src/tests/extensions/setup.rs +60 -31
  253. package/contracts/oapps/oft/src/tests/extensions/test_oft_fee.rs +5 -3
  254. package/contracts/oapps/oft/src/tests/extensions/test_pausable.rs +5 -3
  255. package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +6 -4
  256. package/contracts/oapps/oft/src/tests/test_decimals.rs +2 -2
  257. package/contracts/oapps/oft/src/tests/test_oft_msg_codec.rs +1 -2
  258. package/contracts/oapps/oft/src/tests/test_send.rs +4 -4
  259. package/contracts/oapps/oft/src/tests/test_utils.rs +122 -81
  260. package/contracts/oapps/oft/src/types.rs +20 -0
  261. package/contracts/oapps/oft-std/Cargo.toml +6 -0
  262. package/contracts/oapps/oft-std/integration-tests/extensions/mod.rs +3 -0
  263. package/contracts/oapps/oft-std/integration-tests/extensions/test_oft_fee.rs +157 -0
  264. package/contracts/oapps/oft-std/integration-tests/extensions/test_pausable.rs +162 -0
  265. package/contracts/oapps/oft-std/integration-tests/extensions/test_rate_limiter.rs +186 -0
  266. package/contracts/oapps/oft-std/integration-tests/mod.rs +3 -0
  267. package/contracts/oapps/{counter/integration_tests → oft-std/integration-tests}/setup.rs +76 -30
  268. package/contracts/oapps/oft-std/integration-tests/utils.rs +427 -0
  269. package/contracts/oapps/oft-std/src/lib.rs +12 -1
  270. package/contracts/oapps/oft-std/src/oft.rs +141 -26
  271. package/contracts/upgrader/Cargo.toml +19 -0
  272. package/contracts/upgrader/src/lib.rs +96 -0
  273. package/contracts/upgrader/src/tests/mod.rs +1 -0
  274. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract1.wasm +0 -0
  275. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract2.wasm +0 -0
  276. package/contracts/upgrader/src/tests/test_upgrader.rs +120 -0
  277. package/contracts/utils/src/auth.rs +44 -0
  278. package/contracts/utils/src/errors.rs +32 -5
  279. package/contracts/utils/src/lib.rs +5 -1
  280. package/contracts/utils/src/multisig.rs +211 -0
  281. package/contracts/utils/src/ownable.rs +50 -60
  282. package/contracts/utils/src/tests/buffer_reader.rs +6 -6
  283. package/contracts/utils/src/tests/buffer_writer.rs +6 -6
  284. package/contracts/utils/src/tests/bytes_ext.rs +2 -4
  285. package/contracts/utils/src/tests/mod.rs +4 -1
  286. package/contracts/utils/src/tests/multisig.rs +731 -0
  287. package/contracts/utils/src/tests/option_ext.rs +18 -0
  288. package/contracts/utils/src/tests/ownable.rs +22 -70
  289. package/contracts/utils/src/tests/ttl_configurable.rs +607 -0
  290. package/contracts/utils/src/tests/upgradeable.rs +290 -0
  291. package/contracts/utils/src/ttl_configurable.rs +153 -0
  292. package/contracts/utils/src/ttl_extendable.rs +27 -0
  293. package/contracts/utils/src/upgradeable.rs +56 -0
  294. package/contracts/workers/dvn/Cargo.toml +2 -2
  295. package/contracts/workers/dvn/src/auth.rs +24 -35
  296. package/contracts/workers/dvn/src/dvn.rs +23 -14
  297. package/contracts/workers/dvn/src/errors.rs +1 -7
  298. package/contracts/workers/dvn/src/events.rs +1 -14
  299. package/contracts/workers/dvn/src/interfaces/dvn.rs +2 -2
  300. package/contracts/workers/dvn/src/interfaces/mod.rs +0 -2
  301. package/contracts/workers/dvn/src/storage.rs +3 -13
  302. package/contracts/workers/dvn/src/tests/auth.rs +4 -4
  303. package/contracts/workers/dvn/src/tests/dvn.rs +1 -2
  304. package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +7 -8
  305. package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +11 -8
  306. package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +11 -12
  307. package/contracts/workers/dvn/src/tests/setup.rs +5 -5
  308. package/contracts/workers/dvn-fee-lib/Cargo.toml +0 -1
  309. package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +45 -16
  310. package/contracts/workers/dvn-fee-lib/src/errors.rs +3 -2
  311. package/contracts/workers/dvn-fee-lib/src/lib.rs +5 -11
  312. package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +30 -16
  313. package/contracts/workers/executor/src/auth.rs +80 -16
  314. package/contracts/workers/executor/src/executor.rs +17 -29
  315. package/contracts/workers/executor/src/storage.rs +2 -9
  316. package/contracts/workers/executor-fee-lib/Cargo.toml +1 -1
  317. package/contracts/workers/executor-fee-lib/src/errors.rs +9 -7
  318. package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +153 -121
  319. package/contracts/workers/executor-helper/Cargo.toml +1 -6
  320. package/contracts/workers/executor-helper/src/executor_helper.rs +53 -73
  321. package/contracts/workers/executor-helper/src/lib.rs +1 -7
  322. package/contracts/workers/price-feed/Cargo.toml +1 -2
  323. package/contracts/workers/price-feed/src/errors.rs +3 -2
  324. package/contracts/workers/price-feed/src/lib.rs +5 -6
  325. package/contracts/workers/price-feed/src/price_feed.rs +42 -23
  326. package/contracts/workers/worker/Cargo.toml +4 -0
  327. package/contracts/workers/worker/src/errors.rs +4 -0
  328. package/contracts/workers/worker/src/interfaces/price_feed.rs +3 -3
  329. package/contracts/workers/worker/src/lib.rs +2 -2
  330. package/contracts/workers/worker/src/tests/mod.rs +4 -0
  331. package/contracts/workers/worker/src/tests/setup.rs +147 -0
  332. package/contracts/workers/worker/src/tests/worker.rs +502 -0
  333. package/contracts/workers/worker/src/worker.rs +28 -30
  334. package/package.json +8 -5
  335. package/sdk/.turbo/turbo-build.log +1 -0
  336. package/sdk/.turbo/turbo-test.log +1009 -0
  337. package/sdk/dist/generated/bml.d.ts +104 -37
  338. package/sdk/dist/generated/bml.js +83 -42
  339. package/sdk/dist/generated/counter.d.ts +334 -175
  340. package/sdk/dist/generated/counter.js +109 -63
  341. package/sdk/dist/generated/dvn.d.ts +1985 -0
  342. package/sdk/dist/generated/dvn.js +326 -0
  343. package/sdk/dist/generated/dvn_fee_lib.d.ts +690 -0
  344. package/sdk/dist/generated/dvn_fee_lib.js +163 -0
  345. package/sdk/dist/generated/endpoint.d.ts +155 -46
  346. package/sdk/dist/generated/endpoint.js +93 -50
  347. package/sdk/dist/generated/executor.d.ts +1841 -0
  348. package/sdk/dist/generated/executor.js +312 -0
  349. package/sdk/dist/generated/executor_fee_lib.d.ts +1083 -0
  350. package/sdk/dist/generated/executor_fee_lib.js +255 -0
  351. package/sdk/dist/generated/executor_helper.d.ts +981 -0
  352. package/sdk/dist/generated/executor_helper.js +236 -0
  353. package/sdk/dist/generated/oft_std.d.ts +1722 -0
  354. package/sdk/dist/generated/oft_std.js +316 -0
  355. package/sdk/dist/generated/price_feed.d.ts +1077 -0
  356. package/sdk/dist/generated/price_feed.js +210 -0
  357. package/sdk/dist/generated/sml.d.ts +171 -56
  358. package/sdk/dist/generated/sml.js +111 -62
  359. package/sdk/dist/generated/treasury.d.ts +896 -0
  360. package/sdk/dist/generated/treasury.js +219 -0
  361. package/sdk/dist/generated/uln302.d.ts +175 -75
  362. package/sdk/dist/generated/uln302.js +126 -82
  363. package/sdk/dist/generated/upgrader.d.ts +70 -0
  364. package/sdk/dist/generated/upgrader.js +19 -0
  365. package/sdk/dist/index.d.ts +10 -0
  366. package/sdk/dist/index.js +14 -0
  367. package/sdk/dist/wasm/blocked-message-lib.d.ts +1 -0
  368. package/sdk/dist/wasm/blocked-message-lib.js +2 -0
  369. package/sdk/dist/wasm/counter.d.ts +1 -0
  370. package/sdk/dist/wasm/counter.js +2 -0
  371. package/sdk/dist/wasm/dvn-fee-lib.d.ts +1 -0
  372. package/sdk/dist/wasm/dvn-fee-lib.js +2 -0
  373. package/sdk/dist/wasm/dvn.d.ts +1 -0
  374. package/sdk/dist/wasm/dvn.js +2 -0
  375. package/sdk/dist/wasm/endpoint-v2.d.ts +1 -0
  376. package/sdk/dist/wasm/endpoint-v2.js +2 -0
  377. package/sdk/dist/wasm/executor-fee-lib.d.ts +1 -0
  378. package/sdk/dist/wasm/executor-fee-lib.js +2 -0
  379. package/sdk/dist/wasm/executor-helper.d.ts +1 -0
  380. package/sdk/dist/wasm/executor-helper.js +2 -0
  381. package/sdk/dist/wasm/executor.d.ts +1 -0
  382. package/sdk/dist/wasm/executor.js +2 -0
  383. package/sdk/dist/wasm/layerzero-views.d.ts +1 -0
  384. package/sdk/dist/wasm/layerzero-views.js +2 -0
  385. package/sdk/dist/wasm/oft-std.d.ts +1 -0
  386. package/sdk/dist/wasm/oft-std.js +2 -0
  387. package/sdk/dist/wasm/price-feed.d.ts +1 -0
  388. package/sdk/dist/wasm/price-feed.js +2 -0
  389. package/sdk/dist/wasm/simple-message-lib.d.ts +1 -0
  390. package/sdk/dist/wasm/simple-message-lib.js +2 -0
  391. package/sdk/dist/wasm/treasury.d.ts +1 -0
  392. package/sdk/dist/wasm/treasury.js +2 -0
  393. package/sdk/dist/wasm/uln302.d.ts +1 -0
  394. package/sdk/dist/wasm/uln302.js +2 -0
  395. package/sdk/dist/wasm/upgrader.d.ts +1 -0
  396. package/sdk/dist/wasm/upgrader.js +2 -0
  397. package/sdk/dist/wasm.d.ts +15 -0
  398. package/sdk/dist/wasm.js +15 -0
  399. package/sdk/package.json +7 -4
  400. package/sdk/src/index.ts +17 -0
  401. package/sdk/test/counter-sml.test.ts +376 -0
  402. package/sdk/test/counter-uln.test.ts +493 -0
  403. package/sdk/test/{oft.test.ts → oft-sml.test.ts} +187 -323
  404. package/sdk/test/suites/constants.ts +22 -2
  405. package/sdk/test/suites/dummyContractClient.ts +169 -0
  406. package/sdk/test/suites/globalSetup.ts +450 -0
  407. package/sdk/test/suites/localnet.ts +23 -6
  408. package/sdk/test/upgrader.test.ts +300 -0
  409. package/sdk/test/utils.ts +558 -85
  410. package/sdk/vitest.config.ts +21 -0
  411. package/tools/ts-bindings-gen/src/main.rs +12 -1
  412. package/turbo.json +2 -0
  413. package/contracts/common-macros/src/contract_impl.rs +0 -47
  414. package/contracts/common-macros/src/ownable.rs +0 -59
  415. package/contracts/common-macros/src/tests/contract_impl.rs +0 -381
  416. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +0 -32
  417. package/contracts/endpoint-v2/src/tests/messaging_channel/clear.rs +0 -316
  418. package/contracts/endpoint-v2/src/tests/messaging_channel/internal.rs +0 -388
  419. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1.rs +0 -162
  420. package/contracts/message-libs/message-lib-common/src/tests/worker_options.rs +0 -319
  421. package/contracts/oapp-macros/src/lib.rs +0 -154
  422. package/contracts/oapp-macros/src/oapp_core.rs +0 -40
  423. package/contracts/oapp-macros/src/oapp_full.rs +0 -21
  424. package/contracts/oapp-macros/src/oapp_options_type3.rs +0 -31
  425. package/contracts/oapp-macros/src/oapp_receiver.rs +0 -48
  426. package/contracts/oapp-macros/src/oapp_sender.rs +0 -21
  427. package/contracts/oapp-macros/src/util.rs +0 -107
  428. package/contracts/oapps/oft/src/constants.rs +0 -5
  429. package/contracts/oapps/oft/src/default_oft_impl.rs +0 -146
  430. package/contracts/utils/src/tests/ttl.rs +0 -421
  431. package/contracts/utils/src/ttl.rs +0 -123
  432. package/contracts/workers/dvn/src/interfaces/multisig.rs +0 -56
  433. package/contracts/workers/dvn/src/multisig.rs +0 -153
  434. package/sdk/test/index.test.ts +0 -376
  435. /package/contracts/{oapp-macros → oapps/oapp-macros}/Cargo.toml +0 -0
@@ -1,319 +0,0 @@
1
- use crate::worker_options::{
2
- convert_legacy_options, split_worker_options, EXECUTOR_OPTION_TYPE_LZRECEIVE, EXECUTOR_OPTION_TYPE_NATIVE_DROP,
3
- EXECUTOR_WORKER_ID, LEGACY_OPTIONS_TYPE_1, LEGACY_OPTIONS_TYPE_2, OPTIONS_TYPE_3,
4
- };
5
- use hex_literal::hex;
6
- use soroban_sdk::{Bytes, BytesN, Env};
7
- use utils::buffer_reader::BufferReader;
8
-
9
- #[test]
10
- fn test_split_worker_options_dvn_only() {
11
- let env = Env::default();
12
-
13
- // Build TYPE_3 options with only DVN options
14
- // x"0003" + x"020002000102000302ff0102000200010200020101"
15
- let mut options = Bytes::new(&env);
16
- options.extend_from_slice(&OPTIONS_TYPE_3.to_be_bytes());
17
- options.extend_from_slice(&hex!("020002000102000302ff0102000200010200020101"));
18
-
19
- let (executor_options, dvn_options) = split_worker_options(&env, &options);
20
-
21
- assert_eq!(executor_options.len(), 0);
22
- assert_eq!(dvn_options.len(), 3);
23
-
24
- // Check DVN options are grouped correctly by index
25
- assert_eq!(dvn_options.get(0).unwrap(), Bytes::from_slice(&env, &hex!("02000200010200020001")));
26
- assert_eq!(dvn_options.get(1).unwrap(), Bytes::from_slice(&env, &hex!("0200020101")));
27
- assert_eq!(dvn_options.get(2).unwrap(), Bytes::from_slice(&env, &hex!("02000302ff01")));
28
- }
29
-
30
- #[test]
31
- fn test_split_worker_options_executor_only() {
32
- let env = Env::default();
33
-
34
- // Build TYPE_3 options with two executor options
35
- // x"0003" + x"0100110100000000000000000000000000009470010011010000000000000000000000000000ea60"
36
- let executor_options_raw = hex!("0100110100000000000000000000000000009470010011010000000000000000000000000000ea60");
37
- let mut options = Bytes::new(&env);
38
- options.extend_from_slice(&OPTIONS_TYPE_3.to_be_bytes());
39
- options.extend_from_slice(&executor_options_raw);
40
-
41
- let (executor_options, dvn_options) = split_worker_options(&env, &options);
42
-
43
- assert_eq!(executor_options, Bytes::from_slice(&env, &executor_options_raw));
44
- assert_eq!(dvn_options.len(), 0);
45
- }
46
-
47
- #[test]
48
- fn test_split_worker_options_options() {
49
- let env = Env::default();
50
-
51
- // Build TYPE_3 options with executor and DVN options
52
- // executor: x"0100110100000000000000000000000000009470010011010000000000000000000000000000ea60"
53
- // dvn: x"020002000102000302ff0102000200010200020101"
54
- let executor_options_raw = hex!("0100110100000000000000000000000000009470010011010000000000000000000000000000ea60");
55
- let dvn_options_raw = hex!("020002000102000302ff0102000200010200020101");
56
-
57
- let mut options = Bytes::new(&env);
58
- options.extend_from_slice(&OPTIONS_TYPE_3.to_be_bytes());
59
- options.extend_from_slice(&executor_options_raw);
60
- options.extend_from_slice(&dvn_options_raw);
61
-
62
- let (executor_options, dvn_options) = split_worker_options(&env, &options);
63
-
64
- assert_eq!(executor_options, Bytes::from_slice(&env, &executor_options_raw));
65
- assert_eq!(dvn_options.len(), 3);
66
-
67
- // Check DVN options grouped by index
68
- assert_eq!(dvn_options.get(0).unwrap(), Bytes::from_slice(&env, &hex!("02000200010200020001")));
69
- assert_eq!(dvn_options.get(1).unwrap(), Bytes::from_slice(&env, &hex!("0200020101")));
70
- assert_eq!(dvn_options.get(2).unwrap(), Bytes::from_slice(&env, &hex!("02000302ff01")));
71
- }
72
-
73
- #[test]
74
- fn test_decode_legacy_options_type_1() {
75
- let env = Env::default();
76
-
77
- // Legacy type 1: x"0001" + gas as u256 (200000 = 0x30d40)
78
- let mut options = Bytes::new(&env);
79
- options.extend_from_slice(&LEGACY_OPTIONS_TYPE_1.to_be_bytes());
80
- options.extend_from_slice(&hex!("0000000000000000000000000000000000000000000000000000000000030d40"));
81
-
82
- let (executor_options, dvn_options) = split_worker_options(&env, &options);
83
-
84
- // Expected: x"0100110100000000000000000000000000030d40"
85
- assert_eq!(executor_options, Bytes::from_slice(&env, &hex!("0100110100000000000000000000000000030d40")));
86
- assert_eq!(dvn_options.len(), 0);
87
-
88
- // Verify by parsing
89
- let mut reader = BufferReader::new(&executor_options);
90
- assert_eq!(reader.read_u8(), EXECUTOR_WORKER_ID);
91
- assert_eq!(reader.read_u16(), 17);
92
- assert_eq!(reader.read_u8(), EXECUTOR_OPTION_TYPE_LZRECEIVE);
93
- assert_eq!(reader.read_u128(), 200000);
94
- assert_eq!(reader.remaining_len(), 0);
95
- }
96
-
97
- #[test]
98
- fn test_decode_legacy_options_type_2() {
99
- let env = Env::default();
100
-
101
- // Legacy type 2: gas(u256) + amount(u256) + receiver(20 bytes)
102
- // gas: 200000 (0x30d40), amount: 10000000 (0x989680), receiver: 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266
103
- let legacy_options = Bytes::from_slice(&env, &hex!("0000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000989680f39fd6e51aad88f6f4ce6ab8827279cfffb92266"));
104
- let expected_options = hex!("0100110100000000000000000000000000030d400100310200000000000000000000000000989680000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266");
105
-
106
- let executor_options = convert_legacy_options(&env, &mut BufferReader::new(&legacy_options), LEGACY_OPTIONS_TYPE_2);
107
-
108
- // adapter params type 2 includes both lzReceive and nativeDrop
109
- assert_eq!(executor_options, Bytes::from_slice(&env, &expected_options));
110
-
111
- // Verify by parsing
112
- let mut reader = BufferReader::new(&executor_options);
113
-
114
- // lzReceive option
115
- assert_eq!(reader.read_u8(), EXECUTOR_WORKER_ID);
116
- assert_eq!(reader.read_u16(), 17);
117
- assert_eq!(reader.read_u8(), EXECUTOR_OPTION_TYPE_LZRECEIVE);
118
- assert_eq!(reader.read_u128(), 200000);
119
-
120
- // nativeDrop option
121
- assert_eq!(reader.read_u8(), EXECUTOR_WORKER_ID);
122
- assert_eq!(reader.read_u16(), 49);
123
- assert_eq!(reader.read_u8(), EXECUTOR_OPTION_TYPE_NATIVE_DROP);
124
- assert_eq!(reader.read_u128(), 10000000);
125
- assert_eq!(
126
- reader.read_bytes_n(),
127
- BytesN::from_array(&env, &hex!("000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266"))
128
- );
129
- }
130
-
131
- #[test]
132
- fn test_split_worker_options_using_legacy_option() {
133
- let env = Env::default();
134
-
135
- // Same as test_decode_legacy_options_type_2
136
- let mut legacy_options = Bytes::new(&env);
137
- legacy_options.extend_from_slice(&LEGACY_OPTIONS_TYPE_2.to_be_bytes());
138
- legacy_options.extend_from_slice(&hex!("0000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000989680f39fd6e51aad88f6f4ce6ab8827279cfffb92266"));
139
- let expected_options = hex!("0100110100000000000000000000000000030d400100310200000000000000000000000000989680000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266");
140
-
141
- let (executor_options, _) = split_worker_options(&env, &legacy_options);
142
-
143
- // adapter params type 2 includes both lzReceive and nativeDrop
144
- assert_eq!(executor_options, Bytes::from_slice(&env, &expected_options));
145
-
146
- let mut reader = BufferReader::new(&executor_options);
147
-
148
- // lzReceive
149
- assert_eq!(reader.read_u8(), EXECUTOR_WORKER_ID);
150
- assert_eq!(reader.read_u16(), 17);
151
- assert_eq!(reader.read_u8(), EXECUTOR_OPTION_TYPE_LZRECEIVE);
152
- assert_eq!(reader.read_u128(), 200000);
153
-
154
- // nativeDrop
155
- assert_eq!(reader.read_u8(), EXECUTOR_WORKER_ID);
156
- assert_eq!(reader.read_u16(), 49);
157
- assert_eq!(reader.read_u8(), EXECUTOR_OPTION_TYPE_NATIVE_DROP);
158
- assert_eq!(reader.read_u128(), 10000000);
159
- assert_eq!(
160
- reader.read_bytes_n(),
161
- BytesN::from_array(&env, &hex!("000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266"))
162
- );
163
- }
164
-
165
- #[test]
166
- fn test_group_dvn_options_by_index() {
167
- let env = Env::default();
168
-
169
- let dvn_option_bytes = hex!("020002000102000302ff0102000200010200020101");
170
- let mut options = Bytes::new(&env);
171
- options.extend_from_slice(&OPTIONS_TYPE_3.to_be_bytes());
172
- options.extend_from_slice(&dvn_option_bytes);
173
-
174
- let (_, dvn_options) = split_worker_options(&env, &options);
175
-
176
- let expected_dvn_0_options = hex!("02000200010200020001"); // 2 DVN options, id = 0
177
- let expected_dvn_1_options = hex!("0200020101"); // 1 DVN option, id = 1
178
- let expected_dvn_2_options = hex!("02000302ff01"); // 1 DVN option, id = 2
179
-
180
- let mut found_0 = false;
181
- let mut found_1 = false;
182
- let mut found_2 = false;
183
-
184
- // Check that DVN options are grouped correctly by index
185
- for (index, option) in dvn_options.iter() {
186
- if index == 0 {
187
- found_0 = true;
188
- assert_eq!(option, Bytes::from_slice(&env, &expected_dvn_0_options));
189
- }
190
- if index == 1 {
191
- found_1 = true;
192
- assert_eq!(option, Bytes::from_slice(&env, &expected_dvn_1_options));
193
- }
194
- if index == 2 {
195
- found_2 = true;
196
- assert_eq!(option, Bytes::from_slice(&env, &expected_dvn_2_options));
197
- }
198
- }
199
- assert!(found_0 && found_1 && found_2);
200
- }
201
-
202
- #[test]
203
- fn test_get_matching_options() {
204
- let env = Env::default();
205
-
206
- // Same DVN options as test_split_worker_options_dvn_only
207
- let mut options = Bytes::new(&env);
208
- options.extend_from_slice(&OPTIONS_TYPE_3.to_be_bytes());
209
- options.extend_from_slice(&hex!("020002000102000302ff0102000200010200020101"));
210
-
211
- let (_, dvn_options) = split_worker_options(&env, &options);
212
-
213
- assert_eq!(dvn_options.get(0).unwrap(), Bytes::from_slice(&env, &hex!("02000200010200020001")));
214
- assert_eq!(dvn_options.get(1).unwrap(), Bytes::from_slice(&env, &hex!("0200020101")));
215
- assert_eq!(dvn_options.get(2).unwrap(), Bytes::from_slice(&env, &hex!("02000302ff01")));
216
- }
217
-
218
- // ============ Error tests ============
219
-
220
- #[test]
221
- #[should_panic(expected = "Error(Contract, #1105)")] // WorkerOptionsError::InvalidOptions
222
- fn test_decode_invalid_options_too_short() {
223
- let env = Env::default();
224
- let mut options = Bytes::new(&env);
225
- options.push_back(OPTIONS_TYPE_3 as u8);
226
- split_worker_options(&env, &options);
227
- }
228
-
229
- #[test]
230
- #[should_panic(expected = "Error(Contract, #1106)")] // WorkerOptionsError::InvalidWorkerId
231
- fn test_decode_invalid_worker_id() {
232
- let env = Env::default();
233
- let mut options = Bytes::new(&env);
234
- options.extend_from_slice(&OPTIONS_TYPE_3.to_be_bytes());
235
- options.extend_from_slice(&hex!("00000501020304050607")); // Invalid worker_id = 0
236
- split_worker_options(&env, &options);
237
- }
238
-
239
- #[test]
240
- #[should_panic(expected = "Error(Contract, #1107)")] // WorkerOptionsError::LegacyOptionsType1GasOverflow
241
- fn test_legacy_type1_gas_overflow() {
242
- let env = Env::default();
243
- let mut options = Bytes::new(&env);
244
- options.extend_from_slice(&LEGACY_OPTIONS_TYPE_1.to_be_bytes());
245
- options.extend_from_slice(&hex!("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")); // u256 max
246
- split_worker_options(&env, &options);
247
- }
248
-
249
- #[test]
250
- #[should_panic(expected = "Error(Contract, #1109)")] // WorkerOptionsError::LegacyOptionsType2GasOverflow
251
- fn test_legacy_type2_gas_overflow() {
252
- let env = Env::default();
253
- let mut options = Bytes::new(&env);
254
- options.extend_from_slice(&LEGACY_OPTIONS_TYPE_2.to_be_bytes());
255
- options.extend_from_slice(&hex!("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000003e84242424242424242424242424242424242424242424242424242424242424242"));
256
- split_worker_options(&env, &options);
257
- }
258
-
259
- #[test]
260
- #[should_panic(expected = "Error(Contract, #1108)")] // WorkerOptionsError::LegacyOptionsType2AmountOverflow
261
- fn test_legacy_type2_amount_overflow() {
262
- let env = Env::default();
263
- let mut options = Bytes::new(&env);
264
- options.extend_from_slice(&LEGACY_OPTIONS_TYPE_2.to_be_bytes());
265
- options.extend_from_slice(&hex!("0000000000000000000000000000000000000000000000000000000000030d40ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4242424242424242424242424242424242424242424242424242424242424242"));
266
- split_worker_options(&env, &options);
267
- }
268
-
269
- #[test]
270
- #[should_panic(expected = "Error(Contract, #1102)")] // WorkerOptionsError::InvalidLegacyOptionsType1
271
- fn test_legacy_type1_invalid_size_too_short() {
272
- let env = Env::default();
273
- let mut options = Bytes::new(&env);
274
- options.extend_from_slice(&LEGACY_OPTIONS_TYPE_1.to_be_bytes());
275
- options.extend_from_slice(&hex!("00000000000000000000000000000000")); // Only 16 bytes
276
- split_worker_options(&env, &options);
277
- }
278
-
279
- #[test]
280
- #[should_panic(expected = "Error(Contract, #1102)")] // WorkerOptionsError::InvalidLegacyOptionsType1
281
- fn test_legacy_type1_invalid_size_too_long() {
282
- let env = Env::default();
283
- let mut options = Bytes::new(&env);
284
- options.extend_from_slice(&LEGACY_OPTIONS_TYPE_1.to_be_bytes());
285
- options.extend_from_slice(&hex!(
286
- "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
287
- )); // 48 bytes
288
- split_worker_options(&env, &options);
289
- }
290
-
291
- #[test]
292
- #[should_panic(expected = "Error(Contract, #1103)")] // WorkerOptionsError::InvalidLegacyOptionsType2
293
- fn test_legacy_type2_invalid_size_too_short() {
294
- let env = Env::default();
295
- let mut options = Bytes::new(&env);
296
- options.extend_from_slice(&LEGACY_OPTIONS_TYPE_2.to_be_bytes());
297
- options.extend_from_slice(&hex!("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")); // 64 bytes, no receiver
298
- split_worker_options(&env, &options);
299
- }
300
-
301
- #[test]
302
- #[should_panic(expected = "Error(Contract, #1103)")] // WorkerOptionsError::InvalidLegacyOptionsType2
303
- fn test_legacy_type2_invalid_size_too_long() {
304
- let env = Env::default();
305
- let mut options = Bytes::new(&env);
306
- options.extend_from_slice(&LEGACY_OPTIONS_TYPE_2.to_be_bytes());
307
- options.extend_from_slice(&[0u8; 97]); // 97 bytes, too long
308
- split_worker_options(&env, &options);
309
- }
310
-
311
- #[test]
312
- #[should_panic(expected = "Error(Contract, #1104)")] // WorkerOptionsError::InvalidOptionType
313
- fn test_unsupported_option_type() {
314
- let env = Env::default();
315
- let mut options = Bytes::new(&env);
316
- options.extend_from_slice(&hex!("0063")); // Invalid type 99
317
- options.extend_from_slice(&hex!("0000000000000000000000000000000000000000000000000000000000000000"));
318
- split_worker_options(&env, &options);
319
- }
@@ -1,154 +0,0 @@
1
- //! # OApp Procedural Macros
2
- //!
3
- //! This crate provides the `#[oapp]` procedural macro for implementing LayerZero OApp
4
- //! (Omnichain Application) functionality on Soroban smart contracts.
5
- //!
6
- //! ## Overview
7
- //!
8
- //! The OApp framework provides full bidirectional cross-chain communication:
9
- //!
10
- //! - **OAppCore**: Foundation for all OApp functionality (peer management, endpoint access)
11
- //! - **OAppSender**: Enables sending cross-chain messages through LayerZero
12
- //! - **OAppReceiver**: Handles incoming cross-chain messages
13
- //! - **OAppOptionsType3**: Manages enforced options for message execution parameters
14
- //!
15
- //! ## Available Macros
16
- //!
17
- //! ### `#[oapp]`
18
- //! The main macro that provides Core + Sender + Receiver + OptionsType3 functionality.
19
- //! This is the only macro you need for cross-chain communication.
20
- //!
21
- //! ### `#[oapp_manual_impl(...)]`
22
- //! A marker attribute to indicate which trait implementations should be manually provided
23
- //! by the user instead of using default implementations.
24
- //!
25
- //! ## Manual Implementation Control
26
- //!
27
- //! By default, `#[oapp]` generates default trait implementations. Use `#[oapp_manual_impl(...)]`
28
- //! to customize specific behaviors:
29
- //!
30
- //! Supported options:
31
- //! - `core` - Manually implement `OAppCore`
32
- //! - `sender` - Manually implement `OAppSender`
33
- //! - `receiver` - Manually implement `OAppReceiver` (useful for custom `next_nonce`, etc.)
34
- //! - `options_type3` - Manually implement `OAppOptionsType3`
35
- //!
36
- //! ## Examples
37
- //!
38
- //! ### Full OApp with Default Implementations
39
- //!
40
- //! ```ignore
41
- //! use oapp_macros::oapp;
42
- //!
43
- //! #[oapp]
44
- //! struct MyOApp;
45
- //!
46
- //! // Only __lz_receive must be implemented as an inherent method
47
- //! impl MyOApp {
48
- //! fn __lz_receive(
49
- //! env: &Env,
50
- //! executor: &Address,
51
- //! origin: &Origin,
52
- //! guid: &BytesN<32>,
53
- //! message: &Bytes,
54
- //! extra_data: &Bytes,
55
- //! value: i128,
56
- //! ) {
57
- //! // Your message handling logic (verify_and_clear_payload already called)
58
- //! }
59
- //! }
60
- //! ```
61
- //!
62
- //! ### OApp with Custom Core Version
63
- //!
64
- //! ```ignore
65
- //! #[oapp]
66
- //! #[oapp_manual_impl(core)]
67
- //! struct MyOApp;
68
- //!
69
- //! #[contractimpl(contracttrait)]
70
- //! #[common_macros::ownable]
71
- //! impl OAppCore for MyOApp {
72
- //! fn oapp_version(_env: &Env) -> (u64, u64) {
73
- //! (1, 1) // Custom version
74
- //! }
75
- //! }
76
- //!
77
- //! impl MyOApp {
78
- //! fn __lz_receive(...) { /* ... */ }
79
- //! }
80
- //! ```
81
- //!
82
- //! ### OApp with Custom Receiver (e.g., ordered delivery)
83
- //!
84
- //! ```ignore
85
- //! use oapp::oapp_receiver::{OAppReceiver, verify_and_clear_payload};
86
- //!
87
- //! #[oapp]
88
- //! #[oapp_manual_impl(receiver)]
89
- //! struct MyOrderedOApp;
90
- //!
91
- //! #[contractimpl(contracttrait)]
92
- //! impl OAppReceiver for MyOrderedOApp {
93
- //! fn next_nonce(env: &Env, src_eid: u32, sender: &BytesN<32>) -> u64 {
94
- //! // Custom nonce logic for ordered delivery
95
- //! Storage::max_received_nonce(env, src_eid, sender) + 1
96
- //! }
97
- //! fn lz_receive(env: &Env, executor: &Address, origin: &Origin, ...) {
98
- //! verify_and_clear_payload::<Self>(env, executor, origin, guid, message, value);
99
- //! // Your message handling logic
100
- //! }
101
- //! }
102
- //! ```
103
- //!
104
- //! ### OApp with Multiple Manual Implementations
105
- //!
106
- //! ```ignore
107
- //! #[oapp]
108
- //! #[oapp_manual_impl(core, sender, options_type3)]
109
- //! struct MyCustomOApp;
110
- //!
111
- //! #[contractimpl(contracttrait)]
112
- //! #[common_macros::ownable]
113
- //! impl OAppCore for MyCustomOApp { /* ... */ }
114
- //! impl OAppSender for MyCustomOApp { /* ... */ }
115
- //! #[contractimpl(contracttrait)]
116
- //! impl OAppOptionsType3 for MyCustomOApp { /* ... */ }
117
- //!
118
- //! impl MyCustomOApp {
119
- //! fn __lz_receive(...) { /* ... */ }
120
- //! }
121
- //! ```
122
-
123
- use crate::util::parse_struct;
124
- use proc_macro::TokenStream;
125
-
126
- mod oapp_core;
127
- mod oapp_full;
128
- mod oapp_options_type3;
129
- mod oapp_receiver;
130
- mod oapp_sender;
131
- mod util;
132
-
133
- /// Derives a complete OApp: `#[contract]` + `#[ownable]` + Core + Sender + Receiver + OptionsType3.
134
- ///
135
- /// You must implement `__lz_receive` as an inherent method. See module docs for examples.
136
- #[proc_macro_attribute]
137
- pub fn oapp(_attr: TokenStream, item: TokenStream) -> TokenStream {
138
- let (name, item, disable_config) = match parse_struct(item) {
139
- Ok(result) => result,
140
- Err(e) => return e,
141
- };
142
- oapp_full::generate_impl(&name, item, disable_config).into()
143
- }
144
-
145
- /// Marker attribute to skip generating specific trait implementations.
146
- ///
147
- /// Supported options: `core`, `sender`, `receiver`, `options_type3`
148
- ///
149
- /// Example: `#[oapp_manual_impl(core, receiver)]` skips generating
150
- /// `OAppCore` and `OAppReceiver` implementations.
151
- #[proc_macro_attribute]
152
- pub fn oapp_manual_impl(_attr: TokenStream, item: TokenStream) -> TokenStream {
153
- item
154
- }
@@ -1,40 +0,0 @@
1
- use heck::ToSnakeCase;
2
- use proc_macro2::TokenStream;
3
- use quote::quote;
4
- use syn::{Ident, ItemStruct};
5
-
6
- /// Generates the `OAppCore` trait implementation and adds `#[contract]` + `#[ownable]` to the struct.
7
- ///
8
- /// When `manual_impl_core` is false, generates an empty `impl OAppCore`
9
- /// that uses the trait's default implementations for peer management and endpoint access.
10
- pub fn generate_impl(name: &Ident, item_struct: ItemStruct, manual_impl_core: bool) -> TokenStream {
11
- // Create a unique module name to avoid import conflicts when multiple structs
12
- // use oapp macros in the same module. The import must be `OAppCore`
13
- // (not an alias) because Soroban SDK's #[contractimpl(contracttrait)] generates
14
- // a macro call `OAppCore!(...)` that needs to resolve to the macro
15
- // exported by #[contracttrait].
16
- let impl_mod = syn::Ident::new(&format!("__oapp_impl_{}", name.to_string().to_snake_case()), name.span());
17
-
18
- let manual_impl = (!manual_impl_core).then(|| {
19
- quote! {
20
- #[doc(hidden)]
21
- mod #impl_mod {
22
- use super::*;
23
- // Import types used by OAppCore trait's default implementations
24
- use soroban_sdk::{Address, BytesN, Env};
25
- use oapp::oapp_core::OAppCore;
26
-
27
- #[soroban_sdk::contractimpl(contracttrait)]
28
- impl OAppCore for #name {}
29
- }
30
- }
31
- });
32
-
33
- quote! {
34
- #[soroban_sdk::contract]
35
- #[common_macros::ttl_configurable]
36
- #item_struct
37
-
38
- #manual_impl
39
- }
40
- }
@@ -1,21 +0,0 @@
1
- use crate::{oapp_core, oapp_options_type3, oapp_receiver, oapp_sender, util::ManualImplConfig};
2
- use proc_macro2::TokenStream;
3
- use quote::quote;
4
- use syn::{Ident, ItemStruct};
5
-
6
- /// Generates the full OApp implementation: Core + Sender + Receiver + OptionsType3.
7
- ///
8
- /// Combines all OApp components. Use `manual_impl_config` to skip generating
9
- /// specific trait implementations when custom implementations are needed.
10
- pub fn generate_impl(name: &Ident, item: ItemStruct, manual_impl_config: ManualImplConfig) -> TokenStream {
11
- let core_impl = oapp_core::generate_impl(name, item, manual_impl_config.core);
12
- let sender_impl = oapp_sender::generate_impl(name, manual_impl_config.sender);
13
- let receiver_impl = oapp_receiver::generate_impl(name, manual_impl_config.receiver);
14
- let options_type3_impl = oapp_options_type3::generate_impl(name, manual_impl_config.options_type3);
15
- quote! {
16
- #core_impl
17
- #sender_impl
18
- #receiver_impl
19
- #options_type3_impl
20
- }
21
- }
@@ -1,31 +0,0 @@
1
- use heck::ToSnakeCase;
2
- use proc_macro2::TokenStream;
3
- use quote::quote;
4
- use syn::Ident;
5
-
6
- /// Generates the `OAppOptionsType3` trait implementation.
7
- ///
8
- /// When `manual_impl_options_type3` is false, generates an empty `impl OAppOptionsType3`
9
- /// that uses the trait's default implementations for enforced options management.
10
- pub fn generate_impl(name: &Ident, manual_impl_options_type3: bool) -> TokenStream {
11
- let impl_mod =
12
- syn::Ident::new(&format!("__oapp_options_type3_impl_{}", name.to_string().to_snake_case()), name.span());
13
-
14
- let options_type3_impl = (!manual_impl_options_type3).then(|| {
15
- quote! {
16
- #[doc(hidden)]
17
- mod #impl_mod {
18
- use super::*;
19
- use soroban_sdk::{Env, Bytes, Vec};
20
- use oapp::oapp_options_type3::{OAppOptionsType3, EnforcedOptionParam};
21
-
22
- #[soroban_sdk::contractimpl(contracttrait)]
23
- impl OAppOptionsType3 for #name {}
24
- }
25
- }
26
- });
27
-
28
- quote! {
29
- #options_type3_impl
30
- }
31
- }
@@ -1,48 +0,0 @@
1
- use heck::ToSnakeCase;
2
- use proc_macro2::TokenStream;
3
- use quote::quote;
4
- use syn::Ident;
5
-
6
- /// Generates the `OAppReceiver` trait implementation.
7
- ///
8
- /// When `manual_impl_receiver` is false, generates `lz_receive` that calls
9
- /// `verify_and_clear_payload` then delegates to the user's `__lz_receive` method.
10
- pub fn generate_impl(name: &Ident, manual_impl_receiver: bool) -> TokenStream {
11
- // Use a distinct module name to avoid conflicts with oapp_core's module
12
- let impl_mod = syn::Ident::new(&format!("__oapp_receiver_impl_{}", name.to_string().to_snake_case()), name.span());
13
-
14
- let receiver_impl = (!manual_impl_receiver).then(|| {
15
- quote! {
16
- // OAppReceiver implementation
17
- // This generates contract entry points that are callable via LayerZeroReceiverClient
18
- // because the function names match ILayerZeroReceiver's interface.
19
- #[doc(hidden)]
20
- mod #impl_mod {
21
- use super::*;
22
- use soroban_sdk::{Address, Bytes, BytesN, Env};
23
- use endpoint_v2::Origin;
24
- use oapp::oapp_receiver::OAppReceiver;
25
-
26
- #[soroban_sdk::contractimpl(contracttrait)]
27
- impl OAppReceiver for #name {
28
- fn lz_receive(
29
- env: &soroban_sdk::Env,
30
- executor: &soroban_sdk::Address,
31
- origin: &endpoint_v2::Origin,
32
- guid: &soroban_sdk::BytesN<32>,
33
- message: &soroban_sdk::Bytes,
34
- extra_data: &soroban_sdk::Bytes,
35
- value: i128,
36
- ) {
37
- oapp::oapp_receiver::verify_and_clear_payload::<Self>(env, executor, origin, guid, message, value);
38
- Self::__lz_receive(env, executor, origin, guid, message, extra_data, value)
39
- }
40
- }
41
- }
42
- }
43
- });
44
-
45
- quote! {
46
- #receiver_impl
47
- }
48
- }
@@ -1,21 +0,0 @@
1
- use proc_macro2::TokenStream;
2
- use quote::quote;
3
- use syn::Ident;
4
-
5
- /// Generates the `OAppSender` trait implementation.
6
- ///
7
- /// When `manual_impl_sender` is false, generates an empty `impl OAppSender`
8
- /// that uses the trait's default implementations for `lz_quote` and `lz_send`...
9
- pub fn generate_impl(name: &Ident, manual_impl_sender: bool) -> TokenStream {
10
- let sender_impl = (!manual_impl_sender).then(|| {
11
- quote! {
12
- use oapp::oapp_sender::OAppSender as _;
13
-
14
- impl oapp::oapp_sender::OAppSender for #name {}
15
- }
16
- });
17
-
18
- quote! {
19
- #sender_impl
20
- }
21
- }