@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
@@ -18,66 +18,73 @@ fn get_call_data_size_pads_signatures() {
18
18
 
19
19
  #[test]
20
20
  fn apply_premium_multiplier_only_both_zero() {
21
+ let env = Env::default();
21
22
  let fee = 1_000i128;
22
23
  let multiplier_bps = 15_000u32;
23
24
  // multiplier_bps is non-zero, so default_multiplier_bps is ignored
24
- let result = apply_premium(fee, multiplier_bps, 10_000, 0, 0);
25
+ let result = apply_premium(&env, fee, multiplier_bps, 10_000, 0, 0);
25
26
  assert_eq!(result, fee * multiplier_bps as i128 / BPS_BASE);
26
27
  }
27
28
 
28
29
  #[test]
29
30
  fn apply_premium_multiplier_only_native_price_zero() {
31
+ let env = Env::default();
30
32
  let fee = 1_000i128;
31
33
  let multiplier_bps = 15_000u32;
32
- let result = apply_premium(fee, multiplier_bps, 10_000, 100, 0);
34
+ let result = apply_premium(&env, fee, multiplier_bps, 10_000, 100, 0);
33
35
  assert_eq!(result, fee * multiplier_bps as i128 / BPS_BASE);
34
36
  }
35
37
 
36
38
  #[test]
37
39
  fn apply_premium_multiplier_only_floor_margin_zero() {
40
+ let env = Env::default();
38
41
  let fee = 1_000i128;
39
42
  let multiplier_bps = 15_000u32;
40
- let result = apply_premium(fee, multiplier_bps, 10_000, 0, NATIVE_DECIMALS_RATE);
43
+ let result = apply_premium(&env, fee, multiplier_bps, 10_000, 0, NATIVE_DECIMALS_RATE);
41
44
  assert_eq!(result, fee * multiplier_bps as i128 / BPS_BASE);
42
45
  }
43
46
 
44
47
  #[test]
45
48
  fn apply_premium_uses_default_when_multiplier_zero() {
49
+ let env = Env::default();
46
50
  let fee = 1_000i128;
47
51
  let default_bps = 12_000u32;
48
52
  // multiplier_bps is 0, so default_multiplier_bps should be used
49
- let result = apply_premium(fee, 0, default_bps, 0, 0);
53
+ let result = apply_premium(&env, fee, 0, default_bps, 0, 0);
50
54
  assert_eq!(result, fee * default_bps as i128 / BPS_BASE);
51
55
  }
52
56
 
53
57
  #[test]
54
58
  fn apply_premium_floor_margin_wins() {
59
+ let env = Env::default();
55
60
  let fee = 1_000i128;
56
61
  let multiplier_bps = 10_000u32;
57
62
  let floor_margin_usd = 10u128;
58
63
  let native_price_usd = NATIVE_DECIMALS_RATE;
59
64
 
60
- let result = apply_premium(fee, multiplier_bps, 10_000, floor_margin_usd, native_price_usd);
65
+ let result = apply_premium(&env, fee, multiplier_bps, 10_000, floor_margin_usd, native_price_usd);
61
66
  assert_eq!(result, fee + floor_margin_usd as i128);
62
67
  }
63
68
 
64
69
  #[test]
65
70
  fn apply_premium_multiplier_wins_over_small_floor() {
71
+ let env = Env::default();
66
72
  let fee = 1_000i128;
67
73
  let multiplier_bps = 12_000u32;
68
74
  let floor_margin_usd = 1u128;
69
75
  let native_price_usd = NATIVE_DECIMALS_RATE;
70
76
 
71
- let result = apply_premium(fee, multiplier_bps, 10_000, floor_margin_usd, native_price_usd);
77
+ let result = apply_premium(&env, fee, multiplier_bps, 10_000, floor_margin_usd, native_price_usd);
72
78
  assert_eq!(result, 1_200);
73
79
  }
74
80
 
75
81
  #[test]
76
- #[should_panic(expected = "Error(Contract, #2)")] // DvnFeeLibError::InvalidGas
82
+ #[should_panic(expected = "Error(Contract, #1)")] // DvnFeeLibError::EidNotSupported
77
83
  fn get_fee_panics_when_gas_zero() {
78
84
  let env = Env::default();
79
85
  env.mock_all_auths();
80
- let fee_lib_addr = env.register(DvnFeeLib, ());
86
+ let owner = Address::generate(&env);
87
+ let fee_lib_addr = env.register(DvnFeeLib, (&owner,));
81
88
  let params = DvnFeeParams {
82
89
  sender: Address::generate(&env),
83
90
  dst_eid: 1,
@@ -95,11 +102,12 @@ fn get_fee_panics_when_gas_zero() {
95
102
  }
96
103
 
97
104
  #[test]
98
- #[should_panic(expected = "Error(Contract, #1)")] // DvnFeeLibError::InvalidDVNOptions
105
+ #[should_panic(expected = "Error(Contract, #2)")] // DvnFeeLibError::InvalidDVNOptions
99
106
  fn get_fee_panics_when_options_not_empty() {
100
107
  let env = Env::default();
101
108
  env.mock_all_auths();
102
- let fee_lib_addr = env.register(DvnFeeLib, ());
109
+ let owner = Address::generate(&env);
110
+ let fee_lib_addr = env.register(DvnFeeLib, (&owner,));
103
111
  let mut options = Bytes::new(&env);
104
112
  options.push_back(1u8);
105
113
 
@@ -171,7 +179,8 @@ impl MockPriceFeedNegative {
171
179
  fn get_fee_success_path() {
172
180
  let env = Env::default();
173
181
  env.mock_all_auths();
174
- let fee_lib_addr = env.register(DvnFeeLib, ());
182
+ let owner = Address::generate(&env);
183
+ let fee_lib_addr = env.register(DvnFeeLib, (&owner,));
175
184
  let params = DvnFeeParams {
176
185
  sender: Address::generate(&env),
177
186
  dst_eid: 7,
@@ -194,7 +203,8 @@ fn get_fee_success_path() {
194
203
  fn get_fee_uses_default_multiplier_when_zero() {
195
204
  let env = Env::default();
196
205
  env.mock_all_auths();
197
- let fee_lib_addr = env.register(DvnFeeLib, ());
206
+ let owner = Address::generate(&env);
207
+ let fee_lib_addr = env.register(DvnFeeLib, (&owner,));
198
208
 
199
209
  // multiplier_bps = 0, default_multiplier_bps = 12000 (1.2x)
200
210
  // MockPriceFeed returns fee=100, so result = 100 * 12000 / 10000 = 120
@@ -220,7 +230,8 @@ fn get_fee_uses_default_multiplier_when_zero() {
220
230
  fn get_fee_prefers_dst_multiplier_over_default() {
221
231
  let env = Env::default();
222
232
  env.mock_all_auths();
223
- let fee_lib_addr = env.register(DvnFeeLib, ());
233
+ let owner = Address::generate(&env);
234
+ let fee_lib_addr = env.register(DvnFeeLib, (&owner,));
224
235
 
225
236
  // multiplier_bps = 15000 (1.5x), default_multiplier_bps = 10000 (1.0x)
226
237
  // MockPriceFeed returns fee=100, so result = 100 * 15000 / 10000 = 150
@@ -247,7 +258,8 @@ fn get_fee_prefers_dst_multiplier_over_default() {
247
258
  fn get_fee_panics_when_price_feed_returns_negative_fee() {
248
259
  let env = Env::default();
249
260
  env.mock_all_auths();
250
- let fee_lib_addr = env.register(DvnFeeLib, ());
261
+ let owner = Address::generate(&env);
262
+ let fee_lib_addr = env.register(DvnFeeLib, (&owner,));
251
263
  let params = DvnFeeParams {
252
264
  sender: Address::generate(&env),
253
265
  dst_eid: 7,
@@ -267,18 +279,20 @@ fn get_fee_panics_when_price_feed_returns_negative_fee() {
267
279
  #[test]
268
280
  #[should_panic]
269
281
  fn apply_premium_panics_on_overflow() {
282
+ let env = Env::default();
270
283
  let fee = i128::MAX / 2;
271
284
  let multiplier_bps = 20_000u32;
272
- apply_premium(fee, multiplier_bps, 10_000, u128::MAX, 1);
285
+ apply_premium(&env, fee, multiplier_bps, 10_000, u128::MAX, 1);
273
286
  }
274
287
 
275
288
  #[test]
276
289
  fn apply_premium_floor_margin_truncates() {
290
+ let env = Env::default();
277
291
  let fee = 0i128;
278
292
  let multiplier_bps = 10_000u32;
279
293
  let floor_margin_usd = 1u128;
280
294
  let native_price_usd = NATIVE_DECIMALS_RATE * 3 / 2;
281
295
 
282
- let result = apply_premium(fee, multiplier_bps, 10_000, floor_margin_usd, native_price_usd);
296
+ let result = apply_premium(&env, fee, multiplier_bps, 10_000, floor_margin_usd, native_price_usd);
283
297
  assert_eq!(result, 0);
284
298
  }
@@ -1,10 +1,11 @@
1
1
  use super::*;
2
-
2
+ use endpoint_v2::LayerZeroEndpointV2Client;
3
3
  use soroban_sdk::{
4
4
  address_payload::AddressPayload,
5
5
  auth::{Context, CustomAccountInterface},
6
- contractimpl, contracttype,
6
+ contracttype,
7
7
  crypto::Hash,
8
+ Symbol, TryFromVal, Val,
8
9
  };
9
10
 
10
11
  // ============================================================================
@@ -26,7 +27,7 @@ pub struct ExecutorSignature {
26
27
  // Custom Account Interface Implementation
27
28
  // ============================================================================
28
29
 
29
- #[contractimpl]
30
+ #[contract_impl]
30
31
  impl CustomAccountInterface for LzExecutor {
31
32
  type Signature = ExecutorSignature;
32
33
  type Error = ExecutorError;
@@ -35,7 +36,6 @@ impl CustomAccountInterface for LzExecutor {
35
36
  ///
36
37
  /// The public key must correspond to a registered admin and must have signed the signature_payload.
37
38
  /// Uses Ed25519 signature verification.
38
- /// Only whitelisted function calls are authorized.
39
39
  fn __check_auth(
40
40
  env: Env,
41
41
  signature_payload: Hash<32>,
@@ -70,24 +70,88 @@ impl LzExecutor {
70
70
  Ok(())
71
71
  }
72
72
 
73
- /// Validates that the first auth context is a whitelisted (contract, function) pair.
74
- /// Sub-invocations are trusted since they're controlled by the whitelisted contract.
73
+ /// Validates auth contexts according to executor rules.
74
+ ///
75
+ /// # Design
76
+ ///
77
+ /// For `lz_receive`: OApps call `verify_and_clear_payload` (see `oapp_receiver.rs`)
78
+ /// which requires executor auth and optionally transfers native token from executor to OApp.
79
+ ///
80
+ /// For `lz_compose`: Composers follow the same pattern - require executor auth and
81
+ /// optionally transfer native token from executor to composer.
82
+ ///
83
+ /// Both create 1-2 auth contexts depending on whether value == 0:
84
+ /// - Context 1: `lz_receive`/`lz_compose` on the OApp/Composer (always present)
85
+ /// - Context 2: `transfer` on native token (only if value != 0)
86
+ ///
87
+ /// For `lz_receive_alert`/`lz_compose_alert`: These are called directly on the endpoint
88
+ /// to record failed executions. Only 1 context on the endpoint is expected.
75
89
  fn validate_auth_contexts(env: &Env, contexts: &Vec<Context>) -> Result<(), ExecutorError> {
76
- let first_context = contexts.first().ok_or(ExecutorError::UnauthorizedContext)?;
77
-
78
- match first_context {
79
- Context::Contract(contract_context) => {
80
- // Check if (contract, fn_name) pair is whitelisted
81
- if !Self::is_whitelisted_fn(env, &contract_context.contract, &contract_context.fn_name) {
82
- return Err(ExecutorError::UnauthorizedContext);
83
- }
90
+ // Early bounds check: max 2 contexts expected
91
+ if contexts.len() > 2 {
92
+ return Err(ExecutorError::UnauthorizedContext);
93
+ }
94
+
95
+ let first_ctx = contexts.first().ok_or(ExecutorError::UnauthorizedContext)?;
96
+ let Context::Contract(first_ctx) = first_ctx else {
97
+ return Err(ExecutorError::UnauthorizedContext);
98
+ };
99
+
100
+ let first_fn_name = &first_ctx.fn_name;
101
+
102
+ // Alert path: lz_receive_alert or lz_compose_alert (lazy Symbol creation)
103
+ if *first_fn_name == Symbol::new(env, "lz_receive_alert")
104
+ || *first_fn_name == Symbol::new(env, "lz_compose_alert")
105
+ {
106
+ // Require exactly 1 context and the contract must be the endpoint
107
+ if contexts.len() != 1 || first_ctx.contract != Self::endpoint(env) {
108
+ return Err(ExecutorError::UnauthorizedContext);
84
109
  }
85
- // Contract creation is not allowed
86
- Context::CreateContractHostFn(_) | Context::CreateContractWithCtorHostFn(_) => {
110
+ return Ok(());
111
+ }
112
+
113
+ // Execute path: lz_receive or lz_compose
114
+ if *first_fn_name != Symbol::new(env, "lz_receive") && *first_fn_name != Symbol::new(env, "lz_compose") {
115
+ return Err(ExecutorError::UnauthorizedContext);
116
+ }
117
+
118
+ let value = Self::extract_i128(env, first_ctx.args.last())?;
119
+ if value == 0 {
120
+ // If value is 0, there should be exactly 1 context
121
+ if contexts.len() != 1 {
87
122
  return Err(ExecutorError::UnauthorizedContext);
88
123
  }
124
+ return Ok(());
125
+ }
126
+
127
+ // value != 0: validate transfer context (only if there are 2 contexts)
128
+ if contexts.len() != 2 {
129
+ return Err(ExecutorError::UnauthorizedContext);
130
+ }
131
+
132
+ // Second context must be the transfer context
133
+ let Context::Contract(second_ctx) = contexts.get(1).unwrap() else {
134
+ return Err(ExecutorError::UnauthorizedContext);
135
+ };
136
+
137
+ let native_token = LayerZeroEndpointV2Client::new(env, &Self::endpoint(env)).native_token();
138
+ let transfer_amount = Self::extract_i128(env, second_ctx.args.get(2))?;
139
+
140
+ // Validate transfer context: must be transfer with matching value and native token contract
141
+ if second_ctx.fn_name != Symbol::new(env, "transfer")
142
+ || second_ctx.contract != native_token
143
+ || transfer_amount != value
144
+ {
145
+ return Err(ExecutorError::UnauthorizedContext);
89
146
  }
90
147
 
91
148
  Ok(())
92
149
  }
150
+
151
+ /// Extracts an i128 value from an optional Val.
152
+ #[inline]
153
+ fn extract_i128(env: &Env, val: Option<Val>) -> Result<i128, ExecutorError> {
154
+ let val = val.ok_or(ExecutorError::UnauthorizedContext)?;
155
+ i128::try_from_val(env, &val).map_err(|_| ExecutorError::UnauthorizedContext)
156
+ }
93
157
  }
@@ -5,27 +5,25 @@ use crate::{
5
5
  storage::ExecutorStorage,
6
6
  NativeDropParams,
7
7
  };
8
- use common_macros::{contract_impl, only_owner, ttl_configurable};
8
+ use common_macros::{contract_impl, lz_contract};
9
9
  use endpoint_v2::{FeeRecipient, LayerZeroEndpointV2Client, Origin};
10
10
  use message_lib_common::interfaces::ILayerZeroExecutor;
11
- use soroban_sdk::{contract, token::TokenClient, vec, Address, Bytes, BytesN, Env, Symbol, Vec};
12
- use utils::option_ext::OptionExt;
13
- use utils::ownable::Ownable;
11
+ use soroban_sdk::{token::TokenClient, vec, Address, Bytes, BytesN, Env, Vec};
12
+ use utils::{option_ext::OptionExt, upgradeable::UpgradeableInternal};
14
13
  use worker::{
15
14
  assert_acl, assert_not_paused, assert_supported_message_lib, init_worker, require_admin_auth, set_admin_by_owner,
16
15
  ExecutorFeeLibClient, FeeParams, Worker,
17
16
  };
18
17
 
19
18
  /// LayerZero Executor contract for cross-chain message execution.
20
- #[contract]
21
- #[ttl_configurable]
19
+ #[lz_contract(upgradeable)]
22
20
  pub struct LzExecutor;
23
21
 
24
22
  #[contract_impl]
25
23
  impl LzExecutor {
26
24
  /// Initializes the executor contract.
27
25
  ///
28
- /// Sets up ownership, worker configuration, endpoint address, and whitelisted functions.
26
+ /// Sets up ownership, worker configuration, and endpoint address.
29
27
  ///
30
28
  /// # Arguments
31
29
  /// * `endpoint` - LayerZero Endpoint V2 contract address
@@ -34,7 +32,6 @@ impl LzExecutor {
34
32
  /// * `message_libs` - Supported message library addresses (e.g., ULN302)
35
33
  /// * `price_feed` - Price feed contract address for fee calculations
36
34
  /// * `default_multiplier_bps` - Default fee multiplier in basis points (10000 = 1x)
37
- /// * `whitelist` - Initial whitelisted (contract, function) pairs for authorization
38
35
  /// * `worker_fee_lib` - Worker fee library contract address
39
36
  /// * `deposit_address` - Address to receive fee payments
40
37
  pub fn __constructor(
@@ -45,7 +42,6 @@ impl LzExecutor {
45
42
  message_libs: &Vec<Address>,
46
43
  price_feed: &Address,
47
44
  default_multiplier_bps: u32,
48
- whitelist: &Vec<(Address, Symbol)>,
49
45
  worker_fee_lib: &Address,
50
46
  deposit_address: &Address,
51
47
  ) {
@@ -60,26 +56,6 @@ impl LzExecutor {
60
56
  deposit_address,
61
57
  );
62
58
  ExecutorStorage::set_endpoint(env, endpoint);
63
-
64
- // Set initial whitelisted functions
65
- for (contract, fn_name) in whitelist.iter() {
66
- ExecutorStorage::set_whitelisted_fn(env, &contract, &fn_name, &true);
67
- }
68
- }
69
-
70
- /// Sets whether a (contract, function) pair is whitelisted.
71
- /// When `allowed` is false, the entry is removed from storage to save space.
72
- ///
73
- /// Only the contract owner can call this function.
74
- #[only_owner]
75
- pub fn set_whitelisted_fn(env: &Env, contract: &Address, fn_name: &Symbol, allowed: bool) {
76
- let value = if allowed { Some(true) } else { None };
77
- ExecutorStorage::set_or_remove_whitelisted_fn(env, contract, fn_name, &value);
78
- }
79
-
80
- /// Returns whether a (contract, function) pair is whitelisted.
81
- pub fn is_whitelisted_fn(env: &Env, contract: &Address, fn_name: &Symbol) -> bool {
82
- ExecutorStorage::has_whitelisted_fn(env, contract, fn_name)
83
59
  }
84
60
 
85
61
  /// Withdraws a token from the contract to a specified address.
@@ -227,6 +203,18 @@ impl ILayerZeroExecutor for LzExecutor {
227
203
  #[contract_impl(contracttrait)]
228
204
  impl Worker for LzExecutor {}
229
205
 
206
+ // ============================================================================
207
+ // Upgradeable Implementation
208
+ // ============================================================================
209
+
210
+ impl UpgradeableInternal for LzExecutor {
211
+ type MigrationData = ();
212
+
213
+ fn __migrate(_env: &Env, _migration_data: &Self::MigrationData) {
214
+ // No migration logic needed for initial upgrade capability
215
+ }
216
+ }
217
+
230
218
  // ============================================================================
231
219
  // Include SubModules
232
220
  // ============================================================================
@@ -1,12 +1,12 @@
1
1
  use common_macros::storage;
2
- use soroban_sdk::{Address, Symbol};
2
+ use soroban_sdk::Address;
3
3
 
4
4
  use crate::DstConfig;
5
5
 
6
6
  /// Storage keys for the Executor contract.
7
7
  ///
8
8
  /// Manages persistent storage for destination configurations and instance storage
9
- /// for the endpoint address and whitelisted functions.
9
+ /// for the endpoint address.
10
10
  #[storage]
11
11
  pub enum ExecutorStorage {
12
12
  /// Destination chain configuration indexed by endpoint ID.
@@ -21,11 +21,4 @@ pub enum ExecutorStorage {
21
21
  /// Used for receive-flow operations to interact with the endpoint.
22
22
  #[instance(Address)]
23
23
  Endpoint,
24
-
25
- /// Whitelisted function for a specific contract.
26
- ///
27
- /// Only whitelisted (contract, function) pairs can trigger Executor authorization.
28
- /// This allows fine-grained control over which contracts can call which functions.
29
- #[instance(bool)]
30
- WhitelistedFn { contract: Address, fn_name: Symbol },
31
24
  }
@@ -6,7 +6,7 @@ license.workspace = true
6
6
  publish = false
7
7
 
8
8
  [lib]
9
- crate-type = ["cdylib"]
9
+ crate-type = ["cdylib", "rlib"]
10
10
  doctest = false
11
11
 
12
12
  [dependencies]
@@ -2,14 +2,16 @@ use common_macros::contract_error;
2
2
 
3
3
  #[contract_error]
4
4
  pub enum ExecutorFeeLibError {
5
+ EidNotSupported,
6
+ InvalidExecutorOptions,
7
+ InvalidFee,
8
+ InvalidLzComposeOption,
9
+ InvalidLzReceiveOption,
10
+ InvalidNativeDropOption,
11
+ NativeAmountExceedsCap,
5
12
  NoOptions,
13
+ Overflow,
6
14
  UnsupportedOptionType,
7
- ZeroLzReceiveGasProvided,
8
15
  ZeroLzComposeGasProvided,
9
- NativeAmountExceedsCap,
10
- InvalidLzReceiveOption,
11
- InvalidNativeDropOption,
12
- InvalidLzComposeOption,
13
- InvalidExecutorOptions,
14
- EidNotSupported,
16
+ ZeroLzReceiveGasProvided,
15
17
  }