@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
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
import * as P from 'micro-packed';
|
|
2
|
+
export const MAX_SCRIPT_BYTE_LENGTH = 520;
|
|
3
|
+
// prettier-ignore
|
|
4
|
+
export var OP;
|
|
5
|
+
(function (OP) {
|
|
6
|
+
OP[OP["OP_0"] = 0] = "OP_0";
|
|
7
|
+
OP[OP["PUSHDATA1"] = 76] = "PUSHDATA1";
|
|
8
|
+
OP[OP["PUSHDATA2"] = 77] = "PUSHDATA2";
|
|
9
|
+
OP[OP["PUSHDATA4"] = 78] = "PUSHDATA4";
|
|
10
|
+
OP[OP["1NEGATE"] = 79] = "1NEGATE";
|
|
11
|
+
OP[OP["RESERVED"] = 80] = "RESERVED";
|
|
12
|
+
OP[OP["OP_1"] = 81] = "OP_1";
|
|
13
|
+
OP[OP["OP_2"] = 82] = "OP_2";
|
|
14
|
+
OP[OP["OP_3"] = 83] = "OP_3";
|
|
15
|
+
OP[OP["OP_4"] = 84] = "OP_4";
|
|
16
|
+
OP[OP["OP_5"] = 85] = "OP_5";
|
|
17
|
+
OP[OP["OP_6"] = 86] = "OP_6";
|
|
18
|
+
OP[OP["OP_7"] = 87] = "OP_7";
|
|
19
|
+
OP[OP["OP_8"] = 88] = "OP_8";
|
|
20
|
+
OP[OP["OP_9"] = 89] = "OP_9";
|
|
21
|
+
OP[OP["OP_10"] = 90] = "OP_10";
|
|
22
|
+
OP[OP["OP_11"] = 91] = "OP_11";
|
|
23
|
+
OP[OP["OP_12"] = 92] = "OP_12";
|
|
24
|
+
OP[OP["OP_13"] = 93] = "OP_13";
|
|
25
|
+
OP[OP["OP_14"] = 94] = "OP_14";
|
|
26
|
+
OP[OP["OP_15"] = 95] = "OP_15";
|
|
27
|
+
OP[OP["OP_16"] = 96] = "OP_16";
|
|
28
|
+
// Control
|
|
29
|
+
OP[OP["NOP"] = 97] = "NOP";
|
|
30
|
+
OP[OP["VER"] = 98] = "VER";
|
|
31
|
+
OP[OP["IF"] = 99] = "IF";
|
|
32
|
+
OP[OP["NOTIF"] = 100] = "NOTIF";
|
|
33
|
+
OP[OP["VERIF"] = 101] = "VERIF";
|
|
34
|
+
OP[OP["VERNOTIF"] = 102] = "VERNOTIF";
|
|
35
|
+
OP[OP["ELSE"] = 103] = "ELSE";
|
|
36
|
+
OP[OP["ENDIF"] = 104] = "ENDIF";
|
|
37
|
+
OP[OP["VERIFY"] = 105] = "VERIFY";
|
|
38
|
+
OP[OP["RETURN"] = 106] = "RETURN";
|
|
39
|
+
// Stack
|
|
40
|
+
OP[OP["TOALTSTACK"] = 107] = "TOALTSTACK";
|
|
41
|
+
OP[OP["FROMALTSTACK"] = 108] = "FROMALTSTACK";
|
|
42
|
+
OP[OP["2DROP"] = 109] = "2DROP";
|
|
43
|
+
OP[OP["2DUP"] = 110] = "2DUP";
|
|
44
|
+
OP[OP["3DUP"] = 111] = "3DUP";
|
|
45
|
+
OP[OP["2OVER"] = 112] = "2OVER";
|
|
46
|
+
OP[OP["2ROT"] = 113] = "2ROT";
|
|
47
|
+
OP[OP["2SWAP"] = 114] = "2SWAP";
|
|
48
|
+
OP[OP["IFDUP"] = 115] = "IFDUP";
|
|
49
|
+
OP[OP["DEPTH"] = 116] = "DEPTH";
|
|
50
|
+
OP[OP["DROP"] = 117] = "DROP";
|
|
51
|
+
OP[OP["DUP"] = 118] = "DUP";
|
|
52
|
+
OP[OP["NIP"] = 119] = "NIP";
|
|
53
|
+
OP[OP["OVER"] = 120] = "OVER";
|
|
54
|
+
OP[OP["PICK"] = 121] = "PICK";
|
|
55
|
+
OP[OP["ROLL"] = 122] = "ROLL";
|
|
56
|
+
OP[OP["ROT"] = 123] = "ROT";
|
|
57
|
+
OP[OP["SWAP"] = 124] = "SWAP";
|
|
58
|
+
OP[OP["TUCK"] = 125] = "TUCK";
|
|
59
|
+
// Splice
|
|
60
|
+
OP[OP["CAT"] = 126] = "CAT";
|
|
61
|
+
OP[OP["SUBSTR"] = 127] = "SUBSTR";
|
|
62
|
+
OP[OP["LEFT"] = 128] = "LEFT";
|
|
63
|
+
OP[OP["RIGHT"] = 129] = "RIGHT";
|
|
64
|
+
OP[OP["SIZE"] = 130] = "SIZE";
|
|
65
|
+
// Boolean logic
|
|
66
|
+
OP[OP["INVERT"] = 131] = "INVERT";
|
|
67
|
+
OP[OP["AND"] = 132] = "AND";
|
|
68
|
+
OP[OP["OR"] = 133] = "OR";
|
|
69
|
+
OP[OP["XOR"] = 134] = "XOR";
|
|
70
|
+
OP[OP["EQUAL"] = 135] = "EQUAL";
|
|
71
|
+
OP[OP["EQUALVERIFY"] = 136] = "EQUALVERIFY";
|
|
72
|
+
OP[OP["RESERVED1"] = 137] = "RESERVED1";
|
|
73
|
+
OP[OP["RESERVED2"] = 138] = "RESERVED2";
|
|
74
|
+
// Numbers
|
|
75
|
+
OP[OP["1ADD"] = 139] = "1ADD";
|
|
76
|
+
OP[OP["1SUB"] = 140] = "1SUB";
|
|
77
|
+
OP[OP["2MUL"] = 141] = "2MUL";
|
|
78
|
+
OP[OP["2DIV"] = 142] = "2DIV";
|
|
79
|
+
OP[OP["NEGATE"] = 143] = "NEGATE";
|
|
80
|
+
OP[OP["ABS"] = 144] = "ABS";
|
|
81
|
+
OP[OP["NOT"] = 145] = "NOT";
|
|
82
|
+
OP[OP["0NOTEQUAL"] = 146] = "0NOTEQUAL";
|
|
83
|
+
OP[OP["ADD"] = 147] = "ADD";
|
|
84
|
+
OP[OP["SUB"] = 148] = "SUB";
|
|
85
|
+
OP[OP["MUL"] = 149] = "MUL";
|
|
86
|
+
OP[OP["DIV"] = 150] = "DIV";
|
|
87
|
+
OP[OP["MOD"] = 151] = "MOD";
|
|
88
|
+
OP[OP["LSHIFT"] = 152] = "LSHIFT";
|
|
89
|
+
OP[OP["RSHIFT"] = 153] = "RSHIFT";
|
|
90
|
+
OP[OP["BOOLAND"] = 154] = "BOOLAND";
|
|
91
|
+
OP[OP["BOOLOR"] = 155] = "BOOLOR";
|
|
92
|
+
OP[OP["NUMEQUAL"] = 156] = "NUMEQUAL";
|
|
93
|
+
OP[OP["NUMEQUALVERIFY"] = 157] = "NUMEQUALVERIFY";
|
|
94
|
+
OP[OP["NUMNOTEQUAL"] = 158] = "NUMNOTEQUAL";
|
|
95
|
+
OP[OP["LESSTHAN"] = 159] = "LESSTHAN";
|
|
96
|
+
OP[OP["GREATERTHAN"] = 160] = "GREATERTHAN";
|
|
97
|
+
OP[OP["LESSTHANOREQUAL"] = 161] = "LESSTHANOREQUAL";
|
|
98
|
+
OP[OP["GREATERTHANOREQUAL"] = 162] = "GREATERTHANOREQUAL";
|
|
99
|
+
OP[OP["MIN"] = 163] = "MIN";
|
|
100
|
+
OP[OP["MAX"] = 164] = "MAX";
|
|
101
|
+
OP[OP["WITHIN"] = 165] = "WITHIN";
|
|
102
|
+
// Crypto
|
|
103
|
+
OP[OP["RIPEMD160"] = 166] = "RIPEMD160";
|
|
104
|
+
OP[OP["SHA1"] = 167] = "SHA1";
|
|
105
|
+
OP[OP["SHA256"] = 168] = "SHA256";
|
|
106
|
+
OP[OP["HASH160"] = 169] = "HASH160";
|
|
107
|
+
OP[OP["HASH256"] = 170] = "HASH256";
|
|
108
|
+
OP[OP["CODESEPARATOR"] = 171] = "CODESEPARATOR";
|
|
109
|
+
OP[OP["CHECKSIG"] = 172] = "CHECKSIG";
|
|
110
|
+
OP[OP["CHECKSIGVERIFY"] = 173] = "CHECKSIGVERIFY";
|
|
111
|
+
OP[OP["CHECKMULTISIG"] = 174] = "CHECKMULTISIG";
|
|
112
|
+
OP[OP["CHECKMULTISIGVERIFY"] = 175] = "CHECKMULTISIGVERIFY";
|
|
113
|
+
// Expansion
|
|
114
|
+
OP[OP["NOP1"] = 176] = "NOP1";
|
|
115
|
+
OP[OP["CHECKLOCKTIMEVERIFY"] = 177] = "CHECKLOCKTIMEVERIFY";
|
|
116
|
+
OP[OP["CHECKSEQUENCEVERIFY"] = 178] = "CHECKSEQUENCEVERIFY";
|
|
117
|
+
OP[OP["NOP4"] = 179] = "NOP4";
|
|
118
|
+
OP[OP["NOP5"] = 180] = "NOP5";
|
|
119
|
+
OP[OP["NOP6"] = 181] = "NOP6";
|
|
120
|
+
OP[OP["NOP7"] = 182] = "NOP7";
|
|
121
|
+
OP[OP["NOP8"] = 183] = "NOP8";
|
|
122
|
+
OP[OP["NOP9"] = 184] = "NOP9";
|
|
123
|
+
OP[OP["NOP10"] = 185] = "NOP10";
|
|
124
|
+
// BIP 342
|
|
125
|
+
OP[OP["CHECKSIGADD"] = 186] = "CHECKSIGADD";
|
|
126
|
+
// Invalid
|
|
127
|
+
OP[OP["INVALID"] = 255] = "INVALID";
|
|
128
|
+
})(OP || (OP = {}));
|
|
129
|
+
// We can encode almost any number as ScriptNum, however, parsing will be a problem
|
|
130
|
+
// since we can't know if buffer is a number or something else.
|
|
131
|
+
export function ScriptNum(bytesLimit = 6, forceMinimal = false) {
|
|
132
|
+
return P.wrap({
|
|
133
|
+
encodeStream: (w, value) => {
|
|
134
|
+
if (value === 0n)
|
|
135
|
+
return;
|
|
136
|
+
const neg = value < 0;
|
|
137
|
+
const val = BigInt(value);
|
|
138
|
+
const nums = [];
|
|
139
|
+
for (let abs = neg ? -val : val; abs; abs >>= 8n)
|
|
140
|
+
nums.push(Number(abs & 0xffn));
|
|
141
|
+
if (nums[nums.length - 1] >= 0x80)
|
|
142
|
+
nums.push(neg ? 0x80 : 0);
|
|
143
|
+
else if (neg)
|
|
144
|
+
nums[nums.length - 1] |= 0x80;
|
|
145
|
+
w.bytes(new Uint8Array(nums));
|
|
146
|
+
},
|
|
147
|
+
decodeStream: (r) => {
|
|
148
|
+
const len = r.leftBytes;
|
|
149
|
+
if (len > bytesLimit)
|
|
150
|
+
throw new Error(`ScriptNum: number (${len}) bigger than limit=${bytesLimit}`);
|
|
151
|
+
if (len === 0)
|
|
152
|
+
return 0n;
|
|
153
|
+
if (forceMinimal) {
|
|
154
|
+
// MSB is zero (without sign bit) -> not minimally encoded
|
|
155
|
+
if ((r.data[len - 1] & 0x7f) === 0) {
|
|
156
|
+
// exception
|
|
157
|
+
if (len <= 1 || (r.data[len - 2] & 0x80) === 0)
|
|
158
|
+
throw new Error('Non-minimally encoded ScriptNum');
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
let last = 0;
|
|
162
|
+
let res = 0n;
|
|
163
|
+
for (let i = 0; i < len; ++i) {
|
|
164
|
+
last = r.byte();
|
|
165
|
+
res |= BigInt(last) << (8n * BigInt(i));
|
|
166
|
+
}
|
|
167
|
+
if (last >= 0x80) {
|
|
168
|
+
res &= (2n ** BigInt(len * 8) - 1n) >> 1n;
|
|
169
|
+
res = -res;
|
|
170
|
+
}
|
|
171
|
+
return res;
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
export function OpToNum(op, bytesLimit = 4, forceMinimal = true) {
|
|
176
|
+
if (typeof op === 'number')
|
|
177
|
+
return op;
|
|
178
|
+
if (P.isBytes(op)) {
|
|
179
|
+
try {
|
|
180
|
+
const val = ScriptNum(bytesLimit, forceMinimal).decode(op);
|
|
181
|
+
if (val > Number.MAX_SAFE_INTEGER)
|
|
182
|
+
return;
|
|
183
|
+
return Number(val);
|
|
184
|
+
}
|
|
185
|
+
catch (e) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
// Converts script bytes to parsed script
|
|
192
|
+
// 5221030000000000000000000000000000000000000000000000000000000000000001210300000000000000000000000000000000000000000000000000000000000000022103000000000000000000000000000000000000000000000000000000000000000353ae
|
|
193
|
+
// =>
|
|
194
|
+
// OP_2
|
|
195
|
+
// 030000000000000000000000000000000000000000000000000000000000000001
|
|
196
|
+
// 030000000000000000000000000000000000000000000000000000000000000002
|
|
197
|
+
// 030000000000000000000000000000000000000000000000000000000000000003
|
|
198
|
+
// OP_3
|
|
199
|
+
// CHECKMULTISIG
|
|
200
|
+
export const Script = P.wrap({
|
|
201
|
+
encodeStream: (w, value) => {
|
|
202
|
+
for (let o of value) {
|
|
203
|
+
if (typeof o === 'string') {
|
|
204
|
+
if (OP[o] === undefined)
|
|
205
|
+
throw new Error(`Unknown opcode=${o}`);
|
|
206
|
+
w.byte(OP[o]);
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
else if (typeof o === 'number') {
|
|
210
|
+
if (o === 0x00) {
|
|
211
|
+
w.byte(0x00);
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
else if (1 <= o && o <= 16) {
|
|
215
|
+
w.byte(OP.OP_1 - 1 + o);
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// Encode big numbers
|
|
220
|
+
if (typeof o === 'number')
|
|
221
|
+
o = ScriptNum().encode(BigInt(o));
|
|
222
|
+
if (!P.isBytes(o))
|
|
223
|
+
throw new Error(`Wrong Script OP=${o} (${typeof o})`);
|
|
224
|
+
// Bytes
|
|
225
|
+
const len = o.length;
|
|
226
|
+
if (len < OP.PUSHDATA1)
|
|
227
|
+
w.byte(len);
|
|
228
|
+
else if (len <= 0xff) {
|
|
229
|
+
w.byte(OP.PUSHDATA1);
|
|
230
|
+
w.byte(len);
|
|
231
|
+
}
|
|
232
|
+
else if (len <= 0xffff) {
|
|
233
|
+
w.byte(OP.PUSHDATA2);
|
|
234
|
+
w.bytes(P.U16LE.encode(len));
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
w.byte(OP.PUSHDATA4);
|
|
238
|
+
w.bytes(P.U32LE.encode(len));
|
|
239
|
+
}
|
|
240
|
+
w.bytes(o);
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
decodeStream: (r) => {
|
|
244
|
+
const out = [];
|
|
245
|
+
while (!r.isEnd()) {
|
|
246
|
+
const cur = r.byte();
|
|
247
|
+
// if 0 < cur < 78
|
|
248
|
+
if (OP.OP_0 < cur && cur <= OP.PUSHDATA4) {
|
|
249
|
+
let len;
|
|
250
|
+
if (cur < OP.PUSHDATA1)
|
|
251
|
+
len = cur;
|
|
252
|
+
else if (cur === OP.PUSHDATA1)
|
|
253
|
+
len = P.U8.decodeStream(r);
|
|
254
|
+
else if (cur === OP.PUSHDATA2)
|
|
255
|
+
len = P.U16LE.decodeStream(r);
|
|
256
|
+
else if (cur === OP.PUSHDATA4)
|
|
257
|
+
len = P.U32LE.decodeStream(r);
|
|
258
|
+
else
|
|
259
|
+
throw new Error('Should be not possible');
|
|
260
|
+
out.push(r.bytes(len));
|
|
261
|
+
}
|
|
262
|
+
else if (cur === 0x00) {
|
|
263
|
+
out.push(0);
|
|
264
|
+
}
|
|
265
|
+
else if (OP.OP_1 <= cur && cur <= OP.OP_16) {
|
|
266
|
+
out.push(cur - (OP.OP_1 - 1));
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
const op = OP[cur];
|
|
270
|
+
if (op === undefined)
|
|
271
|
+
throw new Error(`Unknown opcode=${cur.toString(16)}`);
|
|
272
|
+
out.push(op);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return out;
|
|
276
|
+
},
|
|
277
|
+
});
|
|
278
|
+
// BTC specific variable length integer encoding
|
|
279
|
+
// https://en.bitcoin.it/wiki/Protocol_documentation#Variable_length_integer
|
|
280
|
+
const CSLimits = {
|
|
281
|
+
0xfd: [0xfd, 2, 253n, 65535n],
|
|
282
|
+
0xfe: [0xfe, 4, 65536n, 4294967295n],
|
|
283
|
+
0xff: [0xff, 8, 4294967296n, 18446744073709551615n],
|
|
284
|
+
};
|
|
285
|
+
export const CompactSize = P.wrap({
|
|
286
|
+
encodeStream: (w, value) => {
|
|
287
|
+
if (typeof value === 'number')
|
|
288
|
+
value = BigInt(value);
|
|
289
|
+
if (0n <= value && value <= 252n)
|
|
290
|
+
return w.byte(Number(value));
|
|
291
|
+
for (const [flag, bytes, start, stop] of Object.values(CSLimits)) {
|
|
292
|
+
if (start > value || value > stop)
|
|
293
|
+
continue;
|
|
294
|
+
w.byte(flag);
|
|
295
|
+
for (let i = 0; i < bytes; i++)
|
|
296
|
+
w.byte(Number((value >> (8n * BigInt(i))) & 0xffn));
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
throw w.err(`VarInt too big: ${value}`);
|
|
300
|
+
},
|
|
301
|
+
decodeStream: (r) => {
|
|
302
|
+
const b0 = r.byte();
|
|
303
|
+
if (b0 <= 0xfc)
|
|
304
|
+
return BigInt(b0);
|
|
305
|
+
const [_, bytes, start] = CSLimits[b0];
|
|
306
|
+
let num = 0n;
|
|
307
|
+
for (let i = 0; i < bytes; i++)
|
|
308
|
+
num |= BigInt(r.byte()) << (8n * BigInt(i));
|
|
309
|
+
if (num < start)
|
|
310
|
+
throw r.err(`Wrong CompactSize(${8 * bytes})`);
|
|
311
|
+
return num;
|
|
312
|
+
},
|
|
313
|
+
});
|
|
314
|
+
// Same thing, but in number instead of bigint. Checks for safe integer inside
|
|
315
|
+
export const CompactSizeLen = P.apply(CompactSize, P.coders.number);
|
|
316
|
+
// ui8a of size <CompactSize>
|
|
317
|
+
export const VarBytes = P.bytes(CompactSize);
|
|
318
|
+
// SegWit v0 stack of witness buffers
|
|
319
|
+
export const RawWitness = P.array(CompactSizeLen, VarBytes);
|
|
320
|
+
// Array of size <CompactSize>
|
|
321
|
+
export const BTCArray = (t) => P.array(CompactSize, t);
|
|
322
|
+
export const RawInput = P.struct({
|
|
323
|
+
txid: P.bytes(32, true), // hash(prev_tx),
|
|
324
|
+
index: P.U32LE, // output number of previous tx
|
|
325
|
+
finalScriptSig: VarBytes, // btc merges input and output script, executes it. If ok = tx passes
|
|
326
|
+
sequence: P.U32LE, // ?
|
|
327
|
+
});
|
|
328
|
+
export const RawOutput = P.struct({ amount: P.U64LE, script: VarBytes });
|
|
329
|
+
// https://en.bitcoin.it/wiki/Protocol_documentation#tx
|
|
330
|
+
const _RawTx = P.struct({
|
|
331
|
+
version: P.I32LE,
|
|
332
|
+
segwitFlag: P.flag(new Uint8Array([0x00, 0x01])),
|
|
333
|
+
inputs: BTCArray(RawInput),
|
|
334
|
+
outputs: BTCArray(RawOutput),
|
|
335
|
+
witnesses: P.flagged('segwitFlag', P.array('inputs/length', RawWitness)),
|
|
336
|
+
// < 500000000 Block number at which this transaction is unlocked
|
|
337
|
+
// >= 500000000 UNIX timestamp at which this transaction is unlocked
|
|
338
|
+
// Handled as part of PSBTv2
|
|
339
|
+
lockTime: P.U32LE,
|
|
340
|
+
});
|
|
341
|
+
function validateRawTx(tx) {
|
|
342
|
+
if (tx.segwitFlag && tx.witnesses && !tx.witnesses.length)
|
|
343
|
+
throw new Error('Segwit flag with empty witnesses array');
|
|
344
|
+
return tx;
|
|
345
|
+
}
|
|
346
|
+
export const RawTx = P.validate(_RawTx, validateRawTx);
|
|
347
|
+
//# sourceMappingURL=script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script.js","sourceRoot":"","sources":["../../src/script.ts"],"names":[],"mappings":"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"}
|