@btc-vision/bitcoin 6.4.11 → 6.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/browser/chunks/crypto-0PweVewC.js +2033 -0
  2. package/browser/chunks/payments-CgasufRS.js +1047 -0
  3. package/browser/chunks/psbt-BIwOrKer.js +4096 -0
  4. package/browser/chunks/script-CROJPzz_.js +318 -0
  5. package/browser/chunks/transaction-DchBu35N.js +432 -0
  6. package/browser/chunks/utils-CO5kmxe9.js +761 -0
  7. package/browser/crypto/crypto.d.ts +1 -1
  8. package/browser/crypto.d.ts +1 -1
  9. package/browser/hooks/HookedSigner.d.ts +1 -1
  10. package/browser/index.d.ts +6 -4
  11. package/browser/index.js +92 -2
  12. package/browser/payments/index.d.ts +2 -2
  13. package/browser/payments/lazy.d.ts +1 -1
  14. package/browser/psbt/bip371.d.ts +5 -1
  15. package/browser/psbt.d.ts +1 -1
  16. package/browser/typeforce.d.ts +38 -0
  17. package/browser/types.d.ts +22 -20
  18. package/build/address.js +2 -2
  19. package/build/bip66.js +2 -2
  20. package/build/block.js +2 -2
  21. package/build/crypto.d.ts +1 -1
  22. package/build/crypto.js +2 -3
  23. package/build/hooks/HookedSigner.d.ts +1 -1
  24. package/build/index.d.ts +6 -4
  25. package/build/index.js +2 -2
  26. package/build/payments/bip341.js +1 -1
  27. package/build/payments/index.d.ts +2 -2
  28. package/build/payments/lazy.d.ts +1 -1
  29. package/build/payments/p2op.js +3 -3
  30. package/build/payments/p2pk.js +1 -1
  31. package/build/payments/p2pkh.js +3 -3
  32. package/build/payments/p2sh.js +3 -3
  33. package/build/payments/p2tr.js +9 -5
  34. package/build/payments/p2wpkh.js +3 -3
  35. package/build/payments/p2wsh.js +2 -2
  36. package/build/psbt/bip371.d.ts +5 -1
  37. package/build/psbt/bip371.js +10 -7
  38. package/build/psbt/psbtutils.js +5 -4
  39. package/build/psbt.d.ts +1 -1
  40. package/build/psbt.js +78 -45
  41. package/build/script.js +2 -2
  42. package/build/script_signature.js +7 -7
  43. package/build/transaction.js +22 -10
  44. package/build/tsconfig.tsbuildinfo +1 -0
  45. package/build/types.d.ts +22 -20
  46. package/build/types.js +10 -9
  47. package/package.json +37 -63
  48. package/src/address.ts +2 -2
  49. package/src/bip66.ts +2 -2
  50. package/src/block.ts +8 -5
  51. package/src/crypto.ts +3 -4
  52. package/src/ecc_lib.ts +1 -1
  53. package/src/hooks/HookedSigner.ts +1 -1
  54. package/src/index.ts +6 -6
  55. package/src/payments/bip341.ts +1 -1
  56. package/src/payments/embed.ts +1 -2
  57. package/src/payments/index.ts +4 -4
  58. package/src/payments/lazy.ts +3 -3
  59. package/src/payments/p2op.ts +4 -3
  60. package/src/payments/p2pk.ts +1 -1
  61. package/src/payments/p2pkh.ts +3 -3
  62. package/src/payments/p2sh.ts +13 -5
  63. package/src/payments/p2tr.ts +8 -9
  64. package/src/payments/p2wpkh.ts +3 -3
  65. package/src/payments/p2wsh.ts +4 -4
  66. package/src/psbt/bip371.ts +22 -13
  67. package/src/psbt/psbtutils.ts +8 -5
  68. package/src/psbt.ts +127 -80
  69. package/src/script.ts +4 -4
  70. package/src/script_signature.ts +7 -7
  71. package/src/transaction.ts +31 -18
  72. package/src/typeforce.d.ts +38 -0
  73. package/src/types.ts +34 -29
  74. package/test/address.spec.ts +12 -4
  75. package/test/bitcoin.core.spec.ts +1 -1
  76. package/test/block.spec.ts +1 -1
  77. package/test/bufferutils.spec.ts +1 -1
  78. package/test/crypto.spec.ts +3 -2
  79. package/test/fixtures/address.json +1 -1
  80. package/test/integration/addresses.spec.ts +1 -1
  81. package/test/integration/bip32.spec.ts +2 -2
  82. package/test/integration/blocks.spec.ts +1 -1
  83. package/test/integration/cltv.spec.ts +3 -3
  84. package/test/integration/csv.spec.ts +3 -3
  85. package/test/integration/payments.spec.ts +1 -1
  86. package/test/integration/taproot.spec.ts +8 -7
  87. package/test/integration/transactions.spec.ts +2 -2
  88. package/test/payments.spec.ts +4 -3
  89. package/test/psbt.spec.ts +106 -74
  90. package/test/script.spec.ts +73 -7
  91. package/test/script_number.spec.ts +1 -1
  92. package/test/script_signature.spec.ts +1 -1
  93. package/test/transaction.spec.ts +1 -1
  94. package/test/tsconfig.json +1 -1
  95. package/test/types.spec.ts +1 -1
  96. package/vite.config.browser.ts +93 -0
  97. package/vitest.config.ts +16 -0
  98. package/.babelrc +0 -4
  99. package/.mocharc.json +0 -13
  100. package/browser/index.js.LICENSE.txt +0 -14
  101. package/cjs/package.json +0 -3
  102. package/gulpfile.js +0 -42
  103. package/src/crypto/crypto-browser.js +0 -75
  104. package/test/ts-node-register.js +0 -7
  105. package/webpack.config.js +0 -79
