@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.
- package/README.md +22 -0
- package/benchmark-compare/BENCHMARK.md +144 -0
- package/benchmark-compare/compare.bench.ts +1024 -0
- package/benchmark-compare/harness.ts +220 -0
- package/benchmark-compare/package.json +18 -0
- package/browser/address.d.ts.map +1 -1
- package/browser/block.d.ts.map +1 -1
- package/browser/chunks/{psbt-parallel-PtTJ19DC.js → psbt-parallel-B-dfm5GZ.js} +2433 -2524
- package/browser/crypto-hashes.d.ts +4 -0
- package/browser/crypto-hashes.d.ts.map +1 -0
- package/browser/crypto-hashes.native.d.ts +4 -0
- package/browser/crypto-hashes.native.d.ts.map +1 -0
- package/browser/crypto.d.ts.map +1 -1
- package/browser/index.d.ts +3 -3
- package/browser/index.d.ts.map +1 -1
- package/browser/index.js +571 -547
- package/browser/io/base58check.d.ts +26 -0
- package/browser/io/base58check.d.ts.map +1 -0
- package/browser/io/base64.d.ts +8 -0
- package/browser/io/base64.d.ts.map +1 -1
- package/browser/io/hex.d.ts.map +1 -1
- package/browser/io/index.d.ts +2 -1
- package/browser/io/index.d.ts.map +1 -1
- package/browser/io/utils.d.ts.map +1 -1
- package/browser/payments/bip341.d.ts.map +1 -1
- package/browser/payments/p2op.d.ts.map +1 -1
- package/browser/payments/p2pkh.d.ts.map +1 -1
- package/browser/payments/p2sh.d.ts.map +1 -1
- package/browser/payments/p2tr.d.ts.map +1 -1
- package/browser/payments/p2wpkh.d.ts.map +1 -1
- package/browser/psbt/PsbtCache.d.ts.map +1 -1
- package/browser/psbt/PsbtSigner.d.ts.map +1 -1
- package/browser/psbt/PsbtTransaction.d.ts +2 -2
- package/browser/psbt/PsbtTransaction.d.ts.map +1 -1
- package/browser/psbt/bip371.d.ts.map +1 -1
- package/browser/psbt.d.ts +1 -1
- package/browser/psbt.d.ts.map +1 -1
- package/browser/react-native-quick-crypto.d.ts +11 -0
- package/browser/script.d.ts.map +1 -1
- package/browser/transaction.d.ts.map +1 -1
- package/browser/workers/WorkerSigningPool.node.d.ts.map +1 -1
- package/browser/workers/WorkerSigningPool.sequential.d.ts.map +1 -1
- package/browser/workers/index.js +5 -5
- package/build/address.d.ts.map +1 -1
- package/build/address.js +19 -12
- package/build/address.js.map +1 -1
- package/build/bech32utils.js.map +1 -1
- package/build/bip66.js +4 -4
- package/build/bip66.js.map +1 -1
- package/build/block.d.ts.map +1 -1
- package/build/block.js +9 -2
- package/build/block.js.map +1 -1
- package/build/crypto-hashes.d.ts +4 -0
- package/build/crypto-hashes.d.ts.map +1 -0
- package/build/crypto-hashes.js +4 -0
- package/build/crypto-hashes.js.map +1 -0
- package/build/crypto-hashes.native.d.ts +4 -0
- package/build/crypto-hashes.native.d.ts.map +1 -0
- package/build/crypto-hashes.native.js +15 -0
- package/build/crypto-hashes.native.js.map +1 -0
- package/build/crypto.d.ts.map +1 -1
- package/build/crypto.js +1 -2
- package/build/crypto.js.map +1 -1
- package/build/env.js.map +1 -1
- package/build/index.d.ts +3 -3
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1 -1
- package/build/index.js.map +1 -1
- package/build/io/BinaryReader.js +1 -1
- package/build/io/BinaryReader.js.map +1 -1
- package/build/io/base58check.d.ts +26 -0
- package/build/io/base58check.d.ts.map +1 -0
- package/build/io/base58check.js +32 -0
- package/build/io/base58check.js.map +1 -0
- package/build/io/base64.d.ts +8 -0
- package/build/io/base64.d.ts.map +1 -1
- package/build/io/base64.js +14 -0
- package/build/io/base64.js.map +1 -1
- package/build/io/hex.d.ts.map +1 -1
- package/build/io/hex.js +3 -2
- package/build/io/hex.js.map +1 -1
- package/build/io/index.d.ts +2 -1
- package/build/io/index.d.ts.map +1 -1
- package/build/io/index.js +4 -2
- package/build/io/index.js.map +1 -1
- package/build/io/utils.d.ts.map +1 -1
- package/build/io/utils.js +3 -4
- package/build/io/utils.js.map +1 -1
- package/build/merkle.js.map +1 -1
- package/build/payments/bip341.d.ts.map +1 -1
- package/build/payments/bip341.js +4 -3
- package/build/payments/bip341.js.map +1 -1
- package/build/payments/embed.js.map +1 -1
- package/build/payments/p2ms.js.map +1 -1
- package/build/payments/p2op.d.ts.map +1 -1
- package/build/payments/p2op.js +6 -4
- package/build/payments/p2op.js.map +1 -1
- package/build/payments/p2pk.js.map +1 -1
- package/build/payments/p2pkh.d.ts.map +1 -1
- package/build/payments/p2pkh.js +3 -4
- package/build/payments/p2pkh.js.map +1 -1
- package/build/payments/p2sh.d.ts.map +1 -1
- package/build/payments/p2sh.js +3 -4
- package/build/payments/p2sh.js.map +1 -1
- package/build/payments/p2tr.d.ts.map +1 -1
- package/build/payments/p2tr.js +13 -6
- package/build/payments/p2tr.js.map +1 -1
- package/build/payments/p2wpkh.d.ts.map +1 -1
- package/build/payments/p2wpkh.js +7 -5
- package/build/payments/p2wpkh.js.map +1 -1
- package/build/payments/p2wsh.js.map +1 -1
- package/build/psbt/PsbtCache.d.ts.map +1 -1
- package/build/psbt/PsbtCache.js +8 -4
- package/build/psbt/PsbtCache.js.map +1 -1
- package/build/psbt/PsbtFinalizer.js +14 -8
- package/build/psbt/PsbtFinalizer.js.map +1 -1
- package/build/psbt/PsbtSigner.d.ts.map +1 -1
- package/build/psbt/PsbtSigner.js +3 -2
- package/build/psbt/PsbtSigner.js.map +1 -1
- package/build/psbt/PsbtTransaction.d.ts +2 -2
- package/build/psbt/PsbtTransaction.d.ts.map +1 -1
- package/build/psbt/PsbtTransaction.js.map +1 -1
- package/build/psbt/bip371.d.ts.map +1 -1
- package/build/psbt/bip371.js +4 -3
- package/build/psbt/bip371.js.map +1 -1
- package/build/psbt/utils.js.map +1 -1
- package/build/psbt.d.ts +1 -1
- package/build/psbt.d.ts.map +1 -1
- package/build/psbt.js.map +1 -1
- package/build/push_data.js +1 -1
- package/build/push_data.js.map +1 -1
- package/build/script.d.ts.map +1 -1
- package/build/script.js +4 -3
- package/build/script.js.map +1 -1
- package/build/script_number.js +1 -1
- package/build/script_number.js.map +1 -1
- package/build/script_signature.js.map +1 -1
- package/build/transaction.d.ts.map +1 -1
- package/build/transaction.js +2 -1
- package/build/transaction.js.map +1 -1
- package/build/tsconfig.build.tsbuildinfo +1 -1
- package/build/types.js.map +1 -1
- package/build/workers/WorkerSigningPool.js.map +1 -1
- package/build/workers/WorkerSigningPool.node.d.ts.map +1 -1
- package/build/workers/WorkerSigningPool.node.js +25 -3
- package/build/workers/WorkerSigningPool.node.js.map +1 -1
- package/build/workers/WorkerSigningPool.sequential.d.ts.map +1 -1
- package/build/workers/WorkerSigningPool.sequential.js +2 -0
- package/build/workers/WorkerSigningPool.sequential.js.map +1 -1
- package/build/workers/index.js.map +1 -1
- package/build/workers/psbt-parallel.js.map +1 -1
- package/package.json +7 -5
- package/src/address.ts +18 -13
- package/src/bech32utils.ts +3 -3
- package/src/bip66.ts +18 -18
- package/src/block.ts +8 -3
- package/src/crypto-hashes.native.ts +18 -0
- package/src/crypto-hashes.ts +3 -0
- package/src/crypto.ts +1 -2
- package/src/env.ts +10 -8
- package/src/index.ts +4 -0
- package/src/io/BinaryReader.ts +1 -1
- package/src/io/base58check.ts +35 -0
- package/src/io/base64.ts +15 -0
- package/src/io/hex.ts +3 -2
- package/src/io/index.ts +5 -2
- package/src/io/utils.ts +6 -7
- package/src/merkle.ts +3 -3
- package/src/payments/bip341.ts +8 -7
- package/src/payments/embed.ts +1 -1
- package/src/payments/p2ms.ts +2 -2
- package/src/payments/p2op.ts +6 -4
- package/src/payments/p2pk.ts +2 -2
- package/src/payments/p2pkh.ts +7 -8
- package/src/payments/p2sh.ts +8 -9
- package/src/payments/p2tr.ts +24 -17
- package/src/payments/p2wpkh.ts +9 -7
- package/src/payments/p2wsh.ts +3 -3
- package/src/psbt/PsbtCache.ts +14 -11
- package/src/psbt/PsbtFinalizer.ts +17 -11
- package/src/psbt/PsbtSigner.ts +7 -6
- package/src/psbt/PsbtTransaction.ts +2 -2
- package/src/psbt/bip371.ts +4 -3
- package/src/psbt/utils.ts +1 -1
- package/src/psbt.ts +11 -9
- package/src/push_data.ts +5 -5
- package/src/react-native-quick-crypto.d.ts +11 -0
- package/src/script.ts +5 -4
- package/src/script_number.ts +6 -6
- package/src/script_signature.ts +2 -2
- package/src/transaction.ts +15 -14
- package/src/types.ts +1 -1
- package/src/workers/WorkerSigningPool.node.ts +28 -4
- package/src/workers/WorkerSigningPool.sequential.ts +2 -1
- package/src/workers/WorkerSigningPool.ts +3 -3
- package/src/workers/index.ts +1 -1
- package/src/workers/psbt-parallel.ts +3 -3
- package/test/address.spec.ts +1 -0
- package/test/bitcoin.core.spec.ts +9 -2
- package/test/browser/psbt.spec.ts +54 -29
- package/test/browser/workers-signing.spec.ts +8 -8
- package/test/crypto.spec.ts +1 -1
- package/test/env.spec.ts +2 -2
- package/test/integration/_regtest.ts +2 -2
- package/test/integration/blocks.spec.ts +1 -1
- package/test/integration/csv.spec.ts +1 -1
- package/test/integration/payments.spec.ts +2 -2
- package/test/integration/taproot.spec.ts +3 -3
- package/test/integration/transactions.spec.ts +6 -5
- package/test/psbt.spec.ts +49 -25
- package/test/transaction.spec.ts +6 -3
- package/test/workers-pool.spec.ts +5 -5
- package/test/workers-signing.spec.ts +8 -8
- package/test/workers.spec.ts +3 -3
package/test/transaction.spec.ts
CHANGED
|
@@ -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
|
-
|
|
173
|
-
assert
|
|
174
|
-
assert.strictEqual(
|
|
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((
|
|
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:
|
|
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,
|
|
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]
|
|
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
|
-
|
|
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
|
}
|
package/test/workers.spec.ts
CHANGED
|
@@ -306,7 +306,7 @@ describe('ParallelSignerKeyPair Interface', () => {
|
|
|
306
306
|
const keyPair: ParallelSignerKeyPair = {
|
|
307
307
|
publicKey,
|
|
308
308
|
getPrivateKey: () => privateKey,
|
|
309
|
-
sign: (
|
|
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: (
|
|
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]
|
|
1095
|
+
expect(tasks[0]!.inputIndex).toBe(0);
|
|
1096
1096
|
});
|
|
1097
1097
|
|
|
1098
1098
|
it('should handle multi-input ECDSA signing', () => {
|