@btc-vision/bitcoin 7.0.0-alpha.8 → 7.0.0-beta.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 (214) hide show
  1. package/README.md +22 -0
  2. package/benchmark-compare/BENCHMARK.md +144 -0
  3. package/benchmark-compare/compare.bench.ts +1024 -0
  4. package/benchmark-compare/harness.ts +220 -0
  5. package/benchmark-compare/package.json +18 -0
  6. package/browser/address.d.ts.map +1 -1
  7. package/browser/block.d.ts.map +1 -1
  8. package/browser/chunks/{psbt-parallel-PtTJ19DC.js → psbt-parallel-B-dfm5GZ.js} +2433 -2524
  9. package/browser/crypto-hashes.d.ts +4 -0
  10. package/browser/crypto-hashes.d.ts.map +1 -0
  11. package/browser/crypto-hashes.native.d.ts +4 -0
  12. package/browser/crypto-hashes.native.d.ts.map +1 -0
  13. package/browser/crypto.d.ts.map +1 -1
  14. package/browser/index.d.ts +3 -3
  15. package/browser/index.d.ts.map +1 -1
  16. package/browser/index.js +571 -547
  17. package/browser/io/base58check.d.ts +26 -0
  18. package/browser/io/base58check.d.ts.map +1 -0
  19. package/browser/io/base64.d.ts +8 -0
  20. package/browser/io/base64.d.ts.map +1 -1
  21. package/browser/io/hex.d.ts.map +1 -1
  22. package/browser/io/index.d.ts +2 -1
  23. package/browser/io/index.d.ts.map +1 -1
  24. package/browser/io/utils.d.ts.map +1 -1
  25. package/browser/payments/bip341.d.ts.map +1 -1
  26. package/browser/payments/p2op.d.ts.map +1 -1
  27. package/browser/payments/p2pkh.d.ts.map +1 -1
  28. package/browser/payments/p2sh.d.ts.map +1 -1
  29. package/browser/payments/p2tr.d.ts.map +1 -1
  30. package/browser/payments/p2wpkh.d.ts.map +1 -1
  31. package/browser/psbt/PsbtCache.d.ts.map +1 -1
  32. package/browser/psbt/PsbtSigner.d.ts.map +1 -1
  33. package/browser/psbt/PsbtTransaction.d.ts +2 -2
  34. package/browser/psbt/PsbtTransaction.d.ts.map +1 -1
  35. package/browser/psbt/bip371.d.ts.map +1 -1
  36. package/browser/psbt.d.ts +1 -1
  37. package/browser/psbt.d.ts.map +1 -1
  38. package/browser/react-native-quick-crypto.d.ts +11 -0
  39. package/browser/script.d.ts.map +1 -1
  40. package/browser/transaction.d.ts.map +1 -1
  41. package/browser/workers/WorkerSigningPool.node.d.ts.map +1 -1
  42. package/browser/workers/WorkerSigningPool.sequential.d.ts.map +1 -1
  43. package/browser/workers/index.js +5 -5
  44. package/build/address.d.ts.map +1 -1
  45. package/build/address.js +19 -12
  46. package/build/address.js.map +1 -1
  47. package/build/bech32utils.js.map +1 -1
  48. package/build/bip66.js +4 -4
  49. package/build/bip66.js.map +1 -1
  50. package/build/block.d.ts.map +1 -1
  51. package/build/block.js +9 -2
  52. package/build/block.js.map +1 -1
  53. package/build/crypto-hashes.d.ts +4 -0
  54. package/build/crypto-hashes.d.ts.map +1 -0
  55. package/build/crypto-hashes.js +4 -0
  56. package/build/crypto-hashes.js.map +1 -0
  57. package/build/crypto-hashes.native.d.ts +4 -0
  58. package/build/crypto-hashes.native.d.ts.map +1 -0
  59. package/build/crypto-hashes.native.js +15 -0
  60. package/build/crypto-hashes.native.js.map +1 -0
  61. package/build/crypto.d.ts.map +1 -1
  62. package/build/crypto.js +1 -2
  63. package/build/crypto.js.map +1 -1
  64. package/build/env.js.map +1 -1
  65. package/build/index.d.ts +3 -3
  66. package/build/index.d.ts.map +1 -1
  67. package/build/index.js +1 -1
  68. package/build/index.js.map +1 -1
  69. package/build/io/BinaryReader.js +1 -1
  70. package/build/io/BinaryReader.js.map +1 -1
  71. package/build/io/base58check.d.ts +26 -0
  72. package/build/io/base58check.d.ts.map +1 -0
  73. package/build/io/base58check.js +32 -0
  74. package/build/io/base58check.js.map +1 -0
  75. package/build/io/base64.d.ts +8 -0
  76. package/build/io/base64.d.ts.map +1 -1
  77. package/build/io/base64.js +14 -0
  78. package/build/io/base64.js.map +1 -1
  79. package/build/io/hex.d.ts.map +1 -1
  80. package/build/io/hex.js +3 -2
  81. package/build/io/hex.js.map +1 -1
  82. package/build/io/index.d.ts +2 -1
  83. package/build/io/index.d.ts.map +1 -1
  84. package/build/io/index.js +4 -2
  85. package/build/io/index.js.map +1 -1
  86. package/build/io/utils.d.ts.map +1 -1
  87. package/build/io/utils.js +3 -4
  88. package/build/io/utils.js.map +1 -1
  89. package/build/merkle.js.map +1 -1
  90. package/build/payments/bip341.d.ts.map +1 -1
  91. package/build/payments/bip341.js +4 -3
  92. package/build/payments/bip341.js.map +1 -1
  93. package/build/payments/embed.js.map +1 -1
  94. package/build/payments/p2ms.js.map +1 -1
  95. package/build/payments/p2op.d.ts.map +1 -1
  96. package/build/payments/p2op.js +6 -4
  97. package/build/payments/p2op.js.map +1 -1
  98. package/build/payments/p2pk.js.map +1 -1
  99. package/build/payments/p2pkh.d.ts.map +1 -1
  100. package/build/payments/p2pkh.js +3 -4
  101. package/build/payments/p2pkh.js.map +1 -1
  102. package/build/payments/p2sh.d.ts.map +1 -1
  103. package/build/payments/p2sh.js +3 -4
  104. package/build/payments/p2sh.js.map +1 -1
  105. package/build/payments/p2tr.d.ts.map +1 -1
  106. package/build/payments/p2tr.js +13 -6
  107. package/build/payments/p2tr.js.map +1 -1
  108. package/build/payments/p2wpkh.d.ts.map +1 -1
  109. package/build/payments/p2wpkh.js +7 -5
  110. package/build/payments/p2wpkh.js.map +1 -1
  111. package/build/payments/p2wsh.js.map +1 -1
  112. package/build/psbt/PsbtCache.d.ts.map +1 -1
  113. package/build/psbt/PsbtCache.js +8 -4
  114. package/build/psbt/PsbtCache.js.map +1 -1
  115. package/build/psbt/PsbtFinalizer.js +14 -8
  116. package/build/psbt/PsbtFinalizer.js.map +1 -1
  117. package/build/psbt/PsbtSigner.d.ts.map +1 -1
  118. package/build/psbt/PsbtSigner.js +3 -2
  119. package/build/psbt/PsbtSigner.js.map +1 -1
  120. package/build/psbt/PsbtTransaction.d.ts +2 -2
  121. package/build/psbt/PsbtTransaction.d.ts.map +1 -1
  122. package/build/psbt/PsbtTransaction.js.map +1 -1
  123. package/build/psbt/bip371.d.ts.map +1 -1
  124. package/build/psbt/bip371.js +4 -3
  125. package/build/psbt/bip371.js.map +1 -1
  126. package/build/psbt/utils.js.map +1 -1
  127. package/build/psbt.d.ts +1 -1
  128. package/build/psbt.d.ts.map +1 -1
  129. package/build/psbt.js.map +1 -1
  130. package/build/push_data.js +1 -1
  131. package/build/push_data.js.map +1 -1
  132. package/build/script.d.ts.map +1 -1
  133. package/build/script.js +4 -3
  134. package/build/script.js.map +1 -1
  135. package/build/script_number.js +1 -1
  136. package/build/script_number.js.map +1 -1
  137. package/build/script_signature.js.map +1 -1
  138. package/build/transaction.d.ts.map +1 -1
  139. package/build/transaction.js +2 -1
  140. package/build/transaction.js.map +1 -1
  141. package/build/tsconfig.build.tsbuildinfo +1 -1
  142. package/build/types.js.map +1 -1
  143. package/build/workers/WorkerSigningPool.js.map +1 -1
  144. package/build/workers/WorkerSigningPool.node.d.ts.map +1 -1
  145. package/build/workers/WorkerSigningPool.node.js +25 -3
  146. package/build/workers/WorkerSigningPool.node.js.map +1 -1
  147. package/build/workers/WorkerSigningPool.sequential.d.ts.map +1 -1
  148. package/build/workers/WorkerSigningPool.sequential.js +2 -0
  149. package/build/workers/WorkerSigningPool.sequential.js.map +1 -1
  150. package/build/workers/index.js.map +1 -1
  151. package/build/workers/psbt-parallel.js.map +1 -1
  152. package/package.json +7 -5
  153. package/src/address.ts +18 -13
  154. package/src/bech32utils.ts +3 -3
  155. package/src/bip66.ts +18 -18
  156. package/src/block.ts +8 -3
  157. package/src/crypto-hashes.native.ts +18 -0
  158. package/src/crypto-hashes.ts +3 -0
  159. package/src/crypto.ts +1 -2
  160. package/src/env.ts +10 -8
  161. package/src/index.ts +4 -0
  162. package/src/io/BinaryReader.ts +1 -1
  163. package/src/io/base58check.ts +35 -0
  164. package/src/io/base64.ts +15 -0
  165. package/src/io/hex.ts +3 -2
  166. package/src/io/index.ts +5 -2
  167. package/src/io/utils.ts +6 -7
  168. package/src/merkle.ts +3 -3
  169. package/src/payments/bip341.ts +8 -7
  170. package/src/payments/embed.ts +1 -1
  171. package/src/payments/p2ms.ts +2 -2
  172. package/src/payments/p2op.ts +6 -4
  173. package/src/payments/p2pk.ts +2 -2
  174. package/src/payments/p2pkh.ts +7 -8
  175. package/src/payments/p2sh.ts +8 -9
  176. package/src/payments/p2tr.ts +24 -17
  177. package/src/payments/p2wpkh.ts +9 -7
  178. package/src/payments/p2wsh.ts +3 -3
  179. package/src/psbt/PsbtCache.ts +14 -11
  180. package/src/psbt/PsbtFinalizer.ts +17 -11
  181. package/src/psbt/PsbtSigner.ts +7 -6
  182. package/src/psbt/PsbtTransaction.ts +2 -2
  183. package/src/psbt/bip371.ts +4 -3
  184. package/src/psbt/utils.ts +1 -1
  185. package/src/psbt.ts +11 -9
  186. package/src/push_data.ts +5 -5
  187. package/src/react-native-quick-crypto.d.ts +11 -0
  188. package/src/script.ts +5 -4
  189. package/src/script_number.ts +6 -6
  190. package/src/script_signature.ts +2 -2
  191. package/src/transaction.ts +15 -14
  192. package/src/types.ts +1 -1
  193. package/src/workers/WorkerSigningPool.node.ts +28 -4
  194. package/src/workers/WorkerSigningPool.sequential.ts +2 -1
  195. package/src/workers/WorkerSigningPool.ts +3 -3
  196. package/src/workers/index.ts +1 -1
  197. package/src/workers/psbt-parallel.ts +3 -3
  198. package/test/address.spec.ts +1 -0
  199. package/test/bitcoin.core.spec.ts +9 -2
  200. package/test/browser/psbt.spec.ts +54 -29
  201. package/test/browser/workers-signing.spec.ts +8 -8
  202. package/test/crypto.spec.ts +1 -1
  203. package/test/env.spec.ts +2 -2
  204. package/test/integration/_regtest.ts +2 -2
  205. package/test/integration/blocks.spec.ts +1 -1
  206. package/test/integration/csv.spec.ts +1 -1
  207. package/test/integration/payments.spec.ts +2 -2
  208. package/test/integration/taproot.spec.ts +3 -3
  209. package/test/integration/transactions.spec.ts +6 -5
  210. package/test/psbt.spec.ts +49 -25
  211. package/test/transaction.spec.ts +6 -3
  212. package/test/workers-pool.spec.ts +5 -5
  213. package/test/workers-signing.spec.ts +8 -8
  214. package/test/workers.spec.ts +3 -3
