@layerzerolabs/protocol-stellar-v2 0.2.13 → 0.2.15

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 (319) hide show
  1. package/.turbo/turbo-build.log +384 -278
  2. package/.turbo/turbo-lint.log +110 -78
  3. package/.turbo/turbo-test.log +1248 -1014
  4. package/Cargo.lock +130 -3
  5. package/Cargo.toml +2 -1
  6. package/contracts/common-macros/src/contract_impl.rs +6 -1
  7. package/contracts/common-macros/src/lib.rs +47 -8
  8. package/contracts/common-macros/src/ownable.rs +7 -25
  9. package/contracts/common-macros/src/storage.rs +1 -1
  10. package/contracts/common-macros/src/tests/contract_impl.rs +5 -0
  11. package/contracts/common-macros/src/tests/mod.rs +1 -0
  12. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_impl__snapshot_generated_contract_impl_code.snap +23 -7
  13. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +5 -25
  14. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__storage__snapshot_generated_storage_code.snap +48 -48
  15. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +5 -25
  16. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +21 -0
  17. package/contracts/common-macros/src/tests/upgradeable.rs +31 -0
  18. package/contracts/common-macros/src/ttl_configurable.rs +14 -44
  19. package/contracts/common-macros/src/upgradeable.rs +76 -0
  20. package/contracts/endpoint-v2/src/endpoint_v2.rs +25 -1
  21. package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +175 -8
  22. package/contracts/endpoint-v2/src/tests/endpoint_v2/build_outbound_packet.rs +76 -0
  23. package/contracts/endpoint-v2/src/tests/endpoint_v2/clear.rs +342 -159
  24. package/contracts/endpoint-v2/src/tests/endpoint_v2/delegate.rs +3 -15
  25. package/contracts/endpoint-v2/src/tests/endpoint_v2/initializable.rs +20 -31
  26. package/contracts/endpoint-v2/src/tests/endpoint_v2/lz_receive_alert.rs +126 -164
  27. package/contracts/endpoint-v2/src/tests/endpoint_v2/mod.rs +1 -0
  28. package/contracts/endpoint-v2/src/tests/endpoint_v2/native_token.rs +0 -1
  29. package/contracts/endpoint-v2/src/tests/endpoint_v2/owner.rs +0 -1
  30. package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +311 -304
  31. package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +423 -96
  32. package/contracts/endpoint-v2/src/tests/endpoint_v2/recover_token.rs +1 -1
  33. package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +47 -20
  34. package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +373 -403
  35. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_delegate.rs +96 -22
  36. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +61 -9
  37. package/contracts/endpoint-v2/src/tests/endpoint_v2/transfer_ownership.rs +4 -4
  38. package/contracts/endpoint-v2/src/tests/endpoint_v2/ttl_config.rs +8 -11
  39. package/contracts/endpoint-v2/src/tests/endpoint_v2/verifiable.rs +81 -30
  40. package/contracts/endpoint-v2/src/tests/endpoint_v2/verify.rs +209 -76
  41. package/contracts/endpoint-v2/src/tests/endpoint_v2/zro.rs +0 -1
  42. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library.rs +24 -0
  43. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library_timeout.rs +40 -0
  44. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_send_library.rs +24 -0
  45. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_config.rs +108 -0
  46. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_library_index.rs +52 -0
  47. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_receive_library.rs +92 -0
  48. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_registered_libraries.rs +74 -0
  49. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_send_library.rs +83 -0
  50. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_registered_library.rs +32 -0
  51. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_supported_eid.rs +28 -0
  52. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_valid_receive_library.rs +261 -0
  53. package/contracts/endpoint-v2/src/tests/message_lib_manager/mod.rs +16 -0
  54. package/contracts/endpoint-v2/src/tests/message_lib_manager/receive_library_timeout.rs +62 -0
  55. package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +65 -43
  56. package/contracts/endpoint-v2/src/tests/message_lib_manager/registered_libraries_count.rs +42 -0
  57. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +61 -0
  58. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +3 -5
  59. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +59 -0
  60. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +15 -1
  61. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_config.rs +155 -51
  62. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs +114 -92
  63. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_library.rs +235 -132
  64. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_send_library.rs +93 -87
  65. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library.rs +346 -245
  66. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library_timeout.rs +406 -60
  67. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_send_library.rs +252 -78
  68. package/contracts/endpoint-v2/src/tests/message_lib_manager/timeout.rs +102 -0
  69. package/contracts/endpoint-v2/src/tests/messaging_channel/burn.rs +212 -273
  70. package/contracts/endpoint-v2/src/tests/messaging_channel/clear_payload.rs +203 -0
  71. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound.rs +94 -0
  72. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_nonce.rs +78 -248
  73. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_payload_hash.rs +7 -282
  74. package/contracts/endpoint-v2/src/tests/messaging_channel/lazy_inbound_nonce.rs +6 -274
  75. package/contracts/endpoint-v2/src/tests/messaging_channel/mod.rs +3 -2
  76. package/contracts/endpoint-v2/src/tests/messaging_channel/next_guid.rs +86 -178
  77. package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +328 -212
  78. package/contracts/endpoint-v2/src/tests/messaging_channel/outbound.rs +68 -0
  79. package/contracts/endpoint-v2/src/tests/messaging_channel/outbound_nonce.rs +6 -209
  80. package/contracts/endpoint-v2/src/tests/messaging_channel/skip.rs +207 -159
  81. package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +142 -153
  82. package/contracts/endpoint-v2/src/tests/messaging_composer/compose_queue.rs +6 -179
  83. package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +163 -221
  84. package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +90 -121
  85. package/contracts/endpoint-v2/src/tests/mock.rs +18 -4
  86. package/contracts/endpoint-v2/src/tests/util/build_payload.rs +4 -70
  87. package/contracts/endpoint-v2/src/tests/util/compute_guid.rs +2 -1
  88. package/contracts/endpoint-v2/src/tests/util/keccak256.rs +17 -106
  89. package/contracts/layerzero-views/Cargo.toml +35 -0
  90. package/contracts/layerzero-views/src/errors.rs +10 -0
  91. package/contracts/layerzero-views/src/layerzero_view.rs +229 -0
  92. package/contracts/layerzero-views/src/lib.rs +38 -0
  93. package/contracts/layerzero-views/src/storage.rs +18 -0
  94. package/contracts/layerzero-views/src/tests/layerzero_view_tests.rs +423 -0
  95. package/contracts/layerzero-views/src/tests/mod.rs +4 -0
  96. package/contracts/layerzero-views/src/tests/setup.rs +377 -0
  97. package/contracts/layerzero-views/src/types.rs +50 -0
  98. package/contracts/macro-integration-tests/Cargo.toml +30 -0
  99. package/contracts/macro-integration-tests/src/lib.rs +1 -0
  100. package/contracts/macro-integration-tests/tests/runtime/ownable/initialization.rs +62 -0
  101. package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +22 -0
  102. package/contracts/macro-integration-tests/tests/runtime/ownable/only_owner_guard.rs +97 -0
  103. package/contracts/macro-integration-tests/tests/runtime/ownable/ownership_transfer.rs +101 -0
  104. package/contracts/macro-integration-tests/tests/runtime/storage/keyed_roundtrip.rs +225 -0
  105. package/contracts/macro-integration-tests/tests/runtime/storage/mod.rs +4 -0
  106. package/contracts/macro-integration-tests/tests/runtime/storage/name_override_runtime.rs +52 -0
  107. package/contracts/macro-integration-tests/tests/runtime/storage/ttl_extension.rs +261 -0
  108. package/contracts/macro-integration-tests/tests/runtime/storage/unkeyed_roundtrip.rs +137 -0
  109. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +113 -0
  110. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/extend_instance_ttl.rs +50 -0
  111. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +139 -0
  112. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/mod.rs +3 -0
  113. package/contracts/macro-integration-tests/tests/runtime.rs +5 -0
  114. package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.rs +12 -0
  115. package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.stderr +7 -0
  116. package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.rs +12 -0
  117. package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.stderr +7 -0
  118. package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.rs +21 -0
  119. package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.stderr +7 -0
  120. package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.rs +13 -0
  121. package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.stderr +7 -0
  122. package/contracts/macro-integration-tests/tests/ui/error/pass/attr_on_variant_allowed.rs +20 -0
  123. package/contracts/macro-integration-tests/tests/ui/error/pass/basic_auto_discriminants.rs +15 -0
  124. package/contracts/macro-integration-tests/tests/ui/error/pass/mixed_discriminants.rs +16 -0
  125. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_owner_missing_env.rs +22 -0
  126. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_owner_missing_env.stderr +16 -0
  127. package/contracts/macro-integration-tests/tests/ui/ownable/pass/minimal_contract.rs +26 -0
  128. package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +22 -0
  129. package/contracts/macro-integration-tests/tests/ui/ownable/pass/only_owner_env_param_variants.rs +46 -0
  130. package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.rs +13 -0
  131. package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.stderr +7 -0
  132. package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.rs +13 -0
  133. package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.stderr +7 -0
  134. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.rs +10 -0
  135. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.stderr +7 -0
  136. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.rs +12 -0
  137. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.stderr +7 -0
  138. package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.rs +10 -0
  139. package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.stderr +7 -0
  140. package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.rs +10 -0
  141. package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.stderr +7 -0
  142. package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.rs +12 -0
  143. package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.stderr +7 -0
  144. package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.rs +13 -0
  145. package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.stderr +7 -0
  146. package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.rs +13 -0
  147. package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.stderr +7 -0
  148. package/contracts/macro-integration-tests/tests/ui/storage/pass/default_value_on_variant.rs +14 -0
  149. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_instance_unit_basic.rs +14 -0
  150. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_persistent_named_fields_keyed.rs +16 -0
  151. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_temporary_unit_option.rs +15 -0
  152. package/contracts/macro-integration-tests/tests/ui/storage/pass/name_override.rs +14 -0
  153. package/contracts/macro-integration-tests/tests/ui/storage/pass/no_auto_ttl_extension.rs +19 -0
  154. package/contracts/macro-integration-tests/tests/ui/storage/pass/ttl_provider_basic.rs +15 -0
  155. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/minimal_contract.rs +44 -0
  156. package/contracts/macro-integration-tests/tests/ui_error.rs +11 -0
  157. package/contracts/macro-integration-tests/tests/ui_ownable.rs +11 -0
  158. package/contracts/macro-integration-tests/tests/ui_storage.rs +11 -0
  159. package/contracts/macro-integration-tests/tests/ui_ttl_configurable.rs +12 -0
  160. package/contracts/message-libs/blocked-message-lib/src/lib.rs +17 -17
  161. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/decode_packet_header.rs +64 -0
  162. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet.rs +58 -0
  163. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet_header.rs +138 -0
  164. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/mod.rs +6 -0
  165. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload.rs +30 -0
  166. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload_hash.rs +15 -0
  167. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/test_helper.rs +39 -0
  168. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_dvn_option.rs +57 -0
  169. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_lz_receive_option.rs +50 -0
  170. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_native_drop_option.rs +74 -0
  171. package/contracts/message-libs/message-lib-common/src/tests/worker_options/convert_legacy_options.rs +280 -0
  172. package/contracts/message-libs/message-lib-common/src/tests/worker_options/extract_type_3_options.rs +126 -0
  173. package/contracts/message-libs/message-lib-common/src/tests/worker_options/left_pad_to_bytes32.rs +48 -0
  174. package/contracts/message-libs/message-lib-common/src/tests/worker_options/mod.rs +7 -0
  175. package/contracts/message-libs/message-lib-common/src/tests/worker_options/split_worker_options.rs +139 -0
  176. package/contracts/message-libs/message-lib-common/src/worker_options.rs +31 -1
  177. package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +2 -2
  178. package/contracts/message-libs/treasury/src/errors.rs +0 -1
  179. package/contracts/message-libs/treasury/src/lib.rs +3 -3
  180. package/contracts/message-libs/treasury/src/storage.rs +2 -0
  181. package/contracts/message-libs/treasury/src/treasury.rs +12 -13
  182. package/contracts/message-libs/uln-302/Cargo.toml +1 -1
  183. package/contracts/message-libs/uln-302/src/errors.rs +0 -5
  184. package/contracts/message-libs/uln-302/src/events.rs +5 -6
  185. package/contracts/message-libs/uln-302/src/receive_uln.rs +24 -54
  186. package/contracts/message-libs/uln-302/src/send_uln.rs +89 -135
  187. package/contracts/message-libs/uln-302/src/storage.rs +5 -5
  188. package/contracts/message-libs/uln-302/src/tests/receive_uln302/effective_receive_uln_config.rs +5 -7
  189. package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs +3 -3
  190. package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_send_uln_config.rs +6 -9
  191. package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_executor_configs.rs +2 -2
  192. package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_send_uln_configs.rs +3 -3
  193. package/contracts/message-libs/uln-302/src/tests/setup.rs +9 -0
  194. package/contracts/message-libs/uln-302/src/tests/testing_utils.rs +5 -0
  195. package/contracts/message-libs/uln-302/src/tests/uln302/get_app_receive_uln_config.rs +1 -2
  196. package/contracts/message-libs/uln-302/src/tests/uln302/get_app_send_uln_config.rs +1 -2
  197. package/contracts/message-libs/uln-302/src/tests/uln302/set_config.rs +37 -55
  198. package/contracts/message-libs/uln-302/src/uln302.rs +8 -5
  199. package/contracts/oapps/counter/src/counter.rs +0 -1
  200. package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +306 -224
  201. package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +0 -1
  202. package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +0 -1
  203. package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +0 -1
  204. package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +0 -1
  205. package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_core.rs +1 -0
  206. package/contracts/oapps/oft/integration-tests/setup.rs +10 -3
  207. package/contracts/oapps/oft/integration-tests/utils.rs +1 -1
  208. package/contracts/oapps/oft/src/default_oft_impl.rs +9 -3
  209. package/contracts/oapps/oft/src/extensions/oft_fee.rs +5 -5
  210. package/contracts/oapps/oft/src/extensions/pausable.rs +1 -1
  211. package/contracts/oapps/oft/src/extensions/rate_limiter.rs +18 -18
  212. package/contracts/oapps/oft/src/oft.rs +9 -9
  213. package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +1 -1
  214. package/contracts/oapps/oft/src/tests/extensions/setup.rs +26 -11
  215. package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +1 -1
  216. package/contracts/oapps/oft/src/tests/test_send.rs +4 -4
  217. package/contracts/oapps/oft/src/tests/test_utils.rs +93 -74
  218. package/contracts/oapps/oft-std/Cargo.toml +6 -0
  219. package/contracts/oapps/oft-std/integration-tests/extensions/mod.rs +3 -0
  220. package/contracts/oapps/oft-std/integration-tests/extensions/test_oft_fee.rs +157 -0
  221. package/contracts/oapps/oft-std/integration-tests/extensions/test_pausable.rs +162 -0
  222. package/contracts/oapps/oft-std/integration-tests/extensions/test_rate_limiter.rs +186 -0
  223. package/contracts/oapps/oft-std/integration-tests/mod.rs +3 -0
  224. package/contracts/oapps/oft-std/integration-tests/setup.rs +245 -0
  225. package/contracts/oapps/oft-std/integration-tests/utils.rs +427 -0
  226. package/contracts/oapps/oft-std/src/lib.rs +12 -1
  227. package/contracts/oapps/oft-std/src/oft.rs +122 -25
  228. package/contracts/upgrader/Cargo.toml +19 -0
  229. package/contracts/upgrader/src/lib.rs +96 -0
  230. package/contracts/upgrader/src/tests/mod.rs +1 -0
  231. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract1.wasm +0 -0
  232. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract2.wasm +0 -0
  233. package/contracts/upgrader/src/tests/test_upgrader.rs +120 -0
  234. package/contracts/utils/src/errors.rs +6 -1
  235. package/contracts/utils/src/lib.rs +2 -1
  236. package/contracts/utils/src/ownable.rs +49 -61
  237. package/contracts/utils/src/tests/mod.rs +3 -1
  238. package/contracts/utils/src/tests/option_ext.rs +21 -0
  239. package/contracts/utils/src/tests/ownable.rs +10 -69
  240. package/contracts/utils/src/tests/ttl_configurable.rs +596 -0
  241. package/contracts/utils/src/tests/upgradeable.rs +288 -0
  242. package/contracts/utils/src/{ttl.rs → ttl_configurable.rs} +67 -52
  243. package/contracts/utils/src/upgradeable.rs +54 -0
  244. package/contracts/workers/dvn/Cargo.toml +1 -1
  245. package/contracts/workers/dvn/src/auth.rs +21 -32
  246. package/contracts/workers/dvn/src/dvn.rs +40 -3
  247. package/contracts/workers/dvn/src/errors.rs +1 -0
  248. package/contracts/workers/dvn/src/multisig.rs +10 -6
  249. package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +2 -2
  250. package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +4 -4
  251. package/contracts/workers/dvn-fee-lib/Cargo.toml +1 -2
  252. package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +46 -14
  253. package/contracts/workers/dvn-fee-lib/src/errors.rs +3 -2
  254. package/contracts/workers/dvn-fee-lib/src/lib.rs +5 -11
  255. package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +30 -16
  256. package/contracts/workers/executor/src/executor.rs +16 -2
  257. package/contracts/workers/executor-fee-lib/src/errors.rs +9 -7
  258. package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +154 -119
  259. package/contracts/workers/executor-helper/Cargo.toml +0 -5
  260. package/contracts/workers/executor-helper/src/lib.rs +1 -7
  261. package/contracts/workers/price-feed/Cargo.toml +0 -1
  262. package/contracts/workers/price-feed/src/errors.rs +3 -2
  263. package/contracts/workers/price-feed/src/lib.rs +5 -6
  264. package/contracts/workers/price-feed/src/price_feed.rs +39 -17
  265. package/contracts/workers/worker/Cargo.toml +4 -0
  266. package/contracts/workers/worker/src/interfaces/price_feed.rs +3 -3
  267. package/contracts/workers/worker/src/lib.rs +2 -2
  268. package/contracts/workers/worker/src/tests/mod.rs +4 -0
  269. package/contracts/workers/worker/src/tests/setup.rs +147 -0
  270. package/contracts/workers/worker/src/tests/worker.rs +501 -0
  271. package/contracts/workers/worker/src/worker.rs +10 -16
  272. package/package.json +3 -3
  273. package/sdk/dist/generated/bml.d.ts +40 -30
  274. package/sdk/dist/generated/bml.js +16 -11
  275. package/sdk/dist/generated/counter.d.ts +168 -134
  276. package/sdk/dist/generated/counter.js +26 -21
  277. package/sdk/dist/generated/dvn.d.ts +1932 -0
  278. package/sdk/dist/generated/dvn.js +288 -0
  279. package/sdk/dist/generated/dvn_fee_lib.d.ts +615 -0
  280. package/sdk/dist/generated/dvn_fee_lib.js +123 -0
  281. package/sdk/dist/generated/endpoint.d.ts +75 -41
  282. package/sdk/dist/generated/endpoint.js +22 -17
  283. package/sdk/dist/generated/executor.d.ts +1809 -0
  284. package/sdk/dist/generated/executor.js +269 -0
  285. package/sdk/dist/generated/executor_fee_lib.d.ts +999 -0
  286. package/sdk/dist/generated/executor_fee_lib.js +208 -0
  287. package/sdk/dist/generated/executor_helper.d.ts +869 -0
  288. package/sdk/dist/generated/executor_helper.js +187 -0
  289. package/sdk/dist/generated/oft_std.d.ts +1544 -0
  290. package/sdk/dist/generated/oft_std.js +271 -0
  291. package/sdk/dist/generated/price_feed.d.ts +1002 -0
  292. package/sdk/dist/generated/price_feed.js +170 -0
  293. package/sdk/dist/generated/sml.d.ts +75 -41
  294. package/sdk/dist/generated/sml.js +22 -17
  295. package/sdk/dist/generated/uln302.d.ts +79 -60
  296. package/sdk/dist/generated/uln302.js +37 -37
  297. package/sdk/dist/generated/upgrader.d.ts +70 -0
  298. package/sdk/dist/generated/upgrader.js +19 -0
  299. package/sdk/dist/index.d.ts +8 -0
  300. package/sdk/dist/index.js +11 -0
  301. package/sdk/package.json +4 -3
  302. package/sdk/src/index.ts +13 -0
  303. package/sdk/test/index.test.ts +0 -1
  304. package/sdk/test/oft.test.ts +12 -23
  305. package/sdk/test/suites/testUpgradeable.ts +169 -0
  306. package/sdk/test/upgrader.test.ts +309 -0
  307. package/tools/ts-bindings-gen/src/main.rs +11 -1
  308. package/contracts/endpoint-v2/src/tests/messaging_channel/clear.rs +0 -316
  309. package/contracts/endpoint-v2/src/tests/messaging_channel/internal.rs +0 -388
  310. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1.rs +0 -162
  311. package/contracts/message-libs/message-lib-common/src/tests/worker_options.rs +0 -319
  312. package/contracts/utils/src/tests/ttl.rs +0 -421
  313. /package/contracts/{oapp-macros → oapps/oapp-macros}/Cargo.toml +0 -0
  314. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/lib.rs +0 -0
  315. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_full.rs +0 -0
  316. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_options_type3.rs +0 -0
  317. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_receiver.rs +0 -0
  318. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_sender.rs +0 -0
  319. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/util.rs +0 -0
