@sidhujag/sysweb3-keyring 1.0.628 → 2.1.0

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 (131) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +174 -0
  3. package/cjs/bip84-native.js +8 -0
  4. package/cjs/bip84-native.js.map +1 -0
  5. package/cjs/hardware-wallet-manager.js +302 -128
  6. package/cjs/hardware-wallet-manager.js.map +1 -1
  7. package/cjs/keyring-core.js +319 -0
  8. package/cjs/keyring-core.js.map +1 -1
  9. package/cjs/keyring-manager.js +9 -3
  10. package/cjs/keyring-manager.js.map +1 -1
  11. package/cjs/ledger/bitcoin_client/lib/appClient.js.map +1 -1
  12. package/cjs/ledger/host-types.js +10 -0
  13. package/cjs/ledger/host-types.js.map +1 -0
  14. package/cjs/ledger/index.js +243 -447
  15. package/cjs/ledger/index.js.map +1 -1
  16. package/cjs/ledger/prepare-psbt.js +177 -0
  17. package/cjs/ledger/prepare-psbt.js.map +1 -0
  18. package/cjs/public-bip84.js +157 -0
  19. package/cjs/public-bip84.js.map +1 -0
  20. package/cjs/software-hd-account.js +23 -0
  21. package/cjs/software-hd-account.js.map +1 -0
  22. package/cjs/software-utxo-account.js +12 -0
  23. package/cjs/software-utxo-account.js.map +1 -0
  24. package/cjs/software.js +24 -0
  25. package/cjs/software.js.map +1 -1
  26. package/cjs/transactions/bip84-native-plan.js +481 -0
  27. package/cjs/transactions/bip84-native-plan.js.map +1 -0
  28. package/cjs/transactions/ethereum.js +55 -10
  29. package/cjs/transactions/ethereum.js.map +1 -1
  30. package/cjs/transactions/hardware-psbt.js +36 -44
  31. package/cjs/transactions/hardware-psbt.js.map +1 -1
  32. package/cjs/transactions/prepared-bip84.js +214 -0
  33. package/cjs/transactions/prepared-bip84.js.map +1 -0
  34. package/cjs/transactions/prepared-evm.js +197 -0
  35. package/cjs/transactions/prepared-evm.js.map +1 -0
  36. package/cjs/trezor/connect.js +243 -0
  37. package/cjs/trezor/connect.js.map +1 -0
  38. package/cjs/trezor/index.js +96 -58
  39. package/cjs/trezor/index.js.map +1 -1
  40. package/cjs/trezor/witness.js +25 -0
  41. package/cjs/trezor/witness.js.map +1 -0
  42. package/cjs/utils/psbt-account-scope.js +5 -3
  43. package/cjs/utils/psbt-account-scope.js.map +1 -1
  44. package/esm/errorUtils.js +72 -0
  45. package/esm/errorUtils.js.map +1 -0
  46. package/esm/ethers-v6.js +207 -0
  47. package/esm/ethers-v6.js.map +1 -0
  48. package/esm/hardware-wallet-manager.js +643 -0
  49. package/esm/hardware-wallet-manager.js.map +1 -0
  50. package/esm/ledger/bitcoin_client/lib/appClient.js +279 -0
  51. package/esm/ledger/bitcoin_client/lib/appClient.js.map +1 -0
  52. package/esm/ledger/bitcoin_client/lib/bip32.js +49 -0
  53. package/esm/ledger/bitcoin_client/lib/bip32.js.map +1 -0
  54. package/esm/ledger/bitcoin_client/lib/buffertools.js +119 -0
  55. package/esm/ledger/bitcoin_client/lib/buffertools.js.map +1 -0
  56. package/esm/ledger/bitcoin_client/lib/clientCommands.js +269 -0
  57. package/esm/ledger/bitcoin_client/lib/clientCommands.js.map +1 -0
  58. package/esm/ledger/bitcoin_client/lib/merkelizedPsbt.js +50 -0
  59. package/esm/ledger/bitcoin_client/lib/merkelizedPsbt.js.map +1 -0
  60. package/esm/ledger/bitcoin_client/lib/merkle.js +111 -0
  61. package/esm/ledger/bitcoin_client/lib/merkle.js.map +1 -0
  62. package/esm/ledger/bitcoin_client/lib/merkleMap.js +42 -0
  63. package/esm/ledger/bitcoin_client/lib/merkleMap.js.map +1 -0
  64. package/esm/ledger/bitcoin_client/lib/policy.js +68 -0
  65. package/esm/ledger/bitcoin_client/lib/policy.js.map +1 -0
  66. package/esm/ledger/bitcoin_client/lib/psbtv2.js +645 -0
  67. package/esm/ledger/bitcoin_client/lib/psbtv2.js.map +1 -0
  68. package/esm/ledger/bitcoin_client/lib/varint.js +108 -0
  69. package/esm/ledger/bitcoin_client/lib/varint.js.map +1 -0
  70. package/esm/ledger/consts.js +4 -0
  71. package/esm/ledger/consts.js.map +1 -0
  72. package/esm/ledger/dmk-evm.js +258 -0
  73. package/esm/ledger/dmk-evm.js.map +1 -0
  74. package/esm/ledger/dmk-session.js +264 -0
  75. package/esm/ledger/dmk-session.js.map +1 -0
  76. package/esm/ledger/dmk-utxo.js +279 -0
  77. package/esm/ledger/dmk-utxo.js.map +1 -0
  78. package/esm/ledger/host-types.js +5 -0
  79. package/esm/ledger/host-types.js.map +1 -0
  80. package/esm/ledger/index.js +268 -0
  81. package/esm/ledger/index.js.map +1 -0
  82. package/esm/ledger/prepare-psbt.js +141 -0
  83. package/esm/ledger/prepare-psbt.js.map +1 -0
  84. package/esm/ledger/types.js +2 -0
  85. package/esm/ledger/types.js.map +1 -0
  86. package/esm/ledger-host.js +36 -0
  87. package/esm/ledger-host.js.map +1 -0
  88. package/esm/private-records.js +153 -0
  89. package/esm/private-records.js.map +1 -0
  90. package/esm/providers.js +588 -0
  91. package/esm/providers.js.map +1 -0
  92. package/esm/signers.js +28 -0
  93. package/esm/signers.js.map +1 -0
  94. package/esm/trezor/connect.js +206 -0
  95. package/esm/trezor/connect.js.map +1 -0
  96. package/esm/trezor/index.js +876 -0
  97. package/esm/trezor/index.js.map +1 -0
  98. package/esm/trezor/witness.js +21 -0
  99. package/esm/trezor/witness.js.map +1 -0
  100. package/esm/types.js +17 -0
  101. package/esm/types.js.map +1 -0
  102. package/esm/utils/derivation-paths.js +109 -0
  103. package/esm/utils/derivation-paths.js.map +1 -0
  104. package/esm/utils/psbt-account-scope.js +310 -0
  105. package/esm/utils/psbt-account-scope.js.map +1 -0
  106. package/package.json +34 -9
  107. package/types/bip84-native.d.ts +3 -0
  108. package/types/hardware-wallet-manager.d.ts +12 -19
  109. package/types/keyring-core.d.ts +14 -0
  110. package/types/keyring-manager.d.ts +2 -1
  111. package/types/ledger/bitcoin_client/lib/appClient.d.ts +6 -3
  112. package/types/ledger/dmk-evm.d.ts +8 -0
  113. package/types/ledger/dmk-session.d.ts +60 -0
  114. package/types/ledger/dmk-utxo.d.ts +26 -0
  115. package/types/ledger/host-types.d.ts +131 -0
  116. package/types/ledger/index.d.ts +21 -58
  117. package/types/ledger/prepare-psbt.d.ts +3 -0
  118. package/types/ledger/types.d.ts +3 -0
  119. package/types/ledger-host.d.ts +7 -0
  120. package/types/public-bip84.d.ts +39 -0
  121. package/types/software-hd-account.d.ts +16 -0
  122. package/types/software-utxo-account.d.ts +13 -0
  123. package/types/software.d.ts +26 -0
  124. package/types/transactions/bip84-native-plan.d.ts +83 -0
  125. package/types/transactions/ethereum.d.ts +1 -1
  126. package/types/transactions/prepared-bip84.d.ts +27 -0
  127. package/types/transactions/prepared-evm.d.ts +53 -0
  128. package/types/trezor/connect.d.ts +42 -0
  129. package/types/trezor/index.d.ts +22 -4
  130. package/types/trezor/witness.d.ts +3 -0
  131. package/types/utils/psbt-account-scope.d.ts +1 -0
@@ -0,0 +1,481 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bip84-native-plan.js","sourceRoot":"","sources":["../../../src/transactions/bip84-native-plan.ts"],"names":[],"mappings":"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"}