@btc-vision/bitcoin 6.3.0 → 6.3.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 (260) hide show
  1. package/.babelrc +4 -0
  2. package/.gitattributes +2 -0
  3. package/.nyc_output/6368a5b2-daa5-4821-8ed0-b742d6fc7eab.json +1 -0
  4. package/.nyc_output/processinfo/6368a5b2-daa5-4821-8ed0-b742d6fc7eab.json +1 -0
  5. package/.nyc_output/processinfo/index.json +1 -0
  6. package/.prettierrc.json +12 -0
  7. package/CHANGELOG.md +403 -0
  8. package/CONTRIBUTING.md +83 -0
  9. package/browser/address.d.ts +16 -0
  10. package/{src → browser}/bip66.d.ts +6 -7
  11. package/{src → browser}/block.d.ts +29 -30
  12. package/{src → browser}/bufferutils.d.ts +34 -54
  13. package/browser/crypto/crypto.d.ts +1 -0
  14. package/{src → browser}/crypto.d.ts +13 -18
  15. package/browser/ecc_lib.d.ts +3 -0
  16. package/browser/hooks/AdvancedSignatureManager.d.ts +16 -0
  17. package/{src → browser}/hooks/HookedSigner.d.ts +4 -4
  18. package/browser/hooks/SignatureManager.d.ts +13 -0
  19. package/browser/index.d.ts +58 -0
  20. package/browser/index.js +2 -0
  21. package/browser/index.js.LICENSE.txt +14 -0
  22. package/browser/merkle.d.ts +1 -0
  23. package/browser/networks.d.ts +23 -0
  24. package/{src → browser}/ops.d.ts +126 -126
  25. package/browser/payments/bip341.d.ts +23 -0
  26. package/browser/payments/embed.d.ts +2 -0
  27. package/browser/payments/index.d.ts +41 -0
  28. package/{src → browser}/payments/lazy.d.ts +2 -2
  29. package/browser/payments/p2ms.d.ts +2 -0
  30. package/browser/payments/p2pk.d.ts +2 -0
  31. package/browser/payments/p2pkh.d.ts +2 -0
  32. package/browser/payments/p2sh.d.ts +2 -0
  33. package/browser/payments/p2tr.d.ts +2 -0
  34. package/browser/payments/p2wpkh.d.ts +2 -0
  35. package/browser/payments/p2wsh.d.ts +2 -0
  36. package/browser/psbt/bip371.d.ts +16 -0
  37. package/browser/psbt/psbtutils.d.ts +26 -0
  38. package/{src → browser}/psbt.d.ts +167 -235
  39. package/browser/push_data.d.ts +7 -0
  40. package/browser/script.d.ts +17 -0
  41. package/browser/script_number.d.ts +2 -0
  42. package/browser/script_signature.d.ts +7 -0
  43. package/{src → browser}/transaction.d.ts +48 -60
  44. package/{src → browser}/types.d.ts +37 -54
  45. package/build/address.d.ts +16 -0
  46. package/build/address.js +148 -0
  47. package/build/bip66.d.ts +6 -0
  48. package/build/bip66.js +99 -0
  49. package/build/block.d.ts +29 -0
  50. package/build/block.js +181 -0
  51. package/build/bufferutils.d.ts +34 -0
  52. package/build/bufferutils.js +141 -0
  53. package/build/crypto/crypto.d.ts +1 -0
  54. package/build/crypto/crypto.js +1 -0
  55. package/build/crypto.d.ts +13 -0
  56. package/build/crypto.js +87 -0
  57. package/build/ecc_lib.d.ts +3 -0
  58. package/build/ecc_lib.js +61 -0
  59. package/build/hooks/AdvancedSignatureManager.d.ts +16 -0
  60. package/build/hooks/AdvancedSignatureManager.js +52 -0
  61. package/build/hooks/HookedSigner.d.ts +4 -0
  62. package/build/hooks/HookedSigner.js +64 -0
  63. package/build/hooks/SignatureManager.d.ts +13 -0
  64. package/build/hooks/SignatureManager.js +45 -0
  65. package/build/index.d.ts +58 -0
  66. package/build/index.js +32 -0
  67. package/build/merkle.d.ts +1 -0
  68. package/build/merkle.js +19 -0
  69. package/build/networks.d.ts +23 -0
  70. package/build/networks.js +121 -0
  71. package/build/ops.d.ts +126 -0
  72. package/{src → build}/ops.js +127 -131
  73. package/build/payments/bip341.d.ts +23 -0
  74. package/build/payments/bip341.js +82 -0
  75. package/build/payments/embed.d.ts +2 -0
  76. package/build/payments/embed.js +39 -0
  77. package/build/payments/index.d.ts +41 -0
  78. package/build/payments/index.js +10 -0
  79. package/build/payments/lazy.d.ts +2 -0
  80. package/{src → build}/payments/lazy.js +28 -32
  81. package/build/payments/p2ms.d.ts +2 -0
  82. package/{src → build}/payments/p2ms.js +128 -158
  83. package/build/payments/p2pk.d.ts +2 -0
  84. package/build/payments/p2pk.js +68 -0
  85. package/build/payments/p2pkh.d.ts +2 -0
  86. package/build/payments/p2pkh.js +135 -0
  87. package/build/payments/p2sh.d.ts +2 -0
  88. package/build/payments/p2sh.js +175 -0
  89. package/build/payments/p2tr.d.ts +2 -0
  90. package/build/payments/p2tr.js +254 -0
  91. package/build/payments/p2wpkh.d.ts +2 -0
  92. package/build/payments/p2wpkh.js +130 -0
  93. package/build/payments/p2wsh.d.ts +2 -0
  94. package/build/payments/p2wsh.js +180 -0
  95. package/build/psbt/bip371.d.ts +16 -0
  96. package/build/psbt/bip371.js +246 -0
  97. package/build/psbt/psbtutils.d.ts +26 -0
  98. package/build/psbt/psbtutils.js +170 -0
  99. package/build/psbt.d.ts +167 -0
  100. package/build/psbt.js +1305 -0
  101. package/build/push_data.d.ts +7 -0
  102. package/build/push_data.js +57 -0
  103. package/build/script.d.ts +17 -0
  104. package/build/script.js +167 -0
  105. package/build/script_number.d.ts +2 -0
  106. package/build/script_number.js +49 -0
  107. package/build/script_signature.d.ts +7 -0
  108. package/build/script_signature.js +49 -0
  109. package/build/transaction.d.ts +48 -0
  110. package/build/transaction.js +445 -0
  111. package/build/types.d.ts +37 -0
  112. package/build/types.js +73 -0
  113. package/cjs/package.json +3 -0
  114. package/eslint.config.js +56 -0
  115. package/gulpfile.js +42 -0
  116. package/package.json +105 -50
  117. package/src/{address.js → address.ts} +93 -73
  118. package/src/{bip66.js → bip66.ts} +23 -19
  119. package/src/{block.js → block.ts} +114 -105
  120. package/src/{bufferutils.js → bufferutils.ts} +65 -67
  121. package/src/crypto/crypto-browser.js +75 -0
  122. package/src/crypto/crypto.ts +1 -0
  123. package/src/crypto.ts +108 -0
  124. package/src/{ecc_lib.js → ecc_lib.ts} +25 -53
  125. package/src/hooks/{AdvancedSignatureManager.js → AdvancedSignatureManager.ts} +34 -18
  126. package/src/hooks/HookedSigner.ts +108 -0
  127. package/src/hooks/{SignatureManager.js → SignatureManager.ts} +26 -14
  128. package/src/index.ts +86 -0
  129. package/src/{merkle.js → merkle.ts} +8 -7
  130. package/src/networks.ts +235 -0
  131. package/src/ops.ts +282 -0
  132. package/src/payments/bip341.ts +140 -0
  133. package/src/payments/embed.ts +55 -0
  134. package/src/payments/{index.d.ts → index.ts} +20 -10
  135. package/src/payments/lazy.ts +28 -0
  136. package/src/payments/p2ms.ts +150 -0
  137. package/src/payments/{p2pk.js → p2pk.ts} +32 -29
  138. package/src/payments/{p2pkh.js → p2pkh.ts} +53 -47
  139. package/src/payments/{p2sh.js → p2sh.ts} +72 -71
  140. package/src/payments/{p2tr.js → p2tr.ts} +114 -125
  141. package/src/payments/{p2wpkh.js → p2wpkh.ts} +51 -56
  142. package/src/payments/{p2wsh.js → p2wsh.ts} +69 -81
  143. package/src/psbt/{bip371.js → bip371.ts} +195 -178
  144. package/src/psbt/psbtutils.ts +299 -0
  145. package/src/{psbt.js → psbt.ts} +1048 -699
  146. package/src/{push_data.js → push_data.ts} +35 -21
  147. package/src/{script.js → script.ts} +93 -77
  148. package/src/{script_number.js → script_number.ts} +15 -21
  149. package/src/{script_signature.js → script_signature.ts} +26 -14
  150. package/src/{transaction.js → transaction.ts} +247 -167
  151. package/src/types.ts +122 -0
  152. package/test/address.spec.js +124 -0
  153. package/test/address.spec.ts +177 -0
  154. package/test/bitcoin.core.spec.js +170 -0
  155. package/test/bitcoin.core.spec.ts +234 -0
  156. package/test/block.spec.js +141 -0
  157. package/test/block.spec.ts +194 -0
  158. package/test/bufferutils.spec.js +427 -0
  159. package/test/bufferutils.spec.ts +513 -0
  160. package/test/crypto.spec.js +41 -0
  161. package/test/crypto.spec.ts +55 -0
  162. package/test/fixtures/address.json +329 -0
  163. package/test/fixtures/block.json +148 -0
  164. package/test/fixtures/bufferutils.json +102 -0
  165. package/test/fixtures/core/README.md +26 -0
  166. package/test/fixtures/core/base58_encode_decode.json +50 -0
  167. package/test/fixtures/core/base58_keys_invalid.json +152 -0
  168. package/test/fixtures/core/base58_keys_valid.json +452 -0
  169. package/test/fixtures/core/blocks.json +27 -0
  170. package/test/fixtures/core/sig_canonical.json +7 -0
  171. package/test/fixtures/core/sig_noncanonical.json +33 -0
  172. package/test/fixtures/core/sighash.json +3505 -0
  173. package/test/fixtures/core/tx_valid.json +2023 -0
  174. package/test/fixtures/crypto.json +43 -0
  175. package/test/fixtures/ecdsa.json +217 -0
  176. package/test/fixtures/ecpair.json +141 -0
  177. package/test/fixtures/embed.json +108 -0
  178. package/test/fixtures/p2ms.json +434 -0
  179. package/test/fixtures/p2pk.json +179 -0
  180. package/test/fixtures/p2pkh.json +276 -0
  181. package/test/fixtures/p2sh.json +508 -0
  182. package/test/fixtures/p2tr.json +1198 -0
  183. package/test/fixtures/p2wpkh.json +290 -0
  184. package/test/fixtures/p2wsh.json +489 -0
  185. package/test/fixtures/psbt.json +924 -0
  186. package/test/fixtures/script.json +465 -0
  187. package/test/fixtures/script_number.json +225 -0
  188. package/test/fixtures/signature.json +140 -0
  189. package/test/fixtures/transaction.json +916 -0
  190. package/test/integration/_regtest.js +7 -0
  191. package/test/integration/_regtest.ts +6 -0
  192. package/test/integration/addresses.spec.js +116 -0
  193. package/test/integration/addresses.spec.ts +154 -0
  194. package/test/integration/bip32.spec.js +85 -0
  195. package/test/integration/bip32.spec.ts +151 -0
  196. package/test/integration/blocks.spec.js +26 -0
  197. package/test/integration/blocks.spec.ts +28 -0
  198. package/test/integration/cltv.spec.js +199 -0
  199. package/test/integration/cltv.spec.ts +283 -0
  200. package/test/integration/csv.spec.js +362 -0
  201. package/test/integration/csv.spec.ts +527 -0
  202. package/test/integration/payments.spec.js +98 -0
  203. package/test/integration/payments.spec.ts +135 -0
  204. package/test/integration/taproot.spec.js +532 -0
  205. package/test/integration/taproot.spec.ts +707 -0
  206. package/test/integration/transactions.spec.js +561 -0
  207. package/test/integration/transactions.spec.ts +769 -0
  208. package/test/payments.spec.js +97 -0
  209. package/test/payments.spec.ts +125 -0
  210. package/test/payments.utils.js +190 -0
  211. package/test/payments.utils.ts +208 -0
  212. package/test/psbt.spec.js +1044 -0
  213. package/test/psbt.spec.ts +1414 -0
  214. package/test/script.spec.js +151 -0
  215. package/test/script.spec.ts +210 -0
  216. package/test/script_number.spec.js +24 -0
  217. package/test/script_number.spec.ts +29 -0
  218. package/test/script_signature.spec.js +52 -0
  219. package/test/script_signature.spec.ts +66 -0
  220. package/test/transaction.spec.js +269 -0
  221. package/test/transaction.spec.ts +387 -0
  222. package/test/ts-node-register.js +5 -0
  223. package/test/tsconfig.json +45 -0
  224. package/test/types.spec.js +46 -0
  225. package/test/types.spec.ts +58 -0
  226. package/tsconfig.base.json +27 -0
  227. package/tsconfig.json +19 -0
  228. package/tsconfig.webpack.json +18 -0
  229. package/webpack.config.js +79 -0
  230. package/src/address.d.ts +0 -42
  231. package/src/crypto.js +0 -128
  232. package/src/ecc_lib.d.ts +0 -17
  233. package/src/hooks/AdvancedSignatureManager.d.ts +0 -44
  234. package/src/hooks/HookedSigner.js +0 -90
  235. package/src/hooks/SignatureManager.d.ts +0 -35
  236. package/src/index.d.ts +0 -42
  237. package/src/index.js +0 -87
  238. package/src/merkle.d.ts +0 -10
  239. package/src/networks.d.ts +0 -29
  240. package/src/networks.js +0 -71
  241. package/src/payments/bip341.d.ts +0 -49
  242. package/src/payments/bip341.js +0 -124
  243. package/src/payments/embed.d.ts +0 -9
  244. package/src/payments/embed.js +0 -54
  245. package/src/payments/index.js +0 -69
  246. package/src/payments/p2ms.d.ts +0 -9
  247. package/src/payments/p2pk.d.ts +0 -10
  248. package/src/payments/p2pkh.d.ts +0 -10
  249. package/src/payments/p2sh.d.ts +0 -10
  250. package/src/payments/p2tr.d.ts +0 -10
  251. package/src/payments/p2wpkh.d.ts +0 -10
  252. package/src/payments/p2wsh.d.ts +0 -10
  253. package/src/psbt/bip371.d.ts +0 -42
  254. package/src/psbt/psbtutils.d.ts +0 -64
  255. package/src/psbt/psbtutils.js +0 -191
  256. package/src/push_data.d.ts +0 -29
  257. package/src/script.d.ts +0 -42
  258. package/src/script_number.d.ts +0 -19
  259. package/src/script_signature.d.ts +0 -21
  260. package/src/types.js +0 -106
