@sidhujag/sysweb3-keyring 1.0.545 → 1.0.547
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/coverage/clover.xml +2875 -0
- package/coverage/coverage-final.json +29468 -0
- package/coverage/lcov-report/base.css +354 -0
- package/coverage/lcov-report/block-navigation.js +85 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +320 -0
- package/coverage/lcov-report/prettify.css +101 -0
- package/coverage/lcov-report/prettify.js +1008 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +191 -0
- package/coverage/lcov-report/src/index.html +276 -0
- package/coverage/lcov-report/src/index.ts.html +114 -0
- package/coverage/lcov-report/src/initial-state.ts.html +558 -0
- package/coverage/lcov-report/src/keyring-manager.ts.html +6279 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/index.html +178 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/index.ts.html +144 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/appClient.ts.html +1560 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/bip32.ts.html +276 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/buffertools.ts.html +495 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/clientCommands.ts.html +1138 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/index.html +363 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkelizedPsbt.ts.html +289 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkle.ts.html +486 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkleMap.ts.html +240 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/policy.ts.html +342 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/psbtv2.ts.html +2388 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/varint.ts.html +453 -0
- package/coverage/lcov-report/src/ledger/consts.ts.html +177 -0
- package/coverage/lcov-report/src/ledger/index.html +216 -0
- package/coverage/lcov-report/src/ledger/index.ts.html +1371 -0
- package/coverage/lcov-report/src/ledger/utils.ts.html +102 -0
- package/coverage/lcov-report/src/signers.ts.html +591 -0
- package/coverage/lcov-report/src/storage.ts.html +198 -0
- package/coverage/lcov-report/src/transactions/ethereum.ts.html +5826 -0
- package/coverage/lcov-report/src/transactions/index.html +216 -0
- package/coverage/lcov-report/src/transactions/index.ts.html +93 -0
- package/coverage/lcov-report/src/transactions/syscoin.ts.html +1521 -0
- package/coverage/lcov-report/src/trezor/index.html +176 -0
- package/coverage/lcov-report/src/trezor/index.ts.html +2655 -0
- package/coverage/lcov-report/src/types.ts.html +1443 -0
- package/coverage/lcov-report/src/utils/derivation-paths.ts.html +486 -0
- package/coverage/lcov-report/src/utils/index.html +196 -0
- package/coverage/lcov-report/src/utils/psbt.ts.html +159 -0
- package/coverage/lcov-report/test/helpers/constants.ts.html +627 -0
- package/coverage/lcov-report/test/helpers/index.html +176 -0
- package/coverage/lcov.info +4832 -0
- package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/appClient.js +1 -124
- package/dist/cjs/ledger/bitcoin_client/lib/appClient.js.map +1 -0
- package/{cjs → dist/cjs}/transactions/ethereum.js +6 -2
- package/dist/cjs/transactions/ethereum.js.map +1 -0
- package/dist/package.json +50 -0
- package/{types → dist/types}/ledger/bitcoin_client/lib/appClient.d.ts +0 -6
- package/examples/basic-usage.js +140 -0
- package/jest.config.js +32 -0
- package/package.json +31 -13
- package/readme.md +201 -0
- package/src/declare.d.ts +7 -0
- package/src/errorUtils.ts +83 -0
- package/src/hardware-wallet-manager.ts +655 -0
- package/src/index.ts +12 -0
- package/src/initial-state.ts +108 -0
- package/src/keyring-manager.ts +2698 -0
- package/src/ledger/bitcoin_client/index.ts +19 -0
- package/src/ledger/bitcoin_client/lib/appClient.ts +405 -0
- package/src/ledger/bitcoin_client/lib/bip32.ts +61 -0
- package/src/ledger/bitcoin_client/lib/buffertools.ts +134 -0
- package/src/ledger/bitcoin_client/lib/clientCommands.ts +356 -0
- package/src/ledger/bitcoin_client/lib/constants.ts +12 -0
- package/src/ledger/bitcoin_client/lib/merkelizedPsbt.ts +65 -0
- package/src/ledger/bitcoin_client/lib/merkle.ts +136 -0
- package/src/ledger/bitcoin_client/lib/merkleMap.ts +49 -0
- package/src/ledger/bitcoin_client/lib/policy.ts +91 -0
- package/src/ledger/bitcoin_client/lib/psbtv2.ts +768 -0
- package/src/ledger/bitcoin_client/lib/varint.ts +120 -0
- package/src/ledger/consts.ts +3 -0
- package/src/ledger/index.ts +685 -0
- package/src/ledger/types.ts +74 -0
- package/src/network-utils.ts +99 -0
- package/src/providers.ts +345 -0
- package/src/signers.ts +158 -0
- package/src/storage.ts +63 -0
- package/src/transactions/__tests__/integration.test.ts +303 -0
- package/src/transactions/__tests__/syscoin.test.ts +409 -0
- package/src/transactions/ethereum.ts +2503 -0
- package/src/transactions/index.ts +2 -0
- package/src/transactions/syscoin.ts +542 -0
- package/src/trezor/index.ts +1050 -0
- package/src/types.ts +366 -0
- package/src/utils/derivation-paths.ts +133 -0
- package/src/utils/psbt.ts +24 -0
- package/src/utils.ts +191 -0
- package/test/README.md +158 -0
- package/test/__mocks__/ledger-mock.js +20 -0
- package/test/__mocks__/trezor-mock.js +75 -0
- package/test/cleanup-summary.md +167 -0
- package/test/helpers/README.md +78 -0
- package/test/helpers/constants.ts +79 -0
- package/test/helpers/setup.ts +714 -0
- package/test/integration/import-validation.spec.ts +588 -0
- package/test/unit/hardware/ledger.spec.ts +869 -0
- package/test/unit/hardware/trezor.spec.ts +828 -0
- package/test/unit/keyring-manager/account-management.spec.ts +970 -0
- package/test/unit/keyring-manager/import-watchonly.spec.ts +181 -0
- package/test/unit/keyring-manager/import-wif.spec.ts +126 -0
- package/test/unit/keyring-manager/initialization.spec.ts +782 -0
- package/test/unit/keyring-manager/key-derivation.spec.ts +996 -0
- package/test/unit/keyring-manager/security.spec.ts +505 -0
- package/test/unit/keyring-manager/state-management.spec.ts +375 -0
- package/test/unit/network/network-management.spec.ts +372 -0
- package/test/unit/transactions/ethereum-transactions.spec.ts +382 -0
- package/test/unit/transactions/syscoin-transactions.spec.ts +615 -0
- package/tsconfig.json +14 -0
- package/cjs/ledger/bitcoin_client/lib/appClient.js.map +0 -1
- package/cjs/transactions/ethereum.js.map +0 -1
- /package/{README.md → dist/README.md} +0 -0
- /package/{cjs → dist/cjs}/errorUtils.js +0 -0
- /package/{cjs → dist/cjs}/errorUtils.js.map +0 -0
- /package/{cjs → dist/cjs}/hardware-wallet-manager.js +0 -0
- /package/{cjs → dist/cjs}/hardware-wallet-manager.js.map +0 -0
- /package/{cjs → dist/cjs}/index.js +0 -0
- /package/{cjs → dist/cjs}/index.js.map +0 -0
- /package/{cjs → dist/cjs}/initial-state.js +0 -0
- /package/{cjs → dist/cjs}/initial-state.js.map +0 -0
- /package/{cjs → dist/cjs}/keyring-manager.js +0 -0
- /package/{cjs → dist/cjs}/keyring-manager.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/index.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/index.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/bip32.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/bip32.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/buffertools.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/buffertools.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/clientCommands.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/clientCommands.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/constants.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/constants.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkelizedPsbt.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkelizedPsbt.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkle.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkle.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkleMap.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkleMap.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/policy.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/policy.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/psbtv2.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/psbtv2.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/varint.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/varint.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/consts.js +0 -0
- /package/{cjs → dist/cjs}/ledger/consts.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/index.js +0 -0
- /package/{cjs → dist/cjs}/ledger/index.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/types.js +0 -0
- /package/{cjs → dist/cjs}/ledger/types.js.map +0 -0
- /package/{cjs → dist/cjs}/network-utils.js +0 -0
- /package/{cjs → dist/cjs}/network-utils.js.map +0 -0
- /package/{cjs → dist/cjs}/providers.js +0 -0
- /package/{cjs → dist/cjs}/providers.js.map +0 -0
- /package/{cjs → dist/cjs}/signers.js +0 -0
- /package/{cjs → dist/cjs}/signers.js.map +0 -0
- /package/{cjs → dist/cjs}/storage.js +0 -0
- /package/{cjs → dist/cjs}/storage.js.map +0 -0
- /package/{cjs → dist/cjs}/transactions/__tests__/integration.test.js +0 -0
- /package/{cjs → dist/cjs}/transactions/__tests__/integration.test.js.map +0 -0
- /package/{cjs → dist/cjs}/transactions/__tests__/syscoin.test.js +0 -0
- /package/{cjs → dist/cjs}/transactions/__tests__/syscoin.test.js.map +0 -0
- /package/{cjs → dist/cjs}/transactions/index.js +0 -0
- /package/{cjs → dist/cjs}/transactions/index.js.map +0 -0
- /package/{cjs → dist/cjs}/transactions/syscoin.js +0 -0
- /package/{cjs → dist/cjs}/transactions/syscoin.js.map +0 -0
- /package/{cjs → dist/cjs}/trezor/index.js +0 -0
- /package/{cjs → dist/cjs}/trezor/index.js.map +0 -0
- /package/{cjs → dist/cjs}/types.js +0 -0
- /package/{cjs → dist/cjs}/types.js.map +0 -0
- /package/{cjs → dist/cjs}/utils/derivation-paths.js +0 -0
- /package/{cjs → dist/cjs}/utils/derivation-paths.js.map +0 -0
- /package/{cjs → dist/cjs}/utils/psbt.js +0 -0
- /package/{cjs → dist/cjs}/utils/psbt.js.map +0 -0
- /package/{cjs → dist/cjs}/utils.js +0 -0
- /package/{cjs → dist/cjs}/utils.js.map +0 -0
- /package/{types → dist/types}/errorUtils.d.ts +0 -0
- /package/{types → dist/types}/hardware-wallet-manager.d.ts +0 -0
- /package/{types → dist/types}/index.d.ts +0 -0
- /package/{types → dist/types}/initial-state.d.ts +0 -0
- /package/{types → dist/types}/keyring-manager.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/index.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/lib/bip32.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/lib/buffertools.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/lib/clientCommands.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/lib/constants.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/lib/merkelizedPsbt.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/lib/merkle.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/lib/merkleMap.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/lib/policy.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/lib/psbtv2.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/lib/varint.d.ts +0 -0
- /package/{types → dist/types}/ledger/consts.d.ts +0 -0
- /package/{types → dist/types}/ledger/index.d.ts +0 -0
- /package/{types → dist/types}/ledger/types.d.ts +0 -0
- /package/{types → dist/types}/network-utils.d.ts +0 -0
- /package/{types → dist/types}/providers.d.ts +0 -0
- /package/{types → dist/types}/signers.d.ts +0 -0
- /package/{types → dist/types}/storage.d.ts +0 -0
- /package/{types → dist/types}/transactions/__tests__/integration.test.d.ts +0 -0
- /package/{types → dist/types}/transactions/__tests__/syscoin.test.d.ts +0 -0
- /package/{types → dist/types}/transactions/ethereum.d.ts +0 -0
- /package/{types → dist/types}/transactions/index.d.ts +0 -0
- /package/{types → dist/types}/transactions/syscoin.d.ts +0 -0
- /package/{types → dist/types}/trezor/index.d.ts +0 -0
- /package/{types → dist/types}/types.d.ts +0 -0
- /package/{types → dist/types}/utils/derivation-paths.d.ts +0 -0
- /package/{types → dist/types}/utils/psbt.d.ts +0 -0
- /package/{types → dist/types}/utils.d.ts +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sidhujag/sysweb3-keyring",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.547",
|
|
4
4
|
"description": "Keyring Manager for UTXO and Web3 Wallets",
|
|
5
5
|
"main": "cjs/index.js",
|
|
6
6
|
"types": "types/index.d.ts",
|
|
@@ -11,13 +11,28 @@
|
|
|
11
11
|
"author": "Pali Wallet",
|
|
12
12
|
"license": "MIT",
|
|
13
13
|
"private": false,
|
|
14
|
+
"engines": {
|
|
15
|
+
"yarn": ">= 1.0.0"
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"prebuild": "rimraf dist/",
|
|
19
|
+
"build": "tsc && tsc -p tsconfig.json",
|
|
20
|
+
"prerelease": "yarn build",
|
|
21
|
+
"copy": "node ../../scripts/package/copy",
|
|
22
|
+
"release:npm": "yarn publish ./dist --access=public --no-git-tag-version",
|
|
23
|
+
"release:preflight": "yarn pack ./dist --dry-run",
|
|
24
|
+
"publishCode": "yarn prebuild && yarn prerelease && yarn copy && yarn release:npm",
|
|
25
|
+
"type-check": "tsc --pretty --noEmit",
|
|
26
|
+
"localTest": "yarn prebuild && yarn build && yarn copy",
|
|
27
|
+
"test": "jest",
|
|
28
|
+
"test:watch": "jest --watch",
|
|
29
|
+
"test:coverage": "jest --coverage"
|
|
30
|
+
},
|
|
14
31
|
"dependencies": {
|
|
15
|
-
"@bitcoinerlab/
|
|
16
|
-
"@bitcoinerlab/secp256k1": "^1.0.5",
|
|
32
|
+
"@bitcoinerlab/secp256k1": "^1.2.0",
|
|
17
33
|
"@ethersproject/abstract-provider": "^5.8.0",
|
|
18
34
|
"@ethersproject/bignumber": "^5.8.0",
|
|
19
35
|
"@ethersproject/bytes": "^5.8.0",
|
|
20
|
-
"@ethersproject/constants": "^5.8.0",
|
|
21
36
|
"@ethersproject/contracts": "^5.8.0",
|
|
22
37
|
"@ethersproject/hdnode": "^5.8.0",
|
|
23
38
|
"@ethersproject/logger": "^5.8.0",
|
|
@@ -27,14 +42,13 @@
|
|
|
27
42
|
"@ethersproject/transactions": "^5.8.0",
|
|
28
43
|
"@ethersproject/units": "^5.8.0",
|
|
29
44
|
"@ethersproject/wallet": "^5.8.0",
|
|
30
|
-
"@ethersproject/web": "^5.8.0",
|
|
31
45
|
"@ledgerhq/hw-app-eth": "^6.45.12",
|
|
32
46
|
"@ledgerhq/hw-transport-webhid": "^6.30.4",
|
|
33
47
|
"@ledgerhq/logs": "^6.10.1",
|
|
34
48
|
"@metamask/eth-sig-util": "^8.2.0",
|
|
35
49
|
"@sidhujag/sysweb3-core": "^1.0.27",
|
|
36
50
|
"@sidhujag/sysweb3-network": "^1.0.105",
|
|
37
|
-
"@sidhujag/sysweb3-utils": "^1.1.
|
|
51
|
+
"@sidhujag/sysweb3-utils": "^1.1.270",
|
|
38
52
|
"@trezor/connect-web": "^9.1.5",
|
|
39
53
|
"@trezor/connect-webextension": "^9.6.2",
|
|
40
54
|
"@trezor/utxo-lib": "^1.0.12",
|
|
@@ -42,16 +56,20 @@
|
|
|
42
56
|
"bitcoin-ops": "^1.4.1",
|
|
43
57
|
"bitcoinjs-lib": "^7.0.0-rc.0",
|
|
44
58
|
"crypto-js": "^4.1.1",
|
|
45
|
-
"
|
|
46
|
-
"eth-json-rpc-filters": "^4.2.2",
|
|
47
|
-
"ethereumjs-util": "^7.1.5",
|
|
48
|
-
"ledger-bitcoin": "^0.2.3",
|
|
49
|
-
"satoshi-bitcoin": "^1.0.5"
|
|
59
|
+
"ethereumjs-util": "^7.1.5"
|
|
50
60
|
},
|
|
51
61
|
"peerDependencies": {
|
|
52
|
-
"syscoinjs-lib": "^1.0.
|
|
62
|
+
"syscoinjs-lib": "^1.0.267"
|
|
53
63
|
},
|
|
54
64
|
"optionalDependencies": {
|
|
55
65
|
"zksync-ethers": "5"
|
|
66
|
+
},
|
|
67
|
+
"devDependencies": {
|
|
68
|
+
"@types/crypto-js": "^4.1.3",
|
|
69
|
+
"@types/node": "^20.8.10",
|
|
70
|
+
"rimraf": "^6.0.1",
|
|
71
|
+
"syscoinjs-lib": "^1.0.267",
|
|
72
|
+
"tslib": "^2.8.1",
|
|
73
|
+
"typescript": "^5.3.3"
|
|
56
74
|
}
|
|
57
|
-
}
|
|
75
|
+
}
|
package/readme.md
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# Sysweb3-keyring
|
|
2
|
+
|
|
3
|
+
A stateless, multi-chain keyring manager for Syscoin and Ethereum-based networks.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The sysweb3-keyring provides a unified interface for managing accounts, transactions, and hardware wallets across Syscoin (UTXO) and Ethereum (EVM) networks. The KeyringManager operates statelessly, relying on external state providers (like Redux) for account and network data.
|
|
8
|
+
|
|
9
|
+
## Key Features
|
|
10
|
+
|
|
11
|
+
- **Stateless Architecture**: No internal state storage - integrates with external state management
|
|
12
|
+
- **Multi-Chain Support**: Handles both UTXO (Syscoin) and EVM (Ethereum) networks
|
|
13
|
+
- **Hardware Wallet Support**: Trezor and Ledger integration
|
|
14
|
+
- **Secure Session Management**: Encrypted private key handling with session transfer
|
|
15
|
+
- **Transaction Management**: Full transaction lifecycle support for both network types
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install @sidhujag/sysweb3-keyring
|
|
21
|
+
# or
|
|
22
|
+
yarn add @sidhujag/sysweb3-keyring
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Usage
|
|
26
|
+
|
|
27
|
+
### Basic Setup
|
|
28
|
+
|
|
29
|
+
```javascript
|
|
30
|
+
import { KeyringManager } from '@sidhujag/sysweb3-keyring';
|
|
31
|
+
|
|
32
|
+
// Create a vault state getter function (e.g., from Redux store)
|
|
33
|
+
const vaultStateGetter = () => store.getState().vault;
|
|
34
|
+
|
|
35
|
+
// Initialize the keyring manager
|
|
36
|
+
const keyringManager = await KeyringManager.createInitialized(
|
|
37
|
+
seedPhrase,
|
|
38
|
+
password,
|
|
39
|
+
vaultStateGetter
|
|
40
|
+
);
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Account Management
|
|
44
|
+
|
|
45
|
+
```javascript
|
|
46
|
+
// Get active account
|
|
47
|
+
const activeAccount = keyringManager.getActiveAccount();
|
|
48
|
+
|
|
49
|
+
// Create new account
|
|
50
|
+
const newAccount = await keyringManager.addNewAccount('My Account');
|
|
51
|
+
|
|
52
|
+
// Switch active account
|
|
53
|
+
await keyringManager.setActiveAccount(accountId, KeyringAccountType.HDAccount);
|
|
54
|
+
|
|
55
|
+
// Import account from private key
|
|
56
|
+
const importedAccount = await keyringManager.importAccount(
|
|
57
|
+
privateKey,
|
|
58
|
+
'Imported Account'
|
|
59
|
+
);
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Network Management
|
|
63
|
+
|
|
64
|
+
```javascript
|
|
65
|
+
// Set network (automatically switches between UTXO/EVM signers)
|
|
66
|
+
await keyringManager.setSignerNetwork(networkConfig);
|
|
67
|
+
|
|
68
|
+
// Get current network
|
|
69
|
+
const network = keyringManager.getNetwork();
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Transaction Operations
|
|
73
|
+
|
|
74
|
+
#### Syscoin (UTXO) Transactions
|
|
75
|
+
|
|
76
|
+
```javascript
|
|
77
|
+
// Estimate transaction fee
|
|
78
|
+
const feeEstimate =
|
|
79
|
+
await keyringManager.syscoinTransaction.getEstimateSysTransactionFee({
|
|
80
|
+
txOptions: {},
|
|
81
|
+
amount: 1.0,
|
|
82
|
+
receivingAddress: 'sys1q...',
|
|
83
|
+
feeRate: 0.00001,
|
|
84
|
+
token: null,
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
// Sign PSBT
|
|
88
|
+
const signedPsbt = await keyringManager.syscoinTransaction.signPSBT({
|
|
89
|
+
psbt: psbtData,
|
|
90
|
+
isTrezor: false,
|
|
91
|
+
isLedger: false,
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// Get addresses
|
|
95
|
+
const receivingAddress = await keyringManager.updateReceivingAddress();
|
|
96
|
+
const changeAddress = await keyringManager.getNewChangeAddress();
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
#### Ethereum (EVM) Transactions
|
|
100
|
+
|
|
101
|
+
```javascript
|
|
102
|
+
// Send transaction
|
|
103
|
+
const txHash = await keyringManager.ethereumTransaction.sendTransaction({
|
|
104
|
+
to: '0x...',
|
|
105
|
+
value: '1000000000000000000', // 1 ETH in wei
|
|
106
|
+
gasLimit: '21000',
|
|
107
|
+
gasPrice: '20000000000', // 20 gwei
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
// Sign message
|
|
111
|
+
const signature = await keyringManager.ethereumTransaction.signPersonalMessage([
|
|
112
|
+
'0x48656c6c6f', // "Hello" in hex
|
|
113
|
+
accountAddress,
|
|
114
|
+
]);
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Hardware Wallet Support
|
|
118
|
+
|
|
119
|
+
```javascript
|
|
120
|
+
// Import Trezor account
|
|
121
|
+
const trezorAccount = await keyringManager.importTrezorAccount(
|
|
122
|
+
'Trezor Account'
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
// Import Ledger account
|
|
126
|
+
const ledgerAccount = await keyringManager.importLedgerAccount(
|
|
127
|
+
false,
|
|
128
|
+
'Ledger Account'
|
|
129
|
+
);
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### State Management Integration
|
|
133
|
+
|
|
134
|
+
The KeyringManager requires a `vaultStateGetter` function that returns the current vault state:
|
|
135
|
+
|
|
136
|
+
```javascript
|
|
137
|
+
// Example with Redux
|
|
138
|
+
const vaultStateGetter = () => ({
|
|
139
|
+
accounts: {
|
|
140
|
+
[KeyringAccountType.HDAccount]: {
|
|
141
|
+
/* account data */
|
|
142
|
+
},
|
|
143
|
+
[KeyringAccountType.Imported]: {
|
|
144
|
+
/* imported accounts */
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
activeAccount: { id: 0, type: KeyringAccountType.HDAccount },
|
|
148
|
+
activeNetwork: {
|
|
149
|
+
/* network config */
|
|
150
|
+
},
|
|
151
|
+
// ... other vault state
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
// The keyring manager will call this function to get current state
|
|
155
|
+
const keyringManager = new KeyringManager();
|
|
156
|
+
keyringManager.setVaultStateGetter(vaultStateGetter);
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Architecture
|
|
160
|
+
|
|
161
|
+
The stateless design means:
|
|
162
|
+
|
|
163
|
+
- **No Internal State**: The KeyringManager doesn't store account or network data
|
|
164
|
+
- **External State Provider**: Relies on your application's state management (Redux, Context, etc.)
|
|
165
|
+
- **Session Management**: Private keys are encrypted and managed securely in memory
|
|
166
|
+
- **Multi-Instance Support**: Multiple KeyringManager instances can operate independently
|
|
167
|
+
|
|
168
|
+
## API Reference
|
|
169
|
+
|
|
170
|
+
### KeyringManager
|
|
171
|
+
|
|
172
|
+
Main class for keyring operations:
|
|
173
|
+
|
|
174
|
+
- `createInitialized(seedPhrase, password, vaultStateGetter)` - Create and initialize keyring
|
|
175
|
+
- `addNewAccount(label?)` - Create new HD account
|
|
176
|
+
- `setActiveAccount(id, type)` - Switch active account
|
|
177
|
+
- `importAccount(privateKey, label?)` - Import account from private key
|
|
178
|
+
- `setSignerNetwork(network)` - Set active network
|
|
179
|
+
- `unlock(password)` - Unlock keyring
|
|
180
|
+
- `lockWallet()` - Lock keyring
|
|
181
|
+
|
|
182
|
+
### Transaction Managers
|
|
183
|
+
|
|
184
|
+
- `syscoinTransaction` - UTXO transaction operations
|
|
185
|
+
- `ethereumTransaction` - EVM transaction operations
|
|
186
|
+
|
|
187
|
+
### Hardware Wallet Support
|
|
188
|
+
|
|
189
|
+
- `importTrezorAccount(label?)` - Import Trezor account
|
|
190
|
+
- `importLedgerAccount(isConnected, label?)` - Import Ledger account
|
|
191
|
+
|
|
192
|
+
## Security
|
|
193
|
+
|
|
194
|
+
- Private keys are encrypted and stored in memory only
|
|
195
|
+
- Session data is cleared when the keyring is locked
|
|
196
|
+
- Hardware wallet integration follows device security models
|
|
197
|
+
- Secure memory management with explicit cleanup
|
|
198
|
+
|
|
199
|
+
## License
|
|
200
|
+
|
|
201
|
+
MIT License
|
package/src/declare.d.ts
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export function handleStatusCodeError(
|
|
2
|
+
statusCode: number,
|
|
3
|
+
errorMessage: string
|
|
4
|
+
) {
|
|
5
|
+
switch (statusCode) {
|
|
6
|
+
case 400:
|
|
7
|
+
console.error({
|
|
8
|
+
errorMessage,
|
|
9
|
+
message:
|
|
10
|
+
'Bad Request: The current provider(RPC) could not understand the request due to invalid syntax.',
|
|
11
|
+
});
|
|
12
|
+
break;
|
|
13
|
+
case 401:
|
|
14
|
+
console.error({
|
|
15
|
+
errorMessage,
|
|
16
|
+
message: 'Unauthorized: The request requires user authentication.',
|
|
17
|
+
});
|
|
18
|
+
break;
|
|
19
|
+
case 403:
|
|
20
|
+
console.error({
|
|
21
|
+
errorMessage,
|
|
22
|
+
message:
|
|
23
|
+
'Forbidden: You do not have the necessary permissions for the resource.',
|
|
24
|
+
});
|
|
25
|
+
break;
|
|
26
|
+
case 404:
|
|
27
|
+
console.error({
|
|
28
|
+
errorMessage,
|
|
29
|
+
message: 'Not Found: The requested RPC method could not be found.',
|
|
30
|
+
});
|
|
31
|
+
break;
|
|
32
|
+
case 405:
|
|
33
|
+
console.error({
|
|
34
|
+
errorMessage,
|
|
35
|
+
message:
|
|
36
|
+
'Method Not Allowed: The request method is known by the current provider but is not supported by the target resource.',
|
|
37
|
+
});
|
|
38
|
+
break;
|
|
39
|
+
case 408:
|
|
40
|
+
console.error({
|
|
41
|
+
errorMessage,
|
|
42
|
+
message:
|
|
43
|
+
'Request Timeout: The current provider(RPC) would like to shut down the unused connection.',
|
|
44
|
+
});
|
|
45
|
+
break;
|
|
46
|
+
case 413:
|
|
47
|
+
console.error({
|
|
48
|
+
errorMessage,
|
|
49
|
+
message:
|
|
50
|
+
'Payload Too Large: The request entity is larger than limits defined by the server.',
|
|
51
|
+
});
|
|
52
|
+
break;
|
|
53
|
+
case 429:
|
|
54
|
+
console.error({
|
|
55
|
+
errorMessage,
|
|
56
|
+
message:
|
|
57
|
+
'The current RPC provider has a low rate-limit. We are applying a cooldown that will affect Pali performance. Modify the RPC URL in the network settings to resolve this issue.',
|
|
58
|
+
});
|
|
59
|
+
throw {
|
|
60
|
+
errorMessage,
|
|
61
|
+
message:
|
|
62
|
+
'The current RPC provider has a low rate-limit. We are applying a cooldown that will affect Pali performance. Modify the RPC URL in the network settings to resolve this issue.',
|
|
63
|
+
};
|
|
64
|
+
case 500:
|
|
65
|
+
console.error({
|
|
66
|
+
errorMessage,
|
|
67
|
+
message:
|
|
68
|
+
'Internal Server Error: The current provider(RPC) encountered an unexpected condition that prevented it from fulfilling the request.',
|
|
69
|
+
});
|
|
70
|
+
break;
|
|
71
|
+
case 503:
|
|
72
|
+
console.error({
|
|
73
|
+
errorMessage,
|
|
74
|
+
message:
|
|
75
|
+
'Service Unavailable: The current provider(RPC) is not ready to handle the request, possibly due to being down for maintenance or overloaded.',
|
|
76
|
+
});
|
|
77
|
+
break;
|
|
78
|
+
default:
|
|
79
|
+
throw {
|
|
80
|
+
message: `Unexpected HTTP status code: ${statusCode}`,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|