@layerzerolabs/protocol-stellar-v2 0.2.15 → 0.2.19

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 (262) hide show
  1. package/.turbo/turbo-build.log +365 -297
  2. package/.turbo/turbo-lint.log +142 -110
  3. package/.turbo/turbo-test.log +1273 -1222
  4. package/Cargo.lock +20 -5
  5. package/Cargo.toml +4 -1
  6. package/contracts/ERROR_SPEC.md +44 -0
  7. package/contracts/common-macros/src/auth.rs +113 -0
  8. package/contracts/common-macros/src/contract_ttl.rs +84 -0
  9. package/contracts/common-macros/src/lib.rs +181 -30
  10. package/contracts/common-macros/src/lz_contract.rs +83 -0
  11. package/contracts/common-macros/src/tests/{ownable.rs → auth.rs} +48 -15
  12. package/contracts/common-macros/src/tests/contract_ttl.rs +662 -0
  13. package/contracts/common-macros/src/tests/mod.rs +2 -2
  14. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_multisig_code.snap +20 -0
  15. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_ownable_code.snap +24 -0
  16. package/contracts/common-macros/src/tests/snapshots/{common_macros__tests__ownable__snapshot_only_owner_preserves_function_signature.snap → common_macros__tests__auth__snapshot_only_auth_preserves_function_signature.snap} +4 -4
  17. package/contracts/common-macros/src/tests/snapshots/{common_macros__tests__contract_impl__snapshot_generated_contract_impl_code.snap → common_macros__tests__contract_ttl__snapshot_generated_contractimpl_code.snap} +3 -3
  18. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contracttrait_code.snap +69 -0
  19. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +7 -21
  20. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +2 -2
  21. package/contracts/common-macros/src/ttl_configurable.rs +19 -34
  22. package/contracts/common-macros/src/ttl_extendable.rs +36 -0
  23. package/contracts/common-macros/src/upgradeable.rs +5 -5
  24. package/contracts/common-macros/src/utils.rs +9 -0
  25. package/contracts/endpoint-v2/src/constants.rs +4 -4
  26. package/contracts/endpoint-v2/src/endpoint_v2.rs +38 -40
  27. package/contracts/endpoint-v2/src/errors.rs +4 -3
  28. package/contracts/endpoint-v2/src/events.rs +1 -1
  29. package/contracts/endpoint-v2/src/message_lib_manager.rs +18 -5
  30. package/contracts/endpoint-v2/src/messaging_channel.rs +11 -1
  31. package/contracts/endpoint-v2/src/messaging_composer.rs +11 -1
  32. package/contracts/endpoint-v2/src/storage.rs +1 -1
  33. package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +3 -3
  34. package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +1 -1
  35. package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +2 -2
  36. package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +3 -3
  37. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +4 -4
  38. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +3 -3
  39. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +1 -1
  40. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +3 -3
  41. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +1 -1
  42. package/contracts/endpoint-v2/src/tests/messaging_channel/clear_payload.rs +4 -4
  43. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound.rs +1 -1
  44. package/contracts/layerzero-views/src/layerzero_view.rs +3 -6
  45. package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +2 -2
  46. package/contracts/macro-integration-tests/tests/runtime/ownable/{only_owner_guard.rs → only_auth_guard.rs} +1 -1
  47. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +1 -1
  48. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +1 -1
  49. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/mod.rs +0 -1
  50. package/contracts/macro-integration-tests/tests/ui/ownable/fail/{only_owner_missing_env.rs → only_auth_missing_env.rs} +3 -3
  51. package/contracts/macro-integration-tests/tests/ui/ownable/fail/{only_owner_missing_env.stderr → only_auth_missing_env.stderr} +4 -4
  52. package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +2 -3
  53. package/contracts/macro-integration-tests/tests/ui/ownable/pass/{only_owner_env_param_variants.rs → only_auth_env_param_variants.rs} +9 -9
  54. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/minimal_contract.rs +6 -6
  55. package/contracts/message-libs/message-lib-common/src/errors.rs +7 -2
  56. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/decode_packet_header.rs +3 -3
  57. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_lz_receive_option.rs +1 -2
  58. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_native_drop_option.rs +1 -2
  59. package/contracts/message-libs/message-lib-common/src/tests/worker_options/convert_legacy_options.rs +9 -9
  60. package/contracts/message-libs/message-lib-common/src/tests/worker_options/extract_type_3_options.rs +1 -1
  61. package/contracts/message-libs/message-lib-common/src/tests/worker_options/left_pad_to_bytes32.rs +1 -1
  62. package/contracts/message-libs/message-lib-common/src/tests/worker_options/split_worker_options.rs +2 -2
  63. package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +7 -9
  64. package/contracts/message-libs/treasury/src/errors.rs +2 -2
  65. package/contracts/message-libs/treasury/src/events.rs +1 -1
  66. package/contracts/message-libs/treasury/src/interfaces/zro_fee_lib.rs +2 -2
  67. package/contracts/message-libs/treasury/src/storage.rs +1 -1
  68. package/contracts/message-libs/treasury/src/tests/treasury_tests.rs +1 -1
  69. package/contracts/message-libs/treasury/src/treasury.rs +14 -16
  70. package/contracts/message-libs/uln-302/src/receive_uln.rs +13 -2
  71. package/contracts/message-libs/uln-302/src/send_uln.rs +24 -4
  72. package/contracts/message-libs/uln-302/src/uln302.rs +6 -24
  73. package/contracts/oapps/counter/Cargo.toml +14 -1
  74. package/contracts/oapps/counter/integration_tests/mod.rs +4 -1
  75. package/contracts/oapps/counter/integration_tests/{setup.rs → setup_sml.rs} +48 -80
  76. package/contracts/oapps/counter/integration_tests/setup_uln.rs +997 -0
  77. package/contracts/oapps/counter/integration_tests/signing.rs +62 -0
  78. package/contracts/oapps/counter/integration_tests/test_with_sml.rs +24 -55
  79. package/contracts/oapps/counter/integration_tests/test_with_uln.rs +314 -0
  80. package/contracts/oapps/counter/integration_tests/utils.rs +196 -53
  81. package/contracts/oapps/counter/src/counter.rs +67 -43
  82. package/contracts/oapps/counter/src/tests/mod.rs +0 -13
  83. package/contracts/oapps/counter/src/tests/test_counter.rs +5 -7
  84. package/contracts/oapps/oapp/src/errors.rs +5 -1
  85. package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +93 -78
  86. package/contracts/oapps/oapp/src/oapp_core.rs +36 -21
  87. package/contracts/oapps/oapp/src/oapp_options_type3.rs +48 -12
  88. package/contracts/oapps/oapp/src/oapp_receiver.rs +106 -41
  89. package/contracts/oapps/oapp/src/oapp_sender.rs +26 -34
  90. package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +9 -8
  91. package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +25 -17
  92. package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +7 -7
  93. package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +14 -15
  94. package/contracts/oapps/oapp-macros/src/generators.rs +128 -0
  95. package/contracts/oapps/oapp-macros/src/lib.rs +113 -56
  96. package/contracts/oapps/oft/Cargo.toml +10 -7
  97. package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_oft_fee.rs +3 -4
  98. package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_pausable.rs +2 -3
  99. package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_rate_limiter.rs +1 -1
  100. package/contracts/oapps/oft/integration-tests/mod.rs +1 -1
  101. package/contracts/oapps/oft/integration-tests/setup.rs +29 -110
  102. package/contracts/oapps/oft/integration-tests/utils.rs +254 -21
  103. package/contracts/oapps/oft/src/extensions/oft_fee.rs +13 -14
  104. package/contracts/oapps/oft/src/extensions/pausable.rs +4 -4
  105. package/contracts/oapps/oft/src/extensions/rate_limiter.rs +5 -5
  106. package/contracts/oapps/oft/src/lib.rs +11 -13
  107. package/contracts/oapps/oft/src/oft.rs +147 -225
  108. package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +9 -13
  109. package/contracts/oapps/oft/src/oft_types/mint_burn.rs +31 -14
  110. package/contracts/oapps/oft/src/oft_types/mod.rs +13 -0
  111. package/contracts/oapps/{oft-std → oft-core}/Cargo.toml +6 -4
  112. package/contracts/oapps/{oft-std → oft-core}/integration-tests/mod.rs +1 -1
  113. package/contracts/oapps/{oft-std → oft-core}/integration-tests/setup.rs +129 -30
  114. package/contracts/oapps/{oft → oft-core}/integration-tests/test_with_sml.rs +3 -3
  115. package/contracts/oapps/oft-core/integration-tests/utils.rs +201 -0
  116. package/contracts/oapps/oft-core/src/errors.rs +13 -0
  117. package/contracts/oapps/oft-core/src/lib.rs +18 -0
  118. package/contracts/oapps/oft-core/src/oft_core.rs +439 -0
  119. package/contracts/oapps/{oft → oft-core}/src/storage.rs +2 -0
  120. package/contracts/oapps/{oft → oft-core}/src/tests/mod.rs +0 -2
  121. package/contracts/oapps/{oft → oft-core}/src/tests/test_decimals.rs +2 -2
  122. package/contracts/oapps/{oft → oft-core}/src/tests/test_lz_receive.rs +7 -7
  123. package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_msg_codec.rs +4 -5
  124. package/contracts/oapps/{oft → oft-core}/src/tests/test_resolve_address.rs +3 -3
  125. package/contracts/oapps/{oft → oft-core}/src/tests/test_utils.rs +78 -37
  126. package/contracts/oapps/oft-core/src/types.rs +58 -0
  127. package/contracts/oapps/{oft → oft-core}/src/utils.rs +1 -1
  128. package/contracts/upgrader/src/lib.rs +4 -4
  129. package/contracts/utils/src/auth.rs +44 -0
  130. package/contracts/utils/src/errors.rs +31 -5
  131. package/contracts/utils/src/lib.rs +3 -0
  132. package/contracts/utils/src/multisig.rs +211 -0
  133. package/contracts/utils/src/ownable.rs +137 -13
  134. package/contracts/utils/src/tests/buffer_reader.rs +6 -6
  135. package/contracts/utils/src/tests/buffer_writer.rs +6 -6
  136. package/contracts/utils/src/tests/bytes_ext.rs +2 -4
  137. package/contracts/utils/src/tests/mod.rs +1 -0
  138. package/contracts/utils/src/tests/multisig.rs +731 -0
  139. package/contracts/utils/src/tests/option_ext.rs +2 -5
  140. package/contracts/utils/src/tests/ownable.rs +456 -7
  141. package/contracts/utils/src/tests/ttl_configurable.rs +27 -16
  142. package/contracts/utils/src/tests/upgradeable.rs +4 -2
  143. package/contracts/utils/src/ttl_configurable.rs +23 -8
  144. package/contracts/utils/src/ttl_extendable.rs +27 -0
  145. package/contracts/utils/src/upgradeable.rs +2 -0
  146. package/contracts/workers/dvn/Cargo.toml +1 -1
  147. package/contracts/workers/dvn/src/auth.rs +7 -7
  148. package/contracts/workers/dvn/src/dvn.rs +10 -38
  149. package/contracts/workers/dvn/src/errors.rs +0 -7
  150. package/contracts/workers/dvn/src/events.rs +1 -14
  151. package/contracts/workers/dvn/src/interfaces/dvn.rs +2 -2
  152. package/contracts/workers/dvn/src/interfaces/mod.rs +0 -2
  153. package/contracts/workers/dvn/src/storage.rs +3 -13
  154. package/contracts/workers/dvn/src/tests/auth.rs +4 -4
  155. package/contracts/workers/dvn/src/tests/dvn.rs +1 -2
  156. package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +7 -8
  157. package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +11 -8
  158. package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +11 -12
  159. package/contracts/workers/dvn/src/tests/setup.rs +5 -5
  160. package/contracts/workers/dvn-fee-lib/Cargo.toml +1 -1
  161. package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +3 -6
  162. package/contracts/workers/executor/src/auth.rs +80 -16
  163. package/contracts/workers/executor/src/executor.rs +5 -31
  164. package/contracts/workers/executor/src/storage.rs +2 -9
  165. package/contracts/workers/executor-fee-lib/Cargo.toml +1 -1
  166. package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +3 -6
  167. package/contracts/workers/executor-helper/Cargo.toml +1 -1
  168. package/contracts/workers/executor-helper/src/executor_helper.rs +53 -73
  169. package/contracts/workers/price-feed/Cargo.toml +1 -1
  170. package/contracts/workers/price-feed/src/price_feed.rs +7 -10
  171. package/contracts/workers/worker/src/errors.rs +4 -0
  172. package/contracts/workers/worker/src/tests/worker.rs +7 -6
  173. package/contracts/workers/worker/src/worker.rs +20 -16
  174. package/package.json +7 -5
  175. package/sdk/.turbo/turbo-build.log +1 -0
  176. package/sdk/.turbo/turbo-test.log +1019 -0
  177. package/sdk/dist/generated/bml.d.ts +95 -8
  178. package/sdk/dist/generated/bml.js +95 -36
  179. package/sdk/dist/generated/counter.d.ts +289 -44
  180. package/sdk/dist/generated/counter.js +119 -49
  181. package/sdk/dist/generated/dvn.d.ts +312 -229
  182. package/sdk/dist/generated/dvn.js +144 -83
  183. package/sdk/dist/generated/dvn_fee_lib.d.ts +258 -63
  184. package/sdk/dist/generated/dvn_fee_lib.js +95 -26
  185. package/sdk/dist/generated/endpoint.d.ts +219 -24
  186. package/sdk/dist/generated/endpoint.js +108 -41
  187. package/sdk/dist/generated/executor.d.ts +239 -87
  188. package/sdk/dist/generated/executor.js +135 -63
  189. package/sdk/dist/generated/executor_fee_lib.d.ts +278 -74
  190. package/sdk/dist/generated/executor_fee_lib.js +135 -59
  191. package/sdk/dist/generated/executor_helper.d.ts +163 -21
  192. package/sdk/dist/generated/executor_helper.js +124 -52
  193. package/sdk/dist/generated/oft.d.ts +1842 -0
  194. package/sdk/dist/generated/oft.js +345 -0
  195. package/sdk/dist/generated/price_feed.d.ts +258 -63
  196. package/sdk/dist/generated/price_feed.js +95 -26
  197. package/sdk/dist/generated/sml.d.ts +235 -34
  198. package/sdk/dist/generated/sml.js +126 -53
  199. package/sdk/dist/generated/treasury.d.ts +1016 -0
  200. package/sdk/dist/generated/treasury.js +248 -0
  201. package/sdk/dist/generated/uln302.d.ts +235 -34
  202. package/sdk/dist/generated/uln302.js +126 -53
  203. package/sdk/dist/generated/upgrader.d.ts +17 -2
  204. package/sdk/dist/generated/upgrader.js +19 -1
  205. package/sdk/dist/index.d.ts +2 -1
  206. package/sdk/dist/index.js +2 -1
  207. package/sdk/package.json +6 -3
  208. package/sdk/src/index.ts +2 -1
  209. package/sdk/test/counter-sml.test.ts +376 -0
  210. package/sdk/test/counter-uln.test.ts +493 -0
  211. package/sdk/test/{oft.test.ts → oft-sml.test.ts} +196 -321
  212. package/sdk/test/suites/constants.ts +22 -2
  213. package/sdk/test/suites/globalSetup.ts +450 -0
  214. package/sdk/test/suites/localnet.ts +23 -6
  215. package/sdk/test/upgrader.test.ts +7 -16
  216. package/sdk/test/utils.ts +558 -85
  217. package/sdk/turbo.json +8 -0
  218. package/sdk/vitest.config.ts +21 -0
  219. package/tools/ts-bindings-gen/Cargo.toml +2 -0
  220. package/tools/ts-bindings-gen/src/main.rs +52 -4
  221. package/contracts/common-macros/src/contract_impl.rs +0 -52
  222. package/contracts/common-macros/src/ownable.rs +0 -41
  223. package/contracts/common-macros/src/tests/contract_impl.rs +0 -386
  224. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +0 -12
  225. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/extend_instance_ttl.rs +0 -50
  226. package/contracts/oapps/oapp-macros/src/oapp_core.rs +0 -41
  227. package/contracts/oapps/oapp-macros/src/oapp_full.rs +0 -21
  228. package/contracts/oapps/oapp-macros/src/oapp_options_type3.rs +0 -31
  229. package/contracts/oapps/oapp-macros/src/oapp_receiver.rs +0 -48
  230. package/contracts/oapps/oapp-macros/src/oapp_sender.rs +0 -21
  231. package/contracts/oapps/oapp-macros/src/util.rs +0 -107
  232. package/contracts/oapps/oft/src/constants.rs +0 -5
  233. package/contracts/oapps/oft/src/default_oft_impl.rs +0 -152
  234. package/contracts/oapps/oft/src/errors.rs +0 -8
  235. package/contracts/oapps/oft/src/interfaces/mint_burn_token.rs +0 -23
  236. package/contracts/oapps/oft/src/interfaces/mod.rs +0 -3
  237. package/contracts/oapps/oft/src/tests/extensions/mod.rs +0 -11
  238. package/contracts/oapps/oft/src/tests/extensions/setup.rs +0 -903
  239. package/contracts/oapps/oft/src/tests/extensions/test_oft_fee.rs +0 -749
  240. package/contracts/oapps/oft/src/tests/extensions/test_pausable.rs +0 -432
  241. package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +0 -1078
  242. package/contracts/oapps/oft/src/types.rs +0 -38
  243. package/contracts/oapps/oft-std/integration-tests/utils.rs +0 -427
  244. package/contracts/oapps/oft-std/src/lib.rs +0 -16
  245. package/contracts/oapps/oft-std/src/oft.rs +0 -156
  246. package/contracts/workers/dvn/src/interfaces/multisig.rs +0 -56
  247. package/contracts/workers/dvn/src/multisig.rs +0 -157
  248. package/sdk/dist/generated/oft_std.d.ts +0 -1544
  249. package/sdk/dist/generated/oft_std.js +0 -271
  250. package/sdk/test/index.test.ts +0 -375
  251. /package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/mod.rs +0 -0
  252. /package/contracts/oapps/{oft → oft-core}/src/codec/mod.rs +0 -0
  253. /package/contracts/oapps/{oft → oft-core}/src/codec/oft_compose_msg_codec.rs +0 -0
  254. /package/contracts/oapps/{oft → oft-core}/src/codec/oft_msg_codec.rs +0 -0
  255. /package/contracts/oapps/{oft → oft-core}/src/events.rs +0 -0
  256. /package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_compose_msg_codec.rs +0 -0
  257. /package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_version.rs +0 -0
  258. /package/contracts/oapps/{oft → oft-core}/src/tests/test_quote_oft.rs +0 -0
  259. /package/contracts/oapps/{oft → oft-core}/src/tests/test_quote_send.rs +0 -0
  260. /package/contracts/oapps/{oft → oft-core}/src/tests/test_send.rs +0 -0
  261. /package/contracts/oapps/{oft → oft-core}/src/tests/test_token.rs +0 -0
  262. /package/sdk/test/suites/{testUpgradeable.ts → dummyContractClient.ts} +0 -0
