@sidhujag/sysweb3-keyring 2.1.0 → 2.1.1

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.
Files changed (53) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +46 -108
  3. package/cjs/evm-fees.js +223 -0
  4. package/cjs/evm-fees.js.map +1 -0
  5. package/cjs/keyring-core.js +1 -227
  6. package/cjs/keyring-core.js.map +1 -1
  7. package/cjs/keyring-manager.js +4 -3
  8. package/cjs/keyring-manager.js.map +1 -1
  9. package/cjs/software.js +12 -11
  10. package/cjs/software.js.map +1 -1
  11. package/cjs/transactions/ethereum.js +194 -190
  12. package/cjs/transactions/ethereum.js.map +1 -1
  13. package/cjs/transactions/evm-local-signer.js +28 -7
  14. package/cjs/transactions/evm-local-signer.js.map +1 -1
  15. package/cjs/transactions/evm-submission.js +179 -0
  16. package/cjs/transactions/evm-submission.js.map +1 -0
  17. package/cjs/transactions/index.js +1 -0
  18. package/cjs/transactions/index.js.map +1 -1
  19. package/cjs/transactions/prepared-evm.js +2 -0
  20. package/cjs/transactions/prepared-evm.js.map +1 -1
  21. package/cjs/types.js.map +1 -1
  22. package/cjs/utils/derivation-paths.js +4 -3
  23. package/cjs/utils/derivation-paths.js.map +1 -1
  24. package/cjs/utils/watch-descriptor.js +3 -2
  25. package/cjs/utils/watch-descriptor.js.map +1 -1
  26. package/esm/types.js.map +1 -1
  27. package/esm/utils/derivation-paths.js +2 -1
  28. package/esm/utils/derivation-paths.js.map +1 -1
  29. package/package.json +24 -11
  30. package/types/evm-fees.d.ts +42 -0
  31. package/types/keyring-core.d.ts +3 -8
  32. package/types/keyring-manager.d.ts +8 -3
  33. package/types/software.d.ts +6 -11
  34. package/types/transactions/ethereum.d.ts +10 -8
  35. package/types/transactions/evm-local-signer.d.ts +4 -1
  36. package/types/transactions/evm-submission.d.ts +48 -0
  37. package/types/transactions/index.d.ts +1 -0
  38. package/types/types.d.ts +4 -0
  39. package/cjs/bip84-native.js +0 -8
  40. package/cjs/bip84-native.js.map +0 -1
  41. package/cjs/public-bip84.js +0 -157
  42. package/cjs/public-bip84.js.map +0 -1
  43. package/cjs/software-utxo-account.js +0 -12
  44. package/cjs/software-utxo-account.js.map +0 -1
  45. package/cjs/transactions/bip84-native-plan.js +0 -481
  46. package/cjs/transactions/bip84-native-plan.js.map +0 -1
  47. package/cjs/transactions/prepared-bip84.js +0 -214
  48. package/cjs/transactions/prepared-bip84.js.map +0 -1
  49. package/types/bip84-native.d.ts +0 -3
  50. package/types/public-bip84.d.ts +0 -39
  51. package/types/software-utxo-account.d.ts +0 -13
  52. package/types/transactions/bip84-native-plan.d.ts +0 -83
  53. package/types/transactions/prepared-bip84.d.ts +0 -27
