@sidhujag/sysweb3-keyring 1.0.547 → 1.0.548
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/package.json +2 -27
- package/coverage/clover.xml +0 -2875
- package/coverage/coverage-final.json +0 -29468
- package/coverage/lcov-report/base.css +0 -354
- package/coverage/lcov-report/block-navigation.js +0 -85
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -320
- package/coverage/lcov-report/prettify.css +0 -101
- package/coverage/lcov-report/prettify.js +0 -1008
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -191
- package/coverage/lcov-report/src/index.html +0 -276
- package/coverage/lcov-report/src/index.ts.html +0 -114
- package/coverage/lcov-report/src/initial-state.ts.html +0 -558
- package/coverage/lcov-report/src/keyring-manager.ts.html +0 -6279
- package/coverage/lcov-report/src/ledger/bitcoin_client/index.html +0 -178
- package/coverage/lcov-report/src/ledger/bitcoin_client/index.ts.html +0 -144
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/appClient.ts.html +0 -1560
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/bip32.ts.html +0 -276
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/buffertools.ts.html +0 -495
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/clientCommands.ts.html +0 -1138
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/index.html +0 -363
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkelizedPsbt.ts.html +0 -289
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkle.ts.html +0 -486
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkleMap.ts.html +0 -240
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/policy.ts.html +0 -342
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/psbtv2.ts.html +0 -2388
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/varint.ts.html +0 -453
- package/coverage/lcov-report/src/ledger/consts.ts.html +0 -177
- package/coverage/lcov-report/src/ledger/index.html +0 -216
- package/coverage/lcov-report/src/ledger/index.ts.html +0 -1371
- package/coverage/lcov-report/src/ledger/utils.ts.html +0 -102
- package/coverage/lcov-report/src/signers.ts.html +0 -591
- package/coverage/lcov-report/src/storage.ts.html +0 -198
- package/coverage/lcov-report/src/transactions/ethereum.ts.html +0 -5826
- package/coverage/lcov-report/src/transactions/index.html +0 -216
- package/coverage/lcov-report/src/transactions/index.ts.html +0 -93
- package/coverage/lcov-report/src/transactions/syscoin.ts.html +0 -1521
- package/coverage/lcov-report/src/trezor/index.html +0 -176
- package/coverage/lcov-report/src/trezor/index.ts.html +0 -2655
- package/coverage/lcov-report/src/types.ts.html +0 -1443
- package/coverage/lcov-report/src/utils/derivation-paths.ts.html +0 -486
- package/coverage/lcov-report/src/utils/index.html +0 -196
- package/coverage/lcov-report/src/utils/psbt.ts.html +0 -159
- package/coverage/lcov-report/test/helpers/constants.ts.html +0 -627
- package/coverage/lcov-report/test/helpers/index.html +0 -176
- package/coverage/lcov.info +0 -4832
- package/dist/package.json +0 -50
- package/examples/basic-usage.js +0 -140
- package/jest.config.js +0 -32
- package/readme.md +0 -201
- package/src/declare.d.ts +0 -7
- package/src/errorUtils.ts +0 -83
- package/src/hardware-wallet-manager.ts +0 -655
- package/src/index.ts +0 -12
- package/src/initial-state.ts +0 -108
- package/src/keyring-manager.ts +0 -2698
- package/src/ledger/bitcoin_client/index.ts +0 -19
- package/src/ledger/bitcoin_client/lib/appClient.ts +0 -405
- package/src/ledger/bitcoin_client/lib/bip32.ts +0 -61
- package/src/ledger/bitcoin_client/lib/buffertools.ts +0 -134
- package/src/ledger/bitcoin_client/lib/clientCommands.ts +0 -356
- package/src/ledger/bitcoin_client/lib/constants.ts +0 -12
- package/src/ledger/bitcoin_client/lib/merkelizedPsbt.ts +0 -65
- package/src/ledger/bitcoin_client/lib/merkle.ts +0 -136
- package/src/ledger/bitcoin_client/lib/merkleMap.ts +0 -49
- package/src/ledger/bitcoin_client/lib/policy.ts +0 -91
- package/src/ledger/bitcoin_client/lib/psbtv2.ts +0 -768
- package/src/ledger/bitcoin_client/lib/varint.ts +0 -120
- package/src/ledger/consts.ts +0 -3
- package/src/ledger/index.ts +0 -685
- package/src/ledger/types.ts +0 -74
- package/src/network-utils.ts +0 -99
- package/src/providers.ts +0 -345
- package/src/signers.ts +0 -158
- package/src/storage.ts +0 -63
- package/src/transactions/__tests__/integration.test.ts +0 -303
- package/src/transactions/__tests__/syscoin.test.ts +0 -409
- package/src/transactions/ethereum.ts +0 -2503
- package/src/transactions/index.ts +0 -2
- package/src/transactions/syscoin.ts +0 -542
- package/src/trezor/index.ts +0 -1050
- package/src/types.ts +0 -366
- package/src/utils/derivation-paths.ts +0 -133
- package/src/utils/psbt.ts +0 -24
- package/src/utils.ts +0 -191
- package/test/README.md +0 -158
- package/test/__mocks__/ledger-mock.js +0 -20
- package/test/__mocks__/trezor-mock.js +0 -75
- package/test/cleanup-summary.md +0 -167
- package/test/helpers/README.md +0 -78
- package/test/helpers/constants.ts +0 -79
- package/test/helpers/setup.ts +0 -714
- package/test/integration/import-validation.spec.ts +0 -588
- package/test/unit/hardware/ledger.spec.ts +0 -869
- package/test/unit/hardware/trezor.spec.ts +0 -828
- package/test/unit/keyring-manager/account-management.spec.ts +0 -970
- package/test/unit/keyring-manager/import-watchonly.spec.ts +0 -181
- package/test/unit/keyring-manager/import-wif.spec.ts +0 -126
- package/test/unit/keyring-manager/initialization.spec.ts +0 -782
- package/test/unit/keyring-manager/key-derivation.spec.ts +0 -996
- package/test/unit/keyring-manager/security.spec.ts +0 -505
- package/test/unit/keyring-manager/state-management.spec.ts +0 -375
- package/test/unit/network/network-management.spec.ts +0 -372
- package/test/unit/transactions/ethereum-transactions.spec.ts +0 -382
- package/test/unit/transactions/syscoin-transactions.spec.ts +0 -615
- package/tsconfig.json +0 -14
- /package/{dist/README.md → README.md} +0 -0
- /package/{dist/cjs → cjs}/errorUtils.js +0 -0
- /package/{dist/cjs → cjs}/errorUtils.js.map +0 -0
- /package/{dist/cjs → cjs}/hardware-wallet-manager.js +0 -0
- /package/{dist/cjs → cjs}/hardware-wallet-manager.js.map +0 -0
- /package/{dist/cjs → cjs}/index.js +0 -0
- /package/{dist/cjs → cjs}/index.js.map +0 -0
- /package/{dist/cjs → cjs}/initial-state.js +0 -0
- /package/{dist/cjs → cjs}/initial-state.js.map +0 -0
- /package/{dist/cjs → cjs}/keyring-manager.js +0 -0
- /package/{dist/cjs → cjs}/keyring-manager.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/index.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/index.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/appClient.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/appClient.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/bip32.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/bip32.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/buffertools.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/buffertools.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/clientCommands.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/clientCommands.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/constants.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/constants.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkelizedPsbt.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkelizedPsbt.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkle.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkle.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkleMap.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkleMap.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/policy.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/policy.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/psbtv2.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/psbtv2.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/varint.js +0 -0
- /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/varint.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/consts.js +0 -0
- /package/{dist/cjs → cjs}/ledger/consts.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/index.js +0 -0
- /package/{dist/cjs → cjs}/ledger/index.js.map +0 -0
- /package/{dist/cjs → cjs}/ledger/types.js +0 -0
- /package/{dist/cjs → cjs}/ledger/types.js.map +0 -0
- /package/{dist/cjs → cjs}/network-utils.js +0 -0
- /package/{dist/cjs → cjs}/network-utils.js.map +0 -0
- /package/{dist/cjs → cjs}/providers.js +0 -0
- /package/{dist/cjs → cjs}/providers.js.map +0 -0
- /package/{dist/cjs → cjs}/signers.js +0 -0
- /package/{dist/cjs → cjs}/signers.js.map +0 -0
- /package/{dist/cjs → cjs}/storage.js +0 -0
- /package/{dist/cjs → cjs}/storage.js.map +0 -0
- /package/{dist/cjs → cjs}/transactions/__tests__/integration.test.js +0 -0
- /package/{dist/cjs → cjs}/transactions/__tests__/integration.test.js.map +0 -0
- /package/{dist/cjs → cjs}/transactions/__tests__/syscoin.test.js +0 -0
- /package/{dist/cjs → cjs}/transactions/__tests__/syscoin.test.js.map +0 -0
- /package/{dist/cjs → cjs}/transactions/ethereum.js +0 -0
- /package/{dist/cjs → cjs}/transactions/ethereum.js.map +0 -0
- /package/{dist/cjs → cjs}/transactions/index.js +0 -0
- /package/{dist/cjs → cjs}/transactions/index.js.map +0 -0
- /package/{dist/cjs → cjs}/transactions/syscoin.js +0 -0
- /package/{dist/cjs → cjs}/transactions/syscoin.js.map +0 -0
- /package/{dist/cjs → cjs}/trezor/index.js +0 -0
- /package/{dist/cjs → cjs}/trezor/index.js.map +0 -0
- /package/{dist/cjs → cjs}/types.js +0 -0
- /package/{dist/cjs → cjs}/types.js.map +0 -0
- /package/{dist/cjs → cjs}/utils/derivation-paths.js +0 -0
- /package/{dist/cjs → cjs}/utils/derivation-paths.js.map +0 -0
- /package/{dist/cjs → cjs}/utils/psbt.js +0 -0
- /package/{dist/cjs → cjs}/utils/psbt.js.map +0 -0
- /package/{dist/cjs → cjs}/utils.js +0 -0
- /package/{dist/cjs → cjs}/utils.js.map +0 -0
- /package/{dist/types → types}/errorUtils.d.ts +0 -0
- /package/{dist/types → types}/hardware-wallet-manager.d.ts +0 -0
- /package/{dist/types → types}/index.d.ts +0 -0
- /package/{dist/types → types}/initial-state.d.ts +0 -0
- /package/{dist/types → types}/keyring-manager.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/index.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/appClient.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/bip32.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/buffertools.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/clientCommands.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/constants.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/merkelizedPsbt.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/merkle.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/merkleMap.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/policy.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/psbtv2.d.ts +0 -0
- /package/{dist/types → types}/ledger/bitcoin_client/lib/varint.d.ts +0 -0
- /package/{dist/types → types}/ledger/consts.d.ts +0 -0
- /package/{dist/types → types}/ledger/index.d.ts +0 -0
- /package/{dist/types → types}/ledger/types.d.ts +0 -0
- /package/{dist/types → types}/network-utils.d.ts +0 -0
- /package/{dist/types → types}/providers.d.ts +0 -0
- /package/{dist/types → types}/signers.d.ts +0 -0
- /package/{dist/types → types}/storage.d.ts +0 -0
- /package/{dist/types → types}/transactions/__tests__/integration.test.d.ts +0 -0
- /package/{dist/types → types}/transactions/__tests__/syscoin.test.d.ts +0 -0
- /package/{dist/types → types}/transactions/ethereum.d.ts +0 -0
- /package/{dist/types → types}/transactions/index.d.ts +0 -0
- /package/{dist/types → types}/transactions/syscoin.d.ts +0 -0
- /package/{dist/types → types}/trezor/index.d.ts +0 -0
- /package/{dist/types → types}/types.d.ts +0 -0
- /package/{dist/types → types}/utils/derivation-paths.d.ts +0 -0
- /package/{dist/types → types}/utils/psbt.d.ts +0 -0
- /package/{dist/types → types}/utils.d.ts +0 -0
|
@@ -1,372 +0,0 @@
|
|
|
1
|
-
import { INetworkType, INetwork } from '@sidhujag/sysweb3-network';
|
|
2
|
-
|
|
3
|
-
import { KeyringManager, KeyringAccountType } from '../../../src';
|
|
4
|
-
import { FAKE_PASSWORD, PEACE_SEED_PHRASE } from '../../helpers/constants';
|
|
5
|
-
import { setupMocks } from '../../helpers/setup';
|
|
6
|
-
|
|
7
|
-
describe('Network Management', () => {
|
|
8
|
-
let keyringManager: KeyringManager;
|
|
9
|
-
let mockVaultStateGetter: jest.Mock;
|
|
10
|
-
let currentVaultState: any;
|
|
11
|
-
|
|
12
|
-
beforeEach(async () => {
|
|
13
|
-
setupMocks();
|
|
14
|
-
// Set up vault-keys that would normally be created by Pali's MainController
|
|
15
|
-
await setupTestVault(FAKE_PASSWORD);
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
describe('EVM Network Switching', () => {
|
|
19
|
-
beforeEach(async () => {
|
|
20
|
-
// Set up EVM vault state with Ethereum mainnet
|
|
21
|
-
currentVaultState = createMockVaultState({
|
|
22
|
-
activeAccountId: 0,
|
|
23
|
-
activeAccountType: KeyringAccountType.HDAccount,
|
|
24
|
-
networkType: INetworkType.Ethereum,
|
|
25
|
-
chainId: 1,
|
|
26
|
-
});
|
|
27
|
-
mockVaultStateGetter = jest.fn(() => currentVaultState);
|
|
28
|
-
|
|
29
|
-
keyringManager = await KeyringManager.createInitialized(
|
|
30
|
-
PEACE_SEED_PHRASE,
|
|
31
|
-
FAKE_PASSWORD,
|
|
32
|
-
mockVaultStateGetter
|
|
33
|
-
);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it('should switch between EVM networks', async () => {
|
|
37
|
-
// Start with Ethereum mainnet
|
|
38
|
-
expect(keyringManager.getNetwork().chainId).toBe(1);
|
|
39
|
-
|
|
40
|
-
// Switch to Polygon
|
|
41
|
-
const polygon = currentVaultState.networks.ethereum[137];
|
|
42
|
-
const result = await keyringManager.setSignerNetwork(polygon);
|
|
43
|
-
|
|
44
|
-
// Update mock vault state to simulate Redux state update
|
|
45
|
-
currentVaultState.activeNetwork = polygon;
|
|
46
|
-
|
|
47
|
-
expect(result.success).toBe(true);
|
|
48
|
-
expect(keyringManager.getNetwork().chainId).toBe(137);
|
|
49
|
-
expect(keyringManager.getNetwork().label).toBe('Polygon');
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
it('should preserve accounts when switching EVM networks', async () => {
|
|
53
|
-
// Add accounts on Ethereum
|
|
54
|
-
const account1 = await keyringManager.addNewAccount('Test Account');
|
|
55
|
-
const originalAddress = account1.address;
|
|
56
|
-
|
|
57
|
-
// Update vault state to include the new account
|
|
58
|
-
currentVaultState.accounts[KeyringAccountType.HDAccount][1] = {
|
|
59
|
-
id: 1,
|
|
60
|
-
label: 'Test Account',
|
|
61
|
-
address: account1.address,
|
|
62
|
-
xpub: account1.xpub,
|
|
63
|
-
xprv: '',
|
|
64
|
-
isImported: false,
|
|
65
|
-
isTrezorWallet: false,
|
|
66
|
-
isLedgerWallet: false,
|
|
67
|
-
balances: { syscoin: 0, ethereum: 0 },
|
|
68
|
-
assets: { syscoin: [], ethereum: [] },
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
// Switch to Polygon
|
|
72
|
-
const polygon = currentVaultState.networks.ethereum[137];
|
|
73
|
-
await keyringManager.setSignerNetwork(polygon);
|
|
74
|
-
|
|
75
|
-
// Account should still exist with same address
|
|
76
|
-
const account = keyringManager.getAccountById(
|
|
77
|
-
1,
|
|
78
|
-
KeyringAccountType.HDAccount
|
|
79
|
-
);
|
|
80
|
-
expect(account.address).toBe(originalAddress);
|
|
81
|
-
expect(account.label).toBe('Test Account');
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
it('should update provider when switching networks', async () => {
|
|
85
|
-
const ethereum = keyringManager.getNetwork();
|
|
86
|
-
expect(ethereum.url).toContain('rpc.ankr.com/eth');
|
|
87
|
-
|
|
88
|
-
// Switch to Mumbai testnet
|
|
89
|
-
const mumbai = currentVaultState.networks.ethereum[80001];
|
|
90
|
-
await keyringManager.setSignerNetwork(mumbai);
|
|
91
|
-
|
|
92
|
-
// Update mock vault state to simulate Redux state update
|
|
93
|
-
currentVaultState.activeNetwork = mumbai;
|
|
94
|
-
|
|
95
|
-
const network = keyringManager.getNetwork();
|
|
96
|
-
expect(network.url).toContain('rpc-mumbai.maticvigil.com');
|
|
97
|
-
expect(network.chainId).toBe(80001);
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
it('should handle rapid network switching', async () => {
|
|
101
|
-
const networks = [
|
|
102
|
-
currentVaultState.networks.ethereum[1], // Ethereum
|
|
103
|
-
currentVaultState.networks.ethereum[137], // Polygon
|
|
104
|
-
currentVaultState.networks.ethereum[80001], // Mumbai
|
|
105
|
-
];
|
|
106
|
-
|
|
107
|
-
// Rapid switching
|
|
108
|
-
for (const network of networks) {
|
|
109
|
-
const result = await keyringManager.setSignerNetwork(network);
|
|
110
|
-
|
|
111
|
-
// Update mock vault state to simulate Redux state update
|
|
112
|
-
currentVaultState.activeNetwork = network;
|
|
113
|
-
|
|
114
|
-
expect(result.success).toBe(true);
|
|
115
|
-
expect(keyringManager.getNetwork().chainId).toBe(network.chainId);
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
describe('Multi-Keyring Architecture Constraints', () => {
|
|
121
|
-
it('should prevent UTXO to UTXO network switching', async () => {
|
|
122
|
-
// Create Syscoin keyring
|
|
123
|
-
currentVaultState = createMockVaultState({
|
|
124
|
-
activeAccountId: 0,
|
|
125
|
-
activeAccountType: KeyringAccountType.HDAccount,
|
|
126
|
-
networkType: INetworkType.Syscoin,
|
|
127
|
-
chainId: 57,
|
|
128
|
-
});
|
|
129
|
-
mockVaultStateGetter = jest.fn(() => currentVaultState);
|
|
130
|
-
|
|
131
|
-
keyringManager = await KeyringManager.createInitialized(
|
|
132
|
-
PEACE_SEED_PHRASE,
|
|
133
|
-
FAKE_PASSWORD,
|
|
134
|
-
mockVaultStateGetter
|
|
135
|
-
);
|
|
136
|
-
|
|
137
|
-
// Try to switch to Bitcoin (different UTXO network)
|
|
138
|
-
const bitcoin: INetwork = {
|
|
139
|
-
chainId: 0,
|
|
140
|
-
currency: 'BTC',
|
|
141
|
-
label: 'Bitcoin',
|
|
142
|
-
url: 'https://blockstream.info',
|
|
143
|
-
kind: INetworkType.Syscoin, // UTXO type
|
|
144
|
-
slip44: 0, // Different slip44
|
|
145
|
-
explorer: '',
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
await expect(keyringManager.setSignerNetwork(bitcoin)).rejects.toThrow(
|
|
149
|
-
'Cannot switch between different UTXO networks'
|
|
150
|
-
);
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
it('should prevent EVM to UTXO chain type switching', async () => {
|
|
154
|
-
// Create EVM keyring
|
|
155
|
-
currentVaultState = createMockVaultState({
|
|
156
|
-
activeAccountId: 0,
|
|
157
|
-
activeAccountType: KeyringAccountType.HDAccount,
|
|
158
|
-
networkType: INetworkType.Ethereum,
|
|
159
|
-
chainId: 1,
|
|
160
|
-
});
|
|
161
|
-
mockVaultStateGetter = jest.fn(() => currentVaultState);
|
|
162
|
-
|
|
163
|
-
keyringManager = await KeyringManager.createInitialized(
|
|
164
|
-
PEACE_SEED_PHRASE,
|
|
165
|
-
FAKE_PASSWORD,
|
|
166
|
-
mockVaultStateGetter
|
|
167
|
-
);
|
|
168
|
-
|
|
169
|
-
// Try to switch to Syscoin
|
|
170
|
-
const syscoin = currentVaultState.networks.syscoin[57];
|
|
171
|
-
|
|
172
|
-
await expect(keyringManager.setSignerNetwork(syscoin)).rejects.toThrow(
|
|
173
|
-
'Cannot use Syscoin chain type with Ethereum network'
|
|
174
|
-
);
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
it('should maintain separate keyring instances per UTXO network', async () => {
|
|
178
|
-
// Create Syscoin mainnet keyring with mainnet network setup
|
|
179
|
-
const syscoinMainnetVaultState = createMockVaultState({
|
|
180
|
-
activeAccountId: 0,
|
|
181
|
-
activeAccountType: KeyringAccountType.HDAccount,
|
|
182
|
-
networkType: INetworkType.Syscoin,
|
|
183
|
-
chainId: 57,
|
|
184
|
-
});
|
|
185
|
-
// Set up mainnet-specific network in vault state
|
|
186
|
-
syscoinMainnetVaultState.activeNetwork = {
|
|
187
|
-
...syscoinMainnetVaultState.networks.syscoin[57],
|
|
188
|
-
chainId: 57,
|
|
189
|
-
label: 'Syscoin Mainnet',
|
|
190
|
-
};
|
|
191
|
-
const syscoinMainnetVaultGetter = jest.fn(() => syscoinMainnetVaultState);
|
|
192
|
-
|
|
193
|
-
const syscoinKeyring = await KeyringManager.createInitialized(
|
|
194
|
-
PEACE_SEED_PHRASE,
|
|
195
|
-
FAKE_PASSWORD,
|
|
196
|
-
syscoinMainnetVaultGetter
|
|
197
|
-
);
|
|
198
|
-
|
|
199
|
-
// Create Syscoin testnet keyring with testnet network setup
|
|
200
|
-
const syscoinTestnetVaultState = createMockVaultState({
|
|
201
|
-
activeAccountId: 0,
|
|
202
|
-
activeAccountType: KeyringAccountType.HDAccount,
|
|
203
|
-
networkType: INetworkType.Syscoin,
|
|
204
|
-
chainId: 5700,
|
|
205
|
-
});
|
|
206
|
-
// Set up testnet-specific network in vault state
|
|
207
|
-
syscoinTestnetVaultState.activeNetwork = {
|
|
208
|
-
...syscoinTestnetVaultState.networks.syscoin[5700],
|
|
209
|
-
chainId: 5700,
|
|
210
|
-
label: 'Syscoin Testnet',
|
|
211
|
-
};
|
|
212
|
-
const syscoinTestnetVaultGetter = jest.fn(() => syscoinTestnetVaultState);
|
|
213
|
-
|
|
214
|
-
const syscoinTestnetKeyring = await KeyringManager.createInitialized(
|
|
215
|
-
PEACE_SEED_PHRASE,
|
|
216
|
-
FAKE_PASSWORD,
|
|
217
|
-
syscoinTestnetVaultGetter
|
|
218
|
-
);
|
|
219
|
-
|
|
220
|
-
// They should be independent instances
|
|
221
|
-
expect(syscoinKeyring.getNetwork().chainId).toBe(57);
|
|
222
|
-
expect(syscoinTestnetKeyring.getNetwork().chainId).toBe(5700);
|
|
223
|
-
|
|
224
|
-
// Accounts should be valid Syscoin addresses
|
|
225
|
-
const mainnetAccount = syscoinKeyring.getActiveAccount().activeAccount;
|
|
226
|
-
const testnetAccount =
|
|
227
|
-
syscoinTestnetKeyring.getActiveAccount().activeAccount;
|
|
228
|
-
|
|
229
|
-
// Mainnet should use sys1 prefix, testnet should use tsys1 prefix
|
|
230
|
-
expect(mainnetAccount.address.startsWith('sys1')).toBe(true);
|
|
231
|
-
expect(testnetAccount.address.startsWith('tsys1')).toBe(true);
|
|
232
|
-
|
|
233
|
-
// xpub formats should be different for different networks
|
|
234
|
-
// Mainnet uses zpub format, testnet uses vpub format
|
|
235
|
-
// This is correct behavior - same seed but different network encodings
|
|
236
|
-
expect(mainnetAccount.xpub.startsWith('zpub')).toBe(true); // Mainnet format
|
|
237
|
-
expect(testnetAccount.xpub.startsWith('vpub')).toBe(true); // Testnet format
|
|
238
|
-
expect(mainnetAccount.xpub).not.toBe(testnetAccount.xpub); // Different formats
|
|
239
|
-
});
|
|
240
|
-
});
|
|
241
|
-
|
|
242
|
-
describe('Network State Synchronization', () => {
|
|
243
|
-
beforeEach(async () => {
|
|
244
|
-
// Set up EVM vault state
|
|
245
|
-
currentVaultState = createMockVaultState({
|
|
246
|
-
activeAccountId: 0,
|
|
247
|
-
activeAccountType: KeyringAccountType.HDAccount,
|
|
248
|
-
networkType: INetworkType.Ethereum,
|
|
249
|
-
chainId: 1,
|
|
250
|
-
});
|
|
251
|
-
mockVaultStateGetter = jest.fn(() => currentVaultState);
|
|
252
|
-
|
|
253
|
-
keyringManager = await KeyringManager.createInitialized(
|
|
254
|
-
PEACE_SEED_PHRASE,
|
|
255
|
-
FAKE_PASSWORD,
|
|
256
|
-
mockVaultStateGetter
|
|
257
|
-
);
|
|
258
|
-
});
|
|
259
|
-
|
|
260
|
-
it('should persist network changes in vault state', async () => {
|
|
261
|
-
const polygon = currentVaultState.networks.ethereum[137];
|
|
262
|
-
await keyringManager.setSignerNetwork(polygon);
|
|
263
|
-
|
|
264
|
-
// Update mock vault state to simulate Redux state update
|
|
265
|
-
currentVaultState.activeNetwork = polygon;
|
|
266
|
-
|
|
267
|
-
// Verify the network has changed
|
|
268
|
-
const currentNetwork = keyringManager.getNetwork();
|
|
269
|
-
expect(currentNetwork.chainId).toBe(137);
|
|
270
|
-
expect(currentNetwork.label).toBe('Polygon');
|
|
271
|
-
});
|
|
272
|
-
|
|
273
|
-
it('should clear RPC caches on network switch', async () => {
|
|
274
|
-
// clearRpcCaches is already being called during network switching
|
|
275
|
-
// We can verify this by checking that network switching works successfully
|
|
276
|
-
const polygon = currentVaultState.networks.ethereum[137];
|
|
277
|
-
const result = await keyringManager.setSignerNetwork(polygon);
|
|
278
|
-
|
|
279
|
-
// Update mock vault state to simulate Redux state update
|
|
280
|
-
currentVaultState.activeNetwork = polygon;
|
|
281
|
-
|
|
282
|
-
expect(result.success).toBe(true);
|
|
283
|
-
expect(keyringManager.getNetwork().chainId).toBe(137);
|
|
284
|
-
});
|
|
285
|
-
|
|
286
|
-
it('should handle network switching with existing accounts', async () => {
|
|
287
|
-
// Create accounts on Ethereum
|
|
288
|
-
const account2 = await keyringManager.addNewAccount('Account 2');
|
|
289
|
-
const imported = await keyringManager.importAccount(
|
|
290
|
-
'0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318'
|
|
291
|
-
);
|
|
292
|
-
|
|
293
|
-
// Update vault state to include these accounts
|
|
294
|
-
currentVaultState.accounts[KeyringAccountType.HDAccount][1] = {
|
|
295
|
-
id: 1,
|
|
296
|
-
label: 'Account 2',
|
|
297
|
-
address: account2.address,
|
|
298
|
-
xpub: account2.xpub,
|
|
299
|
-
xprv: '',
|
|
300
|
-
isImported: false,
|
|
301
|
-
isTrezorWallet: false,
|
|
302
|
-
isLedgerWallet: false,
|
|
303
|
-
balances: { syscoin: 0, ethereum: 0 },
|
|
304
|
-
assets: { syscoin: [], ethereum: [] },
|
|
305
|
-
};
|
|
306
|
-
currentVaultState.accounts[KeyringAccountType.Imported][0] = {
|
|
307
|
-
id: 0,
|
|
308
|
-
label: 'Imported 1',
|
|
309
|
-
address: imported.address,
|
|
310
|
-
xpub: imported.xpub,
|
|
311
|
-
xprv: imported.xprv,
|
|
312
|
-
isImported: true,
|
|
313
|
-
isTrezorWallet: false,
|
|
314
|
-
isLedgerWallet: false,
|
|
315
|
-
balances: { syscoin: 0, ethereum: 0 },
|
|
316
|
-
assets: { syscoin: [], ethereum: [] },
|
|
317
|
-
};
|
|
318
|
-
|
|
319
|
-
// Switch network
|
|
320
|
-
const polygon = currentVaultState.networks.ethereum[137];
|
|
321
|
-
await keyringManager.setSignerNetwork(polygon);
|
|
322
|
-
|
|
323
|
-
// All accounts should still exist
|
|
324
|
-
const hdAccount = keyringManager.getAccountById(
|
|
325
|
-
1,
|
|
326
|
-
KeyringAccountType.HDAccount
|
|
327
|
-
);
|
|
328
|
-
expect(hdAccount.label).toBe('Account 2');
|
|
329
|
-
|
|
330
|
-
const importedAccount = keyringManager.getAccountById(
|
|
331
|
-
0,
|
|
332
|
-
KeyringAccountType.Imported
|
|
333
|
-
);
|
|
334
|
-
expect(importedAccount.address).toBe(imported.address);
|
|
335
|
-
});
|
|
336
|
-
});
|
|
337
|
-
|
|
338
|
-
describe('Network Error Handling', () => {
|
|
339
|
-
beforeEach(async () => {
|
|
340
|
-
// Set up EVM vault state
|
|
341
|
-
currentVaultState = createMockVaultState({
|
|
342
|
-
activeAccountId: 0,
|
|
343
|
-
activeAccountType: KeyringAccountType.HDAccount,
|
|
344
|
-
networkType: INetworkType.Ethereum,
|
|
345
|
-
chainId: 1,
|
|
346
|
-
});
|
|
347
|
-
mockVaultStateGetter = jest.fn(() => currentVaultState);
|
|
348
|
-
|
|
349
|
-
keyringManager = await KeyringManager.createInitialized(
|
|
350
|
-
PEACE_SEED_PHRASE,
|
|
351
|
-
FAKE_PASSWORD,
|
|
352
|
-
mockVaultStateGetter
|
|
353
|
-
);
|
|
354
|
-
});
|
|
355
|
-
|
|
356
|
-
it('should handle invalid chain type', async () => {
|
|
357
|
-
const invalidNetwork: INetwork = {
|
|
358
|
-
chainId: 999,
|
|
359
|
-
currency: 'INVALID',
|
|
360
|
-
label: 'Invalid Network',
|
|
361
|
-
url: 'http://invalid',
|
|
362
|
-
kind: 'INVALID' as any,
|
|
363
|
-
explorer: '',
|
|
364
|
-
slip44: 60,
|
|
365
|
-
};
|
|
366
|
-
|
|
367
|
-
await expect(
|
|
368
|
-
keyringManager.setSignerNetwork(invalidNetwork)
|
|
369
|
-
).rejects.toThrow('Unsupported chain');
|
|
370
|
-
});
|
|
371
|
-
});
|
|
372
|
-
});
|