@sidhujag/sysweb3-keyring 1.0.491
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/README.md +201 -0
- package/cjs/errorUtils.js +75 -0
- package/cjs/errorUtils.js.map +1 -0
- package/cjs/hardware-wallet-manager.js +462 -0
- package/cjs/hardware-wallet-manager.js.map +1 -0
- package/cjs/index.js +31 -0
- package/cjs/index.js.map +1 -0
- package/cjs/initial-state.js +105 -0
- package/cjs/initial-state.js.map +1 -0
- package/cjs/keyring-manager.js +1687 -0
- package/cjs/keyring-manager.js.map +1 -0
- package/cjs/ledger/bitcoin_client/index.js +47 -0
- package/cjs/ledger/bitcoin_client/index.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/appClient.js +408 -0
- package/cjs/ledger/bitcoin_client/lib/appClient.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/bip32.js +61 -0
- package/cjs/ledger/bitcoin_client/lib/bip32.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/buffertools.js +126 -0
- package/cjs/ledger/bitcoin_client/lib/buffertools.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/clientCommands.js +270 -0
- package/cjs/ledger/bitcoin_client/lib/clientCommands.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/constants.js +16 -0
- package/cjs/ledger/bitcoin_client/lib/constants.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/merkelizedPsbt.js +54 -0
- package/cjs/ledger/bitcoin_client/lib/merkelizedPsbt.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/merkle.js +109 -0
- package/cjs/ledger/bitcoin_client/lib/merkle.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/merkleMap.js +46 -0
- package/cjs/ledger/bitcoin_client/lib/merkleMap.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/policy.js +66 -0
- package/cjs/ledger/bitcoin_client/lib/policy.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/psbtv2.js +640 -0
- package/cjs/ledger/bitcoin_client/lib/psbtv2.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/varint.js +113 -0
- package/cjs/ledger/bitcoin_client/lib/varint.js.map +1 -0
- package/cjs/ledger/consts.js +7 -0
- package/cjs/ledger/consts.js.map +1 -0
- package/cjs/ledger/index.js +319 -0
- package/cjs/ledger/index.js.map +1 -0
- package/cjs/ledger/types.js +3 -0
- package/cjs/ledger/types.js.map +1 -0
- package/cjs/network-utils.js +76 -0
- package/cjs/network-utils.js.map +1 -0
- package/cjs/providers.js +270 -0
- package/cjs/providers.js.map +1 -0
- package/cjs/signers.js +64 -0
- package/cjs/signers.js.map +1 -0
- package/cjs/storage.js +30 -0
- package/cjs/storage.js.map +1 -0
- package/cjs/transactions/__tests__/integration.test.js +237 -0
- package/cjs/transactions/__tests__/integration.test.js.map +1 -0
- package/cjs/transactions/__tests__/syscoin.test.js +361 -0
- package/cjs/transactions/__tests__/syscoin.test.js.map +1 -0
- package/cjs/transactions/ethereum.js +1577 -0
- package/cjs/transactions/ethereum.js.map +1 -0
- package/cjs/transactions/index.js +19 -0
- package/cjs/transactions/index.js.map +1 -0
- package/cjs/transactions/syscoin.js +328 -0
- package/cjs/transactions/syscoin.js.map +1 -0
- package/cjs/trezor/index.js +718 -0
- package/cjs/trezor/index.js.map +1 -0
- package/cjs/types.js +12 -0
- package/cjs/types.js.map +1 -0
- package/cjs/utils/derivation-paths.js +99 -0
- package/cjs/utils/derivation-paths.js.map +1 -0
- package/cjs/utils/psbt.js +60 -0
- package/cjs/utils/psbt.js.map +1 -0
- package/cjs/utils.js +130 -0
- package/cjs/utils.js.map +1 -0
- package/package.json +46 -0
- package/types/errorUtils.d.ts +1 -0
- package/types/hardware-wallet-manager.d.ts +110 -0
- package/types/index.d.ts +12 -0
- package/types/initial-state.d.ts +79 -0
- package/types/keyring-manager.d.ts +184 -0
- package/types/ledger/bitcoin_client/index.d.ts +5 -0
- package/types/ledger/bitcoin_client/lib/appClient.d.ts +106 -0
- package/types/ledger/bitcoin_client/lib/bip32.d.ts +11 -0
- package/types/ledger/bitcoin_client/lib/buffertools.d.ts +28 -0
- package/types/ledger/bitcoin_client/lib/clientCommands.d.ts +77 -0
- package/types/ledger/bitcoin_client/lib/constants.d.ts +12 -0
- package/types/ledger/bitcoin_client/lib/merkelizedPsbt.d.ts +24 -0
- package/types/ledger/bitcoin_client/lib/merkle.d.ts +32 -0
- package/types/ledger/bitcoin_client/lib/merkleMap.d.ts +23 -0
- package/types/ledger/bitcoin_client/lib/policy.d.ts +36 -0
- package/types/ledger/bitcoin_client/lib/psbtv2.d.ts +167 -0
- package/types/ledger/bitcoin_client/lib/varint.d.ts +23 -0
- package/types/ledger/consts.d.ts +3 -0
- package/types/ledger/index.d.ts +51 -0
- package/types/ledger/types.d.ts +48 -0
- package/types/network-utils.d.ts +14 -0
- package/types/providers.d.ts +47 -0
- package/types/signers.d.ts +95 -0
- package/types/storage.d.ts +2 -0
- package/types/transactions/__tests__/integration.test.d.ts +1 -0
- package/types/transactions/__tests__/syscoin.test.d.ts +1 -0
- package/types/transactions/ethereum.d.ts +80 -0
- package/types/transactions/index.d.ts +2 -0
- package/types/transactions/syscoin.d.ts +61 -0
- package/types/trezor/index.d.ts +170 -0
- package/types/types.d.ts +294 -0
- package/types/utils/derivation-paths.d.ts +35 -0
- package/types/utils/psbt.d.ts +17 -0
- package/types/utils.d.ts +4 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sanitizeBigintToNumber = sanitizeBigintToNumber;
|
|
4
|
+
exports.parseVarint = parseVarint;
|
|
5
|
+
exports.createVarint = createVarint;
|
|
6
|
+
function bigintToSmallEndian(value, length, buffer, offset) {
|
|
7
|
+
for (let i = 0; i < length; i++) {
|
|
8
|
+
if (buffer[i + offset] == undefined) {
|
|
9
|
+
throw Error('Buffer too small');
|
|
10
|
+
}
|
|
11
|
+
buffer[i + offset] = Number(value % BigInt(256));
|
|
12
|
+
value = value >> BigInt(8);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function smallEndianToBigint(buffer, offset, length) {
|
|
16
|
+
let result = BigInt(0);
|
|
17
|
+
for (let i = 0; i < length; i++) {
|
|
18
|
+
if (buffer[i + offset] == undefined) {
|
|
19
|
+
throw Error('Buffer too small');
|
|
20
|
+
}
|
|
21
|
+
result += BigInt(buffer[i + offset]) << BigInt(i * 8);
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Converts a `bigint` to a `number` if it non-negative and at most MAX_SAFE_INTEGER; throws `RangeError` otherwise.
|
|
27
|
+
* Used when converting a Bitcoin-style varint to a `number`, since varints could be larger than what the `Number`
|
|
28
|
+
* class can represent without loss of precision.
|
|
29
|
+
*
|
|
30
|
+
* @param n the number to convert
|
|
31
|
+
* @returns `n` as a `number`
|
|
32
|
+
*/
|
|
33
|
+
function sanitizeBigintToNumber(n) {
|
|
34
|
+
if (n < 0)
|
|
35
|
+
throw RangeError('Negative bigint is not a valid varint');
|
|
36
|
+
if (n > Number.MAX_SAFE_INTEGER)
|
|
37
|
+
throw RangeError('Too large for a Number');
|
|
38
|
+
return Number(n);
|
|
39
|
+
}
|
|
40
|
+
function getVarintSize(value) {
|
|
41
|
+
if (typeof value === 'number') {
|
|
42
|
+
value = sanitizeBigintToNumber(value);
|
|
43
|
+
}
|
|
44
|
+
if (value < BigInt(0)) {
|
|
45
|
+
throw new RangeError('Negative numbers are not supported');
|
|
46
|
+
}
|
|
47
|
+
if (value >= BigInt(1) << BigInt(64)) {
|
|
48
|
+
throw new RangeError('Too large for a Bitcoin-style varint');
|
|
49
|
+
}
|
|
50
|
+
if (value < BigInt(0xfd))
|
|
51
|
+
return 1;
|
|
52
|
+
else if (value <= BigInt(0xffff))
|
|
53
|
+
return 3;
|
|
54
|
+
else if (value <= BigInt(0xffffffff))
|
|
55
|
+
return 5;
|
|
56
|
+
else
|
|
57
|
+
return 9;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Parses a Bitcoin-style variable length integer from a buffer, starting at the given `offset`. Returns a pair
|
|
61
|
+
* containing the parsed `BigInt`, and its length in bytes from the buffer.
|
|
62
|
+
*
|
|
63
|
+
* @param data the `Buffer` from which the variable-length integer is read
|
|
64
|
+
* @param offset a non-negative offset to read from
|
|
65
|
+
* @returns a pair where the first element is the parsed BigInt, and the second element is the length in bytes parsed
|
|
66
|
+
* from the buffer.
|
|
67
|
+
*
|
|
68
|
+
* @throws `RangeError` if offset is negative.
|
|
69
|
+
* @throws `Error` if the buffer's end is reached withut parsing being completed.
|
|
70
|
+
*/
|
|
71
|
+
function parseVarint(data, offset) {
|
|
72
|
+
if (offset < 0) {
|
|
73
|
+
throw RangeError('Negative offset is invalid');
|
|
74
|
+
}
|
|
75
|
+
if (data[offset] == undefined) {
|
|
76
|
+
throw Error('Buffer too small');
|
|
77
|
+
}
|
|
78
|
+
if (data[offset] < 0xfd) {
|
|
79
|
+
return [BigInt(data[offset]), 1];
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
let size;
|
|
83
|
+
if (data[offset] === 0xfd)
|
|
84
|
+
size = 2;
|
|
85
|
+
else if (data[offset] === 0xfe)
|
|
86
|
+
size = 4;
|
|
87
|
+
else
|
|
88
|
+
size = 8;
|
|
89
|
+
return [smallEndianToBigint(data, offset + 1, size), size + 1];
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function createVarint(value) {
|
|
93
|
+
if (typeof value === 'number') {
|
|
94
|
+
value = sanitizeBigintToNumber(value);
|
|
95
|
+
}
|
|
96
|
+
const size = getVarintSize(value);
|
|
97
|
+
value = BigInt(value);
|
|
98
|
+
const buffer = Buffer.alloc(size);
|
|
99
|
+
if (size == 1) {
|
|
100
|
+
buffer[0] = Number(value);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
if (size == 3)
|
|
104
|
+
buffer[0] = 0xfd;
|
|
105
|
+
else if (size === 5)
|
|
106
|
+
buffer[0] = 0xfe;
|
|
107
|
+
else
|
|
108
|
+
buffer[0] = 0xff;
|
|
109
|
+
bigintToSmallEndian(value, size - 1, buffer, 1);
|
|
110
|
+
}
|
|
111
|
+
return buffer;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=varint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"varint.js","sourceRoot":"","sources":["../../../../../src/ledger/bitcoin_client/lib/varint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WILL_NOT_DISPLAY = exports.RECEIVING_ADDRESS_INDEX = exports.DESCRIPTOR = void 0;
|
|
4
|
+
exports.DESCRIPTOR = 'wpkh(@0/**)';
|
|
5
|
+
exports.RECEIVING_ADDRESS_INDEX = 0;
|
|
6
|
+
exports.WILL_NOT_DISPLAY = false;
|
|
7
|
+
//# sourceMappingURL=consts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../../../src/ledger/consts.ts"],"names":[],"mappings":";;;AAAa,QAAA,UAAU,GAAG,aAAa,CAAC;AAC3B,QAAA,uBAAuB,GAAG,CAAC,CAAC;AAC5B,QAAA,gBAAgB,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.LedgerKeyring = void 0;
|
|
37
|
+
const bitcoin_client_1 = __importStar(require("./bitcoin_client"));
|
|
38
|
+
const consts_1 = require("./consts");
|
|
39
|
+
const bip32_1 = require("@trezor/utxo-lib/lib/bip32");
|
|
40
|
+
const hw_app_eth_1 = __importStar(require("@ledgerhq/hw-app-eth"));
|
|
41
|
+
const eth_sig_util_1 = require("eth-sig-util");
|
|
42
|
+
const derivation_paths_1 = require("../utils/derivation-paths");
|
|
43
|
+
const syscoinjs_lib_1 = require("syscoinjs-lib");
|
|
44
|
+
const hardware_wallet_manager_1 = require("../hardware-wallet-manager");
|
|
45
|
+
class LedgerKeyring {
|
|
46
|
+
constructor() {
|
|
47
|
+
this.hdPath = "m/44'/57'/0'/0/0";
|
|
48
|
+
this.transport = null;
|
|
49
|
+
this.getUtxoAddress = async ({ coin, index, // account index
|
|
50
|
+
slip44, showInLedger, }) => {
|
|
51
|
+
return this.executeWithRetry(async () => {
|
|
52
|
+
const fingerprint = await this.ledgerUtxoClient.getMasterFingerprint();
|
|
53
|
+
const xpub = await this.getXpub({ index, coin, slip44 });
|
|
54
|
+
this.setHdPath(coin, index, slip44);
|
|
55
|
+
const xpubWithDescriptor = `[${this.hdPath}]${xpub}`.replace('m', fingerprint);
|
|
56
|
+
const walletPolicy = new bitcoin_client_1.DefaultWalletPolicy(consts_1.DESCRIPTOR, xpubWithDescriptor);
|
|
57
|
+
const address = await this.ledgerUtxoClient.getWalletAddress(walletPolicy, null, consts_1.RECEIVING_ADDRESS_INDEX, index, showInLedger ? showInLedger : consts_1.WILL_NOT_DISPLAY);
|
|
58
|
+
return address;
|
|
59
|
+
}, 'getUtxoAddress');
|
|
60
|
+
};
|
|
61
|
+
this.verifyUtxoAddress = async (accountIndex, currency, slip44) => await this.getUtxoAddress({
|
|
62
|
+
coin: currency,
|
|
63
|
+
index: accountIndex,
|
|
64
|
+
slip44: slip44,
|
|
65
|
+
showInLedger: true,
|
|
66
|
+
});
|
|
67
|
+
this.getXpub = async ({ index, coin, slip44, }) => {
|
|
68
|
+
return this.executeWithRetry(async () => {
|
|
69
|
+
this.setHdPath(coin, index, slip44);
|
|
70
|
+
const xpub = await this.ledgerUtxoClient.getExtendedPubkey(this.hdPath, consts_1.WILL_NOT_DISPLAY);
|
|
71
|
+
// Always return raw xpub - descriptor format is built inline where needed
|
|
72
|
+
return xpub;
|
|
73
|
+
}, 'getXpub');
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Sign a UTXO message - public method used by transaction classes
|
|
77
|
+
*/
|
|
78
|
+
this.signUtxoMessage = async (path, message) => {
|
|
79
|
+
return this.executeWithRetry(async () => {
|
|
80
|
+
const bufferMessage = Buffer.from(message);
|
|
81
|
+
const signature = await this.ledgerUtxoClient.signMessage(bufferMessage, path);
|
|
82
|
+
return signature;
|
|
83
|
+
}, 'signUtxoMessage');
|
|
84
|
+
};
|
|
85
|
+
this.signEVMTransaction = async ({ rawTx, accountIndex, }) => {
|
|
86
|
+
return this.executeWithRetry(async () => {
|
|
87
|
+
this.setHdPath('eth', accountIndex, 60);
|
|
88
|
+
const resolution = await hw_app_eth_1.ledgerService.resolveTransaction(rawTx, {}, {});
|
|
89
|
+
const signature = await this.ledgerEVMClient.signTransaction(this.hdPath.replace(/^m\//, ''), // Remove 'm/' prefix for EVM
|
|
90
|
+
rawTx, resolution);
|
|
91
|
+
return signature;
|
|
92
|
+
}, 'signEVMTransaction');
|
|
93
|
+
};
|
|
94
|
+
this.signPersonalMessage = async ({ message, accountIndex, }) => {
|
|
95
|
+
return this.executeWithRetry(async () => {
|
|
96
|
+
this.setHdPath('eth', accountIndex, 60);
|
|
97
|
+
const signature = await this.ledgerEVMClient.signPersonalMessage(this.hdPath.replace(/^m\//, ''), // Remove 'm/' prefix for EVM
|
|
98
|
+
message);
|
|
99
|
+
return `0x${signature.r}${signature.s}${signature.v.toString(16)}`;
|
|
100
|
+
}, 'signPersonalMessage');
|
|
101
|
+
};
|
|
102
|
+
this.transformTypedData = (data, metamaskV4Compat) => {
|
|
103
|
+
if (!metamaskV4Compat) {
|
|
104
|
+
throw new Error('Ledger: Only version 4 of typed data signing is supported');
|
|
105
|
+
}
|
|
106
|
+
const { types, primaryType, domain, message } = this.sanitizeData(data);
|
|
107
|
+
const domainSeparatorHash = eth_sig_util_1.TypedDataUtils.hashStruct('EIP712Domain', this.sanitizeData(domain), types, true).toString('hex');
|
|
108
|
+
let messageHash = null;
|
|
109
|
+
if (primaryType !== 'EIP712Domain') {
|
|
110
|
+
messageHash = eth_sig_util_1.TypedDataUtils.hashStruct(primaryType, this.sanitizeData(message), types, true).toString('hex');
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
domain_separator_hash: domainSeparatorHash,
|
|
114
|
+
message_hash: messageHash,
|
|
115
|
+
...data,
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
this.getEvmAddressAndPubKey = async ({ accountIndex, }) => {
|
|
119
|
+
return this.executeWithRetry(async () => {
|
|
120
|
+
this.setHdPath('eth', accountIndex, 60);
|
|
121
|
+
const { address, publicKey } = await this.ledgerEVMClient.getAddress(this.hdPath.replace(/^m\//, '') // Remove 'm/' prefix for EVM
|
|
122
|
+
);
|
|
123
|
+
return { address, publicKey };
|
|
124
|
+
}, 'getEvmAddressAndPubKey');
|
|
125
|
+
};
|
|
126
|
+
this.signTypedData = async ({ version, data, accountIndex, }) => {
|
|
127
|
+
return this.executeWithRetry(async () => {
|
|
128
|
+
this.setHdPath('eth', accountIndex, 60);
|
|
129
|
+
const dataWithHashes = this.transformTypedData(data, version === 'V4');
|
|
130
|
+
const { domain_separator_hash, message_hash } = dataWithHashes;
|
|
131
|
+
const signature = await this.ledgerEVMClient.signEIP712HashedMessage(this.hdPath.replace(/^m\//, ''), // Remove 'm/' prefix for EVM
|
|
132
|
+
domain_separator_hash, message_hash ? message_hash : '');
|
|
133
|
+
return `0x${signature.r}${signature.s}${signature.v.toString(16)}`;
|
|
134
|
+
}, 'signTypedData');
|
|
135
|
+
};
|
|
136
|
+
this.getMasterFingerprint = async () => {
|
|
137
|
+
try {
|
|
138
|
+
const masterFingerprint = await this.ledgerUtxoClient.getMasterFingerprint();
|
|
139
|
+
return masterFingerprint;
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
console.log('Fingerprint error: ', error);
|
|
143
|
+
throw error;
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
this.hardwareWalletManager = new hardware_wallet_manager_1.HardwareWalletManager();
|
|
147
|
+
// Set up event listeners
|
|
148
|
+
this.hardwareWalletManager.on('connected', ({ type }) => {
|
|
149
|
+
if (type === hardware_wallet_manager_1.HardwareWalletType.LEDGER) {
|
|
150
|
+
console.log('Ledger connected');
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
this.hardwareWalletManager.on('disconnected', ({ type }) => {
|
|
154
|
+
if (type === hardware_wallet_manager_1.HardwareWalletType.LEDGER) {
|
|
155
|
+
console.log('Ledger disconnected');
|
|
156
|
+
this.transport = null;
|
|
157
|
+
// Clear clients on disconnect
|
|
158
|
+
this.ledgerEVMClient = null;
|
|
159
|
+
this.ledgerUtxoClient = null;
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
this.hardwareWalletManager.on('connectionFailed', ({ type, error }) => {
|
|
163
|
+
if (type === hardware_wallet_manager_1.HardwareWalletType.LEDGER) {
|
|
164
|
+
console.error('Ledger connection failed:', error);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
this.evm = {
|
|
168
|
+
getEvmAddressAndPubKey: this.getEvmAddressAndPubKey,
|
|
169
|
+
signEVMTransaction: this.signEVMTransaction,
|
|
170
|
+
signPersonalMessage: this.signPersonalMessage,
|
|
171
|
+
signTypedData: this.signTypedData,
|
|
172
|
+
};
|
|
173
|
+
this.utxo = {
|
|
174
|
+
getUtxoAddress: this.getUtxoAddress,
|
|
175
|
+
getXpub: this.getXpub,
|
|
176
|
+
verifyUtxoAddress: this.verifyUtxoAddress,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Ensure Ledger is connected with automatic retry
|
|
181
|
+
* Note: This is automatically called by all operations through executeWithRetry
|
|
182
|
+
* External callers don't need to call this directly
|
|
183
|
+
*/
|
|
184
|
+
async ensureConnection() {
|
|
185
|
+
await this.hardwareWalletManager.ensureConnection(hardware_wallet_manager_1.HardwareWalletType.LEDGER);
|
|
186
|
+
this.transport = await this.hardwareWalletManager.getLedgerConnection();
|
|
187
|
+
// Create clients if transport is available
|
|
188
|
+
if (this.transport && (!this.ledgerEVMClient || !this.ledgerUtxoClient)) {
|
|
189
|
+
this.ledgerEVMClient = new hw_app_eth_1.default(this.transport);
|
|
190
|
+
this.ledgerUtxoClient = new bitcoin_client_1.default(this.transport);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
sanitizeData(data) {
|
|
194
|
+
switch (Object.prototype.toString.call(data)) {
|
|
195
|
+
case '[object Object]': {
|
|
196
|
+
const entries = Object.keys(data).map((k) => [
|
|
197
|
+
k,
|
|
198
|
+
this.sanitizeData(data[k]),
|
|
199
|
+
]);
|
|
200
|
+
return Object.fromEntries(entries);
|
|
201
|
+
}
|
|
202
|
+
case '[object Array]':
|
|
203
|
+
return data.map((v) => this.sanitizeData(v));
|
|
204
|
+
case '[object BigInt]':
|
|
205
|
+
return data.toString();
|
|
206
|
+
default:
|
|
207
|
+
return data;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
setHdPath(coin, accountIndex, slip44) {
|
|
211
|
+
if ((0, derivation_paths_1.isEvmCoin)(coin, slip44)) {
|
|
212
|
+
// For EVM, the "accountIndex" parameter is actually used as the address index
|
|
213
|
+
// EVM typically uses account 0, and different addresses are at different address indices
|
|
214
|
+
this.hdPath = (0, derivation_paths_1.getAddressDerivationPath)(coin, slip44, 0, // account is always 0 for EVM
|
|
215
|
+
false, // not a change address
|
|
216
|
+
accountIndex // this is actually the address index for EVM
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
// For UTXO, use account-level derivation path
|
|
221
|
+
this.hdPath = (0, derivation_paths_1.getAccountDerivationPath)(coin, slip44, accountIndex);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Convert PSBT to Ledger format with retry logic
|
|
226
|
+
*/
|
|
227
|
+
async convertToLedgerFormat(psbt, accountXpub, accountId, currency, slip44) {
|
|
228
|
+
return this.executeWithRetry(async () => {
|
|
229
|
+
// Ensure Ledger is connected before attempting operations
|
|
230
|
+
// This is now handled by executeWithRetry
|
|
231
|
+
// Create BIP32 node from account xpub
|
|
232
|
+
const accountNode = (0, bip32_1.fromBase58)(accountXpub);
|
|
233
|
+
// Get master fingerprint
|
|
234
|
+
const fingerprint = await this.getMasterFingerprint();
|
|
235
|
+
// Enhance each input with bip32Derivation
|
|
236
|
+
for (let i = 0; i < psbt.inputCount; i++) {
|
|
237
|
+
const dataInput = psbt.data.inputs[i];
|
|
238
|
+
// Skip if already has bip32Derivation
|
|
239
|
+
if (dataInput.bip32Derivation && dataInput.bip32Derivation.length > 0) {
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
// Ensure witnessUtxo is present if nonWitnessUtxo exists
|
|
243
|
+
if (!dataInput.witnessUtxo && dataInput.nonWitnessUtxo) {
|
|
244
|
+
const txBuffer = dataInput.nonWitnessUtxo;
|
|
245
|
+
const tx = syscoinjs_lib_1.Transaction.fromBuffer(txBuffer);
|
|
246
|
+
const vout = psbt.txInputs[i].index;
|
|
247
|
+
if (tx.outs[vout]) {
|
|
248
|
+
dataInput.witnessUtxo = {
|
|
249
|
+
script: tx.outs[vout].script,
|
|
250
|
+
value: tx.outs[vout].value,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// Extract path from unknownKeyVals
|
|
255
|
+
if (dataInput.unknownKeyVals &&
|
|
256
|
+
dataInput.unknownKeyVals.length > 1 &&
|
|
257
|
+
dataInput.unknownKeyVals[1].key.equals(Buffer.from('path'))) {
|
|
258
|
+
const fullPath = dataInput.unknownKeyVals[1].value.toString();
|
|
259
|
+
const accountPath = (0, derivation_paths_1.getAccountDerivationPath)(currency, slip44, accountId);
|
|
260
|
+
const relativePath = fullPath
|
|
261
|
+
.replace(accountPath, '')
|
|
262
|
+
.replace(/^\//, '');
|
|
263
|
+
const derivationTokens = relativePath.split('/').filter((t) => t);
|
|
264
|
+
const derivedAccount = derivationTokens.reduce((acc, token) => {
|
|
265
|
+
const index = parseInt(token);
|
|
266
|
+
if (isNaN(index)) {
|
|
267
|
+
return acc;
|
|
268
|
+
}
|
|
269
|
+
return acc.derive(index);
|
|
270
|
+
}, accountNode);
|
|
271
|
+
const pubkey = derivedAccount.publicKey;
|
|
272
|
+
if (pubkey && Buffer.isBuffer(pubkey)) {
|
|
273
|
+
// Add the bip32Derivation that Ledger needs
|
|
274
|
+
const bip32Derivation = {
|
|
275
|
+
masterFingerprint: Buffer.from(fingerprint, 'hex'),
|
|
276
|
+
path: fullPath,
|
|
277
|
+
pubkey: pubkey,
|
|
278
|
+
};
|
|
279
|
+
psbt.updateInput(i, {
|
|
280
|
+
bip32Derivation: [bip32Derivation],
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return psbt;
|
|
286
|
+
}, 'convertToLedgerFormat');
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Execute operation with automatic retry
|
|
290
|
+
*/
|
|
291
|
+
async executeWithRetry(operation, operationName) {
|
|
292
|
+
// Ensure connection first
|
|
293
|
+
await this.ensureConnection();
|
|
294
|
+
// Use hardware wallet manager's retry mechanism
|
|
295
|
+
return this.hardwareWalletManager.retryOperation(operation, operationName, {
|
|
296
|
+
maxRetries: 3,
|
|
297
|
+
baseDelay: 1000,
|
|
298
|
+
maxDelay: 5000,
|
|
299
|
+
backoffMultiplier: 2,
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Get hardware wallet status
|
|
304
|
+
*/
|
|
305
|
+
getStatus() {
|
|
306
|
+
return this.hardwareWalletManager
|
|
307
|
+
.getStatus()
|
|
308
|
+
.find((s) => s.type === hardware_wallet_manager_1.HardwareWalletType.LEDGER);
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Clean up resources
|
|
312
|
+
*/
|
|
313
|
+
async destroy() {
|
|
314
|
+
await this.hardwareWalletManager.destroy();
|
|
315
|
+
this.transport = null;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
exports.LedgerKeyring = LedgerKeyring;
|
|
319
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ledger/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ledger/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDefaultUTXONetworks = getDefaultUTXONetworks;
|
|
4
|
+
exports.getSyscoinUTXOMainnetNetwork = getSyscoinUTXOMainnetNetwork;
|
|
5
|
+
exports.getSyscoinUTXOTestnetNetwork = getSyscoinUTXOTestnetNetwork;
|
|
6
|
+
exports.getBitcoinMainnetNetwork = getBitcoinMainnetNetwork;
|
|
7
|
+
const sysweb3_network_1 = require("@sidhujag/sysweb3-network");
|
|
8
|
+
/**
|
|
9
|
+
* Generate default UTXO networks from coins.ts data
|
|
10
|
+
* This ensures consistency and avoids hardcoded duplicates
|
|
11
|
+
*/
|
|
12
|
+
function getDefaultUTXONetworks() {
|
|
13
|
+
const defaultNetworks = {};
|
|
14
|
+
// Filter coins that should be default networks
|
|
15
|
+
const defaultCoins = sysweb3_network_1.coins.filter((coin) => {
|
|
16
|
+
// Include Syscoin mainnet and testnet as defaults
|
|
17
|
+
return ((coin.coinShortcut === 'SYS' && coin.slip44 === 57) || // Syscoin Mainnet
|
|
18
|
+
(coin.coinShortcut === 'tSYS' && coin.slip44 === 1) || // Syscoin Testnet
|
|
19
|
+
(coin.coinShortcut === 'BTC' && coin.slip44 === 0) // Bitcoin Mainnet only
|
|
20
|
+
);
|
|
21
|
+
});
|
|
22
|
+
defaultCoins.forEach((coin) => {
|
|
23
|
+
if (!coin.blockchainLink ||
|
|
24
|
+
!coin.blockchainLink.url ||
|
|
25
|
+
coin.blockchainLink.url.length === 0) {
|
|
26
|
+
return; // Skip coins without valid blockbook URLs
|
|
27
|
+
}
|
|
28
|
+
// Use primary blockbook URL
|
|
29
|
+
const primaryUrl = Array.isArray(coin.blockchainLink.url)
|
|
30
|
+
? coin.blockchainLink.url[0]
|
|
31
|
+
: coin.blockchainLink.url;
|
|
32
|
+
const chainId = coin.chainId || coin.slip44;
|
|
33
|
+
const network = {
|
|
34
|
+
chainId,
|
|
35
|
+
url: primaryUrl,
|
|
36
|
+
label: coin.name || coin.coinLabel || `${coin.coinShortcut} Network`,
|
|
37
|
+
default: coin.coinShortcut === 'SYS',
|
|
38
|
+
currency: coin.coinShortcut?.toLowerCase() || 'unknown',
|
|
39
|
+
slip44: coin.slip44,
|
|
40
|
+
kind: sysweb3_network_1.INetworkType.Syscoin,
|
|
41
|
+
};
|
|
42
|
+
defaultNetworks[chainId] = network;
|
|
43
|
+
});
|
|
44
|
+
return defaultNetworks;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get specific default UTXO networks for backwards compatibility
|
|
48
|
+
*/
|
|
49
|
+
function getSyscoinUTXOMainnetNetwork() {
|
|
50
|
+
const networks = getDefaultUTXONetworks();
|
|
51
|
+
// Find Syscoin mainnet (slip44: 57)
|
|
52
|
+
const syscoinMainnet = Object.values(networks).find((network) => network.slip44 === 57 && network.currency === 'sys');
|
|
53
|
+
if (!syscoinMainnet) {
|
|
54
|
+
throw new Error('Syscoin UTXO Mainnet network not found in coins.ts');
|
|
55
|
+
}
|
|
56
|
+
return syscoinMainnet;
|
|
57
|
+
}
|
|
58
|
+
function getSyscoinUTXOTestnetNetwork() {
|
|
59
|
+
const networks = getDefaultUTXONetworks();
|
|
60
|
+
// Find Syscoin testnet (slip44: 1, currency: tsys)
|
|
61
|
+
const syscoinTestnet = Object.values(networks).find((network) => network.slip44 === 1 && network.currency === 'tsys');
|
|
62
|
+
if (!syscoinTestnet) {
|
|
63
|
+
throw new Error('Syscoin UTXO Testnet network not found in coins.ts');
|
|
64
|
+
}
|
|
65
|
+
return syscoinTestnet;
|
|
66
|
+
}
|
|
67
|
+
function getBitcoinMainnetNetwork() {
|
|
68
|
+
const networks = getDefaultUTXONetworks();
|
|
69
|
+
// Find Bitcoin mainnet (slip44: 0, currency: btc)
|
|
70
|
+
const bitcoinMainnet = Object.values(networks).find((network) => network.slip44 === 0 && network.currency === 'btc');
|
|
71
|
+
if (!bitcoinMainnet) {
|
|
72
|
+
throw new Error('Bitcoin Mainnet network not found in coins.ts');
|
|
73
|
+
}
|
|
74
|
+
return bitcoinMainnet;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=network-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-utils.js","sourceRoot":"","sources":["../../src/network-utils.ts"],"names":[],"mappings":";;AAUA,wDA2CC;AAKD,oEAYC;AAED,oEAYC;AAED,4DAYC;AAlGD,+DAImC;AAEnC;;;GAGG;AACH,SAAgB,sBAAsB;IACpC,MAAM,eAAe,GAAoC,EAAE,CAAC;IAE5D,+CAA+C;IAC/C,MAAM,YAAY,GAAG,uBAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7C,kDAAkD;QAClD,OAAO,CACL,CAAC,IAAI,CAAC,YAAY,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,CAAC,IAAI,kBAAkB;YACzE,CAAC,IAAI,CAAC,YAAY,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,kBAAkB;YACzE,CAAC,IAAI,CAAC,YAAY,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,uBAAuB;SAC3E,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC5B,IACE,CAAC,IAAI,CAAC,cAAc;YACpB,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG;YACxB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EACpC,CAAC;YACD,OAAO,CAAC,0CAA0C;QACpD,CAAC;QAED,4BAA4B;QAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;YACvD,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;QAE5B,MAAM,OAAO,GAAI,IAAY,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC;QAErD,MAAM,OAAO,GAAa;YACxB,OAAO;YACP,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,GAAG,IAAI,CAAC,YAAY,UAAU;YACpE,OAAO,EAAE,IAAI,CAAC,YAAY,KAAK,KAAK;YACpC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,SAAS;YACvD,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,8BAAY,CAAC,OAAO;SAC3B,CAAC;QAEF,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,SAAgB,4BAA4B;IAC1C,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC;IAC1C,oCAAoC;IACpC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CACjD,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,CACjE,CAAC;IAEF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAgB,4BAA4B;IAC1C,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC;IAC1C,mDAAmD;IACnD,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CACjD,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,CACjE,CAAC;IAEF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAgB,wBAAwB;IACtC,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC;IAC1C,kDAAkD;IAClD,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CACjD,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,CAChE,CAAC;IAEF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC"}
|