xpi-ts 0.2.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/LICENSE +21 -0
- package/README.md +516 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/lib/bitcore/address.d.ts +66 -0
- package/dist/lib/bitcore/address.d.ts.map +1 -0
- package/dist/lib/bitcore/address.js +407 -0
- package/dist/lib/bitcore/block/block.d.ts +57 -0
- package/dist/lib/bitcore/block/block.d.ts.map +1 -0
- package/dist/lib/bitcore/block/block.js +233 -0
- package/dist/lib/bitcore/block/blockheader.d.ts +82 -0
- package/dist/lib/bitcore/block/blockheader.d.ts.map +1 -0
- package/dist/lib/bitcore/block/blockheader.js +323 -0
- package/dist/lib/bitcore/block/index.d.ts +5 -0
- package/dist/lib/bitcore/block/index.d.ts.map +1 -0
- package/dist/lib/bitcore/block/index.js +2 -0
- package/dist/lib/bitcore/chunk.d.ts +22 -0
- package/dist/lib/bitcore/chunk.d.ts.map +1 -0
- package/dist/lib/bitcore/chunk.js +46 -0
- package/dist/lib/bitcore/crypto/bn.d.ts +53 -0
- package/dist/lib/bitcore/crypto/bn.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/bn.js +238 -0
- package/dist/lib/bitcore/crypto/ecdsa.d.ts +46 -0
- package/dist/lib/bitcore/crypto/ecdsa.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/ecdsa.js +247 -0
- package/dist/lib/bitcore/crypto/hash.d.ts +16 -0
- package/dist/lib/bitcore/crypto/hash.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/hash.js +87 -0
- package/dist/lib/bitcore/crypto/index.d.ts +9 -0
- package/dist/lib/bitcore/crypto/index.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/index.js +8 -0
- package/dist/lib/bitcore/crypto/musig2.d.ts +40 -0
- package/dist/lib/bitcore/crypto/musig2.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/musig2.js +236 -0
- package/dist/lib/bitcore/crypto/point.d.ts +20 -0
- package/dist/lib/bitcore/crypto/point.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/point.js +133 -0
- package/dist/lib/bitcore/crypto/random.d.ts +7 -0
- package/dist/lib/bitcore/crypto/random.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/random.js +30 -0
- package/dist/lib/bitcore/crypto/schnorr.d.ts +40 -0
- package/dist/lib/bitcore/crypto/schnorr.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/schnorr.js +185 -0
- package/dist/lib/bitcore/crypto/signature.d.ts +53 -0
- package/dist/lib/bitcore/crypto/signature.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/signature.js +300 -0
- package/dist/lib/bitcore/crypto/sigtype.d.ts +5 -0
- package/dist/lib/bitcore/crypto/sigtype.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/sigtype.js +18 -0
- package/dist/lib/bitcore/encoding/base58.d.ts +16 -0
- package/dist/lib/bitcore/encoding/base58.d.ts.map +1 -0
- package/dist/lib/bitcore/encoding/base58.js +55 -0
- package/dist/lib/bitcore/encoding/base58check.d.ts +9 -0
- package/dist/lib/bitcore/encoding/base58check.d.ts.map +1 -0
- package/dist/lib/bitcore/encoding/base58check.js +82 -0
- package/dist/lib/bitcore/encoding/bufferreader.d.ts +34 -0
- package/dist/lib/bitcore/encoding/bufferreader.d.ts.map +1 -0
- package/dist/lib/bitcore/encoding/bufferreader.js +198 -0
- package/dist/lib/bitcore/encoding/bufferwriter.d.ts +36 -0
- package/dist/lib/bitcore/encoding/bufferwriter.d.ts.map +1 -0
- package/dist/lib/bitcore/encoding/bufferwriter.js +189 -0
- package/dist/lib/bitcore/encoding/varint.d.ts +20 -0
- package/dist/lib/bitcore/encoding/varint.d.ts.map +1 -0
- package/dist/lib/bitcore/encoding/varint.js +61 -0
- package/dist/lib/bitcore/errors.d.ts +28 -0
- package/dist/lib/bitcore/errors.d.ts.map +1 -0
- package/dist/lib/bitcore/errors.js +325 -0
- package/dist/lib/bitcore/hdprivatekey.d.ts +78 -0
- package/dist/lib/bitcore/hdprivatekey.d.ts.map +1 -0
- package/dist/lib/bitcore/hdprivatekey.js +381 -0
- package/dist/lib/bitcore/hdpublickey.d.ts +98 -0
- package/dist/lib/bitcore/hdpublickey.d.ts.map +1 -0
- package/dist/lib/bitcore/hdpublickey.js +416 -0
- package/dist/lib/bitcore/index.d.ts +60 -0
- package/dist/lib/bitcore/index.d.ts.map +1 -0
- package/dist/lib/bitcore/index.js +44 -0
- package/dist/lib/bitcore/message.d.ts +23 -0
- package/dist/lib/bitcore/message.d.ts.map +1 -0
- package/dist/lib/bitcore/message.js +112 -0
- package/dist/lib/bitcore/mnemonic/errors.d.ts +7 -0
- package/dist/lib/bitcore/mnemonic/errors.d.ts.map +1 -0
- package/dist/lib/bitcore/mnemonic/errors.js +20 -0
- package/dist/lib/bitcore/mnemonic/index.d.ts +5 -0
- package/dist/lib/bitcore/mnemonic/index.d.ts.map +1 -0
- package/dist/lib/bitcore/mnemonic/index.js +4 -0
- package/dist/lib/bitcore/mnemonic/mnemonic.d.ts +23 -0
- package/dist/lib/bitcore/mnemonic/mnemonic.d.ts.map +1 -0
- package/dist/lib/bitcore/mnemonic/mnemonic.js +164 -0
- package/dist/lib/bitcore/mnemonic/pbkdf2.d.ts +2 -0
- package/dist/lib/bitcore/mnemonic/pbkdf2.d.ts.map +1 -0
- package/dist/lib/bitcore/mnemonic/pbkdf2.js +25 -0
- package/dist/lib/bitcore/mnemonic/words/english.d.ts +2 -0
- package/dist/lib/bitcore/mnemonic/words/english.d.ts.map +1 -0
- package/dist/lib/bitcore/mnemonic/words/english.js +2050 -0
- package/dist/lib/bitcore/mnemonic/words/index.d.ts +4 -0
- package/dist/lib/bitcore/mnemonic/words/index.d.ts.map +1 -0
- package/dist/lib/bitcore/mnemonic/words/index.js +4 -0
- package/dist/lib/bitcore/musig2/index.d.ts +3 -0
- package/dist/lib/bitcore/musig2/index.d.ts.map +1 -0
- package/dist/lib/bitcore/musig2/index.js +2 -0
- package/dist/lib/bitcore/musig2/session.d.ts +79 -0
- package/dist/lib/bitcore/musig2/session.d.ts.map +1 -0
- package/dist/lib/bitcore/musig2/session.js +346 -0
- package/dist/lib/bitcore/musig2/signer.d.ts +61 -0
- package/dist/lib/bitcore/musig2/signer.d.ts.map +1 -0
- package/dist/lib/bitcore/musig2/signer.js +146 -0
- package/dist/lib/bitcore/networks.d.ts +53 -0
- package/dist/lib/bitcore/networks.d.ts.map +1 -0
- package/dist/lib/bitcore/networks.js +150 -0
- package/dist/lib/bitcore/opcode.d.ts +250 -0
- package/dist/lib/bitcore/opcode.d.ts.map +1 -0
- package/dist/lib/bitcore/opcode.js +270 -0
- package/dist/lib/bitcore/privatekey.d.ts +56 -0
- package/dist/lib/bitcore/privatekey.d.ts.map +1 -0
- package/dist/lib/bitcore/privatekey.js +237 -0
- package/dist/lib/bitcore/publickey.d.ts +59 -0
- package/dist/lib/bitcore/publickey.d.ts.map +1 -0
- package/dist/lib/bitcore/publickey.js +263 -0
- package/dist/lib/bitcore/script/interpreter.d.ts +98 -0
- package/dist/lib/bitcore/script/interpreter.d.ts.map +1 -0
- package/dist/lib/bitcore/script/interpreter.js +1704 -0
- package/dist/lib/bitcore/script.d.ts +111 -0
- package/dist/lib/bitcore/script.d.ts.map +1 -0
- package/dist/lib/bitcore/script.js +1112 -0
- package/dist/lib/bitcore/taproot/musig2.d.ts +29 -0
- package/dist/lib/bitcore/taproot/musig2.d.ts.map +1 -0
- package/dist/lib/bitcore/taproot/musig2.js +104 -0
- package/dist/lib/bitcore/taproot/nft.d.ts +164 -0
- package/dist/lib/bitcore/taproot/nft.d.ts.map +1 -0
- package/dist/lib/bitcore/taproot/nft.js +407 -0
- package/dist/lib/bitcore/taproot.d.ts +65 -0
- package/dist/lib/bitcore/taproot.d.ts.map +1 -0
- package/dist/lib/bitcore/taproot.js +288 -0
- package/dist/lib/bitcore/transaction/index.d.ts +12 -0
- package/dist/lib/bitcore/transaction/index.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/index.js +6 -0
- package/dist/lib/bitcore/transaction/input.d.ts +202 -0
- package/dist/lib/bitcore/transaction/input.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/input.js +911 -0
- package/dist/lib/bitcore/transaction/output.d.ts +48 -0
- package/dist/lib/bitcore/transaction/output.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/output.js +231 -0
- package/dist/lib/bitcore/transaction/sighash.d.ts +32 -0
- package/dist/lib/bitcore/transaction/sighash.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/sighash.js +335 -0
- package/dist/lib/bitcore/transaction/signature.d.ts +36 -0
- package/dist/lib/bitcore/transaction/signature.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/signature.js +130 -0
- package/dist/lib/bitcore/transaction/transaction.d.ts +164 -0
- package/dist/lib/bitcore/transaction/transaction.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/transaction.js +1016 -0
- package/dist/lib/bitcore/transaction/unspentoutput.d.ts +58 -0
- package/dist/lib/bitcore/transaction/unspentoutput.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/unspentoutput.js +167 -0
- package/dist/lib/bitcore/unit.d.ts +44 -0
- package/dist/lib/bitcore/unit.d.ts.map +1 -0
- package/dist/lib/bitcore/unit.js +106 -0
- package/dist/lib/bitcore/uri.d.ts +29 -0
- package/dist/lib/bitcore/uri.d.ts.map +1 -0
- package/dist/lib/bitcore/uri.js +163 -0
- package/dist/lib/bitcore/util/base32.d.ts +5 -0
- package/dist/lib/bitcore/util/base32.d.ts.map +1 -0
- package/dist/lib/bitcore/util/base32.js +58 -0
- package/dist/lib/bitcore/util/buffer.d.ts +18 -0
- package/dist/lib/bitcore/util/buffer.d.ts.map +1 -0
- package/dist/lib/bitcore/util/buffer.js +76 -0
- package/dist/lib/bitcore/util/convertBits.d.ts +2 -0
- package/dist/lib/bitcore/util/convertBits.d.ts.map +1 -0
- package/dist/lib/bitcore/util/convertBits.js +26 -0
- package/dist/lib/bitcore/util/js.d.ts +9 -0
- package/dist/lib/bitcore/util/js.d.ts.map +1 -0
- package/dist/lib/bitcore/util/js.js +45 -0
- package/dist/lib/bitcore/util/preconditions.d.ts +6 -0
- package/dist/lib/bitcore/util/preconditions.d.ts.map +1 -0
- package/dist/lib/bitcore/util/preconditions.js +31 -0
- package/dist/lib/bitcore/util.d.ts +14 -0
- package/dist/lib/bitcore/util.d.ts.map +1 -0
- package/dist/lib/bitcore/util.js +13 -0
- package/dist/lib/bitcore/xaddress.d.ts +45 -0
- package/dist/lib/bitcore/xaddress.d.ts.map +1 -0
- package/dist/lib/bitcore/xaddress.js +279 -0
- package/dist/lib/rank/api.d.ts +75 -0
- package/dist/lib/rank/api.d.ts.map +1 -0
- package/dist/lib/rank/api.js +4 -0
- package/dist/lib/rank/index.d.ts +127 -0
- package/dist/lib/rank/index.d.ts.map +1 -0
- package/dist/lib/rank/index.js +421 -0
- package/dist/lib/rank/opcode.d.ts +23 -0
- package/dist/lib/rank/opcode.d.ts.map +1 -0
- package/dist/lib/rank/opcode.js +23 -0
- package/dist/lib/rank/script.d.ts +2 -0
- package/dist/lib/rank/script.d.ts.map +1 -0
- package/dist/lib/rank/script.js +7 -0
- package/dist/lib/rank/transaction.d.ts +3 -0
- package/dist/lib/rank/transaction.d.ts.map +1 -0
- package/dist/lib/rank/transaction.js +12 -0
- package/dist/lib/rpc.d.ts +136 -0
- package/dist/lib/rpc.d.ts.map +1 -0
- package/dist/lib/rpc.js +62 -0
- package/dist/utils/constants.d.ts +18 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +20 -0
- package/dist/utils/env.d.ts +3 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +8 -0
- package/dist/utils/string.d.ts +11 -0
- package/dist/utils/string.d.ts.map +1 -0
- package/dist/utils/string.js +47 -0
- package/dist/utils/types.d.ts +2 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +1 -0
- package/dist/utils/wallet.d.ts +12 -0
- package/dist/utils/wallet.d.ts.map +1 -0
- package/dist/utils/wallet.js +28 -0
- package/package.json +91 -0
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import { Hash } from './crypto/hash.js';
|
|
2
|
+
import { PublicKey } from './publickey.js';
|
|
3
|
+
import { PrivateKey } from './privatekey.js';
|
|
4
|
+
import { Script } from './script.js';
|
|
5
|
+
import { Opcode } from './opcode.js';
|
|
6
|
+
import { BN } from './crypto/bn.js';
|
|
7
|
+
import { BufferWriter } from './encoding/bufferwriter.js';
|
|
8
|
+
import { Signature } from './crypto/signature.js';
|
|
9
|
+
export const TAPROOT_LEAF_MASK = 0xfe;
|
|
10
|
+
export const TAPROOT_LEAF_TAPSCRIPT = 0xc0;
|
|
11
|
+
export const TAPROOT_CONTROL_BASE_SIZE = 33;
|
|
12
|
+
export const TAPROOT_CONTROL_NODE_SIZE = 32;
|
|
13
|
+
export const TAPROOT_CONTROL_MAX_NODE_COUNT = 128;
|
|
14
|
+
export const TAPROOT_CONTROL_MAX_SIZE = TAPROOT_CONTROL_BASE_SIZE +
|
|
15
|
+
TAPROOT_CONTROL_NODE_SIZE * TAPROOT_CONTROL_MAX_NODE_COUNT;
|
|
16
|
+
export const TAPROOT_SCRIPTTYPE = Opcode.OP_1;
|
|
17
|
+
export const TAPROOT_INTRO_SIZE = 3;
|
|
18
|
+
export const TAPROOT_SIZE_WITHOUT_STATE = TAPROOT_INTRO_SIZE + 33;
|
|
19
|
+
export const TAPROOT_SIZE_WITH_STATE = TAPROOT_INTRO_SIZE + 33 + 33;
|
|
20
|
+
export const TAPROOT_SIGHASH_TYPE = Signature.SIGHASH_ALL | Signature.SIGHASH_LOTUS;
|
|
21
|
+
export const TAPROOT_ANNEX_TAG = 0x50;
|
|
22
|
+
export function taggedHash(tag, data) {
|
|
23
|
+
const tagHash = Hash.sha256(Buffer.from(tag, 'utf8'));
|
|
24
|
+
const combined = Buffer.concat([tagHash, tagHash, data]);
|
|
25
|
+
return Hash.sha256(combined);
|
|
26
|
+
}
|
|
27
|
+
export function calculateTapTweak(internalPubKey, merkleRoot = Buffer.alloc(32)) {
|
|
28
|
+
const pubKeyBytes = internalPubKey.toBuffer();
|
|
29
|
+
const data = Buffer.concat([pubKeyBytes, merkleRoot]);
|
|
30
|
+
return taggedHash('TapTweak', data);
|
|
31
|
+
}
|
|
32
|
+
export function calculateTapLeaf(script, leafVersion = TAPROOT_LEAF_TAPSCRIPT) {
|
|
33
|
+
const scriptBuf = Buffer.isBuffer(script) ? script : script.toBuffer();
|
|
34
|
+
const writer = new BufferWriter();
|
|
35
|
+
writer.writeUInt8(leafVersion);
|
|
36
|
+
writer.writeVarintNum(scriptBuf.length);
|
|
37
|
+
writer.write(scriptBuf);
|
|
38
|
+
return taggedHash('TapLeaf', writer.toBuffer());
|
|
39
|
+
}
|
|
40
|
+
export function calculateTapBranch(left, right) {
|
|
41
|
+
const ordered = Buffer.compare(left, right) < 0
|
|
42
|
+
? Buffer.concat([left, right])
|
|
43
|
+
: Buffer.concat([right, left]);
|
|
44
|
+
return taggedHash('TapBranch', ordered);
|
|
45
|
+
}
|
|
46
|
+
export function tweakPublicKey(internalPubKey, merkleRoot = Buffer.alloc(32)) {
|
|
47
|
+
const tweak = calculateTapTweak(internalPubKey, merkleRoot);
|
|
48
|
+
return internalPubKey.addScalar(tweak);
|
|
49
|
+
}
|
|
50
|
+
export function tweakPrivateKey(internalPrivKey, merkleRoot = Buffer.alloc(32)) {
|
|
51
|
+
const internalPubKey = internalPrivKey.publicKey;
|
|
52
|
+
const tweak = calculateTapTweak(internalPubKey, merkleRoot);
|
|
53
|
+
const tweakBN = new BN(tweak);
|
|
54
|
+
const privKeyBN = internalPrivKey.bn;
|
|
55
|
+
const tweakedBN = privKeyBN.add(tweakBN).umod(PublicKey.getN());
|
|
56
|
+
return new PrivateKey(tweakedBN);
|
|
57
|
+
}
|
|
58
|
+
export function isTapLeafNode(node) {
|
|
59
|
+
return 'script' in node;
|
|
60
|
+
}
|
|
61
|
+
export function isTapBranchNode(node) {
|
|
62
|
+
return 'left' in node && 'right' in node;
|
|
63
|
+
}
|
|
64
|
+
export function buildTapTree(tree) {
|
|
65
|
+
if (isTapLeafNode(tree)) {
|
|
66
|
+
const leafNode = tree;
|
|
67
|
+
const leafVersion = leafNode.leafVersion || TAPROOT_LEAF_TAPSCRIPT;
|
|
68
|
+
const scriptBuf = Buffer.isBuffer(leafNode.script)
|
|
69
|
+
? leafNode.script
|
|
70
|
+
: leafNode.script.toBuffer();
|
|
71
|
+
const leafHash = calculateTapLeaf(scriptBuf, leafVersion);
|
|
72
|
+
return {
|
|
73
|
+
merkleRoot: leafHash,
|
|
74
|
+
leaves: [
|
|
75
|
+
{
|
|
76
|
+
script: Script.fromBuffer(scriptBuf),
|
|
77
|
+
leafVersion,
|
|
78
|
+
leafHash,
|
|
79
|
+
merklePath: [],
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const leftResult = buildTapTree(tree.left);
|
|
85
|
+
const rightResult = buildTapTree(tree.right);
|
|
86
|
+
const branchHash = calculateTapBranch(leftResult.merkleRoot, rightResult.merkleRoot);
|
|
87
|
+
const leftLeaves = leftResult.leaves.map(leaf => ({
|
|
88
|
+
...leaf,
|
|
89
|
+
merklePath: [...leaf.merklePath, rightResult.merkleRoot],
|
|
90
|
+
}));
|
|
91
|
+
const rightLeaves = rightResult.leaves.map(leaf => ({
|
|
92
|
+
...leaf,
|
|
93
|
+
merklePath: [...leaf.merklePath, leftResult.merkleRoot],
|
|
94
|
+
}));
|
|
95
|
+
return {
|
|
96
|
+
merkleRoot: branchHash,
|
|
97
|
+
leaves: [...leftLeaves, ...rightLeaves],
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
export function createControlBlock(internalPubKey, leafIndex, tree) {
|
|
101
|
+
const treeResult = buildTapTree(tree);
|
|
102
|
+
if (leafIndex < 0 || leafIndex >= treeResult.leaves.length) {
|
|
103
|
+
throw new Error(`Invalid leaf index: ${leafIndex}`);
|
|
104
|
+
}
|
|
105
|
+
const leaf = treeResult.leaves[leafIndex];
|
|
106
|
+
const pubKeyBytes = internalPubKey.toBuffer();
|
|
107
|
+
const parity = pubKeyBytes[0] === 0x03 ? 1 : 0;
|
|
108
|
+
const controlByte = (leaf.leafVersion & TAPROOT_LEAF_MASK) | parity;
|
|
109
|
+
const writer = new BufferWriter();
|
|
110
|
+
writer.writeUInt8(controlByte);
|
|
111
|
+
writer.write(pubKeyBytes.slice(1, 33));
|
|
112
|
+
for (const node of leaf.merklePath) {
|
|
113
|
+
writer.write(node);
|
|
114
|
+
}
|
|
115
|
+
return writer.toBuffer();
|
|
116
|
+
}
|
|
117
|
+
export function verifyTaprootCommitment(commitmentPubKey, internalPubKey, merkleRoot) {
|
|
118
|
+
const expectedCommitment = tweakPublicKey(internalPubKey, merkleRoot);
|
|
119
|
+
return commitmentPubKey.toString() === expectedCommitment.toString();
|
|
120
|
+
}
|
|
121
|
+
export function isPayToTaproot(script) {
|
|
122
|
+
const buf = script.toBuffer();
|
|
123
|
+
if (buf.length < TAPROOT_SIZE_WITHOUT_STATE) {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
if (buf[0] !== Opcode.OP_SCRIPTTYPE || buf[1] !== TAPROOT_SCRIPTTYPE) {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
if (buf[2] !== 33) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
if (buf.length === TAPROOT_SIZE_WITHOUT_STATE) {
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
return (buf.length === TAPROOT_SIZE_WITH_STATE &&
|
|
136
|
+
buf[TAPROOT_SIZE_WITHOUT_STATE] === 32);
|
|
137
|
+
}
|
|
138
|
+
export function extractTaprootCommitment(script) {
|
|
139
|
+
if (!isPayToTaproot(script)) {
|
|
140
|
+
throw new Error('Not a valid Pay-To-Taproot script');
|
|
141
|
+
}
|
|
142
|
+
const buf = script.toBuffer();
|
|
143
|
+
const commitmentBytes = buf.subarray(3, 3 + 33);
|
|
144
|
+
return PublicKey.fromBuffer(commitmentBytes);
|
|
145
|
+
}
|
|
146
|
+
export function extractTaprootState(script) {
|
|
147
|
+
const buf = script.toBuffer();
|
|
148
|
+
if (buf.length !== TAPROOT_SIZE_WITH_STATE) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
return buf.subarray(TAPROOT_SIZE_WITHOUT_STATE + 1, TAPROOT_SIZE_WITH_STATE);
|
|
152
|
+
}
|
|
153
|
+
export function buildPayToTaproot(commitment, state) {
|
|
154
|
+
if (state && state.length !== 32) {
|
|
155
|
+
throw new Error('Taproot state must be exactly 32 bytes');
|
|
156
|
+
}
|
|
157
|
+
const commitmentBytes = commitment.toBuffer();
|
|
158
|
+
if (commitmentBytes.length !== 33) {
|
|
159
|
+
throw new Error('Commitment must be 33-byte compressed public key');
|
|
160
|
+
}
|
|
161
|
+
if (state) {
|
|
162
|
+
return new Script()
|
|
163
|
+
.add(Opcode.OP_SCRIPTTYPE)
|
|
164
|
+
.add(TAPROOT_SCRIPTTYPE)
|
|
165
|
+
.add(commitmentBytes)
|
|
166
|
+
.add(state);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
return new Script()
|
|
170
|
+
.add(Opcode.OP_SCRIPTTYPE)
|
|
171
|
+
.add(TAPROOT_SCRIPTTYPE)
|
|
172
|
+
.add(commitmentBytes);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
export function buildKeyPathTaproot(internalPubKey, state) {
|
|
176
|
+
const merkleRoot = Buffer.alloc(32);
|
|
177
|
+
const commitment = tweakPublicKey(internalPubKey, merkleRoot);
|
|
178
|
+
return buildPayToTaproot(commitment, state);
|
|
179
|
+
}
|
|
180
|
+
export function buildScriptPathTaproot(internalPubKey, tree, state) {
|
|
181
|
+
const treeInfo = buildTapTree(tree);
|
|
182
|
+
const commitment = tweakPublicKey(internalPubKey, treeInfo.merkleRoot);
|
|
183
|
+
const script = buildPayToTaproot(commitment, state);
|
|
184
|
+
return {
|
|
185
|
+
script,
|
|
186
|
+
commitment,
|
|
187
|
+
merkleRoot: treeInfo.merkleRoot,
|
|
188
|
+
leaves: treeInfo.leaves,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
export function verifyTaprootScriptPath(internalPubKey, script, commitmentPubKey, leafVersion, merklePath, parity) {
|
|
192
|
+
try {
|
|
193
|
+
const pubkeyPrefix = parity === 0 ? 0x02 : 0x03;
|
|
194
|
+
const fullPubkey = Buffer.concat([
|
|
195
|
+
Buffer.from([pubkeyPrefix]),
|
|
196
|
+
internalPubKey,
|
|
197
|
+
]);
|
|
198
|
+
let leafHash = calculateTapLeaf(script, leafVersion);
|
|
199
|
+
for (const pathNode of merklePath) {
|
|
200
|
+
if (Buffer.compare(leafHash, pathNode) < 0) {
|
|
201
|
+
leafHash = calculateTapBranch(leafHash, pathNode);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
leafHash = calculateTapBranch(pathNode, leafHash);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
const internalKey = new PublicKey(fullPubkey);
|
|
208
|
+
const expectedCommitment = tweakPublicKey(internalKey, leafHash);
|
|
209
|
+
const actualCommitment = new PublicKey(commitmentPubKey);
|
|
210
|
+
if (expectedCommitment.toString() !== actualCommitment.toString()) {
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
catch (e) {
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
export function verifyTaprootSpend(scriptPubkey, stack, flags) {
|
|
220
|
+
const SCRIPT_DISABLE_TAPROOT_SIGHASH_LOTUS = 1 << 22;
|
|
221
|
+
const SCRIPT_TAPROOT_KEY_SPEND_PATH = 1 << 23;
|
|
222
|
+
const TAPROOT_ANNEX_TAG = 0x50;
|
|
223
|
+
if (flags & SCRIPT_DISABLE_TAPROOT_SIGHASH_LOTUS) {
|
|
224
|
+
return { success: false, error: 'SCRIPT_ERR_TAPROOT_PHASEOUT' };
|
|
225
|
+
}
|
|
226
|
+
if (!isPayToTaproot(scriptPubkey)) {
|
|
227
|
+
return { success: false, error: 'SCRIPT_ERR_SCRIPTTYPE_MALFORMED_SCRIPT' };
|
|
228
|
+
}
|
|
229
|
+
const scriptBuf = scriptPubkey.toBuffer();
|
|
230
|
+
const vchPubkey = scriptBuf.slice(TAPROOT_INTRO_SIZE, TAPROOT_SIZE_WITHOUT_STATE);
|
|
231
|
+
if (stack.length === 0) {
|
|
232
|
+
return { success: false, error: 'SCRIPT_ERR_INVALID_STACK_OPERATION' };
|
|
233
|
+
}
|
|
234
|
+
if (stack.length >= 2 &&
|
|
235
|
+
stack[stack.length - 1].length > 0 &&
|
|
236
|
+
stack[stack.length - 1][0] === TAPROOT_ANNEX_TAG) {
|
|
237
|
+
return { success: false, error: 'SCRIPT_ERR_TAPROOT_ANNEX_NOT_SUPPORTED' };
|
|
238
|
+
}
|
|
239
|
+
if (stack.length === 1) {
|
|
240
|
+
return {
|
|
241
|
+
success: true,
|
|
242
|
+
stack,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
const controlBlock = stack[stack.length - 1];
|
|
246
|
+
const scriptBytes = stack[stack.length - 2];
|
|
247
|
+
const execScript = new Script(scriptBytes);
|
|
248
|
+
const newStack = stack.slice(0, stack.length - 2);
|
|
249
|
+
const sizeRemainder = (controlBlock.length - TAPROOT_CONTROL_BASE_SIZE) %
|
|
250
|
+
TAPROOT_CONTROL_NODE_SIZE;
|
|
251
|
+
if (controlBlock.length < TAPROOT_CONTROL_BASE_SIZE ||
|
|
252
|
+
controlBlock.length > TAPROOT_CONTROL_MAX_SIZE ||
|
|
253
|
+
sizeRemainder !== 0) {
|
|
254
|
+
return { success: false, error: 'SCRIPT_ERR_TAPROOT_WRONG_CONTROL_SIZE' };
|
|
255
|
+
}
|
|
256
|
+
if ((controlBlock[0] & TAPROOT_LEAF_MASK) !== TAPROOT_LEAF_TAPSCRIPT) {
|
|
257
|
+
return {
|
|
258
|
+
success: false,
|
|
259
|
+
error: 'SCRIPT_ERR_TAPROOT_LEAF_VERSION_NOT_SUPPORTED',
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
const internalPubkey = controlBlock.slice(1, TAPROOT_CONTROL_BASE_SIZE);
|
|
263
|
+
const merklePath = [];
|
|
264
|
+
for (let i = TAPROOT_CONTROL_BASE_SIZE; i < controlBlock.length; i += TAPROOT_CONTROL_NODE_SIZE) {
|
|
265
|
+
merklePath.push(controlBlock.slice(i, i + TAPROOT_CONTROL_NODE_SIZE));
|
|
266
|
+
}
|
|
267
|
+
const leafVersion = controlBlock[0] & TAPROOT_LEAF_MASK;
|
|
268
|
+
const parity = controlBlock[0] & 0x01;
|
|
269
|
+
const isValid = verifyTaprootScriptPath(internalPubkey, execScript, vchPubkey, leafVersion, merklePath, parity);
|
|
270
|
+
if (!isValid) {
|
|
271
|
+
return {
|
|
272
|
+
success: false,
|
|
273
|
+
error: 'SCRIPT_ERR_TAPROOT_CONTROL_BLOCK_VERIFICATION_FAILED',
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
const scriptPubkeyBuf = scriptPubkey.toBuffer();
|
|
277
|
+
if (scriptPubkeyBuf.length === TAPROOT_SIZE_WITH_STATE) {
|
|
278
|
+
const state = extractTaprootState(scriptPubkey);
|
|
279
|
+
if (state) {
|
|
280
|
+
newStack.push(state);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return {
|
|
284
|
+
success: true,
|
|
285
|
+
stack: newStack,
|
|
286
|
+
scriptToExecute: execScript,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { Input, MultisigInput, MultisigScriptHashInput, PublicKeyInput, PublicKeyHashInput, TaprootInput, MuSigTaprootInput, } from './input.js';
|
|
2
|
+
export { Output } from './output.js';
|
|
3
|
+
export { UnspentOutput } from './unspentoutput.js';
|
|
4
|
+
export { sighash, sign, verify } from './sighash.js';
|
|
5
|
+
export { TransactionSignature } from './signature.js';
|
|
6
|
+
export { Transaction } from './transaction.js';
|
|
7
|
+
export type { InputData, InputObject } from './input.js';
|
|
8
|
+
export type { OutputData, OutputObject } from './output.js';
|
|
9
|
+
export type { UnspentOutputData, UnspentOutputObject } from './unspentoutput.js';
|
|
10
|
+
export type { TransactionSignatureData, TransactionSignatureObject, } from './signature.js';
|
|
11
|
+
export type { TransactionData, TransactionObject } from './transaction.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../lib/bitcore/transaction/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,GAClB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxD,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC3D,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAChF,YAAY,EACV,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { Input, MultisigInput, MultisigScriptHashInput, PublicKeyInput, PublicKeyHashInput, TaprootInput, MuSigTaprootInput, } from './input.js';
|
|
2
|
+
export { Output } from './output.js';
|
|
3
|
+
export { UnspentOutput } from './unspentoutput.js';
|
|
4
|
+
export { sighash, sign, verify } from './sighash.js';
|
|
5
|
+
export { TransactionSignature } from './signature.js';
|
|
6
|
+
export { Transaction } from './transaction.js';
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { BufferWriter } from '../encoding/bufferwriter.js';
|
|
2
|
+
import { BufferReader } from '../encoding/bufferreader.js';
|
|
3
|
+
import { Script } from '../script.js';
|
|
4
|
+
import { BN } from '../crypto/bn.js';
|
|
5
|
+
import { Output } from './output.js';
|
|
6
|
+
import { PrivateKey } from '../privatekey.js';
|
|
7
|
+
import { PublicKey } from '../publickey.js';
|
|
8
|
+
import { SignatureSigningMethod } from '../crypto/signature.js';
|
|
9
|
+
import { TransactionSignature } from './signature.js';
|
|
10
|
+
import { Transaction } from './transaction.js';
|
|
11
|
+
import type { MuSigKeyAggContext, MuSigAggregatedNonce } from '../crypto/musig2.js';
|
|
12
|
+
import { Point } from '../crypto/point.js';
|
|
13
|
+
export interface InputData {
|
|
14
|
+
prevTxId?: Buffer | string;
|
|
15
|
+
outputIndex?: number;
|
|
16
|
+
sequenceNumber?: number;
|
|
17
|
+
script?: Script | Buffer | string;
|
|
18
|
+
scriptBuffer?: Buffer;
|
|
19
|
+
output?: Output;
|
|
20
|
+
}
|
|
21
|
+
export interface InputObject {
|
|
22
|
+
prevTxId?: Buffer | string;
|
|
23
|
+
outputIndex?: number;
|
|
24
|
+
sequenceNumber?: number;
|
|
25
|
+
script?: Script | Buffer | string;
|
|
26
|
+
scriptBuffer?: Buffer;
|
|
27
|
+
scriptString?: string;
|
|
28
|
+
output?: Output;
|
|
29
|
+
}
|
|
30
|
+
export declare class Input {
|
|
31
|
+
static readonly MAXINT = 4294967295;
|
|
32
|
+
static readonly DEFAULT_SEQNUMBER = 4294967295;
|
|
33
|
+
static readonly DEFAULT_LOCKTIME_SEQNUMBER = 4294967294;
|
|
34
|
+
static readonly DEFAULT_RBF_SEQNUMBER = 4294967293;
|
|
35
|
+
static readonly SEQUENCE_LOCKTIME_TYPE_FLAG = 4194304;
|
|
36
|
+
static readonly SEQUENCE_LOCKTIME_DISABLE_FLAG = 2147483648;
|
|
37
|
+
static readonly SEQUENCE_LOCKTIME_MASK = 65535;
|
|
38
|
+
static readonly SEQUENCE_LOCKTIME_GRANULARITY = 512;
|
|
39
|
+
static readonly SEQUENCE_BLOCKDIFF_LIMIT = 65535;
|
|
40
|
+
static PublicKey: typeof PublicKeyInput;
|
|
41
|
+
static PublicKeyHash: typeof PublicKeyHashInput;
|
|
42
|
+
static Multisig: typeof MultisigInput;
|
|
43
|
+
static MultisigScriptHash: typeof MultisigScriptHashInput;
|
|
44
|
+
static Taproot: typeof TaprootInput;
|
|
45
|
+
static MuSigTaproot: typeof MuSigTaprootInput;
|
|
46
|
+
static P2PKH: typeof PublicKeyHashInput;
|
|
47
|
+
static P2SH: typeof MultisigScriptHashInput;
|
|
48
|
+
static P2TR: typeof TaprootInput;
|
|
49
|
+
prevTxId: Buffer;
|
|
50
|
+
outputIndex: number;
|
|
51
|
+
sequenceNumber: number;
|
|
52
|
+
private _scriptBuffer;
|
|
53
|
+
private _script?;
|
|
54
|
+
output?: Output;
|
|
55
|
+
constructor(params?: InputData);
|
|
56
|
+
static create(params?: InputData): Input;
|
|
57
|
+
static fromObject(obj: InputData): Input;
|
|
58
|
+
private _fromObject;
|
|
59
|
+
get script(): Script | null;
|
|
60
|
+
get scriptBuffer(): Buffer;
|
|
61
|
+
setScript(script: Script | Buffer | string | null): Input;
|
|
62
|
+
isNull(): boolean;
|
|
63
|
+
isFinal(): boolean;
|
|
64
|
+
hasSequence(): boolean;
|
|
65
|
+
hasRelativeLockTime(): boolean;
|
|
66
|
+
getRelativeLockTime(): bigint;
|
|
67
|
+
isRelativeLockTimeInBlocks(): boolean;
|
|
68
|
+
getRelativeLockTimeInBlocks(): number;
|
|
69
|
+
getRelativeLockTimeInSeconds(): number;
|
|
70
|
+
toObject(): InputObject;
|
|
71
|
+
toJSON: () => InputObject;
|
|
72
|
+
static fromBufferReader(br: BufferReader): Input;
|
|
73
|
+
toBuffer(): Buffer;
|
|
74
|
+
toBufferWriter(writer?: BufferWriter): BufferWriter;
|
|
75
|
+
getSize(): number;
|
|
76
|
+
isValid(): boolean;
|
|
77
|
+
clone(): Input;
|
|
78
|
+
getSignatures(transaction: Transaction, privateKey: PrivateKey, index: number, sigtype?: number, hashData?: unknown, signingMethod?: string): TransactionSignature[];
|
|
79
|
+
isFullySigned(): boolean;
|
|
80
|
+
addSignature(transaction: Transaction, signature: TransactionSignature, signingMethod?: SignatureSigningMethod): this;
|
|
81
|
+
clearSignatures(): this;
|
|
82
|
+
isValidSignature(transaction: Transaction, signature: TransactionSignature, signingMethod?: string): boolean;
|
|
83
|
+
lockForSeconds(seconds: number): Input;
|
|
84
|
+
lockUntilBlockHeight(heightDiff: number): Input;
|
|
85
|
+
getLockTime(): Date | number | null;
|
|
86
|
+
_estimateSize(): number;
|
|
87
|
+
toString(): string;
|
|
88
|
+
}
|
|
89
|
+
export declare class MultisigInput extends Input {
|
|
90
|
+
static readonly OPCODES_SIZE = 1;
|
|
91
|
+
static readonly SIGNATURE_SIZE = 73;
|
|
92
|
+
publicKeys: PublicKey[];
|
|
93
|
+
threshold: number;
|
|
94
|
+
signatures: (TransactionSignature | undefined)[];
|
|
95
|
+
publicKeyIndex: {
|
|
96
|
+
[key: string]: number;
|
|
97
|
+
};
|
|
98
|
+
constructor(input: Input, pubkeys?: PublicKey[], threshold?: number, signatures?: TransactionSignature[], opts?: {
|
|
99
|
+
noSorting?: boolean;
|
|
100
|
+
});
|
|
101
|
+
toObject(): object;
|
|
102
|
+
_deserializeSignatures(signatures: TransactionSignature[]): (TransactionSignature | undefined)[];
|
|
103
|
+
_serializeSignatures(): (object | undefined)[];
|
|
104
|
+
getSignatures(transaction: Transaction, privateKey: PrivateKey, index: number, sigtype?: number, hashData?: unknown, signingMethod?: string): TransactionSignature[];
|
|
105
|
+
addSignature(transaction: Transaction, signature: TransactionSignature, signingMethod?: string): this;
|
|
106
|
+
_updateScript(signingMethod?: string): this;
|
|
107
|
+
_createSignatures(signingMethod?: string): Buffer[];
|
|
108
|
+
clearSignatures(): this;
|
|
109
|
+
isFullySigned(): boolean;
|
|
110
|
+
countMissingSignatures(): number;
|
|
111
|
+
countSignatures(): number;
|
|
112
|
+
publicKeysWithoutSignature(): PublicKey[];
|
|
113
|
+
isValidSignature(transaction: Transaction, signature: TransactionSignature, signingMethod?: string): boolean;
|
|
114
|
+
normalizeSignatures(transaction: Transaction, input: Input, inputIndex: number, signatures: Buffer[], publicKeys: PublicKey[], signingMethod?: string): TransactionSignature[];
|
|
115
|
+
_estimateSize(): number;
|
|
116
|
+
}
|
|
117
|
+
export declare class MultisigScriptHashInput extends Input {
|
|
118
|
+
static readonly OPCODES_SIZE = 7;
|
|
119
|
+
static readonly SIGNATURE_SIZE = 74;
|
|
120
|
+
static readonly PUBKEY_SIZE = 34;
|
|
121
|
+
publicKeys: PublicKey[];
|
|
122
|
+
threshold: number;
|
|
123
|
+
signatures: (TransactionSignature | undefined)[];
|
|
124
|
+
redeemScript: Script;
|
|
125
|
+
publicKeyIndex: {
|
|
126
|
+
[key: string]: number;
|
|
127
|
+
};
|
|
128
|
+
checkBitsField: Uint8Array;
|
|
129
|
+
constructor(input: Input, pubkeys?: PublicKey[], threshold?: number, signatures?: TransactionSignature[], opts?: {
|
|
130
|
+
noSorting?: boolean;
|
|
131
|
+
});
|
|
132
|
+
toObject(): object;
|
|
133
|
+
_deserializeSignatures(signatures: TransactionSignature[]): (TransactionSignature | undefined)[];
|
|
134
|
+
_serializeSignatures(): (object | undefined)[];
|
|
135
|
+
getSignatures(transaction: Transaction, privateKey: PrivateKey, index: number, sigtype?: number, hashData?: unknown, signingMethod?: string): TransactionSignature[];
|
|
136
|
+
addSignature(transaction: Transaction, signature: TransactionSignature, signingMethod?: string): this;
|
|
137
|
+
_updateScript(signingMethod?: string, checkBitsField?: Uint8Array): this;
|
|
138
|
+
_createSignatures(signingMethod?: string): Buffer[];
|
|
139
|
+
clearSignatures(): this;
|
|
140
|
+
isFullySigned(): boolean;
|
|
141
|
+
countMissingSignatures(): number;
|
|
142
|
+
countSignatures(): number;
|
|
143
|
+
publicKeysWithoutSignature(): PublicKey[];
|
|
144
|
+
isValidSignature(transaction: Transaction, signature: TransactionSignature, signingMethod?: string): boolean;
|
|
145
|
+
normalizeSignatures(transaction: Transaction, input: Input, inputIndex: number, signatures: Buffer[], publicKeys: PublicKey[], signingMethod?: string): TransactionSignature[];
|
|
146
|
+
_estimateSize(): number;
|
|
147
|
+
}
|
|
148
|
+
export declare class PublicKeyInput extends Input {
|
|
149
|
+
static readonly SCRIPT_MAX_SIZE = 73;
|
|
150
|
+
getSignatures(transaction: Transaction, privateKey: PrivateKey, index: number, sigtype?: number, hashData?: unknown, signingMethod?: string): TransactionSignature[];
|
|
151
|
+
addSignature(transaction: Transaction, signature: TransactionSignature, signingMethod?: SignatureSigningMethod): this;
|
|
152
|
+
clearSignatures(): this;
|
|
153
|
+
isFullySigned(): boolean;
|
|
154
|
+
_estimateSize(): number;
|
|
155
|
+
}
|
|
156
|
+
export declare class PublicKeyHashInput extends Input {
|
|
157
|
+
static readonly SCRIPT_MAX_SIZE: number;
|
|
158
|
+
getSignatures(transaction: Transaction, privateKey: PrivateKey, index: number, sigtype?: number, hashData?: unknown, signingMethod?: string): TransactionSignature[];
|
|
159
|
+
addSignature(transaction: Transaction, signature: TransactionSignature, signingMethod?: SignatureSigningMethod): this;
|
|
160
|
+
clearSignatures(): this;
|
|
161
|
+
isFullySigned(): boolean;
|
|
162
|
+
_estimateSize(): number;
|
|
163
|
+
}
|
|
164
|
+
export interface TaprootInputData extends InputData {
|
|
165
|
+
internalPubKey?: PublicKey;
|
|
166
|
+
merkleRoot?: Buffer;
|
|
167
|
+
controlBlock?: Buffer;
|
|
168
|
+
tapScript?: Script;
|
|
169
|
+
}
|
|
170
|
+
export declare class TaprootInput extends Input {
|
|
171
|
+
internalPubKey?: PublicKey;
|
|
172
|
+
merkleRoot?: Buffer;
|
|
173
|
+
controlBlock?: Buffer;
|
|
174
|
+
tapScript?: Script;
|
|
175
|
+
constructor(params?: TaprootInputData);
|
|
176
|
+
getSignatures(transaction: Transaction, privateKey: PrivateKey, index: number, sigtype?: number, hashData?: unknown, signingMethod?: string): TransactionSignature[];
|
|
177
|
+
addSignature(transaction: Transaction, signature: TransactionSignature, signingMethod?: string): this;
|
|
178
|
+
isValidSignature(transaction: Transaction, signature: TransactionSignature, signingMethod?: string): boolean;
|
|
179
|
+
clearSignatures(): this;
|
|
180
|
+
isFullySigned(): boolean;
|
|
181
|
+
_estimateSize(): number;
|
|
182
|
+
}
|
|
183
|
+
export declare class MuSigTaprootInput extends TaprootInput {
|
|
184
|
+
keyAggContext?: MuSigKeyAggContext;
|
|
185
|
+
publicNonces?: Map<number, [Point, Point]>;
|
|
186
|
+
aggregatedNonce?: MuSigAggregatedNonce;
|
|
187
|
+
partialSignatures?: Map<number, BN>;
|
|
188
|
+
mySignerIndex?: number;
|
|
189
|
+
constructor(params?: TaprootInputData & {
|
|
190
|
+
keyAggContext?: MuSigKeyAggContext;
|
|
191
|
+
mySignerIndex?: number;
|
|
192
|
+
});
|
|
193
|
+
initMuSigSession(keyAggContext: MuSigKeyAggContext, mySignerIndex: number): this;
|
|
194
|
+
addPublicNonce(signerIndex: number, publicNonce: [Point, Point]): this;
|
|
195
|
+
hasAllNonces(): boolean;
|
|
196
|
+
aggregateNonces(): this;
|
|
197
|
+
addPartialSignature(signerIndex: number, partialSig: BN): this;
|
|
198
|
+
hasAllPartialSignatures(): boolean;
|
|
199
|
+
finalizeMuSigSignature(transaction: Transaction, message: Buffer): this;
|
|
200
|
+
isFullySigned(): boolean;
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../../lib/bitcore/transaction/input.ts"],"names":[],"mappings":"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"}
|