@@ -1,481 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fail = exports.bip84Profile = exports.LIMITS = exports.Bip84NativeError = void 0;
4
- exports.record = record;
5
- exports.index = index;
6
- exports.snapshotBip84Network = snapshotBip84Network;
7
- exports.snapshotBip84Guard = snapshotBip84Guard;
8
- exports.validateBip84NativePlan = validateBip84NativePlan;
9
- exports.prepareBip84NativeTransaction = prepareBip84NativeTransaction;
10
- const bitcoinjs_lib_1 = require("bitcoinjs-lib");
11
- const varuint_bitcoin_1 = require("varuint-bitcoin");
12
- const public_bip84_1 = require("../public-bip84");
13
- class Bip84NativeError extends Error {
14
- constructor(code) {
15
- super(code);
16
- this.code = code;
17
- this.name = 'Bip84NativeError';
18
- }
19
- }
20
- exports.Bip84NativeError = Bip84NativeError;
21
- // Resource/consent policy, not consensus or relay limits.
22
- exports.LIMITS = Object.freeze({
23
- inputs: 64,
24
- parentBytes: 1000000,
25
- totalParentBytes: 2000000,
26
- parentComponents: 8192,
27
- unsignedBytes: 8 * 1024,
28
- signedBytes: 16 * 1024,
29
- psbtBytes: 64 * 1024,
30
- maxFee: 10000000n,
31
- maxFeeRate: 1000n,
32
- });
33
- const HARDENED = 0x80000000;
34
- const baseNetwork = Object.freeze({
35
- messagePrefix: '\x18Bitcoin Signed Message:\n',
36
- bech32: 'bc',
37
- bip32: Object.freeze({ public: 0x0488b21e, private: 0x0488ade4 }),
38
- pubKeyHash: 0,
39
- scriptHash: 5,
40
- wif: 128,
41
- });
42
- const profiles = Object.freeze({
43
- bitcoin: Object.freeze({
44
- chainId: 0,
45
- slip44: 0,
46
- currency: 'btc',
47
- maximumMoney: 2100000000000000n,
48
- addressNetwork: baseNetwork,
49
- }),
50
- syscoin: Object.freeze({
51
- chainId: 57,
52
- slip44: 57,
53
- currency: 'sys',
54
- maximumMoney: 999999999999999999n,
55
- addressNetwork: Object.freeze({
56
- ...baseNetwork,
57
- messagePrefix: '\x18Syscoin Signed Message:\n',
58
- bech32: 'sys',
59
- pubKeyHash: 0x3f,
60
- }),
61
- }),
62
- });
63
- const bip84Profile = (network) => profiles[network];
64
- exports.bip84Profile = bip84Profile;
65
- const fail = (code) => {
66
- throw new Bip84NativeError(code);
67
- };
68
- exports.fail = fail;
69
- function record(value, fields) {
70
- if (!value ||
71
- typeof value !== 'object' ||
72
- Array.isArray(value) ||
73
- ![Object.prototype, null].includes(Object.getPrototypeOf(value)) ||
74
- Reflect.ownKeys(value).length !== fields.length)
75
- return (0, exports.fail)('INVALID_REQUEST');
76
- const result = Object.create(null);
77
- for (const field of fields) {
78
- const d = Object.getOwnPropertyDescriptor(value, field);
79
- if (!d ||
80
- !d.enumerable ||
81
- !Object.prototype.hasOwnProperty.call(d, 'value'))
82
- return (0, exports.fail)('INVALID_REQUEST');
83
- result[field] = d.value;
84
- }
85
- return result;
86
- }
87
- function array(value) {
88
- if (!Array.isArray(value))
89
- return (0, exports.fail)('INVALID_REQUEST');
90
- const length = Object.getOwnPropertyDescriptor(value, 'length')?.value;
91
- if (!Number.isSafeInteger(length) || length < 1)
92
- return (0, exports.fail)('INVALID_REQUEST');
93
- if (length > exports.LIMITS.inputs)
94
- return (0, exports.fail)('LIMIT_EXCEEDED');
95
- if (Reflect.ownKeys(value).length !== length + 1)
96
- return (0, exports.fail)('INVALID_REQUEST');
97
- const result = [];
98
- for (let i = 0; i < length; i++) {
99
- const d = Object.getOwnPropertyDescriptor(value, String(i));
100
- if (!d ||
101
- !d.enumerable ||
102
- !Object.prototype.hasOwnProperty.call(d, 'value'))
103
- return (0, exports.fail)('INVALID_REQUEST');
104
- result.push(d.value);
105
- }
106
- return result;
107
- }
108
- function index(value) {
109
- if (!Number.isSafeInteger(value) ||
110
- value < 0 ||
111
- value >= HARDENED)
112
- return (0, exports.fail)('INVALID_REQUEST');
113
- return value;
114
- }
115
- function txid(value) {
116
- if (typeof value !== 'string' || !/^[0-9a-f]{64}$/.test(value))
117
- return (0, exports.fail)('INVALID_REQUEST');
118
- return value;
119
- }
120
- function quantity(value, max, positive = false) {
121
- if (typeof value !== 'string' || !/^(0|[1-9][0-9]{0,18})$/.test(value))
122
- return (0, exports.fail)('INVALID_REQUEST');
123
- const amount = BigInt(value);
124
- if (amount > max || (positive && amount === 0n))
125
- return (0, exports.fail)('INVALID_REQUEST');
126
- return value;
127
- }
128
- function snapshotBip84Network(value) {
129
- const n = record(value, ['network', 'endpoint']);
130
- if (n.network !== 'bitcoin' && n.network !== 'syscoin')
131
- return (0, exports.fail)('UNSUPPORTED_NETWORK');
132
- if (typeof n.endpoint !== 'string' ||
133
- !n.endpoint ||
134
- n.endpoint.length > 2048 ||
135
- n.endpoint.trim() !== n.endpoint ||
136
- Array.from(n.endpoint).some((character) => {
137
- const code = character.charCodeAt(0);
138
- return code < 32 || code === 127 || (code >= 0xd800 && code <= 0xdfff);
139
- }))
140
- return (0, exports.fail)('INVALID_REQUEST');
141
- return Object.freeze({ network: n.network, endpoint: n.endpoint });
142
- }
143
- function snapshotBip84Guard(value) {
144
- const guard = record(value, ['assertCurrent']).assertCurrent;
145
- if (typeof guard !== 'function')
146
- return (0, exports.fail)('INVALID_REQUEST');
147
- return () => {
148
- let result;
149
- try {
150
- result = guard();
151
- }
152
- catch {
153
- return (0, exports.fail)('CANCELLED');
154
- }
155
- if (result !== undefined) {
156
- if (result !== null &&
157
- (typeof result === 'object' || typeof result === 'function'))
158
- void Promise.resolve(result).catch(() => undefined);
159
- return (0, exports.fail)('CANCELLED');
160
- }
161
- };
162
- }
163
- function snapshotAccount(value, network) {
164
- const a = record(value, [
165
- 'network',
166
- 'policy',
167
- 'canonicalKey',
168
- 'accountIndex',
169
- ]);
170
- if (a.network !== network || a.policy !== 'bip84-p2wpkh')
171
- return (0, exports.fail)('ACCOUNT_MISMATCH');
172
- let parsed;
173
- try {
174
- parsed = (0, public_bip84_1.parseBip84PublicAccount)({
175
- network,
176
- accountKey: a.canonicalKey,
177
- });
178
- }
179
- catch {
180
- return (0, exports.fail)('INVALID_REQUEST');
181
- }
182
- if (parsed.canonicalKey !== a.canonicalKey ||
183
- parsed.accountIndex !== a.accountIndex)
184
- return (0, exports.fail)('ACCOUNT_MISMATCH');
185
- return parsed;
186
- }
187
- function recipientAddress(value, network) {
188
- if (typeof value !== 'string' ||
189
- value.length > 90 ||
190
- value !== value.toLowerCase())
191
- return (0, exports.fail)('INVALID_REQUEST');
192
- try {
193
- const script = bitcoinjs_lib_1.address.toOutputScript(value, network);
194
- if (script.length !== 22 ||
195
- script[0] !== 0 ||
196
- script[1] !== 20 ||
197
- bitcoinjs_lib_1.address.fromOutputScript(script, network) !== value)
198
- return (0, exports.fail)('INVALID_REQUEST');
199
- return value;
200
- }
201
- catch {
202
- return (0, exports.fail)('INVALID_REQUEST');
203
- }
204
- }
205
- /** Bound decoded objects as well as wire bytes before bitcoinjs allocates them.
206
- * One component is an input, output, witness vector or witness item.
207
- */
208
- function boundedParentEncoding(bytes, remainingComponents) {
209
- let offset = 4;
210
- let components = 0;
211
- const charge = (count) => {
212
- if (count > remainingComponents - components)
213
- return (0, exports.fail)('LIMIT_EXCEEDED');
214
- components += count;
215
- };
216
- const skip = (length) => {
217
- if (!Number.isSafeInteger(length) ||
218
- length < 0 ||
219
- length > bytes.length - offset)
220
- return (0, exports.fail)('INVALID_REQUEST');
221
- offset += length;
222
- };
223
- const compact = () => {
224
- const value = (0, varuint_bitcoin_1.decode)(bytes, offset);
225
- offset += value.bytes;
226
- if (value.bigintValue > BigInt(bytes.length - offset))
227
- return (0, exports.fail)('INVALID_REQUEST');
228
- return Number(value.bigintValue);
229
- };
230
- let inputs = compact();
231
- let witness = false;
232
- if (inputs === 0) {
233
- if (bytes[offset] !== 1)
234
- return (0, exports.fail)('INVALID_REQUEST');
235
- offset++;
236
- witness = true;
237
- inputs = compact();
238
- }
239
- if (inputs === 0 || inputs > Math.floor((bytes.length - offset) / 41))
240
- return (0, exports.fail)('INVALID_REQUEST');
241
- charge(inputs);
242
- for (let i = 0; i < inputs; i++) {
243
- skip(36);
244
- skip(compact());
245
- skip(4);
246
- }
247
- const outputs = compact();
248
- if (outputs === 0 || outputs > Math.floor((bytes.length - offset) / 9))
249
- return (0, exports.fail)('INVALID_REQUEST');
250
- charge(outputs);
251
- for (let i = 0; i < outputs; i++) {
252
- skip(8);
253
- skip(compact());
254
- }
255
- if (witness) {
256
- charge(inputs);
257
- for (let i = 0; i < inputs; i++) {
258
- const items = compact();
259
- charge(items);
260
- for (let j = 0; j < items; j++)
261
- skip(compact());
262
- }
263
- }
264
- skip(4);
265
- if (offset !== bytes.length)
266
- return (0, exports.fail)('INVALID_REQUEST');
267
- return components;
268
- }
269
- /** Internal result includes owned mutable transaction data; public entry exports only prepare. */
270
- function validateBip84NativePlan(value) {
271
- try {
272
- const r = record(value, [
273
- 'network',
274
- 'account',
275
- 'inputs',
276
- 'previousTransactions',
277
- 'recipient',
278
- 'change',
279
- 'locktime',
280
- 'rbf',
281
- 'feeLimits',
282
- ]);
283
- const network = snapshotBip84Network(r.network);
284
- const profile = (0, exports.bip84Profile)(network.network);
285
- const account = snapshotAccount(r.account, network.network);
286
- if (r.locktime !== 0 || typeof r.rbf !== 'boolean')
287
- return (0, exports.fail)('INVALID_REQUEST');
288
- const inputs = Object.freeze(array(r.inputs).map((v) => {
289
- const i = record(v, ['txid', 'vout', 'branch', 'index']);
290
- if (!Number.isSafeInteger(i.vout) ||
291
- i.vout < 0 ||
292
- i.vout > 0xffffffff ||
293
- (i.branch !== 0 && i.branch !== 1))
294
- return (0, exports.fail)('INVALID_REQUEST');
295
- return Object.freeze({
296
- txid: txid(i.txid),
297
- vout: i.vout,
298
- branch: i.branch,
299
- index: index(i.index),
300
- });
301
- }));
302
- let totalParentBytes = 0;
303
- const previousTransactions = Object.freeze(array(r.previousTransactions)
304
- .map((v) => {
305
- const p = record(v, ['txid', 'rawTransaction']);
306
- const id = txid(p.txid);
307
- if (typeof p.rawTransaction !== 'string')
308
- return (0, exports.fail)('INVALID_REQUEST');
309
- if (p.rawTransaction.length > 2 * exports.LIMITS.parentBytes)
310
- return (0, exports.fail)('LIMIT_EXCEEDED');
311
- if (p.rawTransaction.length < 20 ||
312
- p.rawTransaction.length % 2 !== 0 ||
313
- !/^[0-9a-f]+$/.test(p.rawTransaction))
314
- return (0, exports.fail)('INVALID_REQUEST');
315
- totalParentBytes += p.rawTransaction.length / 2;
316
- if (totalParentBytes > exports.LIMITS.totalParentBytes)
317
- return (0, exports.fail)('LIMIT_EXCEEDED');
318
- return Object.freeze({ txid: id, rawTransaction: p.rawTransaction });
319
- })
320
- .sort((a, b) => (a.txid < b.txid ? -1 : a.txid > b.txid ? 1 : 0)));
321
- // Preflight the whole parent set before the first object-heavy decode.
322
- const encodedParents = new Map();
323
- let parentComponents = 0;
324
- for (const p of previousTransactions) {
325
- if (encodedParents.has(p.txid))
326
- return (0, exports.fail)('INVALID_REQUEST');
327
- const bytes = Buffer.from(p.rawTransaction, 'hex');
328
- const version = bytes.readInt32LE(0);
329
- if (version !== 1 && version !== 2)
330
- return (0, exports.fail)('UNSUPPORTED_PARENT');
331
- parentComponents += boundedParentEncoding(bytes, exports.LIMITS.parentComponents - parentComponents);
332
- encodedParents.set(p.txid, bytes);
333
- }
334
- const parents = new Map();
335
- for (const p of previousTransactions) {
336
- const parent = bitcoinjs_lib_1.Transaction.fromBuffer(encodedParents.get(p.txid));
337
- if (parent.toHex() !== p.rawTransaction || parent.getId() !== p.txid)
338
- return (0, exports.fail)('INPUT_MISMATCH');
339
- if (parent.isCoinbase())
340
- return (0, exports.fail)('UNSUPPORTED_PARENT');
341
- let total = 0n;
342
- for (const output of parent.outs) {
343
- if (output.value < 0n || output.value > profile.maximumMoney)
344
- return (0, exports.fail)('INVALID_REQUEST');
345
- total += output.value;
346
- if (total > profile.maximumMoney)
347
- return (0, exports.fail)('INVALID_REQUEST');
348
- }
349
- parents.set(p.txid, parent);
350
- }
351
- const recipientRecord = record(r.recipient, ['address', 'valueSatoshis']);
352
- const recipient = Object.freeze({
353
- address: recipientAddress(recipientRecord.address, profile.addressNetwork),
354
- valueSatoshis: quantity(recipientRecord.valueSatoshis, profile.maximumMoney, true),
355
- });
356
- const changeRecord = r.change === null ? null : record(r.change, ['index', 'valueSatoshis']);
357
- const change = changeRecord === null
358
- ? null
359
- : Object.freeze({
360
- index: index(changeRecord.index),
361
- valueSatoshis: quantity(changeRecord.valueSatoshis, profile.maximumMoney, true),
362
- });
363
- const f = record(r.feeLimits, ['maxFeeSatoshis', 'maxFeeRateSatPerVByte']);
364
- const feeLimits = Object.freeze({
365
- maxFeeSatoshis: quantity(f.maxFeeSatoshis, exports.LIMITS.maxFee),
366
- maxFeeRateSatPerVByte: quantity(f.maxFeeRateSatPerVByte, exports.LIMITS.maxFeeRate),
367
- });
368
- const psbt = new bitcoinjs_lib_1.Psbt({ network: profile.addressNetwork });
369
- psbt.setVersion(2);
370
- psbt.setLocktime(0);
371
- const seen = new Set();
372
- const used = new Set();
373
- const previousOutputs = [];
374
- let inputTotal = 0n;
375
- for (const i of inputs) {
376
- const outpoint = `${i.txid}:${i.vout}`;
377
- if (seen.has(outpoint))
378
- return (0, exports.fail)('INPUT_MISMATCH');
379
- seen.add(outpoint);
380
- const previous = parents.get(i.txid)?.outs[i.vout];
381
- if (!previous)
382
- return (0, exports.fail)('INPUT_MISMATCH');
383
- used.add(i.txid);
384
- const derived = (0, public_bip84_1.deriveBip84PublicAddress)({
385
- network: network.network,
386
- accountKey: account.canonicalKey,
387
- branch: i.branch,
388
- index: i.index,
389
- });
390
- if (Buffer.from(previous.script).toString('hex') !== derived.scriptPubKey)
391
- return (0, exports.fail)('INPUT_MISMATCH');
392
- inputTotal += previous.value;
393
- if (inputTotal > profile.maximumMoney)
394
- return (0, exports.fail)('INVALID_REQUEST');
395
- previousOutputs.push({
396
- script: Uint8Array.from(previous.script),
397
- value: previous.value,
398
- });
399
- psbt.addInput({
400
- hash: i.txid,
401
- index: i.vout,
402
- sequence: r.rbf ? 0xfffffffd : 0xffffffff,
403
- witnessUtxo: {
404
- script: Uint8Array.from(previous.script),
405
- value: previous.value,
406
- },
407
- sighashType: bitcoinjs_lib_1.Transaction.SIGHASH_ALL,
408
- });
409
- }
410
- if (used.size !== parents.size)
411
- return (0, exports.fail)('INVALID_REQUEST');
412
- psbt.addOutput({
413
- address: recipient.address,
414
- value: BigInt(recipient.valueSatoshis),
415
- });
416
- let outputTotal = BigInt(recipient.valueSatoshis);
417
- if (change) {
418
- const derived = (0, public_bip84_1.deriveBip84PublicAddress)({
419
- network: network.network,
420
- accountKey: account.canonicalKey,
421
- branch: 1,
422
- index: change.index,
423
- });
424
- psbt.addOutput({
425
- script: Buffer.from(derived.scriptPubKey, 'hex'),
426
- value: BigInt(change.valueSatoshis),
427
- });
428
- outputTotal += BigInt(change.valueSatoshis);
429
- }
430
- if (outputTotal > profile.maximumMoney)
431
- return (0, exports.fail)('INVALID_REQUEST');
432
- const fee = inputTotal - outputTotal;
433
- if (fee < 0n || fee > BigInt(feeLimits.maxFeeSatoshis))
434
- return (0, exports.fail)('FEE_LIMIT');
435
- const unsignedBytes = psbt.data.globalMap.unsignedTx.toBuffer();
436
- if (unsignedBytes.length > exports.LIMITS.unsignedBytes ||
437
- psbt.toBuffer().length > exports.LIMITS.psbtBytes)
438
- return (0, exports.fail)('LIMIT_EXCEEDED');
439
- // A valid P2WPKH DER signature (including sighash byte) is at most 73 bytes.
440
- // This only rejects fees that cannot fit the rate cap even at maximum size.
441
- // Signing must check the actual final vsize again before releasing bytes.
442
- const maximumSigned = bitcoinjs_lib_1.Transaction.fromBuffer(unsignedBytes);
443
- inputs.forEach((_, i) => maximumSigned.setWitness(i, [new Uint8Array(73), new Uint8Array(33)]));
444
- if (maximumSigned.toBuffer().length > exports.LIMITS.signedBytes)
445
- return (0, exports.fail)('LIMIT_EXCEEDED');
446
- if (fee >
447
- BigInt(maximumSigned.virtualSize()) *
448
- BigInt(feeLimits.maxFeeRateSatPerVByte))
449
- return (0, exports.fail)('FEE_LIMIT');
450
- const plan = Object.freeze({
451
- network,
452
- account,
453
- inputs,
454
- previousTransactions,
455
- recipient,
456
- change,
457
- locktime: 0,
458
- rbf: r.rbf,
459
- feeLimits,
460
- });
461
- return {
462
- prepared: Object.freeze({
463
- plan,
464
- unsignedTransaction: Buffer.from(unsignedBytes).toString('hex'),
465
- feeSatoshis: fee.toString(),
466
- }),
467
- psbt,
468
- previousOutputs,
469
- };
470
- }
471
- catch (error) {
472
- if (error instanceof Bip84NativeError)
473
- throw error;
474
- return (0, exports.fail)('INVALID_REQUEST');
475
- }
476
- }
477
- /** Pure bounded preparation; returned data carries no signing authorization. */
478
- function prepareBip84NativeTransaction(plan) {
479
- return validateBip84NativePlan(plan).prepared;
480
- }
481
- //# sourceMappingURL=bip84-native-plan.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bip84-native-plan.js","sourceRoot":"","sources":["../../../src/transactions/bip84-native-plan.ts"],"names":[],"mappings":"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"}