@layerzerolabs/protocol-stellar-v2 0.2.29 → 0.2.30
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 +371 -321
- package/.turbo/turbo-lint.log +211 -202
- package/.turbo/turbo-test.log +1766 -1673
- package/Cargo.lock +11 -1
- package/contracts/common-macros/src/lib.rs +0 -2
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +1 -0
- package/contracts/endpoint-v2/src/messaging_channel.rs +32 -3
- package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +1 -1
- package/contracts/endpoint-v2/src/tests/messaging_channel/clear_payload.rs +1 -1
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound.rs +6 -6
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_payload_hash.rs +1 -1
- package/contracts/endpoint-v2/src/tests/messaging_channel/outbound.rs +16 -10
- package/contracts/macro-integration-tests/tests/runtime/oapp/options_type3.rs +10 -10
- package/contracts/macro-integration-tests/tests/runtime/oapp/receiver.rs +3 -3
- package/contracts/macro-integration-tests/tests/runtime/oapp/sender.rs +4 -3
- package/contracts/macro-integration-tests/tests/runtime/upgradeable/migrate_guard_and_state.rs +1 -57
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/upgradeable_missing_internal.stderr +0 -30
- package/contracts/macro-integration-tests/tests/ui/oapp/fail/custom_wrong_value.stderr +5 -3
- package/contracts/macro-integration-tests/tests/ui/oapp/fail/non_struct_input.stderr +6 -4
- package/contracts/macro-integration-tests/tests/ui/oapp/fail/unknown_custom_option.stderr +5 -3
- package/contracts/macro-integration-tests/tests/ui/oapp/fail/wrong_key.stderr +5 -3
- package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_auth_trait.stderr +0 -30
- package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_upgradeable_internal.stderr +0 -30
- package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/basic.rs +0 -2
- package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/multisig_contract.rs +0 -2
- package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/no_migration.rs +0 -2
- package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/no_user_contractimpl.rs +1 -3
- package/contracts/message-libs/message-lib-common/src/packet_codec_v1.rs +3 -6
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/extract_type_3_options.rs +10 -0
- package/contracts/message-libs/message-lib-common/src/worker_options.rs +6 -2
- package/contracts/message-libs/treasury/src/interfaces/zro_fee_lib.rs +3 -3
- package/contracts/message-libs/treasury/src/lib.rs +2 -1
- package/contracts/message-libs/treasury/src/tests/setup.rs +1 -1
- package/contracts/message-libs/treasury/src/treasury.rs +5 -2
- package/contracts/message-libs/uln-302/src/errors.rs +2 -0
- package/contracts/message-libs/uln-302/src/events.rs +3 -3
- package/contracts/message-libs/uln-302/src/interfaces/receive_uln.rs +8 -0
- package/contracts/message-libs/uln-302/src/lib.rs +2 -1
- package/contracts/message-libs/uln-302/src/receive_uln.rs +16 -13
- package/contracts/message-libs/uln-302/src/send_uln.rs +51 -24
- package/contracts/message-libs/uln-302/src/storage.rs +2 -2
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/effective_receive_uln_config.rs +45 -1
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/verifiable.rs +63 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_executor_config.rs +47 -2
- package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_send_uln_config.rs +50 -1
- package/contracts/message-libs/uln-302/src/uln302.rs +0 -8
- package/contracts/oapps/counter/Cargo.toml +4 -4
- package/contracts/oapps/counter/integration_tests/setup_uln.rs +22 -2
- package/contracts/oapps/counter/src/counter.rs +8 -8
- package/contracts/oapps/oapp/src/interfaces/oapp_msg_inspector.rs +33 -10
- package/contracts/oapps/oapp/src/lib.rs +6 -2
- package/contracts/oapps/oapp/src/oapp_core.rs +49 -24
- package/contracts/oapps/oapp/src/oapp_options_type3.rs +21 -14
- package/contracts/oapps/oapp/src/oapp_receiver.rs +17 -16
- package/contracts/oapps/oapp/src/oapp_sender.rs +66 -15
- package/contracts/oapps/oapp/src/tests/oapp_core.rs +5 -5
- package/contracts/oapps/oapp/src/tests/oapp_options_type3.rs +18 -18
- package/contracts/oapps/oapp/src/tests/oapp_receiver.rs +4 -4
- package/contracts/oapps/oapp/src/tests/oapp_sender.rs +3 -3
- package/contracts/oapps/oapp-macros/Cargo.toml +0 -1
- package/contracts/oapps/oapp-macros/src/generators.rs +87 -46
- package/contracts/oapps/oapp-macros/src/lib.rs +3 -61
- package/contracts/oapps/oapp-macros/src/tests/oapp.rs +9 -23
- package/contracts/oapps/oapp-macros/src/tests/parse_custom_impls.rs +15 -11
- package/contracts/oapps/oft/Cargo.toml +1 -1
- package/contracts/oapps/oft/integration-tests/extensions/test_oft_fee.rs +3 -3
- package/contracts/oapps/oft/integration-tests/extensions/test_pausable.rs +4 -4
- package/contracts/oapps/oft/integration-tests/extensions/test_rate_limiter.rs +144 -8
- package/contracts/oapps/oft/integration-tests/setup.rs +4 -2
- package/contracts/oapps/oft/integration-tests/utils.rs +25 -11
- package/contracts/oapps/oft/src/extensions/oft_fee.rs +65 -63
- package/contracts/oapps/oft/src/extensions/pausable.rs +2 -3
- package/contracts/oapps/oft/src/extensions/rate_limiter.rs +22 -5
- package/contracts/oapps/oft/src/interfaces/mint_burnable.rs +18 -0
- package/contracts/oapps/oft/src/interfaces/mod.rs +3 -0
- package/contracts/oapps/oft/src/lib.rs +4 -2
- package/contracts/oapps/oft/src/oft.rs +35 -36
- package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +13 -9
- package/contracts/oapps/oft/src/oft_types/mint_burn.rs +14 -9
- package/contracts/oapps/oft/src/oft_types/mod.rs +14 -12
- package/contracts/oapps/oft/src/tests/extensions/oft_fee.rs +28 -20
- package/contracts/oapps/oft/src/tests/extensions/rate_limiter.rs +136 -2
- package/contracts/oapps/oft/src/tests/oft_types/lock_unlock.rs +12 -8
- package/contracts/oapps/oft-core/integration-tests/setup.rs +8 -9
- package/contracts/oapps/oft-core/integration-tests/test_with_sml.rs +7 -6
- package/contracts/oapps/oft-core/integration-tests/utils.rs +5 -4
- package/contracts/oapps/oft-core/src/codec/oft_compose_msg_codec.rs +2 -2
- package/contracts/oapps/oft-core/src/codec/oft_msg_codec.rs +33 -37
- package/contracts/oapps/oft-core/src/errors.rs +2 -1
- package/contracts/oapps/oft-core/src/events.rs +6 -0
- package/contracts/oapps/oft-core/src/lib.rs +8 -4
- package/contracts/oapps/oft-core/src/oft_core.rs +205 -148
- package/contracts/oapps/oft-core/src/storage.rs +4 -2
- package/contracts/oapps/oft-core/src/tests/test_decimals.rs +2 -2
- package/contracts/oapps/oft-core/src/tests/test_lz_receive.rs +6 -6
- package/contracts/oapps/oft-core/src/tests/test_msg_inspector.rs +7 -6
- package/contracts/oapps/oft-core/src/tests/test_oft_msg_codec.rs +11 -82
- package/contracts/oapps/oft-core/src/tests/test_quote_oft.rs +13 -13
- package/contracts/oapps/oft-core/src/tests/test_quote_send.rs +1 -1
- package/contracts/oapps/oft-core/src/tests/test_resolve_address.rs +2 -2
- package/contracts/oapps/oft-core/src/tests/test_send.rs +22 -22
- package/contracts/oapps/oft-core/src/tests/test_utils.rs +20 -22
- package/contracts/oapps/oft-core/src/utils.rs +12 -8
- package/contracts/sac-manager/Cargo.toml +25 -0
- package/contracts/sac-manager/src/errors.rs +18 -0
- package/contracts/sac-manager/src/extensions/mod.rs +6 -0
- package/contracts/sac-manager/src/extensions/redistribution.rs +109 -0
- package/contracts/sac-manager/src/extensions/supply_control/mod.rs +488 -0
- package/contracts/sac-manager/src/extensions/supply_control/rate_limit.rs +126 -0
- package/contracts/sac-manager/src/interfaces/mod.rs +3 -0
- package/contracts/sac-manager/src/interfaces/sac_manager.rs +52 -0
- package/contracts/sac-manager/src/lib.rs +23 -0
- package/contracts/sac-manager/src/sac_manager.rs +193 -0
- package/contracts/sac-manager/src/storage.rs +20 -0
- package/contracts/sac-manager/src/tests/mod.rs +14 -0
- package/contracts/sac-manager/src/tests/redistribution/mod.rs +1 -0
- package/contracts/sac-manager/src/tests/redistribution/redistribute_funds.rs +82 -0
- package/contracts/sac-manager/src/tests/sac_manager/admin_mint.rs +206 -0
- package/contracts/sac-manager/src/tests/sac_manager/burn.rs +215 -0
- package/contracts/sac-manager/src/tests/sac_manager/clawback.rs +209 -0
- package/contracts/sac-manager/src/tests/sac_manager/mint.rs +252 -0
- package/contracts/sac-manager/src/tests/sac_manager/mod.rs +9 -0
- package/contracts/sac-manager/src/tests/sac_manager/set_admin.rs +36 -0
- package/contracts/sac-manager/src/tests/sac_manager/set_authorized.rs +43 -0
- package/contracts/sac-manager/src/tests/sac_manager/set_oft_address.rs +47 -0
- package/contracts/sac-manager/src/tests/sac_manager/test_helper.rs +75 -0
- package/contracts/sac-manager/src/tests/sac_manager/view_functions.rs +60 -0
- package/contracts/sac-manager/src/tests/supply_control/enumerable_set.rs +256 -0
- package/contracts/sac-manager/src/tests/supply_control/mod.rs +8 -0
- package/contracts/sac-manager/src/tests/supply_control/refill.rs +90 -0
- package/contracts/sac-manager/src/tests/supply_control/set_mint_whitelist.rs +245 -0
- package/contracts/sac-manager/src/tests/supply_control/set_supply_controller.rs +267 -0
- package/contracts/sac-manager/src/tests/supply_control/set_supply_controller_manager.rs +122 -0
- package/contracts/sac-manager/src/tests/supply_control/test_helper.rs +38 -0
- package/contracts/sac-manager/src/tests/supply_control/update_allow_any_mint_burn.rs +114 -0
- package/contracts/sac-manager/src/tests/supply_control/update_limit_config.rs +257 -0
- package/contracts/sac-manager/src/tests/test_helper.rs +190 -0
- package/contracts/upgrader/src/lib.rs +2 -1
- package/contracts/utils/src/errors.rs +0 -1
- package/contracts/utils/src/tests/upgradeable.rs +0 -66
- package/contracts/utils/src/upgradeable.rs +0 -18
- package/contracts/workers/dvn/src/dvn.rs +2 -2
- package/contracts/workers/dvn/src/interfaces/dvn.rs +2 -2
- package/contracts/workers/dvn/src/lib.rs +2 -1
- package/contracts/workers/dvn-fee-lib/src/lib.rs +3 -1
- package/contracts/workers/executor/src/auth.rs +42 -26
- package/contracts/workers/executor/src/executor.rs +28 -3
- package/contracts/workers/executor/src/lib.rs +4 -2
- package/contracts/workers/executor/src/storage.rs +21 -1
- package/contracts/workers/executor/src/tests/auth.rs +64 -20
- package/contracts/workers/executor/src/tests/executor.rs +1 -1
- package/contracts/workers/executor/src/tests/setup.rs +18 -0
- package/contracts/workers/executor-fee-lib/src/lib.rs +4 -1
- package/contracts/workers/executor-helper/src/executor_helper.rs +24 -10
- package/contracts/workers/executor-helper/src/tests/setup.rs +147 -34
- package/contracts/workers/price-feed/src/lib.rs +3 -1
- package/contracts/workers/worker/src/lib.rs +2 -1
- package/contracts/workers/worker/src/worker.rs +31 -17
- package/docs/oapp-guide.md +17 -8
- package/docs/oft-guide.md +3 -3
- package/package.json +3 -3
- package/sdk/.turbo/turbo-test.log +512 -351
- package/sdk/dist/generated/bml.d.ts +3 -9
- package/sdk/dist/generated/bml.js +6 -7
- package/sdk/dist/generated/counter.d.ts +22 -28
- package/sdk/dist/generated/counter.js +11 -12
- package/sdk/dist/generated/dvn.d.ts +36 -54
- package/sdk/dist/generated/dvn.js +10 -15
- package/sdk/dist/generated/dvn_fee_lib.d.ts +3 -21
- package/sdk/dist/generated/dvn_fee_lib.js +6 -11
- package/sdk/dist/generated/endpoint.d.ts +3 -9
- package/sdk/dist/generated/endpoint.js +6 -7
- package/sdk/dist/generated/executor.d.ts +80 -54
- package/sdk/dist/generated/executor.js +16 -16
- package/sdk/dist/generated/executor_fee_lib.d.ts +3 -21
- package/sdk/dist/generated/executor_fee_lib.js +6 -11
- package/sdk/dist/generated/executor_helper.d.ts +36 -42
- package/sdk/dist/generated/executor_helper.js +9 -10
- package/sdk/dist/generated/layerzero_view.d.ts +20 -32
- package/sdk/dist/generated/layerzero_view.js +25 -26
- package/sdk/dist/generated/oft.d.ts +147 -79
- package/sdk/dist/generated/oft.js +47 -54
- package/sdk/dist/generated/price_feed.d.ts +20 -38
- package/sdk/dist/generated/price_feed.js +15 -20
- package/sdk/dist/generated/sac_manager.d.ts +1309 -0
- package/sdk/dist/generated/sac_manager.js +484 -0
- package/sdk/dist/generated/sml.d.ts +3 -9
- package/sdk/dist/generated/sml.js +6 -7
- package/sdk/dist/generated/treasury.d.ts +3 -9
- package/sdk/dist/generated/treasury.js +8 -9
- package/sdk/dist/generated/uln302.d.ts +20 -20
- package/sdk/dist/generated/uln302.js +25 -22
- package/sdk/dist/generated/upgrader.d.ts +3 -9
- package/sdk/dist/generated/upgrader.js +6 -7
- package/sdk/dist/index.d.ts +1 -0
- package/sdk/dist/index.js +1 -0
- package/sdk/package.json +1 -1
- package/sdk/src/index.ts +1 -0
- package/sdk/test/oft-sml.test.ts +7 -5
- package/sdk/test/sac-manager-redistribution.test.ts +578 -0
- package/sdk/test/suites/globalSetup.ts +11 -6
- package/sdk/test/test_data/test_upgradeable_dvn.wasm +0 -0
- package/sdk/test/upgrader.test.ts +75 -202
- package/sdk/test/utils.ts +40 -0
- package/tools/ts-bindings-gen/src/main.rs +1 -0
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { assembleTransaction } from '@stellar/stellar-sdk/rpc';
|
|
1
|
+
import { BASE_FEE, Contract, scValToNative, TransactionBuilder, xdr } from '@stellar/stellar-sdk';
|
|
3
2
|
import * as rpc from '@stellar/stellar-sdk/rpc';
|
|
4
3
|
import { readFileSync } from 'fs';
|
|
5
4
|
import path from 'path';
|
|
@@ -7,13 +6,20 @@ import { describe, expect, it } from 'vitest';
|
|
|
7
6
|
|
|
8
7
|
import { getFullyQualifiedRepoRootPath } from '@layerzerolabs/common-node-utils';
|
|
9
8
|
|
|
9
|
+
import { Client as DvnClient } from '../src/generated/dvn';
|
|
10
10
|
import { Client as UpgraderClient } from '../src/generated/upgrader';
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
DEFAULT_DEPLOYER,
|
|
13
|
+
DVN_SIGNER,
|
|
14
|
+
DVN_VID,
|
|
15
|
+
NETWORK_PASSPHRASE,
|
|
16
|
+
RPC_URL,
|
|
17
|
+
} from './suites/constants';
|
|
12
18
|
import { deployContract, uploadWasm } from './suites/deploy';
|
|
13
|
-
import {
|
|
19
|
+
import { signDvnAuthEntries } from './utils';
|
|
14
20
|
|
|
15
21
|
let upgraderClient: UpgraderClient;
|
|
16
|
-
let
|
|
22
|
+
let dvnClient: DvnClient;
|
|
17
23
|
let testContractAddress: string;
|
|
18
24
|
|
|
19
25
|
// Test data paths
|
|
@@ -36,16 +42,14 @@ describe('Upgrader Contract Testing', async () => {
|
|
|
36
42
|
'contracts',
|
|
37
43
|
'protocol',
|
|
38
44
|
'stellar',
|
|
39
|
-
'
|
|
40
|
-
'
|
|
41
|
-
'src',
|
|
42
|
-
'tests',
|
|
45
|
+
'sdk',
|
|
46
|
+
'test',
|
|
43
47
|
'test_data',
|
|
44
48
|
);
|
|
45
49
|
|
|
46
50
|
const UPGRADER_WASM_PATH = path.join(upgraderWasmDir, 'upgrader.wasm');
|
|
47
|
-
TEST_CONTRACT_V1_WASM_PATH = path.join(
|
|
48
|
-
TEST_CONTRACT_V2_WASM_PATH = path.join(testDataDir, '
|
|
51
|
+
TEST_CONTRACT_V1_WASM_PATH = path.join(upgraderWasmDir, 'dvn.wasm');
|
|
52
|
+
TEST_CONTRACT_V2_WASM_PATH = path.join(testDataDir, 'test_upgradeable_dvn.wasm');
|
|
49
53
|
|
|
50
54
|
describe('Contract Deployments', () => {
|
|
51
55
|
it('Deploy Upgrader Contract', async () => {
|
|
@@ -61,99 +65,34 @@ describe('Upgrader Contract Testing', async () => {
|
|
|
61
65
|
expect(upgraderClient.options.contractId).toBeDefined();
|
|
62
66
|
});
|
|
63
67
|
|
|
64
|
-
it('Deploy
|
|
68
|
+
it('Deploy DVN Contract V1', async () => {
|
|
65
69
|
console.log('📖 Reading Test Contract V1 WASM file from:', TEST_CONTRACT_V1_WASM_PATH);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const account = await server.getAccount(DEFAULT_DEPLOYER.publicKey());
|
|
81
|
-
const salt = Buffer.from(Keypair.random().rawPublicKey());
|
|
82
|
-
|
|
83
|
-
// Create contract from WASM with constructor args
|
|
84
|
-
const wasmHashBuffer = Buffer.from(wasmHash, 'hex');
|
|
85
|
-
|
|
86
|
-
// Encode constructor args: owner (Address)
|
|
87
|
-
const ownerScVal = Address.fromString(DEFAULT_DEPLOYER.publicKey()).toScVal();
|
|
88
|
-
|
|
89
|
-
const createContractTx = new TransactionBuilder(account, {
|
|
90
|
-
fee: '100000',
|
|
91
|
-
networkPassphrase: NETWORK_PASSPHRASE,
|
|
92
|
-
})
|
|
93
|
-
.addOperation(
|
|
94
|
-
Operation.createCustomContract({
|
|
95
|
-
address: Address.fromString(DEFAULT_DEPLOYER.publicKey()),
|
|
96
|
-
wasmHash: wasmHashBuffer,
|
|
97
|
-
salt: salt,
|
|
98
|
-
constructorArgs: [ownerScVal],
|
|
99
|
-
}),
|
|
100
|
-
)
|
|
101
|
-
.setTimeout(30)
|
|
102
|
-
.build();
|
|
103
|
-
|
|
104
|
-
// Simulate to get the contract ID
|
|
105
|
-
const simulated = await server.simulateTransaction(createContractTx);
|
|
106
|
-
const preparedTx = rpc.assembleTransaction(createContractTx, simulated).build();
|
|
107
|
-
preparedTx.sign(DEFAULT_DEPLOYER);
|
|
108
|
-
|
|
109
|
-
const sendResult = await server.sendTransaction(preparedTx);
|
|
110
|
-
if (sendResult.status !== 'PENDING') {
|
|
111
|
-
throw new Error(`Transaction failed: ${JSON.stringify(sendResult)}`);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
const txResult = await server.pollTransaction(sendResult.hash);
|
|
115
|
-
if (txResult.status !== 'SUCCESS') {
|
|
116
|
-
throw new Error(`Transaction not successful: ${JSON.stringify(txResult)}`);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// Extract contract address from the transaction result
|
|
120
|
-
const returnValue = txResult.returnValue;
|
|
121
|
-
if (!returnValue) {
|
|
122
|
-
throw new Error('No return value from contract creation');
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
// The return value is an Address ScVal, decode it
|
|
126
|
-
const contractIdHash = returnValue.address().contractId();
|
|
127
|
-
testContractAddress = StrKey.encodeContract(
|
|
128
|
-
Buffer.from(contractIdHash as unknown as Uint8Array),
|
|
129
|
-
);
|
|
130
|
-
|
|
131
|
-
// Create client for the deployed contract
|
|
132
|
-
dummyContractClient = new DummyContractClient({
|
|
133
|
-
contractId: testContractAddress,
|
|
134
|
-
publicKey: DEFAULT_DEPLOYER.publicKey(),
|
|
135
|
-
signTransaction: async (tx: string) => {
|
|
136
|
-
const transaction = TransactionBuilder.fromXDR(tx, NETWORK_PASSPHRASE);
|
|
137
|
-
transaction.sign(DEFAULT_DEPLOYER);
|
|
138
|
-
return {
|
|
139
|
-
signedTxXdr: transaction.toXDR(),
|
|
140
|
-
signerAddress: DEFAULT_DEPLOYER.publicKey(),
|
|
141
|
-
};
|
|
70
|
+
dvnClient = await deployContract<DvnClient>(
|
|
71
|
+
DvnClient,
|
|
72
|
+
TEST_CONTRACT_V1_WASM_PATH,
|
|
73
|
+
{
|
|
74
|
+
vid: DVN_VID,
|
|
75
|
+
signers: [DVN_SIGNER.ethAddress],
|
|
76
|
+
threshold: 1,
|
|
77
|
+
admins: [DEFAULT_DEPLOYER.publicKey()],
|
|
78
|
+
supported_msglibs: [],
|
|
79
|
+
price_feed: DEFAULT_DEPLOYER.publicKey(),
|
|
80
|
+
default_multiplier_bps: 10000,
|
|
81
|
+
worker_fee_lib: DEFAULT_DEPLOYER.publicKey(),
|
|
82
|
+
deposit_address: DEFAULT_DEPLOYER.publicKey(),
|
|
142
83
|
},
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
});
|
|
84
|
+
DEFAULT_DEPLOYER,
|
|
85
|
+
);
|
|
86
|
+
testContractAddress = dvnClient.options.contractId;
|
|
147
87
|
|
|
148
88
|
console.log('✅ Test Contract V1 deployed at:', testContractAddress);
|
|
149
89
|
expect(testContractAddress).toBeDefined();
|
|
150
90
|
});
|
|
151
91
|
|
|
152
|
-
it('Verify Test Contract V1
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
expect(result).toBe(1);
|
|
92
|
+
it('Verify Test Contract V1 VID', async () => {
|
|
93
|
+
const { result } = await dvnClient.vid();
|
|
94
|
+
console.log('✅ Test Contract V1 vid value:', result);
|
|
95
|
+
expect(result).toBe(DVN_VID);
|
|
157
96
|
});
|
|
158
97
|
});
|
|
159
98
|
|
|
@@ -172,128 +111,62 @@ describe('Upgrader Contract Testing', async () => {
|
|
|
172
111
|
expect(newWasmHash).toBeDefined();
|
|
173
112
|
});
|
|
174
113
|
|
|
175
|
-
it('Test Upgrader Contract Can
|
|
114
|
+
it('Test Upgrader Contract Can Upgrade DVN with Multisig Auth', async () => {
|
|
176
115
|
console.log('🔄 Testing upgrader contract call...');
|
|
177
116
|
console.log(' Contract address:', testContractAddress);
|
|
178
117
|
console.log(' New WASM hash:', newWasmHash);
|
|
179
118
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
// 1. Build transaction using generated client (don't auto-simulate)
|
|
186
|
-
const assembledTx = await upgraderClient.upgrade_and_migrate(
|
|
187
|
-
{
|
|
188
|
-
contract_address: testContractAddress,
|
|
189
|
-
wasm_hash: Buffer.from(newWasmHash, 'hex'),
|
|
190
|
-
migration_data: xdr.ScVal.scvU32(counterValue).toXDR(),
|
|
191
|
-
},
|
|
192
|
-
{
|
|
193
|
-
simulate: false, // Don't simulate yet
|
|
194
|
-
},
|
|
195
|
-
);
|
|
196
|
-
|
|
197
|
-
console.log('✅ Transaction built with generated client');
|
|
198
|
-
|
|
199
|
-
// Build the transaction from the raw builder
|
|
200
|
-
const rawTx = assembledTx.raw!.build();
|
|
201
|
-
|
|
202
|
-
console.log('✅ Raw transaction built');
|
|
119
|
+
const upgradeTx = await upgraderClient.upgrade_and_migrate({
|
|
120
|
+
contract_address: testContractAddress,
|
|
121
|
+
wasm_hash: Buffer.from(newWasmHash, 'hex'),
|
|
122
|
+
migration_data: xdr.ScVal.scvVoid().toXDR(),
|
|
123
|
+
});
|
|
203
124
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
125
|
+
await signDvnAuthEntries(
|
|
126
|
+
testContractAddress,
|
|
127
|
+
DVN_VID,
|
|
128
|
+
DEFAULT_DEPLOYER,
|
|
129
|
+
[DVN_SIGNER],
|
|
130
|
+
upgradeTx,
|
|
131
|
+
NETWORK_PASSPHRASE,
|
|
209
132
|
);
|
|
210
133
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
console.log('✅ Transaction simulated with record_allow_nonroot');
|
|
216
|
-
console.log(' Auth entries returned:', sim.result?.auth?.length ?? 0);
|
|
217
|
-
|
|
218
|
-
// 3. Sign auth entries manually (high-level API doesn't see them after injection)
|
|
219
|
-
const latestLedger = sim.latestLedger;
|
|
220
|
-
const validUntilLedger = latestLedger + 100;
|
|
221
|
-
|
|
222
|
-
if (sim.result && sim.result.auth) {
|
|
223
|
-
sim.result.auth = await Promise.all(
|
|
224
|
-
sim.result.auth.map(async (entry) => {
|
|
225
|
-
// Source account credentials are already signed by tx envelope
|
|
226
|
-
if (
|
|
227
|
-
entry.credentials().switch() ===
|
|
228
|
-
xdr.SorobanCredentialsType.sorobanCredentialsSourceAccount()
|
|
229
|
-
) {
|
|
230
|
-
console.log(' Skipping source account auth entry');
|
|
231
|
-
return entry;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
// Address credentials need explicit signature
|
|
235
|
-
const addr = Address.fromScAddress(
|
|
236
|
-
entry.credentials().address().address(),
|
|
237
|
-
).toString();
|
|
238
|
-
|
|
239
|
-
console.log(' Signing auth entry for address:', addr);
|
|
134
|
+
await upgradeTx.signAndSend();
|
|
135
|
+
console.log('✅ Upgrade transaction completed');
|
|
136
|
+
});
|
|
240
137
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
138
|
+
it('Verify Test Contract V2 test_upgrade_version After Upgrade', async () => {
|
|
139
|
+
const server = new rpc.Server(RPC_URL, { allowHttp: true });
|
|
140
|
+
const account = await server.getAccount(DEFAULT_DEPLOYER.publicKey());
|
|
141
|
+
const contract = new Contract(testContractAddress);
|
|
142
|
+
const tx = new TransactionBuilder(account, {
|
|
143
|
+
fee: BASE_FEE,
|
|
144
|
+
networkPassphrase: NETWORK_PASSPHRASE,
|
|
145
|
+
})
|
|
146
|
+
.addOperation(contract.call('test_upgrade_version'))
|
|
147
|
+
.setTimeout(30)
|
|
148
|
+
.build();
|
|
250
149
|
|
|
251
|
-
|
|
252
|
-
|
|
150
|
+
const simulated = await server.simulateTransaction(tx);
|
|
151
|
+
if (rpc.Api.isSimulationError(simulated)) {
|
|
152
|
+
throw new Error(
|
|
153
|
+
`test_upgrade_version simulation failed: ${JSON.stringify(simulated)}`,
|
|
253
154
|
);
|
|
254
|
-
console.log('✅ Auth entries signed');
|
|
255
155
|
}
|
|
256
156
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
const finalTx = finalTxBuilder.build();
|
|
260
|
-
|
|
261
|
-
console.log('✅ Final transaction assembled');
|
|
262
|
-
|
|
263
|
-
// 5. Sign the transaction envelope
|
|
264
|
-
finalTx.sign(DEFAULT_DEPLOYER);
|
|
265
|
-
|
|
266
|
-
console.log('✅ Transaction envelope signed');
|
|
267
|
-
|
|
268
|
-
// 6. Send and poll
|
|
269
|
-
const sentResult = await server.sendTransaction(finalTx);
|
|
270
|
-
|
|
271
|
-
if (sentResult.status !== 'PENDING') {
|
|
272
|
-
throw new Error(`Transaction failed to send: ${JSON.stringify(sentResult)}`);
|
|
157
|
+
if (!simulated.result?.retval) {
|
|
158
|
+
throw new Error('No return value from test_upgrade_version');
|
|
273
159
|
}
|
|
274
160
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
const txResult = await server.pollTransaction(sentResult.hash);
|
|
278
|
-
|
|
279
|
-
console.log('✅ Upgrade transaction completed');
|
|
280
|
-
console.log(' Transaction status:', txResult.status);
|
|
281
|
-
|
|
282
|
-
expect(txResult.status).toBe('SUCCESS');
|
|
283
|
-
});
|
|
284
|
-
|
|
285
|
-
it('Verify Test Contract V2 Counter2 After Upgrade', async () => {
|
|
286
|
-
// After upgrade, the contract should have counter2() function that returns 2
|
|
287
|
-
const { result } = await dummyContractClient.counter2();
|
|
288
|
-
console.log('✅ Test Contract V2 counter2 value:', result);
|
|
161
|
+
const result = scValToNative(simulated.result.retval) as number;
|
|
162
|
+
console.log('✅ Test Contract V2 test_upgrade_version value:', result);
|
|
289
163
|
expect(result).toBe(2);
|
|
290
164
|
});
|
|
291
165
|
|
|
292
|
-
it('Verify Test Contract V1
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
expect(result).toBe(1);
|
|
166
|
+
it('Verify Test Contract V1 Methods Still Work After Upgrade', async () => {
|
|
167
|
+
const { result } = await dvnClient.vid();
|
|
168
|
+
console.log('✅ Test Contract V2 vid value (from V1):', result);
|
|
169
|
+
expect(result).toBe(DVN_VID);
|
|
297
170
|
});
|
|
298
171
|
});
|
|
299
172
|
});
|
package/sdk/test/utils.ts
CHANGED
|
@@ -113,6 +113,46 @@ export async function getNativeBalance(accountAddress: string): Promise<bigint>
|
|
|
113
113
|
return getTokenBalance(accountAddress, NATIVE_TOKEN_ADDRESS);
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
+
/**
|
|
117
|
+
* Helper to check if an account is authorized on a SAC (Stellar Asset Contract).
|
|
118
|
+
* Calls the SAC's `authorized()` method directly.
|
|
119
|
+
*
|
|
120
|
+
* @param accountAddress - The account to check authorization for
|
|
121
|
+
* @param tokenAddress - The SAC contract address
|
|
122
|
+
*/
|
|
123
|
+
export async function getTokenAuthorized(
|
|
124
|
+
accountAddress: string,
|
|
125
|
+
tokenAddress: string,
|
|
126
|
+
): Promise<boolean> {
|
|
127
|
+
const server = new rpc.Server(RPC_URL, { allowHttp: true });
|
|
128
|
+
const tokenContract = new Contract(tokenAddress);
|
|
129
|
+
|
|
130
|
+
const authorizedOp = tokenContract.call(
|
|
131
|
+
'authorized',
|
|
132
|
+
nativeToScVal(Address.fromString(accountAddress), { type: 'address' }),
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
const account = await server.getAccount(DEFAULT_DEPLOYER.publicKey());
|
|
136
|
+
const tx = new TransactionBuilder(account, {
|
|
137
|
+
fee: BASE_FEE,
|
|
138
|
+
networkPassphrase: NETWORK_PASSPHRASE,
|
|
139
|
+
})
|
|
140
|
+
.addOperation(authorizedOp)
|
|
141
|
+
.setTimeout(30)
|
|
142
|
+
.build();
|
|
143
|
+
|
|
144
|
+
const simulated = await server.simulateTransaction(tx);
|
|
145
|
+
if (rpc.Api.isSimulationError(simulated)) {
|
|
146
|
+
throw new Error(`Authorized query failed: ${JSON.stringify(simulated)}`);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const result = (simulated as rpc.Api.SimulateTransactionSuccessResponse).result;
|
|
150
|
+
if (result?.retval) {
|
|
151
|
+
return scValToNative(result.retval) as boolean;
|
|
152
|
+
}
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
|
|
116
156
|
// ============================================================================
|
|
117
157
|
// Secp256k1 Key Pair for DVN Multisig
|
|
118
158
|
// ============================================================================
|