@@ -0,0 +1,245 @@
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;
6
+ extern crate std;
7
+
8
+ use crate::integration_tests::utils::{address_to_peer_bytes32, peer_bytes32_to_address};
9
+ use crate::oft::{OFTMode, OFTStd, OFTStdClient};
10
+ use endpoint_v2::{EndpointV2, EndpointV2Client};
11
+ use simple_message_lib::{SimpleMessageLib, SimpleMessageLibClient};
12
+ use soroban_sdk::{
13
+ contract, contractimpl, log,
14
+ testutils::{Address as _, MockAuth, MockAuthInvoke},
15
+ token::TokenClient,
16
+ Address, BytesN, Env, IntoVal,
17
+ };
18
+
19
+ // ============================================================================
20
+ // Dummy Recipient - used to create valid contract addresses for recipients
21
+ // ============================================================================
22
+
23
+ #[contract]
24
+ pub struct DummyRecipient;
25
+
26
+ #[contractimpl]
27
+ impl DummyRecipient {
28
+ pub fn __constructor(_env: &Env) {}
29
+ }
30
+
31
+ /// Creates a valid recipient address by deploying a dummy contract.
32
+ /// Use this in tests when the address needs to pass the `.exists()` check.
33
+ pub fn create_recipient_address(env: &Env) -> Address {
34
+ env.register(DummyRecipient, ())
35
+ }
36
+
37
+ // ============================================================================
38
+ // Test Setup
39
+ // ============================================================================
40
+
41
+ pub struct ChainSetup<'a> {
42
+ pub eid: u32,
43
+ pub owner: Address,
44
+ pub native_token: Address,
45
+ pub zro_token: Address,
46
+ pub oft_token: Address,
47
+ pub endpoint: EndpointV2Client<'a>,
48
+ pub sml: SimpleMessageLibClient<'a>,
49
+ pub oft: OFTStdClient<'a>,
50
+ pub fee_collector: Address,
51
+ }
52
+
53
+ pub struct TestSetup<'a> {
54
+ pub env: Env,
55
+ pub chain_a: ChainSetup<'a>,
56
+ pub chain_b: ChainSetup<'a>,
57
+ }
58
+
59
+ fn setup_chain<'a>(env: &Env) -> ChainSetup<'a> {
60
+ let owner = Address::generate(env);
61
+
62
+ // Create native token FIRST - this must match the endpoint's NATIVE_TOKEN constant
63
+ let sac = env.register_stellar_asset_contract_v2(owner.clone());
64
+ let native_token = sac.address();
65
+
66
+ // Generate fee_collector AFTER native_token to not affect the address derivation
67
+ let fee_collector = Address::generate(env);
68
+
69
+ // Create ZRO token
70
+ let zro_sac = env.register_stellar_asset_contract_v2(owner.clone());
71
+ let zro_token = zro_sac.address();
72
+
73
+ // Create OFT token
74
+ let oft_sac = env.register_stellar_asset_contract_v2(owner.clone());
75
+ let oft_token = oft_sac.address();
76
+
77
+ let endpoint_address = env.register(EndpointV2, (&owner,));
78
+ let fee_recipient = Address::generate(env);
79
+ let sml_address = env.register(SimpleMessageLib, (&owner, &endpoint_address, &fee_recipient));
80
+ let delegate: Option<Address> = Some(owner.clone());
81
+ let shared_decimals: u32 = 6; // Default shared decimals
82
+ let mode = OFTMode::MintBurn;
83
+ let oft_address = env.register(OFTStd, (&oft_token, &owner, &endpoint_address, &delegate, &shared_decimals, &mode));
84
+
85
+ let endpoint = EndpointV2Client::new(env, &endpoint_address);
86
+ let sml = SimpleMessageLibClient::new(env, &sml_address);
87
+ let oft = OFTStdClient::new(env, &oft_address);
88
+
89
+ // Set ZRO token in endpoint
90
+ env.mock_auths(&[MockAuth {
91
+ address: &owner,
92
+ invoke: &MockAuthInvoke {
93
+ contract: &endpoint_address,
94
+ fn_name: "set_zro",
95
+ args: (&zro_token,).into_val(env),
96
+ sub_invokes: &[],
97
+ },
98
+ }]);
99
+ endpoint.set_zro(&zro_token);
100
+
101
+ register_library(env, &owner, &endpoint, &sml.address);
102
+
103
+ let eid = endpoint.eid();
104
+ ChainSetup { eid, owner, native_token, zro_token, oft_token, endpoint, sml, oft, fee_collector }
105
+ }
106
+
107
+ pub fn setup<'a>() -> TestSetup<'a> {
108
+ let env = Env::default();
109
+ let chain_a = setup_chain(&env);
110
+ let chain_b = setup_chain(&env);
111
+
112
+ let chain_a_oft_token_decimals = TokenClient::new(&env, &chain_a.oft_token).decimals();
113
+ let chain_b_oft_token_decimals = TokenClient::new(&env, &chain_b.oft_token).decimals();
114
+
115
+ log!(&env, "endpoint_a: {:?}", chain_a.endpoint.address);
116
+ log!(&env, "native_token_a: {:?}", chain_a.native_token);
117
+ log!(&env, "oft_token_a: {:?}", chain_a.oft.token());
118
+ log!(&env, "oft_token_a decimals: {:?}", chain_a_oft_token_decimals);
119
+ log!(&env, "oft_a: {:?}", chain_a.oft.address);
120
+ log!(&env, "sml_a: {:?}", chain_a.sml.address);
121
+
122
+ log!(&env, "endpoint_b: {:?}", chain_b.endpoint.address);
123
+ log!(&env, "native_token_b: {:?}", chain_b.native_token);
124
+ log!(&env, "oft_token_b: {:?}", chain_b.oft.token());
125
+ log!(&env, "oft_token_b decimals: {:?}", chain_b_oft_token_decimals);
126
+ log!(&env, "oft_b: {:?}", chain_b.oft.address);
127
+ log!(&env, "sml_b: {:?}", chain_b.sml.address);
128
+
129
+ TestSetup { env, chain_a, chain_b }
130
+ }
131
+
132
+ pub fn wire_endpoint(env: &Env, chains: &[&ChainSetup<'_>]) {
133
+ for chain in chains {
134
+ for other_chain in chains {
135
+ if chain.endpoint.address == other_chain.endpoint.address {
136
+ continue;
137
+ }
138
+ set_default_send_library(env, &chain.owner, &chain.endpoint, other_chain.eid, &chain.sml.address);
139
+ set_default_receive_library(env, &chain.owner, &chain.endpoint, other_chain.eid, &chain.sml.address);
140
+ }
141
+ }
142
+ }
143
+
144
+ pub fn wire_oft(env: &Env, chains: &[&ChainSetup<'_>]) {
145
+ for chain in chains {
146
+ for other_chain in chains {
147
+ if chain.endpoint.address == other_chain.endpoint.address {
148
+ continue;
149
+ }
150
+ set_peer(
151
+ env,
152
+ &chain.owner,
153
+ &chain.oft,
154
+ other_chain.eid,
155
+ &address_to_peer_bytes32(&other_chain.oft.address),
156
+ );
157
+ }
158
+ }
159
+ }
160
+
161
+ pub fn set_peer(env: &Env, owner: &Address, oft: &OFTStdClient<'_>, dst_eid: u32, peer: &BytesN<32>) {
162
+ env.mock_auths(&[MockAuth {
163
+ address: owner,
164
+ invoke: &MockAuthInvoke {
165
+ contract: &oft.address,
166
+ fn_name: "set_peer",
167
+ args: (&dst_eid, &Some(peer.clone())).into_val(env),
168
+ sub_invokes: &[],
169
+ },
170
+ }]);
171
+ oapp::oapp_core::OAppCoreClient::new(env, &oft.address).set_peer(&dst_eid, &Some(peer.clone()));
172
+ }
173
+
174
+ pub fn register_library(env: &Env, owner: &Address, endpoint: &EndpointV2Client<'_>, lib: &Address) {
175
+ env.mock_auths(&[MockAuth {
176
+ address: owner,
177
+ invoke: &MockAuthInvoke {
178
+ contract: &endpoint.address,
179
+ fn_name: "register_library",
180
+ args: (lib,).into_val(env),
181
+ sub_invokes: &[],
182
+ },
183
+ }]);
184
+ endpoint.register_library(lib);
185
+ }
186
+
187
+ pub fn set_default_send_library(
188
+ env: &Env,
189
+ owner: &Address,
190
+ endpoint: &EndpointV2Client<'_>,
191
+ dst_eid: u32,
192
+ lib: &Address,
193
+ ) {
194
+ env.mock_auths(&[MockAuth {
195
+ address: owner,
196
+ invoke: &MockAuthInvoke {
197
+ contract: &endpoint.address,
198
+ fn_name: "set_default_send_library",
199
+ args: (&dst_eid, lib).into_val(env),
200
+ sub_invokes: &[],
201
+ },
202
+ }]);
203
+ endpoint.set_default_send_library(&dst_eid, lib);
204
+ }
205
+
206
+ pub fn set_default_receive_library(
207
+ env: &Env,
208
+ owner: &Address,
209
+ endpoint: &EndpointV2Client<'_>,
210
+ src_eid: u32,
211
+ lib: &Address,
212
+ ) {
213
+ env.mock_auths(&[MockAuth {
214
+ address: owner,
215
+ invoke: &MockAuthInvoke {
216
+ contract: &endpoint.address,
217
+ fn_name: "set_default_receive_library",
218
+ args: (&src_eid, lib, &0u64).into_val(env),
219
+ sub_invokes: &[],
220
+ },
221
+ }]);
222
+ endpoint.set_default_receive_library(&src_eid, lib, &0u64);
223
+ }
224
+
225
+ pub fn decode_packet(env: &Env, encoded_packet: &soroban_sdk::Bytes) -> endpoint_v2::OutboundPacket {
226
+ use message_lib_common::packet_codec_v1::*;
227
+ use utils::buffer_reader::BufferReader;
228
+
229
+ let header = decode_packet_header(env, &encoded_packet.slice(0..HEADER_LENGTH));
230
+ let payload = encoded_packet.slice(HEADER_LENGTH..);
231
+
232
+ let mut payload_reader = BufferReader::new(&payload);
233
+ let guid = payload_reader.read_bytes_n::<32>();
234
+ let message = payload_reader.read_bytes_until_end();
235
+
236
+ endpoint_v2::OutboundPacket {
237
+ nonce: header.nonce,
238
+ src_eid: header.src_eid,
239
+ sender: peer_bytes32_to_address(env, &header.sender),
240
+ dst_eid: header.dst_eid,
241
+ receiver: header.receiver,
242
+ guid,
243
+ message,
244
+ }
245
+ }
@@ -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
+ };