utxo-lib 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- package/LICENSE +21 -0
- package/README.md +59 -0
- package/dist/src/address.d.ts +11 -0
- package/dist/src/address.d.ts.map +1 -0
- package/dist/src/address.js +37 -0
- package/dist/src/addressFormat.d.ts +53 -0
- package/dist/src/addressFormat.d.ts.map +1 -0
- package/dist/src/addressFormat.js +110 -0
- package/dist/src/bitgo/Musig2.d.ts +51 -0
- package/dist/src/bitgo/Musig2.d.ts.map +1 -0
- package/dist/src/bitgo/Musig2.js +175 -0
- package/dist/src/bitgo/Unspent.d.ts +95 -0
- package/dist/src/bitgo/Unspent.d.ts.map +1 -0
- package/dist/src/bitgo/Unspent.js +138 -0
- package/dist/src/bitgo/UtxoPsbt.d.ts +132 -0
- package/dist/src/bitgo/UtxoPsbt.d.ts.map +1 -0
- package/dist/src/bitgo/UtxoPsbt.js +469 -0
- package/dist/src/bitgo/UtxoTransaction.d.ts +22 -0
- package/dist/src/bitgo/UtxoTransaction.d.ts.map +1 -0
- package/dist/src/bitgo/UtxoTransaction.js +97 -0
- package/dist/src/bitgo/UtxoTransactionBuilder.d.ts +26 -0
- package/dist/src/bitgo/UtxoTransactionBuilder.d.ts.map +1 -0
- package/dist/src/bitgo/UtxoTransactionBuilder.js +67 -0
- package/dist/src/bitgo/bbc/DashPsbt.d.ts +12 -0
- package/dist/src/bitgo/bbc/DashPsbt.d.ts.map +1 -0
- package/dist/src/bitgo/bbc/DashPsbt.js +27 -0
- package/dist/src/bitgo/bbc/DashTransaction.d.ts +39 -0
- package/dist/src/bitgo/bbc/DashTransaction.d.ts.map +1 -0
- package/dist/src/bitgo/bbc/DashTransaction.js +109 -0
- package/dist/src/bitgo/bbc/DashTransactionBuilder.d.ts +14 -0
- package/dist/src/bitgo/bbc/DashTransactionBuilder.d.ts.map +1 -0
- package/dist/src/bitgo/bbc/DashTransactionBuilder.js +28 -0
- package/dist/src/bitgo/bbc/index.d.ts +4 -0
- package/dist/src/bitgo/bbc/index.d.ts.map +1 -0
- package/dist/src/bitgo/bbc/index.js +16 -0
- package/dist/src/bitgo/bitcoincash/address.d.ts +35 -0
- package/dist/src/bitgo/bitcoincash/address.d.ts.map +1 -0
- package/dist/src/bitgo/bitcoincash/address.js +151 -0
- package/dist/src/bitgo/bitcoincash/index.d.ts +2 -0
- package/dist/src/bitgo/bitcoincash/index.d.ts.map +1 -0
- package/dist/src/bitgo/bitcoincash/index.js +14 -0
- package/dist/src/bitgo/dash/DashPsbt.d.ts +12 -0
- package/dist/src/bitgo/dash/DashPsbt.d.ts.map +1 -0
- package/dist/src/bitgo/dash/DashPsbt.js +27 -0
- package/dist/src/bitgo/dash/DashTransaction.d.ts +39 -0
- package/dist/src/bitgo/dash/DashTransaction.d.ts.map +1 -0
- package/dist/src/bitgo/dash/DashTransaction.js +109 -0
- package/dist/src/bitgo/dash/DashTransactionBuilder.d.ts +14 -0
- package/dist/src/bitgo/dash/DashTransactionBuilder.d.ts.map +1 -0
- package/dist/src/bitgo/dash/DashTransactionBuilder.js +28 -0
- package/dist/src/bitgo/dash/index.d.ts +4 -0
- package/dist/src/bitgo/dash/index.d.ts.map +1 -0
- package/dist/src/bitgo/dash/index.js +16 -0
- package/dist/src/bitgo/index.d.ts +17 -0
- package/dist/src/bitgo/index.d.ts.map +1 -0
- package/dist/src/bitgo/index.js +30 -0
- package/dist/src/bitgo/keyutil.d.ts +17 -0
- package/dist/src/bitgo/keyutil.d.ts.map +1 -0
- package/dist/src/bitgo/keyutil.js +37 -0
- package/dist/src/bitgo/nonStandardHalfSigned.d.ts +7 -0
- package/dist/src/bitgo/nonStandardHalfSigned.d.ts.map +1 -0
- package/dist/src/bitgo/nonStandardHalfSigned.js +56 -0
- package/dist/src/bitgo/outputScripts.d.ts +84 -0
- package/dist/src/bitgo/outputScripts.d.ts.map +1 -0
- package/dist/src/bitgo/outputScripts.js +297 -0
- package/dist/src/bitgo/parseInput.d.ts +92 -0
- package/dist/src/bitgo/parseInput.d.ts.map +1 -0
- package/dist/src/bitgo/parseInput.js +344 -0
- package/dist/src/bitgo/psbt/fromHalfSigned.d.ts +24 -0
- package/dist/src/bitgo/psbt/fromHalfSigned.d.ts.map +1 -0
- package/dist/src/bitgo/psbt/fromHalfSigned.js +91 -0
- package/dist/src/bitgo/psbt/scriptTypes.d.ts +6 -0
- package/dist/src/bitgo/psbt/scriptTypes.d.ts.map +1 -0
- package/dist/src/bitgo/psbt/scriptTypes.js +23 -0
- package/dist/src/bitgo/signature.d.ts +84 -0
- package/dist/src/bitgo/signature.d.ts.map +1 -0
- package/dist/src/bitgo/signature.js +222 -0
- package/dist/src/bitgo/tnumber.d.ts +9 -0
- package/dist/src/bitgo/tnumber.d.ts.map +1 -0
- package/dist/src/bitgo/tnumber.js +31 -0
- package/dist/src/bitgo/transaction.d.ts +29 -0
- package/dist/src/bitgo/transaction.d.ts.map +1 -0
- package/dist/src/bitgo/transaction.js +247 -0
- package/dist/src/bitgo/types.d.ts +5 -0
- package/dist/src/bitgo/types.d.ts.map +1 -0
- package/dist/src/bitgo/types.js +12 -0
- package/dist/src/bitgo/wallet/Psbt.d.ts +47 -0
- package/dist/src/bitgo/wallet/Psbt.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/Psbt.js +232 -0
- package/dist/src/bitgo/wallet/Unspent.d.ts +47 -0
- package/dist/src/bitgo/wallet/Unspent.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/Unspent.js +154 -0
- package/dist/src/bitgo/wallet/WalletKeys.d.ts +72 -0
- package/dist/src/bitgo/wallet/WalletKeys.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/WalletKeys.js +104 -0
- package/dist/src/bitgo/wallet/WalletOutput.d.ts +18 -0
- package/dist/src/bitgo/wallet/WalletOutput.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/WalletOutput.js +69 -0
- package/dist/src/bitgo/wallet/WalletScripts.d.ts +7 -0
- package/dist/src/bitgo/wallet/WalletScripts.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/WalletScripts.js +15 -0
- package/dist/src/bitgo/wallet/WalletUnspentSigner.d.ts +19 -0
- package/dist/src/bitgo/wallet/WalletUnspentSigner.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/WalletUnspentSigner.js +47 -0
- package/dist/src/bitgo/wallet/chains.d.ts +57 -0
- package/dist/src/bitgo/wallet/chains.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/chains.js +106 -0
- package/dist/src/bitgo/wallet/index.d.ts +8 -0
- package/dist/src/bitgo/wallet/index.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/index.js +20 -0
- package/dist/src/bitgo/zcash/ZcashBufferutils.d.ts +26 -0
- package/dist/src/bitgo/zcash/ZcashBufferutils.d.ts.map +1 -0
- package/dist/src/bitgo/zcash/ZcashBufferutils.js +157 -0
- package/dist/src/bitgo/zcash/ZcashPsbt.d.ts +36 -0
- package/dist/src/bitgo/zcash/ZcashPsbt.d.ts.map +1 -0
- package/dist/src/bitgo/zcash/ZcashPsbt.js +146 -0
- package/dist/src/bitgo/zcash/ZcashTransaction.d.ts +61 -0
- package/dist/src/bitgo/zcash/ZcashTransaction.d.ts.map +1 -0
- package/dist/src/bitgo/zcash/ZcashTransaction.js +341 -0
- package/dist/src/bitgo/zcash/ZcashTransactionBuilder.d.ts +21 -0
- package/dist/src/bitgo/zcash/ZcashTransactionBuilder.d.ts.map +1 -0
- package/dist/src/bitgo/zcash/ZcashTransactionBuilder.js +105 -0
- package/dist/src/bitgo/zcash/address.d.ts +8 -0
- package/dist/src/bitgo/zcash/address.d.ts.map +1 -0
- package/dist/src/bitgo/zcash/address.js +57 -0
- package/dist/src/bitgo/zcash/hashZip0244.d.ts +27 -0
- package/dist/src/bitgo/zcash/hashZip0244.d.ts.map +1 -0
- package/dist/src/bitgo/zcash/hashZip0244.js +184 -0
- package/dist/src/bitgo/zcash/index.d.ts +4 -0
- package/dist/src/bitgo/zcash/index.d.ts.map +1 -0
- package/dist/src/bitgo/zcash/index.js +16 -0
- package/dist/src/classify.d.ts +19 -0
- package/dist/src/classify.d.ts.map +1 -0
- package/dist/src/classify.js +89 -0
- package/dist/src/index.d.ts +13 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +36 -0
- package/dist/src/networks.d.ts +119 -0
- package/dist/src/networks.d.ts.map +1 -0
- package/dist/src/networks.js +477 -0
- package/dist/src/noble_ecc.d.ts +28 -0
- package/dist/src/noble_ecc.d.ts.map +1 -0
- package/dist/src/noble_ecc.js +168 -0
- package/dist/src/payments/index.d.ts +4 -0
- package/dist/src/payments/index.d.ts.map +1 -0
- package/dist/src/payments/index.js +8 -0
- package/dist/src/payments/p2tr.d.ts +3 -0
- package/dist/src/payments/p2tr.d.ts.map +1 -0
- package/dist/src/payments/p2tr.js +348 -0
- package/dist/src/payments/p2tr_ns.d.ts +3 -0
- package/dist/src/payments/p2tr_ns.d.ts.map +1 -0
- package/dist/src/payments/p2tr_ns.js +134 -0
- package/dist/src/taproot.d.ts +141 -0
- package/dist/src/taproot.d.ts.map +1 -0
- package/dist/src/taproot.js +384 -0
- package/dist/src/templates/multisig/index.d.ts +4 -0
- package/dist/src/templates/multisig/index.d.ts.map +1 -0
- package/dist/src/templates/multisig/index.js +8 -0
- package/dist/src/templates/multisig/input.d.ts +7 -0
- package/dist/src/templates/multisig/input.d.ts.map +1 -0
- package/dist/src/templates/multisig/input.js +25 -0
- package/dist/src/templates/multisig/output.d.ts +7 -0
- package/dist/src/templates/multisig/output.d.ts.map +1 -0
- package/dist/src/templates/multisig/output.js +38 -0
- package/dist/src/templates/nulldata.d.ts +10 -0
- package/dist/src/templates/nulldata.d.ts.map +1 -0
- package/dist/src/templates/nulldata.js +17 -0
- package/dist/src/templates/pubkey/index.d.ts +4 -0
- package/dist/src/templates/pubkey/index.d.ts.map +1 -0
- package/dist/src/templates/pubkey/index.js +8 -0
- package/dist/src/templates/pubkey/input.d.ts +7 -0
- package/dist/src/templates/pubkey/input.d.ts.map +1 -0
- package/dist/src/templates/pubkey/input.js +14 -0
- package/dist/src/templates/pubkey/output.d.ts +7 -0
- package/dist/src/templates/pubkey/output.d.ts.map +1 -0
- package/dist/src/templates/pubkey/output.js +15 -0
- package/dist/src/templates/pubkeyhash/index.d.ts +4 -0
- package/dist/src/templates/pubkeyhash/index.d.ts.map +1 -0
- package/dist/src/templates/pubkeyhash/index.js +8 -0
- package/dist/src/templates/pubkeyhash/input.d.ts +7 -0
- package/dist/src/templates/pubkeyhash/input.d.ts.map +1 -0
- package/dist/src/templates/pubkeyhash/input.js +16 -0
- package/dist/src/templates/pubkeyhash/output.d.ts +6 -0
- package/dist/src/templates/pubkeyhash/output.d.ts.map +1 -0
- package/dist/src/templates/pubkeyhash/output.js +20 -0
- package/dist/src/templates/scripthash/index.d.ts +4 -0
- package/dist/src/templates/scripthash/index.d.ts.map +1 -0
- package/dist/src/templates/scripthash/index.js +8 -0
- package/dist/src/templates/scripthash/input.d.ts +6 -0
- package/dist/src/templates/scripthash/input.d.ts.map +1 -0
- package/dist/src/templates/scripthash/input.js +43 -0
- package/dist/src/templates/scripthash/output.d.ts +6 -0
- package/dist/src/templates/scripthash/output.d.ts.map +1 -0
- package/dist/src/templates/scripthash/output.js +15 -0
- package/dist/src/templates/taproot/index.d.ts +4 -0
- package/dist/src/templates/taproot/index.d.ts.map +1 -0
- package/dist/src/templates/taproot/index.js +8 -0
- package/dist/src/templates/taproot/input.d.ts +6 -0
- package/dist/src/templates/taproot/input.d.ts.map +1 -0
- package/dist/src/templates/taproot/input.js +23 -0
- package/dist/src/templates/taproot/output.d.ts +6 -0
- package/dist/src/templates/taproot/output.d.ts.map +1 -0
- package/dist/src/templates/taproot/output.js +15 -0
- package/dist/src/templates/taprootnofn/index.d.ts +4 -0
- package/dist/src/templates/taprootnofn/index.d.ts.map +1 -0
- package/dist/src/templates/taprootnofn/index.js +8 -0
- package/dist/src/templates/taprootnofn/input.d.ts +7 -0
- package/dist/src/templates/taprootnofn/input.d.ts.map +1 -0
- package/dist/src/templates/taprootnofn/input.js +24 -0
- package/dist/src/templates/taprootnofn/output.d.ts +7 -0
- package/dist/src/templates/taprootnofn/output.d.ts.map +1 -0
- package/dist/src/templates/taprootnofn/output.js +28 -0
- package/dist/src/templates/witnesscommitment/index.d.ts +3 -0
- package/dist/src/templates/witnesscommitment/index.d.ts.map +1 -0
- package/dist/src/templates/witnesscommitment/index.js +6 -0
- package/dist/src/templates/witnesscommitment/output.d.ts +8 -0
- package/dist/src/templates/witnesscommitment/output.d.ts.map +1 -0
- package/dist/src/templates/witnesscommitment/output.js +31 -0
- package/dist/src/templates/witnesspubkeyhash/index.d.ts +4 -0
- package/dist/src/templates/witnesspubkeyhash/index.d.ts.map +1 -0
- package/dist/src/templates/witnesspubkeyhash/index.js +8 -0
- package/dist/src/templates/witnesspubkeyhash/input.d.ts +7 -0
- package/dist/src/templates/witnesspubkeyhash/input.d.ts.map +1 -0
- package/dist/src/templates/witnesspubkeyhash/input.js +19 -0
- package/dist/src/templates/witnesspubkeyhash/output.d.ts +6 -0
- package/dist/src/templates/witnesspubkeyhash/output.d.ts.map +1 -0
- package/dist/src/templates/witnesspubkeyhash/output.js +15 -0
- package/dist/src/templates/witnessscripthash/index.d.ts +4 -0
- package/dist/src/templates/witnessscripthash/index.d.ts.map +1 -0
- package/dist/src/templates/witnessscripthash/index.js +8 -0
- package/dist/src/templates/witnessscripthash/input.d.ts +6 -0
- package/dist/src/templates/witnessscripthash/input.d.ts.map +1 -0
- package/dist/src/templates/witnessscripthash/input.js +35 -0
- package/dist/src/templates/witnessscripthash/output.d.ts +6 -0
- package/dist/src/templates/witnessscripthash/output.d.ts.map +1 -0
- package/dist/src/templates/witnessscripthash/output.js +15 -0
- package/dist/src/testutil/index.d.ts +3 -0
- package/dist/src/testutil/index.d.ts.map +1 -0
- package/dist/src/testutil/index.js +15 -0
- package/dist/src/testutil/keys.d.ts +10 -0
- package/dist/src/testutil/keys.d.ts.map +1 -0
- package/dist/src/testutil/keys.js +40 -0
- package/dist/src/testutil/mock.d.ts +21 -0
- package/dist/src/testutil/mock.d.ts.map +1 -0
- package/dist/src/testutil/mock.js +86 -0
- package/dist/src/transaction_builder.d.ts +47 -0
- package/dist/src/transaction_builder.d.ts.map +1 -0
- package/dist/src/transaction_builder.js +1084 -0
- package/package.json +87 -0
@@ -0,0 +1,134 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.p2tr_ns = void 0;
|
4
|
+
const networks_1 = require("../networks");
|
5
|
+
const bitcoinjs_lib_1 = require("bitcoinjs-lib");
|
6
|
+
const OPS = bitcoinjs_lib_1.script.OPS;
|
7
|
+
const typef = require('typeforce');
|
8
|
+
const BITCOIN_NETWORK = networks_1.networks.bitcoin;
|
9
|
+
function stacksEqual(a, b) {
|
10
|
+
if (a.length !== b.length)
|
11
|
+
return false;
|
12
|
+
return a.every((x, i) => {
|
13
|
+
return x.equals(b[i]);
|
14
|
+
});
|
15
|
+
}
|
16
|
+
// input: [signatures ...]
|
17
|
+
// output: [pubKeys[0:n-1] OP_CHECKSIGVERIFY] pubKeys[n-1] OP_CHECKSIG
|
18
|
+
function p2tr_ns(a, opts) {
|
19
|
+
if (!a.input && !a.output && !(a.pubkeys && a.pubkeys.length) && !a.signatures) {
|
20
|
+
throw new TypeError('Not enough data');
|
21
|
+
}
|
22
|
+
opts = Object.assign({ validate: true }, opts || {});
|
23
|
+
if (!opts.eccLib)
|
24
|
+
throw new Error('ECC Library is required for p2tr_ns.');
|
25
|
+
const ecc = opts.eccLib;
|
26
|
+
function isAcceptableSignature(x) {
|
27
|
+
if (Buffer.isBuffer(x)) {
|
28
|
+
return (
|
29
|
+
// empty signatures may be represented as empty buffers
|
30
|
+
(opts && opts.allowIncomplete && x.length === 0) || bitcoinjs_lib_1.script.isCanonicalSchnorrSignature(x));
|
31
|
+
}
|
32
|
+
return !!(opts && opts.allowIncomplete && x === OPS.OP_0);
|
33
|
+
}
|
34
|
+
typef({
|
35
|
+
network: typef.maybe(typef.Object),
|
36
|
+
output: typef.maybe(typef.Buffer),
|
37
|
+
pubkeys: typef.maybe(typef.arrayOf(ecc.isXOnlyPoint)),
|
38
|
+
signatures: typef.maybe(typef.arrayOf(isAcceptableSignature)),
|
39
|
+
input: typef.maybe(typef.Buffer),
|
40
|
+
}, a);
|
41
|
+
const network = a.network || BITCOIN_NETWORK;
|
42
|
+
const o = { network };
|
43
|
+
const _chunks = bitcoinjs_lib_1.lazy.value(() => {
|
44
|
+
if (!a.output)
|
45
|
+
return;
|
46
|
+
return bitcoinjs_lib_1.script.decompile(a.output);
|
47
|
+
});
|
48
|
+
bitcoinjs_lib_1.lazy.prop(o, 'output', () => {
|
49
|
+
if (!a.pubkeys)
|
50
|
+
return;
|
51
|
+
return bitcoinjs_lib_1.script.compile([].concat(...a.pubkeys.map((pk, i, pks) => [pk, i === pks.length - 1 ? OPS.OP_CHECKSIG : OPS.OP_CHECKSIGVERIFY])));
|
52
|
+
});
|
53
|
+
bitcoinjs_lib_1.lazy.prop(o, 'n', () => {
|
54
|
+
if (!o.pubkeys)
|
55
|
+
return;
|
56
|
+
return o.pubkeys.length;
|
57
|
+
});
|
58
|
+
bitcoinjs_lib_1.lazy.prop(o, 'pubkeys', () => {
|
59
|
+
const chunks = _chunks();
|
60
|
+
if (!chunks)
|
61
|
+
return;
|
62
|
+
return chunks.filter((_, index) => index % 2 === 0);
|
63
|
+
});
|
64
|
+
bitcoinjs_lib_1.lazy.prop(o, 'signatures', () => {
|
65
|
+
var _a;
|
66
|
+
if (!a.input)
|
67
|
+
return;
|
68
|
+
return (_a = bitcoinjs_lib_1.script.decompile(a.input)) === null || _a === void 0 ? void 0 : _a.reverse();
|
69
|
+
});
|
70
|
+
bitcoinjs_lib_1.lazy.prop(o, 'input', () => {
|
71
|
+
if (!a.signatures)
|
72
|
+
return;
|
73
|
+
return bitcoinjs_lib_1.script.compile([...a.signatures].reverse());
|
74
|
+
});
|
75
|
+
bitcoinjs_lib_1.lazy.prop(o, 'witness', () => {
|
76
|
+
if (!o.input)
|
77
|
+
return;
|
78
|
+
return [];
|
79
|
+
});
|
80
|
+
bitcoinjs_lib_1.lazy.prop(o, 'name', () => {
|
81
|
+
if (!o.n)
|
82
|
+
return;
|
83
|
+
return `p2tr_ns(${o.n})`;
|
84
|
+
});
|
85
|
+
// extended validation
|
86
|
+
if (opts.validate) {
|
87
|
+
const chunks = _chunks();
|
88
|
+
if (chunks) {
|
89
|
+
if (chunks[chunks.length - 1] !== OPS.OP_CHECKSIG) {
|
90
|
+
throw new TypeError('Output ends with unexpected opcode');
|
91
|
+
}
|
92
|
+
if (chunks
|
93
|
+
.filter((_, index) => index % 2 === 1)
|
94
|
+
.slice(0, -1)
|
95
|
+
.some((op) => op !== OPS.OP_CHECKSIGVERIFY)) {
|
96
|
+
throw new TypeError('Output contains unexpected opcode');
|
97
|
+
}
|
98
|
+
if (o.n > 16 || o.n !== chunks.length / 2) {
|
99
|
+
throw new TypeError('Output contains too many pubkeys');
|
100
|
+
}
|
101
|
+
if (o.pubkeys.some((x) => !ecc.isXOnlyPoint(x))) {
|
102
|
+
throw new TypeError('Output contains invalid pubkey(s)');
|
103
|
+
}
|
104
|
+
if (a.pubkeys && !stacksEqual(a.pubkeys, o.pubkeys)) {
|
105
|
+
throw new TypeError('Pubkeys mismatch');
|
106
|
+
}
|
107
|
+
}
|
108
|
+
if (a.pubkeys && a.pubkeys.length) {
|
109
|
+
o.n = a.pubkeys.length;
|
110
|
+
}
|
111
|
+
if (a.signatures && o.n) {
|
112
|
+
if (a.signatures.length < o.n) {
|
113
|
+
throw new TypeError('Not enough signatures provided');
|
114
|
+
}
|
115
|
+
if (a.signatures.length > o.n) {
|
116
|
+
throw new TypeError('Too many signatures provided');
|
117
|
+
}
|
118
|
+
}
|
119
|
+
if (a.input) {
|
120
|
+
if (!o.signatures.every(isAcceptableSignature)) {
|
121
|
+
throw new TypeError('Input has invalid signature(s)');
|
122
|
+
}
|
123
|
+
if (a.signatures && !stacksEqual(a.signatures, o.signatures)) {
|
124
|
+
throw new TypeError('Signature mismatch');
|
125
|
+
}
|
126
|
+
if (o.n !== o.signatures.length) {
|
127
|
+
throw new TypeError(`Signature count mismatch (n: ${o.n}, signatures.length: ${o.signatures.length}`);
|
128
|
+
}
|
129
|
+
}
|
130
|
+
}
|
131
|
+
return Object.assign(o, a);
|
132
|
+
}
|
133
|
+
exports.p2tr_ns = p2tr_ns;
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJ0cl9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXltZW50cy9wMnRyX25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDBDQUF1QztBQUN2QyxpREFBcUY7QUFFckYsTUFBTSxHQUFHLEdBQUcsc0JBQU8sQ0FBQyxHQUFHLENBQUM7QUFDeEIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRW5DLE1BQU0sZUFBZSxHQUFHLG1CQUFRLENBQUMsT0FBTyxDQUFDO0FBRXpDLFNBQVMsV0FBVyxDQUFDLENBQVcsRUFBRSxDQUFXO0lBQzNDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRXhDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0QixPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsMEJBQTBCO0FBQzFCLHNFQUFzRTtBQUN0RSxTQUFnQixPQUFPLENBQUMsQ0FBVSxFQUFFLElBQWtCO0lBQ3BELElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRTtRQUM5RSxNQUFNLElBQUksU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7S0FDeEM7SUFDRCxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7SUFFckQsSUFBSSxDQUFD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RCxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzdCLE1BQU0sSUFBSSxTQUFTLENBQUMsZ0NBQWdDLENBQUMsQ0FBQzthQUN2RDtZQUNELElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDN0IsTUFBTSxJQUFJLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO2FBQ3JEO1NBQ0Y7UUFFRCxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7WUFDWCxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVcsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsRUFBRTtnQkFDL0MsTUFBTSxJQUFJLFNBQVMsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO2FBQ3ZEO1lBRUQsSUFBSSxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVcsQ0FBQyxFQUFFO2dCQUM3RCxNQUFNLElBQUksU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUM7YUFDM0M7WUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2hDLE1BQU0sSUFBSSxTQUFTLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUMsVUFBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7YUFDeEc7U0FDRjtLQUNGO0lBRUQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBaElELDBCQWdJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5ldHdvcmtzIH0gZnJvbSAnLi4vbmV0d29ya3MnO1xuaW1wb3J0IHsgc2NyaXB0IGFzIGJzY3JpcHQsIFBheW1lbnQsIFBheW1lbnRPcHRzLCBTdGFjaywgbGF6eSB9IGZyb20gJ2JpdGNvaW5qcy1saWInO1xuXG5jb25zdCBPUFMgPSBic2NyaXB0Lk9QUztcbmNvbnN0IHR5cGVmID0gcmVxdWlyZSgndHlwZWZvcmNlJyk7XG5cbmNvbnN0IEJJVENPSU5fTkVUV09SSyA9IG5ldHdvcmtzLmJpdGNvaW47XG5cbmZ1bmN0aW9uIHN0YWNrc0VxdWFsKGE6IEJ1ZmZlcltdLCBiOiBCdWZmZXJbXSk6IGJvb2xlYW4ge1xuICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgcmV0dXJuIGEuZXZlcnkoKHgsIGkpID0+IHtcbiAgICByZXR1cm4geC5lcXVhbHMoYltpXSk7XG4gIH0pO1xufVxuXG4vLyBpbnB1dDogW3NpZ25hdHVyZXMgLi4uXVxuLy8gb3V0cHV0OiBbcHViS2V5c1swOm4tMV0gT1BfQ0hFQ0tTSUdWRVJJRlldIHB1YktleXNbbi0xXSBPUF9DSEVDS1NJR1xuZXhwb3J0IGZ1bmN0aW9uIHAydHJfbnMoYTogUGF5bWVudCwgb3B0cz86IFBheW1lbnRPcHRzKTogUGF5bWVudCB7XG4gIGlmICghYS5pbnB1dCAmJiAhYS5vdXRwdXQgJiYgIShhLnB1YmtleXMgJiYgYS5wdWJrZXlzLmxlbmd0aCkgJiYgIWEuc2lnbmF0dXJlcykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vdCBlbm91Z2ggZGF0YScpO1xuICB9XG4gIG9wdHMgPSBPYmplY3QuYXNzaWduKHsgdmFsaWRhdGU6IHRydWUgfSwgb3B0cyB8fCB7fSk7XG5cbiAgaWYgKCFvcHRzLmVjY0xpYikgdGhyb3cgbmV3IEVycm9yKCdFQ0MgTGlicmFyeSBpcyByZXF1aXJlZCBmb3IgcDJ0cl9ucy4nKTtcbiAgY29uc3QgZWNjID0gb3B0cy5lY2NMaWI7XG5cbiAgZnVuY3Rpb24gaXNBY2NlcHRhYmxlU2lnbmF0dXJlKHg6IEJ1ZmZlciB8IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoeCkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIGVtcHR5IHNpZ25hdHVyZXMgbWF5IGJlIHJlcHJlc2VudGVkIGFzIGVtcHR5IGJ1ZmZlcnNcbiAgICAgICAgKG9wdHMgJiYgb3B0cy5hbGxvd0luY29tcGxldGUgJiYgeC5sZW5ndGggPT09IDApIHx8IGJzY3JpcHQuaXNDYW5vbmljYWxTY2hub3JyU2lnbmF0dXJlKHgpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gISEob3B0cyAmJiBvcHRzLmFsbG93SW5jb21wbGV0ZSAmJiB4ID09PSBPUFMuT1BfMCk7XG4gIH1cblxuICB0eXBlZihcbiAgICB7XG4gICAgICBuZXR3b3JrOiB0eXBlZi5tYXliZSh0eXBlZi5PYmplY3QpLFxuICAgICAgb3V0cHV0OiB0eXBlZi5tYXliZSh0eXBlZi5CdWZmZXIpLFxuICAgICAgcHVia2V5czogdHlwZWYubWF5YmUodHlwZWYuYXJyYXlPZihlY2MuaXNYT25seVBvaW50KSksXG5cbiAgICAgIHNpZ25hdHVyZXM6IHR5cGVmLm1heWJlKHR5cGVmLmFycmF5T2YoaXNBY2NlcHRhYmxlU2lnbmF0dXJlKSksXG4gICAgICBpbnB1dDogdHlwZWYubWF5YmUodHlwZWYuQnVmZmVyKSxcbiAgICB9LFxuICAgIGFcbiAgKTtcblxuICBjb25zdCBuZXR3b3JrID0gYS5uZXR3b3JrIHx8IEJJVENPSU5fTkVUV09SSztcbiAgY29uc3QgbzogUGF5bWVudCA9IHsgbmV0d29yayB9O1xuXG4gIGNvbnN0IF9jaHVua3MgPSBsYXp5LnZhbHVlKCgpID0+IHtcbiAgICBpZiAoIWEub3V0cHV0KSByZXR1cm47XG4gICAgcmV0dXJuIGJzY3JpcHQuZGVjb21waWxlKGEub3V0cHV0KSBhcyBTdGFjaztcbiAgfSk7XG5cbiAgbGF6eS5wcm9wKG8sICdvdXRwdXQnLCAoKSA9PiB7XG4gICAgaWYgKCFhLnB1YmtleXMpIHJldHVybjtcbiAgICByZXR1cm4gYnNjcmlwdC5jb21waWxlKFxuICAgICAgKFtdIGFzIFN0YWNrKS5jb25jYXQoXG4gICAgICAgIC4uLmEucHVia2V5cy5tYXAoKHBrLCBpLCBwa3MpID0+IFtwaywgaSA9PT0gcGtzLmxlbmd0aCAtIDEgPyBPUFMuT1BfQ0hFQ0tTSUcgOiBPUFMuT1BfQ0hFQ0tTSUdWRVJJRlldKVxuICAgICAgKVxuICAgICk7XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ24nLCAoKSA9PiB7XG4gICAgaWYgKCFvLnB1YmtleXMpIHJldHVybjtcbiAgICByZXR1cm4gby5wdWJrZXlzLmxlbmd0aDtcbiAgfSk7XG4gIGxhenkucHJvcChvLCAncHVia2V5cycsICgpID0+IHtcbiAgICBjb25zdCBjaHVua3MgPSBfY2h1bmtzKCk7XG4gICAgaWYgKCFjaHVua3MpIHJldHVybjtcbiAgICByZXR1cm4gY2h1bmtzLmZpbHRlcigoXywgaW5kZXgpID0+IGluZGV4ICUgMiA9PT0gMCkgYXMgQnVmZmVyW107XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ3NpZ25hdHVyZXMnLCAoKSA9PiB7XG4gICAgaWYgKCFhLmlucHV0KSByZXR1cm47XG4gICAgcmV0dXJuIGJzY3JpcHQuZGVjb21waWxlKGEuaW5wdXQpPy5yZXZlcnNlKCk7XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ2lucHV0JywgKCkgPT4ge1xuICAgIGlmICghYS5zaWduYXR1cmVzKSByZXR1cm47XG4gICAgcmV0dXJuIGJzY3JpcHQuY29tcGlsZShbLi4uYS5zaWduYXR1cmVzXS5yZXZlcnNlKCkpO1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICd3aXRuZXNzJywgKCkgPT4ge1xuICAgIGlmICghby5pbnB1dCkgcmV0dXJuO1xuICAgIHJldHVybiBbXTtcbiAgfSk7XG4gIGxhenkucHJvcChvLCAnbmFtZScsICgpID0+IHtcbiAgICBpZiAoIW8ubikgcmV0dXJuO1xuICAgIHJldHVybiBgcDJ0cl9ucygke28ubn0pYDtcbiAgfSk7XG5cbiAgLy8gZXh0ZW5kZWQgdmFsaWRhdGlvblxuICBpZiAob3B0cy52YWxpZGF0ZSkge1xuICAgIGNvbnN0IGNodW5rcyA9IF9jaHVua3MoKTtcbiAgICBpZiAoY2h1bmtzKSB7XG4gICAgICBpZiAoY2h1bmtzW2NodW5rcy5sZW5ndGggLSAxXSAhPT0gT1BTLk9QX0NIRUNLU0lHKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ091dHB1dCBlbmRzIHdpdGggdW5leHBlY3RlZCBvcGNvZGUnKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgY2h1bmtzXG4gICAgICAgICAgLmZpbHRlcigoXywgaW5kZXgpID0+IGluZGV4ICUgMiA9PT0gMSlcbiAgICAgICAgICAuc2xpY2UoMCwgLTEpXG4gICAgICAgICAgLnNvbWUoKG9wKSA9PiBvcCAhPT0gT1BTLk9QX0NIRUNLU0lHVkVSSUZZKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ091dHB1dCBjb250YWlucyB1bmV4cGVjdGVkIG9wY29kZScpO1xuICAgICAgfVxuICAgICAgaWYgKG8ubiEgPiAxNiB8fCBvLm4gIT09IGNodW5rcy5sZW5ndGggLyAyKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ091dHB1dCBjb250YWlucyB0b28gbWFueSBwdWJrZXlzJyk7XG4gICAgICB9XG4gICAgICBpZiAoby5wdWJrZXlzIS5zb21lKCh4KSA9PiAhZWNjLmlzWE9ubHlQb2ludCh4KSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT3V0cHV0IGNvbnRhaW5zIGludmFsaWQgcHVia2V5KHMpJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhLnB1YmtleXMgJiYgIXN0YWNrc0VxdWFsKGEucHVia2V5cywgby5wdWJrZXlzISkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHVia2V5cyBtaXNtYXRjaCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhLnB1YmtleXMgJiYgYS5wdWJrZXlzLmxlbmd0aCkge1xuICAgICAgby5uID0gYS5wdWJrZXlzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBpZiAoYS5zaWduYXR1cmVzICYmIG8ubikge1xuICAgICAgaWYgKGEuc2lnbmF0dXJlcy5sZW5ndGggPCBvLm4pIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm90IGVub3VnaCBzaWduYXR1cmVzIHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICBpZiAoYS5zaWduYXR1cmVzLmxlbmd0aCA+IG8ubikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUb28gbWFueSBzaWduYXR1cmVzIHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGEuaW5wdXQpIHtcbiAgICAgIGlmICghby5zaWduYXR1cmVzIS5ldmVyeShpc0FjY2VwdGFibGVTaWduYXR1cmUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lucHV0IGhhcyBpbnZhbGlkIHNpZ25hdHVyZShzKScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYS5zaWduYXR1cmVzICYmICFzdGFja3NFcXVhbChhLnNpZ25hdHVyZXMsIG8uc2lnbmF0dXJlcyEpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NpZ25hdHVyZSBtaXNtYXRjaCcpO1xuICAgICAgfVxuICAgICAgaWYgKG8ubiAhPT0gby5zaWduYXR1cmVzIS5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgU2lnbmF0dXJlIGNvdW50IG1pc21hdGNoIChuOiAke28ubn0sIHNpZ25hdHVyZXMubGVuZ3RoOiAke28uc2lnbmF0dXJlcyEubGVuZ3RofWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKG8sIGEpO1xufVxuIl19
|
@@ -0,0 +1,141 @@
|
|
1
|
+
/// <reference types="node" />
|
2
|
+
import { TapTree as PsbtTapTree } from 'bip174/src/lib/interfaces';
|
3
|
+
import { payments as bpayments } from 'bitcoinjs-lib';
|
4
|
+
/**
|
5
|
+
* The 0x02 prefix indicating an even Y coordinate which is implicitly assumed
|
6
|
+
* on all 32 byte x-only pub keys as defined in BIP340.
|
7
|
+
*/
|
8
|
+
export declare const EVEN_Y_COORD_PREFIX: Buffer;
|
9
|
+
export declare const INITIAL_TAPSCRIPT_VERSION = 192;
|
10
|
+
export interface TinySecp256k1Interface {
|
11
|
+
isXOnlyPoint(p: Uint8Array): boolean;
|
12
|
+
xOnlyPointAddTweak(p: Uint8Array, tweak: Uint8Array): XOnlyPointAddTweakResult | null;
|
13
|
+
pointFromScalar(sk: Uint8Array, compressed?: boolean): Uint8Array | null;
|
14
|
+
pointMultiply(a: Uint8Array, b: Uint8Array): Uint8Array | null;
|
15
|
+
pointAdd(a: Uint8Array, b: Uint8Array): Uint8Array | null;
|
16
|
+
privateAdd(d: Uint8Array, tweak: Uint8Array): Uint8Array | null;
|
17
|
+
privateNegate(d: Uint8Array): Uint8Array;
|
18
|
+
}
|
19
|
+
/**
|
20
|
+
* Aggregates a list of public keys into a single MuSig2* public key
|
21
|
+
* according to the MuSig2 paper.
|
22
|
+
* @param ecc Elliptic curve implementation
|
23
|
+
* @param pubkeys The list of pub keys to aggregate
|
24
|
+
* @returns a 32 byte Buffer representing the aggregate key
|
25
|
+
*/
|
26
|
+
export declare function aggregateMuSigPubkeys(ecc: TinySecp256k1Interface, pubkeys: Buffer[]): Uint8Array;
|
27
|
+
/**
|
28
|
+
* Encodes the length of a script as a bitcoin variable length integer.
|
29
|
+
* @param script
|
30
|
+
* @returns
|
31
|
+
*/
|
32
|
+
export declare function serializeScriptSize(script: Buffer): Buffer;
|
33
|
+
/**
|
34
|
+
* Gets a tapleaf tagged hash from a script.
|
35
|
+
* @param script
|
36
|
+
* @returns
|
37
|
+
*/
|
38
|
+
export declare function hashTapLeaf(script: Buffer, leafVersion?: number): Buffer;
|
39
|
+
/**
|
40
|
+
* Creates a lexicographically sorted tapbranch from two child taptree nodes
|
41
|
+
* and returns its tagged hash.
|
42
|
+
* @param child1
|
43
|
+
* @param child2
|
44
|
+
* @returns the tagged tapbranch hash
|
45
|
+
*/
|
46
|
+
export declare function hashTapBranch(child1: Buffer, child2: Buffer): Buffer;
|
47
|
+
/**
|
48
|
+
* Tweaks a privkey, using the tagged hash of its pubkey, and (optionally) a taptree root
|
49
|
+
* @param ecc Elliptic curve implementation
|
50
|
+
* @param pubkey public key, used to calculate the tweak
|
51
|
+
* @param privkey the privkey to tweak
|
52
|
+
* @param taptreeRoot the taptree root tagged hash
|
53
|
+
* @returns {Buffer} the tweaked privkey
|
54
|
+
*/
|
55
|
+
export declare function tapTweakPrivkey(ecc: TinySecp256k1Interface, pubkey: Uint8Array, privkey: Uint8Array, taptreeRoot?: Uint8Array): Uint8Array;
|
56
|
+
export interface XOnlyPointAddTweakResult {
|
57
|
+
parity: 1 | 0;
|
58
|
+
xOnlyPubkey: Uint8Array;
|
59
|
+
}
|
60
|
+
/**
|
61
|
+
* Tweaks an internal pubkey, using the tagged hash of itself, and (optionally) a taptree root
|
62
|
+
* @param ecc Elliptic curve implementation
|
63
|
+
* @param pubkey the internal pubkey to tweak
|
64
|
+
* @param taptreeRoot the taptree root tagged hash
|
65
|
+
* @returns {TweakedPubkey} the tweaked pubkey
|
66
|
+
*/
|
67
|
+
export declare function tapTweakPubkey(ecc: TinySecp256k1Interface, pubkey: Uint8Array, taptreeRoot?: Buffer): XOnlyPointAddTweakResult;
|
68
|
+
export interface Taptree {
|
69
|
+
root: Buffer;
|
70
|
+
paths: Buffer[][];
|
71
|
+
}
|
72
|
+
/**
|
73
|
+
* Gets the root hash and hash-paths of a taptree from the depth-first
|
74
|
+
* construction used in BIP-0371 PSBTs
|
75
|
+
* @param tree
|
76
|
+
* @returns {Taptree} the tree, represented by its root hash, and the paths to
|
77
|
+
* that root from each of the input scripts
|
78
|
+
*/
|
79
|
+
export declare function getDepthFirstTaptree(tree: PsbtTapTree): Taptree;
|
80
|
+
/**
|
81
|
+
* Gets the root hash of a taptree using a weighted Huffman construction from a
|
82
|
+
* list of scripts and corresponding weights.
|
83
|
+
* @param scripts
|
84
|
+
* @param weights
|
85
|
+
* @returns {Taptree} the tree, represented by its root hash, and the paths to that root from each of the input scripts
|
86
|
+
*/
|
87
|
+
export declare function getHuffmanTaptree(scripts: Buffer[], weights: Array<number | undefined>): Taptree;
|
88
|
+
export declare function getControlBlock(parity: 0 | 1, pubkey: Uint8Array, path: Buffer[], leafVersion?: number): Buffer;
|
89
|
+
export interface KeyPathWitness {
|
90
|
+
spendType: 'Key';
|
91
|
+
signature: Buffer;
|
92
|
+
annex?: Buffer;
|
93
|
+
}
|
94
|
+
export interface ScriptPathWitness {
|
95
|
+
spendType: 'Script';
|
96
|
+
scriptSig: Buffer[];
|
97
|
+
tapscript: Buffer;
|
98
|
+
controlBlock: Buffer;
|
99
|
+
annex?: Buffer;
|
100
|
+
}
|
101
|
+
export interface ControlBlock {
|
102
|
+
parity: number;
|
103
|
+
internalPubkey: Buffer;
|
104
|
+
leafVersion: number;
|
105
|
+
path: Buffer[];
|
106
|
+
}
|
107
|
+
/**
|
108
|
+
* Parses a taproot witness stack and extracts key data elements.
|
109
|
+
* @param witnessStack
|
110
|
+
* @returns {ScriptPathWitness|KeyPathWitness} an object representing the
|
111
|
+
* parsed witness for a script path or key path spend.
|
112
|
+
* @throws {Error} if the witness stack does not conform to the BIP 341 script validation rules
|
113
|
+
*/
|
114
|
+
export declare function parseTaprootWitness(witnessStack: Buffer[]): ScriptPathWitness | KeyPathWitness;
|
115
|
+
/**
|
116
|
+
* Parses a taproot control block.
|
117
|
+
* @param ecc Elliptic curve implementation
|
118
|
+
* @param controlBlock the control block to parse
|
119
|
+
* @returns {ControlBlock} the parsed control block
|
120
|
+
* @throws {Error} if the witness stack does not conform to the BIP 341 script validation rules
|
121
|
+
*/
|
122
|
+
export declare function parseControlBlock(ecc: TinySecp256k1Interface, controlBlock: Buffer): ControlBlock;
|
123
|
+
/**
|
124
|
+
* Calculates the tapleaf hash from a control block and script.
|
125
|
+
* @param ecc Elliptic curve implementation
|
126
|
+
* @param controlBlock the control block, either raw or parsed
|
127
|
+
* @param tapscript the leaf script corresdponding to the control block
|
128
|
+
* @returns {Buffer} the tapleaf hash
|
129
|
+
*/
|
130
|
+
export declare function getTapleafHash(ecc: TinySecp256k1Interface, controlBlock: Buffer | ControlBlock, tapscript: Buffer): Buffer;
|
131
|
+
/**
|
132
|
+
* Calculates the taptree root hash from a control block and script.
|
133
|
+
* @param ecc Elliptic curve implementation
|
134
|
+
* @param controlBlock the control block, either raw or parsed
|
135
|
+
* @param tapscript the leaf script corresdponding to the control block
|
136
|
+
* @param tapleafHash the leaf hash if already calculated
|
137
|
+
* @returns {Buffer} the taptree root hash
|
138
|
+
*/
|
139
|
+
export declare function getTaptreeRoot(ecc: TinySecp256k1Interface, controlBlock: Buffer | ControlBlock, tapscript: Buffer, tapleafHash?: Buffer): Buffer;
|
140
|
+
export declare function getTweakedOutputKey(payment: bpayments.Payment): Buffer;
|
141
|
+
//# sourceMappingURL=taproot.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"taproot.d.ts","sourceRoot":"","sources":["../../src/taproot.ts"],"names":[],"mappings":"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"}
|