@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
@@ -0,0 +1,121 @@
1
+ export const bitcoin = {
2
+ messagePrefix: '\x18Bitcoin Signed Message:\n',
3
+ bech32: 'bc',
4
+ bip32: {
5
+ public: 0x0488b21e,
6
+ private: 0x0488ade4,
7
+ },
8
+ pubKeyHash: 0x00,
9
+ scriptHash: 0x05,
10
+ wif: 0x80,
11
+ };
12
+ export const regtest = {
13
+ messagePrefix: '\x18Bitcoin Signed Message:\n',
14
+ bech32: 'bcrt',
15
+ bip32: {
16
+ public: 0x043587cf,
17
+ private: 0x04358394,
18
+ },
19
+ pubKeyHash: 0x6f,
20
+ scriptHash: 0xc4,
21
+ wif: 0xef,
22
+ };
23
+ export const testnet = {
24
+ messagePrefix: '\x18Bitcoin Signed Message:\n',
25
+ bech32: 'tb',
26
+ bip32: {
27
+ public: 0x043587cf,
28
+ private: 0x04358394,
29
+ },
30
+ pubKeyHash: 0x6f,
31
+ scriptHash: 0xc4,
32
+ wif: 0xef,
33
+ };
34
+ export const dogecoin = {
35
+ messagePrefix: '\x19Dogecoin Signed Message:\n',
36
+ bech32: '',
37
+ bip32: {
38
+ public: 0x02facafd,
39
+ private: 0x02fac398,
40
+ },
41
+ pubKeyHash: 0x1e,
42
+ scriptHash: 0x16,
43
+ wif: 0x9e,
44
+ };
45
+ export const dogecoinTestnet = {
46
+ messagePrefix: '\x19Dogecoin Signed Message:\n',
47
+ bech32: '',
48
+ bip32: {
49
+ public: 0x0432a9a8,
50
+ private: 0x0432a243,
51
+ },
52
+ pubKeyHash: 0x71,
53
+ scriptHash: 0xc4,
54
+ wif: 0xf1,
55
+ };
56
+ export const litecoin = {
57
+ messagePrefix: '\x19Litecoin Signed Message:\n',
58
+ bech32: 'ltc',
59
+ bip32: {
60
+ public: 0x019da462,
61
+ private: 0x019d9cfe,
62
+ },
63
+ pubKeyHash: 0x30,
64
+ scriptHash: 0x32,
65
+ wif: 0xb0,
66
+ };
67
+ export const litecoinTestnet = {
68
+ messagePrefix: '\x19Litecoin Signed Message:\n',
69
+ bech32: 'tltc',
70
+ bip32: {
71
+ public: 0x0436ef7d,
72
+ private: 0x0436f6e1,
73
+ },
74
+ pubKeyHash: 0x6f,
75
+ scriptHash: 0x3a,
76
+ wif: 0xef,
77
+ };
78
+ export const bitcoinCash = {
79
+ messagePrefix: '\x18Bitcoin Signed Message:\n',
80
+ bech32: 'bitcoincash',
81
+ bip32: {
82
+ public: 0x0488b21e,
83
+ private: 0x0488ade4,
84
+ },
85
+ pubKeyHash: 0x00,
86
+ scriptHash: 0x05,
87
+ wif: 0x80,
88
+ };
89
+ export const bitcoinCashTestnet = {
90
+ messagePrefix: '\x18Bitcoin Signed Message:\n',
91
+ bech32: 'bchtest',
92
+ bip32: {
93
+ public: 0x043587cf,
94
+ private: 0x04358394,
95
+ },
96
+ pubKeyHash: 0x6f,
97
+ scriptHash: 0xc4,
98
+ wif: 0xef,
99
+ };
100
+ export const dash = {
101
+ messagePrefix: '\x19DarkCoin Signed Message:\n',
102
+ bech32: '',
103
+ bip32: {
104
+ public: 0x02fe52cc,
105
+ private: 0x02fe52f8,
106
+ },
107
+ pubKeyHash: 0x4c,
108
+ scriptHash: 0x10,
109
+ wif: 0xcc,
110
+ };
111
+ export const dashTestnet = {
112
+ messagePrefix: '\x19DarkCoin Signed Message:\n',
113
+ bech32: '',
114
+ bip32: {
115
+ public: 0x3a8061a0,
116
+ private: 0x3a805837,
117
+ },
118
+ pubKeyHash: 0x8c,
119
+ scriptHash: 0x13,
120
+ wif: 0xef,
121
+ };
package/build/ops.d.ts ADDED
@@ -0,0 +1,126 @@
1
+ export interface Opcodes {
2
+ OP_FALSE: number;
3
+ OP_0: number;
4
+ OP_PUSHDATA1: number;
5
+ OP_PUSHDATA2: number;
6
+ OP_PUSHDATA4: number;
7
+ OP_1NEGATE: number;
8
+ OP_RESERVED: number;
9
+ OP_TRUE: number;
10
+ OP_1: number;
11
+ OP_2: number;
12
+ OP_3: number;
13
+ OP_4: number;
14
+ OP_5: number;
15
+ OP_6: number;
16
+ OP_7: number;
17
+ OP_8: number;
18
+ OP_9: number;
19
+ OP_10: number;
20
+ OP_11: number;
21
+ OP_12: number;
22
+ OP_13: number;
23
+ OP_14: number;
24
+ OP_15: number;
25
+ OP_16: number;
26
+ OP_NOP: number;
27
+ OP_VER: number;
28
+ OP_IF: number;
29
+ OP_NOTIF: number;
30
+ OP_VERIF: number;
31
+ OP_VERNOTIF: number;
32
+ OP_ELSE: number;
33
+ OP_ENDIF: number;
34
+ OP_VERIFY: number;
35
+ OP_RETURN: number;
36
+ OP_TOALTSTACK: number;
37
+ OP_FROMALTSTACK: number;
38
+ OP_2DROP: number;
39
+ OP_2DUP: number;
40
+ OP_3DUP: number;
41
+ OP_2OVER: number;
42
+ OP_2ROT: number;
43
+ OP_2SWAP: number;
44
+ OP_IFDUP: number;
45
+ OP_DEPTH: number;
46
+ OP_DROP: number;
47
+ OP_DUP: number;
48
+ OP_NIP: number;
49
+ OP_OVER: number;
50
+ OP_PICK: number;
51
+ OP_ROLL: number;
52
+ OP_ROT: number;
53
+ OP_SWAP: number;
54
+ OP_TUCK: number;
55
+ OP_CAT: number;
56
+ OP_SUBSTR: number;
57
+ OP_LEFT: number;
58
+ OP_RIGHT: number;
59
+ OP_SIZE: number;
60
+ OP_INVERT: number;
61
+ OP_AND: number;
62
+ OP_OR: number;
63
+ OP_XOR: number;
64
+ OP_EQUAL: number;
65
+ OP_EQUALVERIFY: number;
66
+ OP_RESERVED1: number;
67
+ OP_RESERVED2: number;
68
+ OP_1ADD: number;
69
+ OP_1SUB: number;
70
+ OP_2MUL: number;
71
+ OP_2DIV: number;
72
+ OP_NEGATE: number;
73
+ OP_ABS: number;
74
+ OP_NOT: number;
75
+ OP_0NOTEQUAL: number;
76
+ OP_ADD: number;
77
+ OP_SUB: number;
78
+ OP_MUL: number;
79
+ OP_DIV: number;
80
+ OP_MOD: number;
81
+ OP_LSHIFT: number;
82
+ OP_RSHIFT: number;
83
+ OP_BOOLAND: number;
84
+ OP_BOOLOR: number;
85
+ OP_NUMEQUAL: number;
86
+ OP_NUMEQUALVERIFY: number;
87
+ OP_NUMNOTEQUAL: number;
88
+ OP_LESSTHAN: number;
89
+ OP_GREATERTHAN: number;
90
+ OP_LESSTHANOREQUAL: number;
91
+ OP_GREATERTHANOREQUAL: number;
92
+ OP_MIN: number;
93
+ OP_MAX: number;
94
+ OP_WITHIN: number;
95
+ OP_RIPEMD160: number;
96
+ OP_SHA1: number;
97
+ OP_SHA256: number;
98
+ OP_HASH160: number;
99
+ OP_HASH256: number;
100
+ OP_CODESEPARATOR: number;
101
+ OP_CHECKSIG: number;
102
+ OP_CHECKSIGVERIFY: number;
103
+ OP_CHECKMULTISIG: number;
104
+ OP_CHECKMULTISIGVERIFY: number;
105
+ OP_CHECKLOCKTIMEVERIFY: number;
106
+ OP_CHECKSEQUENCEVERIFY: number;
107
+ OP_CHECKSIGADD: number;
108
+ OP_NOP1: number;
109
+ OP_NOP2: number;
110
+ OP_NOP3: number;
111
+ OP_NOP4: number;
112
+ OP_NOP5: number;
113
+ OP_NOP6: number;
114
+ OP_NOP7: number;
115
+ OP_NOP8: number;
116
+ OP_NOP9: number;
117
+ OP_NOP10: number;
118
+ OP_PUBKEYHASH: number;
119
+ OP_PUBKEY: number;
120
+ OP_INVALIDOPCODE: number;
121
+ }
122
+ declare const OPS: Opcodes;
123
+ declare const REVERSE_OPS: {
124
+ [key: number]: string;
125
+ };
126
+ export { OPS, REVERSE_OPS };
@@ -1,131 +1,127 @@
1
- 'use strict';
2
- Object.defineProperty(exports, '__esModule', { value: true });
3
- exports.REVERSE_OPS = exports.OPS = void 0;
4
- const OPS = {
5
- OP_FALSE: 0,
6
- OP_0: 0,
7
- OP_PUSHDATA1: 76,
8
- OP_PUSHDATA2: 77,
9
- OP_PUSHDATA4: 78,
10
- OP_1NEGATE: 79,
11
- OP_RESERVED: 80,
12
- OP_TRUE: 81,
13
- OP_1: 81,
14
- OP_2: 82,
15
- OP_3: 83,
16
- OP_4: 84,
17
- OP_5: 85,
18
- OP_6: 86,
19
- OP_7: 87,
20
- OP_8: 88,
21
- OP_9: 89,
22
- OP_10: 90,
23
- OP_11: 91,
24
- OP_12: 92,
25
- OP_13: 93,
26
- OP_14: 94,
27
- OP_15: 95,
28
- OP_16: 96,
29
- OP_NOP: 97,
30
- OP_VER: 98,
31
- OP_IF: 99,
32
- OP_NOTIF: 100,
33
- OP_VERIF: 101,
34
- OP_VERNOTIF: 102,
35
- OP_ELSE: 103,
36
- OP_ENDIF: 104,
37
- OP_VERIFY: 105,
38
- OP_RETURN: 106,
39
- OP_TOALTSTACK: 107,
40
- OP_FROMALTSTACK: 108,
41
- OP_2DROP: 109,
42
- OP_2DUP: 110,
43
- OP_3DUP: 111,
44
- OP_2OVER: 112,
45
- OP_2ROT: 113,
46
- OP_2SWAP: 114,
47
- OP_IFDUP: 115,
48
- OP_DEPTH: 116,
49
- OP_DROP: 117,
50
- OP_DUP: 118,
51
- OP_NIP: 119,
52
- OP_OVER: 120,
53
- OP_PICK: 121,
54
- OP_ROLL: 122,
55
- OP_ROT: 123,
56
- OP_SWAP: 124,
57
- OP_TUCK: 125,
58
- OP_CAT: 126,
59
- OP_SUBSTR: 127,
60
- OP_LEFT: 128,
61
- OP_RIGHT: 129,
62
- OP_SIZE: 130,
63
- OP_INVERT: 131,
64
- OP_AND: 132,
65
- OP_OR: 133,
66
- OP_XOR: 134,
67
- OP_EQUAL: 135,
68
- OP_EQUALVERIFY: 136,
69
- OP_RESERVED1: 137,
70
- OP_RESERVED2: 138,
71
- OP_1ADD: 139,
72
- OP_1SUB: 140,
73
- OP_2MUL: 141,
74
- OP_2DIV: 142,
75
- OP_NEGATE: 143,
76
- OP_ABS: 144,
77
- OP_NOT: 145,
78
- OP_0NOTEQUAL: 146,
79
- OP_ADD: 147,
80
- OP_SUB: 148,
81
- OP_MUL: 149,
82
- OP_DIV: 150,
83
- OP_MOD: 151,
84
- OP_LSHIFT: 152,
85
- OP_RSHIFT: 153,
86
- OP_BOOLAND: 154,
87
- OP_BOOLOR: 155,
88
- OP_NUMEQUAL: 156,
89
- OP_NUMEQUALVERIFY: 157,
90
- OP_NUMNOTEQUAL: 158,
91
- OP_LESSTHAN: 159,
92
- OP_GREATERTHAN: 160,
93
- OP_LESSTHANOREQUAL: 161,
94
- OP_GREATERTHANOREQUAL: 162,
95
- OP_MIN: 163,
96
- OP_MAX: 164,
97
- OP_WITHIN: 165,
98
- OP_RIPEMD160: 166,
99
- OP_SHA1: 167,
100
- OP_SHA256: 168,
101
- OP_HASH160: 169,
102
- OP_HASH256: 170,
103
- OP_CODESEPARATOR: 171,
104
- OP_CHECKSIG: 172,
105
- OP_CHECKSIGVERIFY: 173,
106
- OP_CHECKMULTISIG: 174,
107
- OP_CHECKMULTISIGVERIFY: 175,
108
- OP_NOP1: 176,
109
- OP_NOP2: 177,
110
- OP_CHECKLOCKTIMEVERIFY: 177,
111
- OP_NOP3: 178,
112
- OP_CHECKSEQUENCEVERIFY: 178,
113
- OP_NOP4: 179,
114
- OP_NOP5: 180,
115
- OP_NOP6: 181,
116
- OP_NOP7: 182,
117
- OP_NOP8: 183,
118
- OP_NOP9: 184,
119
- OP_NOP10: 185,
120
- OP_CHECKSIGADD: 186,
121
- OP_PUBKEYHASH: 253,
122
- OP_PUBKEY: 254,
123
- OP_INVALIDOPCODE: 255,
124
- };
125
- exports.OPS = OPS;
126
- const REVERSE_OPS = {};
127
- exports.REVERSE_OPS = REVERSE_OPS;
128
- for (const op of Object.keys(OPS)) {
129
- const code = OPS[op];
130
- REVERSE_OPS[code] = op;
131
- }
1
+ const OPS = {
2
+ OP_FALSE: 0,
3
+ OP_0: 0,
4
+ OP_PUSHDATA1: 76,
5
+ OP_PUSHDATA2: 77,
6
+ OP_PUSHDATA4: 78,
7
+ OP_1NEGATE: 79,
8
+ OP_RESERVED: 80,
9
+ OP_TRUE: 81,
10
+ OP_1: 81,
11
+ OP_2: 82,
12
+ OP_3: 83,
13
+ OP_4: 84,
14
+ OP_5: 85,
15
+ OP_6: 86,
16
+ OP_7: 87,
17
+ OP_8: 88,
18
+ OP_9: 89,
19
+ OP_10: 90,
20
+ OP_11: 91,
21
+ OP_12: 92,
22
+ OP_13: 93,
23
+ OP_14: 94,
24
+ OP_15: 95,
25
+ OP_16: 96,
26
+ OP_NOP: 97,
27
+ OP_VER: 98,
28
+ OP_IF: 99,
29
+ OP_NOTIF: 100,
30
+ OP_VERIF: 101,
31
+ OP_VERNOTIF: 102,
32
+ OP_ELSE: 103,
33
+ OP_ENDIF: 104,
34
+ OP_VERIFY: 105,
35
+ OP_RETURN: 106,
36
+ OP_TOALTSTACK: 107,
37
+ OP_FROMALTSTACK: 108,
38
+ OP_2DROP: 109,
39
+ OP_2DUP: 110,
40
+ OP_3DUP: 111,
41
+ OP_2OVER: 112,
42
+ OP_2ROT: 113,
43
+ OP_2SWAP: 114,
44
+ OP_IFDUP: 115,
45
+ OP_DEPTH: 116,
46
+ OP_DROP: 117,
47
+ OP_DUP: 118,
48
+ OP_NIP: 119,
49
+ OP_OVER: 120,
50
+ OP_PICK: 121,
51
+ OP_ROLL: 122,
52
+ OP_ROT: 123,
53
+ OP_SWAP: 124,
54
+ OP_TUCK: 125,
55
+ OP_CAT: 126,
56
+ OP_SUBSTR: 127,
57
+ OP_LEFT: 128,
58
+ OP_RIGHT: 129,
59
+ OP_SIZE: 130,
60
+ OP_INVERT: 131,
61
+ OP_AND: 132,
62
+ OP_OR: 133,
63
+ OP_XOR: 134,
64
+ OP_EQUAL: 135,
65
+ OP_EQUALVERIFY: 136,
66
+ OP_RESERVED1: 137,
67
+ OP_RESERVED2: 138,
68
+ OP_1ADD: 139,
69
+ OP_1SUB: 140,
70
+ OP_2MUL: 141,
71
+ OP_2DIV: 142,
72
+ OP_NEGATE: 143,
73
+ OP_ABS: 144,
74
+ OP_NOT: 145,
75
+ OP_0NOTEQUAL: 146,
76
+ OP_ADD: 147,
77
+ OP_SUB: 148,
78
+ OP_MUL: 149,
79
+ OP_DIV: 150,
80
+ OP_MOD: 151,
81
+ OP_LSHIFT: 152,
82
+ OP_RSHIFT: 153,
83
+ OP_BOOLAND: 154,
84
+ OP_BOOLOR: 155,
85
+ OP_NUMEQUAL: 156,
86
+ OP_NUMEQUALVERIFY: 157,
87
+ OP_NUMNOTEQUAL: 158,
88
+ OP_LESSTHAN: 159,
89
+ OP_GREATERTHAN: 160,
90
+ OP_LESSTHANOREQUAL: 161,
91
+ OP_GREATERTHANOREQUAL: 162,
92
+ OP_MIN: 163,
93
+ OP_MAX: 164,
94
+ OP_WITHIN: 165,
95
+ OP_RIPEMD160: 166,
96
+ OP_SHA1: 167,
97
+ OP_SHA256: 168,
98
+ OP_HASH160: 169,
99
+ OP_HASH256: 170,
100
+ OP_CODESEPARATOR: 171,
101
+ OP_CHECKSIG: 172,
102
+ OP_CHECKSIGVERIFY: 173,
103
+ OP_CHECKMULTISIG: 174,
104
+ OP_CHECKMULTISIGVERIFY: 175,
105
+ OP_NOP1: 176,
106
+ OP_NOP2: 177,
107
+ OP_CHECKLOCKTIMEVERIFY: 177,
108
+ OP_NOP3: 178,
109
+ OP_CHECKSEQUENCEVERIFY: 178,
110
+ OP_NOP4: 179,
111
+ OP_NOP5: 180,
112
+ OP_NOP6: 181,
113
+ OP_NOP7: 182,
114
+ OP_NOP8: 183,
115
+ OP_NOP9: 184,
116
+ OP_NOP10: 185,
117
+ OP_CHECKSIGADD: 186,
118
+ OP_PUBKEYHASH: 253,
119
+ OP_PUBKEY: 254,
120
+ OP_INVALIDOPCODE: 255,
121
+ };
122
+ const REVERSE_OPS = {};
123
+ for (const op of Object.keys(OPS)) {
124
+ const code = OPS[op];
125
+ REVERSE_OPS[code] = op;
126
+ }
127
+ export { OPS, REVERSE_OPS };
@@ -0,0 +1,23 @@
1
+ import { Tapleaf, Taptree } from '../types.js';
2
+ export declare const LEAF_VERSION_TAPSCRIPT = 192;
3
+ export declare const MAX_TAPTREE_DEPTH = 128;
4
+ interface HashLeaf {
5
+ hash: Buffer;
6
+ }
7
+ interface HashBranch {
8
+ hash: Buffer;
9
+ left: HashTree;
10
+ right: HashTree;
11
+ }
12
+ interface TweakedPublicKey {
13
+ parity: number;
14
+ x: Buffer;
15
+ }
16
+ export type HashTree = HashLeaf | HashBranch;
17
+ export declare function rootHashFromPath(controlBlock: Buffer, leafHash: Buffer): Buffer;
18
+ export declare function toHashTree(scriptTree: Taptree): HashTree;
19
+ export declare function findScriptPath(node: HashTree, hash: Buffer): Buffer[] | undefined;
20
+ export declare function tapleafHash(leaf: Tapleaf): Buffer;
21
+ export declare function tapTweakHash(pubKey: Buffer, h: Buffer | undefined): Buffer;
22
+ export declare function tweakKey(pubKey: Buffer, h: Buffer | undefined): TweakedPublicKey | null;
23
+ export {};
@@ -0,0 +1,82 @@
1
+ import { Buffer as NBuffer } from 'buffer';
2
+ import * as bcrypto from '../crypto.js';
3
+ import { getEccLib } from '../ecc_lib.js';
4
+ import { varuint } from '../bufferutils.js';
5
+ import { isTapleaf } from '../types.js';
6
+ export const LEAF_VERSION_TAPSCRIPT = 0xc0;
7
+ export const MAX_TAPTREE_DEPTH = 128;
8
+ const isHashBranch = (ht) => 'left' in ht && 'right' in ht;
9
+ export function rootHashFromPath(controlBlock, leafHash) {
10
+ if (controlBlock.length < 33)
11
+ throw new TypeError(`The control-block length is too small. Got ${controlBlock.length}, expected min 33.`);
12
+ const m = (controlBlock.length - 33) / 32;
13
+ let kj = leafHash;
14
+ for (let j = 0; j < m; j++) {
15
+ const ej = controlBlock.slice(33 + 32 * j, 65 + 32 * j);
16
+ if (kj.compare(ej) < 0) {
17
+ kj = tapBranchHash(kj, ej);
18
+ }
19
+ else {
20
+ kj = tapBranchHash(ej, kj);
21
+ }
22
+ }
23
+ return kj;
24
+ }
25
+ export function toHashTree(scriptTree) {
26
+ if (isTapleaf(scriptTree))
27
+ return { hash: tapleafHash(scriptTree) };
28
+ const hashes = [toHashTree(scriptTree[0]), toHashTree(scriptTree[1])];
29
+ hashes.sort((a, b) => a.hash.compare(b.hash));
30
+ const [left, right] = hashes;
31
+ return {
32
+ hash: tapBranchHash(left.hash, right.hash),
33
+ left,
34
+ right,
35
+ };
36
+ }
37
+ export function findScriptPath(node, hash) {
38
+ if (isHashBranch(node)) {
39
+ const leftPath = findScriptPath(node.left, hash);
40
+ if (leftPath !== undefined)
41
+ return [...leftPath, node.right.hash];
42
+ const rightPath = findScriptPath(node.right, hash);
43
+ if (rightPath !== undefined)
44
+ return [...rightPath, node.left.hash];
45
+ }
46
+ else if (node.hash.equals(hash)) {
47
+ return [];
48
+ }
49
+ return undefined;
50
+ }
51
+ export function tapleafHash(leaf) {
52
+ const version = leaf.version || LEAF_VERSION_TAPSCRIPT;
53
+ return bcrypto.taggedHash('TapLeaf', NBuffer.concat([NBuffer.from([version]), serializeScript(leaf.output)]));
54
+ }
55
+ export function tapTweakHash(pubKey, h) {
56
+ return bcrypto.taggedHash('TapTweak', NBuffer.concat(h ? [pubKey, h] : [pubKey]));
57
+ }
58
+ export function tweakKey(pubKey, h) {
59
+ if (!NBuffer.isBuffer(pubKey))
60
+ return null;
61
+ if (pubKey.length !== 32)
62
+ return null;
63
+ if (h && h.length !== 32)
64
+ return null;
65
+ const tweakHash = tapTweakHash(pubKey, h);
66
+ const res = getEccLib().xOnlyPointAddTweak(pubKey, tweakHash);
67
+ if (!res || res.xOnlyPubkey === null)
68
+ return null;
69
+ return {
70
+ parity: res.parity,
71
+ x: NBuffer.from(res.xOnlyPubkey),
72
+ };
73
+ }
74
+ function tapBranchHash(a, b) {
75
+ return bcrypto.taggedHash('TapBranch', NBuffer.concat([a, b]));
76
+ }
77
+ function serializeScript(s) {
78
+ const varintLen = varuint.encodingLength(s.length);
79
+ const buffer = NBuffer.allocUnsafe(varintLen);
80
+ varuint.encode(s.length, buffer);
81
+ return NBuffer.concat([buffer, s]);
82
+ }
@@ -0,0 +1,2 @@
1
+ import { Payment, PaymentOpts } from './index.js';
2
+ export declare function p2data(a: Payment, opts?: PaymentOpts): Payment;
@@ -0,0 +1,39 @@
1
+ import { bitcoin as BITCOIN_NETWORK } from '../networks.js';
2
+ import * as bscript from '../script.js';
3
+ import { stacksEqual, typeforce as typef } from '../types.js';
4
+ import * as lazy from './lazy.js';
5
+ const OPS = bscript.OPS;
6
+ export function p2data(a, opts) {
7
+ if (!a.data && !a.output)
8
+ throw new TypeError('Not enough data');
9
+ opts = Object.assign({ validate: true }, opts || {});
10
+ typef({
11
+ network: typef.maybe(typef.Object),
12
+ output: typef.maybe(typef.Buffer),
13
+ data: typef.maybe(typef.arrayOf(typef.Buffer)),
14
+ }, a);
15
+ const network = a.network || BITCOIN_NETWORK;
16
+ const o = { name: 'embed', network };
17
+ lazy.prop(o, 'output', () => {
18
+ if (!a.data)
19
+ return;
20
+ return bscript.compile([OPS.OP_RETURN].concat(a.data));
21
+ });
22
+ lazy.prop(o, 'data', () => {
23
+ if (!a.output)
24
+ return;
25
+ return bscript.decompile(a.output).slice(1);
26
+ });
27
+ if (opts.validate) {
28
+ if (a.output) {
29
+ const chunks = bscript.decompile(a.output);
30
+ if (chunks[0] !== OPS.OP_RETURN)
31
+ throw new TypeError('Output is invalid');
32
+ if (!chunks.slice(1).every(typef.Buffer))
33
+ throw new TypeError('Output is invalid');
34
+ if (a.data && !stacksEqual(a.data, o.data))
35
+ throw new TypeError('Data mismatch');
36
+ }
37
+ }
38
+ return Object.assign(o, a);
39
+ }