@btc-vision/bitcoin 6.3.1 → 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 (259) 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 -238
  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.js → networks.ts} +44 -29
  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} +191 -174
  144. package/src/psbt/psbtutils.ts +299 -0
  145. package/src/{psbt.js → psbt.ts} +1025 -679
  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 -83
  240. package/src/payments/bip341.d.ts +0 -49
  241. package/src/payments/bip341.js +0 -124
  242. package/src/payments/embed.d.ts +0 -9
  243. package/src/payments/embed.js +0 -54
  244. package/src/payments/index.js +0 -69
  245. package/src/payments/p2ms.d.ts +0 -9
  246. package/src/payments/p2pk.d.ts +0 -10
  247. package/src/payments/p2pkh.d.ts +0 -10
  248. package/src/payments/p2sh.d.ts +0 -10
  249. package/src/payments/p2tr.d.ts +0 -10
  250. package/src/payments/p2wpkh.d.ts +0 -10
  251. package/src/payments/p2wsh.d.ts +0 -10
  252. package/src/psbt/bip371.d.ts +0 -42
  253. package/src/psbt/psbtutils.d.ts +0 -64
  254. package/src/psbt/psbtutils.js +0 -191
  255. package/src/push_data.d.ts +0 -29
  256. package/src/script.d.ts +0 -42
  257. package/src/script_number.d.ts +0 -19
  258. package/src/script_signature.d.ts +0 -21
  259. package/src/types.js +0 -106
