@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,15 +1,13 @@
1
1
  use crate::{errors::SimpleMessageLibError, storage::SmlStorage};
2
- use common_macros::{contract_impl, only_owner, ttl_configurable};
2
+ use common_macros::{contract_impl, lz_contract, only_auth};
3
3
  use endpoint_v2::{
4
4
  FeeRecipient, FeesAndPacket, IMessageLib, ISendLib, LayerZeroEndpointV2Client, MessageLibType, MessageLibVersion,
5
5
  MessagingFee, Origin, OutboundPacket, SetConfigParam,
6
6
  };
7
7
  use message_lib_common::packet_codec_v1;
8
- use soroban_sdk::{address_payload::AddressPayload, contract, panic_with_error, vec, Address, Bytes, BytesN, Env, Vec};
9
- use utils::ownable::Ownable;
8
+ use soroban_sdk::{address_payload::AddressPayload, panic_with_error, vec, Address, Bytes, BytesN, Env, Vec};
10
9
 
11
- #[contract]
12
- #[ttl_configurable]
10
+ #[lz_contract]
13
11
  pub struct SimpleMessageLib;
14
12
 
15
13
  #[contract_impl]
@@ -43,22 +41,22 @@ impl SimpleMessageLib {
43
41
  // Admin Manager
44
42
  // ============================================================================================
45
43
 
46
- #[only_owner]
44
+ #[only_auth]
47
45
  pub fn set_fee_recipient(env: &Env, fee_recipient: &Address) {
48
46
  SmlStorage::set_fee_recipient(env, fee_recipient);
49
47
  }
50
48
 
51
- #[only_owner]
49
+ #[only_auth]
52
50
  pub fn set_native_fee(env: &Env, native_fee: &i128) {
53
51
  SmlStorage::set_native_fee(env, native_fee);
54
52
  }
55
53
 
56
- #[only_owner]
54
+ #[only_auth]
57
55
  pub fn set_zro_fee(env: &Env, zro_fee: &i128) {
58
56
  SmlStorage::set_zro_fee(env, zro_fee);
59
57
  }
60
58
 
61
- #[only_owner]
59
+ #[only_auth]
62
60
  pub fn set_whitelisted_caller(env: &Env, whitelisted_caller: &Address) {
63
61
  SmlStorage::set_whitelisted_caller(env, whitelisted_caller);
64
62
  }
@@ -4,7 +4,6 @@ use common_macros::contract_error;
4
4
  pub enum TreasuryError {
5
5
  InvalidNativeFeeBp,
6
6
  InvalidTotalNativeFee,
7
- InvalidZROFee,
8
- InvalidZROFeeLib,
9
- ZROFeeLibNotSet,
7
+ InvalidZroFee,
8
+ ZroFeeLibNotSet,
10
9
  }
@@ -17,7 +17,7 @@ pub struct FeeEnabledSet {
17
17
  /// Emitted when the ZRO fee library is set or removed.
18
18
  #[contractevent]
19
19
  #[derive(Clone, Debug, Eq, PartialEq)]
20
- pub struct ZROFeeLibSet {
20
+ pub struct ZroFeeLibSet {
21
21
  pub zro_fee_lib: Option<Address>,
22
22
  }
23
23
 
@@ -4,8 +4,8 @@ use soroban_sdk::{contractclient, Address, Env};
4
4
  ///
5
5
  /// The ZRO token fee library calculates treasury fees when paying in ZRO tokens.
6
6
  /// This allows for custom fee calculation logic when users opt to pay fees in ZRO.
7
- #[contractclient(name = "ZROFeeLibClient")]
8
- pub trait IZROFeeLib {
7
+ #[contractclient(name = "ZroFeeLibClient")]
8
+ pub trait IZroFeeLib {
9
9
  /// Get the treasury fee in ZRO tokens based on the worker fee.
10
10
  ///
11
11
  /// # Arguments
@@ -1,17 +1,17 @@
1
1
  #![no_std]
2
2
 
3
+ mod errors;
4
+ pub mod events;
3
5
  mod interfaces;
4
6
 
7
+ pub use errors::*;
5
8
  pub use interfaces::*;
6
9
 
7
10
  cfg_if::cfg_if! {
8
11
  // Include implementation when NOT in library mode, OR when testutils is enabled (for tests)
9
12
  if #[cfg(any(not(feature = "library"), feature = "testutils"))] {
10
- mod errors;
11
- mod events;
12
13
  mod storage;
13
14
  mod treasury;
14
-
15
15
  pub use treasury::{Treasury, TreasuryClient};
16
16
  }
17
17
  }
@@ -5,13 +5,15 @@ use soroban_sdk::Address;
5
5
  pub enum TreasuryStorage {
6
6
  /// Native fee in basis points (0-10000, where 10000 = 100%)
7
7
  #[instance(u32)]
8
+ #[default(0)]
8
9
  NativeFeeBp,
9
10
 
10
11
  /// Global toggle for all fee collection
11
12
  #[instance(bool)]
13
+ #[default(false)]
12
14
  FeeEnabled,
13
15
 
14
16
  /// Address of the ZRO token fee library contract for custom fee calculations
15
17
  #[instance(Address)]
16
- ZROFeeLib,
18
+ ZroFeeLib,
17
19
  }
@@ -70,7 +70,7 @@ fn test_get_fee_zro_payment_requires_fee_lib() {
70
70
 
71
71
  // Should fail when trying to pay in ZRO without fee lib set
72
72
  let result = setup.treasury.try_get_fee(&sender, &dst_eid, &1000, &true);
73
- assert_eq!(result.err().unwrap().ok().unwrap(), TreasuryError::ZROFeeLibNotSet.into());
73
+ assert_eq!(result.err().unwrap().ok().unwrap(), TreasuryError::ZroFeeLibNotSet.into());
74
74
  }
75
75
 
76
76
  // ============================================================================
@@ -1,19 +1,18 @@
1
1
  use crate::{
2
2
  errors::TreasuryError,
3
- events::{FeeEnabledSet, NativeFeeBpSet, TokenWithdrawn, ZROFeeLibSet},
4
- interfaces::ZROFeeLibClient,
3
+ events::{FeeEnabledSet, NativeFeeBpSet, TokenWithdrawn, ZroFeeLibSet},
4
+ interfaces::ZroFeeLibClient,
5
5
  storage::TreasuryStorage,
6
6
  };
7
- use common_macros::{contract_impl, only_owner, ttl_configurable};
7
+ use common_macros::{contract_impl, lz_contract, only_auth};
8
8
  use message_lib_common::interfaces::ILayerZeroTreasury;
9
- use soroban_sdk::{assert_with_error, contract, token::Client, Address, Env};
9
+ use soroban_sdk::{assert_with_error, token::Client, Address, Env};
10
10
  use utils::option_ext::OptionExt;
11
11
 
12
12
  /// Denominator for basis point calculations (10000 = 100%).
13
13
  const BPS_DENOMINATOR: u32 = 10000;
14
14
 
15
- #[contract]
16
- #[ttl_configurable]
15
+ #[lz_contract]
17
16
  pub struct Treasury;
18
17
 
19
18
  #[contract_impl]
@@ -30,7 +29,7 @@ impl Treasury {
30
29
  ///
31
30
  /// # Arguments
32
31
  /// * `native_fee_bp` - Fee percentage in basis points (0-10000, where 10000 = 100%)
33
- #[only_owner]
32
+ #[only_auth]
34
33
  pub fn set_native_fee_bp(env: &Env, native_fee_bp: u32) {
35
34
  assert_with_error!(env, native_fee_bp <= BPS_DENOMINATOR, TreasuryError::InvalidNativeFeeBp);
36
35
  TreasuryStorage::set_native_fee_bp(env, &native_fee_bp);
@@ -41,7 +40,7 @@ impl Treasury {
41
40
  ///
42
41
  /// # Arguments
43
42
  /// * `fee_enabled` - Whether fee collection is enabled
44
- #[only_owner]
43
+ #[only_auth]
45
44
  pub fn set_fee_enabled(env: &Env, fee_enabled: bool) {
46
45
  TreasuryStorage::set_fee_enabled(env, &fee_enabled);
47
46
  FeeEnabledSet { fee_enabled }.publish(env);
@@ -51,10 +50,10 @@ impl Treasury {
51
50
  ///
52
51
  /// # Arguments
53
52
  /// * `zro_fee_lib` - The ZRO fee library contract address, or `None` to remove
54
- #[only_owner]
53
+ #[only_auth]
55
54
  pub fn set_zro_fee_lib(env: &Env, zro_fee_lib: &Option<Address>) {
56
55
  TreasuryStorage::set_or_remove_zro_fee_lib(env, zro_fee_lib);
57
- ZROFeeLibSet { zro_fee_lib: zro_fee_lib.clone() }.publish(env);
56
+ ZroFeeLibSet { zro_fee_lib: zro_fee_lib.clone() }.publish(env);
58
57
  }
59
58
 
60
59
  /// Withdraws any token (including native XLM) from the contract to a specified address.
@@ -65,11 +64,9 @@ impl Treasury {
65
64
  /// * `token` - The token contract address (can be native XLM or any other token)
66
65
  /// * `to` - The recipient address
67
66
  /// * `amount` - The amount to withdraw (must be positive)
68
- #[only_owner]
67
+ #[only_auth]
69
68
  pub fn withdraw_token(env: &Env, token: &Address, to: &Address, amount: i128) {
70
- let token_client = Client::new(env, token);
71
- token_client.transfer(&env.current_contract_address(), to, &amount);
72
-
69
+ Client::new(env, token).transfer(&env.current_contract_address(), to, &amount);
73
70
  TokenWithdrawn { token: token.clone(), to: to.clone(), amount }.publish(env);
74
71
  }
75
72
 
@@ -79,12 +76,12 @@ impl Treasury {
79
76
 
80
77
  /// Returns the native fee percentage in basis points.
81
78
  pub fn native_fee_bp(env: &Env) -> u32 {
82
- TreasuryStorage::native_fee_bp(env).unwrap_or(0)
79
+ TreasuryStorage::native_fee_bp(env)
83
80
  }
84
81
 
85
82
  /// Returns whether fee collection is enabled.
86
83
  pub fn fee_enabled(env: &Env) -> bool {
87
- TreasuryStorage::fee_enabled(env).unwrap_or(false)
84
+ TreasuryStorage::fee_enabled(env)
88
85
  }
89
86
 
90
87
  /// Returns the ZRO fee library address if set.
@@ -102,9 +99,9 @@ impl Treasury {
102
99
  }
103
100
 
104
101
  /// Returns the ZRO fee library client, panics if not set.
105
- fn expect_zro_fee_lib_client(env: &Env) -> ZROFeeLibClient<'static> {
106
- let fee_lib = Self::zro_fee_lib(env).unwrap_or_panic(env, TreasuryError::ZROFeeLibNotSet);
107
- ZROFeeLibClient::new(env, &fee_lib)
102
+ fn expect_zro_fee_lib_client(env: &Env) -> ZroFeeLibClient<'static> {
103
+ let fee_lib = Self::zro_fee_lib(env).unwrap_or_panic(env, TreasuryError::ZroFeeLibNotSet);
104
+ ZroFeeLibClient::new(env, &fee_lib)
108
105
  }
109
106
  }
110
107
 
@@ -125,13 +122,13 @@ impl ILayerZeroTreasury for Treasury {
125
122
  }
126
123
 
127
124
  let native_treasury_fee = Self::calculate_native_fee(env, total_native_fee);
128
- if pay_in_zro {
129
- let zro_fee =
130
- Self::expect_zro_fee_lib_client(env).get_fee(sender, &dst_eid, &total_native_fee, &native_treasury_fee);
131
- assert_with_error!(env, zro_fee >= 0, TreasuryError::InvalidZROFee);
132
- zro_fee
133
- } else {
134
- native_treasury_fee
125
+ if !pay_in_zro {
126
+ return native_treasury_fee;
135
127
  }
128
+
129
+ let zro_fee =
130
+ Self::expect_zro_fee_lib_client(env).get_fee(sender, &dst_eid, &total_native_fee, &native_treasury_fee);
131
+ assert_with_error!(env, zro_fee >= 0, TreasuryError::InvalidZroFee);
132
+ zro_fee
136
133
  }
137
134
  }
@@ -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
  [features]
@@ -15,13 +15,8 @@ pub enum Uln302Error {
15
15
  InvalidOptionalDVNCount,
16
16
  InvalidOptionalDVNs,
17
17
  InvalidOptionalDVNThreshold,
18
- InvalidPacketHeader,
19
18
  InvalidRequiredDVNCount,
20
19
  InvalidRequiredDVNs,
21
- OAppExecutorConfigNotFound,
22
- OAppReceiveUlnConfigNotFound,
23
- OAppSendUlnConfigNotFound,
24
- OnlyEndpoint,
25
20
  UlnAtLeastOneDVN,
26
21
  UnsupportedEid,
27
22
  Verifying,
@@ -17,7 +17,7 @@ pub struct ExecutorConfigSet {
17
17
 
18
18
  #[contractevent]
19
19
  #[derive(Clone, Debug, Eq, PartialEq)]
20
- pub struct UlnSendConfigSet {
20
+ pub struct SendUlnConfigSet {
21
21
  #[topic]
22
22
  pub sender: Address,
23
23
  #[topic]
@@ -27,7 +27,7 @@ pub struct UlnSendConfigSet {
27
27
 
28
28
  #[contractevent]
29
29
  #[derive(Clone, Debug, Eq, PartialEq)]
30
- pub struct UlnReceiveConfigSet {
30
+ pub struct ReceiveUlnConfigSet {
31
31
  #[topic]
32
32
  pub receiver: Address,
33
33
  #[topic]
@@ -37,19 +37,19 @@ pub struct UlnReceiveConfigSet {
37
37
 
38
38
  #[contractevent]
39
39
  #[derive(Clone, Debug, Eq, PartialEq)]
40
- pub struct DefaultExecutorConfigSet {
40
+ pub struct DefaultExecutorConfigsSet {
41
41
  pub params: Vec<SetDefaultExecutorConfigParam>,
42
42
  }
43
43
 
44
44
  #[contractevent]
45
45
  #[derive(Clone, Debug, Eq, PartialEq)]
46
- pub struct DefaultUlnSendConfigSet {
46
+ pub struct DefaultSendUlnConfigsSet {
47
47
  pub params: Vec<SetDefaultUlnConfigParam>,
48
48
  }
49
49
 
50
50
  #[contractevent]
51
51
  #[derive(Clone, Debug, Eq, PartialEq)]
52
- pub struct DefaultUlnReceiveConfigSet {
52
+ pub struct DefaultReceiveUlnConfigsSet {
53
53
  pub params: Vec<SetDefaultUlnConfigParam>,
54
54
  }
55
55
 
@@ -64,7 +64,6 @@ pub struct ExecutorFeePaid {
64
64
  #[contractevent]
65
65
  #[derive(Clone, Debug, Eq, PartialEq)]
66
66
  pub struct DVNFeePaid {
67
- #[topic]
68
67
  pub dvns: Vec<Address>,
69
68
  pub fees: Vec<FeeRecipient>,
70
69
  }
@@ -1,4 +1,15 @@
1
- use super::*;
1
+ use super::{Uln302, Uln302Args, Uln302Client};
2
+ use crate::{
3
+ errors::Uln302Error,
4
+ events::{DefaultReceiveUlnConfigsSet, PayloadVerified, ReceiveUlnConfigSet},
5
+ interfaces::{IReceiveUln302, OAppUlnConfig, SetDefaultUlnConfigParam, UlnConfig},
6
+ storage::UlnStorage,
7
+ };
8
+ use common_macros::{contract_impl, only_auth};
9
+ use endpoint_v2::{util, LayerZeroEndpointV2Client, Origin};
10
+ use message_lib_common::packet_codec_v1::{self, PacketHeader};
11
+ use soroban_sdk::{address_payload::AddressPayload, assert_with_error, Address, Bytes, BytesN, Env, Vec};
12
+ use utils::option_ext::OptionExt;
2
13
 
3
14
  // ============================================================================================
4
15
  // IReceiveUln302 Contract Implementation
@@ -30,7 +41,8 @@ impl IReceiveUln302 for Uln302 {
30
41
  /// (all required DVNs + optional DVN threshold). Once verified, cleans up DVN confirmation
31
42
  /// storage and calls the endpoint to mark the message as verified and executable.
32
43
  fn commit_verification(env: &Env, packet_header: &Bytes, payload_hash: &BytesN<32>) {
33
- let (header, header_hash, uln_config) = Self::validate_and_extract_param(env, packet_header);
44
+ let (header, uln_config) = Self::decode_packet_header_with_config(env, packet_header);
45
+ let header_hash = util::keccak256(env, packet_header);
34
46
 
35
47
  // check if the message is verifiable
36
48
  assert_with_error!(
@@ -45,10 +57,12 @@ impl IReceiveUln302 for Uln302 {
45
57
  });
46
58
 
47
59
  // commit verification to the endpoint
48
- let send_lib = env.current_contract_address();
49
- let origin = Origin { src_eid: header.src_eid, sender: header.sender, nonce: header.nonce };
50
- let receiver = Address::from_payload(env, AddressPayload::ContractIdHash(header.receiver));
51
- LayerZeroEndpointV2Client::new(env, &Self::endpoint(env)).verify(&send_lib, &origin, &receiver, payload_hash);
60
+ LayerZeroEndpointV2Client::new(env, &Self::endpoint(env)).verify(
61
+ &env.current_contract_address(),
62
+ &Origin { src_eid: header.src_eid, sender: header.sender, nonce: header.nonce },
63
+ &Address::from_payload(env, AddressPayload::ContractIdHash(header.receiver)),
64
+ payload_hash,
65
+ );
52
66
  }
53
67
 
54
68
  // ============================================================================================
@@ -58,14 +72,13 @@ impl IReceiveUln302 for Uln302 {
58
72
  /// Sets default receive ULN configurations for multiple source endpoints.
59
73
  ///
60
74
  /// Validates each config and stores it as the default for the specified source EID.
61
- #[only_owner]
75
+ #[only_auth]
62
76
  fn set_default_receive_uln_configs(env: &Env, params: &Vec<SetDefaultUlnConfigParam>) {
63
77
  for param in params {
64
78
  param.config.validate_default_config(env);
65
79
  UlnStorage::set_default_receive_uln_configs(env, param.eid, &param.config);
66
80
  }
67
-
68
- DefaultUlnReceiveConfigSet { params: params.clone() }.publish(env);
81
+ DefaultReceiveUlnConfigsSet { params: params.clone() }.publish(env);
69
82
  }
70
83
 
71
84
  // ============================================================================================
@@ -79,8 +92,8 @@ impl IReceiveUln302 for Uln302 {
79
92
 
80
93
  /// Checks if a message has been sufficiently verified by DVNs and is ready to commit.
81
94
  fn verifiable(env: &Env, packet_header: &Bytes, payload_hash: &BytesN<32>) -> bool {
82
- let (_, header_hash, uln_config) = Self::validate_and_extract_param(env, packet_header);
83
- Self::verifiable_internal(env, &uln_config, &header_hash, payload_hash)
95
+ let (_, uln_config) = Self::decode_packet_header_with_config(env, packet_header);
96
+ Self::verifiable_internal(env, &uln_config, &util::keccak256(env, packet_header), payload_hash)
84
97
  }
85
98
 
86
99
  /// Returns the default receive ULN configuration for a source endpoint.
@@ -95,13 +108,14 @@ impl IReceiveUln302 for Uln302 {
95
108
 
96
109
  /// Returns the effective receive ULN configuration by merging OApp config with defaults.
97
110
  fn effective_receive_uln_config(env: &Env, receiver: &Address, src_eid: u32) -> UlnConfig {
98
- let default_config = Self::expect_default_receive_uln_config(env, src_eid);
111
+ let default_config = Self::default_receive_uln_config(env, src_eid)
112
+ .unwrap_or_panic(env, Uln302Error::DefaultReceiveUlnConfigNotFound);
99
113
  let oapp_config = Self::oapp_receive_uln_config(env, receiver, src_eid).unwrap_or(OAppUlnConfig::default(env));
100
114
 
101
- let config = oapp_config.apply_default_config(&default_config);
102
- config.validate_at_least_one_dvn(env); // validate the final config
115
+ let effective_config = oapp_config.apply_default_config(&default_config);
116
+ effective_config.validate_at_least_one_dvn(env); // validate the final config
103
117
 
104
- config
118
+ effective_config
105
119
  }
106
120
  }
107
121
 
@@ -112,12 +126,6 @@ impl IReceiveUln302 for Uln302 {
112
126
  impl Uln302 {
113
127
  /// Sets OApp-specific receive ULN config.
114
128
  ///
115
- /// # Arguments
116
- /// * `receiver` - The receiver OApp address
117
- /// * `src_eid` - The source endpoint ID
118
- /// * `config` - The OApp-specific receive ULN configuration
119
- ///
120
- /// # Panics
121
129
  /// Panics if the final effective config is invalid.
122
130
  pub(super) fn set_receive_uln_config(env: &Env, receiver: &Address, src_eid: u32, config: &OAppUlnConfig) {
123
131
  config.validate_oapp_config(env);
@@ -126,15 +134,15 @@ impl Uln302 {
126
134
  // validate the config by getting the effective config
127
135
  let _ = Self::effective_receive_uln_config(env, receiver, src_eid);
128
136
 
129
- UlnReceiveConfigSet { receiver: receiver.clone(), src_eid, config: config.clone() }.publish(env);
137
+ ReceiveUlnConfigSet { receiver: receiver.clone(), src_eid, config: config.clone() }.publish(env);
130
138
  }
131
139
 
132
140
  // ============================================================================================
133
141
  // Verification Helpers Functions
134
142
  // ============================================================================================
135
143
 
136
- /// Validates packet header and extracts header, header hash, and effective ULN config.
137
- fn validate_and_extract_param(env: &Env, packet_header: &Bytes) -> (PacketHeader, BytesN<32>, UlnConfig) {
144
+ /// Decodes packet header and returns header and effective ULN config.
145
+ fn decode_packet_header_with_config(env: &Env, packet_header: &Bytes) -> (PacketHeader, UlnConfig) {
138
146
  let header = packet_codec_v1::decode_packet_header(env, packet_header);
139
147
  assert_with_error!(
140
148
  env,
@@ -142,25 +150,15 @@ impl Uln302 {
142
150
  Uln302Error::InvalidEID
143
151
  );
144
152
 
145
- let header_hash = util::keccak256(env, packet_header);
146
- let uln_config = Self::effective_receive_uln_config(
147
- env,
148
- &Address::from_payload(env, AddressPayload::ContractIdHash(header.receiver.clone())),
149
- header.src_eid,
150
- );
153
+ let receiver = Address::from_payload(env, AddressPayload::ContractIdHash(header.receiver.clone()));
154
+ let uln_config = Self::effective_receive_uln_config(env, &receiver, header.src_eid);
151
155
 
152
- (header, header_hash, uln_config)
156
+ (header, uln_config)
153
157
  }
154
158
 
155
159
  /// Checks if all required DVNs verified and optional DVN threshold is met.
156
160
  ///
157
- /// # Arguments
158
- /// * `uln_config` - The effective ULN configuration
159
- /// * `header_hash` - The hash of the packet header
160
- /// * `payload_hash` - The hash of the message payload
161
- ///
162
- /// # Returns
163
- /// True if the message has been verified by enough DVNs to be committed, false otherwise
161
+ /// Returns true if the message has been verified by enough DVNs to be committed, false otherwise
164
162
  fn verifiable_internal(
165
163
  env: &Env,
166
164
  uln_config: &UlnConfig,
@@ -177,14 +175,7 @@ impl Uln302 {
177
175
 
178
176
  /// Checks if a DVN has submitted enough confirmations for the message.
179
177
  ///
180
- /// # Arguments
181
- /// * `dvn` - The DVN address
182
- /// * `header_hash` - The hash of the packet header
183
- /// * `payload_hash` - The hash of the message payload
184
- /// * `confirmations` - The number of block confirmations the DVN has observed
185
- ///
186
- /// # Returns
187
- /// True if the DVN has submitted enough confirmations for the message, false otherwise
178
+ /// Returns true if the DVN has submitted enough confirmations for the message, false otherwise
188
179
  fn verified(
189
180
  env: &Env,
190
181
  dvn: &Address,
@@ -194,14 +185,4 @@ impl Uln302 {
194
185
  ) -> bool {
195
186
  Self::confirmations(env, dvn, header_hash, payload_hash).map(|c| c >= confirmations).unwrap_or(false)
196
187
  }
197
-
198
- // ============================================================================================
199
- // Helper Functions
200
- // ============================================================================================
201
-
202
- /// Returns default receive ULN config or panics if not found.
203
- fn expect_default_receive_uln_config(env: &Env, src_eid: u32) -> UlnConfig {
204
- Self::default_receive_uln_config(env, src_eid)
205
- .unwrap_or_panic(env, Uln302Error::DefaultReceiveUlnConfigNotFound)
206
- }
207
188
  }