@btc-vision/bitcoin 6.3.1 → 6.3.3

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 (374) 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/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/.ready +0 -0
  8. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/.release-please-manifest.json +3 -0
  9. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/CHANGELOG.md +962 -0
  10. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/CONTRIBUTING.md +34 -0
  11. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/LICENSE +24 -0
  12. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/README.md +273 -0
  13. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/SECURITY.md +2 -0
  14. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/addon.gypi +204 -0
  15. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/bin/node-gyp.js +138 -0
  16. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/.release-please-manifest.json +3 -0
  17. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/LICENSE +28 -0
  18. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/data/ninja/build.ninja +4 -0
  19. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc +12 -0
  20. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/GypVsCMake.md +116 -0
  21. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/Hacking.md +46 -0
  22. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/InputFormatReference.md +1080 -0
  23. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/LanguageSpecification.md +430 -0
  24. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/README.md +27 -0
  25. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/Testing.md +450 -0
  26. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/UserDocumentation.md +965 -0
  27. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/gyp +8 -0
  28. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/gyp.bat +5 -0
  29. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/gyp_main.py +45 -0
  30. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py +365 -0
  31. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py +206 -0
  32. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py +1272 -0
  33. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py +1547 -0
  34. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py +59 -0
  35. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py +153 -0
  36. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py +271 -0
  37. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py +574 -0
  38. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/__init__.py +692 -0
  39. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/common.py +711 -0
  40. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/common_test.py +171 -0
  41. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py +169 -0
  42. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py +113 -0
  43. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py +55 -0
  44. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.py +0 -0
  45. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py +804 -0
  46. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py +1173 -0
  47. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py +1318 -0
  48. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py +127 -0
  49. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py +103 -0
  50. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py +461 -0
  51. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py +89 -0
  52. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py +57 -0
  53. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py +2745 -0
  54. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py +3976 -0
  55. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py +44 -0
  56. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py +2964 -0
  57. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py +67 -0
  58. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py +1391 -0
  59. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py +25 -0
  60. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/input.py +3115 -0
  61. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/input_test.py +98 -0
  62. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py +771 -0
  63. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py +1260 -0
  64. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py +174 -0
  65. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py +61 -0
  66. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py +373 -0
  67. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py +1938 -0
  68. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation_test.py +53 -0
  69. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py +302 -0
  70. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py +3198 -0
  71. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py +65 -0
  72. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/LICENSE +3 -0
  73. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/LICENSE.APACHE +177 -0
  74. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/LICENSE.BSD +23 -0
  75. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/__init__.py +15 -0
  76. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_elffile.py +108 -0
  77. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_manylinux.py +252 -0
  78. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_musllinux.py +83 -0
  79. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_parser.py +359 -0
  80. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_structures.py +61 -0
  81. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_tokenizer.py +192 -0
  82. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/markers.py +252 -0
  83. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/metadata.py +825 -0
  84. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/py.typed +0 -0
  85. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/requirements.py +90 -0
  86. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/specifiers.py +1030 -0
  87. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/tags.py +553 -0
  88. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/utils.py +172 -0
  89. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/version.py +563 -0
  90. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pyproject.toml +120 -0
  91. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/release-please-config.json +11 -0
  92. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/test_gyp.py +261 -0
  93. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/Find-VisualStudio.cs +250 -0
  94. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/build.js +227 -0
  95. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/clean.js +15 -0
  96. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/configure.js +328 -0
  97. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/create-config-gypi.js +150 -0
  98. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/download.js +39 -0
  99. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/find-node-directory.js +63 -0
  100. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/find-python.js +310 -0
  101. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/find-visualstudio.js +590 -0
  102. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/install.js +415 -0
  103. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/list.js +26 -0
  104. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/log.js +168 -0
  105. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/node-gyp.js +188 -0
  106. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/process-release.js +146 -0
  107. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/rebuild.js +12 -0
  108. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/remove.js +43 -0
  109. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/util.js +81 -0
  110. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/macOS_Catalina_acid_test.sh +21 -0
  111. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/package.json +51 -0
  112. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/release-please-config.json +40 -0
  113. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/src/win_delay_load_hook.cc +39 -0
  114. package/CHANGELOG.md +403 -0
  115. package/CONTRIBUTING.md +83 -0
  116. package/browser/address.d.ts +16 -0
  117. package/{src → browser}/bip66.d.ts +6 -7
  118. package/{src → browser}/block.d.ts +29 -30
  119. package/{src → browser}/bufferutils.d.ts +34 -54
  120. package/browser/crypto/crypto.d.ts +1 -0
  121. package/{src → browser}/crypto.d.ts +13 -18
  122. package/browser/ecc_lib.d.ts +3 -0
  123. package/browser/hooks/AdvancedSignatureManager.d.ts +16 -0
  124. package/{src → browser}/hooks/HookedSigner.d.ts +4 -4
  125. package/browser/hooks/SignatureManager.d.ts +13 -0
  126. package/browser/index.d.ts +58 -0
  127. package/browser/index.js +2 -0
  128. package/browser/index.js.LICENSE.txt +14 -0
  129. package/browser/merkle.d.ts +1 -0
  130. package/browser/networks.d.ts +23 -0
  131. package/{src → browser}/ops.d.ts +126 -126
  132. package/browser/payments/bip341.d.ts +23 -0
  133. package/browser/payments/embed.d.ts +2 -0
  134. package/browser/payments/index.d.ts +43 -0
  135. package/{src → browser}/payments/lazy.d.ts +2 -2
  136. package/browser/payments/p2ms.d.ts +2 -0
  137. package/browser/payments/p2pk.d.ts +2 -0
  138. package/browser/payments/p2pkh.d.ts +2 -0
  139. package/browser/payments/p2sh.d.ts +2 -0
  140. package/browser/payments/p2tr.d.ts +2 -0
  141. package/browser/payments/p2wpkh.d.ts +2 -0
  142. package/browser/payments/p2wsh.d.ts +2 -0
  143. package/browser/psbt/bip371.d.ts +16 -0
  144. package/browser/psbt/psbtutils.d.ts +26 -0
  145. package/{src → browser}/psbt.d.ts +167 -238
  146. package/browser/push_data.d.ts +7 -0
  147. package/browser/script.d.ts +17 -0
  148. package/browser/script_number.d.ts +2 -0
  149. package/browser/script_signature.d.ts +7 -0
  150. package/{src → browser}/transaction.d.ts +48 -60
  151. package/{src → browser}/types.d.ts +37 -54
  152. package/build/address.d.ts +16 -0
  153. package/build/address.js +148 -0
  154. package/build/bip66.d.ts +6 -0
  155. package/build/bip66.js +99 -0
  156. package/build/block.d.ts +29 -0
  157. package/build/block.js +181 -0
  158. package/build/bufferutils.d.ts +34 -0
  159. package/build/bufferutils.js +141 -0
  160. package/build/crypto/crypto.d.ts +1 -0
  161. package/build/crypto/crypto.js +1 -0
  162. package/build/crypto.d.ts +13 -0
  163. package/build/crypto.js +87 -0
  164. package/build/ecc_lib.d.ts +3 -0
  165. package/build/ecc_lib.js +61 -0
  166. package/build/hooks/AdvancedSignatureManager.d.ts +16 -0
  167. package/build/hooks/AdvancedSignatureManager.js +52 -0
  168. package/build/hooks/HookedSigner.d.ts +4 -0
  169. package/build/hooks/HookedSigner.js +64 -0
  170. package/build/hooks/SignatureManager.d.ts +13 -0
  171. package/build/hooks/SignatureManager.js +45 -0
  172. package/build/index.d.ts +58 -0
  173. package/build/index.js +32 -0
  174. package/build/merkle.d.ts +1 -0
  175. package/build/merkle.js +19 -0
  176. package/build/networks.d.ts +23 -0
  177. package/build/networks.js +121 -0
  178. package/build/ops.d.ts +126 -0
  179. package/{src → build}/ops.js +127 -131
  180. package/build/payments/bip341.d.ts +23 -0
  181. package/build/payments/bip341.js +82 -0
  182. package/build/payments/embed.d.ts +2 -0
  183. package/build/payments/embed.js +39 -0
  184. package/build/payments/index.d.ts +43 -0
  185. package/build/payments/index.js +10 -0
  186. package/build/payments/lazy.d.ts +2 -0
  187. package/{src → build}/payments/lazy.js +28 -32
  188. package/build/payments/p2ms.d.ts +2 -0
  189. package/{src → build}/payments/p2ms.js +128 -158
  190. package/build/payments/p2pk.d.ts +2 -0
  191. package/build/payments/p2pk.js +68 -0
  192. package/build/payments/p2pkh.d.ts +2 -0
  193. package/build/payments/p2pkh.js +173 -0
  194. package/build/payments/p2sh.d.ts +2 -0
  195. package/build/payments/p2sh.js +176 -0
  196. package/build/payments/p2tr.d.ts +2 -0
  197. package/build/payments/p2tr.js +254 -0
  198. package/build/payments/p2wpkh.d.ts +2 -0
  199. package/build/payments/p2wpkh.js +130 -0
  200. package/build/payments/p2wsh.d.ts +2 -0
  201. package/build/payments/p2wsh.js +180 -0
  202. package/build/psbt/bip371.d.ts +16 -0
  203. package/build/psbt/bip371.js +246 -0
  204. package/build/psbt/psbtutils.d.ts +26 -0
  205. package/build/psbt/psbtutils.js +177 -0
  206. package/build/psbt.d.ts +167 -0
  207. package/build/psbt.js +1307 -0
  208. package/build/push_data.d.ts +7 -0
  209. package/build/push_data.js +57 -0
  210. package/build/script.d.ts +17 -0
  211. package/build/script.js +167 -0
  212. package/build/script_number.d.ts +2 -0
  213. package/build/script_number.js +49 -0
  214. package/build/script_signature.d.ts +7 -0
  215. package/build/script_signature.js +49 -0
  216. package/build/transaction.d.ts +48 -0
  217. package/build/transaction.js +445 -0
  218. package/build/types.d.ts +37 -0
  219. package/build/types.js +73 -0
  220. package/cjs/package.json +3 -0
  221. package/coverage/tmp/coverage-31752-1735543485354-0.json +1 -0
  222. package/coverage/tmp/coverage-59920-1735543484555-0.json +1 -0
  223. package/coverage/tmp/coverage-66252-1735543483919-0.json +1 -0
  224. package/coverage/tmp/coverage-68440-1735543485236-0.json +1 -0
  225. package/coverage/tmp/coverage-70588-1735543484426-0.json +1 -0
  226. package/coverage/tmp/coverage-79292-1735543485296-0.json +1 -0
  227. package/coverage/tmp/coverage-80212-1735543483980-0.json +1 -0
  228. package/eslint.config.js +56 -0
  229. package/gulpfile.js +42 -0
  230. package/package.json +105 -50
  231. package/src/{address.js → address.ts} +211 -191
  232. package/src/{bip66.js → bip66.ts} +23 -19
  233. package/src/{block.js → block.ts} +114 -105
  234. package/src/{bufferutils.js → bufferutils.ts} +65 -67
  235. package/src/crypto/crypto-browser.js +75 -0
  236. package/src/crypto/crypto.ts +1 -0
  237. package/src/crypto.ts +108 -0
  238. package/src/{ecc_lib.js → ecc_lib.ts} +25 -53
  239. package/src/hooks/{AdvancedSignatureManager.js → AdvancedSignatureManager.ts} +34 -18
  240. package/src/hooks/HookedSigner.ts +108 -0
  241. package/src/hooks/{SignatureManager.js → SignatureManager.ts} +26 -14
  242. package/src/index.ts +86 -0
  243. package/src/{merkle.js → merkle.ts} +8 -7
  244. package/src/{networks.js → networks.ts} +235 -220
  245. package/src/ops.ts +282 -0
  246. package/src/payments/bip341.ts +140 -0
  247. package/src/payments/embed.ts +55 -0
  248. package/src/payments/{index.d.ts → index.ts} +24 -10
  249. package/src/payments/lazy.ts +28 -0
  250. package/src/payments/p2ms.ts +150 -0
  251. package/src/payments/{p2pk.js → p2pk.ts} +85 -82
  252. package/src/payments/p2pkh.ts +206 -0
  253. package/src/payments/{p2sh.js → p2sh.ts} +206 -204
  254. package/src/payments/{p2tr.js → p2tr.ts} +114 -125
  255. package/src/payments/{p2wpkh.js → p2wpkh.ts} +51 -56
  256. package/src/payments/{p2wsh.js → p2wsh.ts} +69 -81
  257. package/src/psbt/{bip371.js → bip371.ts} +441 -424
  258. package/src/psbt/psbtutils.ts +301 -0
  259. package/src/{psbt.js → psbt.ts} +2187 -1828
  260. package/src/{push_data.js → push_data.ts} +35 -21
  261. package/src/{script.js → script.ts} +93 -77
  262. package/src/{script_number.js → script_number.ts} +15 -21
  263. package/src/{script_signature.js → script_signature.ts} +26 -14
  264. package/src/{transaction.js → transaction.ts} +247 -167
  265. package/src/types.ts +122 -0
  266. package/test/address.spec.js +124 -0
  267. package/test/address.spec.ts +177 -0
  268. package/test/bitcoin.core.spec.js +170 -0
  269. package/test/bitcoin.core.spec.ts +234 -0
  270. package/test/block.spec.js +141 -0
  271. package/test/block.spec.ts +194 -0
  272. package/test/bufferutils.spec.js +427 -0
  273. package/test/bufferutils.spec.ts +513 -0
  274. package/test/crypto.spec.js +41 -0
  275. package/test/crypto.spec.ts +55 -0
  276. package/test/fixtures/address.json +329 -0
  277. package/test/fixtures/block.json +148 -0
  278. package/test/fixtures/bufferutils.json +102 -0
  279. package/test/fixtures/core/README.md +26 -0
  280. package/test/fixtures/core/base58_encode_decode.json +50 -0
  281. package/test/fixtures/core/base58_keys_invalid.json +152 -0
  282. package/test/fixtures/core/base58_keys_valid.json +452 -0
  283. package/test/fixtures/core/blocks.json +27 -0
  284. package/test/fixtures/core/sig_canonical.json +7 -0
  285. package/test/fixtures/core/sig_noncanonical.json +33 -0
  286. package/test/fixtures/core/sighash.json +3505 -0
  287. package/test/fixtures/core/tx_valid.json +2023 -0
  288. package/test/fixtures/crypto.json +43 -0
  289. package/test/fixtures/ecdsa.json +217 -0
  290. package/test/fixtures/ecpair.json +141 -0
  291. package/test/fixtures/embed.json +108 -0
  292. package/test/fixtures/p2ms.json +434 -0
  293. package/test/fixtures/p2pk.json +179 -0
  294. package/test/fixtures/p2pkh.json +276 -0
  295. package/test/fixtures/p2sh.json +508 -0
  296. package/test/fixtures/p2tr.json +1198 -0
  297. package/test/fixtures/p2wpkh.json +290 -0
  298. package/test/fixtures/p2wsh.json +489 -0
  299. package/test/fixtures/psbt.json +924 -0
  300. package/test/fixtures/script.json +465 -0
  301. package/test/fixtures/script_number.json +225 -0
  302. package/test/fixtures/signature.json +140 -0
  303. package/test/fixtures/transaction.json +916 -0
  304. package/test/integration/_regtest.js +7 -0
  305. package/test/integration/_regtest.ts +6 -0
  306. package/test/integration/addresses.spec.js +116 -0
  307. package/test/integration/addresses.spec.ts +154 -0
  308. package/test/integration/bip32.spec.js +85 -0
  309. package/test/integration/bip32.spec.ts +151 -0
  310. package/test/integration/blocks.spec.js +26 -0
  311. package/test/integration/blocks.spec.ts +28 -0
  312. package/test/integration/cltv.spec.js +199 -0
  313. package/test/integration/cltv.spec.ts +283 -0
  314. package/test/integration/csv.spec.js +362 -0
  315. package/test/integration/csv.spec.ts +527 -0
  316. package/test/integration/payments.spec.js +98 -0
  317. package/test/integration/payments.spec.ts +135 -0
  318. package/test/integration/taproot.spec.js +532 -0
  319. package/test/integration/taproot.spec.ts +707 -0
  320. package/test/integration/transactions.spec.js +561 -0
  321. package/test/integration/transactions.spec.ts +769 -0
  322. package/test/payments.spec.js +97 -0
  323. package/test/payments.spec.ts +125 -0
  324. package/test/payments.utils.js +190 -0
  325. package/test/payments.utils.ts +208 -0
  326. package/test/psbt.spec.js +1044 -0
  327. package/test/psbt.spec.ts +1414 -0
  328. package/test/script.spec.js +151 -0
  329. package/test/script.spec.ts +210 -0
  330. package/test/script_number.spec.js +24 -0
  331. package/test/script_number.spec.ts +29 -0
  332. package/test/script_signature.spec.js +52 -0
  333. package/test/script_signature.spec.ts +66 -0
  334. package/test/transaction.spec.js +269 -0
  335. package/test/transaction.spec.ts +387 -0
  336. package/test/ts-node-register.js +5 -0
  337. package/test/tsconfig.json +45 -0
  338. package/test/types.spec.js +46 -0
  339. package/test/types.spec.ts +58 -0
  340. package/tsconfig.base.json +27 -0
  341. package/tsconfig.json +19 -0
  342. package/tsconfig.webpack.json +18 -0
  343. package/webpack.config.js +79 -0
  344. package/src/address.d.ts +0 -42
  345. package/src/crypto.js +0 -128
  346. package/src/ecc_lib.d.ts +0 -17
  347. package/src/hooks/AdvancedSignatureManager.d.ts +0 -44
  348. package/src/hooks/HookedSigner.js +0 -90
  349. package/src/hooks/SignatureManager.d.ts +0 -35
  350. package/src/index.d.ts +0 -42
  351. package/src/index.js +0 -87
  352. package/src/merkle.d.ts +0 -10
  353. package/src/networks.d.ts +0 -83
  354. package/src/payments/bip341.d.ts +0 -49
  355. package/src/payments/bip341.js +0 -124
  356. package/src/payments/embed.d.ts +0 -9
  357. package/src/payments/embed.js +0 -54
  358. package/src/payments/index.js +0 -69
  359. package/src/payments/p2ms.d.ts +0 -9
  360. package/src/payments/p2pk.d.ts +0 -10
  361. package/src/payments/p2pkh.d.ts +0 -10
  362. package/src/payments/p2pkh.js +0 -143
  363. package/src/payments/p2sh.d.ts +0 -10
  364. package/src/payments/p2tr.d.ts +0 -10
  365. package/src/payments/p2wpkh.d.ts +0 -10
  366. package/src/payments/p2wsh.d.ts +0 -10
  367. package/src/psbt/bip371.d.ts +0 -42
  368. package/src/psbt/psbtutils.d.ts +0 -64
  369. package/src/psbt/psbtutils.js +0 -191
  370. package/src/push_data.d.ts +0 -29
  371. package/src/script.d.ts +0 -42
  372. package/src/script_number.d.ts +0 -19
  373. package/src/script_signature.d.ts +0 -21
  374. package/src/types.js +0 -106
