@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,6 +1,7 @@
1
1
  use crate::{errors::ExecutorFeeLibError, executor_option};
2
- use common_macros::contract_impl;
3
- use soroban_sdk::{assert_with_error, contract, Address, Bytes, Env};
2
+ use common_macros::{contract_impl, lz_contract};
3
+ use soroban_sdk::{assert_with_error, Address, Bytes, Env};
4
+ use utils::upgradeable::UpgradeableInternal;
4
5
  use worker::{FeeParams, IExecutorFeeLib, LayerZeroPriceFeedClient};
5
6
 
6
7
  // ============================================================================
@@ -11,7 +12,7 @@ use worker::{FeeParams, IExecutorFeeLib, LayerZeroPriceFeedClient};
11
12
  const V1_EID_THRESHOLD: u32 = 30000;
12
13
 
13
14
  /// Basis points denominator (10000 = 100%).
14
- const BPS_DENOMINATOR: i128 = 10000;
15
+ const BPS_DENOMINATOR: u128 = 10000;
15
16
 
16
17
  /// Overhead percentage for ordered execution (102 = 2% overhead).
17
18
  const ORDERED_EXECUTION_OVERHEAD_PERCENT: u128 = 102;
@@ -24,124 +25,13 @@ const NATIVE_DECIMALS_RATE: u128 = 10_000_000;
24
25
  /// Provides fee calculation logic based on executor options, destination configuration,
25
26
  /// and current gas prices from the price feed. Handles fee multipliers, margins, and
26
27
  /// native token value conversions.
27
- #[contract]
28
+ #[lz_contract(upgradeable)]
28
29
  pub struct ExecutorFeeLib;
29
30
 
30
31
  #[contract_impl]
