@layerzerolabs/protocol-stellar-v2 0.2.15 → 0.2.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +350 -309
- package/.turbo/turbo-lint.log +146 -108
- package/.turbo/turbo-test.log +1423 -1238
- package/Cargo.lock +12 -0
- package/Cargo.toml +3 -0
- package/contracts/ERROR_SPEC.md +44 -0
- package/contracts/common-macros/src/auth.rs +113 -0
- package/contracts/common-macros/src/contract_ttl.rs +84 -0
- package/contracts/common-macros/src/lib.rs +181 -30
- package/contracts/common-macros/src/lz_contract.rs +83 -0
- package/contracts/common-macros/src/tests/{ownable.rs → auth.rs} +48 -15
- package/contracts/common-macros/src/tests/contract_ttl.rs +662 -0
- package/contracts/common-macros/src/tests/mod.rs +2 -2
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_multisig_code.snap +20 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_ownable_code.snap +24 -0
- 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
- 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
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contracttrait_code.snap +69 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +7 -21
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +2 -2
- package/contracts/common-macros/src/ttl_configurable.rs +19 -34
- package/contracts/common-macros/src/ttl_extendable.rs +36 -0
- package/contracts/common-macros/src/upgradeable.rs +5 -5
- package/contracts/common-macros/src/utils.rs +9 -0
- package/contracts/endpoint-v2/src/constants.rs +4 -4
- package/contracts/endpoint-v2/src/endpoint_v2.rs +38 -40
- package/contracts/endpoint-v2/src/errors.rs +4 -3
- package/contracts/endpoint-v2/src/events.rs +1 -1
- package/contracts/endpoint-v2/src/message_lib_manager.rs +18 -5
- package/contracts/endpoint-v2/src/messaging_channel.rs +11 -1
- package/contracts/endpoint-v2/src/messaging_composer.rs +11 -1
- package/contracts/endpoint-v2/src/storage.rs +1 -1
- package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +3 -3
- package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +1 -1
- package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +2 -2
- package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +3 -3
- package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +4 -4
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +3 -3
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +1 -1
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +3 -3
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +1 -1
- package/contracts/endpoint-v2/src/tests/messaging_channel/clear_payload.rs +4 -4
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound.rs +1 -1
- package/contracts/layerzero-views/src/layerzero_view.rs +3 -6
- package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +2 -2
- package/contracts/macro-integration-tests/tests/runtime/ownable/{only_owner_guard.rs → only_auth_guard.rs} +1 -1
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +1 -1
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +1 -1
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/mod.rs +0 -1
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/{only_owner_missing_env.rs → only_auth_missing_env.rs} +3 -3
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/{only_owner_missing_env.stderr → only_auth_missing_env.stderr} +4 -4
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +2 -3
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/{only_owner_env_param_variants.rs → only_auth_env_param_variants.rs} +9 -9
- package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/minimal_contract.rs +6 -6
- package/contracts/message-libs/message-lib-common/src/errors.rs +7 -2
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/decode_packet_header.rs +3 -3
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_lz_receive_option.rs +1 -2
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_native_drop_option.rs +1 -2
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/convert_legacy_options.rs +9 -9
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/extract_type_3_options.rs +1 -1
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/left_pad_to_bytes32.rs +1 -1
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/split_worker_options.rs +2 -2
- package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +7 -9
- package/contracts/message-libs/treasury/src/errors.rs +2 -2
- package/contracts/message-libs/treasury/src/events.rs +1 -1
- package/contracts/message-libs/treasury/src/interfaces/zro_fee_lib.rs +2 -2
- package/contracts/message-libs/treasury/src/storage.rs +1 -1
- package/contracts/message-libs/treasury/src/tests/treasury_tests.rs +1 -1
- package/contracts/message-libs/treasury/src/treasury.rs +14 -16
- package/contracts/message-libs/uln-302/src/receive_uln.rs +13 -2
- package/contracts/message-libs/uln-302/src/send_uln.rs +23 -3
- package/contracts/message-libs/uln-302/src/uln302.rs +6 -24
- package/contracts/oapps/counter/Cargo.toml +14 -1
- package/contracts/oapps/counter/integration_tests/mod.rs +4 -1
- package/contracts/oapps/counter/integration_tests/{setup.rs → setup_sml.rs} +48 -80
- package/contracts/oapps/counter/integration_tests/setup_uln.rs +997 -0
- package/contracts/oapps/counter/integration_tests/signing.rs +62 -0
- package/contracts/oapps/counter/integration_tests/test_with_sml.rs +24 -55
- package/contracts/oapps/counter/integration_tests/test_with_uln.rs +314 -0
- package/contracts/oapps/counter/integration_tests/utils.rs +196 -53
- package/contracts/oapps/counter/src/counter.rs +67 -43
- package/contracts/oapps/counter/src/tests/mod.rs +0 -13
- package/contracts/oapps/counter/src/tests/test_counter.rs +5 -7
- package/contracts/oapps/oapp/src/errors.rs +5 -1
- package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +93 -78
- package/contracts/oapps/oapp/src/oapp_core.rs +36 -21
- package/contracts/oapps/oapp/src/oapp_options_type3.rs +48 -12
- package/contracts/oapps/oapp/src/oapp_receiver.rs +106 -41
- package/contracts/oapps/oapp/src/oapp_sender.rs +26 -34
- package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +9 -8
- package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +25 -17
- package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +7 -7
- package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +14 -15
- package/contracts/oapps/oapp-macros/src/generators.rs +128 -0
- package/contracts/oapps/oapp-macros/src/lib.rs +113 -56
- package/contracts/oapps/oft/integration-tests/setup.rs +25 -7
- package/contracts/oapps/oft/src/errors.rs +6 -1
- package/contracts/oapps/oft/src/extensions/oft_fee.rs +8 -8
- package/contracts/oapps/oft/src/extensions/pausable.rs +4 -4
- package/contracts/oapps/oft/src/extensions/rate_limiter.rs +5 -5
- package/contracts/oapps/oft/src/lib.rs +4 -2
- package/contracts/oapps/oft/src/oft.rs +24 -64
- package/contracts/oapps/oft/src/oft_impl.rs +201 -0
- package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +1 -3
- package/contracts/oapps/oft/src/oft_types/mint_burn.rs +1 -4
- package/contracts/oapps/oft/src/storage.rs +2 -0
- package/contracts/oapps/oft/src/tests/extensions/setup.rs +36 -22
- package/contracts/oapps/oft/src/tests/extensions/test_oft_fee.rs +5 -3
- package/contracts/oapps/oft/src/tests/extensions/test_pausable.rs +5 -3
- package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +5 -3
- package/contracts/oapps/oft/src/tests/test_decimals.rs +2 -2
- package/contracts/oapps/oft/src/tests/test_oft_msg_codec.rs +1 -2
- package/contracts/oapps/oft/src/tests/test_utils.rs +45 -23
- package/contracts/oapps/oft/src/types.rs +20 -0
- package/contracts/oapps/oft-std/integration-tests/setup.rs +4 -2
- package/contracts/oapps/oft-std/src/oft.rs +24 -6
- package/contracts/upgrader/src/lib.rs +4 -4
- package/contracts/utils/src/auth.rs +44 -0
- package/contracts/utils/src/errors.rs +27 -5
- package/contracts/utils/src/lib.rs +3 -0
- package/contracts/utils/src/multisig.rs +211 -0
- package/contracts/utils/src/ownable.rs +12 -10
- package/contracts/utils/src/tests/buffer_reader.rs +6 -6
- package/contracts/utils/src/tests/buffer_writer.rs +6 -6
- package/contracts/utils/src/tests/bytes_ext.rs +2 -4
- package/contracts/utils/src/tests/mod.rs +1 -0
- package/contracts/utils/src/tests/multisig.rs +731 -0
- package/contracts/utils/src/tests/option_ext.rs +2 -5
- package/contracts/utils/src/tests/ownable.rs +16 -5
- package/contracts/utils/src/tests/ttl_configurable.rs +27 -16
- package/contracts/utils/src/tests/upgradeable.rs +4 -2
- package/contracts/utils/src/ttl_configurable.rs +23 -8
- package/contracts/utils/src/ttl_extendable.rs +27 -0
- package/contracts/utils/src/upgradeable.rs +2 -0
- package/contracts/workers/dvn/Cargo.toml +1 -1
- package/contracts/workers/dvn/src/auth.rs +7 -7
- package/contracts/workers/dvn/src/dvn.rs +10 -38
- package/contracts/workers/dvn/src/errors.rs +0 -7
- package/contracts/workers/dvn/src/events.rs +1 -14
- package/contracts/workers/dvn/src/interfaces/dvn.rs +2 -2
- package/contracts/workers/dvn/src/interfaces/mod.rs +0 -2
- package/contracts/workers/dvn/src/storage.rs +3 -13
- package/contracts/workers/dvn/src/tests/auth.rs +4 -4
- package/contracts/workers/dvn/src/tests/dvn.rs +1 -2
- package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +7 -8
- package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +11 -8
- package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +11 -12
- package/contracts/workers/dvn/src/tests/setup.rs +5 -5
- package/contracts/workers/dvn-fee-lib/Cargo.toml +1 -1
- package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +3 -6
- package/contracts/workers/executor/src/auth.rs +80 -16
- package/contracts/workers/executor/src/executor.rs +5 -31
- package/contracts/workers/executor/src/storage.rs +2 -9
- package/contracts/workers/executor-fee-lib/Cargo.toml +1 -1
- package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +3 -6
- package/contracts/workers/executor-helper/Cargo.toml +1 -1
- package/contracts/workers/executor-helper/src/executor_helper.rs +53 -73
- package/contracts/workers/price-feed/Cargo.toml +1 -1
- package/contracts/workers/price-feed/src/price_feed.rs +7 -10
- package/contracts/workers/worker/src/errors.rs +4 -0
- package/contracts/workers/worker/src/tests/worker.rs +7 -6
- package/contracts/workers/worker/src/worker.rs +20 -16
- package/package.json +8 -5
- package/sdk/.turbo/turbo-build.log +1 -0
- package/sdk/.turbo/turbo-test.log +1009 -0
- package/sdk/dist/generated/bml.d.ts +65 -8
- package/sdk/dist/generated/bml.js +70 -34
- package/sdk/dist/generated/counter.d.ts +167 -42
- package/sdk/dist/generated/counter.js +86 -45
- package/sdk/dist/generated/dvn.d.ts +282 -229
- package/sdk/dist/generated/dvn.js +119 -81
- package/sdk/dist/generated/dvn_fee_lib.d.ts +142 -67
- package/sdk/dist/generated/dvn_fee_lib.js +64 -24
- package/sdk/dist/generated/endpoint.d.ts +97 -22
- package/sdk/dist/generated/endpoint.js +75 -37
- package/sdk/dist/generated/executor.d.ts +117 -85
- package/sdk/dist/generated/executor.js +102 -59
- package/sdk/dist/generated/executor_fee_lib.d.ts +162 -78
- package/sdk/dist/generated/executor_fee_lib.js +104 -57
- package/sdk/dist/generated/executor_helper.d.ts +133 -21
- package/sdk/dist/generated/executor_helper.js +99 -50
- package/sdk/dist/generated/oft_std.d.ts +233 -55
- package/sdk/dist/generated/oft_std.js +99 -54
- package/sdk/dist/generated/price_feed.d.ts +142 -67
- package/sdk/dist/generated/price_feed.js +64 -24
- package/sdk/dist/generated/sml.d.ts +113 -32
- package/sdk/dist/generated/sml.js +93 -49
- package/sdk/dist/generated/treasury.d.ts +896 -0
- package/sdk/dist/generated/treasury.js +219 -0
- package/sdk/dist/generated/uln302.d.ts +113 -32
- package/sdk/dist/generated/uln302.js +93 -49
- package/sdk/dist/generated/upgrader.d.ts +2 -2
- package/sdk/dist/generated/upgrader.js +1 -1
- package/sdk/dist/index.d.ts +2 -0
- package/sdk/dist/index.js +3 -0
- package/sdk/dist/wasm/blocked-message-lib.d.ts +1 -0
- package/sdk/dist/wasm/blocked-message-lib.js +2 -0
- package/sdk/dist/wasm/counter.d.ts +1 -0
- package/sdk/dist/wasm/counter.js +2 -0
- package/sdk/dist/wasm/dvn-fee-lib.d.ts +1 -0
- package/sdk/dist/wasm/dvn-fee-lib.js +2 -0
- package/sdk/dist/wasm/dvn.d.ts +1 -0
- package/sdk/dist/wasm/dvn.js +2 -0
- package/sdk/dist/wasm/endpoint-v2.d.ts +1 -0
- package/sdk/dist/wasm/endpoint-v2.js +2 -0
- package/sdk/dist/wasm/executor-fee-lib.d.ts +1 -0
- package/sdk/dist/wasm/executor-fee-lib.js +2 -0
- package/sdk/dist/wasm/executor-helper.d.ts +1 -0
- package/sdk/dist/wasm/executor-helper.js +2 -0
- package/sdk/dist/wasm/executor.d.ts +1 -0
- package/sdk/dist/wasm/executor.js +2 -0
- package/sdk/dist/wasm/layerzero-views.d.ts +1 -0
- package/sdk/dist/wasm/layerzero-views.js +2 -0
- package/sdk/dist/wasm/oft-std.d.ts +1 -0
- package/sdk/dist/wasm/oft-std.js +2 -0
- package/sdk/dist/wasm/price-feed.d.ts +1 -0
- package/sdk/dist/wasm/price-feed.js +2 -0
- package/sdk/dist/wasm/simple-message-lib.d.ts +1 -0
- package/sdk/dist/wasm/simple-message-lib.js +2 -0
- package/sdk/dist/wasm/treasury.d.ts +1 -0
- package/sdk/dist/wasm/treasury.js +2 -0
- package/sdk/dist/wasm/uln302.d.ts +1 -0
- package/sdk/dist/wasm/uln302.js +2 -0
- package/sdk/dist/wasm/upgrader.d.ts +1 -0
- package/sdk/dist/wasm/upgrader.js +2 -0
- package/sdk/dist/wasm.d.ts +15 -0
- package/sdk/dist/wasm.js +15 -0
- package/sdk/package.json +4 -2
- package/sdk/src/index.ts +4 -0
- package/sdk/test/counter-sml.test.ts +376 -0
- package/sdk/test/counter-uln.test.ts +493 -0
- package/sdk/test/{oft.test.ts → oft-sml.test.ts} +185 -310
- package/sdk/test/suites/constants.ts +22 -2
- package/sdk/test/suites/globalSetup.ts +450 -0
- package/sdk/test/suites/localnet.ts +23 -6
- package/sdk/test/upgrader.test.ts +7 -16
- package/sdk/test/utils.ts +558 -85
- package/sdk/vitest.config.ts +21 -0
- package/tools/ts-bindings-gen/src/main.rs +1 -0
- package/turbo.json +2 -0
- package/contracts/common-macros/src/contract_impl.rs +0 -52
- package/contracts/common-macros/src/ownable.rs +0 -41
- package/contracts/common-macros/src/tests/contract_impl.rs +0 -386
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +0 -12
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/extend_instance_ttl.rs +0 -50
- package/contracts/oapps/oapp-macros/src/oapp_core.rs +0 -41
- package/contracts/oapps/oapp-macros/src/oapp_full.rs +0 -21
- package/contracts/oapps/oapp-macros/src/oapp_options_type3.rs +0 -31
- package/contracts/oapps/oapp-macros/src/oapp_receiver.rs +0 -48
- package/contracts/oapps/oapp-macros/src/oapp_sender.rs +0 -21
- package/contracts/oapps/oapp-macros/src/util.rs +0 -107
- package/contracts/oapps/oft/src/constants.rs +0 -5
- package/contracts/oapps/oft/src/default_oft_impl.rs +0 -152
- package/contracts/workers/dvn/src/interfaces/multisig.rs +0 -56
- package/contracts/workers/dvn/src/multisig.rs +0 -157
- package/sdk/test/index.test.ts +0 -375
- /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
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
11
|
-
await $`
|
|
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 <
|
|
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 $`
|
|
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 {
|
|
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 {
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
});
|