@bsv/sdk 1.8.13 → 1.9.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 (89) hide show
  1. package/dist/cjs/package.json +1 -1
  2. package/dist/cjs/src/auth/Peer.js +35 -16
  3. package/dist/cjs/src/auth/Peer.js.map +1 -1
  4. package/dist/cjs/src/kvstore/LocalKVStore.js +7 -7
  5. package/dist/cjs/src/kvstore/LocalKVStore.js.map +1 -1
  6. package/dist/cjs/src/primitives/BigNumber.js +43 -31
  7. package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
  8. package/dist/cjs/src/primitives/Hash.js +11 -5
  9. package/dist/cjs/src/primitives/Hash.js.map +1 -1
  10. package/dist/cjs/src/primitives/SymmetricKey.js +15 -6
  11. package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -1
  12. package/dist/cjs/src/primitives/TransactionSignature.js +60 -18
  13. package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
  14. package/dist/cjs/src/primitives/utils.js +74 -28
  15. package/dist/cjs/src/primitives/utils.js.map +1 -1
  16. package/dist/cjs/src/script/Script.js +217 -108
  17. package/dist/cjs/src/script/Script.js.map +1 -1
  18. package/dist/cjs/src/script/Spend.js +5 -2
  19. package/dist/cjs/src/script/Spend.js.map +1 -1
  20. package/dist/cjs/src/transaction/Beef.js +62 -7
  21. package/dist/cjs/src/transaction/Beef.js.map +1 -1
  22. package/dist/cjs/src/transaction/BeefTx.js +1 -1
  23. package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
  24. package/dist/cjs/src/transaction/Transaction.js +67 -35
  25. package/dist/cjs/src/transaction/Transaction.js.map +1 -1
  26. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  27. package/dist/esm/src/auth/Peer.js +36 -16
  28. package/dist/esm/src/auth/Peer.js.map +1 -1
  29. package/dist/esm/src/kvstore/LocalKVStore.js +7 -7
  30. package/dist/esm/src/kvstore/LocalKVStore.js.map +1 -1
  31. package/dist/esm/src/primitives/BigNumber.js +43 -31
  32. package/dist/esm/src/primitives/BigNumber.js.map +1 -1
  33. package/dist/esm/src/primitives/Hash.js +11 -5
  34. package/dist/esm/src/primitives/Hash.js.map +1 -1
  35. package/dist/esm/src/primitives/SymmetricKey.js +15 -6
  36. package/dist/esm/src/primitives/SymmetricKey.js.map +1 -1
  37. package/dist/esm/src/primitives/TransactionSignature.js +60 -18
  38. package/dist/esm/src/primitives/TransactionSignature.js.map +1 -1
  39. package/dist/esm/src/primitives/utils.js +74 -28
  40. package/dist/esm/src/primitives/utils.js.map +1 -1
  41. package/dist/esm/src/script/Script.js +222 -110
  42. package/dist/esm/src/script/Script.js.map +1 -1
  43. package/dist/esm/src/script/Spend.js +6 -2
  44. package/dist/esm/src/script/Spend.js.map +1 -1
  45. package/dist/esm/src/transaction/Beef.js +64 -7
  46. package/dist/esm/src/transaction/Beef.js.map +1 -1
  47. package/dist/esm/src/transaction/BeefTx.js +1 -1
  48. package/dist/esm/src/transaction/BeefTx.js.map +1 -1
  49. package/dist/esm/src/transaction/Transaction.js +69 -35
  50. package/dist/esm/src/transaction/Transaction.js.map +1 -1
  51. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  52. package/dist/types/src/auth/Peer.d.ts +4 -0
  53. package/dist/types/src/auth/Peer.d.ts.map +1 -1
  54. package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
  55. package/dist/types/src/primitives/Hash.d.ts +10 -10
  56. package/dist/types/src/primitives/Hash.d.ts.map +1 -1
  57. package/dist/types/src/primitives/SymmetricKey.d.ts.map +1 -1
  58. package/dist/types/src/primitives/TransactionSignature.d.ts +34 -13
  59. package/dist/types/src/primitives/TransactionSignature.d.ts.map +1 -1
  60. package/dist/types/src/primitives/utils.d.ts +6 -8
  61. package/dist/types/src/primitives/utils.d.ts.map +1 -1
  62. package/dist/types/src/script/Script.d.ts +18 -9
  63. package/dist/types/src/script/Script.d.ts.map +1 -1
  64. package/dist/types/src/script/Spend.d.ts +1 -0
  65. package/dist/types/src/script/Spend.d.ts.map +1 -1
  66. package/dist/types/src/transaction/Beef.d.ts +9 -0
  67. package/dist/types/src/transaction/Beef.d.ts.map +1 -1
  68. package/dist/types/src/transaction/Transaction.d.ts +7 -0
  69. package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
  70. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  71. package/dist/umd/bundle.js +3 -3
  72. package/dist/umd/bundle.js.map +1 -1
  73. package/docs/reference/primitives.md +87 -37
  74. package/docs/reference/script.md +11 -7
  75. package/docs/reference/transaction.md +2 -0
  76. package/package.json +1 -1
  77. package/src/auth/Peer.ts +44 -18
  78. package/src/kvstore/LocalKVStore.ts +7 -7
  79. package/src/kvstore/__tests/LocalKVStore.test.ts +17 -17
  80. package/src/primitives/BigNumber.ts +44 -23
  81. package/src/primitives/Hash.ts +41 -17
  82. package/src/primitives/SymmetricKey.ts +15 -6
  83. package/src/primitives/TransactionSignature.ts +77 -31
  84. package/src/primitives/utils.ts +80 -30
  85. package/src/script/Script.ts +238 -104
  86. package/src/script/Spend.ts +7 -3
  87. package/src/transaction/Beef.ts +74 -7
  88. package/src/transaction/BeefTx.ts +1 -1
  89. package/src/transaction/Transaction.ts +77 -34