@@ -104,6 +104,7 @@ describe('Transaction', () => {
104
104
 
105
105
  it('accepts target Buffer and offset parameters', () => {
106
106
  const f = fixtures.valid[0];
107
+ assert(f !== undefined);
107
108
  const actual = fromRaw(f.raw);
108
109
  const byteLength = actual.byteLength();
109
110
 
@@ -169,9 +170,11 @@ describe('Transaction', () => {
169
170
  const tx = new Transaction();
170
171
  tx.addInput(prevTxHash, 0);
171
172
 
172
- assert.strictEqual(tx.ins[0].script.length, 0);
173
- assert.strictEqual(tx.ins[0].witness.length, 0);
174
- assert.strictEqual(tx.ins[0].sequence, 0xffffffff);
173
+ const firstIn = tx.ins[0];
174
+ assert(firstIn !== undefined);
175
+ assert.strictEqual(firstIn.script.length, 0);
176
+ assert.strictEqual(firstIn.witness.length, 0);
177
+ assert.strictEqual(firstIn.sequence, 0xffffffff);
175
178
  });
176
179
 
177
180
  fixtures.invalid.addInput.forEach((f) => {
@@ -125,7 +125,7 @@ class MockWorker {
125
125
 
126
126
  // Mock Worker that fails signing
127
127
  class MockFailingWorker extends MockWorker {
128
- postMessage(data: unknown): void {
128
+ override postMessage(data: unknown): void {
129
129
  if ((data as { type: string }).type === 'signBatch') {
130
130
  setTimeout(() => {
131
131
  const batchMsg = data as {
@@ -161,7 +161,7 @@ class MockFailingWorker extends MockWorker {
161
161
 
162
162
  // Mock Worker that times out (never responds)
163
163
  class MockTimeoutWorker extends MockWorker {
164
- postMessage(data: unknown): void {
164
+ override postMessage(data: unknown): void {
165
165
  if ((data as { type: string }).type === 'signBatch') {
166
166
  // Never respond - simulates timeout
167
167
  // Still zero the key for security
@@ -188,7 +188,7 @@ beforeEach(() => {
188
188
  };
189
189
  }
190
190
 
191
- (globalThis.URL as any).createObjectURL = vi.fn((blob: Blob) => {
191
+ (globalThis.URL as any).createObjectURL = vi.fn((_blob: Blob) => {
192
192
  const url = `blob:mock-${blobUrlCounter++}`;
193
193
  mockBlobUrls.push(url);
194
194
  return url;
@@ -634,7 +634,7 @@ describe('WorkerSigningPool', () => {
634
634
  it('should clean up with await using', async () => {
635
635
  WorkerSigningPool.resetInstance();
636
636
 
637
- let poolRef: InstanceType<typeof WorkerSigningPool> | undefined;
637
+ let poolRef: import("../src/workers/WorkerSigningPool.js").WorkerSigningPool | undefined;
638
638
 
639
639
  // Scoped block — pool is disposed when the block exits
640
640
  {
@@ -732,7 +732,7 @@ describe('WorkerSigningPool Error Handling', () => {
732
732
  vi.resetModules();
733
733
 
734
734
  class MixedWorker extends MockWorker {
735
- postMessage(data: unknown): void {
735
+ override postMessage(data: unknown): void {
736
736
  if ((data as { type: string }).type === 'signBatch') {
737
737
  setTimeout(() => {
738
738
  const batchMsg = data as {
@@ -96,7 +96,7 @@ describe('Worker Signing - Signature Verification', () => {
96
96
 
97
97
  // Modify the hash
98
98
  const modifiedHash = Buffer.from(hash);
99
- modifiedHash[0] ^= 0xff;
99
+ modifiedHash[0]! ^= 0xff;
100
100
 
101
101
  const isValid = ecc.verify(modifiedHash, keyPair.publicKey, signature);
102
102
  expect(isValid).toBe(false);
@@ -109,7 +109,7 @@ describe('Worker Signing - Signature Verification', () => {
109
109
  const signature = Buffer.from(ecc.sign(hash, keyPair.privateKey!));
110
110
 
111
111
  // Corrupt the signature
112
- signature[0] ^= 0xff;
112
+ signature[0]! ^= 0xff;
113
113
 
114
114
  const isValid = ecc.verify(hash, keyPair.publicKey, signature);
115
115
  expect(isValid).toBe(false);
@@ -167,7 +167,7 @@ describe('Worker Signing - Signature Verification', () => {
167
167
  const signature = ecc.signSchnorr(hash, keyPair.privateKey!);
168
168
 
169
169
  const modifiedHash = Buffer.from(hash);
170
- modifiedHash[0] ^= 0xff;
170
+ modifiedHash[0]! ^= 0xff;
171
171
 
172
172
  const xOnlyPubkey = toXOnly(keyPair.publicKey);
173
173
  const isValid = ecc.verifySchnorr(modifiedHash, xOnlyPubkey, signature);
@@ -179,7 +179,7 @@ describe('Worker Signing - Signature Verification', () => {
179
179
  const hash = randomBytes(32);
180
180
 
181
181
  const signature = Buffer.from(ecc.signSchnorr(hash, keyPair.privateKey!));
182
- signature[0] ^= 0xff;
182
+ signature[0]! ^= 0xff;
183
183
 
184
184
  const xOnlyPubkey = toXOnly(keyPair.publicKey);
185
185
  const isValid = ecc.verifySchnorr(hash, xOnlyPubkey, signature);
@@ -190,7 +190,7 @@ describe('Worker Signing - Signature Verification', () => {
190
190
  describe('WorkerEccLib Interface Compatibility', () => {
191
191
  it('should create WorkerEccLib compatible wrapper', () => {
192
192
  const eccLib: WorkerEccLib = {
193
- sign: (hash: Uint8Array, privateKey: Uint8Array, lowR?: boolean): Uint8Array => {
193
+ sign: (hash: Uint8Array, privateKey: Uint8Array, _lowR?: boolean): Uint8Array => {
194
194
  return ecc.sign(hash, privateKey, undefined);
195
195
  },
196
196
  signSchnorr: (hash: Uint8Array, privateKey: Uint8Array): Uint8Array => {
@@ -284,7 +284,7 @@ describe('Worker Signing - Signature Verification', () => {
284
284
 
285
285
  // All signatures should be valid
286
286
  for (let i = 0; i < hashes.length; i++) {
287
- expect(ecc.verify(hashes[i], keyPair.publicKey, signatures[i])).toBe(true);
287
+ expect(ecc.verify(hashes[i]!, keyPair.publicKey, signatures[i]!)).toBe(true);
288
288
  }
289
289
  });
290
290
 
@@ -354,7 +354,7 @@ describe('Worker Signing - Signature Verification', () => {
354
354
  }
355
355
  });
356
356
 
357
- const duration = Date.now() - startTime;
357
+ void (Date.now() - startTime);
358
358
 
359
359
  // Verify all signatures
360
360
  let validCount = 0;
@@ -442,7 +442,7 @@ describe('Worker Signing - Signature Verification', () => {
442
442
  let signature: Uint8Array;
443
443
 
444
444
  try {
445
- if (signatureType === SignatureType.Schnorr) {
445
+ if ((signatureType as SignatureType) === SignatureType.Schnorr) {
446
446
  if (!eccLib.signSchnorr) {
447
447
  throw new Error('ECC library does not support Schnorr');
448
448
  }
@@ -306,7 +306,7 @@ describe('ParallelSignerKeyPair Interface', () => {
306
306
  const keyPair: ParallelSignerKeyPair = {
307
307
  publicKey,
308
308
  getPrivateKey: () => privateKey,
309
- sign: (hash: Uint8Array, _lowR?: boolean) => new Uint8Array(64), // DER signature
309
+ sign: (_hash: Uint8Array, _lowR?: boolean) => new Uint8Array(64), // DER signature
310
310
  };
311
311
 
312
312
  expect(keyPair.sign).toBeDefined();
@@ -320,7 +320,7 @@ describe('ParallelSignerKeyPair Interface', () => {
320
320
  const keyPair: ParallelSignerKeyPair = {
321
321
  publicKey,
322
322
  getPrivateKey: () => privateKey,
323
- signSchnorr: (hash: Uint8Array) => new Uint8Array(64), // Schnorr signature
323
+ signSchnorr: (_hash: Uint8Array) => new Uint8Array(64), // Schnorr signature
324
324
  };
325
325
 
326
326
  expect(keyPair.signSchnorr).toBeDefined();
@@ -1092,7 +1092,7 @@ describe('Batch Signing Scenarios', () => {
1092
1092
  ];
1093
1093
 
1094
1094
  expect(tasks.length).toBe(1);
1095
- expect(tasks[0].inputIndex).toBe(0);
1095
+ expect(tasks[0]!.inputIndex).toBe(0);
1096
1096
  });
1097
1097
 
1098
1098
  it('should handle multi-input ECDSA signing', () => {