@btc-vision/bitcoin 6.4.9 → 6.4.11

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 (230) hide show
  1. package/.babelrc +4 -4
  2. package/.mocharc.json +13 -13
  3. package/.prettierrc.json +12 -12
  4. package/CHANGELOG.md +403 -403
  5. package/CONTRIBUTING.md +83 -83
  6. package/LICENSE +21 -21
  7. package/README.md +201 -201
  8. package/browser/index.d.ts +1 -1
  9. package/browser/index.js +1 -1
  10. package/browser/{ops.d.ts → opcodes.d.ts} +2 -3
  11. package/browser/script.d.ts +2 -2
  12. package/build/address.js +2 -1
  13. package/build/index.d.ts +1 -1
  14. package/build/index.js +1 -1
  15. package/build/{ops.d.ts → opcodes.d.ts} +2 -3
  16. package/build/{ops.js → opcodes.js} +4 -5
  17. package/build/payments/embed.js +1 -1
  18. package/build/payments/p2ms.js +1 -1
  19. package/build/payments/p2op.js +1 -1
  20. package/build/payments/p2pk.js +1 -1
  21. package/build/payments/p2pkh.js +1 -1
  22. package/build/payments/p2sh.js +3 -3
  23. package/build/payments/p2tr.js +1 -1
  24. package/build/payments/p2wpkh.js +2 -2
  25. package/build/payments/p2wsh.js +2 -2
  26. package/build/push_data.js +9 -9
  27. package/build/script.d.ts +2 -2
  28. package/build/script.js +12 -12
  29. package/build/transaction.js +1 -1
  30. package/cjs/package.json +3 -3
  31. package/gulpfile.js +42 -42
  32. package/package.json +150 -150
  33. package/src/address.ts +304 -303
  34. package/src/bip66.ts +107 -107
  35. package/src/block.ts +233 -233
  36. package/src/bufferutils.ts +188 -188
  37. package/src/crypto.ts +108 -108
  38. package/src/ecc_lib.ts +94 -94
  39. package/src/hooks/AdvancedSignatureManager.ts +104 -104
  40. package/src/hooks/SignatureManager.ts +84 -84
  41. package/src/index.ts +105 -105
  42. package/src/merkle.ts +31 -31
  43. package/src/{ops.ts → opcodes.ts} +280 -282
  44. package/src/payments/bip341.ts +140 -140
  45. package/src/payments/embed.ts +61 -61
  46. package/src/payments/index.ts +172 -172
  47. package/src/payments/lazy.ts +28 -28
  48. package/src/payments/p2ms.ts +156 -156
  49. package/src/payments/p2op.ts +195 -195
  50. package/src/payments/p2pk.ts +93 -93
  51. package/src/payments/p2pkh.ts +214 -214
  52. package/src/payments/p2sh.ts +210 -210
  53. package/src/payments/p2tr.ts +309 -309
  54. package/src/payments/p2wpkh.ts +144 -144
  55. package/src/payments/p2wsh.ts +217 -217
  56. package/src/psbt/bip371.ts +441 -441
  57. package/src/push_data.ts +97 -97
  58. package/src/script.ts +247 -247
  59. package/src/script_number.ts +72 -72
  60. package/src/script_signature.ts +91 -91
  61. package/src/transaction.ts +656 -656
  62. package/test/address.spec.ts +155 -155
  63. package/test/bitcoin.core.spec.ts +212 -212
  64. package/test/block.spec.ts +171 -171
  65. package/test/bufferutils.spec.ts +450 -450
  66. package/test/crypto.spec.ts +49 -49
  67. package/test/fixtures/address.json +329 -329
  68. package/test/fixtures/block.json +148 -148
  69. package/test/fixtures/bufferutils.json +102 -102
  70. package/test/fixtures/core/README.md +26 -26
  71. package/test/fixtures/core/base58_encode_decode.json +50 -50
  72. package/test/fixtures/core/base58_keys_invalid.json +152 -152
  73. package/test/fixtures/core/base58_keys_valid.json +452 -452
  74. package/test/fixtures/core/blocks.json +27 -27
  75. package/test/fixtures/core/sig_canonical.json +7 -7
  76. package/test/fixtures/core/sig_noncanonical.json +33 -33
  77. package/test/fixtures/core/sighash.json +3505 -3505
  78. package/test/fixtures/core/tx_valid.json +2023 -2023
  79. package/test/fixtures/crypto.json +43 -43
  80. package/test/fixtures/ecdsa.json +217 -217
  81. package/test/fixtures/ecpair.json +141 -141
  82. package/test/fixtures/embed.json +108 -108
  83. package/test/fixtures/p2ms.json +434 -434
  84. package/test/fixtures/p2pk.json +179 -179
  85. package/test/fixtures/p2pkh.json +276 -276
  86. package/test/fixtures/p2sh.json +508 -508
  87. package/test/fixtures/p2tr.json +1198 -1198
  88. package/test/fixtures/p2wpkh.json +290 -290
  89. package/test/fixtures/p2wsh.json +489 -489
  90. package/test/fixtures/psbt.json +924 -924
  91. package/test/fixtures/script.json +465 -465
  92. package/test/fixtures/script_number.json +225 -225
  93. package/test/fixtures/signature.json +140 -140
  94. package/test/fixtures/transaction.json +916 -916
  95. package/test/integration/_regtest.ts +6 -6
  96. package/test/integration/addresses.spec.ts +142 -142
  97. package/test/integration/bip32.spec.ts +130 -130
  98. package/test/integration/blocks.spec.ts +28 -28
  99. package/test/integration/cltv.spec.ts +241 -241
  100. package/test/integration/csv.spec.ts +452 -452
  101. package/test/integration/payments.spec.ts +110 -110
  102. package/test/integration/taproot.spec.ts +663 -663
  103. package/test/integration/transactions.spec.ts +668 -668
  104. package/test/payments.spec.ts +114 -114
  105. package/test/payments.utils.ts +165 -165
  106. package/test/psbt.spec.ts +1285 -1285
  107. package/test/script.spec.ts +186 -186
  108. package/test/script_number.spec.ts +26 -26
  109. package/test/script_signature.spec.ts +66 -66
  110. package/test/transaction.spec.ts +337 -337
  111. package/test/ts-node-register.js +7 -7
  112. package/test/tsconfig.json +48 -48
  113. package/test/types.spec.ts +53 -53
  114. package/tsconfig.base.json +27 -27
  115. package/tsconfig.json +19 -19
  116. package/tsconfig.webpack.json +18 -18
  117. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/.ready +0 -0
  118. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/.release-please-manifest.json +0 -3
  119. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/CHANGELOG.md +0 -962
  120. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/CONTRIBUTING.md +0 -34
  121. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/LICENSE +0 -24
  122. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/README.md +0 -273
  123. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/SECURITY.md +0 -2
  124. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/addon.gypi +0 -204
  125. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/bin/node-gyp.js +0 -138
  126. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/.release-please-manifest.json +0 -3
  127. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/LICENSE +0 -28
  128. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/data/ninja/build.ninja +0 -4
  129. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc +0 -12
  130. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/GypVsCMake.md +0 -116
  131. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/Hacking.md +0 -46
  132. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/InputFormatReference.md +0 -1080
  133. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/LanguageSpecification.md +0 -430
  134. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/README.md +0 -27
  135. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/Testing.md +0 -450
  136. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/UserDocumentation.md +0 -965
  137. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/gyp +0 -8
  138. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/gyp.bat +0 -5
  139. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/gyp_main.py +0 -45
  140. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py +0 -365
  141. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py +0 -206
  142. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py +0 -1272
  143. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py +0 -1547
  144. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py +0 -59
  145. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py +0 -153
  146. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py +0 -271
  147. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py +0 -574
  148. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/__init__.py +0 -692
  149. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/common.py +0 -711
  150. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/common_test.py +0 -171
  151. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py +0 -169
  152. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py +0 -113
  153. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py +0 -55
  154. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.py +0 -0
  155. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py +0 -804
  156. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py +0 -1173
  157. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py +0 -1318
  158. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py +0 -127
  159. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py +0 -103
  160. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py +0 -461
  161. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py +0 -89
  162. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py +0 -57
  163. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py +0 -2745
  164. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py +0 -3976
  165. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py +0 -44
  166. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py +0 -2964
  167. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py +0 -67
  168. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py +0 -1391
  169. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py +0 -25
  170. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/input.py +0 -3115
  171. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/input_test.py +0 -98
  172. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py +0 -771
  173. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py +0 -1260
  174. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py +0 -174
  175. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py +0 -61
  176. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py +0 -373
  177. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py +0 -1938
  178. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation_test.py +0 -53
  179. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py +0 -302
  180. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py +0 -3198
  181. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py +0 -65
  182. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/LICENSE +0 -3
  183. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/LICENSE.APACHE +0 -177
  184. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/LICENSE.BSD +0 -23
  185. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/__init__.py +0 -15
  186. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_elffile.py +0 -108
  187. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_manylinux.py +0 -252
  188. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_musllinux.py +0 -83
  189. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_parser.py +0 -359
  190. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_structures.py +0 -61
  191. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_tokenizer.py +0 -192
  192. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/markers.py +0 -252
  193. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/metadata.py +0 -825
  194. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/py.typed +0 -0
  195. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/requirements.py +0 -90
  196. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/specifiers.py +0 -1030
  197. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/tags.py +0 -553
  198. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/utils.py +0 -172
  199. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/version.py +0 -563
  200. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pyproject.toml +0 -120
  201. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/release-please-config.json +0 -11
  202. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/test_gyp.py +0 -261
  203. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/Find-VisualStudio.cs +0 -250
  204. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/build.js +0 -227
  205. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/clean.js +0 -15
  206. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/configure.js +0 -328
  207. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/create-config-gypi.js +0 -150
  208. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/download.js +0 -39
  209. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/find-node-directory.js +0 -63
  210. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/find-python.js +0 -310
  211. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/find-visualstudio.js +0 -590
  212. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/install.js +0 -415
  213. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/list.js +0 -26
  214. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/log.js +0 -168
  215. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/node-gyp.js +0 -188
  216. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/process-release.js +0 -146
  217. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/rebuild.js +0 -12
  218. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/remove.js +0 -43
  219. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/util.js +0 -81
  220. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/macOS_Catalina_acid_test.sh +0 -21
  221. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/package.json +0 -51
  222. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/release-please-config.json +0 -40
  223. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/src/win_delay_load_hook.cc +0 -39
  224. package/coverage/tmp/coverage-31752-1735543485354-0.json +0 -1
  225. package/coverage/tmp/coverage-59920-1735543484555-0.json +0 -1
  226. package/coverage/tmp/coverage-66252-1735543483919-0.json +0 -1
  227. package/coverage/tmp/coverage-68440-1735543485236-0.json +0 -1
  228. package/coverage/tmp/coverage-70588-1735543484426-0.json +0 -1
  229. package/coverage/tmp/coverage-79292-1735543485296-0.json +0 -1
  230. package/coverage/tmp/coverage-80212-1735543483980-0.json +0 -1