package/src/ops.ts ADDED
@@ -0,0 +1,282 @@
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
+
27
+ // control
28
+ OP_NOP: number;
29
+ OP_VER: number;
30
+ OP_IF: number;
31
+ OP_NOTIF: number;
32
+ OP_VERIF: number;
33
+ OP_VERNOTIF: number;
34
+ OP_ELSE: number;
35
+ OP_ENDIF: number;
36
+ OP_VERIFY: number;
37
+ OP_RETURN: number;
38
+
39
+ // stack ops
40
+ OP_TOALTSTACK: number;
41
+ OP_FROMALTSTACK: number;
42
+ OP_2DROP: number;
43
+ OP_2DUP: number;
44
+ OP_3DUP: number;
45
+ OP_2OVER: number;
46
+ OP_2ROT: number;
47
+ OP_2SWAP: number;
48
+ OP_IFDUP: number;
49
+ OP_DEPTH: number;
50
+ OP_DROP: number;
51
+ OP_DUP: number;
52
+ OP_NIP: number;
53
+ OP_OVER: number;
54
+ OP_PICK: number;
55
+ OP_ROLL: number;
56
+ OP_ROT: number;
57
+ OP_SWAP: number;
58
+ OP_TUCK: number;
59
+
60
+ // splice ops
61
+ OP_CAT: number;
62
+ OP_SUBSTR: number;
63
+ OP_LEFT: number;
64
+ OP_RIGHT: number;
65
+ OP_SIZE: number;
66
+
67
+ // bit logic
68
+ OP_INVERT: number;
69
+ OP_AND: number;
70
+ OP_OR: number;
71
+ OP_XOR: number;
72
+ OP_EQUAL: number;
73
+ OP_EQUALVERIFY: number;
74
+ OP_RESERVED1: number;
75
+ OP_RESERVED2: number;
76
+
77
+ // numeric
78
+ OP_1ADD: number;
79
+ OP_1SUB: number;
80
+ OP_2MUL: number;
81
+ OP_2DIV: number;
82
+ OP_NEGATE: number;
83
+ OP_ABS: number;
84
+ OP_NOT: number;
85
+ OP_0NOTEQUAL: number;
86
+ OP_ADD: number;
87
+ OP_SUB: number;
88
+ OP_MUL: number;
89
+ OP_DIV: number;
90
+ OP_MOD: number;
91
+ OP_LSHIFT: number;
92
+ OP_RSHIFT: number;
93
+ OP_BOOLAND: number;
94
+ OP_BOOLOR: number;
95
+ OP_NUMEQUAL: number;
96
+ OP_NUMEQUALVERIFY: number;
97
+ OP_NUMNOTEQUAL: number;
98
+ OP_LESSTHAN: number;
99
+ OP_GREATERTHAN: number;
100
+ OP_LESSTHANOREQUAL: number;
101
+ OP_GREATERTHANOREQUAL: number;
102
+ OP_MIN: number;
103
+ OP_MAX: number;
104
+ OP_WITHIN: number;
105
+
106
+ // crypto
107
+ OP_RIPEMD160: number;
108
+ OP_SHA1: number;
109
+ OP_SHA256: number;
110
+ OP_HASH160: number;
111
+ OP_HASH256: number;
112
+ OP_CODESEPARATOR: number;
113
+ OP_CHECKSIG: number;
114
+ OP_CHECKSIGVERIFY: number;
115
+ OP_CHECKMULTISIG: number;
116
+ OP_CHECKMULTISIGVERIFY: number;
117
+ OP_CHECKLOCKTIMEVERIFY: number;
118
+ OP_CHECKSEQUENCEVERIFY: number;
119
+
120
+ OP_CHECKSIGADD: number;
121
+
122
+ // expansion
123
+ OP_NOP1: number;
124
+ OP_NOP2: number;
125
+ OP_NOP3: number;
126
+ OP_NOP4: number;
127
+ OP_NOP5: number;
128
+ OP_NOP6: number;
129
+ OP_NOP7: number;
130
+ OP_NOP8: number;
131
+ OP_NOP9: number;
132
+ OP_NOP10: number;
133
+
134
+ // template matching params
135
+ OP_PUBKEYHASH: number;
136
+ OP_PUBKEY: number;
137
+ OP_INVALIDOPCODE: number;
138
+ }
139
+
140
+ const OPS: Opcodes = {
141
+ OP_FALSE: 0,
142
+ OP_0: 0,
143
+ OP_PUSHDATA1: 76,
144
+ OP_PUSHDATA2: 77,
145
+ OP_PUSHDATA4: 78,
146
+ OP_1NEGATE: 79,
147
+ OP_RESERVED: 80,
148
+ OP_TRUE: 81,
149
+ OP_1: 81,
150
+ OP_2: 82,
151
+ OP_3: 83,
152
+ OP_4: 84,
153
+ OP_5: 85,
154
+ OP_6: 86,
155
+ OP_7: 87,
156
+ OP_8: 88,
157
+ OP_9: 89,
158
+ OP_10: 90,
159
+ OP_11: 91,
160
+ OP_12: 92,
161
+ OP_13: 93,
162
+ OP_14: 94,
163
+ OP_15: 95,
164
+ OP_16: 96,
165
+
166
+ OP_NOP: 97,
167
+ OP_VER: 98,
168
+ OP_IF: 99,
169
+ OP_NOTIF: 100,
170
+ OP_VERIF: 101,
171
+ OP_VERNOTIF: 102,
172
+ OP_ELSE: 103,
173
+ OP_ENDIF: 104,
174
+ OP_VERIFY: 105,
175
+ OP_RETURN: 106,
176
+
177
+ OP_TOALTSTACK: 107,
178
+ OP_FROMALTSTACK: 108,
179
+ OP_2DROP: 109,
180
+ OP_2DUP: 110,
181
+ OP_3DUP: 111,
182
+ OP_2OVER: 112,
183
+ OP_2ROT: 113,
184
+ OP_2SWAP: 114,
185
+ OP_IFDUP: 115,
186
+ OP_DEPTH: 116,
187
+ OP_DROP: 117,
188
+ OP_DUP: 118,
189
+ OP_NIP: 119,
190
+ OP_OVER: 120,
191
+ OP_PICK: 121,
192
+ OP_ROLL: 122,
193
+ OP_ROT: 123,
194
+ OP_SWAP: 124,
195
+ OP_TUCK: 125,
196
+
197
+ OP_CAT: 126,
198
+ OP_SUBSTR: 127,
199
+ OP_LEFT: 128,
200
+ OP_RIGHT: 129,
201
+ OP_SIZE: 130,
202
+
203
+ OP_INVERT: 131,
204
+ OP_AND: 132,
205
+ OP_OR: 133,
206
+ OP_XOR: 134,
207
+ OP_EQUAL: 135,
208
+ OP_EQUALVERIFY: 136,
209
+ OP_RESERVED1: 137,
210
+ OP_RESERVED2: 138,
211
+
212
+ OP_1ADD: 139,
213
+ OP_1SUB: 140,
214
+ OP_2MUL: 141,
215
+ OP_2DIV: 142,
216
+ OP_NEGATE: 143,
217
+ OP_ABS: 144,
218
+ OP_NOT: 145,
219
+ OP_0NOTEQUAL: 146,
220
+ OP_ADD: 147,
221
+ OP_SUB: 148,
222
+ OP_MUL: 149,
223
+ OP_DIV: 150,
224
+ OP_MOD: 151,
225
+ OP_LSHIFT: 152,
226
+ OP_RSHIFT: 153,
227
+
228
+ OP_BOOLAND: 154,
229
+ OP_BOOLOR: 155,
230
+ OP_NUMEQUAL: 156,
231
+ OP_NUMEQUALVERIFY: 157,
232
+ OP_NUMNOTEQUAL: 158,
233
+ OP_LESSTHAN: 159,
234
+ OP_GREATERTHAN: 160,
235
+ OP_LESSTHANOREQUAL: 161,
236
+ OP_GREATERTHANOREQUAL: 162,
237
+ OP_MIN: 163,
238
+ OP_MAX: 164,
239
+
240
+ OP_WITHIN: 165,
241
+
242
+ OP_RIPEMD160: 166,
243
+ OP_SHA1: 167,
244
+ OP_SHA256: 168,
245
+ OP_HASH160: 169,
246
+ OP_HASH256: 170,
247
+ OP_CODESEPARATOR: 171,
248
+ OP_CHECKSIG: 172,
249
+ OP_CHECKSIGVERIFY: 173,
250
+ OP_CHECKMULTISIG: 174,
251
+ OP_CHECKMULTISIGVERIFY: 175,
252
+
253
+ OP_NOP1: 176,
254
+
255
+ OP_NOP2: 177,
256
+ OP_CHECKLOCKTIMEVERIFY: 177,
257
+
258
+ OP_NOP3: 178,
259
+ OP_CHECKSEQUENCEVERIFY: 178,
260
+
261
+ OP_NOP4: 179,
262
+ OP_NOP5: 180,
263
+ OP_NOP6: 181,
264
+ OP_NOP7: 182,
265
+ OP_NOP8: 183,
266
+ OP_NOP9: 184,
267
+ OP_NOP10: 185,
268
+
269
+ OP_CHECKSIGADD: 186,
270
+
271
+ OP_PUBKEYHASH: 253,
272
+ OP_PUBKEY: 254,
273
+ OP_INVALIDOPCODE: 255,
274
+ };
275
+
276
+ const REVERSE_OPS: { [key: number]: string } = {};
277
+ for (const op of Object.keys(OPS)) {
278
+ const code = OPS[op as keyof Opcodes];
279
+ REVERSE_OPS[code] = op;
280
+ }
281
+
282
+ export { OPS, REVERSE_OPS };
@@ -0,0 +1,140 @@
1
+ import { Buffer as NBuffer } from 'buffer';
2
+ import * as bcrypto from '../crypto.js';
3
+ import { getEccLib } from '../ecc_lib.js';
4
+
5
+ import { varuint } from '../bufferutils.js';
6
+ import { isTapleaf, Tapleaf, Taptree } from '../types.js';
7
+
8
+ export const LEAF_VERSION_TAPSCRIPT = 0xc0;
9
+ export const MAX_TAPTREE_DEPTH = 128;
10
+
11
+ interface HashLeaf {
12
+ hash: Buffer;
13
+ }
14
+
15
+ interface HashBranch {
16
+ hash: Buffer;
17
+ left: HashTree;
18
+ right: HashTree;
19
+ }
20
+
21
+ interface TweakedPublicKey {
22
+ parity: number;
23
+ x: Buffer;
24
+ }
25
+
26
+ const isHashBranch = (ht: HashTree): ht is HashBranch => 'left' in ht && 'right' in ht;
27
+
28
+ /**
29
+ * Binary tree representing leaf, branch, and root node hashes of a Taptree.
30
+ * Each node contains a hash, and potentially left and right branch hashes.
31
+ * This tree is used for 2 purposes: Providing the root hash for tweaking,
32
+ * and calculating merkle inclusion proofs when constructing a control block.
33
+ */
34
+ export type HashTree = HashLeaf | HashBranch;
35
+
36
+ /**
37
+ * Calculates the root hash from a given control block and leaf hash.
38
+ * @param controlBlock - The control block buffer.
39
+ * @param leafHash - The leaf hash buffer.
40
+ * @returns The root hash buffer.
41
+ * @throws {TypeError} If the control block length is less than 33.
42
+ */
43
+ export function rootHashFromPath(controlBlock: Buffer, leafHash: Buffer): Buffer {
44
+ if (controlBlock.length < 33)
45
+ throw new TypeError(
46
+ `The control-block length is too small. Got ${controlBlock.length}, expected min 33.`,
47
+ );
48
+ const m = (controlBlock.length - 33) / 32;
49
+
50
+ let kj = leafHash;
51
+ for (let j = 0; j < m; j++) {
52
+ const ej = controlBlock.slice(33 + 32 * j, 65 + 32 * j);
53
+ if (kj.compare(ej) < 0) {
54
+ kj = tapBranchHash(kj, ej);
55
+ } else {
56
+ kj = tapBranchHash(ej, kj);
57
+ }
58
+ }
59
+
60
+ return kj;
61
+ }
62
+
63
+ /**
64
+ * Build a hash tree of merkle nodes from the scripts binary tree.
65
+ * @param scriptTree - the tree of scripts to pairwise hash.
66
+ */
67
+ export function toHashTree(scriptTree: Taptree): HashTree {
68
+ if (isTapleaf(scriptTree)) return { hash: tapleafHash(scriptTree) };
69
+
70
+ const hashes = [toHashTree(scriptTree[0]), toHashTree(scriptTree[1])];
71
+ hashes.sort((a, b) => a.hash.compare(b.hash));
72
+ const [left, right] = hashes;
73
+
74
+ return {
75
+ hash: tapBranchHash(left.hash, right.hash),
76
+ left,
77
+ right,
78
+ };
79
+ }
80
+
81
+ /**
82
+ * Given a HashTree, finds the path from a particular hash to the root.
83
+ * @param node - the root of the tree
84
+ * @param hash - the hash to search for
85
+ * @returns - array of sibling hashes, from leaf (inclusive) to root
86
+ * (exclusive) needed to prove inclusion of the specified hash. undefined if no
87
+ * path is found
88
+ */
89
+ export function findScriptPath(node: HashTree, hash: Buffer): Buffer[] | undefined {
90
+ if (isHashBranch(node)) {
91
+ const leftPath = findScriptPath(node.left, hash);
92
+ if (leftPath !== undefined) return [...leftPath, node.right.hash];
93
+
94
+ const rightPath = findScriptPath(node.right, hash);
95
+ if (rightPath !== undefined) return [...rightPath, node.left.hash];
96
+ } else if (node.hash.equals(hash)) {
97
+ return [];
98
+ }
99
+
100
+ return undefined;
101
+ }
102
+
103
+ export function tapleafHash(leaf: Tapleaf): Buffer {
104
+ const version = leaf.version || LEAF_VERSION_TAPSCRIPT;
105
+ return bcrypto.taggedHash(
106
+ 'TapLeaf',
107
+ NBuffer.concat([NBuffer.from([version]), serializeScript(leaf.output)]),
108
+ );
109
+ }
110
+
111
+ export function tapTweakHash(pubKey: Buffer, h: Buffer | undefined): Buffer {
112
+ return bcrypto.taggedHash('TapTweak', NBuffer.concat(h ? [pubKey, h] : [pubKey]));
113
+ }
114
+
115
+ export function tweakKey(pubKey: Buffer, h: Buffer | undefined): TweakedPublicKey | null {
116
+ if (!NBuffer.isBuffer(pubKey)) return null;
117
+ if (pubKey.length !== 32) return null;
118
+ if (h && h.length !== 32) return null;
119
+
120
+ const tweakHash = tapTweakHash(pubKey, h);
121
+
122
+ const res = getEccLib().xOnlyPointAddTweak(pubKey, tweakHash);
123
+ if (!res || res.xOnlyPubkey === null) return null;
124
+
125
+ return {
126
+ parity: res.parity,
127
+ x: NBuffer.from(res.xOnlyPubkey),
128
+ };
129
+ }
130
+
131
+ function tapBranchHash(a: Buffer, b: Buffer): Buffer {
132
+ return bcrypto.taggedHash('TapBranch', NBuffer.concat([a, b]));
133
+ }
134
+
135
+ function serializeScript(s: Buffer): Buffer {
136
+ const varintLen = varuint.encodingLength(s.length);
137
+ const buffer = NBuffer.allocUnsafe(varintLen); // better
138
+ varuint.encode(s.length, buffer);
139
+ return NBuffer.concat([buffer, s]);
140
+ }
@@ -0,0 +1,55 @@
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 { Payment, PaymentOpts, Stack } from './index.js';
5
+ import * as lazy from './lazy.js';
6
+
7
+ const OPS = bscript.OPS;
8
+
9
+ // output: OP_RETURN ...
10
+ /**
11
+ * Embeds data in a Bitcoin payment.
12
+ * @param a - The payment object.
13
+ * @param opts - Optional payment options.
14
+ * @returns The modified payment object.
15
+ * @throws {TypeError} If there is not enough data or if the output is invalid.
16
+ */
17
+ export function p2data(a: Payment, opts?: PaymentOpts): Payment {
18
+ if (!a.data && !a.output) throw new TypeError('Not enough data');
19
+ opts = Object.assign({ validate: true }, opts || {});
20
+
21
+ typef(
22
+ {
23
+ network: typef.maybe(typef.Object),
24
+ output: typef.maybe(typef.Buffer),
25
+ data: typef.maybe(typef.arrayOf(typef.Buffer)),
26
+ },
27
+ a,
28
+ );
29
+
30
+ const network = a.network || BITCOIN_NETWORK;
31
+ const o = { name: 'embed', network } as Payment;
32
+
33
+ lazy.prop(o, 'output', () => {
34
+ if (!a.data) return;
35
+ return bscript.compile(([OPS.OP_RETURN] as Stack).concat(a.data));
36
+ });
37
+ lazy.prop(o, 'data', () => {
38
+ if (!a.output) return;
39
+ return bscript.decompile(a.output)!.slice(1);
40
+ });
41
+
42
+ // extended validation
43
+ if (opts.validate) {
44
+ if (a.output) {
45
+ const chunks = bscript.decompile(a.output);
46
+ if (chunks![0] !== OPS.OP_RETURN) throw new TypeError('Output is invalid');
47
+ if (!chunks!.slice(1).every(typef.Buffer)) throw new TypeError('Output is invalid');
48
+
49
+ if (a.data && !stacksEqual(a.data, o.data as Buffer[]))
50
+ throw new TypeError('Data mismatch');
51
+ }
52
+ }
53
+
54
+ return Object.assign(o, a);
55
+ }
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  /**
3
2
  * Represents a payment object, which is used to create a payment.
4
3
  *
@@ -6,16 +5,21 @@
6
5
  *
7
6
  * @packageDocumentation
8
7
  */