@@ -0,0 +1,432 @@
1
+ import { B as c, b as U, a as N, t as $ } from "./crypto-0PweVewC.js";
2
+ import { f as z, k as K, l as D, a as C, m as b, n as P, o as _, N as Q, S as W, g as v, p as V, B as A, r as M, F as J, q as x, h as tt } from "./utils-CO5kmxe9.js";
3
+ import { d as et, c as st, o as it } from "./script-CROJPzz_.js";
4
+ const { typeforce: p } = K;
5
+ function I(l) {
6
+ const t = l.length;
7
+ return v(t) + t;
8
+ }
9
+ function rt(l) {
10
+ const t = l.length;
11
+ return v(t) + l.reduce((e, s) => e + I(s), 0);
12
+ }
13
+ const d = c.allocUnsafe(0), F = [], k = c.from(
14
+ "0000000000000000000000000000000000000000000000000000000000000000",
15
+ "hex"
16
+ ), T = c.from(
17
+ "0000000000000000000000000000000000000000000000000000000000000001",
18
+ "hex"
19
+ ), nt = c.from("ffffffffffffffff", "hex"), ot = {
20
+ script: d,
21
+ valueBuffer: nt
22
+ };
23
+ function ht(l) {
24
+ return "value" in l;
25
+ }
26
+ class o {
27
+ constructor() {
28
+ this.version = 1, this.locktime = 0, this.ins = [], this.outs = [];
29
+ }
30
+ static {
31
+ this.DEFAULT_SEQUENCE = 4294967295;
32
+ }
33
+ static {
34
+ this.SIGHASH_DEFAULT = 0;
35
+ }
36
+ static {
37
+ this.SIGHASH_ALL = 1;
38
+ }
39
+ static {
40
+ this.SIGHASH_NONE = 2;
41
+ }
42
+ static {
43
+ this.SIGHASH_SINGLE = 3;
44
+ }
45
+ static {
46
+ this.SIGHASH_ANYONECANPAY = 128;
47
+ }
48
+ static {
49
+ this.SIGHASH_OUTPUT_MASK = 3;
50
+ }
51
+ static {
52
+ this.SIGHASH_INPUT_MASK = 128;
53
+ }
54
+ static {
55
+ this.ADVANCED_TRANSACTION_MARKER = 0;
56
+ }
57
+ static {
58
+ this.ADVANCED_TRANSACTION_FLAG = 1;
59
+ }
60
+ static {
61
+ this.TRUC_VERSION = 3;
62
+ }
63
+ static {
64
+ this.TRUC_MAX_VSIZE = 1e4;
65
+ }
66
+ static {
67
+ this.TRUC_CHILD_MAX_VSIZE = 1e3;
68
+ }
69
+ static fromBuffer(t, e) {
70
+ const s = new z(t), i = new o();
71
+ i.version = s.readInt32();
72
+ const n = s.readUInt8(), r = s.readUInt8();
73
+ let f = !1;
74
+ n === o.ADVANCED_TRANSACTION_MARKER && r === o.ADVANCED_TRANSACTION_FLAG ? f = !0 : s.offset -= 2;
75
+ const u = s.readVarInt();
76
+ for (let S = 0; S < u; ++S) {
77
+ const m = s.readSlice(32), E = s.readUInt32(), y = s.readVarSlice(), L = s.readUInt32();
78
+ i.ins.push({
79
+ hash: m,
80
+ index: E,
81
+ script: y,
82
+ sequence: L,
83
+ witness: F
84
+ });
85
+ }
86
+ const g = s.readVarInt();
87
+ for (let S = 0; S < g; ++S)
88
+ i.outs.push({
89
+ value: s.readUInt64(),
90
+ script: s.readVarSlice()
91
+ });
92
+ if (f) {
93
+ for (let S = 0; S < u; ++S)
94
+ i.ins[S].witness = s.readVector();
95
+ if (!i.hasWitnesses()) throw new Error("Transaction has superfluous witness data");
96
+ }
97
+ if (i.locktime = s.readUInt32(), e) return i;
98
+ if (s.offset !== t.length)
99
+ throw new Error("Transaction has unexpected data");
100
+ return i;
101
+ }
102
+ static fromHex(t) {
103
+ return o.fromBuffer(c.from(t, "hex"), !1);
104
+ }
105
+ static isCoinbaseHash(t) {
106
+ p(D, t);
107
+ for (let e = 0; e < 32; ++e)
108
+ if (t[e] !== 0) return !1;
109
+ return !0;
110
+ }
111
+ isCoinbase() {
112
+ return this.ins.length === 1 && o.isCoinbaseHash(this.ins[0].hash);
113
+ }
114
+ addInput(t, e, s, i) {
115
+ return p(
116
+ C(
117
+ D,
118
+ b,
119
+ P(b),
120
+ P(_)
121
+ ),
122
+ [t, e, s, i]
123
+ ), Q(s) && (s = o.DEFAULT_SEQUENCE), this.ins.push({
124
+ hash: t,
125
+ index: e,
126
+ script: i || d,
127
+ sequence: s,
128
+ witness: F
129
+ }) - 1;
130
+ }
131
+ addOutput(t, e) {
132
+ return p(C(_, W), [t, e]), this.outs.push({
133
+ script: t,
134
+ value: e
135
+ }) - 1;
136
+ }
137
+ hasWitnesses() {
138
+ return this.ins.some((t) => t.witness.length !== 0);
139
+ }
140
+ weight() {
141
+ const t = this.byteLength(!1), e = this.byteLength(!0);
142
+ return t * 3 + e;
143
+ }
144
+ virtualSize() {
145
+ return Math.ceil(this.weight() / 4);
146
+ }
147
+ byteLength(t = !0) {
148
+ const e = t && this.hasWitnesses();
149
+ return (e ? 10 : 8) + v(this.ins.length) + v(this.outs.length) + this.ins.reduce((s, i) => s + 40 + I(i.script), 0) + this.outs.reduce((s, i) => s + 8 + I(i.script), 0) + (e ? this.ins.reduce((s, i) => s + rt(i.witness), 0) : 0);
150
+ }
151
+ clone() {
152
+ const t = new o();
153
+ return t.version = this.version, t.locktime = this.locktime, t.ins = this.ins.map((e) => ({
154
+ hash: e.hash,
155
+ index: e.index,
156
+ script: e.script,
157
+ sequence: e.sequence,
158
+ witness: e.witness
159
+ })), t.outs = this.outs.map((e) => ({
160
+ script: e.script,
161
+ value: e.value
162
+ })), t;
163
+ }
164
+ /**
165
+ * Hash transaction for signing a specific input.
166
+ *
167
+ * Bitcoin uses a different hash for each signed transaction input.
168
+ * This method copies the transaction, makes the necessary changes based on the
169
+ * hashType, and then hashes the result.
170
+ * This hash can then be used to sign the provided transaction input.
171
+ */
172
+ hashForSignature(t, e, s) {
173
+ if (p(C(
174
+ b,
175
+ _,
176
+ /* types.UInt8 */
177
+ V
178
+ ), [
179
+ t,
180
+ e,
181
+ s
182
+ ]), t >= this.ins.length) return T;
183
+ const i = et(e);
184
+ if (!i) throw new Error("Could not decompile prevOutScript");
185
+ const n = st(
186
+ i.filter((u) => u !== it.OP_CODESEPARATOR)
187
+ ), r = this.clone();
188
+ if ((s & 31) === o.SIGHASH_NONE)
189
+ r.outs = [], r.ins.forEach((u, g) => {
190
+ g !== t && (u.sequence = 0);
191
+ });
192
+ else if ((s & 31) === o.SIGHASH_SINGLE) {
193
+ if (t >= this.outs.length) return T;
194
+ r.outs.length = t + 1;
195
+ for (let u = 0; u < t; u++)
196
+ r.outs[u] = ot;
197
+ r.ins.forEach((u, g) => {
198
+ g !== t && (u.sequence = 0);
199
+ });
200
+ }
201
+ s & o.SIGHASH_ANYONECANPAY ? (r.ins = [r.ins[t]], r.ins[0].script = n) : (r.ins.forEach((u) => {
202
+ u.script = d;
203
+ }), r.ins[t].script = n);
204
+ const f = c.allocUnsafe(r.byteLength(!1) + 4);
205
+ return f.writeInt32LE(s, f.length - 4), r.__toBuffer(f, 0, !1), U(f);
206
+ }
207
+ hashForWitnessV1(t, e, s, i, n, r) {
208
+ if (p(
209
+ C(
210
+ b,
211
+ p.arrayOf(_),
212
+ p.arrayOf(W),
213
+ b
214
+ ),
215
+ [t, e, s, i]
216
+ ), s.length !== this.ins.length || e.length !== this.ins.length)
217
+ throw new Error("Must supply prevout script and value for all inputs");
218
+ const f = i === o.SIGHASH_DEFAULT ? o.SIGHASH_ALL : i & o.SIGHASH_OUTPUT_MASK, g = (i & o.SIGHASH_INPUT_MASK) === o.SIGHASH_ANYONECANPAY, S = f === o.SIGHASH_NONE, m = f === o.SIGHASH_SINGLE;
219
+ let E = d, y = d, L = d, O = d, G = d;
220
+ if (!g) {
221
+ let h = A.withCapacity(36 * this.ins.length);
222
+ this.ins.forEach((w) => {
223
+ h.writeSlice(w.hash), h.writeUInt32(w.index);
224
+ }), E = N(h.end()), h = A.withCapacity(8 * this.ins.length), s.forEach((w) => h.writeUInt64(w)), y = N(h.end()), h = A.withCapacity(
225
+ e.map(I).reduce((w, H) => w + H)
226
+ ), e.forEach((w) => h.writeVarSlice(w)), L = N(h.end()), h = A.withCapacity(4 * this.ins.length), this.ins.forEach((w) => h.writeUInt32(w.sequence)), O = N(h.end());
227
+ }
228
+ if (S || m) {
229
+ if (m && t < this.outs.length) {
230
+ const h = this.outs[t], w = A.withCapacity(8 + I(h.script));
231
+ w.writeUInt64(h.value), w.writeVarSlice(h.script), G = N(w.end());
232
+ }
233
+ } else {
234
+ if (!this.outs.length)
235
+ throw new Error("Add outputs to the transaction before signing.");
236
+ const h = this.outs.map((H) => 8 + I(H.script)).reduce((H, Z) => H + Z), w = A.withCapacity(h);
237
+ this.outs.forEach((H) => {
238
+ w.writeUInt64(H.value), w.writeVarSlice(H.script);
239
+ }), G = N(w.end());
240
+ }
241
+ const j = (n ? 2 : 0) + (r ? 1 : 0), X = 174 - (g ? 49 : 0) - (S ? 32 : 0) + (r ? 32 : 0) + (n ? 37 : 0), a = A.withCapacity(X);
242
+ if (a.writeUInt8(i), a.writeInt32(this.version), a.writeUInt32(this.locktime), a.writeSlice(E), a.writeSlice(y), a.writeSlice(L), a.writeSlice(O), S || m || a.writeSlice(G), a.writeUInt8(j), g) {
243
+ const h = this.ins[t];
244
+ a.writeSlice(h.hash), a.writeUInt32(h.index), a.writeUInt64(s[t]), a.writeVarSlice(e[t]), a.writeUInt32(h.sequence);
245
+ } else
246
+ a.writeUInt32(t);
247
+ if (r) {
248
+ const h = A.withCapacity(I(r));
249
+ h.writeVarSlice(r), a.writeSlice(N(h.end()));
250
+ }
251
+ return m && a.writeSlice(G), n && (a.writeSlice(n), a.writeUInt8(0), a.writeUInt32(4294967295)), $(
252
+ "TapSighash",
253
+ c.concat([c.from([0]), a.end()])
254
+ );
255
+ }
256
+ hashForWitnessV0(t, e, s, i) {
257
+ p(C(b, _, W, b), [
258
+ t,
259
+ e,
260
+ s,
261
+ i
262
+ ]);
263
+ let n = c.from([]), r, f = k, u = k, g = k;
264
+ if (i & o.SIGHASH_ANYONECANPAY || (n = c.allocUnsafe(36 * this.ins.length), r = new A(n, 0), this.ins.forEach((m) => {
265
+ r.writeSlice(m.hash), r.writeUInt32(m.index);
266
+ }), u = U(n)), !(i & o.SIGHASH_ANYONECANPAY) && (i & 31) !== o.SIGHASH_SINGLE && (i & 31) !== o.SIGHASH_NONE && (n = c.allocUnsafe(4 * this.ins.length), r = new A(n, 0), this.ins.forEach((m) => {
267
+ r.writeUInt32(m.sequence);
268
+ }), g = U(n)), (i & 31) !== o.SIGHASH_SINGLE && (i & 31) !== o.SIGHASH_NONE) {
269
+ const m = this.outs.reduce((E, y) => E + 8 + I(y.script), 0);
270
+ n = c.allocUnsafe(m), r = new A(n, 0), this.outs.forEach((E) => {
271
+ r.writeUInt64(E.value), r.writeVarSlice(E.script);
272
+ }), f = U(n);
273
+ } else if ((i & 31) === o.SIGHASH_SINGLE && t < this.outs.length) {
274
+ const m = this.outs[t];
275
+ n = c.allocUnsafe(8 + I(m.script)), r = new A(n, 0), r.writeUInt64(m.value), r.writeVarSlice(m.script), f = U(n);
276
+ }
277
+ n = c.allocUnsafe(156 + I(e)), r = new A(n, 0);
278
+ const S = this.ins[t];
279
+ return r.writeInt32(this.version), r.writeSlice(u), r.writeSlice(g), r.writeSlice(S.hash), r.writeUInt32(S.index), r.writeVarSlice(e), r.writeUInt64(s), r.writeUInt32(S.sequence), r.writeSlice(f), r.writeUInt32(this.locktime), r.writeUInt32(i), U(n);
280
+ }
281
+ getHash(t) {
282
+ return t && this.isCoinbase() ? c.alloc(32, 0) : U(this.__toBuffer(void 0, void 0, t));
283
+ }
284
+ getId() {
285
+ return M(this.getHash(!1)).toString("hex");
286
+ }
287
+ toBuffer(t, e) {
288
+ return this.__toBuffer(t, e, !0);
289
+ }
290
+ toHex() {
291
+ return this.toBuffer(void 0, void 0).toString("hex");
292
+ }
293
+ setInputScript(t, e) {
294
+ p(C(V, _), [t, e]), this.ins[t].script = e;
295
+ }
296
+ setWitness(t, e) {
297
+ p(C(V, [_]), [t, e]), this.ins[t].witness = e;
298
+ }
299
+ __toBuffer(t, e, s = !1) {
300
+ t || (t = c.allocUnsafe(this.byteLength(s)));
301
+ const i = new A(t, e || 0);
302
+ i.writeInt32(this.version);
303
+ const n = s && this.hasWitnesses();
304
+ return n && (i.writeUInt8(o.ADVANCED_TRANSACTION_MARKER), i.writeUInt8(o.ADVANCED_TRANSACTION_FLAG)), i.writeVarInt(this.ins.length), this.ins.forEach((r) => {
305
+ i.writeSlice(r.hash), i.writeUInt32(r.index), i.writeVarSlice(r.script), i.writeUInt32(r.sequence);
306
+ }), i.writeVarInt(this.outs.length), this.outs.forEach((r) => {
307
+ ht(r) ? i.writeUInt64(r.value) : i.writeSlice(r.valueBuffer), i.writeVarSlice(r.script);
308
+ }), n && this.ins.forEach((r) => {
309
+ i.writeVector(r.witness);
310
+ }), i.writeUInt32(this.locktime), e !== void 0 ? t.subarray(e, i.offset) : t;
311
+ }
312
+ }
313
+ const wt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
314
+ __proto__: null,
315
+ Transaction: o
316
+ }, Symbol.toStringTag, { value: "Module" })), { typeforce: ct } = K, B = new TypeError("Cannot compute merkle root for zero transactions"), Y = new TypeError("Cannot compute witness commit for non-segwit block");
317
+ class R {
318
+ constructor() {
319
+ this.version = 1, this.prevHash = void 0, this.merkleRoot = void 0, this.timestamp = 0, this.witnessCommit = void 0, this.bits = 0, this.nonce = 0, this.transactions = void 0;
320
+ }
321
+ static fromBuffer(t) {
322
+ if (t.length < 80) throw new Error("Buffer too small (< 80 bytes)");
323
+ const e = new z(t), s = new R();
324
+ if (s.version = e.readInt32(), s.prevHash = e.readSlice(32), s.merkleRoot = e.readSlice(32), s.timestamp = e.readUInt32(), s.bits = e.readUInt32(), s.nonce = e.readUInt32(), t.length === 80) return s;
325
+ const i = () => {
326
+ const f = o.fromBuffer(
327
+ e.buffer.subarray(e.offset),
328
+ !0
329
+ );
330
+ return e.offset += f.byteLength(), f;
331
+ }, n = e.readVarInt();
332
+ s.transactions = [];
333
+ for (let f = 0; f < n; ++f) {
334
+ const u = i();
335
+ s.transactions.push(u);
336
+ }
337
+ const r = s.getWitnessCommit();
338
+ return r && (s.witnessCommit = r), s;
339
+ }
340
+ static fromHex(t) {
341
+ return R.fromBuffer(c.from(t, "hex"));
342
+ }
343
+ static calculateTarget(t) {
344
+ const e = ((t & 4278190080) >> 24) - 3, s = t & 8388607, i = c.alloc(32, 0);
345
+ return i.writeUIntBE(s, 29 - e, 3), i;
346
+ }
347
+ static calculateMerkleRoot(t, e) {
348
+ if (ct([{ getHash: J }], t), t.length === 0) throw B;
349
+ if (e && !q(t)) throw Y;
350
+ const s = t.map((n) => n.getHash(e)), i = x(s, U);
351
+ return e ? U(c.concat([i, t[0].ins[0].witness[0]])) : i;
352
+ }
353
+ getWitnessCommit() {
354
+ if (!q(this.transactions)) return null;
355
+ const t = this.transactions[0].outs.filter(
356
+ (s) => s.script.subarray(0, 6).equals(c.from("6a24aa21a9ed", "hex"))
357
+ ).map((s) => s.script.subarray(6, 38));
358
+ if (t.length === 0) return null;
359
+ const e = t[t.length - 1];
360
+ return e instanceof c && e.length === 32 ? e : null;
361
+ }
362
+ hasWitnessCommit() {
363
+ return this.witnessCommit instanceof c && this.witnessCommit.length === 32 || this.getWitnessCommit() !== null;
364
+ }
365
+ hasWitness() {
366
+ return at(this.transactions);
367
+ }
368
+ weight() {
369
+ const t = this.byteLength(!1, !1), e = this.byteLength(!1, !0);
370
+ return t * 3 + e;
371
+ }
372
+ byteLength(t, e = !0) {
373
+ return t || !this.transactions ? 80 : 80 + v(this.transactions.length) + this.transactions.reduce((s, i) => s + i.byteLength(e), 0);
374
+ }
375
+ getHash() {
376
+ return U(this.toBuffer(!0));
377
+ }
378
+ getId() {
379
+ return M(this.getHash()).toString("hex");
380
+ }
381
+ getUTCDate() {
382
+ const t = /* @__PURE__ */ new Date(0);
383
+ return t.setUTCSeconds(this.timestamp), t;
384
+ }
385
+ // TODO: buffer, offset compatibility
386
+ toBuffer(t) {
387
+ const e = c.allocUnsafe(this.byteLength(t)), s = new A(e);
388
+ if (s.writeInt32(this.version), s.writeSlice(this.prevHash), s.writeSlice(this.merkleRoot), s.writeUInt32(this.timestamp), s.writeUInt32(this.bits), s.writeUInt32(this.nonce), t || !this.transactions) return e;
389
+ const i = tt(this.transactions.length, e, s.offset);
390
+ return s.offset += i.bytes, this.transactions.forEach((n) => {
391
+ const r = n.byteLength();
392
+ n.toBuffer(e, s.offset), s.offset += r;
393
+ }), e;
394
+ }
395
+ toHex(t) {
396
+ return this.toBuffer(t).toString("hex");
397
+ }
398
+ checkTxRoots() {
399
+ const t = this.hasWitnessCommit();
400
+ return !t && this.hasWitness() ? !1 : this.__checkMerkleRoot() && (t ? this.__checkWitnessCommit() : !0);
401
+ }
402
+ checkProofOfWork() {
403
+ const t = M(this.getHash()), e = R.calculateTarget(this.bits);
404
+ return t.compare(e) <= 0;
405
+ }
406
+ __checkMerkleRoot() {
407
+ if (!this.transactions) throw B;
408
+ const t = R.calculateMerkleRoot(this.transactions);
409
+ return this.merkleRoot.compare(t) === 0;
410
+ }
411
+ __checkWitnessCommit() {
412
+ if (!this.transactions) throw B;
413
+ if (!this.hasWitnessCommit()) throw Y;
414
+ const t = R.calculateMerkleRoot(this.transactions, !0);
415
+ return this.witnessCommit.compare(t) === 0;
416
+ }
417
+ }
418
+ function q(l) {
419
+ return l instanceof Array && l[0] && l[0].ins && l[0].ins instanceof Array && l[0].ins[0] && l[0].ins[0].witness && l[0].ins[0].witness instanceof Array && l[0].ins[0].witness.length > 0;
420
+ }
421
+ function at(l) {
422
+ return l instanceof Array && l.some(
423
+ (t) => typeof t == "object" && t.ins instanceof Array && t.ins.some(
424
+ (e) => typeof e == "object" && e.witness instanceof Array && e.witness.length > 0
425
+ )
426
+ );
427
+ }
428
+ export {
429
+ R as B,
430
+ o as T,
431
+ wt as a
432
+ };