@@ -1,26 +1,23 @@
1
- 'use strict';
2
- Object.defineProperty(exports, '__esModule', { value: true });
3
- exports.p2wsh = void 0;
4
- const bcrypto = require('../crypto');
5
- const networks_1 = require('../networks');
6
- const bscript = require('../script');
7
- const types_1 = require('../types');
8
- const lazy = require('./lazy');
9
- const bech32_1 = require('bech32');
1
+ import { bech32 } from 'bech32';
2
+ import * as bcrypto from '../crypto.js';
3
+ import { bitcoin as BITCOIN_NETWORK } from '../networks.js';
4
+ import * as bscript from '../script.js';
5
+ import { isPoint, stacksEqual, typeforce as typef } from '../types.js';
6
+ import { Payment, PaymentOpts, StackElement, StackFunction } from './index.js';
7
+ import * as lazy from './lazy.js';
8
+
10
9
  const OPS = bscript.OPS;
10
+
11
11
  const EMPTY_BUFFER = Buffer.alloc(0);
12
- function chunkHasUncompressedPubkey(chunk) {
13
- if (
14
- Buffer.isBuffer(chunk) &&
15
- chunk.length === 65 &&
16
- chunk[0] === 0x04 &&
17
- (0, types_1.isPoint)(chunk)
18
- ) {
12
+
13
+ function chunkHasUncompressedPubkey(chunk: StackElement): boolean {
14
+ if (Buffer.isBuffer(chunk) && chunk.length === 65 && chunk[0] === 0x04 && isPoint(chunk)) {
19
15
  return true;
20
16
  } else {
21
17
  return false;
22
18
  }
23
19
  }
20
+
24
21
  // input: <>
25
22
  // witness: [redeemScriptSig ...] {redeemScript}
26
23
  // output: OP_0 {sha256(redeemScript)}
@@ -32,35 +29,35 @@ function chunkHasUncompressedPubkey(chunk) {
32
29
  * @returns The P2WSH payment object.
33
30
  * @throws {TypeError} If the required data is missing or invalid.
34
31
  */
35
- function p2wsh(a, opts) {
32
+ export function p2wsh(a: Payment, opts?: PaymentOpts): Payment {
36
33
  if (!a.address && !a.hash && !a.output && !a.redeem && !a.witness)
37
34
  throw new TypeError('Not enough data');
38
35
  opts = Object.assign({ validate: true }, opts || {});
39
- (0, types_1.typeforce)(
36
+
37
+ typef(
40
38
  {
41
- network: types_1.typeforce.maybe(types_1.typeforce.Object),
42
- address: types_1.typeforce.maybe(types_1.typeforce.String),
43
- hash: types_1.typeforce.maybe(types_1.typeforce.BufferN(32)),
44
- output: types_1.typeforce.maybe(types_1.typeforce.BufferN(34)),
45
- redeem: types_1.typeforce.maybe({
46
- input: types_1.typeforce.maybe(types_1.typeforce.Buffer),
47
- network: types_1.typeforce.maybe(types_1.typeforce.Object),
48
- output: types_1.typeforce.maybe(types_1.typeforce.Buffer),
49
- witness: types_1.typeforce.maybe(
50
- types_1.typeforce.arrayOf(types_1.typeforce.Buffer),
51
- ),
39
+ network: typef.maybe(typef.Object),
40
+
41
+ address: typef.maybe(typef.String),
42
+ hash: typef.maybe(typef.BufferN(32)),
43
+ output: typef.maybe(typef.BufferN(34)),
44
+
45
+ redeem: typef.maybe({
46
+ input: typef.maybe(typef.Buffer),
47
+ network: typef.maybe(typef.Object),
48
+ output: typef.maybe(typef.Buffer),
49
+ witness: typef.maybe(typef.arrayOf(typef.Buffer)),
52
50
  }),
53
- input: types_1.typeforce.maybe(types_1.typeforce.BufferN(0)),
54
- witness: types_1.typeforce.maybe(
55
- types_1.typeforce.arrayOf(types_1.typeforce.Buffer),
56
- ),
51
+ input: typef.maybe(typef.BufferN(0)),
52
+ witness: typef.maybe(typef.arrayOf(typef.Buffer)),
57
53
  },
58
54
  a,
59
55
  );
56
+
60
57
  const _address = lazy.value(() => {
61
- const result = bech32_1.bech32.decode(a.address);
58
+ const result = bech32.decode(a.address!);
62
59
  const version = result.words.shift();
63
- const data = bech32_1.bech32.fromWords(result.words);
60
+ const data = bech32.fromWords(result.words);
64
61
  return {
65
62
  version,
66
63
  prefix: result.prefix,
@@ -68,18 +65,21 @@ function p2wsh(a, opts) {
68
65
  };
69
66
  });
70
67
  const _rchunks = lazy.value(() => {
71
- return bscript.decompile(a.redeem.input);
72
- });
68
+ return bscript.decompile(a.redeem!.input!);
69
+ }) as StackFunction;
70
+
73
71
  let network = a.network;
74
72
  if (!network) {
75
- network = (a.redeem && a.redeem.network) || networks_1.bitcoin;
73
+ network = (a.redeem && a.redeem.network) || BITCOIN_NETWORK;
76
74
  }
77
- const o = { network };
75
+
76
+ const o: Payment = { network };
77
+
78
78
  lazy.prop(o, 'address', () => {
79
79
  if (!o.hash) return;
80
- const words = bech32_1.bech32.toWords(o.hash);
80
+ const words = bech32.toWords(o.hash);
81
81
  words.unshift(0x00);
82
- return bech32_1.bech32.encode(network.bech32, words);
82
+ return bech32.encode(network!.bech32, words);
83
83
  });
84
84
  lazy.prop(o, 'hash', () => {
85
85
  if (a.output) return a.output.slice(2);
@@ -112,54 +112,52 @@ function p2wsh(a, opts) {
112
112
  a.redeem.output.length > 0
113
113
  ) {
114
114
  const stack = bscript.toStack(_rchunks());
115
+
115
116
  // assign, and blank the existing input
116
117
  o.redeem = Object.assign({ witness: stack }, a.redeem);
117
118
  o.redeem.input = EMPTY_BUFFER;
118
- return [].concat(stack, a.redeem.output);
119
+ return ([] as Buffer[]).concat(stack, a.redeem.output);
119
120
  }
121
+
120
122
  if (!a.redeem) return;
121
123
  if (!a.redeem.output) return;
122
124
  if (!a.redeem.witness) return;
123
- return [].concat(a.redeem.witness, a.redeem.output);
125
+ return ([] as Buffer[]).concat(a.redeem.witness, a.redeem.output);
124
126
  });
125
127
  lazy.prop(o, 'name', () => {
126
128
  const nameParts = ['p2wsh'];
127
- if (o.redeem !== undefined && o.redeem.name !== undefined)
128
- nameParts.push(o.redeem.name);
129
+ if (o.redeem !== undefined && o.redeem.name !== undefined) nameParts.push(o.redeem.name!);
129
130
  return nameParts.join('-');
130
131
  });
132
+
131
133
  // extended validation
132
134
  if (opts.validate) {
133
- let hash = Buffer.from([]);
135
+ let hash: Buffer = Buffer.from([]);
134
136
  if (a.address) {
135
137
  if (_address().prefix !== network.bech32)
136
138
  throw new TypeError('Invalid prefix or Network mismatch');
137
- if (_address().version !== 0x00)
138
- throw new TypeError('Invalid address version');
139
- if (_address().data.length !== 32)
140
- throw new TypeError('Invalid address data');
139
+ if (_address().version !== 0x00) throw new TypeError('Invalid address version');
140
+ if (_address().data.length !== 32) throw new TypeError('Invalid address data');
141
141
  hash = _address().data;
142
142
  }
143
+
143
144
  if (a.hash) {
144
- if (hash.length > 0 && !hash.equals(a.hash))
145
- throw new TypeError('Hash mismatch');
145
+ if (hash.length > 0 && !hash.equals(a.hash)) throw new TypeError('Hash mismatch');
146
146
  else hash = a.hash;
147
147
  }
148
+
148
149
  if (a.output) {
149
- if (
150
- a.output.length !== 34 ||
151
- a.output[0] !== OPS.OP_0 ||
152
- a.output[1] !== 0x20
153
- )
150
+ if (a.output.length !== 34 || a.output[0] !== OPS.OP_0 || a.output[1] !== 0x20)
154
151
  throw new TypeError('Output is invalid');
155
152
  const hash2 = a.output.slice(2);
156
- if (hash.length > 0 && !hash.equals(hash2))
157
- throw new TypeError('Hash mismatch');
153
+ if (hash.length > 0 && !hash.equals(hash2)) throw new TypeError('Hash mismatch');
158
154
  else hash = hash2;
159
155
  }
156
+
160
157
  if (a.redeem) {
161
158
  if (a.redeem.network && a.redeem.network !== network)
162
159
  throw new TypeError('Network mismatch');
160
+
163
161
  // is there two redeem sources?
164
162
  if (
165
163
  a.redeem.input &&
@@ -168,59 +166,49 @@ function p2wsh(a, opts) {
168
166
  a.redeem.witness.length > 0
169
167
  )
170
168
  throw new TypeError('Ambiguous witness source');
169
+
171
170
  // is the redeem output non-empty/valid?
172
171
  if (a.redeem.output) {
173
172
  const decompile = bscript.decompile(a.redeem.output);
174
173
  if (!decompile || decompile.length < 1)
175
174
  throw new TypeError('Redeem.output is invalid');
176
175
  if (a.redeem.output.byteLength > 3600)
177
- throw new TypeError(
178
- 'Redeem.output unspendable if larger than 3600 bytes',
179
- );
176
+ throw new TypeError('Redeem.output unspendable if larger than 3600 bytes');
180
177
  if (bscript.countNonPushOnlyOPs(decompile) > 201)
181
178
  throw new TypeError(
182
179
  'Redeem.output unspendable with more than 201 non-push ops',
183
180
  );
181
+
184
182
  // match hash against other sources
185
183
  const hash2 = bcrypto.sha256(a.redeem.output);
186
- if (hash.length > 0 && !hash.equals(hash2))
187
- throw new TypeError('Hash mismatch');
184
+ if (hash.length > 0 && !hash.equals(hash2)) throw new TypeError('Hash mismatch');
188
185
  else hash = hash2;
189
186
  }
187
+
190
188
  if (a.redeem.input && !bscript.isPushOnly(_rchunks()))
191
189
  throw new TypeError('Non push-only scriptSig');
192
- if (
193
- a.witness &&
194
- a.redeem.witness &&
195
- !(0, types_1.stacksEqual)(a.witness, a.redeem.witness)
196
- )
190
+ if (a.witness && a.redeem.witness && !stacksEqual(a.witness, a.redeem.witness))
197
191
  throw new TypeError('Witness and redeem.witness mismatch');
198
192
  if (
199
- (a.redeem.input &&
200
- _rchunks().some(chunkHasUncompressedPubkey)) ||
193
+ (a.redeem.input && _rchunks().some(chunkHasUncompressedPubkey)) ||
201
194
  (a.redeem.output &&
202
- (bscript.decompile(a.redeem.output) || []).some(
203
- chunkHasUncompressedPubkey,
204
- ))
195
+ (bscript.decompile(a.redeem.output) || []).some(chunkHasUncompressedPubkey))
205
196
  ) {
206
- throw new TypeError(
207
- 'redeem.input or redeem.output contains uncompressed pubkey',
208
- );
197
+ throw new TypeError('redeem.input or redeem.output contains uncompressed pubkey');
209
198
  }
210
199
  }
200
+
211
201
  if (a.witness && a.witness.length > 0) {
212
202
  const wScript = a.witness[a.witness.length - 1];
213
203
  if (a.redeem && a.redeem.output && !a.redeem.output.equals(wScript))
214
204
  throw new TypeError('Witness and redeem.output mismatch');
215
205
  if (
216
206
  a.witness.some(chunkHasUncompressedPubkey) ||
217
- (bscript.decompile(wScript) || []).some(
218
- chunkHasUncompressedPubkey,
219
- )
207
+ (bscript.decompile(wScript) || []).some(chunkHasUncompressedPubkey)
220
208
  )
221
209
  throw new TypeError('Witness contains uncompressed pubkey');
222
210
  }
223
211
  }
212
+
224
213
  return Object.assign(o, a);
225
214
  }
226
- exports.p2wsh = p2wsh;