@@ -0,0 +1,434 @@
1
+ {
2
+ "valid": [
3
+ {
4
+ "description": "output from output",
5
+ "arguments": {
6
+ "output": "OP_2 030000000000000000000000000000000000000000000000000000000000000001 030000000000000000000000000000000000000000000000000000000000000002 OP_2 OP_CHECKMULTISIG"
7
+ },
8
+ "options": {},
9
+ "expected": {
10
+ "m": 2,
11
+ "n": 2,
12
+ "name": "p2ms(2 of 2)",
13
+ "output": "OP_2 030000000000000000000000000000000000000000000000000000000000000001 030000000000000000000000000000000000000000000000000000000000000002 OP_2 OP_CHECKMULTISIG",
14
+ "pubkeys": [
15
+ "030000000000000000000000000000000000000000000000000000000000000001",
16
+ "030000000000000000000000000000000000000000000000000000000000000002"
17
+ ],
18
+ "signatures": null,
19
+ "input": null,
20
+ "witness": null
21
+ }
22
+ },
23
+ {
24
+ "description": "output from m/pubkeys",
25
+ "arguments": {
26
+ "m": 1,
27
+ "pubkeys": [
28
+ "030000000000000000000000000000000000000000000000000000000000000001",
29
+ "030000000000000000000000000000000000000000000000000000000000000002"
30
+ ]
31
+ },
32
+ "expected": {
33
+ "m": 1,
34
+ "n": 2,
35
+ "name": "p2ms(1 of 2)",
36
+ "output": "OP_1 030000000000000000000000000000000000000000000000000000000000000001 030000000000000000000000000000000000000000000000000000000000000002 OP_2 OP_CHECKMULTISIG",
37
+ "pubkeys": [
38
+ "030000000000000000000000000000000000000000000000000000000000000001",
39
+ "030000000000000000000000000000000000000000000000000000000000000002"
40
+ ],
41
+ "signatures": null,
42
+ "input": null,
43
+ "witness": null
44
+ }
45
+ },
46
+ {
47
+ "description": "input/output from m/pubkeys/signatures",
48
+ "arguments": {
49
+ "m": 2,
50
+ "pubkeys": [
51
+ "030000000000000000000000000000000000000000000000000000000000000001",
52
+ "030000000000000000000000000000000000000000000000000000000000000002",
53
+ "030000000000000000000000000000000000000000000000000000000000000003"
54
+ ],
55
+ "signatures": [
56
+ "300602010002010001",
57
+ "300602010102010001"
58
+ ]
59
+ },
60
+ "expected": {
61
+ "m": 2,
62
+ "n": 3,
63
+ "name": "p2ms(2 of 3)",
64
+ "output": "OP_2 030000000000000000000000000000000000000000000000000000000000000001 030000000000000000000000000000000000000000000000000000000000000002 030000000000000000000000000000000000000000000000000000000000000003 OP_3 OP_CHECKMULTISIG",
65
+ "pubkeys": [
66
+ "030000000000000000000000000000000000000000000000000000000000000001",
67
+ "030000000000000000000000000000000000000000000000000000000000000002",
68
+ "030000000000000000000000000000000000000000000000000000000000000003"
69
+ ],
70
+ "signatures": [
71
+ "300602010002010001",
72
+ "300602010102010001"
73
+ ],
74
+ "input": "OP_0 300602010002010001 300602010102010001",
75
+ "witness": []
76
+ }
77
+ },
78
+ {
79
+ "description": "input/output from output/signatures",
80
+ "arguments": {
81
+ "output": "OP_2 030000000000000000000000000000000000000000000000000000000000000001 030000000000000000000000000000000000000000000000000000000000000002 030000000000000000000000000000000000000000000000000000000000000003 OP_3 OP_CHECKMULTISIG",
82
+ "signatures": [
83
+ "300602010002010001",
84
+ "300602010102010001"
85
+ ]
86
+ },
87
+ "expected": {
88
+ "m": 2,
89
+ "n": 3,
90
+ "name": "p2ms(2 of 3)",
91
+ "output": "OP_2 030000000000000000000000000000000000000000000000000000000000000001 030000000000000000000000000000000000000000000000000000000000000002 030000000000000000000000000000000000000000000000000000000000000003 OP_3 OP_CHECKMULTISIG",
92
+ "pubkeys": [
93
+ "030000000000000000000000000000000000000000000000000000000000000001",
94
+ "030000000000000000000000000000000000000000000000000000000000000002",
95
+ "030000000000000000000000000000000000000000000000000000000000000003"
96
+ ],
97
+ "signatures": [
98
+ "300602010002010001",
99
+ "300602010102010001"
100
+ ],
101
+ "input": "OP_0 300602010002010001 300602010102010001",
102
+ "witness": []
103
+ }
104
+ },
105
+ {
106
+ "description": "input/output from input/output",
107
+ "arguments": {
108
+ "output": "OP_2 030000000000000000000000000000000000000000000000000000000000000001 030000000000000000000000000000000000000000000000000000000000000002 030000000000000000000000000000000000000000000000000000000000000003 OP_3 OP_CHECKMULTISIG",
109
+ "input": "OP_0 300602010002010001 300602010102010001"
110
+ },
111
+ "expected": {
112
+ "m": 2,
113
+ "n": 3,
114
+ "name": "p2ms(2 of 3)",
115
+ "output": "OP_2 030000000000000000000000000000000000000000000000000000000000000001 030000000000000000000000000000000000000000000000000000000000000002 030000000000000000000000000000000000000000000000000000000000000003 OP_3 OP_CHECKMULTISIG",
116
+ "pubkeys": [
117
+ "030000000000000000000000000000000000000000000000000000000000000001",
118
+ "030000000000000000000000000000000000000000000000000000000000000002",
119
+ "030000000000000000000000000000000000000000000000000000000000000003"
120
+ ],
121
+ "signatures": [
122
+ "300602010002010001",
123
+ "300602010102010001"
124
+ ],
125
+ "input": "OP_0 300602010002010001 300602010102010001",
126
+ "witness": []
127
+ }
128
+ },
129
+ {
130
+ "description": "input/output from input/output, even if incomplete",
131
+ "arguments": {
132
+ "output": "OP_2 030000000000000000000000000000000000000000000000000000000000000001 030000000000000000000000000000000000000000000000000000000000000002 OP_2 OP_CHECKMULTISIG",
133
+ "input": "OP_0 OP_0 300602010102010001"
134
+ },
135
+ "options": {
136
+ "allowIncomplete": true
137
+ },
138
+ "expected": {
139
+ "m": 2,
140
+ "n": 2,
141
+ "name": "p2ms(2 of 2)",
142
+ "output": "OP_2 030000000000000000000000000000000000000000000000000000000000000001 030000000000000000000000000000000000000000000000000000000000000002 OP_2 OP_CHECKMULTISIG",
143
+ "pubkeys": [
144
+ "030000000000000000000000000000000000000000000000000000000000000001",
145
+ "030000000000000000000000000000000000000000000000000000000000000002"
146
+ ],
147
+ "signatures": [
148
+ 0,
149
+ "300602010102010001"
150
+ ],
151
+ "input": "OP_0 OP_0 300602010102010001",
152
+ "witness": []
153
+ }
154
+ },
155
+ {
156
+ "description": "input/output from output/signatures, even if incomplete",
157
+ "arguments": {
158
+ "output": "OP_2 030000000000000000000000000000000000000000000000000000000000000001 030000000000000000000000000000000000000000000000000000000000000002 OP_2 OP_CHECKMULTISIG",
159
+ "signatures": [
160
+ 0,
161
+ "300602010102010001"
162
+ ]
163
+ },
164
+ "options": {
165
+ "allowIncomplete": true
166
+ },
167
+ "expected": {
168
+ "m": 2,
169
+ "n": 2,
170
+ "name": "p2ms(2 of 2)",
171
+ "output": "OP_2 030000000000000000000000000000000000000000000000000000000000000001 030000000000000000000000000000000000000000000000000000000000000002 OP_2 OP_CHECKMULTISIG",
172
+ "pubkeys": [
173
+ "030000000000000000000000000000000000000000000000000000000000000001",
174
+ "030000000000000000000000000000000000000000000000000000000000000002"
175
+ ],
176
+ "signatures": [
177
+ 0,
178
+ "300602010102010001"
179
+ ],
180
+ "input": "OP_0 OP_0 300602010102010001",
181
+ "witness": []
182
+ }
183
+ }
184
+ ],
185
+ "invalid": [
186
+ {
187
+ "exception": "Not enough data",
188
+ "arguments": {}
189
+ },
190
+ {
191
+ "exception": "Not enough data",
192
+ "arguments": {
193
+ "m": 2
194
+ }
195
+ },
196
+ {
197
+ "exception": "Not enough data",
198
+ "arguments": {
199
+ "pubkeys": [
200
+ "030000000000000000000000000000000000000000000000000000000000000001",
201
+ "030000000000000000000000000000000000000000000000000000000000000002"
202
+ ]
203
+ }
204
+ },
205
+ {
206
+ "description": "Non OP_INT chunk (m)",
207
+ "exception": "Output is invalid",
208
+ "arguments": {
209
+ "output": "OP_RESERVED"
210
+ }
211
+ },
212
+ {
213
+ "description": "Non OP_INT chunk (n)",
214
+ "exception": "Output is invalid",
215
+ "arguments": {
216
+ "output": "OP_1 OP_RESERVED"
217
+ }
218
+ },
219
+ {
220
+ "description": "Missing OP_CHECKMULTISIG",
221
+ "exception": "Output is invalid",
222
+ "arguments": {
223
+ "output": "OP_1 OP_2 OP_RESERVED"
224
+ }
225
+ },
226
+ {
227
+ "description": "m is 0",
228
+ "exception": "Output is invalid",
229
+ "arguments": {
230
+ "output": "OP_0 OP_2 OP_CHECKMULTISIG"
231
+ }
232
+ },
233
+ {
234
+ "description": "n is 0 (m > n)",
235
+ "exception": "Output is invalid",
236
+ "arguments": {
237
+ "output": "OP_2 OP_0 OP_CHECKMULTISIG"
238
+ }
239
+ },
240
+ {
241
+ "description": "m > n",
242
+ "exception": "Output is invalid",
243
+ "arguments": {
244
+ "output": "OP_3 OP_2 OP_CHECKMULTISIG"
245
+ }
246
+ },
247
+ {
248
+ "description": "n !== output pubkeys",
249
+ "exception": "Output is invalid",
250
+ "options": {},
251
+ "arguments": {
252
+ "output": "OP_1 030000000000000000000000000000000000000000000000000000000000000001 OP_2 OP_CHECKMULTISIG"
253
+ }
254
+ },
255
+ {
256
+ "description": "Non-canonical output public key",
257
+ "exception": "Output is invalid",
258
+ "arguments": {
259
+ "output": "OP_1 ffff OP_1 OP_CHECKMULTISIG"
260
+ }
261
+ },
262
+ {
263
+ "exception": "n mismatch",
264
+ "arguments": {
265
+ "n": 2,
266
+ "output": "OP_1 030000000000000000000000000000000000000000000000000000000000000001 OP_1 OP_CHECKMULTISIG"
267
+ }
268
+ },
269
+ {
270
+ "exception": "m mismatch",
271
+ "arguments": {
272
+ "m": 2,
273
+ "output": "OP_1 030000000000000000000000000000000000000000000000000000000000000001 OP_1 OP_CHECKMULTISIG"
274
+ }
275
+ },
276
+ {
277
+ "exception": "Pubkeys mismatch",
278
+ "options": {},
279
+ "arguments": {
280
+ "pubkeys": [
281
+ "030000000000000000000000000000000000000000000000000000000000000001"
282
+ ],
283
+ "output": "OP_1 030000000000000000000000000000000000000000000000000000000000000002 OP_1 OP_CHECKMULTISIG"
284
+ }
285
+ },
286
+ {
287
+ "exception": "Pubkey count mismatch",
288
+ "arguments": {
289
+ "m": 2,
290
+ "n": 3,
291
+ "pubkeys": [
292
+ "030000000000000000000000000000000000000000000000000000000000000001",
293
+ "030000000000000000000000000000000000000000000000000000000000000002"
294
+ ]
295
+ }
296
+ },
297
+ {
298
+ "exception": "Pubkey count cannot be less than m",
299
+ "arguments": {
300
+ "m": 4,
301
+ "pubkeys": [
302
+ "030000000000000000000000000000000000000000000000000000000000000001",
303
+ "030000000000000000000000000000000000000000000000000000000000000001"
304
+ ]
305
+ }
306
+ },
307
+ {
308
+ "exception": "Not enough signatures provided",
309
+ "arguments": {
310
+ "m": 2,
311
+ "pubkeys": [
312
+ "030000000000000000000000000000000000000000000000000000000000000001",
313
+ "030000000000000000000000000000000000000000000000000000000000000001"
314
+ ],
315
+ "signatures": [
316
+ "300602010002010001"
317
+ ]
318
+ }
319
+ },
320
+ {
321
+ "exception": "Signature mismatch",
322
+ "arguments": {
323
+ "m": 1,
324
+ "pubkeys": [
325
+ "030000000000000000000000000000000000000000000000000000000000000001",
326
+ "030000000000000000000000000000000000000000000000000000000000000001"
327
+ ],
328
+ "signatures": [
329
+ "300602010002010001"
330
+ ],
331
+ "input": "OP_0 300602010002010101"
332
+ }
333
+ },
334
+ {
335
+ "exception": "Too many signatures provided",
336
+ "arguments": {
337
+ "m": 2,
338
+ "pubkeys": [
339
+ "030000000000000000000000000000000000000000000000000000000000000001",
340
+ "030000000000000000000000000000000000000000000000000000000000000001"
341
+ ],
342
+ "signatures": [
343
+ "300602010002010001",
344
+ "300602010002010001",
345
+ "300602010002010001"
346
+ ]
347
+ }
348
+ },
349
+ {
350
+ "description": "Missing OP_0",
351
+ "exception": "Input is invalid",
352
+ "options": {},
353
+ "arguments": {
354
+ "m": 2,
355
+ "pubkeys": [
356
+ "030000000000000000000000000000000000000000000000000000000000000001",
357
+ "030000000000000000000000000000000000000000000000000000000000000001"
358
+ ],
359
+ "input": "OP_RESERVED"
360
+ }
361
+ },
362
+ {
363
+ "exception": "Input has invalid signature\\(s\\)",
364
+ "arguments": {
365
+ "m": 1,
366
+ "pubkeys": [
367
+ "030000000000000000000000000000000000000000000000000000000000000001"
368
+ ],
369
+ "input": "OP_0 ffffffffffffffff"
370
+ }
371
+ }
372
+ ],
373
+ "dynamic": {
374
+ "depends": {
375
+ "m": [
376
+ "output"
377
+ ],
378
+ "n": [
379
+ "output",
380
+ [
381
+ "m",
382
+ "pubkeys"
383
+ ]
384
+ ],
385
+ "output": [
386
+ "output",
387
+ [
388
+ "m",
389
+ "pubkeys"
390
+ ]
391
+ ],
392
+ "pubkeys": [
393
+ "output"
394
+ ],
395
+ "signatures": [
396
+ [
397
+ "input",
398
+ "output"
399
+ ]
400
+ ],
401
+ "input": [
402
+ [
403
+ "signatures",
404
+ "output"
405
+ ]
406
+ ],
407
+ "witness": [
408
+ [
409
+ "input",
410
+ "output"
411
+ ]
412
+ ]
413
+ },
414
+ "details": [
415
+ {
416
+ "description": "p2ms",
417
+ "m": 2,
418
+ "n": 3,
419
+ "output": "OP_2 030000000000000000000000000000000000000000000000000000000000000001 030000000000000000000000000000000000000000000000000000000000000002 030000000000000000000000000000000000000000000000000000000000000003 OP_3 OP_CHECKMULTISIG",
420
+ "pubkeys": [
421
+ "030000000000000000000000000000000000000000000000000000000000000001",
422
+ "030000000000000000000000000000000000000000000000000000000000000002",
423
+ "030000000000000000000000000000000000000000000000000000000000000003"
424
+ ],
425
+ "signatures": [
426
+ "300602010002010001",
427
+ "300602010102010001"
428
+ ],
429
+ "input": "OP_0 300602010002010001 300602010102010001",
430
+ "witness": []
431
+ }
432
+ ]
433
+ }
434
+ }
@@ -0,0 +1,179 @@
1
+ {
2
+ "valid": [
3
+ {
4
+ "description": "output from output",
5
+ "arguments": {
6
+ "output": "030000000000000000000000000000000000000000000000000000000000000001 OP_CHECKSIG"
7
+ },
8
+ "options": {},
9
+ "expected": {
10
+ "name": "p2pk",
11
+ "pubkey": "030000000000000000000000000000000000000000000000000000000000000001",
12
+ "signature": null,
13
+ "input": null,
14
+ "witness": null
15
+ }
16
+ },
17
+ {
18
+ "description": "output from pubkey",
19
+ "arguments": {
20
+ "pubkey": "030000000000000000000000000000000000000000000000000000000000000001"
21
+ },
22
+ "expected": {
23
+ "name": "p2pk",
24
+ "output": "030000000000000000000000000000000000000000000000000000000000000001 OP_CHECKSIG",
25
+ "signature": null,
26
+ "input": null,
27
+ "witness": null
28
+ }
29
+ },
30
+ {
31
+ "description": "input/output from output/signature",
32
+ "arguments": {
33
+ "output": "030000000000000000000000000000000000000000000000000000000000000001 OP_CHECKSIG",
34
+ "signature": "300602010002010001"
35
+ },
36
+ "expected": {
37
+ "name": "p2pk",
38
+ "pubkey": "030000000000000000000000000000000000000000000000000000000000000001",
39
+ "input": "300602010002010001",
40
+ "witness": []
41
+ }
42
+ },
43
+ {
44
+ "description": "input/output from pubkey/signature",
45
+ "arguments": {
46
+ "pubkey": "030000000000000000000000000000000000000000000000000000000000000001",
47
+ "signature": "300602010002010001"
48
+ },
49
+ "expected": {
50
+ "name": "p2pk",
51
+ "output": "030000000000000000000000000000000000000000000000000000000000000001 OP_CHECKSIG",
52
+ "input": "300602010002010001",
53
+ "witness": []
54
+ }
55
+ },
56
+ {
57
+ "description": "input/output from input/output",
58
+ "arguments": {
59
+ "output": "030000000000000000000000000000000000000000000000000000000000000001 OP_CHECKSIG",
60
+ "input": "300602010002010001"
61
+ },
62
+ "expected": {
63
+ "name": "p2pk",
64
+ "pubkey": "030000000000000000000000000000000000000000000000000000000000000001",
65
+ "signature": "300602010002010001",
66
+ "witness": []
67
+ }
68
+ }
69
+ ],
70
+ "invalid": [
71
+ {
72
+ "exception": "Not enough data",
73
+ "arguments": {}
74
+ },
75
+ {
76
+ "description": "Non-canonical signature",
77
+ "exception": "Expected property \"signature\" of type \\?isCanonicalScriptSignature, got Buffer",
78
+ "arguments": {
79
+ "pubkey": "030000000000000000000000000000000000000000000000000000000000000001",
80
+ "signature": "3044"
81
+ }
82
+ },
83
+ {
84
+ "description": "Unexpected OP_RESERVED",
85
+ "exception": "Output is invalid",
86
+ "arguments": {
87
+ "output": "OP_RESERVED"
88
+ }
89
+ },
90
+ {
91
+ "description": "Non-canonical output public key",
92
+ "exception": "Output pubkey is invalid",
93
+ "arguments": {
94
+ "output": "ffff OP_CHECKSIG"
95
+ }
96
+ },
97
+ {
98
+ "description": "Unexpected OP_0 (at end)",
99
+ "exception": "Output is invalid",
100
+ "arguments": {
101
+ "output": "030000000000000000000000000000000000000000000000000000000000000001 OP_CHECKSIG OP_0"
102
+ }
103
+ },
104
+ {
105
+ "exception": "Pubkey mismatch",
106
+ "options": {},
107
+ "arguments": {
108
+ "pubkey": "030000000000000000000000000000000000000000000000000000000000000001",
109
+ "output": "030000000000000000000000000000000000000000000000000000000000000002 OP_CHECKSIG"
110
+ }
111
+ },
112
+ {
113
+ "description": "Too many chunks",
114
+ "exception": "Input is invalid",
115
+ "arguments": {
116
+ "pubkey": "030000000000000000000000000000000000000000000000000000000000000001",
117
+ "input": "300602010002010001 OP_RESERVED"
118
+ }
119
+ },
120
+ {
121
+ "exception": "Input has invalid signature",
122
+ "arguments": {
123
+ "pubkey": "030000000000000000000000000000000000000000000000000000000000000001",
124
+ "input": "ffffffffffffffff"
125
+ }
126
+ },
127
+ {
128
+ "exception": "Input has invalid signature",
129
+ "arguments": {
130
+ "input": "30060201ff0201ff01"
131
+ }
132
+ },
133
+ {
134
+ "exception": "Signature mismatch",
135
+ "arguments": {
136
+ "signature": "300602010002010001",
137
+ "input": "300602010302010301"
138
+ }
139
+ }
140
+ ],
141
+ "dynamic": {
142
+ "depends": {
143
+ "output": [
144
+ "pubkey"
145
+ ],
146
+ "pubkey": [
147
+ "output"
148
+ ],
149
+ "signature": [
150
+ [
151
+ "input",
152
+ "output"
153
+ ]
154
+ ],
155
+ "input": [
156
+ [
157
+ "signature",
158
+ "output"
159
+ ]
160
+ ],
161
+ "witness": [
162
+ [
163
+ "input",
164
+ "output"
165
+ ]
166
+ ]
167
+ },
168
+ "details": [
169
+ {
170
+ "description": "p2pk",
171
+ "output": "030000000000000000000000000000000000000000000000000000000000000001 OP_CHECKSIG",
172
+ "pubkey": "030000000000000000000000000000000000000000000000000000000000000001",
173
+ "signature": "300602010002010001",
174
+ "input": "300602010002010001",
175
+ "witness": []
176
+ }
177
+ ]
178
+ }
179
+ }