31
32
  impl ExecutorFeeLib {
32
- // ========================================================================
33
- // Internal Functions
34
- // ========================================================================
35
-
36
- /// Decodes executor options and calculates total gas and native value.
37
- ///
38
- /// Parses encoded executor options, accumulates gas requirements (including
39
- /// compose calls and ordered execution overhead), and returns the total native
40
- /// value and gas needed.
41
- ///
42
- /// # Arguments
43
- /// * `options` - Encoded executor options bytes
44
- /// * `dst_eid` - Destination endpoint ID
45
- /// * `lz_receive_base_gas` - Base gas for lzReceive execution
46
- /// * `lz_compose_base_gas` - Base gas per lzCompose call
47
- /// * `native_cap` - Maximum allowed native token value
48
- ///
49
- /// # Returns
50
- /// Tuple of (total_native_value, total_gas).
51
- fn decode_executor_options(
52
- env: &Env,
53
- options: &Bytes,
54
- dst_eid: u32,
55
- lz_receive_base_gas: u64,
56
- lz_compose_base_gas: u64,
57
- native_cap: u128,
58
- ) -> (u128, u128) {
59
- let options_agg = executor_option::parse_executor_options(env, options, Self::is_v1_eid(dst_eid), native_cap);
60
-
61
- let mut total_gas = (lz_receive_base_gas as u128)
62
- + options_agg.total_gas
63
- + ((lz_compose_base_gas as u128) * (options_agg.num_lz_compose as u128));
64
-
65
- if options_agg.ordered {
66
- total_gas = (total_gas * ORDERED_EXECUTION_OVERHEAD_PERCENT) / 100;
67
- }
68
-
69
- (options_agg.total_value, total_gas)
70
- }
71
-
72
- /// Returns the effective multiplier in basis points.
73
- ///
74
- /// Uses destination-specific multiplier if set, otherwise falls back to default multiplier.
75
- ///
76
- /// # Arguments
77
- /// * `params` - Fee parameters containing multiplier settings
78
- ///
79
- /// # Returns
80
- /// Effective multiplier in basis points.
81
- fn get_effective_multiplier_bps(params: &FeeParams) -> u32 {
82
- if params.multiplier_bps == 0 {
83
- params.default_multiplier_bps
84
- } else {
85
- params.multiplier_bps
86
- }
87
- }
88
-
89
- /// Applies premium (multiplier and margin) to gas fee.
90
- ///
91
- /// Calculates fee with multiplier and floor margin, returning the maximum of both
92
- /// to ensure profitability.
93
- ///
94
- /// # Arguments
95
- /// * `fee` - Base gas fee
96
- /// * `multiplier_bps` - Fee multiplier in basis points
97
- /// * `margin_usd` - Minimum margin in USD (scaled)
98
- /// * `native_price_usd` - Native token price in USD (scaled)
99
- ///
100
- /// # Returns
101
- /// Fee with premium applied (max of multiplier fee and margin fee).
102
- fn apply_premium_to_gas(fee: i128, multiplier_bps: u32, margin_usd: u128, native_price_usd: u128) -> i128 {
103
- let fee_with_multiplier = (fee * multiplier_bps as i128) / BPS_DENOMINATOR;
104
-
105
- if native_price_usd == 0 || margin_usd == 0 {
106
- return fee_with_multiplier;
107
- }
108
-
109
- let fee_with_margin = ((margin_usd * NATIVE_DECIMALS_RATE) / native_price_usd) as i128 + fee;
110
-
111
- fee_with_margin.max(fee_with_multiplier)
112
- }
113
-
114
- /// Converts native value and applies premium multiplier.
115
- ///
116
- /// Converts value using price ratio and applies multiplier in basis points.
117
- ///
118
- /// # Arguments
119
- /// * `value` - Native value to convert
120
- /// * `ratio` - Price ratio numerator
121
- /// * `denom` - Price ratio denominator
122
- /// * `multiplier_bps` - Fee multiplier in basis points
123
- ///
124
- /// # Returns
125
- /// Converted and multiplied value, or 0 if input value is 0.
126
- fn convert_and_apply_premium_to_value(value: u128, ratio: u128, denom: u128, multiplier_bps: u32) -> i128 {
127
- if value == 0 {
128
- return 0;
129
- }
130
- let converted = (value * ratio) / denom;
131
- ((converted * multiplier_bps as u128) / BPS_DENOMINATOR as u128) as i128
132
- }
133
-
134
- /// Checks if an endpoint ID is a V1 endpoint.
135
- ///
136
- /// V1 endpoints (EID < 30000) have restrictions on executor options.
137
- ///
138
- /// # Arguments
139
- /// * `eid` - Endpoint ID to check
140
- ///
141
- /// # Returns
142
- /// `true` if the endpoint is a V1 endpoint, `false` otherwise.
143
- fn is_v1_eid(eid: u32) -> bool {
144
- eid < V1_EID_THRESHOLD
33
+ pub fn __constructor(env: &Env, owner: &Address) {
34
+ Self::init_owner(env, owner);
145
35
  }
146
36
  }
147
37
 
@@ -170,7 +60,7 @@ impl IExecutorFeeLib for ExecutorFeeLib {
170
60
  fn get_fee(env: &Env, _executor: &Address, params: &FeeParams) -> i128 {
171
61
  assert_with_error!(env, params.lz_receive_base_gas != 0, ExecutorFeeLibError::EidNotSupported);
172
62
 
173
- let (total_value, total_gas) = Self::decode_executor_options(
63
+ let (total_value, total_gas) = decode_executor_options(
174
64
  env,
175
65
  &params.options,
176
66
  params.dst_eid,
@@ -186,16 +76,18 @@ impl IExecutorFeeLib for ExecutorFeeLib {
186
76
  &total_gas,
187
77
  );
188
78
 
189
- let multiplier_bps = Self::get_effective_multiplier_bps(params);
79
+ let multiplier_bps = get_effective_multiplier_bps(params);
190
80
 
191
- let mut fee = Self::apply_premium_to_gas(
81
+ let mut fee = apply_premium_to_gas(
82
+ env,
192
83
  fee_estimate.total_gas_fee,
193
84
  multiplier_bps,
194
85
  params.floor_margin_usd,
195
86
  fee_estimate.native_price_usd,
196
87
  );
197
88
 
198
- fee += Self::convert_and_apply_premium_to_value(
89
+ fee += convert_and_apply_premium_to_value(
90
+ env,
199
91
  total_value,
200
92
  fee_estimate.price_ratio,
201
93
  fee_estimate.price_ratio_denominator,
@@ -213,3 +105,143 @@ impl IExecutorFeeLib for ExecutorFeeLib {
213
105
  (1, 1)
214
106
  }
215
107
  }
108
+
109
+ // ============================================================================
110
+ // Upgradeable Implementation
111
+ // ============================================================================
112
+
113
+ impl UpgradeableInternal for ExecutorFeeLib {
114
+ type MigrationData = ();
115
+
116
+ fn __migrate(_env: &Env, _migration_data: &Self::MigrationData) {
117
+ // No migration logic needed for initial upgrade capability
118
+ }
119
+ }
120
+
121
+ // ========================================================================
122
+ // Helper Functions
123
+ // ========================================================================
124
+
125
+ /// Decodes executor options and calculates total gas and native value.
126
+ ///
127
+ /// Parses encoded executor options, accumulates gas requirements (including
128
+ /// compose calls and ordered execution overhead), and returns the total native
129
+ /// value and gas needed.
130
+ ///
131
+ /// # Arguments
132
+ /// * `options` - Encoded executor options bytes
133
+ /// * `dst_eid` - Destination endpoint ID
134
+ /// * `lz_receive_base_gas` - Base gas for lzReceive execution
135
+ /// * `lz_compose_base_gas` - Base gas per lzCompose call
136
+ /// * `native_cap` - Maximum allowed native token value
137
+ ///
138
+ /// # Returns
139
+ /// Tuple of (total_native_value, total_gas).
140
+ fn decode_executor_options(
141
+ env: &Env,
142
+ options: &Bytes,
143
+ dst_eid: u32,
144
+ lz_receive_base_gas: u64,
145
+ lz_compose_base_gas: u64,
146
+ native_cap: u128,
147
+ ) -> (u128, u128) {
148
+ let options_agg = executor_option::parse_executor_options(env, options, is_v1_eid(dst_eid), native_cap);
149
+
150
+ let mut total_gas = (lz_receive_base_gas as u128)
151
+ + options_agg.total_gas
152
+ + ((lz_compose_base_gas as u128) * (options_agg.num_lz_compose as u128));
153
+
154
+ if options_agg.ordered {
155
+ total_gas = (total_gas * ORDERED_EXECUTION_OVERHEAD_PERCENT) / 100;
156
+ }
157
+
158
+ (options_agg.total_value, total_gas)
159
+ }
160
+
161
+ /// Returns the effective multiplier in basis points.
162
+ ///
163
+ /// Uses destination-specific multiplier if set, otherwise falls back to default multiplier.
164
+ ///
165
+ /// # Arguments
166
+ /// * `params` - Fee parameters containing multiplier settings
167
+ ///
168
+ /// # Returns
169
+ /// Effective multiplier in basis points.
170
+ fn get_effective_multiplier_bps(params: &FeeParams) -> u32 {
171
+ if params.multiplier_bps == 0 {
172
+ params.default_multiplier_bps
173
+ } else {
174
+ params.multiplier_bps
175
+ }
176
+ }
177
+
178
+ /// Applies premium (multiplier and margin) to gas fee.
179
+ ///
180
+ /// Calculates fee with multiplier and floor margin, returning the maximum of both
181
+ /// to ensure profitability.
182
+ ///
183
+ /// # Arguments
184
+ /// * `fee` - Base gas fee
185
+ /// * `multiplier_bps` - Fee multiplier in basis points
186
+ /// * `margin_usd` - Minimum margin in USD (scaled)
187
+ /// * `native_price_usd` - Native token price in USD (scaled)
188
+ ///
189
+ /// # Example(scaled to 10^20)
190
+ /// With margin_usd = $0.01 (0.01 * 10^20), native_price_usd = $0.32 (0.32 * 10^20), fee = 0:
191
+ /// fee_with_margin = ((0.01 * 10^20 * 10^7) / (0.32 * 10^20)) + 0 = 312_500 stroops (0.03125 XLM)
192
+ ///
193
+ /// # Returns
194
+ /// Fee with premium applied (max of multiplier fee and margin fee).
195
+ fn apply_premium_to_gas(env: &Env, fee: i128, multiplier_bps: u32, margin_usd: u128, native_price_usd: u128) -> i128 {
196
+ assert_with_error!(env, fee >= 0, ExecutorFeeLibError::InvalidFee);
197
+
198
+ let fee_with_multiplier = safe_u128_to_i128(env, (fee as u128 * multiplier_bps as u128) / BPS_DENOMINATOR);
199
+
200
+ if native_price_usd == 0 || margin_usd == 0 {
201
+ return fee_with_multiplier;
202
+ }
203
+
204
+ let margin_in_native = (margin_usd * NATIVE_DECIMALS_RATE) / native_price_usd;
205
+ let fee_with_margin = safe_u128_to_i128(env, margin_in_native) + fee;
206
+
207
+ fee_with_margin.max(fee_with_multiplier)
208
+ }
209
+
210
+ /// Converts native value and applies premium multiplier.
211
+ ///
212
+ /// Converts value using price ratio and applies multiplier in basis points.
213
+ ///
214
+ /// # Arguments
215
+ /// * `value` - Native value to convert
216
+ /// * `ratio` - Price ratio numerator
217
+ /// * `denom` - Price ratio denominator
218
+ /// * `multiplier_bps` - Fee multiplier in basis points
219
+ ///
220
+ /// # Returns
221
+ /// Converted and multiplied value, or 0 if input value is 0.
222
+ fn convert_and_apply_premium_to_value(env: &Env, value: u128, ratio: u128, denom: u128, multiplier_bps: u32) -> i128 {
223
+ if value == 0 {
224
+ return 0;
225
+ }
226
+ let converted = (value * ratio) / denom;
227
+ safe_u128_to_i128(env, (converted * multiplier_bps as u128) / BPS_DENOMINATOR)
228
+ }
229
+
230
+ /// Checks if an endpoint ID is a V1 endpoint.
231
+ ///
232
+ /// V1 endpoints (EID < 30000) have restrictions on executor options.
233
+ ///
234
+ /// # Arguments
235
+ /// * `eid` - Endpoint ID to check
236
+ ///
237
+ /// # Returns
238
+ /// `true` if the endpoint is a V1 endpoint, `false` otherwise.
239
+ fn is_v1_eid(eid: u32) -> bool {
240
+ eid < V1_EID_THRESHOLD
241
+ }
242
+
243
+ /// Safely converts u128 to i128, panicking if value exceeds i128::MAX.
244
+ fn safe_u128_to_i128(env: &Env, value: u128) -> i128 {
245
+ assert_with_error!(env, value <= i128::MAX as u128, ExecutorFeeLibError::Overflow);
246
+ value as i128
247
+ }
@@ -6,15 +6,10 @@ 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
- [features]
13
- library = []
14
- testutils = []
15
-
16
12
  [dependencies]
17
- cfg-if = { workspace = true }
18
13
  soroban-sdk = { workspace = true }
19
14
  # workspace dependencies
20
15
  common-macros = { workspace = true }
@@ -1,11 +1,11 @@
1
1
  //! ABA-safe entry point for cross-chain message execution on Stellar.
2
2
  //! Prevents reentry into the Executor during OApp Atomic Batch Actions.
3
3
 
4
+ use common_macros::contract_impl;
4
5
  use endpoint_v2::{
5
6
  LayerZeroComposerClient, LayerZeroEndpointV2Client, LayerZeroReceiverClient, MessagingComposerClient, Origin,
6
7
  };
7
8
  use executor::{ExecutorClient, NativeDropParams};
8
- use common_macros::contract_impl;
9
9
  use soroban_sdk::{contract, contracttype, token::TokenClient, Address, Bytes, BytesN, Env, Vec};
10
10
 
11
11
  /// Parameters for `lz_receive` execution.
@@ -40,28 +40,43 @@ pub struct ExecutorHelper;
40
40
 
41
41
  #[contract_impl]
42
42
  impl ExecutorHelper {
43
- /// Executes `lz_receive` on the target OApp; falls back to `lz_receive_alert` on failure.
43
+ /// Executes `lz_receive` on the target OApp
44
44
  pub fn execute(env: &Env, executor: &Address, params: &ExecutionParams, value_payer: &Address) {
45
- if params.value > 0 {
46
- value_payer.require_auth();
45
+ if params.value != 0 {
46
+ transfer_value(env, value_payer, executor, params.value);
47
47
  }
48
- Self::execute_internal(env, executor, params, value_payer);
48
+ LayerZeroReceiverClient::new(env, &params.receiver).lz_receive(
49
+ executor,
50
+ &params.origin,
51
+ &params.guid,
52
+ &params.message,
53
+ &params.extra_data,
54
+ &params.value,
55
+ );
49
56
  }
50
57
 
51
- /// Executes `lz_compose` on the target composer; falls back to `lz_compose_alert` on failure.
52
- pub fn compose(env: &Env, executor: &Address, params: &ComposeParams, value_payer: &Address) {
53
- executor.require_auth();
54
-
55
- let endpoint = if params.value > 0 {
56
- let ep = ExecutorClient::new(env, executor).endpoint();
57
- value_payer.require_auth();
58
- transfer_value(env, &ep, value_payer, executor, params.value);
59
- Some(ep)
60
- } else {
61
- None
62
- };
58
+ /// Records a failed `lz_receive` execution for off-chain processing.
59
+ pub fn lz_receive_alert(env: &Env, executor: &Address, params: &ExecutionParams, reason: &Bytes) {
60
+ let endpoint = ExecutorClient::new(env, executor).endpoint();
61
+ LayerZeroEndpointV2Client::new(env, &endpoint).lz_receive_alert(
62
+ executor,
63
+ &params.origin,
64
+ &params.receiver,
65
+ &params.guid,
66
+ &params.gas_limit,
67
+ &params.value,
68
+ &params.message,
69
+ &params.extra_data,
70
+ reason,
71
+ );
72
+ }
63
73
 
64
- let result = LayerZeroComposerClient::new(env, &params.to).try_lz_compose(
74
+ /// Executes `lz_compose` on the target composer
75
+ pub fn compose(env: &Env, executor: &Address, params: &ComposeParams, value_payer: &Address) {
76
+ if params.value != 0 {
77
+ transfer_value(env, value_payer, executor, params.value);
78
+ }
79
+ LayerZeroComposerClient::new(env, &params.to).lz_compose(
65
80
  executor,
66
81
  &params.from,
67
82
  &params.guid,
@@ -70,22 +85,23 @@ impl ExecutorHelper {
70
85
  &params.extra_data,
71
86
  &params.value,
72
87
  );
88
+ }
73
89
 
74
- if result.is_err() {
75
- let ep = endpoint.unwrap_or_else(|| ExecutorClient::new(env, executor).endpoint());
76
- MessagingComposerClient::new(env, &ep).lz_compose_alert(
77
- executor,
78
- &params.from,
79
- &params.to,
80
- &params.guid,
81
- &params.index,
82
- &params.gas_limit,
83
- &params.value,
84
- &params.message,
85
- &params.extra_data,
86
- &Bytes::new(env),
87
- );
88
- }
90
+ /// Records a failed `lz_compose` execution for off-chain processing.
91
+ pub fn lz_compose_alert(env: &Env, executor: &Address, params: &ComposeParams, reason: &Bytes) {
92
+ let endpoint = ExecutorClient::new(env, executor).endpoint();
93
+ MessagingComposerClient::new(env, &endpoint).lz_compose_alert(
94
+ executor,
95
+ &params.from,
96
+ &params.to,
97
+ &params.guid,
98
+ &params.index,
99
+ &params.gas_limit,
100
+ &params.value,
101
+ &params.message,
102
+ &params.extra_data,
103
+ reason,
104
+ );
89
105
  }
90
106
 
91
107
  /// Delegates `native_drop` to the executor contract.
@@ -98,7 +114,6 @@ impl ExecutorHelper {
98
114
  oapp: &Address,
99
115
  params: &Vec<NativeDropParams>,
100
116
  ) {
101
- admin.require_auth();
102
117
  ExecutorClient::new(env, executor).native_drop(admin, origin, &dst_eid, oapp, params);
103
118
  }
104
119
 
@@ -114,48 +129,13 @@ impl ExecutorHelper {
114
129
  execute_params: &ExecutionParams,
115
130
  ) {
116
131
  Self::native_drop(env, executor, admin, origin, dst_eid, oapp, native_drop_params);
117
- Self::execute_internal(env, executor, execute_params, admin); // admin already authed above
118
- }
119
-
120
- fn execute_internal(env: &Env, executor: &Address, params: &ExecutionParams, value_payer: &Address) {
121
- executor.require_auth();
122
-
123
- let endpoint = if params.value > 0 {
124
- let ep = ExecutorClient::new(env, executor).endpoint();
125
- transfer_value(env, &ep, value_payer, executor, params.value);
126
- Some(ep)
127
- } else {
128
- None
129
- };
130
-
131
- let result = LayerZeroReceiverClient::new(env, &params.receiver).try_lz_receive(
132
- executor,
133
- &params.origin,
134
- &params.guid,
135
- &params.message,
136
- &params.extra_data,
137
- &params.value,
138
- );
139
-
140
- if result.is_err() {
141
- let ep = endpoint.unwrap_or_else(|| ExecutorClient::new(env, executor).endpoint());
142
- LayerZeroEndpointV2Client::new(env, &ep).lz_receive_alert(
143
- executor,
144
- &params.origin,
145
- &params.receiver,
146
- &params.guid,
147
- &params.gas_limit,
148
- &params.value,
149
- &params.message,
150
- &params.extra_data,
151
- &Bytes::new(env),
152
- );
153
- }
132
+ Self::execute(env, executor, execute_params, admin);
154
133
  }
155
134
  }
156
135
 
157
136
  #[inline]
158
- fn transfer_value(env: &Env, endpoint: &Address, payer: &Address, executor: &Address, value: i128) {
159
- let native_token = LayerZeroEndpointV2Client::new(env, endpoint).native_token();
137
+ fn transfer_value(env: &Env, payer: &Address, executor: &Address, value: i128) {
138
+ let endpoint = ExecutorClient::new(env, executor).endpoint();
139
+ let native_token = LayerZeroEndpointV2Client::new(env, &endpoint).native_token();
160
140
  TokenClient::new(env, &native_token).transfer(payer, executor, &value);
161
141
  }
@@ -2,10 +2,4 @@
2
2
 
3
3
  mod executor_helper;
4
4
 
5
- cfg_if::cfg_if! {
6
- // Include implementation when NOT in library mode, OR when testutils is enabled (for tests)
7
- if #[cfg(any(not(feature = "library"), feature = "testutils"))] {
8
-
9
- pub use executor_helper::*;
10
- }
11
- }
5
+ pub use executor_helper::*;
@@ -6,12 +6,11 @@ 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]
13
13
  soroban-sdk = { workspace = true }
14
- endpoint-v2 = { workspace = true, features = ["library"] }
15
14
  utils = { workspace = true }
16
15
  worker = { workspace = true }
17
16
  common-macros = { workspace = true }
@@ -2,8 +2,9 @@ use common_macros::contract_error;
2
2
 
3
3
  #[contract_error]
4
4
  pub enum PriceFeedError {
5
- OnlyPriceUpdater,
6
5
  InvalidDenominator,
7
- NotAnOpStack,
8
6
  NoPrice,
7
+ NotAnOpStack,
8
+ OnlyPriceUpdater,
9
+ Overflow,
9
10
  }
@@ -1,11 +1,10 @@
1
1
  #![no_std]
2
2
 
3
- mod errors;
4
- mod events;
5
- mod price_feed;
6
3
  mod storage;
7
- mod types;
8
4
 
9
- pub use errors::*;
5
+ pub mod errors;
6
+ pub mod events;
7
+ pub mod price_feed;
8
+ pub mod types;
9
+
10
10
  pub use price_feed::{LzPriceFeed, LzPriceFeedClient};
11
- pub use types::*;