package/src/address.ts CHANGED
@@ -1,303 +1,304 @@
1
- /**
2
- * bitcoin address decode and encode tools, include base58、bech32 and output script
3
- *
4
- * networks support bitcoin、bitcoin testnet and bitcoin regtest
5
- *
6
- * addresses support P2PKH、P2SH、P2WPKH、P2WSH、P2TR and so on
7
- *
8
- * @packageDocumentation
9
- */
10
- import { bech32, bech32m } from 'bech32';
11
- import * as bs58check from 'bs58check';
12
- import { opcodes, payments } from './index.js';
13
- import * as networks from './networks.js';
14
- import { Network } from './networks.js';
15
- import * as bscript from './script.js';
16
- import { Hash160bit, tuple, typeforce, UInt8 } from './types.js';
17
-
18
- /** base58check decode result */
19
- export interface Base58CheckResult {
20
- /** address hash */
21
- hash: Buffer;
22
- /** address version: 0x00 for P2PKH, 0x05 for P2SH */
23
- version: number;
24
- }
25
-
26
- /** bech32 decode result */
27
- export interface Bech32Result {
28
- /** address version: 0x00 for P2WPKH、P2WSH, 0x01 for P2TR*/
29
- version: number;
30
- /** address prefix: bc for P2WPKH、P2WSH、P2TR */
31
- prefix: string;
32
- /** address data:20 bytes for P2WPKH, 32 bytes for P2WSH、P2TR */
33
- data: Buffer;
34
- }
35
-
36
- export const FUTURE_SEGWIT_MAX_SIZE: number = 40;
37
- export const FUTURE_SEGWIT_MIN_SIZE: number = 2;
38
- export const FUTURE_SEGWIT_MAX_VERSION: number = 15;
39
- export const FUTURE_MAX_VERSION: number = 16;
40
- export const FUTURE_OPNET_VERSION: number = 16;
41
- export const FUTURE_SEGWIT_MIN_VERSION: number = 2;
42
- export const FUTURE_SEGWIT_VERSION_DIFF: number = 0x50;
43
- const FUTURE_SEGWIT_VERSION_WARNING: string =
44
- 'WARNING: Sending to a future segwit version address can lead to loss of funds. ' +
45
- 'End users MUST be warned carefully in the GUI and asked if they wish to proceed ' +
46
- 'with caution. Wallets should verify the segwit version from the output of fromBech32, ' +
47
- 'then decide when it is safe to use which version of segwit.';
48
-
49
- export const isUnknownSegwitVersion = (output: Buffer): boolean => {
50
- try {
51
- const data = Buffer.from(output.subarray(2));
52
- if (data.length < FUTURE_SEGWIT_MIN_SIZE || data.length > FUTURE_SEGWIT_MAX_SIZE) {
53
- throw new TypeError('Invalid program length for segwit address');
54
- }
55
-
56
- const version = output[0] - FUTURE_SEGWIT_VERSION_DIFF;
57
- if (version < FUTURE_SEGWIT_MIN_VERSION || version > FUTURE_SEGWIT_MAX_VERSION + 1) {
58
- throw new TypeError('Invalid version for segwit address');
59
- }
60
-
61
- if (version === 1) throw new TypeError('taproot');
62
-
63
- return true;
64
- } catch (e) {}
65
-
66
- return false;
67
- };
68
-
69
- /**
70
- * Encode a future Taproot-style segwit address (SegWit v2 - v16) using bech32m.
71
- * Only for versions not yet assigned specific meanings (future use).
72
- *
73
- * @param output - Output script buffer containing the version and witness program
74
- * @param network - Network object containing bech32 and optional bech32Opnet prefix
75
- * @returns Bech32m-encoded future Taproot-style address
76
- */
77
- export function toFutureOPNetAddress(output: Buffer, network: Network): string {
78
- if (!Buffer.isBuffer(output)) throw new TypeError('output must be a Buffer');
79
- if (!network.bech32Opnet) throw new Error('Network does not support opnet');
80
-
81
- const opcode = output[0];
82
-
83
- // work out where the push-data really starts
84
- let pushPos = 1,
85
- progLen: number;
86
- if (output[1] < 0x4c) {
87
- progLen = output[1];
88
- pushPos = 2;
89
- } else if (output[1] === 0x4c) {
90
- progLen = output[2];
91
- pushPos = 3;
92
- } else {
93
- throw new TypeError('Unsupported push opcode in script');
94
- }
95
-
96
- const program = Buffer.from(output.subarray(pushPos, pushPos + progLen));
97
-
98
- if (program.length < FUTURE_SEGWIT_MIN_SIZE || program.length > FUTURE_SEGWIT_MAX_SIZE)
99
- throw new TypeError('Invalid program length for segwit address');
100
-
101
- const version =
102
- opcode === opcodes.OP_0
103
- ? 0
104
- : opcode >= opcodes.OP_1 && opcode <= opcodes.OP_16
105
- ? opcode - (opcodes.OP_1 - 1)
106
- : -1;
107
-
108
- if (version < FUTURE_SEGWIT_MAX_VERSION || version > FUTURE_MAX_VERSION)
109
- throw new TypeError(`Invalid segwit version ${version}`);
110
-
111
- const words = [version, ...bech32m.toWords(program)];
112
- return bech32m.encode(network.bech32Opnet, words);
113
- }
114
-
115
- export function _toFutureSegwitAddress(output: Buffer, network: Network): string {
116
- const data = Buffer.from(output.subarray(2));
117
- if (data.length < FUTURE_SEGWIT_MIN_SIZE || data.length > FUTURE_SEGWIT_MAX_SIZE) {
118
- throw new TypeError('Invalid program length for segwit address');
119
- }
120
-
121
- const version = output[0] - FUTURE_SEGWIT_VERSION_DIFF;
122
- if (version < FUTURE_SEGWIT_MIN_VERSION || version > FUTURE_SEGWIT_MAX_VERSION) {
123
- throw new TypeError('Invalid version for segwit address');
124
- }
125
-
126
- if (output[1] !== data.length) {
127
- throw new TypeError(`Invalid script for segwit address ${output[1]} !== ${data.length}`);
128
- }
129
-
130
- return toBech32(data, version, network.bech32, network.bech32Opnet);
131
- }
132
-
133
- /**
134
- * decode address with base58 specification, return address version and address hash if valid
135
- */
136
- export function fromBase58Check(address: string): Base58CheckResult {
137
- const payload = Buffer.from(bs58check.default.decode(address));
138
-
139
- // TODO: 4.0.0, move to "toOutputScript"
140
- if (payload.length < 21) throw new TypeError(address + ' is too short');
141
- if (payload.length > 21) throw new TypeError(address + ' is too long');
142
-
143
- const version = payload.readUInt8(0);
144
- const hash = Buffer.from(payload.subarray(1));
145
-
146
- return { version, hash };
147
- }
148
-
149
- /**
150
- * decode address with bech32 specification, return address version、address prefix and address data if valid
151
- */
152
- export function fromBech32(address: string): Bech32Result {
153
- let result;
154
- let version;
155
- try {
156
- result = bech32.decode(address);
157
- } catch (e) {}
158
-
159
- if (result) {
160
- version = result.words[0];
161
- if (version !== 0) throw new TypeError(address + ' uses wrong encoding');
162
- } else {
163
- result = bech32m.decode(address);
164
- version = result.words[0];
165
- if (version === 0) throw new TypeError(address + ' uses wrong encoding');
166
- }
167
-
168
- const data = bech32.fromWords(result.words.slice(1));
169
-
170
- return {
171
- version,
172
- prefix: result.prefix,
173
- data: Buffer.from(data),
174
- };
175
- }
176
-
177
- /**
178
- * encode address hash to base58 address with version
179
- */
180
- export function toBase58Check(hash: Buffer, version: number): string {
181
- typeforce(tuple(Hash160bit, UInt8), arguments);
182
-
183
- const payload = Buffer.allocUnsafe(21);
184
- payload.writeUInt8(version, 0);
185
- hash.copy(payload, 1);
186
-
187
- return bs58check.default.encode(payload);
188
- }
189
-
190
- /**
191
- * encode address hash to bech32 address with version and prefix
192
- */
193
- export function toBech32(
194
- data: Buffer,
195
- version: number,
196
- prefix: string,
197
- prefixOpnet?: string,
198
- ): string {
199
- const words = bech32.toWords(data);
200
- words.unshift(version);
201
-
202
- if (version === FUTURE_OPNET_VERSION && prefixOpnet) {
203
- return bech32m.encode(prefixOpnet, words);
204
- }
205
-
206
- return version === 0 ? bech32.encode(prefix, words) : bech32m.encode(prefix, words);
207
- }
208
-
209
- /**
210
- * decode address from output script with network, return address if matched
211
- */
212
- export function fromOutputScript(output: Buffer, network?: Network): string {
213
- // TODO: Network
214
- network = network || networks.bitcoin;
215
-
216
- try {
217
- return payments.p2pkh({ output, network }).address as string;
218
- } catch (e) {}
219
- try {
220
- return payments.p2sh({ output, network }).address as string;
221
- } catch (e) {}
222
- try {
223
- return payments.p2wpkh({ output, network }).address as string;
224
- } catch (e) {}
225
- try {
226
- return payments.p2wsh({ output, network }).address as string;
227
- } catch (e) {}
228
- try {
229
- return payments.p2tr({ output, network }).address as string;
230
- } catch (e) {}
231
- try {
232
- return toFutureOPNetAddress(output, network);
233
- } catch (e) {}
234
- try {
235
- return _toFutureSegwitAddress(output, network);
236
- } catch (e) {}
237
-
238
- throw new Error(bscript.toASM(output) + ' has no matching Address');
239
- }
240
-
241
- /**
242
- * encodes address to output script with network, return output script if address matched
243
- */
244
- export function toOutputScript(address: string, network?: Network): Buffer {
245
- network = network || networks.bitcoin;
246
-
247
- let decodeBase58: Base58CheckResult | undefined;
248
- let decodeBech32: Bech32Result | undefined;
249
- try {
250
- decodeBase58 = fromBase58Check(address);
251
- } catch (e) {}
252
-
253
- if (decodeBase58) {
254
- if (decodeBase58.version === network.pubKeyHash)
255
- return payments.p2pkh({ hash: decodeBase58.hash }).output as Buffer;
256
- if (decodeBase58.version === network.scriptHash)
257
- return payments.p2sh({ hash: decodeBase58.hash }).output as Buffer;
258
- } else {
259
- try {
260
- decodeBech32 = fromBech32(address);
261
- } catch (e) {}
262
-
263
- if (decodeBech32) {
264
- if (
265
- decodeBech32.prefix !== network.bech32 &&
266
- network.bech32Opnet &&
267
- decodeBech32.prefix !== network.bech32Opnet
268
- )
269
- throw new Error(address + ' has an invalid prefix');
270
- if (decodeBech32.version === 0) {
271
- if (decodeBech32.data.length === 20)
272
- return payments.p2wpkh({ hash: decodeBech32.data }).output as Buffer;
273
- if (decodeBech32.data.length === 32)
274
- return payments.p2wsh({ hash: decodeBech32.data }).output as Buffer;
275
- } else if (decodeBech32.version === 1) {
276
- if (decodeBech32.data.length === 32)
277
- return payments.p2tr({ pubkey: decodeBech32.data }).output as Buffer;
278
- } else if (decodeBech32.version === FUTURE_OPNET_VERSION) {
279
- if (!network.bech32Opnet) throw new Error(address + ' has an invalid prefix');
280
- return payments.p2op({
281
- program: decodeBech32.data,
282
- network,
283
- }).output as Buffer;
284
- } else if (
285
- decodeBech32.version >= FUTURE_SEGWIT_MIN_VERSION &&
286
- decodeBech32.version <= FUTURE_SEGWIT_MAX_VERSION &&
287
- decodeBech32.data.length >= FUTURE_SEGWIT_MIN_SIZE &&
288
- decodeBech32.data.length <= FUTURE_SEGWIT_MAX_SIZE
289
- ) {
290
- if (decodeBech32.version !== FUTURE_OPNET_VERSION) {
291
- console.warn(FUTURE_SEGWIT_VERSION_WARNING);
292
- }
293
-
294
- return bscript.compile([
295
- decodeBech32.version + FUTURE_SEGWIT_VERSION_DIFF,
296
- decodeBech32.data,
297
- ]);
298
- }
299
- }
300
- }
301
-
302
- return Buffer.from(address, 'hex');
303
- }
1
+ /**
2
+ * bitcoin address decode and encode tools, include base58、bech32 and output script
3
+ *
4
+ * networks support bitcoin、bitcoin testnet and bitcoin regtest
5
+ *
6
+ * addresses support P2PKH、P2SH、P2WPKH、P2WSH、P2TR and so on
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ import { bech32, bech32m } from 'bech32';
11
+ import * as bs58check from 'bs58check';
12
+ import * as networks from './networks.js';
13
+ import { Network } from './networks.js';
14
+ import * as bscript from './script.js';
15
+ import { opcodes } from './script.js';
16
+ import { Hash160bit, tuple, typeforce, UInt8 } from './types.js';
17
+ import { payments } from './index.js';
18
+
19
+ /** base58check decode result */
20
+ export interface Base58CheckResult {
21
+ /** address hash */
22
+ hash: Buffer;
23
+ /** address version: 0x00 for P2PKH, 0x05 for P2SH */
24
+ version: number;
25
+ }
26
+
27
+ /** bech32 decode result */
28
+ export interface Bech32Result {
29
+ /** address version: 0x00 for P2WPKH、P2WSH, 0x01 for P2TR*/
30
+ version: number;
31
+ /** address prefix: bc for P2WPKH、P2WSH、P2TR */
32
+ prefix: string;
33
+ /** address data:20 bytes for P2WPKH, 32 bytes for P2WSH、P2TR */
34
+ data: Buffer;
35
+ }
36
+
37
+ export const FUTURE_SEGWIT_MAX_SIZE: number = 40;
38
+ export const FUTURE_SEGWIT_MIN_SIZE: number = 2;
39
+ export const FUTURE_SEGWIT_MAX_VERSION: number = 15;
40
+ export const FUTURE_MAX_VERSION: number = 16;
41
+ export const FUTURE_OPNET_VERSION: number = 16;
42
+ export const FUTURE_SEGWIT_MIN_VERSION: number = 2;
43
+ export const FUTURE_SEGWIT_VERSION_DIFF: number = 0x50;
44
+ const FUTURE_SEGWIT_VERSION_WARNING: string =
45
+ 'WARNING: Sending to a future segwit version address can lead to loss of funds. ' +
46
+ 'End users MUST be warned carefully in the GUI and asked if they wish to proceed ' +
47
+ 'with caution. Wallets should verify the segwit version from the output of fromBech32, ' +
48
+ 'then decide when it is safe to use which version of segwit.';
49
+
50
+ export const isUnknownSegwitVersion = (output: Buffer): boolean => {
51
+ try {
52
+ const data = Buffer.from(output.subarray(2));
53
+ if (data.length < FUTURE_SEGWIT_MIN_SIZE || data.length > FUTURE_SEGWIT_MAX_SIZE) {
54
+ throw new TypeError('Invalid program length for segwit address');
55
+ }
56
+
57
+ const version = output[0] - FUTURE_SEGWIT_VERSION_DIFF;
58
+ if (version < FUTURE_SEGWIT_MIN_VERSION || version > FUTURE_SEGWIT_MAX_VERSION + 1) {
59
+ throw new TypeError('Invalid version for segwit address');
60
+ }
61
+
62
+ if (version === 1) throw new TypeError('taproot');
63
+
64
+ return true;
65
+ } catch (e) {}
66
+
67
+ return false;
68
+ };
69
+
70
+ /**
71
+ * Encode a future Taproot-style segwit address (SegWit v2 - v16) using bech32m.
72
+ * Only for versions not yet assigned specific meanings (future use).
73
+ *
74
+ * @param output - Output script buffer containing the version and witness program
75
+ * @param network - Network object containing bech32 and optional bech32Opnet prefix
76
+ * @returns Bech32m-encoded future Taproot-style address
77
+ */
78
+ export function toFutureOPNetAddress(output: Buffer, network: Network): string {
79
+ if (!Buffer.isBuffer(output)) throw new TypeError('output must be a Buffer');
80
+ if (!network.bech32Opnet) throw new Error('Network does not support opnet');
81
+
82
+ const opcode = output[0];
83
+
84
+ // work out where the push-data really starts
85
+ let pushPos = 1,
86
+ progLen: number;
87
+ if (output[1] < 0x4c) {
88
+ progLen = output[1];
89
+ pushPos = 2;
90
+ } else if (output[1] === 0x4c) {
91
+ progLen = output[2];
92
+ pushPos = 3;
93
+ } else {
94
+ throw new TypeError('Unsupported push opcode in script');
95
+ }
96
+
97
+ const program = Buffer.from(output.subarray(pushPos, pushPos + progLen));
98
+
99
+ if (program.length < FUTURE_SEGWIT_MIN_SIZE || program.length > FUTURE_SEGWIT_MAX_SIZE)
100
+ throw new TypeError('Invalid program length for segwit address');
101
+
102
+ const version =
103
+ opcode === opcodes.OP_0
104
+ ? 0
105
+ : opcode >= opcodes.OP_1 && opcode <= opcodes.OP_16
106
+ ? opcode - (opcodes.OP_1 - 1)
107
+ : -1;
108
+
109
+ if (version < FUTURE_SEGWIT_MAX_VERSION || version > FUTURE_MAX_VERSION)
110
+ throw new TypeError(`Invalid segwit version ${version}`);
111
+
112
+ const words = [version, ...bech32m.toWords(program)];
113
+ return bech32m.encode(network.bech32Opnet, words);
114
+ }
115
+
116
+ export function _toFutureSegwitAddress(output: Buffer, network: Network): string {
117
+ const data = Buffer.from(output.subarray(2));
118
+ if (data.length < FUTURE_SEGWIT_MIN_SIZE || data.length > FUTURE_SEGWIT_MAX_SIZE) {
119
+ throw new TypeError('Invalid program length for segwit address');
120
+ }
121
+
122
+ const version = output[0] - FUTURE_SEGWIT_VERSION_DIFF;
123
+ if (version < FUTURE_SEGWIT_MIN_VERSION || version > FUTURE_SEGWIT_MAX_VERSION) {
124
+ throw new TypeError('Invalid version for segwit address');
125
+ }
126
+
127
+ if (output[1] !== data.length) {
128
+ throw new TypeError(`Invalid script for segwit address ${output[1]} !== ${data.length}`);
129
+ }
130
+
131
+ return toBech32(data, version, network.bech32, network.bech32Opnet);
132
+ }
133
+
134
+ /**
135
+ * decode address with base58 specification, return address version and address hash if valid
136
+ */
137
+ export function fromBase58Check(address: string): Base58CheckResult {
138
+ const payload = Buffer.from(bs58check.default.decode(address));
139
+
140
+ // TODO: 4.0.0, move to "toOutputScript"
141
+ if (payload.length < 21) throw new TypeError(address + ' is too short');
142
+ if (payload.length > 21) throw new TypeError(address + ' is too long');
143
+
144
+ const version = payload.readUInt8(0);
145
+ const hash = Buffer.from(payload.subarray(1));
146
+
147
+ return { version, hash };
148
+ }
149
+
150
+ /**
151
+ * decode address with bech32 specification, return address version、address prefix and address data if valid
152
+ */
153
+ export function fromBech32(address: string): Bech32Result {
154
+ let result;
155
+ let version;
156
+ try {
157
+ result = bech32.decode(address);
158
+ } catch (e) {}
159
+
160
+ if (result) {
161
+ version = result.words[0];
162
+ if (version !== 0) throw new TypeError(address + ' uses wrong encoding');
163
+ } else {
164
+ result = bech32m.decode(address);
165
+ version = result.words[0];
166
+ if (version === 0) throw new TypeError(address + ' uses wrong encoding');
167
+ }
168
+
169
+ const data = bech32.fromWords(result.words.slice(1));
170
+
171
+ return {
172
+ version,
173
+ prefix: result.prefix,
174
+ data: Buffer.from(data),
175
+ };
176
+ }
177
+
178
+ /**
179
+ * encode address hash to base58 address with version
180
+ */
181
+ export function toBase58Check(hash: Buffer, version: number): string {
182
+ typeforce(tuple(Hash160bit, UInt8), arguments);
183
+
184
+ const payload = Buffer.allocUnsafe(21);
185
+ payload.writeUInt8(version, 0);
186
+ hash.copy(payload, 1);
187
+
188
+ return bs58check.default.encode(payload);
189
+ }
190
+
191
+ /**
192
+ * encode address hash to bech32 address with version and prefix
193
+ */
194
+ export function toBech32(
195
+ data: Buffer,
196
+ version: number,
197
+ prefix: string,
198
+ prefixOpnet?: string,
199
+ ): string {
200
+ const words = bech32.toWords(data);
201
+ words.unshift(version);
202
+
203
+ if (version === FUTURE_OPNET_VERSION && prefixOpnet) {
204
+ return bech32m.encode(prefixOpnet, words);
205
+ }
206
+
207
+ return version === 0 ? bech32.encode(prefix, words) : bech32m.encode(prefix, words);
208
+ }
209
+
210
+ /**
211
+ * decode address from output script with network, return address if matched
212
+ */
213
+ export function fromOutputScript(output: Buffer, network?: Network): string {
214
+ // TODO: Network
215
+ network = network || networks.bitcoin;
216
+
217
+ try {
218
+ return payments.p2pkh({ output, network }).address as string;
219
+ } catch (e) {}
220
+ try {
221
+ return payments.p2sh({ output, network }).address as string;
222
+ } catch (e) {}
223
+ try {
224
+ return payments.p2wpkh({ output, network }).address as string;
225
+ } catch (e) {}
226
+ try {
227
+ return payments.p2wsh({ output, network }).address as string;
228
+ } catch (e) {}
229
+ try {
230
+ return payments.p2tr({ output, network }).address as string;
231
+ } catch (e) {}
232
+ try {
233
+ return toFutureOPNetAddress(output, network);
234
+ } catch (e) {}
235
+ try {
236
+ return _toFutureSegwitAddress(output, network);
237
+ } catch (e) {}
238
+
239
+ throw new Error(bscript.toASM(output) + ' has no matching Address');
240
+ }
241
+
242
+ /**
243
+ * encodes address to output script with network, return output script if address matched
244
+ */
245
+ export function toOutputScript(address: string, network?: Network): Buffer {
246
+ network = network || networks.bitcoin;
247
+
248
+ let decodeBase58: Base58CheckResult | undefined;
249
+ let decodeBech32: Bech32Result | undefined;
250
+ try {
251
+ decodeBase58 = fromBase58Check(address);
252
+ } catch (e) {}
253
+
254
+ if (decodeBase58) {
255
+ if (decodeBase58.version === network.pubKeyHash)
256
+ return payments.p2pkh({ hash: decodeBase58.hash }).output as Buffer;
257
+ if (decodeBase58.version === network.scriptHash)
258
+ return payments.p2sh({ hash: decodeBase58.hash }).output as Buffer;
259
+ } else {
260
+ try {
261
+ decodeBech32 = fromBech32(address);
262
+ } catch (e) {}
263
+
264
+ if (decodeBech32) {
265
+ if (
266
+ decodeBech32.prefix !== network.bech32 &&
267
+ network.bech32Opnet &&
268
+ decodeBech32.prefix !== network.bech32Opnet
269
+ )
270
+ throw new Error(address + ' has an invalid prefix');
271
+ if (decodeBech32.version === 0) {
272
+ if (decodeBech32.data.length === 20)
273
+ return payments.p2wpkh({ hash: decodeBech32.data }).output as Buffer;
274
+ if (decodeBech32.data.length === 32)
275
+ return payments.p2wsh({ hash: decodeBech32.data }).output as Buffer;
276
+ } else if (decodeBech32.version === 1) {
277
+ if (decodeBech32.data.length === 32)
278
+ return payments.p2tr({ pubkey: decodeBech32.data }).output as Buffer;
279
+ } else if (decodeBech32.version === FUTURE_OPNET_VERSION) {
280
+ if (!network.bech32Opnet) throw new Error(address + ' has an invalid prefix');
281
+ return payments.p2op({
282
+ program: decodeBech32.data,
283
+ network,
284
+ }).output as Buffer;
285
+ } else if (
286
+ decodeBech32.version >= FUTURE_SEGWIT_MIN_VERSION &&
287
+ decodeBech32.version <= FUTURE_SEGWIT_MAX_VERSION &&
288
+ decodeBech32.data.length >= FUTURE_SEGWIT_MIN_SIZE &&
289
+ decodeBech32.data.length <= FUTURE_SEGWIT_MAX_SIZE
290
+ ) {
291
+ if (decodeBech32.version !== FUTURE_OPNET_VERSION) {
292
+ console.warn(FUTURE_SEGWIT_VERSION_WARNING);
293
+ }
294
+
295
+ return bscript.compile([
296
+ decodeBech32.version + FUTURE_SEGWIT_VERSION_DIFF,
297
+ decodeBech32.data,
298
+ ]);
299
+ }
300
+ }
301
+ }
302
+
303
+ return Buffer.from(address, 'hex');
304
+ }