@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,48 +1,92 @@
1
+ //! Integration test setup for OFT-STD with real EndpointV2 and SimpleMessageLib.
2
+ //!
3
+ //! This file contains test setup utilities for OFT-STD with all extensions enabled.
4
+
5
+ extern crate self as oft_std;
1
6
  extern crate std;
2
7
 
3
8
  use crate::{
4
- counter::{Counter, CounterClient},
5
- integration_tests::utils::address_to_bytes32,
9
+ integration_tests::utils::{address_to_peer_bytes32, peer_bytes32_to_address},
10
+ oft::{OFTMode, OFTStd, OFTStdClient},
6
11
  };
7
12
  use endpoint_v2::{EndpointV2, EndpointV2Client};
8
13
  use simple_message_lib::{SimpleMessageLib, SimpleMessageLibClient};
9
14
  use soroban_sdk::{
10
- address_payload::AddressPayload,
11
- log,
15
+ contract, contractimpl, log,
12
16
  testutils::{Address as _, MockAuth, MockAuthInvoke},
17
+ token::TokenClient,
13
18
  Address, BytesN, Env, IntoVal,
14
19
  };
15
- use utils::buffer_reader::BufferReader;
20
+
21
+ // ============================================================================
22
+ // Dummy Recipient - used to create valid contract addresses for recipients
23
+ // ============================================================================
24
+
25
+ #[contract]
26
+ pub struct DummyRecipient;
27
+
28
+ #[contractimpl]
29
+ impl DummyRecipient {
30
+ pub fn __constructor(_env: &Env) {}
31
+ }
32
+
33
+ /// Creates a valid recipient address by deploying a dummy contract.
34
+ /// Use this in tests when the address needs to pass the `.exists()` check.
35
+ pub fn create_recipient_address(env: &Env) -> Address {
36
+ env.register(DummyRecipient, ())
37
+ }
38
+
39
+ // ============================================================================
40
+ // Test Setup
41
+ // ============================================================================
16
42
 
17
43
  pub struct ChainSetup<'a> {
18
44
  pub eid: u32,
19
45
  pub owner: Address,
20
46
  pub native_token: Address,
47
+ pub zro_token: Address,
48
+ pub oft_token: Address,
21
49
  pub endpoint: EndpointV2Client<'a>,
22
50
  pub sml: SimpleMessageLibClient<'a>,
23
- pub counter: CounterClient<'a>,
51
+ pub oft: OFTStdClient<'a>,
52
+ pub fee_collector: Address,
24
53
  }
25
54
 
26
55
  pub struct TestSetup<'a> {
27
56
  pub env: Env,
28
-
29
57
  pub chain_a: ChainSetup<'a>,
30
58
  pub chain_b: ChainSetup<'a>,
31
59
  }
32
60
 