@@ -1,6 +1,8 @@
1
1
  import { Asset, Keypair, Networks } from '@stellar/stellar-sdk';
2
2
 
3
- const CORE_URL = 'http://localhost:8000';
3
+ import { Secp256k1KeyPair } from '../utils';
4
+
5
+ const CORE_URL = 'http://localhost:8086';
4
6
  export const FRIENDBOT_URL = `${CORE_URL}/friendbot`;
5
7
  export const RPC_URL = `${CORE_URL}/rpc`;
6
8
  export const NETWORK_PASSPHRASE = Networks.STANDALONE;
@@ -10,8 +12,26 @@ export const DEFAULT_DEPLOYER = Keypair.fromSecret(
10
12
  export const ZRO_DISTRIBUTOR = Keypair.fromSecret(
11
13
  'SB6QAFXFRR2MXYHW4RRZ23JDGKHDCYCT5YTQEGG3WNT5VKZADJQFVNWG',
12
14
  );
13
- export const EID = 30111;
15
+ // Use deterministic keypair for EXECUTOR_ADMIN to ensure consistency between globalSetup and test files
16
+ // (globalSetup runs in a separate process, so Keypair.random() would generate different keys)
17
+ export const EXECUTOR_ADMIN = Keypair.fromSecret(
18
+ 'SACWJCNRT2AYRPBWW7IBRNI765EMZSWPXXAAHYN57UFQNOXMGET7HM5K',
19
+ );
20
+
21
+ // DVN secp256k1 signer for multisig (deterministic key for testing)
22
+ // Private key is keccak256("dvn_test_signer") truncated to 32 bytes
23
+ export const DVN_SIGNER = new Secp256k1KeyPair(
24
+ '0x8d3f8d5d8f1c7e2a5b4c3d6e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a',
25
+ );
26
+
27
+ // DVN configuration
28
+ export const DVN_VID = 1;
29
+
30
+ export const EID = 30400;
14
31
  export const NATIVE_TOKEN_ADDRESS = Asset.native().contractId(NETWORK_PASSPHRASE);
15
32
  export const ZRO_ASSET = new Asset('ZRO', DEFAULT_DEPLOYER.publicKey());
16
33
  export const ZRO_TOKEN_ADDRESS = ZRO_ASSET.contractId(NETWORK_PASSPHRASE);
17
34
  export const MSG_TYPE_VANILLA = 1;
35
+ export const MSG_TYPE_COMPOSED = 2;
36
+ export const MSG_TYPE_ABA = 3;
37
+ export const MSG_TYPE_COMPOSED_ABA = 4;
@@ -0,0 +1,450 @@
1
+ import path from 'path';
2
+ import type { GlobalSetupContext } from 'vitest/node';
3
+
4
+ import { getFullyQualifiedRepoRootPath } from '@layerzerolabs/common-node-utils';
5
+
6
+ import { Client as DvnClient } from '../../src/generated/dvn';
7
+ import { Client as DvnFeeLibClient } from '../../src/generated/dvn_fee_lib';
8
+ import { Client as EndpointClient } from '../../src/generated/endpoint';
9
+ import { Client as ExecutorClient } from '../../src/generated/executor';
10
+ import { Client as ExecutorFeeLibClient } from '../../src/generated/executor_fee_lib';
11
+ import { Client as ExecutorHelperClient } from '../../src/generated/executor_helper';
12
+ import { Client as PriceFeedClient } from '../../src/generated/price_feed';
13
+ import { Client as SMLClient } from '../../src/generated/sml';
14
+ import { Client as TreasuryClient } from '../../src/generated/treasury';
15
+ import { Client as Uln302Client } from '../../src/generated/uln302';
16
+ import {
17
+ DEFAULT_DEPLOYER,
18
+ DVN_SIGNER,
19
+ DVN_VID,
20
+ EID,
21
+ EXECUTOR_ADMIN,
22
+ NATIVE_TOKEN_ADDRESS,
23
+ ZRO_TOKEN_ADDRESS,
24
+ } from './constants';
25
+ import { deployContract } from './deploy';
26
+ import { startStellarLocalnet, stopStellarLocalnet } from './localnet';
27
+
28
+ export interface ProtocolAddresses {
29
+ endpointV2: string;
30
+ uln302: string;
31
+ sml: string;
32
+ treasury: string;
33
+ executor: string;
34
+ executorHelper: string;
35
+ executorFeeLib: string;
36
+ priceFeed: string;
37
+ dvnFeeLib: string;
38
+ dvn: string;
39
+ }
40
+
41
+ export interface ProtocolClients {
42
+ endpointClient: EndpointClient;
43
+ uln302Client: Uln302Client;
44
+ smlClient: SMLClient;
45
+ treasuryClient: TreasuryClient;
46
+ executorClient: ExecutorClient;
47
+ executorHelperClient: ExecutorHelperClient;
48
+ executorFeeLibClient: ExecutorFeeLibClient;
49
+ priceFeedClient: PriceFeedClient;
50
+ dvnFeeLibClient: DvnFeeLibClient;
51
+ dvnClient: DvnClient;
52
+ }
53
+
54
+ // Declare the injection key type for vitest
55
+ declare module 'vitest' {
56
+ export interface ProvidedContext {
57
+ protocolAddresses: ProtocolAddresses;
58
+ }
59
+ }
60
+
61
+ /**
62
+ * Deploy all protocol contracts and wire them together
63
+ * Returns the deployed contract addresses
64
+ */
65
+ async function deployProtocolContracts(): Promise<{
66
+ addresses: ProtocolAddresses;
67
+ clients: ProtocolClients;
68
+ }> {
69
+ const repoRoot = await getFullyQualifiedRepoRootPath();
70
+ const wasmDir = path.join(
71
+ repoRoot,
72
+ 'contracts',
73
+ 'protocol',
74
+ 'stellar',
75
+ 'target',
76
+ 'wasm32v1-none',
77
+ 'release',
78
+ );
79
+
80
+ const addresses: ProtocolAddresses = {
81
+ endpointV2: '',
82
+ uln302: '',
83
+ sml: '',
84
+ treasury: '',
85
+ executor: '',
86
+ executorHelper: '',
87
+ executorFeeLib: '',
88
+ priceFeed: '',
89
+ dvnFeeLib: '',
90
+ dvn: '',
91
+ };
92
+
93
+ // 1. Deploy Endpoint
94
+ console.log('🚀 Deploying Endpoint...');
95
+ const endpointClient = await deployContract<EndpointClient>(
96
+ EndpointClient,
97
+ path.join(wasmDir, 'endpoint_v2.wasm'),
98
+ {
99
+ eid: EID,
100
+ owner: DEFAULT_DEPLOYER.publicKey(),
101
+ native_token: NATIVE_TOKEN_ADDRESS,
102
+ },
103
+ DEFAULT_DEPLOYER,
104
+ );
105
+ addresses.endpointV2 = endpointClient.options.contractId;
106
+ console.log('✅ Endpoint deployed:', addresses.endpointV2);
107
+
108
+ // 2. Deploy Treasury
109
+ console.log('🚀 Deploying Treasury...');
110
+ const treasuryClient = await deployContract<TreasuryClient>(
111
+ TreasuryClient,
112
+ path.join(wasmDir, 'treasury.wasm'),
113
+ { owner: DEFAULT_DEPLOYER.publicKey() },
114
+ DEFAULT_DEPLOYER,
115
+ );
116
+ addresses.treasury = treasuryClient.options.contractId;
117
+ console.log('✅ Treasury deployed:', addresses.treasury);
118
+
119
+ // 3. Deploy ULN302
120
+ console.log('🚀 Deploying ULN302...');
121
+ const uln302Client = await deployContract<Uln302Client>(
122
+ Uln302Client,
123
+ path.join(wasmDir, 'uln302.wasm'),
124
+ {
125
+ owner: DEFAULT_DEPLOYER.publicKey(),
126
+ endpoint: addresses.endpointV2,
127
+ treasury: addresses.treasury,
128
+ },
129
+ DEFAULT_DEPLOYER,
130
+ );
131
+ addresses.uln302 = uln302Client.options.contractId;
132
+ console.log('✅ ULN302 deployed:', addresses.uln302);
133
+
134
+ // 4. Deploy SML (SimpleMessageLib)
135
+ console.log('🚀 Deploying SimpleMessageLib...');
136
+ const smlClient = await deployContract<SMLClient>(
137
+ SMLClient,
138
+ path.join(wasmDir, 'simple_message_lib.wasm'),
139
+ {
140
+ owner: DEFAULT_DEPLOYER.publicKey(),
141
+ endpoint: addresses.endpointV2,
142
+ fee_recipient: DEFAULT_DEPLOYER.publicKey(),
143
+ },
144
+ DEFAULT_DEPLOYER,
145
+ );
146
+ addresses.sml = smlClient.options.contractId;
147
+ console.log('✅ SimpleMessageLib deployed:', addresses.sml);
148
+
149
+ // 5. Deploy Price Feed
150
+ console.log('🚀 Deploying Price Feed...');
151
+ const priceFeedClient = await deployContract<PriceFeedClient>(
152
+ PriceFeedClient,
153
+ path.join(wasmDir, 'price_feed.wasm'),
154
+ {
155
+ owner: DEFAULT_DEPLOYER.publicKey(),
156
+ price_updater: DEFAULT_DEPLOYER.publicKey(),
157
+ },
158
+ DEFAULT_DEPLOYER,
159
+ );
160
+ addresses.priceFeed = priceFeedClient.options.contractId;
161
+ console.log('✅ Price Feed deployed:', addresses.priceFeed);
162
+
163
+ // 6. Deploy Executor Fee Lib
164
+ console.log('🚀 Deploying Executor Fee Lib...');
165
+ const executorFeeLibClient = await deployContract<ExecutorFeeLibClient>(
166
+ ExecutorFeeLibClient,
167
+ path.join(wasmDir, 'executor_fee_lib.wasm'),
168
+ { owner: DEFAULT_DEPLOYER.publicKey() },
169
+ DEFAULT_DEPLOYER,
170
+ );
171
+ addresses.executorFeeLib = executorFeeLibClient.options.contractId;
172
+ console.log('✅ Executor Fee Lib deployed:', addresses.executorFeeLib);
173
+
174
+ // 7. Deploy DVN Fee Lib
175
+ console.log('🚀 Deploying DVN Fee Lib...');
176
+ const dvnFeeLibClient = await deployContract<DvnFeeLibClient>(
177
+ DvnFeeLibClient,
178
+ path.join(wasmDir, 'dvn_fee_lib.wasm'),
179
+ { owner: DEFAULT_DEPLOYER.publicKey() },
180
+ DEFAULT_DEPLOYER,
181
+ );
182
+ addresses.dvnFeeLib = dvnFeeLibClient.options.contractId;
183
+ console.log('✅ DVN Fee Lib deployed:', addresses.dvnFeeLib);
184
+
185
+ // 8. Deploy DVN
186
+ console.log('🚀 Deploying DVN...');
187
+ const dvnClient = await deployContract<DvnClient>(
188
+ DvnClient,
189
+ path.join(wasmDir, 'dvn.wasm'),
190
+ {
191
+ vid: DVN_VID,
192
+ signers: [DVN_SIGNER.ethAddress],
193
+ threshold: 1,
194
+ admins: [DEFAULT_DEPLOYER.publicKey()],
195
+ supported_msglibs: [addresses.uln302],
196
+ price_feed: addresses.priceFeed,
197
+ default_multiplier_bps: 10000,
198
+ worker_fee_lib: addresses.dvnFeeLib,
199
+ deposit_address: DEFAULT_DEPLOYER.publicKey(),
200
+ },
201
+ DEFAULT_DEPLOYER,
202
+ );
203
+ addresses.dvn = dvnClient.options.contractId;
204
+ console.log('✅ DVN deployed:', addresses.dvn);
205
+
206
+ // 9. Deploy Executor Helper
207
+ console.log('🚀 Deploying Executor Helper...');
208
+ const executorHelperClient = await deployContract<ExecutorHelperClient>(
209
+ ExecutorHelperClient,
210
+ path.join(wasmDir, 'executor_helper.wasm'),
211
+ undefined,
212
+ DEFAULT_DEPLOYER,
213
+ );
214
+ addresses.executorHelper = executorHelperClient.options.contractId;
215
+ console.log('✅ Executor Helper deployed:', addresses.executorHelper);
216
+
217
+ // 10. Deploy Executor (supports both ULN302 and SML)
218
+ console.log('🚀 Deploying Executor...');
219
+ const whitelist = [
220
+ [addresses.executorHelper, 'native_drop_and_execute'],
221
+ [addresses.executorHelper, 'execute'],
222
+ [addresses.executorHelper, 'compose'],
223
+ ];
224
+ const executorClient = await deployContract<ExecutorClient>(
225
+ ExecutorClient,
226
+ path.join(wasmDir, 'executor.wasm'),
227
+ {
228
+ owner: DEFAULT_DEPLOYER.publicKey(),
229
+ endpoint: addresses.endpointV2,
230
+ whitelist,
231
+ admins: [EXECUTOR_ADMIN.publicKey(), DEFAULT_DEPLOYER.publicKey()],
232
+ message_libs: [addresses.uln302, addresses.sml],
233
+ price_feed: addresses.priceFeed,
234
+ default_multiplier_bps: 10000,
235
+ worker_fee_lib: addresses.executorFeeLib,
236
+ deposit_address: DEFAULT_DEPLOYER.publicKey(),
237
+ },
238
+ DEFAULT_DEPLOYER,
239
+ );
240
+ addresses.executor = executorClient.options.contractId;
241
+ console.log('✅ Executor deployed:', addresses.executor);
242
+
243
+ const clients: ProtocolClients = {
244
+ endpointClient,
245
+ uln302Client,
246
+ smlClient,
247
+ treasuryClient,
248
+ executorClient,
249
+ executorHelperClient,
250
+ executorFeeLibClient,
251
+ priceFeedClient,
252
+ dvnFeeLibClient,
253
+ dvnClient,
254
+ };
255
+
256
+ return { addresses, clients };
257
+ }
258
+
259
+ /**
260
+ * Wire protocol contracts (register libraries, set defaults, configure workers)
261
+ */
262
+ async function wireProtocolContracts(
263
+ addresses: ProtocolAddresses,
264
+ clients: ProtocolClients,
265
+ ): Promise<void> {
266
+ const { endpointClient, uln302Client, priceFeedClient, executorClient, dvnClient } = clients;
267
+
268
+ console.log('🔗 Wiring protocol contracts...');
269
+
270
+ // Register libraries
271
+ await (await endpointClient.register_library({ new_lib: addresses.uln302 })).signAndSend();
272
+ await (await endpointClient.register_library({ new_lib: addresses.sml })).signAndSend();
273
+ console.log('✅ Libraries registered (ULN302 + SML)');
274
+
275
+ // Set ZRO token
276
+ await (await endpointClient.set_zro({ zro: ZRO_TOKEN_ADDRESS })).signAndSend();
277
+ console.log('✅ ZRO token set');
278
+
279
+ // Configure ULN302 executor config FIRST (so is_supported_eid returns true)
280
+ await (
281
+ await uln302Client.set_default_executor_configs({
282
+ params: [
283
+ {
284
+ dst_eid: EID,
285
+ config: { executor: addresses.executor, max_message_size: 10000 },
286
+ },
287
+ ],
288
+ })
289
+ ).signAndSend();
290
+ console.log('✅ ULN302 executor config set');
291
+
292
+ // Configure ULN302 send/receive configs
293
+ await (
294
+ await uln302Client.set_default_send_uln_configs({
295
+ params: [
296
+ {
297
+ eid: EID,
298
+ config: {
299
+ confirmations: 1n,
300
+ required_dvns: [addresses.dvn],
301
+ optional_dvns: [],
302
+ optional_dvn_threshold: 0,
303
+ },
304
+ },
305
+ ],
306
+ })
307
+ ).signAndSend();
308
+
309
+ await (
310
+ await uln302Client.set_default_receive_uln_configs({
311
+ params: [
312
+ {
313
+ eid: EID,
314
+ config: {
315
+ confirmations: 1n,
316
+ required_dvns: [addresses.dvn],
317
+ optional_dvns: [],
318
+ optional_dvn_threshold: 0,
319
+ },
320
+ },
321
+ ],
322
+ })
323
+ ).signAndSend();
324
+ console.log('✅ ULN302 send/receive configs set');
325
+
326
+ // NOW set default send/receive libraries to ULN302 (after configs are set)
327
+ await (
328
+ await endpointClient.set_default_send_library({ dst_eid: EID, new_lib: addresses.uln302 })
329
+ ).signAndSend();
330
+ await (
331
+ await endpointClient.set_default_receive_library({
332
+ src_eid: EID,
333
+ new_lib: addresses.uln302,
334
+ grace_period: 0n,
335
+ })
336
+ ).signAndSend();
337
+ console.log('✅ Default libraries set to ULN302');
338
+
339
+ // Configure Price Feed
340
+ await (
341
+ await priceFeedClient.set_price_ratio_denominator({ denominator: 100000000000000000000n })
342
+ ).signAndSend();
343
+ await (
344
+ await priceFeedClient.set_native_token_price_usd({
345
+ price_updater: DEFAULT_DEPLOYER.publicKey(),
346
+ native_token_price_usd: 1000000000000000000n,
347
+ })
348
+ ).signAndSend();
349
+
350
+ const NORMALIZED_EID = EID % 30000;
351
+ await (
352
+ await priceFeedClient.set_price({
353
+ price_updater: DEFAULT_DEPLOYER.publicKey(),
354
+ prices: [
355
+ {
356
+ eid: NORMALIZED_EID,
357
+ price: {
358
+ gas_per_byte: 1,
359
+ gas_price_in_unit: 1n,
360
+ price_ratio: 100000000000000000000n,
361
+ },
362
+ },
363
+ ],
364
+ })
365
+ ).signAndSend();
366
+ console.log('✅ Price Feed configured');
367
+
368
+ // Configure Executor
369
+ await (
370
+ await executorClient.set_dst_config({
371
+ admin: DEFAULT_DEPLOYER.publicKey(),
372
+ params: [
373
+ {
374
+ dst_eid: EID,
375
+ dst_config: {
376
+ floor_margin_usd: 0n,
377
+ lz_compose_base_gas: 50000n,
378
+ lz_receive_base_gas: 100000n,
379
+ multiplier_bps: 10000,
380
+ native_cap: 1000000000000n,
381
+ },
382
+ },
383
+ ],
384
+ })
385
+ ).signAndSend();
386
+ console.log('✅ Executor configured');
387
+
388
+ // Configure DVN
389
+ await (
390
+ await dvnClient.set_dst_config({
391
+ admin: DEFAULT_DEPLOYER.publicKey(),
392
+ params: [
393
+ {
394
+ dst_eid: EID,
395
+ config: {
396
+ floor_margin_usd: 0n,
397
+ gas: 100000n,
398
+ multiplier_bps: 10000,
399
+ },
400
+ },
401
+ ],
402
+ })
403
+ ).signAndSend();
404
+ console.log('✅ DVN configured');
405
+
406
+ console.log('🎉 Protocol wiring complete!');
407
+ }
408
+
409
+ /**
410
+ * Vitest Global Setup - runs ONCE before all test files
411
+ * Uses vitest's provide() to share data in memory with test files
412
+ */
413
+ export default async function globalSetup({
414
+ provide,
415
+ }: GlobalSetupContext): Promise<() => Promise<void>> {
416
+ console.log('\n========================================');
417
+ console.log('🌐 GLOBAL SETUP: Starting Stellar Localnet');
418
+ console.log('========================================\n');
419
+
420
+ await startStellarLocalnet();
421
+
422
+ console.log('\n========================================');
423
+ console.log('📦 GLOBAL SETUP: Deploying Protocol Contracts');
424
+ console.log('========================================\n');
425
+
426
+ const { addresses, clients } = await deployProtocolContracts();
427
+
428
+ console.log('\n========================================');
429
+ console.log('🔗 GLOBAL SETUP: Wiring Protocol Contracts');
430
+ console.log('========================================\n');
431
+
432
+ await wireProtocolContracts(addresses, clients);
433
+
434
+ // Provide addresses in memory for test files to access via inject()
435
+ provide('protocolAddresses', addresses);
436
+ console.log('\n✅ Protocol addresses provided to tests (in-memory)');
437
+
438
+ console.log('\n========================================');
439
+ console.log('✅ GLOBAL SETUP COMPLETE');
440
+ console.log('========================================\n');
441
+
442
+ // Return teardown function
443
+ return async () => {
444
+ console.log('\n========================================');
445
+ console.log('🛑 GLOBAL TEARDOWN: Stopping Stellar Localnet');
446
+ console.log('========================================\n');
447
+
448
+ await stopStellarLocalnet();
449
+ };
450
+ }
@@ -1,25 +1,42 @@
1
1
  import axios from 'axios';
2
2
  import { $, sleep } from 'zx';
3
3
 
4
- import { DEFAULT_DEPLOYER, FRIENDBOT_URL, ZRO_DISTRIBUTOR } from './constants';
4
+ import { DEFAULT_DEPLOYER, EXECUTOR_ADMIN, FRIENDBOT_URL, ZRO_DISTRIBUTOR } from './constants';
5
5
  import { deployNativeSac, deployZroToken } from './deploy';
6
6
 
7
+ const CONTAINER_NAME = 'stellar-localnet';
8
+ const QUICKSTART_IMAGE = 'stellar/quickstart';
9
+
7
10
  export async function startStellarLocalnet(): Promise<void> {
8
11
  console.log('🚀 Starting Stellar localnet...');
9
12
 
10
- //TODO: pnpm localnet up --only stellar
11
- await $`stellar container start local`;
13
+ // Remove any existing container first (ignore errors if not running)
14
+ await $`docker rm -f ${CONTAINER_NAME}`.nothrow();
15
+
16
+ // Pull image only if not available locally
17
+ const imageExists = await $`docker image inspect ${QUICKSTART_IMAGE}`.nothrow().quiet();
18
+ if (imageExists.exitCode !== 0) {
19
+ console.log(`📥 Pulling ${QUICKSTART_IMAGE}...`);
20
+ await $`docker pull ${QUICKSTART_IMAGE}`;
21
+ }
22
+
23
+ // Start the stellar/quickstart container directly (no Stellar CLI needed)
24
+ await $`docker run -d --name ${CONTAINER_NAME} -p 8086:8000 ${QUICKSTART_IMAGE} --local`;
12
25
 
13
26
  // Wait for Stellar to start
14
- for (let i = 0; i < 60; i++) {
27
+ for (let i = 0; i < 180; i++) {
15
28
  try {
16
29
  // Ensure faucet service is started and fund the default deployer account
17
30
  await fundAccount(DEFAULT_DEPLOYER.publicKey());
18
- await fundAccount(ZRO_DISTRIBUTOR.publicKey());
19
31
  console.log(`✅ Account ${DEFAULT_DEPLOYER.publicKey()} funded`);
32
+ await fundAccount(ZRO_DISTRIBUTOR.publicKey());
33
+ console.log(`✅ Account ${ZRO_DISTRIBUTOR.publicKey()} funded`);
34
+ await fundAccount(EXECUTOR_ADMIN.publicKey());
35
+ console.log(`✅ Account ${EXECUTOR_ADMIN.publicKey()} funded`);
20
36
  console.log('✅ Stellar localnet started');
21
37
  break;
22
38
  } catch (_e) {
39
+ console.error(`❌ Failed to fund account ${_e}`);
23
40
  await sleep(1000);
24
41
  console.log('⏳ Waiting for Stellar localnet to start...');
25
42
  }
@@ -37,6 +54,6 @@ export async function fundAccount(publicKey: string): Promise<void> {
37
54
  }
38
55
 
39
56
  export async function stopStellarLocalnet(): Promise<void> {
40
- await $`stellar container stop`;
57
+ await $`docker rm -f ${CONTAINER_NAME}`;
41
58
  console.log('✅ Stellar localnet stopped');
42
59
  }
@@ -3,18 +3,17 @@ import { assembleTransaction } from '@stellar/stellar-sdk/rpc';
3
3
  import * as rpc from '@stellar/stellar-sdk/rpc';
4
4
  import { readFileSync } from 'fs';
5
5
  import path from 'path';
6
- import { afterAll, beforeAll, describe, expect, it } from 'vitest';
6
+ import { describe, expect, it } from 'vitest';
7
7
 
8
8
  import { getFullyQualifiedRepoRootPath } from '@layerzerolabs/common-node-utils';
9
9
 
10
10
  import { Client as UpgraderClient } from '../src/generated/upgrader';
11
11
  import { DEFAULT_DEPLOYER, NETWORK_PASSPHRASE, RPC_URL } from './suites/constants';
12
12
  import { deployContract, uploadWasm } from './suites/deploy';
13
- import { startStellarLocalnet, stopStellarLocalnet } from './suites/localnet';
14
- import { Client as TestUpgradeableContractClient } from './suites/testUpgradeable';
13
+ import { Client as DummyContractClient } from './suites/dummyContractClient';
15
14
 
16
15
  let upgraderClient: UpgraderClient;
17
- let testContractClient: TestUpgradeableContractClient;
16
+ let dummyContractClient: DummyContractClient;
18
17
  let testContractAddress: string;
19
18
 
20
19
  // Test data paths
@@ -48,14 +47,6 @@ describe('Upgrader Contract Testing', async () => {
48
47
  TEST_CONTRACT_V1_WASM_PATH = path.join(testDataDir, 'test_upgradeable_contract1.wasm');
49
48
  TEST_CONTRACT_V2_WASM_PATH = path.join(testDataDir, 'test_upgradeable_contract2.wasm');
50
49
 
51
- beforeAll(async () => {
52
- await startStellarLocalnet();
53
- }, 120000); // 2 minute timeout for setup
54
-
55
- afterAll(async () => {
56
- await stopStellarLocalnet();
57
- });
58
-
59
50
  describe('Contract Deployments', () => {
60
51
  it('Deploy Upgrader Contract', async () => {
61
52
  // Deploy upgrader contract using the helper (no constructor args needed)
@@ -138,7 +129,7 @@ describe('Upgrader Contract Testing', async () => {
138
129
  );
139
130
 
140
131
  // Create client for the deployed contract
141
- testContractClient = new TestUpgradeableContractClient({
132
+ dummyContractClient = new DummyContractClient({
142
133
  contractId: testContractAddress,
143
134
  publicKey: DEFAULT_DEPLOYER.publicKey(),
144
135
  signTransaction: async (tx: string) => {
@@ -160,7 +151,7 @@ describe('Upgrader Contract Testing', async () => {
160
151
 
161
152
  it('Verify Test Contract V1 Counter', async () => {
162
153
  // Call counter() on V1 contract, should return 1
163
- const { result } = await testContractClient.counter();
154
+ const { result } = await dummyContractClient.counter();
164
155
  console.log('✅ Test Contract V1 counter value:', result);
165
156
  expect(result).toBe(1);
166
157
  });
@@ -294,14 +285,14 @@ describe('Upgrader Contract Testing', async () => {
294
285
 
295
286
  it('Verify Test Contract V2 Counter2 After Upgrade', async () => {
296
287
  // After upgrade, the contract should have counter2() function that returns 2
297
- const { result } = await testContractClient.counter2();
288
+ const { result } = await dummyContractClient.counter2();
298
289
  console.log('✅ Test Contract V2 counter2 value:', result);
299
290
  expect(result).toBe(2);
300
291
  });
301
292
 
302
293
  it('Verify Test Contract V1 Counter Still Works After Upgrade', async () => {
303
294
  // The original counter() should still be accessible and return 1
304
- const { result } = await testContractClient.counter();
295
+ const { result } = await dummyContractClient.counter();
305
296
  console.log('✅ Test Contract V2 counter value (from V1):', result);
306
297
  expect(result).toBe(1);
307
298
  });