@@ -1,5 +1,5 @@
1
1
  import OP from './OP.js';
2
- import { encode, toHex, Reader, Writer, toArray } from '../primitives/utils.js';
2
+ import { encode, toHex, toArray } from '../primitives/utils.js';
3
3
  import BigNumber from '../primitives/BigNumber.js';
4
4
  /**
5
5
  * The Script class represents a script in a Bitcoin SV transaction,
@@ -8,8 +8,12 @@ import BigNumber from '../primitives/BigNumber.js';
8
8
  *
9
9
  * @property {ScriptChunk[]} chunks - An array of script chunks that make up the script.
10
10
  */
11
+ const BufferCtor = typeof globalThis !== 'undefined' ? globalThis.Buffer : undefined;
11
12
  export default class Script {
12
- chunks;
13
+ _chunks;
14
+ parsed;
15
+ rawBytesCache;
16
+ hexCache;
13
17
  /**
14
18
  * @method fromASM
15
19
  * Static method to construct a Script instance from an ASM (Assembly) formatted string.
@@ -109,7 +113,9 @@ export default class Script {
109
113
  if (!/^[0-9a-fA-F]+$/.test(hex)) {
110
114
  throw new Error('Some elements in this string are not hex encoded.');
111
115
  }
112
- return Script.fromBinary(toArray(hex, 'hex'));
116
+ const bin = toArray(hex, 'hex');
117
+ const rawBytes = Uint8Array.from(bin);
118
+ return new Script([], rawBytes, hex.toLowerCase(), false);
113
119
  }
114
120
  /**
115
121
  * @method fromBinary
@@ -120,91 +126,42 @@ export default class Script {
120
126
  * const script = Script.fromBinary([0x76, 0xa9, ...])
121
127
  */
122
128
  static fromBinary(bin) {
123
- bin = [...bin];
124
- const chunks = [];
125
- let inConditionalBlock = 0;
126
- const br = new Reader(bin);
127
- while (!br.eof()) {
128
- const op = br.readUInt8();
129
- // if OP_RETURN and not in a conditional block, do not parse the rest of the data,
130
- // rather just return the last chunk as data without prefixing with data length.
131
- if (op === OP.OP_RETURN && inConditionalBlock === 0) {
132
- chunks.push({
133
- op,
134
- data: br.read()
135
- });
136
- break;
137
- }
138
- if (op === OP.OP_IF || op === OP.OP_NOTIF || op === OP.OP_VERIF || op === OP.OP_VERNOTIF) {
139
- inConditionalBlock++;
140
- }
141
- else if (op === OP.OP_ENDIF) {
142
- inConditionalBlock--;
143
- }
144
- let len = 0;
145
- // eslint-disable-next-line @typescript-eslint/no-shadow
146
- let data = [];
147
- if (op > 0 && op < OP.OP_PUSHDATA1) {
148
- len = op;
149
- chunks.push({
150
- data: br.read(len),
151
- op
152
- });
153
- }
154
- else if (op === OP.OP_PUSHDATA1) {
155
- try {
156
- len = br.readUInt8();
157
- data = br.read(len);
158
- }
159
- catch {
160
- br.read();
161
- }
162
- chunks.push({
163
- data,
164
- op
165
- });
166
- }
167
- else if (op === OP.OP_PUSHDATA2) {
168
- try {
169
- len = br.readUInt16LE();
170
- data = br.read(len);
171
- }
172
- catch {
173
- br.read();
174
- }
175
- chunks.push({
176
- data,
177
- op
178
- });
179
- }
180
- else if (op === OP.OP_PUSHDATA4) {
181
- try {
182
- len = br.readUInt32LE();
183
- data = br.read(len);
184
- }
185
- catch {
186
- br.read();
187
- }
188
- chunks.push({
189
- data,
190
- op
191
- });
192
- }
193
- else {
194
- chunks.push({
195
- op
196
- });
197
- }
198
- }
199
- return new Script(chunks);
129
+ const rawBytes = Uint8Array.from(bin);
130
+ return new Script([], rawBytes, undefined, false);
200
131
  }
201
132
  /**
202
133
  * @constructor
203
134
  * Constructs a new Script object.
204
135
  * @param chunks=[] - An array of script chunks to directly initialize the script.
136
+ * @param rawBytesCache - Optional serialized bytes that can be reused instead of reserializing `chunks`.
137
+ * @param hexCache - Optional lowercase hex string that matches the serialized bytes, used to satisfy `toHex` quickly.
138
+ * @param parsed - When false the script defers parsing `rawBytesCache` until `chunks` is accessed; defaults to true.
205
139
  */
206
- constructor(chunks = []) {
207
- this.chunks = chunks;
140
+ constructor(chunks = [], rawBytesCache, hexCache, parsed = true) {
141
+ this._chunks = chunks;
142
+ this.parsed = parsed;
143
+ this.rawBytesCache = rawBytesCache;
144
+ this.hexCache = hexCache;
145
+ }
146
+ get chunks() {
147
+ this.ensureParsed();
148
+ return this._chunks;
149
+ }
150
+ set chunks(value) {
151
+ this._chunks = value;
152
+ this.parsed = true;
153
+ this.invalidateSerializationCaches();
154
+ }
155
+ ensureParsed() {
156
+ if (this.parsed)
157
+ return;
158
+ if (this.rawBytesCache != null) {
159
+ this._chunks = Script.parseChunks(this.rawBytesCache);
160
+ }
161
+ else {
162
+ this._chunks = [];
163
+ }
164
+ this.parsed = true;
208
165
  }
209
166
  /**
210
167
  * @method toASM
@@ -225,7 +182,17 @@ export default class Script {
225
182
  * @returns The script in hexadecimal format.
226
183
  */
227
184
  toHex() {
228
- return encode(this.toBinary(), 'hex');
185
+ if (this.hexCache != null) {
186
+ return this.hexCache;
187
+ }
188
+ if (this.rawBytesCache == null) {
189
+ this.rawBytesCache = this.serializeChunksToBytes();
190
+ }
191
+ const hex = BufferCtor != null
192
+ ? BufferCtor.from(this.rawBytesCache).toString('hex')
193
+ : encode(Array.from(this.rawBytesCache), 'hex');
194
+ this.hexCache = hex;
195
+ return hex;
229
196
  }
230
197
  /**
231
198
  * @method toBinary
@@ -233,34 +200,13 @@ export default class Script {
233
200
  * @returns The script in binary array format.
234
201
  */
235
202
  toBinary() {
236
- const writer = new Writer();
237
- for (let i = 0; i < this.chunks.length; i++) {
238
- const chunk = this.chunks[i];
239
- const op = chunk.op;
240
- writer.writeUInt8(op);
241
- if (op === OP.OP_RETURN && chunk.data != null) { // special case for unformatted data
242
- writer.write(chunk.data);
243
- break;
244
- }
245
- else if (chunk.data != null) {
246
- if (op < OP.OP_PUSHDATA1) {
247
- writer.write(chunk.data);
248
- }
249
- else if (op === OP.OP_PUSHDATA1) {
250
- writer.writeUInt8(chunk.data.length);
251
- writer.write(chunk.data);
252
- }
253
- else if (op === OP.OP_PUSHDATA2) {
254
- writer.writeUInt16LE(chunk.data.length);
255
- writer.write(chunk.data);
256
- }
257
- else if (op === OP.OP_PUSHDATA4) {
258
- writer.writeUInt32LE(chunk.data.length);
259
- writer.write(chunk.data);
260
- }
261
- }
203
+ return Array.from(this.toUint8Array());
204
+ }
205
+ toUint8Array() {
206
+ if (this.rawBytesCache == null) {
207
+ this.rawBytesCache = this.serializeChunksToBytes();
262
208
  }
263
- return writer.toArray();
209
+ return this.rawBytesCache;
264
210
  }
265
211
  /**
266
212
  * @method writeScript
@@ -269,6 +215,7 @@ export default class Script {
269
215
  * @returns This script instance for chaining.
270
216
  */
271
217
  writeScript(script) {
218
+ this.invalidateSerializationCaches();
272
219
  this.chunks = this.chunks.concat(script.chunks);
273
220
  return this;
274
221
  }
@@ -279,6 +226,7 @@ export default class Script {
279
226
  * @returns This script instance for chaining.
280
227
  */
281
228
  writeOpCode(op) {
229
+ this.invalidateSerializationCaches();
282
230
  this.chunks.push({ op });
283
231
  return this;
284
232
  }
@@ -290,6 +238,7 @@ export default class Script {
290
238
  * @returns This script instance for chaining.
291
239
  */
292
240
  setChunkOpCode(i, op) {
241
+ this.invalidateSerializationCaches();
293
242
  this.chunks[i] = { op };
294
243
  return this;
295
244
  }
@@ -300,6 +249,7 @@ export default class Script {
300
249
  * @returns This script instance for chaining.
301
250
  */
302
251
  writeBn(bn) {
252
+ this.invalidateSerializationCaches();
303
253
  if (bn.cmpn(0) === OP.OP_0) {
304
254
  this.chunks.push({
305
255
  op: OP.OP_0
@@ -330,6 +280,7 @@ export default class Script {
330
280
  * @throws {Error} Throws an error if the data is too large to be pushed.
331
281
  */
332
282
  writeBin(bin) {
283
+ this.invalidateSerializationCaches();
333
284
  let op;
334
285
  const data = bin.length > 0 ? bin : undefined;
335
286
  if (bin.length > 0 && bin.length < OP.OP_PUSHDATA1) {
@@ -363,6 +314,7 @@ export default class Script {
363
314
  * @returns This script instance for chaining.
364
315
  */
365
316
  writeNumber(num) {
317
+ this.invalidateSerializationCaches();
366
318
  this.writeBn(new BigNumber(num));
367
319
  return this;
368
320
  }
@@ -372,6 +324,7 @@ export default class Script {
372
324
  * @returns This script instance for chaining.
373
325
  */
374
326
  removeCodeseparators() {
327
+ this.invalidateSerializationCaches();
375
328
  const chunks = [];
376
329
  for (let i = 0; i < this.chunks.length; i++) {
377
330
  if (this.chunks[i].op !== OP.OP_CODESEPARATOR) {
@@ -389,6 +342,7 @@ export default class Script {
389
342
  * @returns This script instance for chaining.
390
343
  */
391
344
  findAndDelete(script) {
345
+ this.invalidateSerializationCaches();
392
346
  const buf = script.toHex();
393
347
  for (let i = 0; i < this.chunks.length; i++) {
394
348
  const script2 = new Script([this.chunks[i]]);
@@ -437,6 +391,164 @@ export default class Script {
437
391
  * @param chunk - The script chunk.
438
392
  * @returns The string representation of the chunk.
439
393
  */
394
+ static computeSerializedLength(chunks) {
395
+ let total = 0;
396
+ for (const chunk of chunks) {
397
+ total += 1;
398
+ if (chunk.data == null)
399
+ continue;
400
+ const len = chunk.data.length;
401
+ if (chunk.op === OP.OP_RETURN) {
402
+ total += len;
403
+ break;
404
+ }
405
+ if (chunk.op < OP.OP_PUSHDATA1) {
406
+ total += len;
407
+ }
408
+ else if (chunk.op === OP.OP_PUSHDATA1) {
409
+ total += 1 + len;
410
+ }
411
+ else if (chunk.op === OP.OP_PUSHDATA2) {
412
+ total += 2 + len;
413
+ }
414
+ else if (chunk.op === OP.OP_PUSHDATA4) {
415
+ total += 4 + len;
416
+ }
417
+ }
418
+ return total;
419
+ }
420
+ serializeChunksToBytes() {
421
+ const chunks = this.chunks;
422
+ const totalLength = Script.computeSerializedLength(chunks);
423
+ const bytes = new Uint8Array(totalLength);
424
+ let offset = 0;
425
+ for (let i = 0; i < chunks.length; i++) {
426
+ const chunk = chunks[i];
427
+ bytes[offset++] = chunk.op;
428
+ if (chunk.data == null)
429
+ continue;
430
+ if (chunk.op === OP.OP_RETURN) {
431
+ bytes.set(chunk.data, offset);
432
+ offset += chunk.data.length;
433
+ break;
434
+ }
435
+ offset = Script.writeChunkData(bytes, offset, chunk.op, chunk.data);
436
+ }
437
+ return bytes;
438
+ }
439
+ invalidateSerializationCaches() {
440
+ this.rawBytesCache = undefined;
441
+ this.hexCache = undefined;
442
+ }
443
+ static writeChunkData(target, offset, op, data) {
444
+ const len = data.length;
445
+ if (op < OP.OP_PUSHDATA1) {
446
+ target.set(data, offset);
447
+ return offset + len;
448
+ }
449
+ else if (op === OP.OP_PUSHDATA1) {
450
+ target[offset++] = len & 0xff;
451
+ target.set(data, offset);
452
+ return offset + len;
453
+ }
454
+ else if (op === OP.OP_PUSHDATA2) {
455
+ target[offset++] = len & 0xff;
456
+ target[offset++] = (len >> 8) & 0xff;
457
+ target.set(data, offset);
458
+ return offset + len;
459
+ }
460
+ else if (op === OP.OP_PUSHDATA4) {
461
+ const size = len >>> 0;
462
+ target[offset++] = size & 0xff;
463
+ target[offset++] = (size >> 8) & 0xff;
464
+ target[offset++] = (size >> 16) & 0xff;
465
+ target[offset++] = (size >> 24) & 0xff;
466
+ target.set(data, offset);
467
+ return offset + len;
468
+ }
469
+ return offset;
470
+ }
471
+ static parseChunks(bytes) {
472
+ const chunks = [];
473
+ const length = bytes.length;
474
+ let pos = 0;
475
+ let inConditionalBlock = 0;
476
+ while (pos < length) {
477
+ const op = bytes[pos++] ?? 0;
478
+ if (op === OP.OP_RETURN && inConditionalBlock === 0) {
479
+ chunks.push({
480
+ op,
481
+ data: Script.copyRange(bytes, pos, length)
482
+ });
483
+ break;
484
+ }
485
+ if (op === OP.OP_IF ||
486
+ op === OP.OP_NOTIF ||
487
+ op === OP.OP_VERIF ||
488
+ op === OP.OP_VERNOTIF) {
489
+ inConditionalBlock++;
490
+ }
491
+ else if (op === OP.OP_ENDIF) {
492
+ inConditionalBlock--;
493
+ }
494
+ if (op > 0 && op < OP.OP_PUSHDATA1) {
495
+ const len = op;
496
+ const end = Math.min(pos + len, length);
497
+ chunks.push({
498
+ data: Script.copyRange(bytes, pos, end),
499
+ op
500
+ });
501
+ pos = end;
502
+ }
503
+ else if (op === OP.OP_PUSHDATA1) {
504
+ const len = pos < length ? bytes[pos++] ?? 0 : 0;
505
+ const end = Math.min(pos + len, length);
506
+ chunks.push({
507
+ data: Script.copyRange(bytes, pos, end),
508
+ op
509
+ });
510
+ pos = end;
511
+ }
512
+ else if (op === OP.OP_PUSHDATA2) {
513
+ const b0 = bytes[pos] ?? 0;
514
+ const b1 = bytes[pos + 1] ?? 0;
515
+ const len = b0 | (b1 << 8);
516
+ pos = Math.min(pos + 2, length);
517
+ const end = Math.min(pos + len, length);
518
+ chunks.push({
519
+ data: Script.copyRange(bytes, pos, end),
520
+ op
521
+ });
522
+ pos = end;
523
+ }
524
+ else if (op === OP.OP_PUSHDATA4) {
525
+ const len = ((bytes[pos] ?? 0) |
526
+ ((bytes[pos + 1] ?? 0) << 8) |
527
+ ((bytes[pos + 2] ?? 0) << 16) |
528
+ ((bytes[pos + 3] ?? 0) << 24)) >>>
529
+ 0;
530
+ pos = Math.min(pos + 4, length);
531
+ const end = Math.min(pos + len, length);
532
+ chunks.push({
533
+ data: Script.copyRange(bytes, pos, end),
534
+ op
535
+ });
536
+ pos = end;
537
+ }
538
+ else {
539
+ chunks.push({ op });
540
+ }
541
+ }
542
+ return chunks;
543
+ }
544
+ static copyRange(bytes, start, end) {
545
+ const size = Math.max(end - start, 0);
546
+ const data = new Array(size);
547
+ for (let i = 0; i < size; i++) {
548
+ data[i] = bytes[start + i] ?? 0;
549
+ }
550
+ return data;
551
+ }
440
552
  _chunkToString(chunk) {
441
553
  const op = chunk.op;
442
554
  let str = '';
@@ -1 +1 @@
1
- {"version":3,"file":"Script.js","sourceRoot":"","sources":["../../../../src/script/Script.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Script.js","sourceRoot":"","sources":["../../../../src/script/Script.ts"],"names":[],"mappings":"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"}
@@ -146,6 +146,7 @@ export default class Spend {
146
146
  memoryLimit;
147
147
  stackMem;
148
148
  altStackMem;
149
+ sigHashCache;
149
150
  /**
150
151
  * @constructor
151
152
  * Constructs the Spend object with necessary transaction details.
@@ -196,6 +197,7 @@ export default class Spend {
196
197
  this.ifStack = [];
197
198
  this.stackMem = 0;
198
199
  this.altStackMem = 0;
200
+ this.sigHashCache = { hashOutputsSingle: new Map() };
199
201
  this.reset();
200
202
  }
201
203
  reset() {
@@ -207,6 +209,7 @@ export default class Spend {
207
209
  this.ifStack = [];
208
210
  this.stackMem = 0;
209
211
  this.altStackMem = 0;
212
+ this.sigHashCache = { hashOutputsSingle: new Map() };
210
213
  }
211
214
  ensureStackMem(additional) {
212
215
  if (this.stackMem + additional > this.memoryLimit) {
@@ -317,7 +320,7 @@ export default class Spend {
317
320
  return true;
318
321
  }
319
322
  verifySignature(sig, pubkey, subscript) {
320
- const preimage = TransactionSignature.format({
323
+ const preimage = TransactionSignature.formatBytes({
321
324
  sourceTXID: this.sourceTXID,
322
325
  sourceOutputIndex: this.sourceOutputIndex,
323
326
  sourceSatoshis: this.sourceSatoshis,
@@ -328,7 +331,8 @@ export default class Spend {
328
331
  subscript,
329
332
  inputSequence: this.inputSequence,
330
333
  lockTime: this.lockTime,
331
- scope: sig.scope
334
+ scope: sig.scope,
335
+ cache: this.sigHashCache
332
336
  });
333
337
  const hash = new BigNumber(Hash.hash256(preimage));
334
338
  return verify(hash, sig, pubkey);