@layerzerolabs/protocol-stellar-v2 0.2.12 → 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
@@ -197,7 +197,6 @@ describe('OFT E2E Testing with SAC', async () => {
197
197
  { contract: CONTRACT_ADDRESSES.executorHelper, fn_name: 'native_drop_and_execute' },
198
198
  { contract: CONTRACT_ADDRESSES.executorHelper, fn_name: 'execute' },
199
199
  { contract: CONTRACT_ADDRESSES.executorHelper, fn_name: 'compose' },
200
- { contract: CONTRACT_ADDRESSES.executorHelper, fn_name: 'native_drop' },
201
200
  ];
202
201
 
203
202
  executorClient = await deployContract<ExecutorClient>(
@@ -286,7 +285,7 @@ describe('OFT E2E Testing with SAC', async () => {
286
285
  endpoint: CONTRACT_ADDRESSES.endpointV2,
287
286
  delegate: DEFAULT_DEPLOYER.publicKey(),
288
287
  shared_decimals: SHARED_DECIMALS,
289
- is_lock_unlock: true, // Lock/Unlock mode
288
+ mode: { tag: 'LockUnlock' }, // Lock/Unlock mode
290
289
  },
291
290
  DEFAULT_DEPLOYER,
292
291
  );
@@ -295,8 +294,8 @@ describe('OFT E2E Testing with SAC', async () => {
295
294
  console.log('✅ Lock/Unlock OFT deployed:', CONTRACT_ADDRESSES.lockUnlockOft);
296
295
 
297
296
  // Verify it's in lock/unlock mode
298
- const { result: isLockUnlock } = await lockUnlockOftClient.is_lock_unlock();
299
- expect(isLockUnlock).toBe(true);
297
+ const { result: mode } = await lockUnlockOftClient.mode();
298
+ expect(mode).toEqual({ tag: 'LockUnlock' });
300
299
  });
301
300
 
302
301
  it('Deploy Mint/Burn OFT', async () => {
@@ -309,7 +308,7 @@ describe('OFT E2E Testing with SAC', async () => {
309
308
  endpoint: CONTRACT_ADDRESSES.endpointV2,
310
309
  delegate: DEFAULT_DEPLOYER.publicKey(),
311
310
  shared_decimals: SHARED_DECIMALS,
312
- is_lock_unlock: false, // Mint/Burn mode
311
+ mode: { tag: 'MintBurn' }, // Mint/Burn mode
313
312
  },
314
313
  DEFAULT_DEPLOYER,
315
314
  );
@@ -318,8 +317,8 @@ describe('OFT E2E Testing with SAC', async () => {
318
317
  console.log('✅ Mint/Burn OFT deployed:', CONTRACT_ADDRESSES.mintBurnOft);
319
318
 
320
319
  // Verify it's in mint/burn mode
321
- const { result: isLockUnlock } = await mintBurnOftClient.is_lock_unlock();
322
- expect(isLockUnlock).toBe(false);
320
+ const { result: mode } = await mintBurnOftClient.mode();
321
+ expect(mode).toEqual({ tag: 'MintBurn' });
323
322
  });
324
323
 
325
324
  it('Verify all contracts deployed', () => {
@@ -594,15 +593,9 @@ describe('OFT E2E Testing with SAC', async () => {
594
593
  src_eid: EID,
595
594
  };
596
595
 
597
- // Use native_drop_and_execute with empty native_drop_params
598
- const assembledTx = await executorHelperClient.native_drop_and_execute({
596
+ const assembledTx = await executorHelperClient.execute({
599
597
  executor: CONTRACT_ADDRESSES.executor,
600
- admin: EXECUTOR_ADMIN.publicKey(),
601
- origin,
602
- dst_eid: EID,
603
- oapp: CONTRACT_ADDRESSES.mintBurnOft,
604
- native_drop_params: [],
605
- execute_params: {
598
+ params: {
606
599
  extra_data: Buffer.from([]),
607
600
  gas_limit: 0n,
608
601
  guid,
@@ -611,6 +604,7 @@ describe('OFT E2E Testing with SAC', async () => {
611
604
  receiver: CONTRACT_ADDRESSES.mintBurnOft,
612
605
  value: 0n,
613
606
  },
607
+ value_payer: EXECUTOR_ADMIN.publicKey(),
614
608
  });
615
609
 
616
610
  // Sign the Executor's auth entries
@@ -770,15 +764,9 @@ describe('OFT E2E Testing with SAC', async () => {
770
764
  src_eid: EID,
771
765
  };
772
766
 
773
- // Use native_drop_and_execute with empty native_drop_params
774
- const assembledTx = await executorHelperClient.native_drop_and_execute({
767
+ const assembledTx = await executorHelperClient.execute({
775
768
  executor: CONTRACT_ADDRESSES.executor,
776
- admin: EXECUTOR_ADMIN.publicKey(),
777
- origin,
778
- dst_eid: EID,
779
- oapp: CONTRACT_ADDRESSES.lockUnlockOft,
780
- native_drop_params: [],
781
- execute_params: {
769
+ params: {
782
770
  extra_data: Buffer.from([]),
783
771
  gas_limit: 0n,
784
772
  guid,
@@ -787,6 +775,7 @@ describe('OFT E2E Testing with SAC', async () => {
787
775
  receiver: CONTRACT_ADDRESSES.lockUnlockOft,
788
776
  value: 0n,
789
777
  },
778
+ value_payer: EXECUTOR_ADMIN.publicKey(),
790
779
  });
791
780
 
792
781
  // Sign the Executor's auth entries
@@ -0,0 +1,169 @@
1
+ import type { Option, u32 } from '@stellar/stellar-sdk/contract';
2
+ import {
3
+ AssembledTransaction,
4
+ Client as ContractClient,
5
+ ClientOptions as ContractClientOptions,
6
+ MethodOptions,
7
+ Spec as ContractSpec,
8
+ } from '@stellar/stellar-sdk/contract';
9
+ import { Buffer } from 'buffer';
10
+ export * from '@stellar/stellar-sdk';
11
+ export * as contract from '@stellar/stellar-sdk/contract';
12
+ export * as rpc from '@stellar/stellar-sdk/rpc';
13
+
14
+ if (typeof window !== 'undefined') {
15
+ //@ts-ignore Buffer exists
16
+ window.Buffer = window.Buffer || Buffer;
17
+ }
18
+
19
+ export const BufferReaderError = {
20
+ 1000: { message: 'InvalidLength' },
21
+ 1001: { message: 'InvalidAddressPayload' },
22
+ };
23
+
24
+ export const BufferWriterError = {
25
+ 1100: { message: 'InvalidAddressPayload' },
26
+ };
27
+
28
+ export const TtlError = {
29
+ 1200: { message: 'InvalidTtlConfig' },
30
+ 1201: { message: 'TtlConfigFrozen' },
31
+ 1202: { message: 'TtlConfigAlreadyFrozen' },
32
+ };
33
+
34
+ export const OwnableError = {
35
+ 1300: { message: 'OwnerAlreadySet' },
36
+ 1301: { message: 'OwnerNotSet' },
37
+ };
38
+
39
+ export const BytesExtError = {
40
+ 1400: { message: 'LengthMismatch' },
41
+ };
42
+
43
+ export const UpgradeableError = {
44
+ 1500: { message: 'MigrationNotAllowed' },
45
+ };
46
+
47
+ export type DefaultOwnableStorage = { tag: 'Owner'; values: void };
48
+
49
+ /**
50
+ * A pair of TTL values: threshold (when to trigger extension) and extend_to (target TTL).
51
+ */
52
+ export interface TtlConfig {
53
+ /**
54
+ * Target TTL after extension (in ledgers).
55
+ */
56
+ extend_to: u32;
57
+ /**
58
+ * TTL threshold that triggers extension (in ledgers).
59
+ */
60
+ threshold: u32;
61
+ }
62
+
63
+ export type TtlConfigStorage =
64
+ | { tag: 'Frozen'; values: void }
65
+ | { tag: 'Instance'; values: void }
66
+ | { tag: 'Persistent'; values: void };
67
+
68
+ export type UpgradeableStorage = { tag: 'Migrating'; values: void };
69
+
70
+ export interface Client {
71
+ /**
72
+ * Construct and simulate a owner transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
73
+ */
74
+ owner: (options?: MethodOptions) => Promise<AssembledTransaction<Option<string>>>;
75
+
76
+ /**
77
+ * Construct and simulate a transfer_ownership transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
78
+ */
79
+ transfer_ownership: (
80
+ { new_owner }: { new_owner: string },
81
+ options?: MethodOptions,
82
+ ) => Promise<AssembledTransaction<null>>;
83
+
84
+ /**
85
+ * Construct and simulate a renounce_ownership transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
86
+ */
87
+ renounce_ownership: (options?: MethodOptions) => Promise<AssembledTransaction<null>>;
88
+
89
+ /**
90
+ * Construct and simulate a upgrade transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
91
+ */
92
+ upgrade: (
93
+ { new_wasm_hash }: { new_wasm_hash: Buffer },
94
+ options?: MethodOptions,
95
+ ) => Promise<AssembledTransaction<null>>;
96
+
97
+ /**
98
+ * Construct and simulate a migrate transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
99
+ */
100
+ migrate: (
101
+ { migration_data }: { migration_data: MigrationData },
102
+ options?: MethodOptions,
103
+ ) => Promise<AssembledTransaction<null>>;
104
+
105
+ /**
106
+ * Construct and simulate a counter transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
107
+ */
108
+ counter: (options?: MethodOptions) => Promise<AssembledTransaction<u32>>;
109
+
110
+ /**
111
+ * Construct and simulate a counter2 transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
112
+ */
113
+ counter2: (options?: MethodOptions) => Promise<AssembledTransaction<u32>>;
114
+ }
115
+ export class Client extends ContractClient {
116
+ static async deploy<T = Client>(
117
+ /** Options for initializing a Client as well as for calling a method, with extras specific to deploying. */
118
+ options: MethodOptions &
119
+ Omit<ContractClientOptions, 'contractId'> & {
120
+ /** The hash of the Wasm blob, which must already be installed on-chain. */
121
+ wasmHash: Buffer | string;
122
+ /** Salt used to generate the contract's ID. Passed through to {@link Operation.createCustomContract}. Default: random. */
123
+ salt?: Buffer | Uint8Array;
124
+ /** The format used to decode `wasmHash`, if it's provided as a string. */
125
+ format?: 'hex' | 'base64';
126
+ },
127
+ ): Promise<AssembledTransaction<T>> {
128
+ return ContractClient.deploy(null, options);
129
+ }
130
+ constructor(public readonly options: ContractClientOptions) {
131
+ super(
132
+ new ContractSpec([
133
+ 'AAAAAAAAAAAAAAAFb3duZXIAAAAAAAAAAAAAAQAAA+gAAAAT',
134
+ 'AAAAAAAAAAAAAAASdHJhbnNmZXJfb3duZXJzaGlwAAAAAAABAAAAAAAAAAluZXdfb3duZXIAAAAAAAATAAAAAA==',
135
+ 'AAAAAAAAAAAAAAAScmVub3VuY2Vfb3duZXJzaGlwAAAAAAAAAAAAAA==',
136
+ 'AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAAA',
137
+ 'AAAAAAAAAAAAAAAHbWlncmF0ZQAAAAABAAAAAAAAAA5taWdyYXRpb25fZGF0YQAAAAAH0AAAAA1NaWdyYXRpb25EYXRhAAAAAAAAAA==',
138
+ 'AAAAAAAAAAAAAAAHY291bnRlcgAAAAAAAAAAAQAAAAQ=',
139
+ 'AAAAAAAAAAAAAAAIY291bnRlcjIAAAAAAAAAAQAAAAQ=',
140
+ 'AAAABAAAAAAAAAAAAAAAEUJ1ZmZlclJlYWRlckVycm9yAAAAAAAAAgAAAAAAAAANSW52YWxpZExlbmd0aAAAAAAAA+gAAAAAAAAAFUludmFsaWRBZGRyZXNzUGF5bG9hZAAAAAAAA+k=',
141
+ 'AAAABAAAAAAAAAAAAAAAEUJ1ZmZlcldyaXRlckVycm9yAAAAAAAAAQAAAAAAAAAVSW52YWxpZEFkZHJlc3NQYXlsb2FkAAAAAAAETA==',
142
+ 'AAAABAAAAAAAAAAAAAAACFR0bEVycm9yAAAAAwAAAAAAAAAQSW52YWxpZFR0bENvbmZpZwAABLAAAAAAAAAAD1R0bENvbmZpZ0Zyb3plbgAAAASxAAAAAAAAABZUdGxDb25maWdBbHJlYWR5RnJvemVuAAAAAASy',
143
+ 'AAAABAAAAAAAAAAAAAAADE93bmFibGVFcnJvcgAAAAIAAAAAAAAAD093bmVyQWxyZWFkeVNldAAAAAUUAAAAAAAAAAtPd25lck5vdFNldAAAAAUV',
144
+ 'AAAABAAAAAAAAAAAAAAADUJ5dGVzRXh0RXJyb3IAAAAAAAABAAAAAAAAAA5MZW5ndGhNaXNtYXRjaAAAAAAFeA==',
145
+ 'AAAABAAAAAAAAAAAAAAAEFVwZ3JhZGVhYmxlRXJyb3IAAAABAAAAAAAAABNNaWdyYXRpb25Ob3RBbGxvd2VkAAAABdw=',
146
+ 'AAAABQAAACxFdmVudCBlbWl0dGVkIHdoZW4gb3duZXJzaGlwIGlzIHRyYW5zZmVycmVkLgAAAAAAAAAUT3duZXJzaGlwVHJhbnNmZXJyZWQAAAABAAAAFE93bmVyc2hpcFRyYW5zZmVycmVkAAAAAgAAAAAAAAAJb2xkX293bmVyAAAAAAAAEwAAAAAAAAAAAAAACW5ld19vd25lcgAAAAAAABMAAAAAAAAAAg==',
147
+ 'AAAABQAAACpFdmVudCBlbWl0dGVkIHdoZW4gb3duZXJzaGlwIGlzIHJlbm91bmNlZC4AAAAAAAAAAAAST3duZXJzaGlwUmVub3VuY2VkAAAAAAABAAAAEk93bmVyc2hpcFJlbm91bmNlZAAAAAAAAQAAAAAAAAAJb2xkX293bmVyAAAAAAAAEwAAAAAAAAAC',
148
+ 'AAAAAgAAAAAAAAAAAAAAFURlZmF1bHRPd25hYmxlU3RvcmFnZQAAAAAAAAEAAAAAAAAAAAAAAAVPd25lcgAAAA==',
149
+ 'AAAAAQAAAFdBIHBhaXIgb2YgVFRMIHZhbHVlczogdGhyZXNob2xkICh3aGVuIHRvIHRyaWdnZXIgZXh0ZW5zaW9uKSBhbmQgZXh0ZW5kX3RvICh0YXJnZXQgVFRMKS4AAAAAAAAAAAlUdGxDb25maWcAAAAAAAACAAAAKFRhcmdldCBUVEwgYWZ0ZXIgZXh0ZW5zaW9uIChpbiBsZWRnZXJzKS4AAAAJZXh0ZW5kX3RvAAAAAAAABAAAADNUVEwgdGhyZXNob2xkIHRoYXQgdHJpZ2dlcnMgZXh0ZW5zaW9uIChpbiBsZWRnZXJzKS4AAAAACXRocmVzaG9sZAAAAAAAAAQ=',
150
+ 'AAAAAgAAAAAAAAAAAAAAEFR0bENvbmZpZ1N0b3JhZ2UAAAADAAAAAAAAAAAAAAAGRnJvemVuAAAAAAAAAAAAAAAAAAhJbnN0YW5jZQAAAAAAAAAAAAAAClBlcnNpc3RlbnQAAA==',
151
+ 'AAAABQAAACdFdmVudCBlbWl0dGVkIHdoZW4gVFRMIGNvbmZpZ3MgYXJlIHNldC4AAAAAAAAAAA1UdGxDb25maWdzU2V0AAAAAAAAAQAAAA1UdGxDb25maWdzU2V0AAAAAAAAAgAAAAAAAAAIaW5zdGFuY2UAAAPoAAAH0AAAAAlUdGxDb25maWcAAAAAAAAAAAAAAAAAAApwZXJzaXN0ZW50AAAAAAPoAAAH0AAAAAlUdGxDb25maWcAAAAAAAAAAAAAAg==',
152
+ 'AAAABQAAACpFdmVudCBlbWl0dGVkIHdoZW4gVFRMIGNvbmZpZ3MgYXJlIGZyb3plbi4AAAAAAAAAAAAQVHRsQ29uZmlnc0Zyb3plbgAAAAEAAAAQVHRsQ29uZmlnc0Zyb3plbgAAAAAAAAAC',
153
+ 'AAAAAgAAAAAAAAAAAAAAElVwZ3JhZGVhYmxlU3RvcmFnZQAAAAAAAQAAAAAAAAAAAAAACU1pZ3JhdGluZwAAAA==',
154
+ ]),
155
+ options,
156
+ );
157
+ }
158
+ public readonly fromJSON = {
159
+ owner: this.txFromJSON<Option<string>>,
160
+ transfer_ownership: this.txFromJSON<null>,
161
+ renounce_ownership: this.txFromJSON<null>,
162
+ upgrade: this.txFromJSON<null>,
163
+ migrate: this.txFromJSON<null>,
164
+ counter: this.txFromJSON<u32>,
165
+ counter2: this.txFromJSON<u32>,
166
+ };
167
+ }
168
+
169
+ export type MigrationData = void;
@@ -0,0 +1,309 @@
1
+ import { Address, authorizeEntry, Keypair, xdr } from '@stellar/stellar-sdk';
2
+ import { assembleTransaction } from '@stellar/stellar-sdk/rpc';
3
+ import * as rpc from '@stellar/stellar-sdk/rpc';
4
+ import { readFileSync } from 'fs';
5
+ import path from 'path';
6
+ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
7
+
8
+ import { getFullyQualifiedRepoRootPath } from '@layerzerolabs/common-node-utils';
9
+
10
+ import { Client as UpgraderClient } from '../src/generated/upgrader';
11
+ import { DEFAULT_DEPLOYER, NETWORK_PASSPHRASE, RPC_URL } from './suites/constants';
12
+ import { deployContract, uploadWasm } from './suites/deploy';
13
+ import { startStellarLocalnet, stopStellarLocalnet } from './suites/localnet';
14
+ import { Client as TestUpgradeableContractClient } from './suites/testUpgradeable';
15
+
16
+ let upgraderClient: UpgraderClient;
17
+ let testContractClient: TestUpgradeableContractClient;
18
+ let testContractAddress: string;
19
+
20
+ // Test data paths
21
+ let TEST_CONTRACT_V1_WASM_PATH: string;
22
+ let TEST_CONTRACT_V2_WASM_PATH: string;
23
+
24
+ describe('Upgrader Contract Testing', async () => {
25
+ const repoRoot = await getFullyQualifiedRepoRootPath();
26
+ const upgraderWasmDir = path.join(
27
+ repoRoot,
28
+ 'contracts',
29
+ 'protocol',
30
+ 'stellar',
31
+ 'target',
32
+ 'wasm32v1-none',
33
+ 'release',
34
+ );
35
+ const testDataDir = path.join(
36
+ repoRoot,
37
+ 'contracts',
38
+ 'protocol',
39
+ 'stellar',
40
+ 'contracts',
41
+ 'upgrader',
42
+ 'src',
43
+ 'tests',
44
+ 'test_data',
45
+ );
46
+
47
+ const UPGRADER_WASM_PATH = path.join(upgraderWasmDir, 'upgrader.wasm');
48
+ TEST_CONTRACT_V1_WASM_PATH = path.join(testDataDir, 'test_upgradeable_contract1.wasm');
49
+ TEST_CONTRACT_V2_WASM_PATH = path.join(testDataDir, 'test_upgradeable_contract2.wasm');
50
+
51
+ beforeAll(async () => {
52
+ await startStellarLocalnet();
53
+ }, 120000); // 2 minute timeout for setup
54
+
55
+ afterAll(async () => {
56
+ await stopStellarLocalnet();
57
+ });
58
+
59
+ describe('Contract Deployments', () => {
60
+ it('Deploy Upgrader Contract', async () => {
61
+ // Deploy upgrader contract using the helper (no constructor args needed)
62
+ upgraderClient = await deployContract<UpgraderClient>(
63
+ UpgraderClient,
64
+ UPGRADER_WASM_PATH,
65
+ undefined,
66
+ DEFAULT_DEPLOYER,
67
+ );
68
+
69
+ console.log('✅ Upgrader deployed at:', upgraderClient.options.contractId);
70
+ expect(upgraderClient.options.contractId).toBeDefined();
71
+ });
72
+
73
+ it('Deploy Test Upgradeable Contract V1', async () => {
74
+ console.log('📖 Reading Test Contract V1 WASM file from:', TEST_CONTRACT_V1_WASM_PATH);
75
+
76
+ const server = new rpc.Server(RPC_URL, { allowHttp: true });
77
+
78
+ // Read and upload WASM
79
+ const wasmBuffer = readFileSync(TEST_CONTRACT_V1_WASM_PATH);
80
+ const wasmHash = await uploadWasm(wasmBuffer, DEFAULT_DEPLOYER, server);
81
+ console.log('✅ Test Contract V1 WASM uploaded, hash:', wasmHash);
82
+
83
+ // Deploy test contract V1 with owner as constructor arg
84
+ console.log('🚀 Deploying Test Contract V1...');
85
+ const { TransactionBuilder, Operation, StrKey, Address } = await import(
86
+ '@stellar/stellar-sdk'
87
+ );
88
+
89
+ const account = await server.getAccount(DEFAULT_DEPLOYER.publicKey());
90
+ const salt = Buffer.from(Keypair.random().rawPublicKey());
91
+
92
+ // Create contract from WASM with constructor args
93
+ const wasmHashBuffer = Buffer.from(wasmHash, 'hex');
94
+
95
+ // Encode constructor args: owner (Address)
96
+ const ownerScVal = Address.fromString(DEFAULT_DEPLOYER.publicKey()).toScVal();
97
+
98
+ const createContractTx = new TransactionBuilder(account, {
99
+ fee: '100000',
100
+ networkPassphrase: NETWORK_PASSPHRASE,
101
+ })
102
+ .addOperation(
103
+ Operation.createCustomContract({
104
+ address: Address.fromString(DEFAULT_DEPLOYER.publicKey()),
105
+ wasmHash: wasmHashBuffer,
106
+ salt: salt,
107
+ constructorArgs: [ownerScVal],
108
+ }),
109
+ )
110
+ .setTimeout(30)
111
+ .build();
112
+
113
+ // Simulate to get the contract ID
114
+ const simulated = await server.simulateTransaction(createContractTx);
115
+ const preparedTx = rpc.assembleTransaction(createContractTx, simulated).build();
116
+ preparedTx.sign(DEFAULT_DEPLOYER);
117
+
118
+ const sendResult = await server.sendTransaction(preparedTx);
119
+ if (sendResult.status !== 'PENDING') {
120
+ throw new Error(`Transaction failed: ${JSON.stringify(sendResult)}`);
121
+ }
122
+
123
+ const txResult = await server.pollTransaction(sendResult.hash);
124
+ if (txResult.status !== 'SUCCESS') {
125
+ throw new Error(`Transaction not successful: ${JSON.stringify(txResult)}`);
126
+ }
127
+
128
+ // Extract contract address from the transaction result
129
+ const returnValue = txResult.returnValue;
130
+ if (!returnValue) {
131
+ throw new Error('No return value from contract creation');
132
+ }
133
+
134
+ // The return value is an Address ScVal, decode it
135
+ const contractIdHash = returnValue.address().contractId();
136
+ testContractAddress = StrKey.encodeContract(
137
+ Buffer.from(contractIdHash as unknown as Uint8Array),
138
+ );
139
+
140
+ // Create client for the deployed contract
141
+ testContractClient = new TestUpgradeableContractClient({
142
+ contractId: testContractAddress,
143
+ publicKey: DEFAULT_DEPLOYER.publicKey(),
144
+ signTransaction: async (tx: string) => {
145
+ const transaction = TransactionBuilder.fromXDR(tx, NETWORK_PASSPHRASE);
146
+ transaction.sign(DEFAULT_DEPLOYER);
147
+ return {
148
+ signedTxXdr: transaction.toXDR(),
149
+ signerAddress: DEFAULT_DEPLOYER.publicKey(),
150
+ };
151
+ },
152
+ rpcUrl: RPC_URL,
153
+ networkPassphrase: NETWORK_PASSPHRASE,
154
+ allowHttp: true,
155
+ });
156
+
157
+ console.log('✅ Test Contract V1 deployed at:', testContractAddress);
158
+ expect(testContractAddress).toBeDefined();
159
+ });
160
+
161
+ it('Verify Test Contract V1 Counter', async () => {
162
+ // Call counter() on V1 contract, should return 1
163
+ const { result } = await testContractClient.counter();
164
+ console.log('✅ Test Contract V1 counter value:', result);
165
+ expect(result).toBe(1);
166
+ });
167
+ });
168
+
169
+ describe('Upgrade Workflow', () => {
170
+ let newWasmHash: string;
171
+
172
+ it('Upload Test Contract V2 WASM', async () => {
173
+ console.log('📖 Reading Test Contract V2 WASM file from:', TEST_CONTRACT_V2_WASM_PATH);
174
+
175
+ const server = new rpc.Server(RPC_URL, { allowHttp: true });
176
+
177
+ // Read and upload WASM for V2
178
+ const wasmBuffer = readFileSync(TEST_CONTRACT_V2_WASM_PATH);
179
+ newWasmHash = await uploadWasm(wasmBuffer, DEFAULT_DEPLOYER, server);
180
+ console.log('✅ Test Contract V2 WASM uploaded, hash:', newWasmHash);
181
+ expect(newWasmHash).toBeDefined();
182
+ });
183
+
184
+ it('Test Upgrader Contract Can Be Called', async () => {
185
+ console.log('🔄 Testing upgrader contract call...');
186
+ console.log(' Contract address:', testContractAddress);
187
+ console.log(' New WASM hash:', newWasmHash);
188
+
189
+ // NOTE: Using Option 2 - Hybrid approach with generated client
190
+ // Build with generated client, then manually simulate with authMode, then inject back
191
+
192
+ const voidScVal = xdr.ScVal.scvVoid();
193
+ const server = new rpc.Server(RPC_URL, { allowHttp: true });
194
+
195
+ // 1. Build transaction using generated client (don't auto-simulate)
196
+ const assembledTx = await upgraderClient.upgrade_and_migrate(
197
+ {
198
+ contract_address: testContractAddress,
199
+ wasm_hash: Buffer.from(newWasmHash, 'hex'),
200
+ migration_data: [voidScVal],
201
+ },
202
+ {
203
+ simulate: false, // Don't simulate yet
204
+ },
205
+ );
206
+
207
+ console.log('✅ Transaction built with generated client');
208
+
209
+ // Build the transaction from the raw builder
210
+ const rawTx = assembledTx.raw!.build();
211
+
212
+ console.log('✅ Raw transaction built');
213
+
214
+ // 2. Manually simulate with record_allow_nonroot authMode
215
+ const sim = await server.simulateTransaction(
216
+ rawTx,
217
+ undefined, // addlResources
218
+ 'record_allow_nonroot', // ← This enables non-root auth recording!
219
+ );
220
+
221
+ if (rpc.Api.isSimulationError(sim)) {
222
+ throw new Error(`Simulation failed: ${JSON.stringify(sim)}`);
223
+ }
224
+
225
+ console.log('✅ Transaction simulated with record_allow_nonroot');
226
+ console.log(' Auth entries returned:', sim.result?.auth?.length ?? 0);
227
+
228
+ // 3. Sign auth entries manually (high-level API doesn't see them after injection)
229
+ const latestLedger = sim.latestLedger;
230
+ const validUntilLedger = latestLedger + 100;
231
+
232
+ if (sim.result && sim.result.auth) {
233
+ sim.result.auth = await Promise.all(
234
+ sim.result.auth.map(async (entry) => {
235
+ // Source account credentials are already signed by tx envelope
236
+ if (
237
+ entry.credentials().switch() ===
238
+ xdr.SorobanCredentialsType.sorobanCredentialsSourceAccount()
239
+ ) {
240
+ console.log(' Skipping source account auth entry');
241
+ return entry;
242
+ }
243
+
244
+ // Address credentials need explicit signature
245
+ const addr = Address.fromScAddress(
246
+ entry.credentials().address().address(),
247
+ ).toString();
248
+
249
+ console.log(' Signing auth entry for address:', addr);
250
+
251
+ if (addr === DEFAULT_DEPLOYER.publicKey()) {
252
+ // Sign with owner's keypair
253
+ return authorizeEntry(
254
+ entry,
255
+ DEFAULT_DEPLOYER,
256
+ validUntilLedger,
257
+ NETWORK_PASSPHRASE,
258
+ );
259
+ }
260
+
261
+ throw new Error(`Unexpected auth signer needed: ${addr}`);
262
+ }),
263
+ );
264
+ console.log('✅ Auth entries signed');
265
+ }
266
+
267
+ // 4. Assemble final transaction with signed auth entries
268
+ const finalTxBuilder = assembleTransaction(rawTx, sim);
269
+ const finalTx = finalTxBuilder.build();
270
+
271
+ console.log('✅ Final transaction assembled');
272
+
273
+ // 5. Sign the transaction envelope
274
+ finalTx.sign(DEFAULT_DEPLOYER);
275
+
276
+ console.log('✅ Transaction envelope signed');
277
+
278
+ // 6. Send and poll
279
+ const sentResult = await server.sendTransaction(finalTx);
280
+
281
+ if (sentResult.status !== 'PENDING') {
282
+ throw new Error(`Transaction failed to send: ${JSON.stringify(sentResult)}`);
283
+ }
284
+
285
+ console.log('✅ Transaction sent, hash:', sentResult.hash);
286
+
287
+ const txResult = await server.pollTransaction(sentResult.hash);
288
+
289
+ console.log('✅ Upgrade transaction completed');
290
+ console.log(' Transaction status:', txResult.status);
291
+
292
+ expect(txResult.status).toBe('SUCCESS');
293
+ });
294
+
295
+ it('Verify Test Contract V2 Counter2 After Upgrade', async () => {
296
+ // After upgrade, the contract should have counter2() function that returns 2
297
+ const { result } = await testContractClient.counter2();
298
+ console.log('✅ Test Contract V2 counter2 value:', result);
299
+ expect(result).toBe(2);
300
+ });
301
+
302
+ it('Verify Test Contract V1 Counter Still Works After Upgrade', async () => {
303
+ // The original counter() should still be accessible and return 1
304
+ const { result } = await testContractClient.counter();
305
+ console.log('✅ Test Contract V2 counter value (from V1):', result);
306
+ expect(result).toBe(1);
307
+ });
308
+ });
309
+ });
@@ -31,6 +31,8 @@ export * from '@stellar/stellar-sdk'
31
31
  export * as contract from '@stellar/stellar-sdk/contract'
32
32
  export * as rpc from '@stellar/stellar-sdk/rpc'
33
33
 
34
+ export type MigrationData = void;
35
+
34
36
 
35
37
  "#
36
38
  }
@@ -45,13 +47,21 @@ fn main() -> Result<()> {
45
47
  // Configuration for each contract
46
48
  // Format: (wasm_filename, ts_filename)
47
49
  let contracts = vec![
50
+ // Protocol contracts
48
51
  ("endpoint_v2", "endpoint.ts"),
49
52
  ("simple_message_lib", "sml.ts"),
50
53
  ("blocked_message_lib", "bml.ts"),
51
54
  ("uln302", "uln302.ts"),
52
- ("counter", "counter.ts"),
55
+ ("upgrader", "upgrader.ts"),
56
+ // Worker contracts
57
+ ("dvn", "dvn.ts"),
58
+ ("dvn_fee_lib", "dvn_fee_lib.ts"),
53
59
  ("executor", "executor.ts"),
60
+ ("executor_fee_lib", "executor_fee_lib.ts"),
54
61
  ("executor_helper", "executor_helper.ts"),
62
+ ("price_feed", "price_feed.ts"),
63
+ // OApp contracts
64
+ ("counter", "counter.ts"),
55
65
  ("oft_std", "oft_std.ts"),
56
66
  // Add more contracts here as needed:
57
67
  ];