33
- fn setup_chain<'a>(env: &Env, owner: &Address) -> ChainSetup<'a> {
61
+ fn setup_chain<'a>(env: &Env) -> ChainSetup<'a> {
62
+ let owner = Address::generate(env);
63
+
64
+ // Create native token FIRST - this must match the endpoint's NATIVE_TOKEN constant
65
+ let sac = env.register_stellar_asset_contract_v2(owner.clone());
66
+ let native_token = sac.address();
67
+
68
+ // Generate fee_collector AFTER native_token to not affect the address derivation
69
+ let fee_collector = Address::generate(env);
70
+
34
71
  // Create ZRO token
35
72
  let zro_sac = env.register_stellar_asset_contract_v2(owner.clone());
36
73
  let zro_token = zro_sac.address();
37
74
 
38
- let endpoint_address = env.register(EndpointV2, (owner,));
75
+ // Create OFT token
76
+ let oft_sac = env.register_stellar_asset_contract_v2(owner.clone());
77
+ let oft_token = oft_sac.address();
78
+
79
+ let endpoint_address = env.register(EndpointV2, (&owner,));
39
80
  let fee_recipient = Address::generate(env);
40
- let sml_address = env.register(SimpleMessageLib, (owner, &endpoint_address, &fee_recipient));
41
- let counter_address = env.register(Counter, (owner, &endpoint_address, owner));
81
+ let sml_address = env.register(SimpleMessageLib, (&owner, &endpoint_address, &fee_recipient));
82
+ let delegate: Option<Address> = Some(owner.clone());
83
+ let shared_decimals: u32 = 6; // Default shared decimals
84
+ let mode = OFTMode::MintBurn;
85
+ let oft_address = env.register(OFTStd, (&oft_token, &owner, &endpoint_address, &delegate, &shared_decimals, &mode));
42
86
 
43
87
  let endpoint = EndpointV2Client::new(env, &endpoint_address);
44
88
  let sml = SimpleMessageLibClient::new(env, &sml_address);
45
- let counter = CounterClient::new(env, &counter_address);
89
+ let oft = OFTStdClient::new(env, &oft_address);
46
90
 
47
91
  // Set ZRO token in endpoint
48
92
  env.mock_auths(&[MockAuth {
@@ -59,27 +103,29 @@ fn setup_chain<'a>(env: &Env, owner: &Address) -> ChainSetup<'a> {
59
103
  register_library(env, &owner, &endpoint, &sml.address);
60
104
 
61
105
  let eid = endpoint.eid();
62
- let native_token = endpoint.native_token();
63
- ChainSetup { owner: owner.clone(), endpoint, sml, counter, eid, native_token }
106
+ ChainSetup { eid, owner, native_token, zro_token, oft_token, endpoint, sml, oft, fee_collector }
64
107
  }
65
108
 
66
109
  pub fn setup<'a>() -> TestSetup<'a> {
67
110
  let env = Env::default();
68
- let owner = Address::generate(&env);
69
- let sac = env.register_stellar_asset_contract_v2(owner.clone());
70
- log!(&env, "native_token: {:?}", sac.address());
111
+ let chain_a = setup_chain(&env);
112
+ let chain_b = setup_chain(&env);
71
113
 
72
- let chain_a = setup_chain(&env, &owner);
73
- let chain_b = setup_chain(&env, &owner);
114
+ let chain_a_oft_token_decimals = TokenClient::new(&env, &chain_a.oft_token).decimals();
115
+ let chain_b_oft_token_decimals = TokenClient::new(&env, &chain_b.oft_token).decimals();
74
116
 
75
117
  log!(&env, "endpoint_a: {:?}", chain_a.endpoint.address);
76
118
  log!(&env, "native_token_a: {:?}", chain_a.native_token);
77
- log!(&env, "counter_a: {:?}", chain_a.counter.address);
119
+ log!(&env, "oft_token_a: {:?}", chain_a.oft.token());
120
+ log!(&env, "oft_token_a decimals: {:?}", chain_a_oft_token_decimals);
121
+ log!(&env, "oft_a: {:?}", chain_a.oft.address);
78
122
  log!(&env, "sml_a: {:?}", chain_a.sml.address);
79
123
 
80
124
  log!(&env, "endpoint_b: {:?}", chain_b.endpoint.address);
81
125
  log!(&env, "native_token_b: {:?}", chain_b.native_token);
82
- log!(&env, "counter_b: {:?}", chain_b.counter.address);
126
+ log!(&env, "oft_token_b: {:?}", chain_b.oft.token());
127
+ log!(&env, "oft_token_b decimals: {:?}", chain_b_oft_token_decimals);
128
+ log!(&env, "oft_b: {:?}", chain_b.oft.address);
83
129
  log!(&env, "sml_b: {:?}", chain_b.sml.address);
84
130
 
85
131
  TestSetup { env, chain_a, chain_b }
@@ -97,7 +143,7 @@ pub fn wire_endpoint(env: &Env, chains: &[&ChainSetup<'_>]) {
97
143
  }
98
144
  }
99
145
 
100
- pub fn wire_counter(env: &Env, chains: &[&ChainSetup<'_>]) {
146
+ pub fn wire_oft(env: &Env, chains: &[&ChainSetup<'_>]) {
101
147
  for chain in chains {
102
148
  for other_chain in chains {
103
149
  if chain.endpoint.address == other_chain.endpoint.address {
@@ -106,26 +152,25 @@ pub fn wire_counter(env: &Env, chains: &[&ChainSetup<'_>]) {
106
152
  set_peer(
107
153
  env,
108
154
  &chain.owner,
109
- &chain.counter,
155
+ &chain.oft,
110
156
  other_chain.eid,
111
- &address_to_bytes32(&other_chain.counter.address),
157
+ &address_to_peer_bytes32(&other_chain.oft.address),
112
158
  );
113
159
  }
114
160
  }
115
161
  }
116
162
 
117
- pub fn set_peer(env: &Env, owner: &Address, counter: &CounterClient<'_>, dst_eid: u32, peer: &BytesN<32>) {
118
- let peer_option = Some(peer.clone());
163
+ pub fn set_peer(env: &Env, owner: &Address, oft: &OFTStdClient<'_>, dst_eid: u32, peer: &BytesN<32>) {
119
164
  env.mock_auths(&[MockAuth {
120
165
  address: owner,
121
166
  invoke: &MockAuthInvoke {
122
- contract: &counter.address,
167
+ contract: &oft.address,
123
168
  fn_name: "set_peer",
124
- args: (&dst_eid, &peer_option).into_val(env),
169
+ args: (&dst_eid, &Some(peer.clone())).into_val(env),
125
170
  sub_invokes: &[],
126
171
  },
127
172
  }]);
128
- counter.set_peer(&dst_eid, &peer_option);
173
+ oapp::oapp_core::OAppCoreClient::new(env, &oft.address).set_peer(&dst_eid, &Some(peer.clone()));
129
174
  }
130
175
 
131
176
  pub fn register_library(env: &Env, owner: &Address, endpoint: &EndpointV2Client<'_>, lib: &Address) {
@@ -181,6 +226,7 @@ pub fn set_default_receive_library(
181
226
 
182
227
  pub fn decode_packet(env: &Env, encoded_packet: &soroban_sdk::Bytes) -> endpoint_v2::OutboundPacket {
183
228
  use message_lib_common::packet_codec_v1::*;
229
+ use utils::buffer_reader::BufferReader;
184
230
 
185
231
  let header = decode_packet_header(env, &encoded_packet.slice(0..HEADER_LENGTH));
186
232
  let payload = encoded_packet.slice(HEADER_LENGTH..);
@@ -192,7 +238,7 @@ pub fn decode_packet(env: &Env, encoded_packet: &soroban_sdk::Bytes) -> endpoint
192
238
  endpoint_v2::OutboundPacket {
193
239
  nonce: header.nonce,
194
240
  src_eid: header.src_eid,
195
- sender: Address::from_payload(env, AddressPayload::ContractIdHash(header.sender)),
241
+ sender: peer_bytes32_to_address(env, &header.sender),
196
242
  dst_eid: header.dst_eid,
197
243
  receiver: header.receiver,
198
244
  guid,
@@ -0,0 +1,427 @@
1
+ //! Utility functions for OFT-STD integration tests.
2
+
3
+ use crate::integration_tests::setup::{decode_packet, ChainSetup};
4
+ use endpoint_v2::{MessagingFee, Origin, OutboundPacket};
5
+ use message_lib_common::packet_codec_v1;
6
+ use oft::extensions::rate_limiter::Direction;
7
+ use oft::types::{OFTFeeDetail, OFTLimit, OFTReceipt, SendParam};
8
+ use soroban_sdk::{
9
+ address_payload::AddressPayload,
10
+ testutils::{Events, Ledger, MockAuth, MockAuthInvoke},
11
+ token::StellarAssetClient,
12
+ xdr::ToXdr,
13
+ Address, Bytes, BytesN, Env, IntoVal, Map, Symbol, Val, Vec,
14
+ };
15
+
16
+ // ============================================================================
17
+ // Address Conversion Utilities
18
+ // ============================================================================
19
+
20
+ pub fn address_to_peer_bytes32(address: &Address) -> BytesN<32> {
21
+ match address.to_payload().unwrap() {
22
+ AddressPayload::ContractIdHash(payload) => payload,
23
+ AddressPayload::AccountIdPublicKeyEd25519(_) => panic!("peer must be a contract"),
24
+ }
25
+ }
26
+
27
+ pub fn peer_bytes32_to_address(env: &Env, bytes32: &BytesN<32>) -> Address {
28
+ AddressPayload::ContractIdHash(bytes32.clone()).to_address(env)
29
+ }
30
+
31
+ #[allow(dead_code)]
32
+ pub fn create_recipient_address(env: &Env) -> Address {
33
+ let bytes = BytesN::from_array(env, &[0u8; 32]);
34
+ peer_bytes32_to_address(env, &bytes)
35
+ }
36
+
37
+ // ============================================================================
38
+ // OFT Core Operations
39
+ // ============================================================================
40
+
41
+ pub fn quote_oft(chain: &ChainSetup<'_>, send_param: &SendParam) -> (OFTLimit, Vec<OFTFeeDetail>, OFTReceipt) {
42
+ chain.oft.quote_oft(send_param)
43
+ }
44
+
45
+ pub fn quote_send(
46
+ env: &Env,
47
+ chain: &ChainSetup<'_>,
48
+ sender: &Address,
49
+ send_param: &SendParam,
50
+ pay_in_zro: bool,
51
+ ) -> MessagingFee {
52
+ env.mock_auths(&[MockAuth {
53
+ address: sender,
54
+ invoke: &MockAuthInvoke {
55
+ contract: &chain.oft.address,
56
+ fn_name: "quote_send",
57
+ args: (sender, send_param, &pay_in_zro).into_val(env),
58
+ sub_invokes: &[],
59
+ },
60
+ }]);
61
+ chain.oft.quote_send(sender, send_param, &pay_in_zro)
62
+ }
63
+
64
+ /// Send without fee (standard OFT send)
65
+ pub fn send(
66
+ env: &Env,
67
+ chain: &ChainSetup<'_>,
68
+ sender: &Address,
69
+ send_param: &SendParam,
70
+ fee: &MessagingFee,
71
+ refund_address: &Address,
72
+ oft_receipt: &OFTReceipt,
73
+ ) {
74
+ env.mock_auths(&[MockAuth {
75
+ address: sender,
76
+ invoke: &MockAuthInvoke {
77
+ contract: &chain.oft.address,
78
+ fn_name: "send",
79
+ args: (sender, send_param, fee, refund_address).into_val(env),
80
+ sub_invokes: &[
81
+ MockAuthInvoke {
82
+ contract: &chain.native_token,
83
+ fn_name: "transfer",
84
+ args: (sender, &chain.endpoint.address, &fee.native_fee).into_val(env),
85
+ sub_invokes: &[],
86
+ },
87
+ MockAuthInvoke {
88
+ contract: &chain.oft_token,
89
+ fn_name: "burn",
90
+ args: (sender, &oft_receipt.amount_received_ld).into_val(env),
91
+ sub_invokes: &[],
92
+ },
93
+ ],
94
+ },
95
+ }]);
96
+ chain.oft.send(sender, send_param, fee, refund_address);
97
+ }
98
+
99
+ /// Send with fee (OFT fee extension enabled)
100
+ /// Order: transfer fee to deposit -> burn tokens -> transfer native fee
101
+ pub fn send_with_fee(
102
+ env: &Env,
103
+ chain: &ChainSetup<'_>,
104
+ sender: &Address,
105
+ send_param: &SendParam,
106
+ fee: &MessagingFee,
107
+ refund_address: &Address,
108
+ oft_receipt: &OFTReceipt,
109
+ fee_deposit_address: &Address,
110
+ ) {
111
+ let fee_amount = oft_receipt.amount_sent_ld - oft_receipt.amount_received_ld;
112
+ env.mock_auths(&[MockAuth {
113
+ address: sender,
114
+ invoke: &MockAuthInvoke {
115
+ contract: &chain.oft.address,
116
+ fn_name: "send",
117
+ args: (sender, send_param, fee, refund_address).into_val(env),
118
+ sub_invokes: &[
119
+ MockAuthInvoke {
120
+ contract: &chain.oft_token,
121
+ fn_name: "transfer",
122
+ args: (sender, fee_deposit_address, &fee_amount).into_val(env),
123
+ sub_invokes: &[],
124
+ },
125
+ MockAuthInvoke {
126
+ contract: &chain.oft_token,
127
+ fn_name: "burn",
128
+ args: (sender, &oft_receipt.amount_received_ld).into_val(env),
129
+ sub_invokes: &[],
130
+ },
131
+ MockAuthInvoke {
132
+ contract: &chain.native_token,
133
+ fn_name: "transfer",
134
+ args: (sender, &chain.endpoint.address, &fee.native_fee).into_val(env),
135
+ sub_invokes: &[],
136
+ },
137
+ ],
138
+ },
139
+ }]);
140
+ chain.oft.send(sender, send_param, fee, refund_address);
141
+ }
142
+
143
+ pub fn try_send(
144
+ env: &Env,
145
+ chain: &ChainSetup<'_>,
146
+ sender: &Address,
147
+ send_param: &SendParam,
148
+ fee: &MessagingFee,
149
+ refund_address: &Address,
150
+ oft_receipt: &OFTReceipt,
151
+ ) -> bool {
152
+ env.mock_auths(&[MockAuth {
153
+ address: sender,
154
+ invoke: &MockAuthInvoke {
155
+ contract: &chain.oft.address,
156
+ fn_name: "send",
157
+ args: (sender, send_param, fee, refund_address).into_val(env),
158
+ sub_invokes: &[
159
+ MockAuthInvoke {
160
+ contract: &chain.native_token,
161
+ fn_name: "transfer",
162
+ args: (sender, &chain.endpoint.address, &fee.native_fee).into_val(env),
163
+ sub_invokes: &[],
164
+ },
165
+ MockAuthInvoke {
166
+ contract: &chain.oft_token,
167
+ fn_name: "burn",
168
+ args: (sender, &oft_receipt.amount_received_ld).into_val(env),
169
+ sub_invokes: &[],
170
+ },
171
+ ],
172
+ },
173
+ }]);
174
+ chain.oft.try_send(sender, send_param, fee, refund_address).is_ok()
175
+ }
176
+
177
+ // ============================================================================
178
+ // Packet Handling
179
+ // ============================================================================
180
+
181
+ pub fn validate_packet(env: &Env, chain: &ChainSetup<'_>, packet_event: &(Bytes, Bytes, Address)) {
182
+ let packet = decode_packet(env, &packet_event.0);
183
+ let encoded_header = packet_codec_v1::encode_packet_header(env, &packet);
184
+ let payload_hash = packet_codec_v1::payload_hash(env, &packet);
185
+
186
+ env.mock_auths(&[MockAuth {
187
+ address: &chain.owner,
188
+ invoke: &MockAuthInvoke {
189
+ contract: &chain.sml.address,
190
+ fn_name: "validate_packet",
191
+ args: (&encoded_header, &payload_hash).into_val(env),
192
+ sub_invokes: &[],
193
+ },
194
+ }]);
195
+ chain.sml.validate_packet(&encoded_header, &payload_hash);
196
+ }
197
+
198
+ pub fn lz_receive(
199
+ env: &Env,
200
+ chain: &ChainSetup<'_>,
201
+ executor: &Address,
202
+ packet: &OutboundPacket,
203
+ recipient: &Address,
204
+ value: i128,
205
+ ) {
206
+ let origin =
207
+ Origin { src_eid: packet.src_eid, sender: address_to_peer_bytes32(&packet.sender), nonce: packet.nonce };
208
+ let extra_options = recipient.to_xdr(env);
209
+
210
+ env.mock_auths(&[MockAuth {
211
+ address: executor,
212
+ invoke: &MockAuthInvoke {
213
+ contract: &chain.oft.address,
214
+ fn_name: "lz_receive",
215
+ args: (executor, &origin, &packet.guid, &packet.message, &extra_options, &value).into_val(env),
216
+ sub_invokes: &[],
217
+ },
218
+ }]);
219
+ endpoint_v2::LayerZeroReceiverClient::new(env, &chain.oft.address).lz_receive(
220
+ executor,
221
+ &origin,
222
+ &packet.guid,
223
+ &packet.message,
224
+ &extra_options,
225
+ &value,
226
+ );
227
+ }
228
+
229
+ pub fn try_lz_receive(
230
+ env: &Env,
231
+ chain: &ChainSetup<'_>,
232
+ executor: &Address,
233
+ packet: &OutboundPacket,
234
+ recipient: &Address,
235
+ value: i128,
236
+ ) -> bool {
237
+ let origin =
238
+ Origin { src_eid: packet.src_eid, sender: address_to_peer_bytes32(&packet.sender), nonce: packet.nonce };
239
+ let extra_options = recipient.to_xdr(env);
240
+
241
+ env.mock_auths(&[MockAuth {
242
+ address: executor,
243
+ invoke: &MockAuthInvoke {
244
+ contract: &chain.oft.address,
245
+ fn_name: "lz_receive",
246
+ args: (executor, &origin, &packet.guid, &packet.message, &extra_options, &value).into_val(env),
247
+ sub_invokes: &[],
248
+ },
249
+ }]);
250
+ endpoint_v2::LayerZeroReceiverClient::new(env, &chain.oft.address)
251
+ .try_lz_receive(executor, &origin, &packet.guid, &packet.message, &extra_options, &value)
252
+ .is_ok()
253
+ }
254
+
255
+ // returns (encoded_payload, options, send_library)
256
+ pub fn scan_packet_sent_event(env: &Env, endpoint: &Address) -> Option<(Bytes, Bytes, Address)> {
257
+ let mut packet = None;
258
+ for (emitter, topics, data) in env.events().all() {
259
+ let packet_sent_symbol = Symbol::new(env, "packet_sent").to_val();
260
+ if emitter == *endpoint && topics.contains(packet_sent_symbol) {
261
+ let map: Map<Symbol, Val> = data.into_val(env);
262
+
263
+ let encoded_payload: Bytes = map.get(Symbol::new(env, "encoded_packet")).unwrap().into_val(env);
264
+ let options: Bytes = map.get(Symbol::new(env, "options")).unwrap().into_val(env);
265
+ let send_library: Address = map.get(Symbol::new(env, "send_library")).unwrap().into_val(env);
266
+
267
+ packet = Some((encoded_payload, options, send_library));
268
+ }
269
+ }
270
+
271
+ packet
272
+ }
273
+
274
+ // ============================================================================
275
+ // Token Operations
276
+ // ============================================================================
277
+
278
+ pub fn mint_to(env: &Env, owner: &Address, token: &Address, to: &Address, amount: i128) {
279
+ env.mock_auths(&[MockAuth {
280
+ address: owner,
281
+ invoke: &MockAuthInvoke {
282
+ contract: token,
283
+ fn_name: "mint",
284
+ args: (to, amount).into_val(env),
285
+ sub_invokes: &[],
286
+ },
287
+ }]);
288
+
289
+ let sac = StellarAssetClient::new(env, token);
290
+ sac.mint(to, &amount);
291
+ }
292
+
293
+ pub fn transfer_sac_admin(env: &Env, owner: &Address, token: &Address, new_admin: &Address) {
294
+ env.mock_auths(&[MockAuth {
295
+ address: owner,
296
+ invoke: &MockAuthInvoke {
297
+ contract: token,
298
+ fn_name: "set_admin",
299
+ args: (new_admin,).into_val(env),
300
+ sub_invokes: &[],
301
+ },
302
+ }]);
303
+ StellarAssetClient::new(env, token).set_admin(new_admin);
304
+ }
305
+
306
+ pub fn token_balance(env: &Env, token: &Address, account: &Address) -> i128 {
307
+ soroban_sdk::token::TokenClient::new(env, token).balance(account)
308
+ }
309
+
310
+ // ============================================================================
311
+ // Pausable Extension Operations
312
+ // ============================================================================
313
+
314
+ pub fn set_paused(env: &Env, chain: &ChainSetup<'_>, paused: bool) {
315
+ env.mock_auths(&[MockAuth {
316
+ address: &chain.owner,
317
+ invoke: &MockAuthInvoke {
318
+ contract: &chain.oft.address,
319
+ fn_name: "set_paused",
320
+ args: (&paused,).into_val(env),
321
+ sub_invokes: &[],
322
+ },
323
+ }]);
324
+ chain.oft.set_paused(&paused);
325
+ }
326
+
327
+ pub fn is_paused(chain: &ChainSetup<'_>) -> bool {
328
+ chain.oft.is_paused()
329
+ }
330
+
331
+ // ============================================================================
332
+ // OFT Fee Extension Operations
333
+ // ============================================================================
334
+
335
+ pub fn set_fee_deposit_address(env: &Env, chain: &ChainSetup<'_>, deposit_address: &Address) {
336
+ env.mock_auths(&[MockAuth {
337
+ address: &chain.owner,
338
+ invoke: &MockAuthInvoke {
339
+ contract: &chain.oft.address,
340
+ fn_name: "set_fee_deposit_address",
341
+ args: (deposit_address,).into_val(env),
342
+ sub_invokes: &[],
343
+ },
344
+ }]);
345
+ chain.oft.set_fee_deposit_address(deposit_address);
346
+ }
347
+
348
+ pub fn set_default_fee_bps(env: &Env, chain: &ChainSetup<'_>, fee_bps: u64) {
349
+ env.mock_auths(&[MockAuth {
350
+ address: &chain.owner,
351
+ invoke: &MockAuthInvoke {
352
+ contract: &chain.oft.address,
353
+ fn_name: "set_default_fee_bps",
354
+ args: (&fee_bps,).into_val(env),
355
+ sub_invokes: &[],
356
+ },
357
+ }]);
358
+ chain.oft.set_default_fee_bps(&fee_bps);
359
+ }
360
+
361
+ pub fn set_fee_bps(env: &Env, chain: &ChainSetup<'_>, dst_eid: u32, fee_bps: u64) {
362
+ env.mock_auths(&[MockAuth {
363
+ address: &chain.owner,
364
+ invoke: &MockAuthInvoke {
365
+ contract: &chain.oft.address,
366
+ fn_name: "set_fee_bps",
367
+ args: (&dst_eid, &fee_bps).into_val(env),
368
+ sub_invokes: &[],
369
+ },
370
+ }]);
371
+ chain.oft.set_fee_bps(&dst_eid, &fee_bps);
372
+ }
373
+
374
+ // ============================================================================
375
+ // Rate Limiter Extension Operations
376
+ // ============================================================================
377
+
378
+ pub fn set_rate_limit(env: &Env, chain: &ChainSetup<'_>, direction: &Direction, dst_eid: u32, limit: i128, window_seconds: u64) {
379
+ env.mock_auths(&[MockAuth {
380
+ address: &chain.owner,
381
+ invoke: &MockAuthInvoke {
382
+ contract: &chain.oft.address,
383
+ fn_name: "set_rate_limit",
384
+ args: (direction, &dst_eid, &limit, &window_seconds).into_val(env),
385
+ sub_invokes: &[],
386
+ },
387
+ }]);
388
+ chain.oft.set_rate_limit(direction, &dst_eid, &limit, &window_seconds);
389
+ }
390
+
391
+ pub fn rate_limit_capacity(chain: &ChainSetup<'_>, direction: &Direction, eid: u32) -> i128 {
392
+ chain.oft.rate_limit_capacity(direction, &eid)
393
+ }
394
+
395
+ pub fn rate_limit_in_flight(chain: &ChainSetup<'_>, direction: &Direction, eid: u32) -> i128 {
396
+ chain.oft.rate_limit_in_flight(direction, &eid)
397
+ }
398
+
399
+ // ============================================================================
400
+ // Time Utilities
401
+ // ============================================================================
402
+
403
+ pub fn advance_time(env: &Env, seconds: u64) {
404
+ let current = env.ledger().timestamp();
405
+ env.ledger().set_timestamp(current + seconds);
406
+ }
407
+
408
+ #[allow(dead_code)]
409
+ pub fn set_timestamp(env: &Env, timestamp: u64) {
410
+ env.ledger().set_timestamp(timestamp);
411
+ }
412
+
413
+ // ============================================================================
414
+ // SendParam Builder
415
+ // ============================================================================
416
+
417
+ pub fn create_send_param(env: &Env, dst_eid: u32, amount_ld: i128, min_amount_ld: i128, to: &BytesN<32>) -> SendParam {
418
+ SendParam {
419
+ dst_eid,
420
+ to: to.clone(),
421
+ amount_ld,
422
+ min_amount_ld,
423
+ extra_options: Bytes::new(env),
424
+ compose_msg: Bytes::new(env),
425
+ oft_cmd: Bytes::new(env),
426
+ }
427
+ }
@@ -1,5 +1,16 @@
1
1
  #![no_std]
2
2
 
3
- mod oft;
3
+ pub mod oft;
4
+
5
+ #[cfg(test)]
6
+ #[path = "../integration-tests/mod.rs"]
7
+ pub mod integration_tests;
4
8
 
5
9
  pub use oft::*;
10
+
11
+ // Re-export extension types from the oft crate for convenience
12
+ pub use ::oft::extensions::{
13
+ oft_fee::{OFTFee, OFTFeeError},
14
+ pausable::{OFTPausable, OFTPausableError},
15
+ rate_limiter::{Direction, RateLimit, RateLimiter, RateLimitError},
16
+ };