8
+
9
9
  import { Network } from '../networks';
10
10
  import { Taptree } from '../types';
11
- import { p2data as embed } from './embed';
12
- import { p2ms } from './p2ms';
13
- import { p2pk } from './p2pk';
14
- import { p2pkh } from './p2pkh';
15
- import { p2sh } from './p2sh';
16
- import { p2wpkh } from './p2wpkh';
17
- import { p2wsh } from './p2wsh';
18
- import { p2tr } from './p2tr';
11
+
12
+ export * from './bip341.js';
13
+ export * from './embed.js';
14
+ export * from './lazy.js';
15
+ export * from './p2ms.js';
16
+ export * from './p2pk.js';
17
+ export * from './p2pkh.js';
18
+ export * from './p2sh.js';
19
+ export * from './p2tr.js';
20
+ export * from './p2wpkh.js';
21
+ export * from './p2wsh.js';
22
+
19
23
  export interface Payment {
20
24
  name?: string;
21
25
  network?: Network;
@@ -35,14 +39,24 @@ export interface Payment {
35
39
  redeemVersion?: number;
36
40
  scriptTree?: Taptree;
37
41
  witness?: Buffer[];
42
+
43
+ // NEW FIELDS
44
+ useHybrid?: boolean;
45
+ useUncompressed?: boolean;
38
46
  }
47
+
39
48
  export type PaymentCreator = (a: Payment, opts?: PaymentOpts) => Payment;
49
+
40
50
  export type PaymentFunction = () => Payment;
51
+
41
52
  export interface PaymentOpts {
42
53
  validate?: boolean;
43
54
  allowIncomplete?: boolean;
44
55
  }
56
+
45
57
  export type StackElement = Buffer | number;
46
58
  export type Stack = StackElement[];
47
59
  export type StackFunction = () => Stack;
48
- export { embed, p2ms, p2pk, p2pkh, p2sh, p2wpkh, p2wsh, p2tr };
60
+
61
+ // TODO
62
+ // witness commitment
@@ -0,0 +1,28 @@
1
+ export function prop(object: {}, name: string, f: () => any): void {
2
+ Object.defineProperty(object, name, {
3
+ configurable: true,
4
+ enumerable: true,
5
+ get(): any {
6
+ const _value = f.call(this);
7
+ this[name] = _value;
8
+ return _value;
9
+ },
10
+ set(_value: any): void {
11
+ Object.defineProperty(this, name, {
12
+ configurable: true,
13
+ enumerable: true,
14
+ value: _value,
15
+ writable: true,
16
+ });
17
+ },
18
+ });
19
+ }
20
+
21
+ export function value<T>(f: () => T): () => T {
22
+ let _value: T;
23
+ return (): T => {
24
+ if (_value !== undefined) return _value;
25
+ _value = f();
26
+ return _value;
27
+ };
28
+ }
@@ -0,0 +1,150 @@
1
+ import { bitcoin as BITCOIN_NETWORK } from '../networks.js';
2
+ import * as bscript from '../script.js';
3
+ import { isPoint, stacksEqual, typeforce as typef } from '../types.js';
4
+ import { Payment, PaymentOpts, Stack } from './index.js';
5
+ import * as lazy from './lazy.js';
6
+
7
+ const OPS = bscript.OPS;
8
+
9
+ const OP_INT_BASE = OPS.OP_RESERVED; // OP_1 - 1
10
+
11
+ // input: OP_0 [signatures ...]
12
+ // output: m [pubKeys ...] n OP_CHECKMULTISIG
13
+ /**
14
+ * Represents a function that creates a Pay-to-Multisig (P2MS) payment object.
15
+ * @param a - The payment object.
16
+ * @param opts - Optional payment options.
17
+ * @returns The created payment object.
18
+ * @throws {TypeError} If the provided data is not valid.
19
+ */
20
+ export function p2ms(a: Payment, opts?: PaymentOpts): Payment {
21
+ if (!a.input && !a.output && !(a.pubkeys && a.m !== undefined) && !a.signatures)
22
+ throw new TypeError('Not enough data');
23
+ opts = Object.assign({ validate: true }, opts || {});
24
+
25
+ function isAcceptableSignature(x: Buffer | number): boolean {
26
+ return (
27
+ bscript.isCanonicalScriptSignature(x as Buffer) ||
28
+ (opts!.allowIncomplete && (x as number) === OPS.OP_0) !== undefined
29
+ );
30
+ }
31
+
32
+ typef(
33
+ {
34
+ network: typef.maybe(typef.Object),
35
+ m: typef.maybe(typef.Number),
36
+ n: typef.maybe(typef.Number),
37
+ output: typef.maybe(typef.Buffer),
38
+ pubkeys: typef.maybe(typef.arrayOf(isPoint)),
39
+
40
+ signatures: typef.maybe(typef.arrayOf(isAcceptableSignature)),
41
+ input: typef.maybe(typef.Buffer),
42
+ },
43
+ a,
44
+ );
45
+
46
+ const network = a.network || BITCOIN_NETWORK;
47
+ const o: Payment = { network };
48
+
49
+ let chunks: Stack = [];
50
+ let decoded = false;
51
+
52
+ function decode(output: Buffer | Stack): void {
53
+ if (decoded) return;
54
+ decoded = true;
55
+ chunks = bscript.decompile(output) as Stack;
56
+ o.m = (chunks[0] as number) - OP_INT_BASE;
57
+ o.n = (chunks[chunks.length - 2] as number) - OP_INT_BASE;
58
+ o.pubkeys = chunks.slice(1, -2) as Buffer[];
59
+ }
60
+
61
+ lazy.prop(o, 'output', () => {
62
+ if (!a.m) return;
63
+ if (!o.n) return;
64
+ if (!a.pubkeys) return;
65
+ return bscript.compile(
66
+ ([] as Stack).concat(
67
+ OP_INT_BASE + a.m,
68
+ a.pubkeys,
69
+ OP_INT_BASE + o.n,
70
+ OPS.OP_CHECKMULTISIG,
71
+ ),
72
+ );
73
+ });
74
+ lazy.prop(o, 'm', () => {
75
+ if (!o.output) return;
76
+ decode(o.output);
77
+ return o.m;
78
+ });
79
+ lazy.prop(o, 'n', () => {
80
+ if (!o.pubkeys) return;
81
+ return o.pubkeys.length;
82
+ });
83
+ lazy.prop(o, 'pubkeys', () => {
84
+ if (!a.output) return;
85
+ decode(a.output);
86
+ return o.pubkeys;
87
+ });
88
+ lazy.prop(o, 'signatures', () => {
89
+ if (!a.input) return;
90
+ return bscript.decompile(a.input)!.slice(1);
91
+ });
92
+ lazy.prop(o, 'input', () => {
93
+ if (!a.signatures) return;
94
+ return bscript.compile(([OPS.OP_0] as Stack).concat(a.signatures));
95
+ });
96
+ lazy.prop(o, 'witness', () => {
97
+ if (!o.input) return;
98
+ return [];
99
+ });
100
+ lazy.prop(o, 'name', () => {
101
+ if (!o.m || !o.n) return;
102
+ return `p2ms(${o.m} of ${o.n})`;
103
+ });
104
+
105
+ // extended validation
106
+ if (opts.validate) {
107
+ if (a.output) {
108
+ decode(a.output);
109
+ if (!typef.Number(chunks[0])) throw new TypeError('Output is invalid');
110
+ if (!typef.Number(chunks[chunks.length - 2])) throw new TypeError('Output is invalid');
111
+ if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG)
112
+ throw new TypeError('Output is invalid');
113
+
114
+ if (o.m! <= 0 || o.n! > 16 || o.m! > o.n! || o.n !== chunks.length - 3)
115
+ throw new TypeError('Output is invalid');
116
+ if (!o.pubkeys!.every((x) => isPoint(x))) throw new TypeError('Output is invalid');
117
+
118
+ if (a.m !== undefined && a.m !== o.m) throw new TypeError('m mismatch');
119
+ if (a.n !== undefined && a.n !== o.n) throw new TypeError('n mismatch');
120
+ if (a.pubkeys && !stacksEqual(a.pubkeys, o.pubkeys!))
121
+ throw new TypeError('Pubkeys mismatch');
122
+ }
123
+
124
+ if (a.pubkeys) {
125
+ if (a.n !== undefined && a.n !== a.pubkeys.length)
126
+ throw new TypeError('Pubkey count mismatch');
127
+ o.n = a.pubkeys.length;
128
+
129
+ if (o.n < o.m!) throw new TypeError('Pubkey count cannot be less than m');
130
+ }
131
+
132
+ if (a.signatures) {
133
+ if (a.signatures.length < o.m!) throw new TypeError('Not enough signatures provided');
134
+ if (a.signatures.length > o.m!) throw new TypeError('Too many signatures provided');
135
+ }
136
+
137
+ if (a.input) {
138
+ if (a.input[0] !== OPS.OP_0) throw new TypeError('Input is invalid');
139
+ if (o.signatures!.length === 0 || !o.signatures!.every(isAcceptableSignature))
140
+ throw new TypeError('Input has invalid signature(s)');
141
+
142
+ if (a.signatures && !stacksEqual(a.signatures, o.signatures!))
143
+ throw new TypeError('Signature mismatch');
144
+ if (a.m !== undefined && a.m !== a.signatures!.length)
145
+ throw new TypeError('Signature count mismatch');
146
+ }
147
+ }
148
+
149
+ return Object.assign(o, a);
150
+ }