@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,107 +0,0 @@
1
- use proc_macro::TokenStream;
2
- use proc_macro2::Ident;
3
- use syn::{
4
- parse::{Parse, ParseStream},
5
- punctuated::Punctuated,
6
- Error, ItemStruct, Token,
7
- };
8
-
9
- /// Configuration for which OApp trait implementations should be manually provided by the user.
10
- ///
11
- /// This struct is parsed from the `#[oapp_manual_impl(...)]` attribute and controls
12
- /// which default trait implementations are generated by the macros.
13
- ///
14
- /// # Fields
15
- /// * `core` - If `true`, the user must manually implement `OAppCore`
16
- /// * `sender` - If `true`, the user must manually implement `OAppSender`
17
- /// * `receiver` - If `true`, the user must manually implement `OAppReceiver` trait entirely
18
- /// * `options_type3` - If `true`, the user must manually implement `OAppOptionsType3`
19
- ///
20
- /// # Receiver Manual Implementation
21
- /// When `receiver` is `true`, the macro will NOT generate `impl OAppReceiver`. The user
22
- /// must manually implement the entire `OAppReceiver` trait, including `lz_receive`,
23
- /// `next_nonce`, `allow_initialize_path`, and `is_compose_msg_sender`.
24
- ///
25
- /// This is useful when you need to customize methods like `next_nonce` (e.g., for ordered delivery).
26
- #[derive(Debug, Clone, Copy, Default)]
27
- pub struct ManualImplConfig {
28
- pub core: bool,
29
- pub sender: bool,
30
- pub receiver: bool,
31
- pub options_type3: bool,
32
- }
33
-
34
- impl ManualImplConfig {
35
- /// Parses configuration from the `#[oapp_manual_impl(...)]` attribute arguments.
36
- ///
37
- /// Accepts a comma-separated list of identifiers: `core`, `sender`, `receiver`, `options_type3`.
38
- /// Returns an error if any invalid identifier is provided.
39
- fn from_attr(input: ParseStream) -> syn::Result<Self> {
40
- let idents = Punctuated::<syn::Ident, Token![,]>::parse_terminated(input)?;
41
-
42
- let mut cfg = ManualImplConfig::default();
43
-
44
- for ident in idents {
45
- match ident.to_string().as_str() {
46
- "core" => cfg.core = true,
47
- "sender" => cfg.sender = true,
48
- "receiver" => cfg.receiver = true,
49
- "options_type3" => cfg.options_type3 = true,
50
- _ => {
51
- return Err(Error::new(
52
- ident.span(),
53
- "invalid value for oapp_manual_impl: expected one of `core`, `sender`, `receiver`, `options_type3`",
54
- ));
55
- }
56
- }
57
- }
58
-
59
- Ok(cfg)
60
- }
61
- }
62
-
63
- impl Parse for ManualImplConfig {
64
- fn parse(input: ParseStream) -> syn::Result<Self> {
65
- ManualImplConfig::from_attr(input)
66
- }
67
- }
68
-
69
- /// Parses a struct definition and extracts manual implementation configuration.
70
- ///
71
- /// This function is used by all OApp macros to:
72
- /// 1. Parse the annotated item as a struct
73
- /// 2. Extract the struct name
74
- /// 3. Parse any `#[oapp_manual_impl(...)]` attributes to determine configuration
75
- ///
76
- /// # Returns
77
- /// A tuple containing:
78
- /// * The struct identifier
79
- /// * The complete struct definition
80
- /// * The manual implementation configuration
81
- ///
82
- /// # Errors
83
- /// Returns a compile error if:
84
- /// * The item is not a struct
85
- /// * The `#[oapp_manual_impl(...)]` attribute has invalid syntax
86
- pub fn parse_struct(item: TokenStream) -> Result<(Ident, ItemStruct, ManualImplConfig), TokenStream> {
87
- let item_struct = syn::parse::<ItemStruct>(item).map_err(|e| e.to_compile_error())?;
88
- let name = item_struct.ident.clone();
89
-
90
- let mut cfg = ManualImplConfig::default();
91
- // TODO: match at most once oapp_manual_impl attribute
92
- for attr in item_struct.attrs.iter() {
93
- if attr.path().is_ident("oapp_manual_impl") {
94
- match attr.parse_args::<ManualImplConfig>() {
95
- Ok(parsed) => {
96
- cfg = parsed;
97
- }
98
- Err(e) => {
99
- return Err(e.to_compile_error().into());
100
- }
101
- }
102
- break;
103
- }
104
- }
105
-
106
- Ok((name, item_struct, cfg))
107
- }
@@ -1,5 +0,0 @@
1
- /// Message type for simple OFT send
2
- pub const SEND: u32 = 1;
3
-
4
- /// Message type for OFT send with compose functionality
5
- pub const SEND_AND_CALL: u32 = 2;
@@ -1,146 +0,0 @@
1
- //! Default OFT implementations.
2
- //!
3
- //! This module provides default standalone functions for common OFT operations that can be
4
- //! reused by trait implementations.
5
-
6
- use crate::{
7
- codec::{oft_compose_msg_codec::OFTComposeMsg, oft_msg_codec::OFTMessage},
8
- constants,
9
- errors::OFTError,
10
- events,
11
- events::OFTSent,
12
- storage::OFTStorage,
13
- types::{OFTFeeDetail, OFTLimit, OFTReceipt, SendParam},
14
- utils::{address_to_bytes32, remove_dust, resolve_address, to_ld, to_sd},
15
- };
16
- use endpoint_v2::{MessagingComposerClient, MessagingFee, MessagingReceipt, Origin};
17
- use oapp::oapp_options_type3::OAppOptionsType3;
18
- use soroban_sdk::{assert_with_error, vec, Address, Bytes, BytesN, Env, Vec};
19
-
20
- /// Calculates debit amounts without executing (view function).
21
- pub fn default_debit_view(env: &Env, amount_ld: i128, min_amount_ld: i128, _dst_eid: u32) -> OFTReceipt {
22
- let conversion_rate = OFTStorage::decimal_conversion_rate(env).unwrap();
23
- let amount_sent_ld = remove_dust(amount_ld, conversion_rate);
24
- let amount_received_ld = amount_sent_ld;
25
-
26
- assert_with_error!(env, amount_received_ld >= min_amount_ld, OFTError::SlippageExceeded);
27
-
28
- OFTReceipt { amount_sent_ld, amount_received_ld }
29
- }
30
-
31
- /// Builds OFT message and combines options for cross-chain transfer.
32
- pub fn default_build_msg_and_options<T>(
33
- env: &Env,
34
- sender: &Address,
35
- send_param: &SendParam,
36
- amount_ld: i128,
37
- ) -> (Bytes, Bytes)
38
- where
39
- T: OAppOptionsType3,
40
- {
41
- let has_compose = !send_param.compose_msg.is_empty();
42
- let conversion_rate = OFTStorage::decimal_conversion_rate(env).unwrap();
43
- let msg = OFTMessage {
44
- send_to: send_param.to.clone(),
45
- amount_sd: to_sd(env, amount_ld, conversion_rate),
46
- compose_from: if has_compose { Some(address_to_bytes32(sender)) } else { None },
47
- compose_msg: if has_compose { Some(send_param.compose_msg.clone()) } else { None },
48
- };
49
- let (msg, _) = msg.encode(env);
50
- let msg_type = if has_compose { constants::SEND_AND_CALL } else { constants::SEND };
51
-
52
- (msg, T::combine_options(env, send_param.dst_eid, msg_type, &send_param.extra_options))
53
- }
54
-
55
- /// Handles OFT receive logic.
56
- pub fn default_lz_receive<T>(
57
- env: &Env,
58
- _executor: &Address,
59
- origin: &Origin,
60
- guid: &BytesN<32>,
61
- message: &Bytes,
62
- _extra_data: &Bytes,
63
- _value: i128,
64
- ) where
65
- T: crate::oft::OFTInner,
66
- {
67
- let oft_msg = OFTMessage::decode(message);
68
- let send_to = resolve_address(env, &oft_msg.send_to);
69
-
70
- let conversion_rate = OFTStorage::decimal_conversion_rate(env).unwrap();
71
- let amount_received_ld = T::__credit(env, &send_to, to_ld(oft_msg.amount_sd, conversion_rate), origin.src_eid);
72
-
73
- if oft_msg.is_composed() {
74
- let compose_msg = OFTComposeMsg {
75
- nonce: origin.nonce,
76
- src_eid: origin.src_eid,
77
- amount_ld: amount_received_ld,
78
- compose_from: oft_msg.compose_from.unwrap(),
79
- compose_msg: oft_msg.compose_msg.unwrap(),
80
- }
81
- .encode(env);
82
-
83
- let endpoint = MessagingComposerClient::new(env, &T::endpoint(env));
84
- endpoint.send_compose(&env.current_contract_address(), &send_to, guid, &0, &compose_msg);
85
- }
86
-
87
- events::OFTReceived { guid: guid.clone(), src_eid: origin.src_eid, to: send_to, amount_received_ld }.publish(env);
88
- }
89
-
90
- /// Quotes an OFT transfer without executing.
91
- /// Returns (OFTLimit, fee details, receipt with estimated amounts).
92
- pub fn default_quote_oft<T>(env: &Env, send_param: &SendParam) -> (OFTLimit, Vec<OFTFeeDetail>, OFTReceipt)
93
- where
94
- T: crate::oft::OFTInner,
95
- {
96
- let oft_receipt = T::__debit_view(env, send_param.amount_ld, send_param.min_amount_ld, send_param.dst_eid);
97
- let oft_fee_details = if oft_receipt.amount_sent_ld > oft_receipt.amount_received_ld {
98
- vec![env, OFTFeeDetail { fee_amount_ld: oft_receipt.amount_sent_ld - oft_receipt.amount_received_ld, description: Bytes::from_array(env, b"OFT Fee") }]
99
- } else {
100
- vec![env]
101
- };
102
- (OFTLimit { min_amount_ld: 0, max_amount_ld: i128::MAX }, oft_fee_details, oft_receipt)
103
- }
104
-
105
- /// Quotes a send operation including LayerZero messaging fees.
106
- pub fn default_quote_send<T>(env: &Env, sender: &Address, send_param: &SendParam, pay_in_zro: bool) -> MessagingFee
107
- where
108
- T: crate::oft::OFT,
109
- {
110
- let OFTReceipt { amount_received_ld, .. } =
111
- T::__debit_view(env, send_param.amount_ld, send_param.min_amount_ld, send_param.dst_eid);
112
-
113
- let (msg, options) = default_build_msg_and_options::<T>(env, sender, send_param, amount_received_ld);
114
- T::lz_quote(env, send_param.dst_eid, &msg, &options, pay_in_zro)
115
- }
116
-
117
- /// Sends tokens cross-chain to another endpoint.
118
- /// Sender must be authenticated. Returns (MessagingReceipt, OFTReceipt).
119
- pub fn default_send<T>(
120
- env: &Env,
121
- sender: &Address,
122
- send_param: &SendParam,
123
- fee: &MessagingFee,
124
- refund_address: &Address,
125
- ) -> (MessagingReceipt, OFTReceipt)
126
- where
127
- T: crate::oft::OFT,
128
- {
129
- sender.require_auth();
130
-
131
- let oft_receipt = T::__debit(env, sender, send_param.amount_ld, send_param.min_amount_ld, send_param.dst_eid);
132
-
133
- let (msg, options) = default_build_msg_and_options::<T>(env, sender, send_param, oft_receipt.amount_received_ld);
134
- let msg_receipt = T::lz_send(env, sender, send_param.dst_eid, &msg, &options, fee, refund_address);
135
-
136
- OFTSent {
137
- guid: msg_receipt.guid.clone(),
138
- dst_eid: send_param.dst_eid,
139
- from: sender.clone(),
140
- amount_sent_ld: oft_receipt.amount_sent_ld,
141
- amount_received_ld: oft_receipt.amount_received_ld,
142
- }
143
- .publish(env);
144
-
145
- (msg_receipt, oft_receipt)
146
- }
@@ -1,421 +0,0 @@
1
- extern crate std;
2
-
3
- use crate::errors::TtlError;
4
- use crate::ttl::{
5
- DefaultTtlConfigurable, TtlConfig, TtlConfigStorage, TtlConfigurable, DEFAULT_INSTANCE_TTL, DEFAULT_PERSISTENT_TTL,
6
- MAX_TTL,
7
- };
8
- use soroban_sdk::{contract, contractimpl, Address, Env};
9
-
10
- // ============================================
11
- // Test Contract for TTL functionality
12
- // ============================================
13
-
14
- #[contract]
15
- pub struct TtlTestContract;
16
-
17
- #[contractimpl]
18
- impl TtlTestContract {
19
- // TtlConfigStorage storage tests
20
- pub fn frozen(env: &Env) -> bool {
21
- TtlConfigStorage::frozen(env)
22
- }
23
-
24
- pub fn set_frozen(env: &Env, value: bool) {
25
- TtlConfigStorage::set_frozen(env, &value);
26
- }
27
-
28
- pub fn instance_ttl(env: &Env) -> TtlConfig {
29
- TtlConfigStorage::instance(env).unwrap_or(DEFAULT_INSTANCE_TTL)
30
- }
31
-
32
- pub fn set_instance_ttl(env: &Env, config: TtlConfig) {
33
- TtlConfigStorage::set_instance(env, &config);
34
- }
35
-
36
- pub fn has_instance_ttl(env: &Env) -> bool {
37
- TtlConfigStorage::has_instance(env)
38
- }
39
-
40
- pub fn remove_instance_ttl(env: &Env) {
41
- TtlConfigStorage::remove_instance(env);
42
- }
43
-
44
- pub fn remove_persistent_ttl(env: &Env) {
45
- TtlConfigStorage::remove_persistent(env);
46
- }
47
-
48
- pub fn persistent_ttl(env: &Env) -> TtlConfig {
49
- TtlConfigStorage::persistent(env).unwrap_or(DEFAULT_PERSISTENT_TTL)
50
- }
51
-
52
- pub fn set_persistent_ttl(env: &Env, config: TtlConfig) {
53
- TtlConfigStorage::set_persistent(env, &config);
54
- }
55
-
56
- pub fn has_persistent_ttl(env: &Env) -> bool {
57
- TtlConfigStorage::has_persistent(env)
58
- }
59
-
60
- // DefaultTtlConfigurable tests
61
- pub fn configurable_set_ttl_configs(env: &Env, instance: Option<TtlConfig>, persistent: Option<TtlConfig>) {
62
- DefaultTtlConfigurable::set_ttl_configs(env, &instance, &persistent);
63
- }
64
-
65
- pub fn configurable_ttl_configs(env: &Env) -> (Option<TtlConfig>, Option<TtlConfig>) {
66
- DefaultTtlConfigurable::ttl_configs(env)
67
- }
68
-
69
- pub fn configurable_freeze_ttl_configs(env: &Env) {
70
- DefaultTtlConfigurable::freeze_ttl_configs(env);
71
- }
72
-
73
- pub fn is_ttl_configs_frozen(env: &Env) -> bool {
74
- DefaultTtlConfigurable::is_ttl_configs_frozen(env)
75
- }
76
- }
77
-
78
- fn setup_contract() -> (Env, Address, TtlTestContractClient<'static>) {
79
- let env = Env::default();
80
- let contract_id = env.register(TtlTestContract, ());
81
- let client = TtlTestContractClient::new(&env, &contract_id);
82
- (env, contract_id, client)
83
- }
84
-
85
- // ============================================
86
- // TtlConfig Struct Tests
87
- // ============================================
88
-
89
- #[test]
90
- fn test_ttl_config_new() {
91
- let config = TtlConfig::new(100, 200);
92
- assert_eq!(config.threshold, 100);
93
- assert_eq!(config.extend_to, 200);
94
- }
95
-
96
- #[test]
97
- fn test_ttl_config_is_valid() {
98
- // Valid configs
99
- assert!(TtlConfig::new(100, 200).is_valid(300)); // threshold < extend_to < max
100
- assert!(TtlConfig::new(100, 100).is_valid(200)); // threshold == extend_to
101
- assert!(TtlConfig::new(100, 200).is_valid(200)); // extend_to == max
102
- assert!(TtlConfig::new(100, 100).is_valid(100)); // all equal
103
- assert!(TtlConfig::new(0, 0).is_valid(0)); // all zeros
104
- assert!(TtlConfig::new(0, 0).is_valid(100)); // zero config with non-zero max
105
- assert!(TtlConfig::new(0, 100).is_valid(100)); // threshold at minimum
106
- assert!(TtlConfig::new(99, 100).is_valid(100)); // threshold just below extend_to
107
- assert!(TtlConfig::new(MAX_TTL - 1, MAX_TTL).is_valid(MAX_TTL)); // large values
108
- assert!(TtlConfig::new(MAX_TTL, MAX_TTL).is_valid(MAX_TTL)); // max values
109
-
110
- // Invalid configs
111
- assert!(!TtlConfig::new(200, 100).is_valid(300)); // threshold > extend_to
112
- assert!(!TtlConfig::new(100, 400).is_valid(300)); // extend_to > max
113
- assert!(!TtlConfig::new(100, 100).is_valid(99)); // extend_to > max
114
- }
115
-
116
- #[test]
117
- fn test_default_ttl_configs_are_valid() {
118
- assert!(DEFAULT_INSTANCE_TTL.is_valid(MAX_TTL));
119
- assert!(DEFAULT_PERSISTENT_TTL.is_valid(MAX_TTL));
120
- }
121
-
122
- // ============================================
123
- // TtlConfigStorage Storage Tests
124
- // ============================================
125
-
126
- #[test]
127
- fn test_ttl_config_data_defaults() {
128
- let (_, _, client) = setup_contract();
129
-
130
- // Default frozen state should be false
131
- assert!(!client.frozen());
132
-
133
- // Default TTLs should be returned when not set
134
- assert_eq!(client.instance_ttl(), DEFAULT_INSTANCE_TTL);
135
- assert_eq!(client.persistent_ttl(), DEFAULT_PERSISTENT_TTL);
136
-
137
- // has_* should return false initially
138
- assert!(!client.has_instance_ttl());
139
- assert!(!client.has_persistent_ttl());
140
- }
141
-
142
- #[test]
143
- fn test_ttl_config_data_set_get_remove() {
144
- let (_, _, client) = setup_contract();
145
-
146
- let instance_cfg = TtlConfig::new(1000, 2000);
147
- let persistent_cfg = TtlConfig::new(3000, 4000);
148
-
149
- // Set and verify instance
150
- client.set_instance_ttl(&instance_cfg);
151
- assert!(client.has_instance_ttl());
152
- assert_eq!(client.instance_ttl(), instance_cfg);
153
-
154
- // Set and verify persistent
155
- client.set_persistent_ttl(&persistent_cfg);
156
- assert!(client.has_persistent_ttl());
157
- assert_eq!(client.persistent_ttl(), persistent_cfg);
158
-
159
- // Remove and verify defaults return
160
- client.remove_instance_ttl();
161
- assert!(!client.has_instance_ttl());
162
- assert_eq!(client.instance_ttl(), DEFAULT_INSTANCE_TTL);
163
-
164
- // Remove persistent
165
- client.remove_persistent_ttl();
166
- assert!(!client.has_persistent_ttl());
167
- assert_eq!(client.persistent_ttl(), DEFAULT_PERSISTENT_TTL);
168
- }
169
-
170
- #[test]
171
- fn test_ttl_config_data_frozen() {
172
- let (_, _, client) = setup_contract();
173
-
174
- assert!(!client.frozen());
175
-
176
- client.set_frozen(&true);
177
- assert!(client.frozen());
178
-
179
- client.set_frozen(&false);
180
- assert!(!client.frozen());
181
- }
182
-
183
- #[test]
184
- fn test_ttl_config_data_independent_storage() {
185
- let (_, _, client) = setup_contract();
186
-
187
- let instance_cfg = TtlConfig::new(100, 200);
188
- let persistent_cfg = TtlConfig::new(300, 400);
189
-
190
- // Set each independently and verify others unchanged
191
- client.set_instance_ttl(&instance_cfg);
192
- assert_eq!(client.instance_ttl(), instance_cfg);
193
- assert_eq!(client.persistent_ttl(), DEFAULT_PERSISTENT_TTL);
194
-
195
- client.set_persistent_ttl(&persistent_cfg);
196
- assert_eq!(client.instance_ttl(), instance_cfg);
197
- assert_eq!(client.persistent_ttl(), persistent_cfg);
198
- }
199
-
200
- #[test]
201
- fn test_ttl_config_data_remove_all() {
202
- let (_, _, client) = setup_contract();
203
-
204
- let instance_cfg = TtlConfig::new(1000, 2000);
205
- let persistent_cfg = TtlConfig::new(3000, 4000);
206
-
207
- // Set all configs
208
- client.set_instance_ttl(&instance_cfg);
209
- client.set_persistent_ttl(&persistent_cfg);
210
-
211
- // Verify all are set
212
- assert!(client.has_instance_ttl());
213
- assert!(client.has_persistent_ttl());
214
-
215
- // Remove all
216
- client.remove_instance_ttl();
217
- client.remove_persistent_ttl();
218
-
219
- // Verify all return to defaults
220
- assert!(!client.has_instance_ttl());
221
- assert!(!client.has_persistent_ttl());
222
- assert_eq!(client.instance_ttl(), DEFAULT_INSTANCE_TTL);
223
- assert_eq!(client.persistent_ttl(), DEFAULT_PERSISTENT_TTL);
224
- }
225
-
226
- #[test]
227
- fn test_ttl_config_data_remove_when_not_set() {
228
- let (_, _, client) = setup_contract();
229
-
230
- // Removing when not set should not panic
231
- client.remove_instance_ttl();
232
- client.remove_persistent_ttl();
233
-
234
- // Should still return defaults
235
- assert_eq!(client.instance_ttl(), DEFAULT_INSTANCE_TTL);
236
- assert_eq!(client.persistent_ttl(), DEFAULT_PERSISTENT_TTL);
237
- }
238
-
239
- // ============================================
240
- // DefaultTtlConfigurable Tests - Basic Operations
241
- // ============================================
242
-
243
- #[test]
244
- fn test_default_ttl_configurable_initial_state() {
245
- let (_, _, client) = setup_contract();
246
-
247
- let (instance, persistent) = client.configurable_ttl_configs();
248
- assert!(instance.is_none());
249
- assert!(persistent.is_none());
250
-
251
- assert!(!client.is_ttl_configs_frozen());
252
- }
253
-
254
- #[test]
255
- fn test_default_ttl_configurable_set_all() {
256
- let (_, _, client) = setup_contract();
257
-
258
- let instance_cfg = TtlConfig::new(1000, 2000);
259
- let persistent_cfg = TtlConfig::new(3000, 4000);
260
-
261
- client.configurable_set_ttl_configs(&Some(instance_cfg), &Some(persistent_cfg));
262
-
263
- let (instance, persistent) = client.configurable_ttl_configs();
264
- assert_eq!(instance, Some(instance_cfg));
265
- assert_eq!(persistent, Some(persistent_cfg));
266
- }
267
-
268
- #[test]
269
- fn test_default_ttl_configurable_set_partial() {
270
- let (_, _, client) = setup_contract();
271
-
272
- let instance_cfg = TtlConfig::new(1000, 2000);
273
-
274
- // Only set instance config
275
- client.configurable_set_ttl_configs(&Some(instance_cfg), &None);
276
-
277
- let (instance, persistent) = client.configurable_ttl_configs();
278
- assert_eq!(instance, Some(instance_cfg));
279
- assert!(persistent.is_none());
280
- }
281
-
282
- #[test]
283
- fn test_default_ttl_configurable_set_and_remove() {
284
- let (_, _, client) = setup_contract();
285
-
286
- let instance_cfg = TtlConfig::new(1000, 2000);
287
-
288
- // Set config
289
- client.configurable_set_ttl_configs(&Some(instance_cfg), &None);
290
- assert_eq!(client.configurable_ttl_configs().0, Some(instance_cfg));
291
-
292
- // Remove by passing None
293
- client.configurable_set_ttl_configs(&None, &None);
294
- assert!(client.configurable_ttl_configs().0.is_none());
295
- }
296
-
297
- // ============================================
298
- // DefaultTtlConfigurable Tests - Freeze Operations
299
- // ============================================
300
-
301
- #[test]
302
- fn test_default_ttl_configurable_freeze() {
303
- let (_, _, client) = setup_contract();
304
-
305
- assert!(!client.is_ttl_configs_frozen());
306
- client.configurable_freeze_ttl_configs();
307
- assert!(client.is_ttl_configs_frozen());
308
- }
309
-
310
- #[test]
311
- #[should_panic(expected = "Error(Contract, #1201)")]
312
- fn test_default_ttl_configurable_set_when_frozen() {
313
- let (_, _, client) = setup_contract();
314
-
315
- client.configurable_freeze_ttl_configs();
316
-
317
- let instance_cfg = TtlConfig::new(1000, 2000);
318
- client.configurable_set_ttl_configs(&Some(instance_cfg), &None);
319
- }
320
-
321
- #[test]
322
- #[should_panic(expected = "Error(Contract, #1202)")]
323
- fn test_default_ttl_configurable_freeze_when_already_frozen() {
324
- let (_, _, client) = setup_contract();
325
-
326
- client.configurable_freeze_ttl_configs();
327
- client.configurable_freeze_ttl_configs();
328
- }
329
-
330
- // ============================================
331
- // DefaultTtlConfigurable Tests - Validation
332
- // ============================================
333
-
334
- #[test]
335
- #[should_panic(expected = "Error(Contract, #1200)")]
336
- fn test_default_ttl_configurable_invalid_instance_config() {
337
- let (_, _, client) = setup_contract();
338
- // threshold > extend_to is invalid
339
- let invalid_cfg = TtlConfig::new(3000, 2000);
340
- client.configurable_set_ttl_configs(&Some(invalid_cfg), &None);
341
- }
342
-
343
- #[test]
344
- #[should_panic(expected = "Error(Contract, #1200)")]
345
- fn test_default_ttl_configurable_invalid_persistent_config() {
346
- let (_, _, client) = setup_contract();
347
- let invalid_cfg = TtlConfig::new(5000, 4000);
348
- client.configurable_set_ttl_configs(&None, &Some(invalid_cfg));
349
- }
350
-
351
- #[test]
352
- #[should_panic(expected = "Error(Contract, #1200)")]
353
- fn test_default_ttl_configurable_exceeds_max_ttl() {
354
- let (_, _, client) = setup_contract();
355
- let invalid_cfg = TtlConfig::new(1000, MAX_TTL + 1);
356
- client.configurable_set_ttl_configs(&Some(invalid_cfg), &None);
357
- }
358
-
359
- #[test]
360
- fn test_default_ttl_configurable_invalid_does_not_partially_update() {
361
- let (_, _, client) = setup_contract();
362
-
363
- // Seed with an initial valid state.
364
- let before_instance = TtlConfig::new(1000, 2000);
365
- let before_persistent = TtlConfig::new(3000, 4000);
366
- client.configurable_set_ttl_configs(&Some(before_instance), &Some(before_persistent));
367
- assert_eq!(client.configurable_ttl_configs(), (Some(before_instance), Some(before_persistent)));
368
-
369
- // Attempt to update with one invalid config and one different valid config.
370
- // This must fail and must not partially apply any changes.
371
- let invalid_instance = TtlConfig::new(3000, 2000); // threshold > extend_to
372
- let next_persistent = TtlConfig::new(3100, 4100);
373
- assert_eq!(
374
- client.try_configurable_set_ttl_configs(&Some(invalid_instance), &Some(next_persistent)).unwrap_err().unwrap(),
375
- TtlError::InvalidTtlConfig.into()
376
- );
377
-
378
- // Ensure nothing changed.
379
- assert_eq!(client.configurable_ttl_configs(), (Some(before_instance), Some(before_persistent)));
380
- }
381
-
382
- // ============================================
383
- // DefaultTtlConfigurable Tests - Boundary Values
384
- // ============================================
385
-
386
- #[test]
387
- fn test_default_ttl_configurable_at_max_ttl() {
388
- let (env, _, client) = setup_contract();
389
-
390
- // Get the effective max TTL
391
- let effective_max = u32::min(MAX_TTL, env.storage().max_ttl());
392
-
393
- // extend_to == effective_max should be valid
394
- let valid_cfg = TtlConfig::new(1000, effective_max);
395
- client.configurable_set_ttl_configs(&Some(valid_cfg), &None);
396
-
397
- let (instance, _) = client.configurable_ttl_configs();
398
- assert_eq!(instance, Some(valid_cfg));
399
- }
400
-
401
- #[test]
402
- fn test_default_ttl_configurable_boundary_values() {
403
- let (env, _, client) = setup_contract();
404
-
405
- let effective_max = u32::min(MAX_TTL, env.storage().max_ttl());
406
-
407
- // Zero threshold and extend_to
408
- let cfg = TtlConfig::new(0, 0);
409
- client.configurable_set_ttl_configs(&Some(cfg), &None);
410
- assert_eq!(client.configurable_ttl_configs().0, Some(cfg));
411
-
412
- // Zero threshold, max extend_to
413
- let cfg = TtlConfig::new(0, effective_max);
414
- client.configurable_set_ttl_configs(&Some(cfg), &None);
415
- assert_eq!(client.configurable_ttl_configs().0, Some(cfg));
416
-
417
- // Equal threshold and extend_to
418
- let cfg = TtlConfig::new(1000, 1000);
419
- client.configurable_set_ttl_configs(&Some(cfg), &None);
420
- assert_eq!(client.configurable_ttl_configs().0, Some(cfg));
421
- }