@btc-vision/bitcoin 6.3.0 → 6.3.2
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/.babelrc +4 -0
- package/.gitattributes +2 -0
- package/.nyc_output/6368a5b2-daa5-4821-8ed0-b742d6fc7eab.json +1 -0
- package/.nyc_output/processinfo/6368a5b2-daa5-4821-8ed0-b742d6fc7eab.json +1 -0
- package/.nyc_output/processinfo/index.json +1 -0
- package/.prettierrc.json +12 -0
- package/CHANGELOG.md +403 -0
- package/CONTRIBUTING.md +83 -0
- package/browser/address.d.ts +16 -0
- package/{src → browser}/bip66.d.ts +6 -7
- package/{src → browser}/block.d.ts +29 -30
- package/{src → browser}/bufferutils.d.ts +34 -54
- package/browser/crypto/crypto.d.ts +1 -0
- package/{src → browser}/crypto.d.ts +13 -18
- package/browser/ecc_lib.d.ts +3 -0
- package/browser/hooks/AdvancedSignatureManager.d.ts +16 -0
- package/{src → browser}/hooks/HookedSigner.d.ts +4 -4
- package/browser/hooks/SignatureManager.d.ts +13 -0
- package/browser/index.d.ts +58 -0
- package/browser/index.js +2 -0
- package/browser/index.js.LICENSE.txt +14 -0
- package/browser/merkle.d.ts +1 -0
- package/browser/networks.d.ts +23 -0
- package/{src → browser}/ops.d.ts +126 -126
- package/browser/payments/bip341.d.ts +23 -0
- package/browser/payments/embed.d.ts +2 -0
- package/browser/payments/index.d.ts +41 -0
- package/{src → browser}/payments/lazy.d.ts +2 -2
- package/browser/payments/p2ms.d.ts +2 -0
- package/browser/payments/p2pk.d.ts +2 -0
- package/browser/payments/p2pkh.d.ts +2 -0
- package/browser/payments/p2sh.d.ts +2 -0
- package/browser/payments/p2tr.d.ts +2 -0
- package/browser/payments/p2wpkh.d.ts +2 -0
- package/browser/payments/p2wsh.d.ts +2 -0
- package/browser/psbt/bip371.d.ts +16 -0
- package/browser/psbt/psbtutils.d.ts +26 -0
- package/{src → browser}/psbt.d.ts +167 -235
- package/browser/push_data.d.ts +7 -0
- package/browser/script.d.ts +17 -0
- package/browser/script_number.d.ts +2 -0
- package/browser/script_signature.d.ts +7 -0
- package/{src → browser}/transaction.d.ts +48 -60
- package/{src → browser}/types.d.ts +37 -54
- package/build/address.d.ts +16 -0
- package/build/address.js +148 -0
- package/build/bip66.d.ts +6 -0
- package/build/bip66.js +99 -0
- package/build/block.d.ts +29 -0
- package/build/block.js +181 -0
- package/build/bufferutils.d.ts +34 -0
- package/build/bufferutils.js +141 -0
- package/build/crypto/crypto.d.ts +1 -0
- package/build/crypto/crypto.js +1 -0
- package/build/crypto.d.ts +13 -0
- package/build/crypto.js +87 -0
- package/build/ecc_lib.d.ts +3 -0
- package/build/ecc_lib.js +61 -0
- package/build/hooks/AdvancedSignatureManager.d.ts +16 -0
- package/build/hooks/AdvancedSignatureManager.js +52 -0
- package/build/hooks/HookedSigner.d.ts +4 -0
- package/build/hooks/HookedSigner.js +64 -0
- package/build/hooks/SignatureManager.d.ts +13 -0
- package/build/hooks/SignatureManager.js +45 -0
- package/build/index.d.ts +58 -0
- package/build/index.js +32 -0
- package/build/merkle.d.ts +1 -0
- package/build/merkle.js +19 -0
- package/build/networks.d.ts +23 -0
- package/build/networks.js +121 -0
- package/build/ops.d.ts +126 -0
- package/{src → build}/ops.js +127 -131
- package/build/payments/bip341.d.ts +23 -0
- package/build/payments/bip341.js +82 -0
- package/build/payments/embed.d.ts +2 -0
- package/build/payments/embed.js +39 -0
- package/build/payments/index.d.ts +41 -0
- package/build/payments/index.js +10 -0
- package/build/payments/lazy.d.ts +2 -0
- package/{src → build}/payments/lazy.js +28 -32
- package/build/payments/p2ms.d.ts +2 -0
- package/{src → build}/payments/p2ms.js +128 -158
- package/build/payments/p2pk.d.ts +2 -0
- package/build/payments/p2pk.js +68 -0
- package/build/payments/p2pkh.d.ts +2 -0
- package/build/payments/p2pkh.js +135 -0
- package/build/payments/p2sh.d.ts +2 -0
- package/build/payments/p2sh.js +175 -0
- package/build/payments/p2tr.d.ts +2 -0
- package/build/payments/p2tr.js +254 -0
- package/build/payments/p2wpkh.d.ts +2 -0
- package/build/payments/p2wpkh.js +130 -0
- package/build/payments/p2wsh.d.ts +2 -0
- package/build/payments/p2wsh.js +180 -0
- package/build/psbt/bip371.d.ts +16 -0
- package/build/psbt/bip371.js +246 -0
- package/build/psbt/psbtutils.d.ts +26 -0
- package/build/psbt/psbtutils.js +170 -0
- package/build/psbt.d.ts +167 -0
- package/build/psbt.js +1305 -0
- package/build/push_data.d.ts +7 -0
- package/build/push_data.js +57 -0
- package/build/script.d.ts +17 -0
- package/build/script.js +167 -0
- package/build/script_number.d.ts +2 -0
- package/build/script_number.js +49 -0
- package/build/script_signature.d.ts +7 -0
- package/build/script_signature.js +49 -0
- package/build/transaction.d.ts +48 -0
- package/build/transaction.js +445 -0
- package/build/types.d.ts +37 -0
- package/build/types.js +73 -0
- package/cjs/package.json +3 -0
- package/eslint.config.js +56 -0
- package/gulpfile.js +42 -0
- package/package.json +105 -50
- package/src/{address.js → address.ts} +93 -73
- package/src/{bip66.js → bip66.ts} +23 -19
- package/src/{block.js → block.ts} +114 -105
- package/src/{bufferutils.js → bufferutils.ts} +65 -67
- package/src/crypto/crypto-browser.js +75 -0
- package/src/crypto/crypto.ts +1 -0
- package/src/crypto.ts +108 -0
- package/src/{ecc_lib.js → ecc_lib.ts} +25 -53
- package/src/hooks/{AdvancedSignatureManager.js → AdvancedSignatureManager.ts} +34 -18
- package/src/hooks/HookedSigner.ts +108 -0
- package/src/hooks/{SignatureManager.js → SignatureManager.ts} +26 -14
- package/src/index.ts +86 -0
- package/src/{merkle.js → merkle.ts} +8 -7
- package/src/networks.ts +235 -0
- package/src/ops.ts +282 -0
- package/src/payments/bip341.ts +140 -0
- package/src/payments/embed.ts +55 -0
- package/src/payments/{index.d.ts → index.ts} +20 -10
- package/src/payments/lazy.ts +28 -0
- package/src/payments/p2ms.ts +150 -0
- package/src/payments/{p2pk.js → p2pk.ts} +32 -29
- package/src/payments/{p2pkh.js → p2pkh.ts} +53 -47
- package/src/payments/{p2sh.js → p2sh.ts} +72 -71
- package/src/payments/{p2tr.js → p2tr.ts} +114 -125
- package/src/payments/{p2wpkh.js → p2wpkh.ts} +51 -56
- package/src/payments/{p2wsh.js → p2wsh.ts} +69 -81
- package/src/psbt/{bip371.js → bip371.ts} +195 -178
- package/src/psbt/psbtutils.ts +299 -0
- package/src/{psbt.js → psbt.ts} +1048 -699
- package/src/{push_data.js → push_data.ts} +35 -21
- package/src/{script.js → script.ts} +93 -77
- package/src/{script_number.js → script_number.ts} +15 -21
- package/src/{script_signature.js → script_signature.ts} +26 -14
- package/src/{transaction.js → transaction.ts} +247 -167
- package/src/types.ts +122 -0
- package/test/address.spec.js +124 -0
- package/test/address.spec.ts +177 -0
- package/test/bitcoin.core.spec.js +170 -0
- package/test/bitcoin.core.spec.ts +234 -0
- package/test/block.spec.js +141 -0
- package/test/block.spec.ts +194 -0
- package/test/bufferutils.spec.js +427 -0
- package/test/bufferutils.spec.ts +513 -0
- package/test/crypto.spec.js +41 -0
- package/test/crypto.spec.ts +55 -0
- package/test/fixtures/address.json +329 -0
- package/test/fixtures/block.json +148 -0
- package/test/fixtures/bufferutils.json +102 -0
- package/test/fixtures/core/README.md +26 -0
- package/test/fixtures/core/base58_encode_decode.json +50 -0
- package/test/fixtures/core/base58_keys_invalid.json +152 -0
- package/test/fixtures/core/base58_keys_valid.json +452 -0
- package/test/fixtures/core/blocks.json +27 -0
- package/test/fixtures/core/sig_canonical.json +7 -0
- package/test/fixtures/core/sig_noncanonical.json +33 -0
- package/test/fixtures/core/sighash.json +3505 -0
- package/test/fixtures/core/tx_valid.json +2023 -0
- package/test/fixtures/crypto.json +43 -0
- package/test/fixtures/ecdsa.json +217 -0
- package/test/fixtures/ecpair.json +141 -0
- package/test/fixtures/embed.json +108 -0
- package/test/fixtures/p2ms.json +434 -0
- package/test/fixtures/p2pk.json +179 -0
- package/test/fixtures/p2pkh.json +276 -0
- package/test/fixtures/p2sh.json +508 -0
- package/test/fixtures/p2tr.json +1198 -0
- package/test/fixtures/p2wpkh.json +290 -0
- package/test/fixtures/p2wsh.json +489 -0
- package/test/fixtures/psbt.json +924 -0
- package/test/fixtures/script.json +465 -0
- package/test/fixtures/script_number.json +225 -0
- package/test/fixtures/signature.json +140 -0
- package/test/fixtures/transaction.json +916 -0
- package/test/integration/_regtest.js +7 -0
- package/test/integration/_regtest.ts +6 -0
- package/test/integration/addresses.spec.js +116 -0
- package/test/integration/addresses.spec.ts +154 -0
- package/test/integration/bip32.spec.js +85 -0
- package/test/integration/bip32.spec.ts +151 -0
- package/test/integration/blocks.spec.js +26 -0
- package/test/integration/blocks.spec.ts +28 -0
- package/test/integration/cltv.spec.js +199 -0
- package/test/integration/cltv.spec.ts +283 -0
- package/test/integration/csv.spec.js +362 -0
- package/test/integration/csv.spec.ts +527 -0
- package/test/integration/payments.spec.js +98 -0
- package/test/integration/payments.spec.ts +135 -0
- package/test/integration/taproot.spec.js +532 -0
- package/test/integration/taproot.spec.ts +707 -0
- package/test/integration/transactions.spec.js +561 -0
- package/test/integration/transactions.spec.ts +769 -0
- package/test/payments.spec.js +97 -0
- package/test/payments.spec.ts +125 -0
- package/test/payments.utils.js +190 -0
- package/test/payments.utils.ts +208 -0
- package/test/psbt.spec.js +1044 -0
- package/test/psbt.spec.ts +1414 -0
- package/test/script.spec.js +151 -0
- package/test/script.spec.ts +210 -0
- package/test/script_number.spec.js +24 -0
- package/test/script_number.spec.ts +29 -0
- package/test/script_signature.spec.js +52 -0
- package/test/script_signature.spec.ts +66 -0
- package/test/transaction.spec.js +269 -0
- package/test/transaction.spec.ts +387 -0
- package/test/ts-node-register.js +5 -0
- package/test/tsconfig.json +45 -0
- package/test/types.spec.js +46 -0
- package/test/types.spec.ts +58 -0
- package/tsconfig.base.json +27 -0
- package/tsconfig.json +19 -0
- package/tsconfig.webpack.json +18 -0
- package/webpack.config.js +79 -0
- package/src/address.d.ts +0 -42
- package/src/crypto.js +0 -128
- package/src/ecc_lib.d.ts +0 -17
- package/src/hooks/AdvancedSignatureManager.d.ts +0 -44
- package/src/hooks/HookedSigner.js +0 -90
- package/src/hooks/SignatureManager.d.ts +0 -35
- package/src/index.d.ts +0 -42
- package/src/index.js +0 -87
- package/src/merkle.d.ts +0 -10
- package/src/networks.d.ts +0 -29
- package/src/networks.js +0 -71
- package/src/payments/bip341.d.ts +0 -49
- package/src/payments/bip341.js +0 -124
- package/src/payments/embed.d.ts +0 -9
- package/src/payments/embed.js +0 -54
- package/src/payments/index.js +0 -69
- package/src/payments/p2ms.d.ts +0 -9
- package/src/payments/p2pk.d.ts +0 -10
- package/src/payments/p2pkh.d.ts +0 -10
- package/src/payments/p2sh.d.ts +0 -10
- package/src/payments/p2tr.d.ts +0 -10
- package/src/payments/p2wpkh.d.ts +0 -10
- package/src/payments/p2wsh.d.ts +0 -10
- package/src/psbt/bip371.d.ts +0 -42
- package/src/psbt/psbtutils.d.ts +0 -64
- package/src/psbt/psbtutils.js +0 -191
- package/src/push_data.d.ts +0 -29
- package/src/script.d.ts +0 -42
- package/src/script_number.d.ts +0 -19
- package/src/script_signature.d.ts +0 -21
- package/src/types.js +0 -106
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import * as varuint from 'varuint-bitcoin';
|
|
2
|
+
import * as types from './types.js';
|
|
3
|
+
const { typeforce } = types;
|
|
4
|
+
export { varuint };
|
|
5
|
+
function verifuint(value, max) {
|
|
6
|
+
if (typeof value !== 'number')
|
|
7
|
+
throw new Error('cannot write a non-number as a number');
|
|
8
|
+
if (value < 0)
|
|
9
|
+
throw new Error('specified a negative value for writing an unsigned value');
|
|
10
|
+
if (value > max)
|
|
11
|
+
throw new Error('RangeError: value out of range');
|
|
12
|
+
if (Math.floor(value) !== value)
|
|
13
|
+
throw new Error('value has a fractional component');
|
|
14
|
+
}
|
|
15
|
+
export function readUInt64LE(buffer, offset) {
|
|
16
|
+
const a = buffer.readUInt32LE(offset);
|
|
17
|
+
let b = buffer.readUInt32LE(offset + 4);
|
|
18
|
+
b *= 0x100000000;
|
|
19
|
+
verifuint(b + a, 0x001fffffffffffff);
|
|
20
|
+
return b + a;
|
|
21
|
+
}
|
|
22
|
+
export function writeUInt64LE(buffer, value, offset) {
|
|
23
|
+
verifuint(value, 0x001fffffffffffff);
|
|
24
|
+
buffer.writeInt32LE(value & -1, offset);
|
|
25
|
+
buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4);
|
|
26
|
+
return offset + 8;
|
|
27
|
+
}
|
|
28
|
+
export function reverseBuffer(buffer) {
|
|
29
|
+
if (buffer.length < 1)
|
|
30
|
+
return buffer;
|
|
31
|
+
let j = buffer.length - 1;
|
|
32
|
+
let tmp = 0;
|
|
33
|
+
for (let i = 0; i < buffer.length / 2; i++) {
|
|
34
|
+
tmp = buffer[i];
|
|
35
|
+
buffer[i] = buffer[j];
|
|
36
|
+
buffer[j] = tmp;
|
|
37
|
+
j--;
|
|
38
|
+
}
|
|
39
|
+
return buffer;
|
|
40
|
+
}
|
|
41
|
+
export function cloneBuffer(buffer) {
|
|
42
|
+
const clone = Buffer.allocUnsafe(buffer.length);
|
|
43
|
+
buffer.copy(clone);
|
|
44
|
+
return clone;
|
|
45
|
+
}
|
|
46
|
+
export class BufferWriter {
|
|
47
|
+
constructor(buffer, offset = 0) {
|
|
48
|
+
this.buffer = buffer;
|
|
49
|
+
this.offset = offset;
|
|
50
|
+
typeforce(types.tuple(types.Buffer, types.UInt32), [buffer, offset]);
|
|
51
|
+
}
|
|
52
|
+
static withCapacity(size) {
|
|
53
|
+
return new BufferWriter(Buffer.alloc(size));
|
|
54
|
+
}
|
|
55
|
+
writeUInt8(i) {
|
|
56
|
+
this.offset = this.buffer.writeUInt8(i, this.offset);
|
|
57
|
+
}
|
|
58
|
+
writeInt32(i) {
|
|
59
|
+
this.offset = this.buffer.writeInt32LE(i, this.offset);
|
|
60
|
+
}
|
|
61
|
+
writeUInt32(i) {
|
|
62
|
+
this.offset = this.buffer.writeUInt32LE(i, this.offset);
|
|
63
|
+
}
|
|
64
|
+
writeUInt64(i) {
|
|
65
|
+
this.offset = writeUInt64LE(this.buffer, i, this.offset);
|
|
66
|
+
}
|
|
67
|
+
writeVarInt(i) {
|
|
68
|
+
varuint.encode(i, this.buffer, this.offset);
|
|
69
|
+
this.offset += varuint.encode.bytes;
|
|
70
|
+
}
|
|
71
|
+
writeSlice(slice) {
|
|
72
|
+
if (this.buffer.length < this.offset + slice.length) {
|
|
73
|
+
throw new Error('Cannot write slice out of bounds');
|
|
74
|
+
}
|
|
75
|
+
this.offset += slice.copy(this.buffer, this.offset);
|
|
76
|
+
}
|
|
77
|
+
writeVarSlice(slice) {
|
|
78
|
+
this.writeVarInt(slice.length);
|
|
79
|
+
this.writeSlice(slice);
|
|
80
|
+
}
|
|
81
|
+
writeVector(vector) {
|
|
82
|
+
this.writeVarInt(vector.length);
|
|
83
|
+
vector.forEach((buf) => this.writeVarSlice(buf));
|
|
84
|
+
}
|
|
85
|
+
end() {
|
|
86
|
+
if (this.buffer.length === this.offset) {
|
|
87
|
+
return this.buffer;
|
|
88
|
+
}
|
|
89
|
+
throw new Error(`buffer size ${this.buffer.length}, offset ${this.offset}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export class BufferReader {
|
|
93
|
+
constructor(buffer, offset = 0) {
|
|
94
|
+
this.buffer = buffer;
|
|
95
|
+
this.offset = offset;
|
|
96
|
+
typeforce(types.tuple(types.Buffer, types.UInt32), [buffer, offset]);
|
|
97
|
+
}
|
|
98
|
+
readUInt8() {
|
|
99
|
+
const result = this.buffer.readUInt8(this.offset);
|
|
100
|
+
this.offset++;
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
readInt32() {
|
|
104
|
+
const result = this.buffer.readInt32LE(this.offset);
|
|
105
|
+
this.offset += 4;
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
readUInt32() {
|
|
109
|
+
const result = this.buffer.readUInt32LE(this.offset);
|
|
110
|
+
this.offset += 4;
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
readUInt64() {
|
|
114
|
+
const result = readUInt64LE(this.buffer, this.offset);
|
|
115
|
+
this.offset += 8;
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
readVarInt() {
|
|
119
|
+
const vi = varuint.decode(this.buffer, this.offset);
|
|
120
|
+
this.offset += varuint.decode.bytes;
|
|
121
|
+
return vi;
|
|
122
|
+
}
|
|
123
|
+
readSlice(n) {
|
|
124
|
+
if (this.buffer.length < this.offset + n) {
|
|
125
|
+
throw new Error('Cannot read slice out of bounds');
|
|
126
|
+
}
|
|
127
|
+
const result = this.buffer.slice(this.offset, this.offset + n);
|
|
128
|
+
this.offset += n;
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
readVarSlice() {
|
|
132
|
+
return this.readSlice(this.readVarInt());
|
|
133
|
+
}
|
|
134
|
+
readVector() {
|
|
135
|
+
const count = this.readVarInt();
|
|
136
|
+
const vector = [];
|
|
137
|
+
for (let i = 0; i < count; i++)
|
|
138
|
+
vector.push(this.readVarSlice());
|
|
139
|
+
return vector;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { createHash, createHmac, pbkdf2Sync, randomBytes } from 'crypto';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { createHash, createHmac, pbkdf2Sync, randomBytes } from 'crypto';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare function ripemd160(buffer: Buffer): Buffer;
|
|
2
|
+
export declare function sha1(buffer: Buffer): Buffer;
|
|
3
|
+
export declare function sha256(buffer: Buffer): Buffer;
|
|
4
|
+
export declare function hash160(buffer: Buffer): Buffer;
|
|
5
|
+
export declare function hash256(buffer: Buffer): Buffer;
|
|
6
|
+
export declare const TAGS: readonly ["BIP0340/challenge", "BIP0340/aux", "BIP0340/nonce", "TapLeaf", "TapBranch", "TapSighash", "TapTweak", "KeyAgg list", "KeyAgg coefficient"];
|
|
7
|
+
export type TaggedHashPrefix = typeof TAGS[number];
|
|
8
|
+
type TaggedHashPrefixes = {
|
|
9
|
+
[key in TaggedHashPrefix]: Buffer;
|
|
10
|
+
};
|
|
11
|
+
export declare const TAGGED_HASH_PREFIXES: TaggedHashPrefixes;
|
|
12
|
+
export declare function taggedHash(prefix: TaggedHashPrefix, data: Buffer): Buffer;
|
|
13
|
+
export {};
|
package/build/crypto.js
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { ripemd160 as _ripemd160 } from '@noble/hashes/ripemd160';
|
|
2
|
+
import { sha1 as _sha1 } from '@noble/hashes/sha1';
|
|
3
|
+
import { sha256 as _sha256 } from '@noble/hashes/sha256';
|
|
4
|
+
export function ripemd160(buffer) {
|
|
5
|
+
return Buffer.from(_ripemd160(Uint8Array.from(buffer)));
|
|
6
|
+
}
|
|
7
|
+
export function sha1(buffer) {
|
|
8
|
+
return Buffer.from(_sha1(Uint8Array.from(buffer)));
|
|
9
|
+
}
|
|
10
|
+
export function sha256(buffer) {
|
|
11
|
+
return Buffer.from(_sha256(Uint8Array.from(buffer)));
|
|
12
|
+
}
|
|
13
|
+
export function hash160(buffer) {
|
|
14
|
+
return Buffer.from(_ripemd160(_sha256(Uint8Array.from(buffer))));
|
|
15
|
+
}
|
|
16
|
+
export function hash256(buffer) {
|
|
17
|
+
return Buffer.from(_sha256(_sha256(Uint8Array.from(buffer))));
|
|
18
|
+
}
|
|
19
|
+
export const TAGS = [
|
|
20
|
+
'BIP0340/challenge',
|
|
21
|
+
'BIP0340/aux',
|
|
22
|
+
'BIP0340/nonce',
|
|
23
|
+
'TapLeaf',
|
|
24
|
+
'TapBranch',
|
|
25
|
+
'TapSighash',
|
|
26
|
+
'TapTweak',
|
|
27
|
+
'KeyAgg list',
|
|
28
|
+
'KeyAgg coefficient',
|
|
29
|
+
];
|
|
30
|
+
export const TAGGED_HASH_PREFIXES = {
|
|
31
|
+
'BIP0340/challenge': Buffer.from([
|
|
32
|
+
123, 181, 45, 122, 159, 239, 88, 50, 62, 177, 191, 122, 64, 125, 179, 130, 210, 243, 242,
|
|
33
|
+
216, 27, 177, 34, 79, 73, 254, 81, 143, 109, 72, 211, 124, 123, 181, 45, 122, 159, 239, 88,
|
|
34
|
+
50, 62, 177, 191, 122, 64, 125, 179, 130, 210, 243, 242, 216, 27, 177, 34, 79, 73, 254, 81,
|
|
35
|
+
143, 109, 72, 211, 124,
|
|
36
|
+
]),
|
|
37
|
+
'BIP0340/aux': Buffer.from([
|
|
38
|
+
241, 239, 78, 94, 192, 99, 202, 218, 109, 148, 202, 250, 157, 152, 126, 160, 105, 38, 88,
|
|
39
|
+
57, 236, 193, 31, 151, 45, 119, 165, 46, 216, 193, 204, 144, 241, 239, 78, 94, 192, 99, 202,
|
|
40
|
+
218, 109, 148, 202, 250, 157, 152, 126, 160, 105, 38, 88, 57, 236, 193, 31, 151, 45, 119,
|
|
41
|
+
165, 46, 216, 193, 204, 144,
|
|
42
|
+
]),
|
|
43
|
+
'BIP0340/nonce': Buffer.from([
|
|
44
|
+
7, 73, 119, 52, 167, 155, 203, 53, 91, 155, 140, 125, 3, 79, 18, 28, 244, 52, 215, 62, 247,
|
|
45
|
+
45, 218, 25, 135, 0, 97, 251, 82, 191, 235, 47, 7, 73, 119, 52, 167, 155, 203, 53, 91, 155,
|
|
46
|
+
140, 125, 3, 79, 18, 28, 244, 52, 215, 62, 247, 45, 218, 25, 135, 0, 97, 251, 82, 191, 235,
|
|
47
|
+
47,
|
|
48
|
+
]),
|
|
49
|
+
TapLeaf: Buffer.from([
|
|
50
|
+
174, 234, 143, 220, 66, 8, 152, 49, 5, 115, 75, 88, 8, 29, 30, 38, 56, 211, 95, 28, 181, 64,
|
|
51
|
+
8, 212, 211, 87, 202, 3, 190, 120, 233, 238, 174, 234, 143, 220, 66, 8, 152, 49, 5, 115, 75,
|
|
52
|
+
88, 8, 29, 30, 38, 56, 211, 95, 28, 181, 64, 8, 212, 211, 87, 202, 3, 190, 120, 233, 238,
|
|
53
|
+
]),
|
|
54
|
+
TapBranch: Buffer.from([
|
|
55
|
+
25, 65, 161, 242, 229, 110, 185, 95, 162, 169, 241, 148, 190, 92, 1, 247, 33, 111, 51, 237,
|
|
56
|
+
130, 176, 145, 70, 52, 144, 208, 91, 245, 22, 160, 21, 25, 65, 161, 242, 229, 110, 185, 95,
|
|
57
|
+
162, 169, 241, 148, 190, 92, 1, 247, 33, 111, 51, 237, 130, 176, 145, 70, 52, 144, 208, 91,
|
|
58
|
+
245, 22, 160, 21,
|
|
59
|
+
]),
|
|
60
|
+
TapSighash: Buffer.from([
|
|
61
|
+
244, 10, 72, 223, 75, 42, 112, 200, 180, 146, 75, 242, 101, 70, 97, 237, 61, 149, 253, 102,
|
|
62
|
+
163, 19, 235, 135, 35, 117, 151, 198, 40, 228, 160, 49, 244, 10, 72, 223, 75, 42, 112, 200,
|
|
63
|
+
180, 146, 75, 242, 101, 70, 97, 237, 61, 149, 253, 102, 163, 19, 235, 135, 35, 117, 151,
|
|
64
|
+
198, 40, 228, 160, 49,
|
|
65
|
+
]),
|
|
66
|
+
TapTweak: Buffer.from([
|
|
67
|
+
232, 15, 225, 99, 156, 156, 160, 80, 227, 175, 27, 57, 193, 67, 198, 62, 66, 156, 188, 235,
|
|
68
|
+
21, 217, 64, 251, 181, 197, 161, 244, 175, 87, 197, 233, 232, 15, 225, 99, 156, 156, 160,
|
|
69
|
+
80, 227, 175, 27, 57, 193, 67, 198, 62, 66, 156, 188, 235, 21, 217, 64, 251, 181, 197, 161,
|
|
70
|
+
244, 175, 87, 197, 233,
|
|
71
|
+
]),
|
|
72
|
+
'KeyAgg list': Buffer.from([
|
|
73
|
+
72, 28, 151, 28, 60, 11, 70, 215, 240, 178, 117, 174, 89, 141, 78, 44, 126, 215, 49, 156,
|
|
74
|
+
89, 74, 92, 110, 199, 158, 160, 212, 153, 2, 148, 240, 72, 28, 151, 28, 60, 11, 70, 215,
|
|
75
|
+
240, 178, 117, 174, 89, 141, 78, 44, 126, 215, 49, 156, 89, 74, 92, 110, 199, 158, 160, 212,
|
|
76
|
+
153, 2, 148, 240,
|
|
77
|
+
]),
|
|
78
|
+
'KeyAgg coefficient': Buffer.from([
|
|
79
|
+
191, 201, 4, 3, 77, 28, 136, 232, 200, 14, 34, 229, 61, 36, 86, 109, 100, 130, 78, 214, 66,
|
|
80
|
+
114, 129, 192, 145, 0, 249, 77, 205, 82, 201, 129, 191, 201, 4, 3, 77, 28, 136, 232, 200,
|
|
81
|
+
14, 34, 229, 61, 36, 86, 109, 100, 130, 78, 214, 66, 114, 129, 192, 145, 0, 249, 77, 205,
|
|
82
|
+
82, 201, 129,
|
|
83
|
+
]),
|
|
84
|
+
};
|
|
85
|
+
export function taggedHash(prefix, data) {
|
|
86
|
+
return sha256(Buffer.concat([TAGGED_HASH_PREFIXES[prefix], data]));
|
|
87
|
+
}
|
package/build/ecc_lib.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
const _ECCLIB_CACHE = {};
|
|
2
|
+
export function initEccLib(eccLib) {
|
|
3
|
+
if (!eccLib) {
|
|
4
|
+
_ECCLIB_CACHE.eccLib = eccLib;
|
|
5
|
+
}
|
|
6
|
+
else if (eccLib !== _ECCLIB_CACHE.eccLib) {
|
|
7
|
+
verifyEcc(eccLib);
|
|
8
|
+
_ECCLIB_CACHE.eccLib = eccLib;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export function getEccLib() {
|
|
12
|
+
if (!_ECCLIB_CACHE.eccLib)
|
|
13
|
+
throw new Error('No ECC Library provided. You must call initEccLib() with a valid TinySecp256k1Interface instance');
|
|
14
|
+
return _ECCLIB_CACHE.eccLib;
|
|
15
|
+
}
|
|
16
|
+
const h = (hex) => Buffer.from(hex, 'hex');
|
|
17
|
+
function verifyEcc(ecc) {
|
|
18
|
+
assert(typeof ecc.isXOnlyPoint === 'function');
|
|
19
|
+
assert(ecc.isXOnlyPoint(h('79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798')));
|
|
20
|
+
assert(ecc.isXOnlyPoint(h('fffffffffffffffffffffffffffffffffffffffffffffffffffffffeeffffc2e')));
|
|
21
|
+
assert(ecc.isXOnlyPoint(h('f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9')));
|
|
22
|
+
assert(ecc.isXOnlyPoint(h('0000000000000000000000000000000000000000000000000000000000000001')));
|
|
23
|
+
assert(!ecc.isXOnlyPoint(h('0000000000000000000000000000000000000000000000000000000000000000')));
|
|
24
|
+
assert(!ecc.isXOnlyPoint(h('fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f')));
|
|
25
|
+
assert(typeof ecc.xOnlyPointAddTweak === 'function');
|
|
26
|
+
tweakAddVectors.forEach((t) => {
|
|
27
|
+
const r = ecc.xOnlyPointAddTweak(h(t.pubkey), h(t.tweak));
|
|
28
|
+
if (t.result === null) {
|
|
29
|
+
assert(r === null);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
assert(r !== null);
|
|
33
|
+
assert(r.parity === t.parity);
|
|
34
|
+
assert(Buffer.from(r.xOnlyPubkey).equals(h(t.result)));
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function assert(bool) {
|
|
39
|
+
if (!bool)
|
|
40
|
+
throw new Error('ecc library invalid');
|
|
41
|
+
}
|
|
42
|
+
const tweakAddVectors = [
|
|
43
|
+
{
|
|
44
|
+
pubkey: '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
|
|
45
|
+
tweak: 'fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140',
|
|
46
|
+
parity: -1,
|
|
47
|
+
result: null,
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
pubkey: '1617d38ed8d8657da4d4761e8057bc396ea9e4b9d29776d4be096016dbd2509b',
|
|
51
|
+
tweak: 'a8397a935f0dfceba6ba9618f6451ef4d80637abf4e6af2669fbc9de6a8fd2ac',
|
|
52
|
+
parity: 1,
|
|
53
|
+
result: 'e478f99dab91052ab39a33ea35fd5e6e4933f4d28023cd597c9a1f6760346adf',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
pubkey: '2c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e668680991',
|
|
57
|
+
tweak: '823c3cd2142744b075a87eade7e1b8678ba308d566226a0056ca2b7a76f86b47',
|
|
58
|
+
parity: 0,
|
|
59
|
+
result: '9534f8dc8c6deda2dc007655981c78b49c5d96c778fbf363462a11ec9dfd948c',
|
|
60
|
+
},
|
|
61
|
+
];
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface CacheEntry {
|
|
2
|
+
pubKey: string;
|
|
3
|
+
dataRef: WeakRef<Buffer>;
|
|
4
|
+
signature: Buffer;
|
|
5
|
+
}
|
|
6
|
+
export declare class AdvancedSignatureManager {
|
|
7
|
+
private static instance;
|
|
8
|
+
private cacheBySigner;
|
|
9
|
+
private registry;
|
|
10
|
+
private constructor();
|
|
11
|
+
static getInstance(): AdvancedSignatureManager;
|
|
12
|
+
addSignature(pubKey: string, data: Buffer, signature: Buffer): Buffer;
|
|
13
|
+
getSignature(pubKey: string, data: Buffer): Buffer | undefined;
|
|
14
|
+
clearCache(): void;
|
|
15
|
+
clearCacheForSigner(pubKey: string): void;
|
|
16
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export class AdvancedSignatureManager {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.cacheBySigner = new Map();
|
|
4
|
+
this.registry = new FinalizationRegistry((entry) => {
|
|
5
|
+
const set = this.cacheBySigner.get(entry.pubKey);
|
|
6
|
+
if (set) {
|
|
7
|
+
set.delete(entry);
|
|
8
|
+
if (set.size === 0) {
|
|
9
|
+
this.cacheBySigner.delete(entry.pubKey);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
static getInstance() {
|
|
15
|
+
if (!AdvancedSignatureManager.instance) {
|
|
16
|
+
AdvancedSignatureManager.instance = new AdvancedSignatureManager();
|
|
17
|
+
}
|
|
18
|
+
return AdvancedSignatureManager.instance;
|
|
19
|
+
}
|
|
20
|
+
addSignature(pubKey, data, signature) {
|
|
21
|
+
const entry = {
|
|
22
|
+
pubKey,
|
|
23
|
+
dataRef: new WeakRef(data),
|
|
24
|
+
signature,
|
|
25
|
+
};
|
|
26
|
+
if (!this.cacheBySigner.has(pubKey)) {
|
|
27
|
+
this.cacheBySigner.set(pubKey, new Set());
|
|
28
|
+
}
|
|
29
|
+
const set = this.cacheBySigner.get(pubKey);
|
|
30
|
+
set.add(entry);
|
|
31
|
+
this.registry.register(data, entry);
|
|
32
|
+
return signature;
|
|
33
|
+
}
|
|
34
|
+
getSignature(pubKey, data) {
|
|
35
|
+
const set = this.cacheBySigner.get(pubKey);
|
|
36
|
+
if (!set)
|
|
37
|
+
return undefined;
|
|
38
|
+
for (const entry of set) {
|
|
39
|
+
const cachedData = entry.dataRef.deref();
|
|
40
|
+
if (cachedData && cachedData.equals(data)) {
|
|
41
|
+
return entry.signature;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
clearCache() {
|
|
47
|
+
this.cacheBySigner.clear();
|
|
48
|
+
}
|
|
49
|
+
clearCacheForSigner(pubKey) {
|
|
50
|
+
this.cacheBySigner.delete(pubKey);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { BIP32Interface } from 'bip32';
|
|
2
|
+
import { ECPairInterface } from 'ecpair';
|
|
3
|
+
import { Signer, SignerAlternative, SignerAsync } from '../psbt.js';
|
|
4
|
+
export declare function hookSigner(keyPair: Signer | SignerAlternative | SignerAsync | BIP32Interface | ECPairInterface): void;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { SignatureManager } from './SignatureManager.js';
|
|
2
|
+
import { AdvancedSignatureManager } from './AdvancedSignatureManager.js';
|
|
3
|
+
const advancedSignatureManager = AdvancedSignatureManager.getInstance();
|
|
4
|
+
function getPublicKey(keyPair) {
|
|
5
|
+
if (keyPair.publicKey && Buffer.isBuffer(keyPair.publicKey)) {
|
|
6
|
+
return keyPair.publicKey.toString('hex');
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
function hookKeyPair(keyPair) {
|
|
10
|
+
const oldSign = keyPair.sign;
|
|
11
|
+
if (oldSign) {
|
|
12
|
+
keyPair.sign = new Proxy(oldSign, {
|
|
13
|
+
apply: function (target, thisArg, argumentsList) {
|
|
14
|
+
const publicKey = getPublicKey(keyPair);
|
|
15
|
+
const hash = argumentsList[0];
|
|
16
|
+
if (publicKey) {
|
|
17
|
+
let possibleSignature = advancedSignatureManager.getSignature(publicKey, hash);
|
|
18
|
+
if (!possibleSignature) {
|
|
19
|
+
possibleSignature = advancedSignatureManager.addSignature(publicKey, hash, Reflect.apply(target, thisArg, argumentsList));
|
|
20
|
+
}
|
|
21
|
+
return possibleSignature;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
let possibleSignature = keyPair.signatureManager.getSignature(hash);
|
|
25
|
+
if (!possibleSignature) {
|
|
26
|
+
possibleSignature = keyPair.signatureManager.addSignature(hash, Reflect.apply(target, thisArg, argumentsList));
|
|
27
|
+
}
|
|
28
|
+
return possibleSignature;
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
const oldSignSchnorr = keyPair.signSchnorr;
|
|
34
|
+
if (oldSignSchnorr) {
|
|
35
|
+
keyPair.signSchnorr = new Proxy(oldSignSchnorr, {
|
|
36
|
+
apply: function (target, thisArg, argumentsList) {
|
|
37
|
+
const publicKey = getPublicKey(keyPair);
|
|
38
|
+
const hash = argumentsList[0];
|
|
39
|
+
if (publicKey) {
|
|
40
|
+
let possibleSignature = advancedSignatureManager.getSignature(publicKey, hash);
|
|
41
|
+
if (!possibleSignature) {
|
|
42
|
+
possibleSignature = advancedSignatureManager.addSignature(publicKey, hash, Reflect.apply(target, thisArg, argumentsList));
|
|
43
|
+
}
|
|
44
|
+
return possibleSignature;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
let possibleSignature = keyPair.signatureManager.getSignature(hash);
|
|
48
|
+
if (!possibleSignature) {
|
|
49
|
+
possibleSignature = keyPair.signatureManager.addSignature(hash, Reflect.apply(target, thisArg, argumentsList));
|
|
50
|
+
}
|
|
51
|
+
return possibleSignature;
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export function hookSigner(keyPair) {
|
|
58
|
+
const newKeypair = keyPair;
|
|
59
|
+
if (!newKeypair.hasHook) {
|
|
60
|
+
newKeypair.hasHook = true;
|
|
61
|
+
newKeypair.signatureManager = new SignatureManager();
|
|
62
|
+
hookKeyPair(newKeypair);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface CacheEntry {
|
|
2
|
+
length: number;
|
|
3
|
+
dataRef: WeakRef<Buffer>;
|
|
4
|
+
signature: Buffer;
|
|
5
|
+
}
|
|
6
|
+
export declare class SignatureManager {
|
|
7
|
+
private cacheByLength;
|
|
8
|
+
private registry;
|
|
9
|
+
constructor();
|
|
10
|
+
addSignature(data: Buffer, signature: Buffer): Buffer;
|
|
11
|
+
getSignature(data: Buffer): Buffer | undefined;
|
|
12
|
+
clearCache(): void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export class SignatureManager {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.cacheByLength = new Map();
|
|
4
|
+
this.registry = new FinalizationRegistry((entry) => {
|
|
5
|
+
const set = this.cacheByLength.get(entry.length);
|
|
6
|
+
if (set) {
|
|
7
|
+
set.delete(entry);
|
|
8
|
+
if (set.size === 0) {
|
|
9
|
+
this.cacheByLength.delete(entry.length);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
addSignature(data, signature) {
|
|
15
|
+
const length = data.length;
|
|
16
|
+
const entry = {
|
|
17
|
+
length,
|
|
18
|
+
dataRef: new WeakRef(data),
|
|
19
|
+
signature,
|
|
20
|
+
};
|
|
21
|
+
if (!this.cacheByLength.has(length)) {
|
|
22
|
+
this.cacheByLength.set(length, new Set());
|
|
23
|
+
}
|
|
24
|
+
const set = this.cacheByLength.get(length);
|
|
25
|
+
set.add(entry);
|
|
26
|
+
this.registry.register(data, entry);
|
|
27
|
+
return signature;
|
|
28
|
+
}
|
|
29
|
+
getSignature(data) {
|
|
30
|
+
const length = data.length;
|
|
31
|
+
const set = this.cacheByLength.get(length);
|
|
32
|
+
if (!set)
|
|
33
|
+
return undefined;
|
|
34
|
+
for (const entry of set) {
|
|
35
|
+
const cachedData = entry.dataRef.deref();
|
|
36
|
+
if (cachedData && cachedData.equals(data)) {
|
|
37
|
+
return entry.signature;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
clearCache() {
|
|
43
|
+
this.cacheByLength.clear();
|
|
44
|
+
}
|
|
45
|
+
}
|
package/build/index.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { PsbtInput as _PsbtInput, PsbtInputUpdate as _PsbtInputUpdate, PsbtOutput as _PsbtOutput, TapBip32Derivation as _TapBip32Derivation, TapInternalKey as _TapInternalKey, TapKeySig as _TapKeySig, TapLeaf as _TapLeaf, TapLeafScript as _TapLeafScript, TapMerkleRoot as _TapMerkleRoot, TapScriptSig as _TapScriptSig, TapTree as _TapTree } from 'bip174/src/lib/interfaces.js';
|
|
2
|
+
import * as networks from './networks.js';
|
|
3
|
+
import * as address from './address.js';
|
|
4
|
+
import * as payments from './payments/index.js';
|
|
5
|
+
import * as script from './script.js';
|
|
6
|
+
import * as crypto from './crypto.js';
|
|
7
|
+
import * as Transaction from './transaction.js';
|
|
8
|
+
export * as address from './address.js';
|
|
9
|
+
export * as crypto from './crypto.js';
|
|
10
|
+
export * as networks from './networks.js';
|
|
11
|
+
export * as payments from './payments/index.js';
|
|
12
|
+
export * as script from './script.js';
|
|
13
|
+
export { Block } from './block.js';
|
|
14
|
+
export * from './crypto.js';
|
|
15
|
+
export * from './psbt.js';
|
|
16
|
+
export { OPS as opcodes } from './ops.js';
|
|
17
|
+
export { Transaction } from './transaction.js';
|
|
18
|
+
export { Network } from './networks.js';
|
|
19
|
+
export { initEccLib } from './ecc_lib.js';
|
|
20
|
+
export { Payment, PaymentCreator, PaymentOpts, Stack, StackElement } from './payments/index.js';
|
|
21
|
+
export { Input as TxInput, Output as TxOutput } from './transaction.js';
|
|
22
|
+
export interface PsbtInput extends _PsbtInput {
|
|
23
|
+
}
|
|
24
|
+
export interface PsbtOutput extends _PsbtOutput {
|
|
25
|
+
}
|
|
26
|
+
export interface TapInternalKey extends _TapInternalKey {
|
|
27
|
+
}
|
|
28
|
+
export interface TapLeaf extends _TapLeaf {
|
|
29
|
+
}
|
|
30
|
+
export interface TapScriptSig extends _TapScriptSig {
|
|
31
|
+
}
|
|
32
|
+
export interface TapKeySig extends _TapKeySig {
|
|
33
|
+
}
|
|
34
|
+
export interface TapTree extends _TapTree {
|
|
35
|
+
}
|
|
36
|
+
export interface TapMerkleRoot extends _TapMerkleRoot {
|
|
37
|
+
}
|
|
38
|
+
export interface TapLeafScript extends _TapLeafScript {
|
|
39
|
+
}
|
|
40
|
+
export interface TapBip32Derivation extends _TapBip32Derivation {
|
|
41
|
+
}
|
|
42
|
+
export interface PsbtInputUpdate extends _PsbtInputUpdate {
|
|
43
|
+
}
|
|
44
|
+
export * from './psbt/bip371.js';
|
|
45
|
+
export * from './address.js';
|
|
46
|
+
export * from './bufferutils.js';
|
|
47
|
+
export * from './payments/bip341.js';
|
|
48
|
+
export * from './psbt/psbtutils.js';
|
|
49
|
+
export { Taptree, XOnlyPointAddTweakResult, Tapleaf, TinySecp256k1Interface, TAPLEAF_VERSION_MASK, } from './types.js';
|
|
50
|
+
declare const bitcoin: {
|
|
51
|
+
networks: typeof networks;
|
|
52
|
+
address: typeof address;
|
|
53
|
+
payments: typeof payments;
|
|
54
|
+
script: typeof script;
|
|
55
|
+
crypto: typeof crypto;
|
|
56
|
+
Transaction: typeof Transaction;
|
|
57
|
+
};
|
|
58
|
+
export default bitcoin;
|
package/build/index.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import * as networks from './networks.js';
|
|
2
|
+
import * as address from './address.js';
|
|
3
|
+
import * as payments from './payments/index.js';
|
|
4
|
+
import * as script from './script.js';
|
|
5
|
+
import * as crypto from './crypto.js';
|
|
6
|
+
import * as Transaction from './transaction.js';
|
|
7
|
+
export * as address from './address.js';
|
|
8
|
+
export * as crypto from './crypto.js';
|
|
9
|
+
export * as networks from './networks.js';
|
|
10
|
+
export * as payments from './payments/index.js';
|
|
11
|
+
export * as script from './script.js';
|
|
12
|
+
export { Block } from './block.js';
|
|
13
|
+
export * from './crypto.js';
|
|
14
|
+
export * from './psbt.js';
|
|
15
|
+
export { OPS as opcodes } from './ops.js';
|
|
16
|
+
export { Transaction } from './transaction.js';
|
|
17
|
+
export { initEccLib } from './ecc_lib.js';
|
|
18
|
+
export * from './psbt/bip371.js';
|
|
19
|
+
export * from './address.js';
|
|
20
|
+
export * from './bufferutils.js';
|
|
21
|
+
export * from './payments/bip341.js';
|
|
22
|
+
export * from './psbt/psbtutils.js';
|
|
23
|
+
export { TAPLEAF_VERSION_MASK, } from './types.js';
|
|
24
|
+
const bitcoin = {
|
|
25
|
+
networks,
|
|
26
|
+
address,
|
|
27
|
+
payments,
|
|
28
|
+
script,
|
|
29
|
+
crypto,
|
|
30
|
+
Transaction,
|
|
31
|
+
};
|
|
32
|
+
export default bitcoin;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function fastMerkleRoot(values: Buffer[], digestFn: (b: Buffer) => Buffer): Buffer;
|
package/build/merkle.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function fastMerkleRoot(values, digestFn) {
|
|
2
|
+
if (!Array.isArray(values))
|
|
3
|
+
throw TypeError('Expected values Array');
|
|
4
|
+
if (typeof digestFn !== 'function')
|
|
5
|
+
throw TypeError('Expected digest Function');
|
|
6
|
+
let length = values.length;
|
|
7
|
+
const results = values.concat();
|
|
8
|
+
while (length > 1) {
|
|
9
|
+
let j = 0;
|
|
10
|
+
for (let i = 0; i < length; i += 2, ++j) {
|
|
11
|
+
const left = results[i];
|
|
12
|
+
const right = i + 1 === length ? left : results[i + 1];
|
|
13
|
+
const data = Buffer.concat([left, right]);
|
|
14
|
+
results[j] = digestFn(data);
|
|
15
|
+
}
|
|
16
|
+
length = j;
|
|
17
|
+
}
|
|
18
|
+
return results[0];
|
|
19
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface Bip32 {
|
|
2
|
+
public: number;
|
|
3
|
+
private: number;
|
|
4
|
+
}
|
|
5
|
+
export interface Network {
|
|
6
|
+
wif: number;
|
|
7
|
+
bip32: Bip32;
|
|
8
|
+
messagePrefix: string;
|
|
9
|
+
bech32: string;
|
|
10
|
+
pubKeyHash: number;
|
|
11
|
+
scriptHash: number;
|
|
12
|
+
}
|
|
13
|
+
export declare const bitcoin: Network;
|
|
14
|
+
export declare const regtest: Network;
|
|
15
|
+
export declare const testnet: Network;
|
|
16
|
+
export declare const dogecoin: Network;
|
|
17
|
+
export declare const dogecoinTestnet: Network;
|
|
18
|
+
export declare const litecoin: Network;
|
|
19
|
+
export declare const litecoinTestnet: Network;
|
|
20
|
+
export declare const bitcoinCash: Network;
|
|
21
|
+
export declare const bitcoinCashTestnet: Network;
|
|
22
|
+
export declare const dash: Network;
|
|
23
|
+
export declare const dashTestnet: Network;
|