@sidhujag/sysweb3-keyring 2.1.7 → 2.1.9
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/CHANGELOG.md +12 -0
- package/cjs/hardware-transaction-authority.js +15 -11
- package/cjs/hardware-transaction-authority.js.map +1 -1
- package/cjs/hardware-wallet-manager.js +74 -119
- package/cjs/hardware-wallet-manager.js.map +1 -1
- package/cjs/hardware-wallet-types.js +16 -0
- package/cjs/hardware-wallet-types.js.map +1 -0
- package/cjs/host-keyring.js +32 -0
- package/cjs/host-keyring.js.map +1 -0
- package/cjs/index.js +1 -0
- package/cjs/index.js.map +1 -1
- package/cjs/keyring-core.js +96 -61
- package/cjs/keyring-core.js.map +1 -1
- package/cjs/keyring-manager.js +15 -16
- package/cjs/keyring-manager.js.map +1 -1
- package/cjs/ledger/host-types.js.map +1 -1
- package/cjs/ledger/index.js +24 -4
- package/cjs/ledger/index.js.map +1 -1
- package/cjs/ledger-hardware.js +15 -0
- package/cjs/ledger-hardware.js.map +1 -0
- package/cjs/software.js +6 -25
- package/cjs/software.js.map +1 -1
- package/cjs/transactions/ethereum.js +371 -494
- package/cjs/transactions/ethereum.js.map +1 -1
- package/cjs/transactions/evm-submission-failure.js +73 -0
- package/cjs/transactions/evm-submission-failure.js.map +1 -0
- package/cjs/transactions/evm-submission.js +35 -61
- package/cjs/transactions/evm-submission.js.map +1 -1
- package/cjs/transactions/ledger-signing.js +52 -0
- package/cjs/transactions/ledger-signing.js.map +1 -0
- package/cjs/transactions/prepared-evm.js +24 -1
- package/cjs/transactions/prepared-evm.js.map +1 -1
- package/cjs/transactions/trezor-signing.js +90 -0
- package/cjs/transactions/trezor-signing.js.map +1 -0
- package/cjs/trezor/connect.js +238 -243
- package/cjs/trezor/connect.js.map +1 -1
- package/cjs/trezor/host-types.js +19 -0
- package/cjs/trezor/host-types.js.map +1 -0
- package/cjs/trezor/index.js +75 -23
- package/cjs/trezor/index.js.map +1 -1
- package/cjs/trezor/webextension-host.js +118 -0
- package/cjs/trezor/webextension-host.js.map +1 -0
- package/cjs/trezor-hardware.js +16 -0
- package/cjs/trezor-hardware.js.map +1 -0
- package/cjs/types.js.map +1 -1
- package/esm/hardware-transaction-authority.js +14 -11
- package/esm/hardware-transaction-authority.js.map +1 -1
- package/esm/hardware-wallet-manager.js +20 -32
- package/esm/hardware-wallet-manager.js.map +1 -1
- package/esm/hardware-wallet-types.js +13 -0
- package/esm/hardware-wallet-types.js.map +1 -0
- package/esm/keyring-core.js +98 -63
- package/esm/keyring-core.js.map +1 -1
- package/esm/ledger/dmk-host.js +2 -0
- package/esm/ledger/dmk-host.js.map +1 -1
- package/esm/ledger/dmk-session.js +73 -8
- package/esm/ledger/dmk-session.js.map +1 -1
- package/esm/ledger/host-types.js.map +1 -1
- package/esm/ledger/index.js +22 -2
- package/esm/ledger/index.js.map +1 -1
- package/esm/transactions/ethereum.js +372 -495
- package/esm/transactions/ethereum.js.map +1 -1
- package/esm/transactions/evm-submission-failure.js +68 -0
- package/esm/transactions/evm-submission-failure.js.map +1 -0
- package/esm/transactions/evm-submission.js +32 -59
- package/esm/transactions/evm-submission.js.map +1 -1
- package/esm/transactions/ledger-signing.js +49 -0
- package/esm/transactions/ledger-signing.js.map +1 -0
- package/esm/transactions/prepared-evm.js +23 -1
- package/esm/transactions/prepared-evm.js.map +1 -1
- package/esm/transactions/trezor-signing.js +87 -0
- package/esm/transactions/trezor-signing.js.map +1 -0
- package/esm/trezor/connect.js +236 -209
- package/esm/trezor/connect.js.map +1 -1
- package/esm/trezor/host-types.js +16 -0
- package/esm/trezor/host-types.js.map +1 -0
- package/esm/trezor/index.js +74 -22
- package/esm/trezor/index.js.map +1 -1
- package/esm/types.js.map +1 -1
- package/package.json +61 -1
- package/types/hardware-transaction-authority.d.ts +1 -0
- package/types/hardware-wallet-manager.d.ts +6 -22
- package/types/hardware-wallet-types.d.ts +21 -0
- package/types/host-keyring.d.ts +16 -0
- package/types/index.d.ts +1 -0
- package/types/keyring-core.d.ts +12 -4
- package/types/keyring-manager.d.ts +5 -3
- package/types/ledger/dmk-host.d.ts +2 -0
- package/types/ledger/dmk-session.d.ts +9 -0
- package/types/ledger/host-types.d.ts +2 -0
- package/types/ledger/index.d.ts +3 -1
- package/types/ledger-hardware.d.ts +5 -0
- package/types/software.d.ts +2 -16
- package/types/transactions/ethereum.d.ts +11 -1
- package/types/transactions/evm-submission-failure.d.ts +11 -0
- package/types/transactions/evm-submission.d.ts +6 -8
- package/types/transactions/ledger-signing.d.ts +13 -0
- package/types/transactions/prepared-evm.d.ts +12 -0
- package/types/transactions/trezor-signing.d.ts +13 -0
- package/types/trezor/connect.d.ts +11 -9
- package/types/trezor/host-types.d.ts +25 -0
- package/types/trezor/index.d.ts +7 -7
- package/types/trezor/webextension-host.d.ts +7 -0
- package/types/trezor-hardware.d.ts +6 -0
- package/types/types.d.ts +16 -4
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.evmSubmissionFailure = exports.copyEvmSubmissionFailure = void 0;
|
|
3
4
|
exports.captureEvmSubmission = captureEvmSubmission;
|
|
4
5
|
exports.assertDurableEvmSubmission = assertDurableEvmSubmission;
|
|
5
|
-
exports.evmSubmissionFailure = evmSubmissionFailure;
|
|
6
|
-
exports.copyEvmSubmissionFailure = copyEvmSubmissionFailure;
|
|
7
6
|
exports.assertSignedEvmTransactionMatches = assertSignedEvmTransactionMatches;
|
|
8
7
|
exports.submitSignedEvmTransaction = submitSignedEvmTransaction;
|
|
9
8
|
exports.submitSignedHardwareEvmTransaction = submitSignedHardwareEvmTransaction;
|
|
10
9
|
const transaction_1 = require("ethers/transaction");
|
|
10
|
+
const evm_envelope_1 = require("./evm-envelope");
|
|
11
|
+
const evm_submission_failure_1 = require("./evm-submission-failure");
|
|
12
|
+
var evm_submission_failure_2 = require("./evm-submission-failure");
|
|
13
|
+
Object.defineProperty(exports, "copyEvmSubmissionFailure", { enumerable: true, get: function () { return evm_submission_failure_2.copyEvmSubmissionFailure; } });
|
|
14
|
+
Object.defineProperty(exports, "evmSubmissionFailure", { enumerable: true, get: function () { return evm_submission_failure_2.evmSubmissionFailure; } });
|
|
11
15
|
const capturedBoundaries = new WeakSet();
|
|
12
16
|
function assertSynchronous(check) {
|
|
13
17
|
const result = check();
|
|
@@ -22,6 +26,19 @@ function assertSynchronous(check) {
|
|
|
22
26
|
/** Capture once, before RPC or device work. Never reread host capabilities later. */
|
|
23
27
|
function captureEvmSubmission(input, assertCurrent, capture) {
|
|
24
28
|
const { origin, walletNonce } = input;
|
|
29
|
+
const inputReview = input.review;
|
|
30
|
+
const review = inputReview === undefined
|
|
31
|
+
? undefined
|
|
32
|
+
: (0, evm_envelope_1.readEvmOwnData)(inputReview, ['id', 'unsignedHash']);
|
|
33
|
+
if (review !== undefined &&
|
|
34
|
+
(input.operation !== 'send' ||
|
|
35
|
+
!walletNonce ||
|
|
36
|
+
!review ||
|
|
37
|
+
typeof review.id !== 'string' ||
|
|
38
|
+
!/^[A-Za-z0-9_-]{1,128}$/.test(review.id) ||
|
|
39
|
+
typeof review.unsignedHash !== 'string' ||
|
|
40
|
+
!/^0x[0-9a-f]{64}$/.test(review.unsignedHash)))
|
|
41
|
+
throw new TypeError('Invalid EVM fee review identity');
|
|
25
42
|
let approvedWalletNonce;
|
|
26
43
|
if (walletNonce !== undefined) {
|
|
27
44
|
if (!walletNonce ||
|
|
@@ -39,6 +56,14 @@ function captureEvmSubmission(input, assertCurrent, capture) {
|
|
|
39
56
|
account: Object.freeze({ ...input.account }),
|
|
40
57
|
network: Object.freeze({ ...input.network }),
|
|
41
58
|
operation: input.operation,
|
|
59
|
+
...(review
|
|
60
|
+
? {
|
|
61
|
+
review: Object.freeze({
|
|
62
|
+
id: review.id,
|
|
63
|
+
unsignedHash: review.unsignedHash,
|
|
64
|
+
}),
|
|
65
|
+
}
|
|
66
|
+
: {}),
|
|
42
67
|
...(approvedWalletNonce ? { walletNonce: approvedWalletNonce } : {}),
|
|
43
68
|
...(input.originalHash !== undefined
|
|
44
69
|
? { originalHash: input.originalHash }
|
|
@@ -77,7 +102,13 @@ function captureEvmSubmission(input, assertCurrent, capture) {
|
|
|
77
102
|
const boundary = Object.freeze({
|
|
78
103
|
context,
|
|
79
104
|
assertCurrent: guard,
|
|
80
|
-
persistSigned
|
|
105
|
+
persistSigned: (record) => {
|
|
106
|
+
if (context.review &&
|
|
107
|
+
transaction_1.Transaction.from(record.rawTransaction).unsignedHash !==
|
|
108
|
+
context.review.unsignedHash)
|
|
109
|
+
throw new Error('Signed EVM transaction does not match its fee review');
|
|
110
|
+
return persistSigned(record);
|
|
111
|
+
},
|
|
81
112
|
dispatchSigned,
|
|
82
113
|
});
|
|
83
114
|
capturedBoundaries.add(boundary);
|
|
@@ -89,21 +120,6 @@ function assertDurableEvmSubmission(boundary) {
|
|
|
89
120
|
throw new TypeError('A captured durable EVM submission is required');
|
|
90
121
|
boundary.assertCurrent();
|
|
91
122
|
}
|
|
92
|
-
const failures = new WeakMap();
|
|
93
|
-
/** Only local stage evidence can label an error as a possibly dispatched send. */
|
|
94
|
-
function evmSubmissionFailure(error) {
|
|
95
|
-
return ((error && (typeof error === 'object' || typeof error === 'function')
|
|
96
|
-
? failures.get(error)
|
|
97
|
-
: undefined) ?? { transactionNotBroadcast: true });
|
|
98
|
-
}
|
|
99
|
-
/** Preserve local evidence when an existing public API wraps its Error object. */
|
|
100
|
-
function copyEvmSubmissionFailure(source, target) {
|
|
101
|
-
if (source && (typeof source === 'object' || typeof source === 'function')) {
|
|
102
|
-
const failure = failures.get(source);
|
|
103
|
-
if (failure)
|
|
104
|
-
failures.set(target, failure);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
123
|
/** Compare signed wire bytes with the complete envelope captured before signing. */
|
|
108
124
|
function assertSignedEvmTransactionMatches(rawTransaction, expectedUnsignedTransaction, expectedFrom) {
|
|
109
125
|
if (typeof rawTransaction !== 'string' ||
|
|
@@ -215,52 +231,10 @@ async function submit(rawTransaction, broadcast, boundary, beforeBroadcast, expe
|
|
|
215
231
|
}
|
|
216
232
|
}
|
|
217
233
|
catch (cause) {
|
|
218
|
-
|
|
234
|
+
throw (0, evm_submission_failure_1.annotateEvmSubmissionFailure)(cause, {
|
|
219
235
|
transactionNotBroadcast: !dispatched,
|
|
220
236
|
...(hash ? { signedTransactionHash: hash } : {}),
|
|
221
237
|
});
|
|
222
|
-
// Preserve provider Error identity/class and its data/shortMessage/reason/
|
|
223
|
-
// cause contract. Only the locally owned submission fields are overwritten.
|
|
224
|
-
let error = cause instanceof Error
|
|
225
|
-
? cause
|
|
226
|
-
: new Error(typeof cause === 'string' ? cause : 'EVM submission failed');
|
|
227
|
-
if (!(cause instanceof Error) && cause && typeof cause === 'object') {
|
|
228
|
-
// JSON-RPC adapters can reject with a plain error object. Copy data
|
|
229
|
-
// descriptors without invoking accessors or accepting its stage claim.
|
|
230
|
-
for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(cause))) {
|
|
231
|
-
if (key !== 'transactionNotBroadcast' &&
|
|
232
|
-
key !== 'signedTransactionHash' &&
|
|
233
|
-
'value' in descriptor) {
|
|
234
|
-
Object.defineProperty(error, key, descriptor);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
const stageDescriptors = Object.fromEntries(Object.entries({ ...failure, signedTransactionHash: hash }).map(([key, value]) => [
|
|
239
|
-
key,
|
|
240
|
-
{ value, enumerable: true, configurable: true, writable: true },
|
|
241
|
-
]));
|
|
242
|
-
try {
|
|
243
|
-
Object.defineProperties(error, stageDescriptors);
|
|
244
|
-
}
|
|
245
|
-
catch {
|
|
246
|
-
// A frozen provider Error may have non-configurable forged stage fields.
|
|
247
|
-
// Retain its original details/cause without allowing those fields to win.
|
|
248
|
-
const wrapped = new Error(error.message);
|
|
249
|
-
wrapped.name = error.name;
|
|
250
|
-
const descriptors = Object.getOwnPropertyDescriptors(error);
|
|
251
|
-
delete descriptors.transactionNotBroadcast;
|
|
252
|
-
delete descriptors.signedTransactionHash;
|
|
253
|
-
Object.defineProperties(wrapped, descriptors);
|
|
254
|
-
if (!Object.prototype.hasOwnProperty.call(wrapped, 'cause'))
|
|
255
|
-
Object.defineProperty(wrapped, 'cause', {
|
|
256
|
-
value: error,
|
|
257
|
-
configurable: true,
|
|
258
|
-
});
|
|
259
|
-
Object.defineProperties(wrapped, stageDescriptors);
|
|
260
|
-
error = wrapped;
|
|
261
|
-
}
|
|
262
|
-
failures.set(error, failure);
|
|
263
|
-
throw error;
|
|
264
238
|
}
|
|
265
239
|
}
|
|
266
240
|
//# sourceMappingURL=evm-submission.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm-submission.js","sourceRoot":"","sources":["../../../src/transactions/evm-submission.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"evm-submission.js","sourceRoot":"","sources":["../../../src/transactions/evm-submission.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.signLedgerEvmTransaction = signLedgerEvmTransaction;
|
|
4
|
+
const address_1 = require("ethers/address");
|
|
5
|
+
const crypto_1 = require("ethers/crypto");
|
|
6
|
+
const transaction_1 = require("ethers/transaction");
|
|
7
|
+
const evm_submission_1 = require("./evm-submission");
|
|
8
|
+
const evm_submission_failure_1 = require("./evm-submission-failure");
|
|
9
|
+
const hardware_transaction_authority_1 = require("../hardware-transaction-authority");
|
|
10
|
+
/** Sign the reviewed bytes through the shared Ledger adapter without changing fees or nonce. */
|
|
11
|
+
async function signLedgerEvmTransaction(signer, request, authority) {
|
|
12
|
+
try {
|
|
13
|
+
const owner = (0, hardware_transaction_authority_1.captureHardwareTransactionAuthority)(authority);
|
|
14
|
+
const { accountIndex, unsignedTransaction } = request;
|
|
15
|
+
const expectedAddress = (0, address_1.getAddress)(request.expectedAddress);
|
|
16
|
+
if (!Number.isSafeInteger(accountIndex) ||
|
|
17
|
+
accountIndex < 0 ||
|
|
18
|
+
accountIndex > 0x7fffffff ||
|
|
19
|
+
typeof unsignedTransaction !== 'string')
|
|
20
|
+
throw new TypeError('Invalid reviewed Ledger transaction');
|
|
21
|
+
const transaction = transaction_1.Transaction.from(unsignedTransaction);
|
|
22
|
+
if (transaction.isSigned() ||
|
|
23
|
+
transaction.chainId <= 0n ||
|
|
24
|
+
transaction.unsignedSerialized !== unsignedTransaction)
|
|
25
|
+
throw new TypeError('Ledger signing requires canonical unsigned transaction bytes');
|
|
26
|
+
owner.assertCurrent();
|
|
27
|
+
const signature = await signer.evm.signEVMTransaction({
|
|
28
|
+
accountIndex,
|
|
29
|
+
expectedAddress,
|
|
30
|
+
rawTx: unsignedTransaction.slice(2),
|
|
31
|
+
}, owner);
|
|
32
|
+
owner.assertCurrent();
|
|
33
|
+
transaction.signature = crypto_1.Signature.from({
|
|
34
|
+
r: `0x${signature.r}`,
|
|
35
|
+
s: `0x${signature.s}`,
|
|
36
|
+
v: Number.parseInt(signature.v, 16),
|
|
37
|
+
});
|
|
38
|
+
const rawTransaction = transaction.serialized;
|
|
39
|
+
if (transaction.from?.toLowerCase() !== expectedAddress.toLowerCase()) {
|
|
40
|
+
throw Object.assign(new Error('Hardware signature does not match the approved account'), { code: 'HARDWARE_ACCOUNT_MISMATCH' });
|
|
41
|
+
}
|
|
42
|
+
const checked = (0, evm_submission_1.assertSignedEvmTransactionMatches)(rawTransaction, unsignedTransaction, expectedAddress);
|
|
43
|
+
owner.assertCurrent();
|
|
44
|
+
return Object.freeze({ rawTransaction, hash: checked.hash });
|
|
45
|
+
}
|
|
46
|
+
catch (cause) {
|
|
47
|
+
throw (0, evm_submission_failure_1.annotateEvmSubmissionFailure)(cause, {
|
|
48
|
+
transactionNotBroadcast: true,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=ledger-signing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger-signing.js","sourceRoot":"","sources":["../../../src/transactions/ledger-signing.ts"],"names":[],"mappings":";;AAYA,4DA+DC;AA3ED,4CAA4C;AAC5C,0CAA0C;AAC1C,oDAAiD;AAEjD,qDAAqE;AACrE,qEAAwE;AACxE,sFAAwF;AAKxF,gGAAgG;AACzF,KAAK,UAAU,wBAAwB,CAC5C,MAAwD,EACxD,OAIE,EACF,SAAuC;IAEvC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAA,oEAAmC,EAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,EAAE,YAAY,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC;QACtD,MAAM,eAAe,GAAG,IAAA,oBAAU,EAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC5D,IACE,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC;YACnC,YAAY,GAAG,CAAC;YAChB,YAAY,GAAG,UAAU;YACzB,OAAO,mBAAmB,KAAK,QAAQ;YAEvC,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,yBAAW,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC1D,IACE,WAAW,CAAC,QAAQ,EAAE;YACtB,WAAW,CAAC,OAAO,IAAI,EAAE;YACzB,WAAW,CAAC,kBAAkB,KAAK,mBAAmB;YAEtD,MAAM,IAAI,SAAS,CACjB,8DAA8D,CAC/D,CAAC;QACJ,KAAK,CAAC,aAAa,EAAE,CAAC;QACtB,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,kBAAkB,CACnD;YACE,YAAY;YACZ,eAAe;YACf,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;SACpC,EACD,KAAK,CACN,CAAC;QACF,KAAK,CAAC,aAAa,EAAE,CAAC;QACtB,WAAW,CAAC,SAAS,GAAG,kBAAS,CAAC,IAAI,CAAC;YACrC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,EAAE;YACrB,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,EAAE;YACrB,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;SACpC,CAAC,CAAC;QACH,MAAM,cAAc,GAAG,WAAW,CAAC,UAAU,CAAC;QAC9C,IAAI,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,eAAe,CAAC,WAAW,EAAE,EAAE,CAAC;YACtE,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,wDAAwD,CAAC,EACnE,EAAE,IAAI,EAAE,2BAA2B,EAAE,CACtC,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,IAAA,kDAAiC,EAC/C,cAAc,EACd,mBAAmB,EACnB,eAAe,CAChB,CAAC;QACF,KAAK,CAAC,aAAa,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,IAAK,EAAE,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAA,qDAA4B,EAAC,KAAK,EAAE;YACxC,uBAAuB,EAAE,IAAI;SAC9B,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.snapshotEvmSigningIdentity = snapshotEvmSigningIdentity;
|
|
3
4
|
exports.snapshotPreparedEvmRequest = snapshotPreparedEvmRequest;
|
|
4
5
|
exports.preparedEvmGuard = preparedEvmGuard;
|
|
5
6
|
exports.signPreparedEvmEnvelope = signPreparedEvmEnvelope;
|
|
@@ -9,8 +10,29 @@ const evm_envelope_1 = require("./evm-envelope");
|
|
|
9
10
|
const evm_local_signer_1 = require("./evm-local-signer");
|
|
10
11
|
const evm_submission_1 = require("./evm-submission");
|
|
11
12
|
const invalid = () => new TypeError('Invalid prepared EVM signing request');
|
|
13
|
+
function snapshotEvmSigningIdentity(input) {
|
|
14
|
+
const identity = (0, evm_envelope_1.readEvmOwnData)(input, ['id', 'type', 'expectedAddress']);
|
|
15
|
+
if (!Number.isSafeInteger(identity.id) ||
|
|
16
|
+
identity.id < 0 ||
|
|
17
|
+
identity.id > 0x7fffffff ||
|
|
18
|
+
!['HDAccount', 'Imported', 'Ledger', 'Trezor', 'SmartAccount'].includes(identity.type) ||
|
|
19
|
+
typeof identity.expectedAddress !== 'string' ||
|
|
20
|
+
!/^0x[0-9a-fA-F]{40}$/.test(identity.expectedAddress))
|
|
21
|
+
throw invalid();
|
|
22
|
+
return Object.freeze({
|
|
23
|
+
id: identity.id,
|
|
24
|
+
type: identity.type,
|
|
25
|
+
expectedAddress: (0, address_1.getAddress)(identity.expectedAddress),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
12
28
|
function snapshotPreparedEvmRequest(input) {
|
|
13
|
-
const root = (0, evm_envelope_1.readEvmOwnData)(input, [
|
|
29
|
+
const root = (0, evm_envelope_1.readEvmOwnData)(input, [
|
|
30
|
+
'selectedAccount',
|
|
31
|
+
'account',
|
|
32
|
+
'network',
|
|
33
|
+
'transaction',
|
|
34
|
+
]);
|
|
35
|
+
const selectedAccount = snapshotEvmSigningIdentity(root.selectedAccount);
|
|
14
36
|
const account = (0, evm_envelope_1.readEvmOwnData)(root.account, [
|
|
15
37
|
'id',
|
|
16
38
|
'type',
|
|
@@ -45,6 +67,7 @@ function snapshotPreparedEvmRequest(input) {
|
|
|
45
67
|
if (transaction.from !== expectedAddress || network.chainId !== chainId)
|
|
46
68
|
throw invalid();
|
|
47
69
|
return Object.freeze({
|
|
70
|
+
selectedAccount,
|
|
48
71
|
account: Object.freeze({
|
|
49
72
|
id: account.id,
|
|
50
73
|
type: account.type,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepared-evm.js","sourceRoot":"","sources":["../../../src/transactions/prepared-evm.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"prepared-evm.js","sourceRoot":"","sources":["../../../src/transactions/prepared-evm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.signTrezorEvmTransaction = signTrezorEvmTransaction;
|
|
4
|
+
const address_1 = require("ethers/address");
|
|
5
|
+
const crypto_1 = require("ethers/crypto");
|
|
6
|
+
const transaction_1 = require("ethers/transaction");
|
|
7
|
+
const utils_1 = require("ethers/utils");
|
|
8
|
+
const evm_submission_1 = require("./evm-submission");
|
|
9
|
+
const evm_submission_failure_1 = require("./evm-submission-failure");
|
|
10
|
+
const evm_fees_1 = require("../evm-fees");
|
|
11
|
+
const hardware_transaction_authority_1 = require("../hardware-transaction-authority");
|
|
12
|
+
// Connect returns hexadecimal fields, including an optionally numeric recovery v.
|
|
13
|
+
const trezorSignature = (signature) => {
|
|
14
|
+
const { r, s, v } = signature;
|
|
15
|
+
if (![r, s].every((value) => /^(?:0x)?[0-9a-f]{64}$/i.test(value)))
|
|
16
|
+
throw new Error('Invalid Trezor signature scalar encoding');
|
|
17
|
+
if (typeof v === 'string' && !/^(?:0x)?[0-9a-f]+$/i.test(v))
|
|
18
|
+
throw new Error('Invalid Trezor signature recovery value');
|
|
19
|
+
const recovery = typeof v === 'number' ? v : Number.parseInt(v, 16);
|
|
20
|
+
if (!Number.isSafeInteger(recovery) || recovery < 0)
|
|
21
|
+
throw new Error('Invalid Trezor signature recovery value');
|
|
22
|
+
return crypto_1.Signature.from({
|
|
23
|
+
r: `0x${r.replace(/^0x/i, '')}`,
|
|
24
|
+
s: `0x${s.replace(/^0x/i, '')}`,
|
|
25
|
+
v: recovery,
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
/** Sign reviewed bytes through an explicitly hosted Trezor keyring. */
|
|
29
|
+
async function signTrezorEvmTransaction(signer, request, authority) {
|
|
30
|
+
try {
|
|
31
|
+
const owner = (0, hardware_transaction_authority_1.captureHardwareTransactionAuthority)(authority);
|
|
32
|
+
const { accountIndex, coin, slip44, unsignedTransaction } = request;
|
|
33
|
+
const expectedAddress = (0, address_1.getAddress)(request.expectedAddress);
|
|
34
|
+
if (!Number.isSafeInteger(accountIndex) ||
|
|
35
|
+
accountIndex < 0 ||
|
|
36
|
+
accountIndex > 0x7fffffff ||
|
|
37
|
+
!Number.isSafeInteger(slip44) ||
|
|
38
|
+
slip44 < 0 ||
|
|
39
|
+
slip44 > 0x7fffffff ||
|
|
40
|
+
typeof coin !== 'string' ||
|
|
41
|
+
coin.length === 0 ||
|
|
42
|
+
typeof unsignedTransaction !== 'string')
|
|
43
|
+
throw new TypeError('Invalid reviewed Trezor transaction');
|
|
44
|
+
const transaction = transaction_1.Transaction.from(unsignedTransaction);
|
|
45
|
+
if (transaction.isSigned() ||
|
|
46
|
+
transaction.chainId <= 0n ||
|
|
47
|
+
transaction.chainId > BigInt(Number.MAX_SAFE_INTEGER) ||
|
|
48
|
+
(transaction.type !== 0 && transaction.type !== 2) ||
|
|
49
|
+
transaction.unsignedSerialized !== unsignedTransaction)
|
|
50
|
+
throw new TypeError('Trezor signing requires canonical unsigned type 0 or type 2 transaction bytes');
|
|
51
|
+
(0, evm_fees_1.assertEvmGasLimit)(transaction.gasLimit, transaction.chainId);
|
|
52
|
+
const common = {
|
|
53
|
+
to: transaction.to,
|
|
54
|
+
value: (0, utils_1.toBeHex)(transaction.value),
|
|
55
|
+
gasLimit: (0, utils_1.toBeHex)(transaction.gasLimit),
|
|
56
|
+
nonce: (0, utils_1.toBeHex)(transaction.nonce),
|
|
57
|
+
data: transaction.data,
|
|
58
|
+
chainId: Number(transaction.chainId),
|
|
59
|
+
};
|
|
60
|
+
const tx = transaction.type === 0
|
|
61
|
+
? { ...common, gasPrice: (0, utils_1.toBeHex)(transaction.gasPrice) }
|
|
62
|
+
: {
|
|
63
|
+
...common,
|
|
64
|
+
maxFeePerGas: (0, utils_1.toBeHex)(transaction.maxFeePerGas),
|
|
65
|
+
maxPriorityFeePerGas: (0, utils_1.toBeHex)(transaction.maxPriorityFeePerGas),
|
|
66
|
+
accessList: transaction.accessList.map(({ address, storageKeys }) => ({
|
|
67
|
+
address,
|
|
68
|
+
storageKeys: [...storageKeys],
|
|
69
|
+
})),
|
|
70
|
+
};
|
|
71
|
+
owner.assertCurrent();
|
|
72
|
+
const signature = await signer.signEthTransaction({ index: String(accountIndex), coin, slip44, tx }, owner);
|
|
73
|
+
owner.assertCurrent();
|
|
74
|
+
if (signature.success !== true)
|
|
75
|
+
throw new Error('Transaction signature failed');
|
|
76
|
+
transaction.signature = trezorSignature(signature.payload);
|
|
77
|
+
const rawTransaction = transaction.serialized;
|
|
78
|
+
if (transaction.from?.toLowerCase() !== expectedAddress.toLowerCase())
|
|
79
|
+
throw Object.assign(new Error('Hardware signature does not match the approved account'), { code: 'HARDWARE_ACCOUNT_MISMATCH' });
|
|
80
|
+
const checked = (0, evm_submission_1.assertSignedEvmTransactionMatches)(rawTransaction, unsignedTransaction, expectedAddress);
|
|
81
|
+
owner.assertCurrent();
|
|
82
|
+
return Object.freeze({ rawTransaction, hash: checked.hash });
|
|
83
|
+
}
|
|
84
|
+
catch (cause) {
|
|
85
|
+
throw (0, evm_submission_failure_1.annotateEvmSubmissionFailure)(cause, {
|
|
86
|
+
transactionNotBroadcast: true,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=trezor-signing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trezor-signing.js","sourceRoot":"","sources":["../../../src/transactions/trezor-signing.ts"],"names":[],"mappings":"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"}
|