@scure/btc-signer 1.2.2 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -3
- package/lib/_type_test.d.ts +2 -0
- package/lib/_type_test.d.ts.map +1 -0
- package/lib/_type_test.js +59 -0
- package/lib/_type_test.js.map +1 -0
- package/lib/esm/_type_test.js +57 -0
- package/lib/esm/_type_test.js.map +1 -0
- package/lib/esm/index.js +13 -3007
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/payment.js +681 -0
- package/lib/esm/payment.js.map +1 -0
- package/lib/esm/psbt.js +441 -0
- package/lib/esm/psbt.js.map +1 -0
- package/lib/esm/script.js +347 -0
- package/lib/esm/script.js.map +1 -0
- package/lib/esm/transaction.js +1013 -0
- package/lib/esm/transaction.js.map +1 -0
- package/lib/esm/utils.js +115 -0
- package/lib/esm/utils.js.map +1 -0
- package/lib/esm/utxo.js +491 -0
- package/lib/esm/utxo.js.map +1 -0
- package/lib/index.d.ts +18 -1439
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +53 -3042
- package/lib/index.js.map +1 -0
- package/lib/payment.d.ts +167 -0
- package/lib/payment.d.ts.map +1 -0
- package/lib/payment.js +704 -0
- package/lib/payment.js.map +1 -0
- package/lib/psbt.d.ts +834 -0
- package/lib/psbt.d.ts.map +1 -0
- package/lib/psbt.js +446 -0
- package/lib/psbt.js.map +1 -0
- package/lib/script.d.ts +154 -0
- package/lib/script.d.ts.map +1 -0
- package/lib/script.js +353 -0
- package/lib/script.js.map +1 -0
- package/lib/transaction.d.ts +223 -0
- package/lib/transaction.d.ts.map +1 -0
- package/lib/transaction.js +1022 -0
- package/lib/transaction.js.map +1 -0
- package/lib/utils.d.ts +30 -0
- package/lib/utils.d.ts.map +1 -0
- package/lib/utils.js +128 -0
- package/lib/utils.js.map +1 -0
- package/lib/utxo.d.ts +251 -0
- package/lib/utxo.d.ts.map +1 -0
- package/lib/utxo.js +501 -0
- package/lib/utxo.js.map +1 -0
- package/package.json +40 -10
- package/src/_type_test.ts +69 -0
- package/src/index.ts +28 -0
- package/src/package.json +3 -0
- package/src/payment.ts +749 -0
- package/src/psbt.ts +512 -0
- package/src/script.ts +236 -0
- package/src/transaction.ts +1065 -0
- package/src/utils.ts +118 -0
- package/src/utxo.ts +517 -0
- package/index.ts +0 -3067
package/lib/script.js
ADDED
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RawTx = exports.RawOutput = exports.RawInput = exports.BTCArray = exports.RawWitness = exports.VarBytes = exports.CompactSizeLen = exports.CompactSize = exports.Script = exports.OpToNum = exports.ScriptNum = exports.OP = exports.MAX_SCRIPT_BYTE_LENGTH = void 0;
|
|
4
|
+
const P = require("micro-packed");
|
|
5
|
+
exports.MAX_SCRIPT_BYTE_LENGTH = 520;
|
|
6
|
+
// prettier-ignore
|
|
7
|
+
var OP;
|
|
8
|
+
(function (OP) {
|
|
9
|
+
OP[OP["OP_0"] = 0] = "OP_0";
|
|
10
|
+
OP[OP["PUSHDATA1"] = 76] = "PUSHDATA1";
|
|
11
|
+
OP[OP["PUSHDATA2"] = 77] = "PUSHDATA2";
|
|
12
|
+
OP[OP["PUSHDATA4"] = 78] = "PUSHDATA4";
|
|
13
|
+
OP[OP["1NEGATE"] = 79] = "1NEGATE";
|
|
14
|
+
OP[OP["RESERVED"] = 80] = "RESERVED";
|
|
15
|
+
OP[OP["OP_1"] = 81] = "OP_1";
|
|
16
|
+
OP[OP["OP_2"] = 82] = "OP_2";
|
|
17
|
+
OP[OP["OP_3"] = 83] = "OP_3";
|
|
18
|
+
OP[OP["OP_4"] = 84] = "OP_4";
|
|
19
|
+
OP[OP["OP_5"] = 85] = "OP_5";
|
|
20
|
+
OP[OP["OP_6"] = 86] = "OP_6";
|
|
21
|
+
OP[OP["OP_7"] = 87] = "OP_7";
|
|
22
|
+
OP[OP["OP_8"] = 88] = "OP_8";
|
|
23
|
+
OP[OP["OP_9"] = 89] = "OP_9";
|
|
24
|
+
OP[OP["OP_10"] = 90] = "OP_10";
|
|
25
|
+
OP[OP["OP_11"] = 91] = "OP_11";
|
|
26
|
+
OP[OP["OP_12"] = 92] = "OP_12";
|
|
27
|
+
OP[OP["OP_13"] = 93] = "OP_13";
|
|
28
|
+
OP[OP["OP_14"] = 94] = "OP_14";
|
|
29
|
+
OP[OP["OP_15"] = 95] = "OP_15";
|
|
30
|
+
OP[OP["OP_16"] = 96] = "OP_16";
|
|
31
|
+
// Control
|
|
32
|
+
OP[OP["NOP"] = 97] = "NOP";
|
|
33
|
+
OP[OP["VER"] = 98] = "VER";
|
|
34
|
+
OP[OP["IF"] = 99] = "IF";
|
|
35
|
+
OP[OP["NOTIF"] = 100] = "NOTIF";
|
|
36
|
+
OP[OP["VERIF"] = 101] = "VERIF";
|
|
37
|
+
OP[OP["VERNOTIF"] = 102] = "VERNOTIF";
|
|
38
|
+
OP[OP["ELSE"] = 103] = "ELSE";
|
|
39
|
+
OP[OP["ENDIF"] = 104] = "ENDIF";
|
|
40
|
+
OP[OP["VERIFY"] = 105] = "VERIFY";
|
|
41
|
+
OP[OP["RETURN"] = 106] = "RETURN";
|
|
42
|
+
// Stack
|
|
43
|
+
OP[OP["TOALTSTACK"] = 107] = "TOALTSTACK";
|
|
44
|
+
OP[OP["FROMALTSTACK"] = 108] = "FROMALTSTACK";
|
|
45
|
+
OP[OP["2DROP"] = 109] = "2DROP";
|
|
46
|
+
OP[OP["2DUP"] = 110] = "2DUP";
|
|
47
|
+
OP[OP["3DUP"] = 111] = "3DUP";
|
|
48
|
+
OP[OP["2OVER"] = 112] = "2OVER";
|
|
49
|
+
OP[OP["2ROT"] = 113] = "2ROT";
|
|
50
|
+
OP[OP["2SWAP"] = 114] = "2SWAP";
|
|
51
|
+
OP[OP["IFDUP"] = 115] = "IFDUP";
|
|
52
|
+
OP[OP["DEPTH"] = 116] = "DEPTH";
|
|
53
|
+
OP[OP["DROP"] = 117] = "DROP";
|
|
54
|
+
OP[OP["DUP"] = 118] = "DUP";
|
|
55
|
+
OP[OP["NIP"] = 119] = "NIP";
|
|
56
|
+
OP[OP["OVER"] = 120] = "OVER";
|
|
57
|
+
OP[OP["PICK"] = 121] = "PICK";
|
|
58
|
+
OP[OP["ROLL"] = 122] = "ROLL";
|
|
59
|
+
OP[OP["ROT"] = 123] = "ROT";
|
|
60
|
+
OP[OP["SWAP"] = 124] = "SWAP";
|
|
61
|
+
OP[OP["TUCK"] = 125] = "TUCK";
|
|
62
|
+
// Splice
|
|
63
|
+
OP[OP["CAT"] = 126] = "CAT";
|
|
64
|
+
OP[OP["SUBSTR"] = 127] = "SUBSTR";
|
|
65
|
+
OP[OP["LEFT"] = 128] = "LEFT";
|
|
66
|
+
OP[OP["RIGHT"] = 129] = "RIGHT";
|
|
67
|
+
OP[OP["SIZE"] = 130] = "SIZE";
|
|
68
|
+
// Boolean logic
|
|
69
|
+
OP[OP["INVERT"] = 131] = "INVERT";
|
|
70
|
+
OP[OP["AND"] = 132] = "AND";
|
|
71
|
+
OP[OP["OR"] = 133] = "OR";
|
|
72
|
+
OP[OP["XOR"] = 134] = "XOR";
|
|
73
|
+
OP[OP["EQUAL"] = 135] = "EQUAL";
|
|
74
|
+
OP[OP["EQUALVERIFY"] = 136] = "EQUALVERIFY";
|
|
75
|
+
OP[OP["RESERVED1"] = 137] = "RESERVED1";
|
|
76
|
+
OP[OP["RESERVED2"] = 138] = "RESERVED2";
|
|
77
|
+
// Numbers
|
|
78
|
+
OP[OP["1ADD"] = 139] = "1ADD";
|
|
79
|
+
OP[OP["1SUB"] = 140] = "1SUB";
|
|
80
|
+
OP[OP["2MUL"] = 141] = "2MUL";
|
|
81
|
+
OP[OP["2DIV"] = 142] = "2DIV";
|
|
82
|
+
OP[OP["NEGATE"] = 143] = "NEGATE";
|
|
83
|
+
OP[OP["ABS"] = 144] = "ABS";
|
|
84
|
+
OP[OP["NOT"] = 145] = "NOT";
|
|
85
|
+
OP[OP["0NOTEQUAL"] = 146] = "0NOTEQUAL";
|
|
86
|
+
OP[OP["ADD"] = 147] = "ADD";
|
|
87
|
+
OP[OP["SUB"] = 148] = "SUB";
|
|
88
|
+
OP[OP["MUL"] = 149] = "MUL";
|
|
89
|
+
OP[OP["DIV"] = 150] = "DIV";
|
|
90
|
+
OP[OP["MOD"] = 151] = "MOD";
|
|
91
|
+
OP[OP["LSHIFT"] = 152] = "LSHIFT";
|
|
92
|
+
OP[OP["RSHIFT"] = 153] = "RSHIFT";
|
|
93
|
+
OP[OP["BOOLAND"] = 154] = "BOOLAND";
|
|
94
|
+
OP[OP["BOOLOR"] = 155] = "BOOLOR";
|
|
95
|
+
OP[OP["NUMEQUAL"] = 156] = "NUMEQUAL";
|
|
96
|
+
OP[OP["NUMEQUALVERIFY"] = 157] = "NUMEQUALVERIFY";
|
|
97
|
+
OP[OP["NUMNOTEQUAL"] = 158] = "NUMNOTEQUAL";
|
|
98
|
+
OP[OP["LESSTHAN"] = 159] = "LESSTHAN";
|
|
99
|
+
OP[OP["GREATERTHAN"] = 160] = "GREATERTHAN";
|
|
100
|
+
OP[OP["LESSTHANOREQUAL"] = 161] = "LESSTHANOREQUAL";
|
|
101
|
+
OP[OP["GREATERTHANOREQUAL"] = 162] = "GREATERTHANOREQUAL";
|
|
102
|
+
OP[OP["MIN"] = 163] = "MIN";
|
|
103
|
+
OP[OP["MAX"] = 164] = "MAX";
|
|
104
|
+
OP[OP["WITHIN"] = 165] = "WITHIN";
|
|
105
|
+
// Crypto
|
|
106
|
+
OP[OP["RIPEMD160"] = 166] = "RIPEMD160";
|
|
107
|
+
OP[OP["SHA1"] = 167] = "SHA1";
|
|
108
|
+
OP[OP["SHA256"] = 168] = "SHA256";
|
|
109
|
+
OP[OP["HASH160"] = 169] = "HASH160";
|
|
110
|
+
OP[OP["HASH256"] = 170] = "HASH256";
|
|
111
|
+
OP[OP["CODESEPARATOR"] = 171] = "CODESEPARATOR";
|
|
112
|
+
OP[OP["CHECKSIG"] = 172] = "CHECKSIG";
|
|
113
|
+
OP[OP["CHECKSIGVERIFY"] = 173] = "CHECKSIGVERIFY";
|
|
114
|
+
OP[OP["CHECKMULTISIG"] = 174] = "CHECKMULTISIG";
|
|
115
|
+
OP[OP["CHECKMULTISIGVERIFY"] = 175] = "CHECKMULTISIGVERIFY";
|
|
116
|
+
// Expansion
|
|
117
|
+
OP[OP["NOP1"] = 176] = "NOP1";
|
|
118
|
+
OP[OP["CHECKLOCKTIMEVERIFY"] = 177] = "CHECKLOCKTIMEVERIFY";
|
|
119
|
+
OP[OP["CHECKSEQUENCEVERIFY"] = 178] = "CHECKSEQUENCEVERIFY";
|
|
120
|
+
OP[OP["NOP4"] = 179] = "NOP4";
|
|
121
|
+
OP[OP["NOP5"] = 180] = "NOP5";
|
|
122
|
+
OP[OP["NOP6"] = 181] = "NOP6";
|
|
123
|
+
OP[OP["NOP7"] = 182] = "NOP7";
|
|
124
|
+
OP[OP["NOP8"] = 183] = "NOP8";
|
|
125
|
+
OP[OP["NOP9"] = 184] = "NOP9";
|
|
126
|
+
OP[OP["NOP10"] = 185] = "NOP10";
|
|
127
|
+
// BIP 342
|
|
128
|
+
OP[OP["CHECKSIGADD"] = 186] = "CHECKSIGADD";
|
|
129
|
+
// Invalid
|
|
130
|
+
OP[OP["INVALID"] = 255] = "INVALID";
|
|
131
|
+
})(OP || (exports.OP = OP = {}));
|
|
132
|
+
// We can encode almost any number as ScriptNum, however, parsing will be a problem
|
|
133
|
+
// since we can't know if buffer is a number or something else.
|
|
134
|
+
function ScriptNum(bytesLimit = 6, forceMinimal = false) {
|
|
135
|
+
return P.wrap({
|
|
136
|
+
encodeStream: (w, value) => {
|
|
137
|
+
if (value === 0n)
|
|
138
|
+
return;
|
|
139
|
+
const neg = value < 0;
|
|
140
|
+
const val = BigInt(value);
|
|
141
|
+
const nums = [];
|
|
142
|
+
for (let abs = neg ? -val : val; abs; abs >>= 8n)
|
|
143
|
+
nums.push(Number(abs & 0xffn));
|
|
144
|
+
if (nums[nums.length - 1] >= 0x80)
|
|
145
|
+
nums.push(neg ? 0x80 : 0);
|
|
146
|
+
else if (neg)
|
|
147
|
+
nums[nums.length - 1] |= 0x80;
|
|
148
|
+
w.bytes(new Uint8Array(nums));
|
|
149
|
+
},
|
|
150
|
+
decodeStream: (r) => {
|
|
151
|
+
const len = r.leftBytes;
|
|
152
|
+
if (len > bytesLimit)
|
|
153
|
+
throw new Error(`ScriptNum: number (${len}) bigger than limit=${bytesLimit}`);
|
|
154
|
+
if (len === 0)
|
|
155
|
+
return 0n;
|
|
156
|
+
if (forceMinimal) {
|
|
157
|
+
// MSB is zero (without sign bit) -> not minimally encoded
|
|
158
|
+
if ((r.data[len - 1] & 0x7f) === 0) {
|
|
159
|
+
// exception
|
|
160
|
+
if (len <= 1 || (r.data[len - 2] & 0x80) === 0)
|
|
161
|
+
throw new Error('Non-minimally encoded ScriptNum');
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
let last = 0;
|
|
165
|
+
let res = 0n;
|
|
166
|
+
for (let i = 0; i < len; ++i) {
|
|
167
|
+
last = r.byte();
|
|
168
|
+
res |= BigInt(last) << (8n * BigInt(i));
|
|
169
|
+
}
|
|
170
|
+
if (last >= 0x80) {
|
|
171
|
+
res &= (2n ** BigInt(len * 8) - 1n) >> 1n;
|
|
172
|
+
res = -res;
|
|
173
|
+
}
|
|
174
|
+
return res;
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
exports.ScriptNum = ScriptNum;
|
|
179
|
+
function OpToNum(op, bytesLimit = 4, forceMinimal = true) {
|
|
180
|
+
if (typeof op === 'number')
|
|
181
|
+
return op;
|
|
182
|
+
if (P.isBytes(op)) {
|
|
183
|
+
try {
|
|
184
|
+
const val = ScriptNum(bytesLimit, forceMinimal).decode(op);
|
|
185
|
+
if (val > Number.MAX_SAFE_INTEGER)
|
|
186
|
+
return;
|
|
187
|
+
return Number(val);
|
|
188
|
+
}
|
|
189
|
+
catch (e) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
exports.OpToNum = OpToNum;
|
|
196
|
+
// Converts script bytes to parsed script
|
|
197
|
+
// 5221030000000000000000000000000000000000000000000000000000000000000001210300000000000000000000000000000000000000000000000000000000000000022103000000000000000000000000000000000000000000000000000000000000000353ae
|
|
198
|
+
// =>
|
|
199
|
+
// OP_2
|
|
200
|
+
// 030000000000000000000000000000000000000000000000000000000000000001
|
|
201
|
+
// 030000000000000000000000000000000000000000000000000000000000000002
|
|
202
|
+
// 030000000000000000000000000000000000000000000000000000000000000003
|
|
203
|
+
// OP_3
|
|
204
|
+
// CHECKMULTISIG
|
|
205
|
+
exports.Script = P.wrap({
|
|
206
|
+
encodeStream: (w, value) => {
|
|
207
|
+
for (let o of value) {
|
|
208
|
+
if (typeof o === 'string') {
|
|
209
|
+
if (OP[o] === undefined)
|
|
210
|
+
throw new Error(`Unknown opcode=${o}`);
|
|
211
|
+
w.byte(OP[o]);
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
else if (typeof o === 'number') {
|
|
215
|
+
if (o === 0x00) {
|
|
216
|
+
w.byte(0x00);
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
else if (1 <= o && o <= 16) {
|
|
220
|
+
w.byte(OP.OP_1 - 1 + o);
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// Encode big numbers
|
|
225
|
+
if (typeof o === 'number')
|
|
226
|
+
o = ScriptNum().encode(BigInt(o));
|
|
227
|
+
if (!P.isBytes(o))
|
|
228
|
+
throw new Error(`Wrong Script OP=${o} (${typeof o})`);
|
|
229
|
+
// Bytes
|
|
230
|
+
const len = o.length;
|
|
231
|
+
if (len < OP.PUSHDATA1)
|
|
232
|
+
w.byte(len);
|
|
233
|
+
else if (len <= 0xff) {
|
|
234
|
+
w.byte(OP.PUSHDATA1);
|
|
235
|
+
w.byte(len);
|
|
236
|
+
}
|
|
237
|
+
else if (len <= 0xffff) {
|
|
238
|
+
w.byte(OP.PUSHDATA2);
|
|
239
|
+
w.bytes(P.U16LE.encode(len));
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
w.byte(OP.PUSHDATA4);
|
|
243
|
+
w.bytes(P.U32LE.encode(len));
|
|
244
|
+
}
|
|
245
|
+
w.bytes(o);
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
decodeStream: (r) => {
|
|
249
|
+
const out = [];
|
|
250
|
+
while (!r.isEnd()) {
|
|
251
|
+
const cur = r.byte();
|
|
252
|
+
// if 0 < cur < 78
|
|
253
|
+
if (OP.OP_0 < cur && cur <= OP.PUSHDATA4) {
|
|
254
|
+
let len;
|
|
255
|
+
if (cur < OP.PUSHDATA1)
|
|
256
|
+
len = cur;
|
|
257
|
+
else if (cur === OP.PUSHDATA1)
|
|
258
|
+
len = P.U8.decodeStream(r);
|
|
259
|
+
else if (cur === OP.PUSHDATA2)
|
|
260
|
+
len = P.U16LE.decodeStream(r);
|
|
261
|
+
else if (cur === OP.PUSHDATA4)
|
|
262
|
+
len = P.U32LE.decodeStream(r);
|
|
263
|
+
else
|
|
264
|
+
throw new Error('Should be not possible');
|
|
265
|
+
out.push(r.bytes(len));
|
|
266
|
+
}
|
|
267
|
+
else if (cur === 0x00) {
|
|
268
|
+
out.push(0);
|
|
269
|
+
}
|
|
270
|
+
else if (OP.OP_1 <= cur && cur <= OP.OP_16) {
|
|
271
|
+
out.push(cur - (OP.OP_1 - 1));
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
const op = OP[cur];
|
|
275
|
+
if (op === undefined)
|
|
276
|
+
throw new Error(`Unknown opcode=${cur.toString(16)}`);
|
|
277
|
+
out.push(op);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return out;
|
|
281
|
+
},
|
|
282
|
+
});
|
|
283
|
+
// BTC specific variable length integer encoding
|
|
284
|
+
// https://en.bitcoin.it/wiki/Protocol_documentation#Variable_length_integer
|
|
285
|
+
const CSLimits = {
|
|
286
|
+
0xfd: [0xfd, 2, 253n, 65535n],
|
|
287
|
+
0xfe: [0xfe, 4, 65536n, 4294967295n],
|
|
288
|
+
0xff: [0xff, 8, 4294967296n, 18446744073709551615n],
|
|
289
|
+
};
|
|
290
|
+
exports.CompactSize = P.wrap({
|
|
291
|
+
encodeStream: (w, value) => {
|
|
292
|
+
if (typeof value === 'number')
|
|
293
|
+
value = BigInt(value);
|
|
294
|
+
if (0n <= value && value <= 252n)
|
|
295
|
+
return w.byte(Number(value));
|
|
296
|
+
for (const [flag, bytes, start, stop] of Object.values(CSLimits)) {
|
|
297
|
+
if (start > value || value > stop)
|
|
298
|
+
continue;
|
|
299
|
+
w.byte(flag);
|
|
300
|
+
for (let i = 0; i < bytes; i++)
|
|
301
|
+
w.byte(Number((value >> (8n * BigInt(i))) & 0xffn));
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
throw w.err(`VarInt too big: ${value}`);
|
|
305
|
+
},
|
|
306
|
+
decodeStream: (r) => {
|
|
307
|
+
const b0 = r.byte();
|
|
308
|
+
if (b0 <= 0xfc)
|
|
309
|
+
return BigInt(b0);
|
|
310
|
+
const [_, bytes, start] = CSLimits[b0];
|
|
311
|
+
let num = 0n;
|
|
312
|
+
for (let i = 0; i < bytes; i++)
|
|
313
|
+
num |= BigInt(r.byte()) << (8n * BigInt(i));
|
|
314
|
+
if (num < start)
|
|
315
|
+
throw r.err(`Wrong CompactSize(${8 * bytes})`);
|
|
316
|
+
return num;
|
|
317
|
+
},
|
|
318
|
+
});
|
|
319
|
+
// Same thing, but in number instead of bigint. Checks for safe integer inside
|
|
320
|
+
exports.CompactSizeLen = P.apply(exports.CompactSize, P.coders.number);
|
|
321
|
+
// ui8a of size <CompactSize>
|
|
322
|
+
exports.VarBytes = P.bytes(exports.CompactSize);
|
|
323
|
+
// SegWit v0 stack of witness buffers
|
|
324
|
+
exports.RawWitness = P.array(exports.CompactSizeLen, exports.VarBytes);
|
|
325
|
+
// Array of size <CompactSize>
|
|
326
|
+
const BTCArray = (t) => P.array(exports.CompactSize, t);
|
|
327
|
+
exports.BTCArray = BTCArray;
|
|
328
|
+
exports.RawInput = P.struct({
|
|
329
|
+
txid: P.bytes(32, true), // hash(prev_tx),
|
|
330
|
+
index: P.U32LE, // output number of previous tx
|
|
331
|
+
finalScriptSig: exports.VarBytes, // btc merges input and output script, executes it. If ok = tx passes
|
|
332
|
+
sequence: P.U32LE, // ?
|
|
333
|
+
});
|
|
334
|
+
exports.RawOutput = P.struct({ amount: P.U64LE, script: exports.VarBytes });
|
|
335
|
+
// https://en.bitcoin.it/wiki/Protocol_documentation#tx
|
|
336
|
+
const _RawTx = P.struct({
|
|
337
|
+
version: P.I32LE,
|
|
338
|
+
segwitFlag: P.flag(new Uint8Array([0x00, 0x01])),
|
|
339
|
+
inputs: (0, exports.BTCArray)(exports.RawInput),
|
|
340
|
+
outputs: (0, exports.BTCArray)(exports.RawOutput),
|
|
341
|
+
witnesses: P.flagged('segwitFlag', P.array('inputs/length', exports.RawWitness)),
|
|
342
|
+
// < 500000000 Block number at which this transaction is unlocked
|
|
343
|
+
// >= 500000000 UNIX timestamp at which this transaction is unlocked
|
|
344
|
+
// Handled as part of PSBTv2
|
|
345
|
+
lockTime: P.U32LE,
|
|
346
|
+
});
|
|
347
|
+
function validateRawTx(tx) {
|
|
348
|
+
if (tx.segwitFlag && tx.witnesses && !tx.witnesses.length)
|
|
349
|
+
throw new Error('Segwit flag with empty witnesses array');
|
|
350
|
+
return tx;
|
|
351
|
+
}
|
|
352
|
+
exports.RawTx = P.validate(_RawTx, validateRawTx);
|
|
353
|
+
//# sourceMappingURL=script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script.js","sourceRoot":"","sources":["../src/script.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import * as P from 'micro-packed';
|
|
2
|
+
import { CustomScript } from './payment.js';
|
|
3
|
+
import * as psbt from './psbt.js';
|
|
4
|
+
import { Bytes } from './utils.js';
|
|
5
|
+
interface HDKey {
|
|
6
|
+
publicKey: Bytes;
|
|
7
|
+
privateKey: Bytes;
|
|
8
|
+
fingerprint: number;
|
|
9
|
+
derive(path: string): HDKey;
|
|
10
|
+
deriveChild(index: number): HDKey;
|
|
11
|
+
sign(hash: Bytes): Bytes;
|
|
12
|
+
}
|
|
13
|
+
export type Signer = Bytes | HDKey;
|
|
14
|
+
export declare const PRECISION = 8;
|
|
15
|
+
export declare const DEFAULT_VERSION = 2;
|
|
16
|
+
export declare const DEFAULT_LOCKTIME = 0;
|
|
17
|
+
export declare const DEFAULT_SEQUENCE = 4294967295;
|
|
18
|
+
export declare const Decimal: {
|
|
19
|
+
encode: (from: bigint) => string;
|
|
20
|
+
decode: (to: string) => bigint;
|
|
21
|
+
};
|
|
22
|
+
export declare const def: <T>(value: T | undefined, def: T) => T;
|
|
23
|
+
export declare function cloneDeep<T>(obj: T): T;
|
|
24
|
+
export type TxOpts = {
|
|
25
|
+
version?: number;
|
|
26
|
+
lockTime?: number;
|
|
27
|
+
PSBTVersion?: number;
|
|
28
|
+
/** @deprecated Use `allowUnknownOutputs` */
|
|
29
|
+
allowUnknowOutput?: boolean;
|
|
30
|
+
allowUnknownOutputs?: boolean;
|
|
31
|
+
/** @deprecated Use `allowUnknownInputs` */
|
|
32
|
+
allowUnknowInput?: boolean;
|
|
33
|
+
allowUnknownInputs?: boolean;
|
|
34
|
+
disableScriptCheck?: boolean;
|
|
35
|
+
bip174jsCompat?: boolean;
|
|
36
|
+
allowLegacyWitnessUtxo?: boolean;
|
|
37
|
+
lowR?: boolean;
|
|
38
|
+
customScripts?: CustomScript[];
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Internal, exported only for backwards-compat. Use `SigHash` instead.
|
|
42
|
+
* @deprecated
|
|
43
|
+
*/
|
|
44
|
+
export declare enum SignatureHash {
|
|
45
|
+
DEFAULT = 0,
|
|
46
|
+
ALL = 1,
|
|
47
|
+
NONE = 2,
|
|
48
|
+
SINGLE = 3,
|
|
49
|
+
ANYONECANPAY = 128
|
|
50
|
+
}
|
|
51
|
+
export declare enum SigHash {
|
|
52
|
+
DEFAULT = 0,
|
|
53
|
+
ALL = 1,
|
|
54
|
+
NONE = 2,
|
|
55
|
+
SINGLE = 3,
|
|
56
|
+
DEFAULT_ANYONECANPAY = 128,
|
|
57
|
+
ALL_ANYONECANPAY = 129,
|
|
58
|
+
NONE_ANYONECANPAY = 130,
|
|
59
|
+
SINGLE_ANYONECANPAY = 131
|
|
60
|
+
}
|
|
61
|
+
export type TransactionInputRequired = {
|
|
62
|
+
txid: Bytes;
|
|
63
|
+
index: number;
|
|
64
|
+
sequence: number;
|
|
65
|
+
finalScriptSig: Bytes;
|
|
66
|
+
};
|
|
67
|
+
export declare function inputBeforeSign(i: psbt.TransactionInput): TransactionInputRequired;
|
|
68
|
+
declare function validateOpts(opts: TxOpts): Readonly<{
|
|
69
|
+
version: number;
|
|
70
|
+
lockTime: number;
|
|
71
|
+
PSBTVersion: number;
|
|
72
|
+
/** @deprecated Use `allowUnknownOutputs` */
|
|
73
|
+
allowUnknowOutput?: boolean | undefined;
|
|
74
|
+
allowUnknownOutputs?: boolean | undefined;
|
|
75
|
+
/** @deprecated Use `allowUnknownInputs` */
|
|
76
|
+
allowUnknowInput?: boolean | undefined;
|
|
77
|
+
allowUnknownInputs?: boolean | undefined;
|
|
78
|
+
disableScriptCheck?: boolean | undefined;
|
|
79
|
+
bip174jsCompat?: boolean | undefined;
|
|
80
|
+
allowLegacyWitnessUtxo?: boolean | undefined;
|
|
81
|
+
lowR?: boolean | undefined;
|
|
82
|
+
customScripts?: CustomScript[] | undefined;
|
|
83
|
+
}>;
|
|
84
|
+
export declare class Transaction {
|
|
85
|
+
private global;
|
|
86
|
+
private inputs;
|
|
87
|
+
private outputs;
|
|
88
|
+
readonly opts: ReturnType<typeof validateOpts>;
|
|
89
|
+
constructor(opts?: TxOpts);
|
|
90
|
+
static fromRaw(raw: Bytes, opts?: TxOpts): Transaction;
|
|
91
|
+
static fromPSBT(psbt_: Bytes, opts?: TxOpts): Transaction;
|
|
92
|
+
toPSBT(PSBTVersion?: number): Uint8Array;
|
|
93
|
+
get lockTime(): number;
|
|
94
|
+
get version(): number;
|
|
95
|
+
private inputStatus;
|
|
96
|
+
private inputSighash;
|
|
97
|
+
private signStatus;
|
|
98
|
+
get isFinal(): boolean;
|
|
99
|
+
get hasWitnesses(): boolean;
|
|
100
|
+
get weight(): number;
|
|
101
|
+
get vsize(): number;
|
|
102
|
+
toBytes(withScriptSig?: boolean, withWitness?: boolean): Uint8Array;
|
|
103
|
+
get unsignedTx(): Bytes;
|
|
104
|
+
get hex(): string;
|
|
105
|
+
get hash(): string;
|
|
106
|
+
get id(): string;
|
|
107
|
+
private checkInputIdx;
|
|
108
|
+
getInput(idx: number): psbt.PSBTKeyMapKeys<{
|
|
109
|
+
readonly nonWitnessUtxo: readonly [0, false, P.CoderType<P.StructInput<{
|
|
110
|
+
version: number;
|
|
111
|
+
segwitFlag: boolean;
|
|
112
|
+
inputs: P.StructInput<{
|
|
113
|
+
txid: any;
|
|
114
|
+
index: any;
|
|
115
|
+
finalScriptSig: any;
|
|
116
|
+
sequence: any;
|
|
117
|
+
}>[];
|
|
118
|
+
outputs: P.StructInput<{
|
|
119
|
+
amount: any;
|
|
120
|
+
script: any;
|
|
121
|
+
}>[];
|
|
122
|
+
witnesses: P.Option<Uint8Array[][]>;
|
|
123
|
+
lockTime: number;
|
|
124
|
+
}>>, readonly [], readonly [0, 2], false];
|
|
125
|
+
readonly witnessUtxo: readonly [1, false, P.CoderType<P.StructInput<{
|
|
126
|
+
amount: bigint;
|
|
127
|
+
script: Uint8Array;
|
|
128
|
+
}>>, readonly [], readonly [0, 2], false];
|
|
129
|
+
readonly partialSig: readonly [2, P.CoderType<Uint8Array>, P.CoderType<Uint8Array>, readonly [], readonly [0, 2], false];
|
|
130
|
+
readonly sighashType: readonly [3, false, P.CoderType<number>, readonly [], readonly [0, 2], false];
|
|
131
|
+
readonly redeemScript: readonly [4, false, P.CoderType<Uint8Array>, readonly [], readonly [0, 2], false];
|
|
132
|
+
readonly witnessScript: readonly [5, false, P.CoderType<Uint8Array>, readonly [], readonly [0, 2], false];
|
|
133
|
+
readonly bip32Derivation: readonly [6, P.CoderType<Uint8Array>, P.CoderType<P.StructInput<{
|
|
134
|
+
fingerprint: number;
|
|
135
|
+
path: number[];
|
|
136
|
+
}>>, readonly [], readonly [0, 2], false];
|
|
137
|
+
readonly finalScriptSig: readonly [7, false, P.CoderType<Uint8Array>, readonly [], readonly [0, 2], false];
|
|
138
|
+
readonly finalScriptWitness: readonly [8, false, P.CoderType<Uint8Array[]>, readonly [], readonly [0, 2], false];
|
|
139
|
+
readonly porCommitment: readonly [9, false, P.CoderType<Uint8Array>, readonly [], readonly [0, 2], false];
|
|
140
|
+
readonly ripemd160: readonly [10, P.CoderType<Uint8Array>, P.CoderType<Uint8Array>, readonly [], readonly [0, 2], false];
|
|
141
|
+
readonly sha256: readonly [11, P.CoderType<Uint8Array>, P.CoderType<Uint8Array>, readonly [], readonly [0, 2], false];
|
|
142
|
+
readonly hash160: readonly [12, P.CoderType<Uint8Array>, P.CoderType<Uint8Array>, readonly [], readonly [0, 2], false];
|
|
143
|
+
readonly hash256: readonly [13, P.CoderType<Uint8Array>, P.CoderType<Uint8Array>, readonly [], readonly [0, 2], false];
|
|
144
|
+
readonly txid: readonly [14, false, P.CoderType<Uint8Array>, readonly [2], readonly [2], true];
|
|
145
|
+
readonly index: readonly [15, false, P.CoderType<number>, readonly [2], readonly [2], true];
|
|
146
|
+
readonly sequence: readonly [16, false, P.CoderType<number>, readonly [], readonly [2], true];
|
|
147
|
+
readonly requiredTimeLocktime: readonly [17, false, P.CoderType<number>, readonly [], readonly [2], false];
|
|
148
|
+
readonly requiredHeightLocktime: readonly [18, false, P.CoderType<number>, readonly [], readonly [2], false];
|
|
149
|
+
readonly tapKeySig: readonly [19, false, P.CoderType<Uint8Array>, readonly [], readonly [0, 2], false];
|
|
150
|
+
readonly tapScriptSig: readonly [20, P.CoderType<P.StructInput<{
|
|
151
|
+
pubKey: Uint8Array;
|
|
152
|
+
leafHash: Uint8Array;
|
|
153
|
+
}>>, P.CoderType<Uint8Array>, readonly [], readonly [0, 2], false];
|
|
154
|
+
readonly tapLeafScript: readonly [21, P.CoderType<P.StructInput<{
|
|
155
|
+
version: number;
|
|
156
|
+
internalKey: Uint8Array;
|
|
157
|
+
merklePath: Uint8Array[];
|
|
158
|
+
}>>, P.CoderType<Uint8Array>, readonly [], readonly [0, 2], false];
|
|
159
|
+
readonly tapBip32Derivation: readonly [22, P.CoderType<Uint8Array>, P.CoderType<P.StructInput<{
|
|
160
|
+
hashes: Uint8Array[];
|
|
161
|
+
der: P.StructInput<{
|
|
162
|
+
fingerprint: any;
|
|
163
|
+
path: any;
|
|
164
|
+
}>;
|
|
165
|
+
}>>, readonly [], readonly [0, 2], false];
|
|
166
|
+
readonly tapInternalKey: readonly [23, false, P.CoderType<Uint8Array>, readonly [], readonly [0, 2], false];
|
|
167
|
+
readonly tapMerkleRoot: readonly [24, false, P.CoderType<Uint8Array>, readonly [], readonly [0, 2], false];
|
|
168
|
+
readonly proprietary: readonly [252, P.CoderType<Uint8Array>, P.CoderType<Uint8Array>, readonly [], readonly [0, 2], false];
|
|
169
|
+
}>;
|
|
170
|
+
get inputsLength(): number;
|
|
171
|
+
addInput(input: psbt.TransactionInputUpdate, _ignoreSignStatus?: boolean): number;
|
|
172
|
+
updateInput(idx: number, input: psbt.TransactionInputUpdate, _ignoreSignStatus?: boolean): void;
|
|
173
|
+
private checkOutputIdx;
|
|
174
|
+
getOutput(idx: number): psbt.PSBTKeyMapKeys<{
|
|
175
|
+
readonly redeemScript: readonly [0, false, P.CoderType<Uint8Array>, readonly [], readonly [0, 2], false];
|
|
176
|
+
readonly witnessScript: readonly [1, false, P.CoderType<Uint8Array>, readonly [], readonly [0, 2], false];
|
|
177
|
+
readonly bip32Derivation: readonly [2, P.CoderType<Uint8Array>, P.CoderType<P.StructInput<{
|
|
178
|
+
fingerprint: number;
|
|
179
|
+
path: number[];
|
|
180
|
+
}>>, readonly [], readonly [0, 2], false];
|
|
181
|
+
readonly amount: readonly [3, false, P.CoderType<bigint>, readonly [2], readonly [2], true];
|
|
182
|
+
readonly script: readonly [4, false, P.CoderType<Uint8Array>, readonly [2], readonly [2], true];
|
|
183
|
+
readonly tapInternalKey: readonly [5, false, P.CoderType<Uint8Array>, readonly [], readonly [0, 2], false];
|
|
184
|
+
readonly tapTree: readonly [6, false, P.CoderType<P.StructInput<{
|
|
185
|
+
depth: number;
|
|
186
|
+
version: number;
|
|
187
|
+
script: Uint8Array;
|
|
188
|
+
}>[]>, readonly [], readonly [0, 2], false];
|
|
189
|
+
readonly tapBip32Derivation: readonly [7, P.CoderType<Uint8Array>, P.CoderType<P.StructInput<{
|
|
190
|
+
hashes: Uint8Array[];
|
|
191
|
+
der: P.StructInput<{
|
|
192
|
+
fingerprint: any;
|
|
193
|
+
path: any;
|
|
194
|
+
}>;
|
|
195
|
+
}>>, readonly [], readonly [0, 2], false];
|
|
196
|
+
readonly proprietary: readonly [252, P.CoderType<Uint8Array>, P.CoderType<Uint8Array>, readonly [], readonly [0, 2], false];
|
|
197
|
+
}>;
|
|
198
|
+
get outputsLength(): number;
|
|
199
|
+
private normalizeOutput;
|
|
200
|
+
addOutput(o: psbt.TransactionOutputUpdate, _ignoreSignStatus?: boolean): number;
|
|
201
|
+
updateOutput(idx: number, output: psbt.TransactionOutputUpdate, _ignoreSignStatus?: boolean): void;
|
|
202
|
+
addOutputAddress(address: string, amount: bigint, network?: {
|
|
203
|
+
bech32: string;
|
|
204
|
+
pubKeyHash: number;
|
|
205
|
+
scriptHash: number;
|
|
206
|
+
wif: number;
|
|
207
|
+
}): number;
|
|
208
|
+
get fee(): bigint;
|
|
209
|
+
private preimageLegacy;
|
|
210
|
+
preimageWitnessV0(idx: number, prevOutScript: Bytes, hashType: number, amount: bigint): Uint8Array;
|
|
211
|
+
preimageWitnessV1(idx: number, prevOutScript: Bytes[], hashType: number, amount: bigint[], codeSeparator?: number, leafScript?: Bytes, leafVer?: number, annex?: Bytes): Uint8Array;
|
|
212
|
+
signIdx(privateKey: Signer, idx: number, allowedSighash?: SigHash[], _auxRand?: Bytes): boolean;
|
|
213
|
+
sign(privateKey: Signer, allowedSighash?: number[], _auxRand?: Bytes): number;
|
|
214
|
+
finalizeIdx(idx: number): void;
|
|
215
|
+
finalize(): void;
|
|
216
|
+
extract(): Uint8Array;
|
|
217
|
+
combine(other: Transaction): this;
|
|
218
|
+
clone(): Transaction;
|
|
219
|
+
}
|
|
220
|
+
export declare function PSBTCombine(psbts: Bytes[]): Bytes;
|
|
221
|
+
export declare function bip32Path(path: string): number[];
|
|
222
|
+
export {};
|
|
223
|
+
//# sourceMappingURL=transaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"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"}
|