@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
@@ -1,114 +1,114 @@
1
- import assert from 'assert';
2
- import * as ecc from 'tiny-secp256k1';
3
- import { describe, it } from 'mocha';
4
- import { initEccLib, PaymentCreator } from '../src/index.js';
5
- import * as u from './payments.utils.js';
6
- import fs from 'node:fs';
7
- import { p2pk, P2SHPayment, p2wsh } from '../src/payments/index.js';
8
-
9
- const require = async (name: string) => {
10
- const mod = await import(name);
11
-
12
- return mod.default || mod;
13
- };
14
-
15
- ['embed', 'p2ms', 'p2pk', 'p2pkh', 'p2sh', 'p2wpkh', 'p2wsh', 'p2tr'].forEach((p) => {
16
- describe(p, async () => {
17
- beforeEach(() => {
18
- initEccLib(p === 'p2tr' ? ecc : undefined);
19
- });
20
- let fn: PaymentCreator;
21
- const payment = await require('../src/payments/' + p);
22
- if (p === 'embed') {
23
- fn = payment.p2data;
24
- } else {
25
- fn = payment[p];
26
- }
27
-
28
- const fixtures = JSON.parse(fs.readFileSync('test/fixtures/' + p + '.json', 'utf8'));
29
- fixtures.valid.forEach((f: any) => {
30
- it(f.description + ' as expected', () => {
31
- const args = u.preform(f.arguments);
32
- const actual = fn(args, f.options);
33
-
34
- u.equate(actual, f.expected, f.arguments);
35
- });
36
-
37
- it(f.description + ' as expected (no validation)', () => {
38
- const args = u.preform(f.arguments);
39
- const actual = fn(
40
- args,
41
- Object.assign({}, f.options, {
42
- validate: false,
43
- }),
44
- );
45
-
46
- u.equate(actual, f.expected, f.arguments);
47
- });
48
- });
49
-
50
- fixtures.invalid.forEach((f: any) => {
51
- it('throws ' + f.exception + (f.description ? 'for ' + f.description : ''), () => {
52
- const args = u.preform(f.arguments);
53
-
54
- assert.throws(() => {
55
- fn(args, f.options);
56
- }, new RegExp(f.exception));
57
- });
58
- });
59
-
60
- if (p === 'p2sh') {
61
- it('properly assembles nested p2wsh with names', () => {
62
- const actual = fn({
63
- redeem: p2wsh({
64
- redeem: p2pk({
65
- pubkey: Buffer.from(
66
- '03e15819590382a9dd878f01e2f0cbce541564eb415e43b440472d883ecd283058',
67
- 'hex',
68
- ),
69
- }),
70
- }),
71
- } as P2SHPayment);
72
- assert.strictEqual(actual.address, '3MGbrbye4ttNUXM8WAvBFRKry4fkS9fjuw');
73
- assert.strictEqual(actual.name, 'p2sh-p2wsh-p2pk');
74
- assert.strictEqual(actual.redeem!.name, 'p2wsh-p2pk');
75
- assert.strictEqual(actual.redeem!.redeem!.name, 'p2pk');
76
- });
77
- }
78
-
79
- // cross-verify dynamically too
80
- if (!fixtures.dynamic) return;
81
- const { depends, details } = fixtures.dynamic;
82
-
83
- details.forEach((f: any) => {
84
- const detail = u.preform(f);
85
- const disabled: any = {};
86
- if (f.disabled)
87
- f.disabled.forEach((k: string) => {
88
- disabled[k] = true;
89
- });
90
-
91
- for (const key in depends) {
92
- if (key in disabled) continue;
93
- const dependencies = depends[key];
94
-
95
- dependencies.forEach((dependency: any) => {
96
- if (!Array.isArray(dependency)) dependency = [dependency];
97
-
98
- const args = {};
99
- dependency.forEach((d: any) => {
100
- u.from(d, detail, args);
101
- });
102
- const expected = u.from(key, detail);
103
-
104
- it(
105
- f.description + ', ' + key + ' derives from ' + JSON.stringify(dependency),
106
- () => {
107
- u.equate(fn(args), expected);
108
- },
109
- );
110
- });
111
- }
112
- });
113
- });
114
- });
1
+ import assert from 'assert';
2
+ import * as ecc from 'tiny-secp256k1';
3
+ import { describe, it } from 'mocha';
4
+ import { initEccLib, PaymentCreator } from '../src/index.js';
5
+ import * as u from './payments.utils.js';
6
+ import fs from 'node:fs';
7
+ import { p2pk, P2SHPayment, p2wsh } from '../src/payments/index.js';
8
+
9
+ const require = async (name: string) => {
10
+ const mod = await import(name);
11
+
12
+ return mod.default || mod;
13
+ };
14
+
15
+ ['embed', 'p2ms', 'p2pk', 'p2pkh', 'p2sh', 'p2wpkh', 'p2wsh', 'p2tr'].forEach((p) => {
16
+ describe(p, async () => {
17
+ beforeEach(() => {
18
+ initEccLib(p === 'p2tr' ? ecc : undefined);
19
+ });
20
+ let fn: PaymentCreator;
21
+ const payment = await require('../src/payments/' + p);
22
+ if (p === 'embed') {
23
+ fn = payment.p2data;
24
+ } else {
25
+ fn = payment[p];
26
+ }
27
+
28
+ const fixtures = JSON.parse(fs.readFileSync('test/fixtures/' + p + '.json', 'utf8'));
29
+ fixtures.valid.forEach((f: any) => {
30
+ it(f.description + ' as expected', () => {
31
+ const args = u.preform(f.arguments);
32
+ const actual = fn(args, f.options);
33
+
34
+ u.equate(actual, f.expected, f.arguments);
35
+ });
36
+
37
+ it(f.description + ' as expected (no validation)', () => {
38
+ const args = u.preform(f.arguments);
39
+ const actual = fn(
40
+ args,
41
+ Object.assign({}, f.options, {
42
+ validate: false,
43
+ }),
44
+ );
45
+
46
+ u.equate(actual, f.expected, f.arguments);
47
+ });
48
+ });
49
+
50
+ fixtures.invalid.forEach((f: any) => {
51
+ it('throws ' + f.exception + (f.description ? 'for ' + f.description : ''), () => {
52
+ const args = u.preform(f.arguments);
53
+
54
+ assert.throws(() => {
55
+ fn(args, f.options);
56
+ }, new RegExp(f.exception));
57
+ });
58
+ });
59
+
60
+ if (p === 'p2sh') {
61
+ it('properly assembles nested p2wsh with names', () => {
62
+ const actual = fn({
63
+ redeem: p2wsh({
64
+ redeem: p2pk({
65
+ pubkey: Buffer.from(
66
+ '03e15819590382a9dd878f01e2f0cbce541564eb415e43b440472d883ecd283058',
67
+ 'hex',
68
+ ),
69
+ }),
70
+ }),
71
+ } as P2SHPayment);
72
+ assert.strictEqual(actual.address, '3MGbrbye4ttNUXM8WAvBFRKry4fkS9fjuw');
73
+ assert.strictEqual(actual.name, 'p2sh-p2wsh-p2pk');
74
+ assert.strictEqual(actual.redeem!.name, 'p2wsh-p2pk');
75
+ assert.strictEqual(actual.redeem!.redeem!.name, 'p2pk');
76
+ });
77
+ }
78
+
79
+ // cross-verify dynamically too
80
+ if (!fixtures.dynamic) return;
81
+ const { depends, details } = fixtures.dynamic;
82
+
83
+ details.forEach((f: any) => {
84
+ const detail = u.preform(f);
85
+ const disabled: any = {};
86
+ if (f.disabled)
87
+ f.disabled.forEach((k: string) => {
88
+ disabled[k] = true;
89
+ });
90
+
91
+ for (const key in depends) {
92
+ if (key in disabled) continue;
93
+ const dependencies = depends[key];
94
+
95
+ dependencies.forEach((dependency: any) => {
96
+ if (!Array.isArray(dependency)) dependency = [dependency];
97
+
98
+ const args = {};
99
+ dependency.forEach((d: any) => {
100
+ u.from(d, detail, args);
101
+ });
102
+ const expected = u.from(key, detail);
103
+
104
+ it(
105
+ f.description + ', ' + key + ' derives from ' + JSON.stringify(dependency),
106
+ () => {
107
+ u.equate(fn(args), expected);
108
+ },
109
+ );
110
+ });
111
+ }
112
+ });
113
+ });
114
+ });
@@ -1,165 +1,165 @@
1
- import * as t from 'assert';
2
- import * as BNETWORKS from '../src/networks.js';
3
- import * as bscript from '../src/script.js';
4
-
5
- function tryHex(x: Buffer | Buffer[]): string | string[] {
6
- if (Buffer.isBuffer(x)) return x.toString('hex');
7
- if (Array.isArray(x)) return x.map(tryHex) as string[];
8
- return x;
9
- }
10
-
11
- function fromHex(x: string | string[]): Buffer | Buffer[] {
12
- if (typeof x === 'string') return Buffer.from(x, 'hex');
13
- if (Array.isArray(x)) return x.map(fromHex) as Buffer[];
14
- return x;
15
- }
16
-
17
- function tryASM(x: Buffer): string {
18
- if (Buffer.isBuffer(x)) return bscript.toASM(x);
19
- return x;
20
- }
21
-
22
- function asmToBuffer(x: string): Buffer {
23
- if (x === '') return Buffer.alloc(0);
24
- return bscript.fromASM(x);
25
- }
26
-
27
- function carryOver(a: any, b: any): void {
28
- for (const k in b) {
29
- if (!k) continue;
30
- if (k in a && k === 'redeem') {
31
- carryOver(a[k], b[k]);
32
- continue;
33
- }
34
-
35
- // don't, the value was specified
36
- if (k in a) continue;
37
-
38
- // otherwise, expect match
39
- a[k] = b[k];
40
- }
41
- }
42
-
43
- function equateBase(a: any, b: any, context: string): void {
44
- if ('output' in b)
45
- t.strictEqual(tryASM(a.output), tryASM(b.output), `Inequal ${context}output`);
46
- if ('input' in b) t.strictEqual(tryASM(a.input), tryASM(b.input), `Inequal ${context}input`);
47
- if ('witness' in b)
48
- t.deepStrictEqual(tryHex(a.witness), tryHex(b.witness), `Inequal ${context}witness`);
49
- if ('redeemVersion' in b)
50
- t.strictEqual(a.redeemVersion, b.redeemVersion, `Inequal ${context}redeemVersion`);
51
- }
52
-
53
- export function equate(a: any, b: any, args?: any): void {
54
- b = Object.assign({}, b);
55
- carryOver(b, args);
56
-
57
- // by null, we mean 'undefined', but JSON
58
- if (b.input === null) b.input = undefined;
59
- if (b.output === null) b.output = undefined;
60
- if (b.witness === null) b.witness = undefined;
61
- if (b.redeemVersion === null) b.redeemVersion = undefined;
62
- if (b.redeem) {
63
- if (b.redeem.input === null) b.redeem.input = undefined;
64
- if (b.redeem.output === null) b.redeem.output = undefined;
65
- if (b.redeem.witness === null) b.redeem.witness = undefined;
66
- if (b.redeem.redeemVersion === null) b.redeem.redeemVersion = undefined;
67
- }
68
-
69
- equateBase(a, b, '');
70
- if (b.redeem) equateBase(a.redeem, b.redeem, 'redeem.');
71
- if (b.network) t.deepStrictEqual(a.network, (BNETWORKS as any)[b.network], 'Inequal *.network');
72
-
73
- // contextual
74
- if (b.signature === null) b.signature = undefined;
75
- if (b.signatures === null) b.signatures = undefined;
76
- if ('address' in b) t.strictEqual(a.address, b.address, 'Inequal *.address');
77
- if ('name' in b) t.strictEqual(a.name, b.name, 'Inequal *.name');
78
- if ('hash' in b) t.strictEqual(tryHex(a.hash), tryHex(b.hash), 'Inequal *.hash');
79
- if ('pubkey' in b) t.strictEqual(tryHex(a.pubkey), tryHex(b.pubkey), 'Inequal *.pubkey');
80
- if ('internalPubkey' in b)
81
- t.strictEqual(
82
- tryHex(a.internalPubkey),
83
- tryHex(b.internalPubkey),
84
- 'Inequal *.internalPubkey',
85
- );
86
- if ('signature' in b)
87
- t.strictEqual(tryHex(a.signature), tryHex(b.signature), 'Inequal signature');
88
- if ('m' in b) t.strictEqual(a.m, b.m, 'Inequal *.m');
89
- if ('n' in b) t.strictEqual(a.n, b.n, 'Inequal *.n');
90
- if ('pubkeys' in b)
91
- t.deepStrictEqual(tryHex(a.pubkeys), tryHex(b.pubkeys), 'Inequal *.pubkeys');
92
- if ('signatures' in b)
93
- t.deepStrictEqual(tryHex(a.signatures), tryHex(b.signatures), 'Inequal *.signatures');
94
- if ('data' in b) t.deepStrictEqual(tryHex(a.data), tryHex(b.data), 'Inequal *.data');
95
- }
96
-
97
- export function preform(x: any): any {
98
- x = Object.assign({}, x);
99
-
100
- if (x.network) x.network = (BNETWORKS as any)[x.network];
101
- if (typeof x.inputHex === 'string') {
102
- x.input = Buffer.from(x.inputHex, 'hex');
103
- delete x.inputHex;
104
- }
105
- if (typeof x.outputHex === 'string') {
106
- x.output = Buffer.from(x.outputHex, 'hex');
107
- delete x.outputHex;
108
- }
109
- if (typeof x.output === 'string') x.output = asmToBuffer(x.output);
110
- if (typeof x.input === 'string') x.input = asmToBuffer(x.input);
111
- if (Array.isArray(x.witness)) x.witness = x.witness.map(fromHex);
112
-
113
- if (x.data) x.data = x.data.map(fromHex);
114
- if (x.hash) x.hash = Buffer.from(x.hash, 'hex');
115
- if (x.pubkey) x.pubkey = Buffer.from(x.pubkey, 'hex');
116
- if (x.internalPubkey) x.internalPubkey = Buffer.from(x.internalPubkey, 'hex');
117
- if (x.signature) x.signature = Buffer.from(x.signature, 'hex');
118
- if (x.pubkeys) x.pubkeys = x.pubkeys.map(fromHex);
119
- if (x.signatures)
120
- x.signatures = x.signatures.map((y: any) => {
121
- return Number.isFinite(y) ? y : Buffer.from(y, 'hex');
122
- });
123
- if (x.redeem) {
124
- x.redeem = Object.assign({}, x.redeem);
125
- if (typeof x.redeem.input === 'string') x.redeem.input = asmToBuffer(x.redeem.input);
126
- if (typeof x.redeem.output === 'string') x.redeem.output = asmToBuffer(x.redeem.output);
127
- if (Array.isArray(x.redeem.witness)) x.redeem.witness = x.redeem.witness.map(fromHex);
128
- if (x.redeem.network) x.redeem.network = (BNETWORKS as any)[x.redeem.network];
129
- }
130
-
131
- if (x.scriptTree) x.scriptTree = convertScriptTree(x.scriptTree);
132
- return x;
133
- }
134
-
135
- export function from(path: string, object: any, result?: any): any {
136
- const paths = path.split('.');
137
- result = result || {};
138
-
139
- let r = result;
140
- paths.forEach((k, i) => {
141
- if (i < paths.length - 1) {
142
- r[k] = r[k] || {};
143
-
144
- // recurse
145
- r = r[k];
146
- object = object[k];
147
- } else {
148
- r[k] = object[k];
149
- }
150
- });
151
-
152
- return result;
153
- }
154
-
155
- export function convertScriptTree(scriptTree: any, leafVersion?: number): any {
156
- if (Array.isArray(scriptTree))
157
- return scriptTree.map((tr) => convertScriptTree(tr, leafVersion));
158
-
159
- const script = Object.assign({}, scriptTree);
160
- if (typeof script.output === 'string') {
161
- script.output = asmToBuffer(scriptTree.output);
162
- script.version = script.version || leafVersion;
163
- }
164
- return script;
165
- }
1
+ import * as t from 'assert';
2
+ import * as BNETWORKS from '../src/networks.js';
3
+ import * as bscript from '../src/script.js';
4
+
5
+ function tryHex(x: Buffer | Buffer[]): string | string[] {
6
+ if (Buffer.isBuffer(x)) return x.toString('hex');
7
+ if (Array.isArray(x)) return x.map(tryHex) as string[];
8
+ return x;
9
+ }
10
+
11
+ function fromHex(x: string | string[]): Buffer | Buffer[] {
12
+ if (typeof x === 'string') return Buffer.from(x, 'hex');
13
+ if (Array.isArray(x)) return x.map(fromHex) as Buffer[];
14
+ return x;
15
+ }
16
+
17
+ function tryASM(x: Buffer): string {
18
+ if (Buffer.isBuffer(x)) return bscript.toASM(x);
19
+ return x;
20
+ }
21
+
22
+ function asmToBuffer(x: string): Buffer {
23
+ if (x === '') return Buffer.alloc(0);
24
+ return bscript.fromASM(x);
25
+ }
26
+
27
+ function carryOver(a: any, b: any): void {
28
+ for (const k in b) {
29
+ if (!k) continue;
30
+ if (k in a && k === 'redeem') {
31
+ carryOver(a[k], b[k]);
32
+ continue;
33
+ }
34
+
35
+ // don't, the value was specified
36
+ if (k in a) continue;
37
+
38
+ // otherwise, expect match
39
+ a[k] = b[k];
40
+ }
41
+ }
42
+
43
+ function equateBase(a: any, b: any, context: string): void {
44
+ if ('output' in b)
45
+ t.strictEqual(tryASM(a.output), tryASM(b.output), `Inequal ${context}output`);
46
+ if ('input' in b) t.strictEqual(tryASM(a.input), tryASM(b.input), `Inequal ${context}input`);
47
+ if ('witness' in b)
48
+ t.deepStrictEqual(tryHex(a.witness), tryHex(b.witness), `Inequal ${context}witness`);
49
+ if ('redeemVersion' in b)
50
+ t.strictEqual(a.redeemVersion, b.redeemVersion, `Inequal ${context}redeemVersion`);
51
+ }
52
+
53
+ export function equate(a: any, b: any, args?: any): void {
54
+ b = Object.assign({}, b);
55
+ carryOver(b, args);
56
+
57
+ // by null, we mean 'undefined', but JSON
58
+ if (b.input === null) b.input = undefined;
59
+ if (b.output === null) b.output = undefined;
60
+ if (b.witness === null) b.witness = undefined;
61
+ if (b.redeemVersion === null) b.redeemVersion = undefined;
62
+ if (b.redeem) {
63
+ if (b.redeem.input === null) b.redeem.input = undefined;
64
+ if (b.redeem.output === null) b.redeem.output = undefined;
65
+ if (b.redeem.witness === null) b.redeem.witness = undefined;
66
+ if (b.redeem.redeemVersion === null) b.redeem.redeemVersion = undefined;
67
+ }
68
+
69
+ equateBase(a, b, '');
70
+ if (b.redeem) equateBase(a.redeem, b.redeem, 'redeem.');
71
+ if (b.network) t.deepStrictEqual(a.network, (BNETWORKS as any)[b.network], 'Inequal *.network');
72
+
73
+ // contextual
74
+ if (b.signature === null) b.signature = undefined;
75
+ if (b.signatures === null) b.signatures = undefined;
76
+ if ('address' in b) t.strictEqual(a.address, b.address, 'Inequal *.address');
77
+ if ('name' in b) t.strictEqual(a.name, b.name, 'Inequal *.name');
78
+ if ('hash' in b) t.strictEqual(tryHex(a.hash), tryHex(b.hash), 'Inequal *.hash');
79
+ if ('pubkey' in b) t.strictEqual(tryHex(a.pubkey), tryHex(b.pubkey), 'Inequal *.pubkey');
80
+ if ('internalPubkey' in b)
81
+ t.strictEqual(
82
+ tryHex(a.internalPubkey),
83
+ tryHex(b.internalPubkey),
84
+ 'Inequal *.internalPubkey',
85
+ );
86
+ if ('signature' in b)
87
+ t.strictEqual(tryHex(a.signature), tryHex(b.signature), 'Inequal signature');
88
+ if ('m' in b) t.strictEqual(a.m, b.m, 'Inequal *.m');
89
+ if ('n' in b) t.strictEqual(a.n, b.n, 'Inequal *.n');
90
+ if ('pubkeys' in b)
91
+ t.deepStrictEqual(tryHex(a.pubkeys), tryHex(b.pubkeys), 'Inequal *.pubkeys');
92
+ if ('signatures' in b)
93
+ t.deepStrictEqual(tryHex(a.signatures), tryHex(b.signatures), 'Inequal *.signatures');
94
+ if ('data' in b) t.deepStrictEqual(tryHex(a.data), tryHex(b.data), 'Inequal *.data');
95
+ }
96
+
97
+ export function preform(x: any): any {
98
+ x = Object.assign({}, x);
99
+
100
+ if (x.network) x.network = (BNETWORKS as any)[x.network];
101
+ if (typeof x.inputHex === 'string') {
102
+ x.input = Buffer.from(x.inputHex, 'hex');
103
+ delete x.inputHex;
104
+ }
105
+ if (typeof x.outputHex === 'string') {
106
+ x.output = Buffer.from(x.outputHex, 'hex');
107
+ delete x.outputHex;
108
+ }
109
+ if (typeof x.output === 'string') x.output = asmToBuffer(x.output);
110
+ if (typeof x.input === 'string') x.input = asmToBuffer(x.input);
111
+ if (Array.isArray(x.witness)) x.witness = x.witness.map(fromHex);
112
+
113
+ if (x.data) x.data = x.data.map(fromHex);
114
+ if (x.hash) x.hash = Buffer.from(x.hash, 'hex');
115
+ if (x.pubkey) x.pubkey = Buffer.from(x.pubkey, 'hex');
116
+ if (x.internalPubkey) x.internalPubkey = Buffer.from(x.internalPubkey, 'hex');
117
+ if (x.signature) x.signature = Buffer.from(x.signature, 'hex');
118
+ if (x.pubkeys) x.pubkeys = x.pubkeys.map(fromHex);
119
+ if (x.signatures)
120
+ x.signatures = x.signatures.map((y: any) => {
121
+ return Number.isFinite(y) ? y : Buffer.from(y, 'hex');
122
+ });
123
+ if (x.redeem) {
124
+ x.redeem = Object.assign({}, x.redeem);
125
+ if (typeof x.redeem.input === 'string') x.redeem.input = asmToBuffer(x.redeem.input);
126
+ if (typeof x.redeem.output === 'string') x.redeem.output = asmToBuffer(x.redeem.output);
127
+ if (Array.isArray(x.redeem.witness)) x.redeem.witness = x.redeem.witness.map(fromHex);
128
+ if (x.redeem.network) x.redeem.network = (BNETWORKS as any)[x.redeem.network];
129
+ }
130
+
131
+ if (x.scriptTree) x.scriptTree = convertScriptTree(x.scriptTree);
132
+ return x;
133
+ }
134
+
135
+ export function from(path: string, object: any, result?: any): any {
136
+ const paths = path.split('.');
137
+ result = result || {};
138
+
139
+ let r = result;
140
+ paths.forEach((k, i) => {
141
+ if (i < paths.length - 1) {
142
+ r[k] = r[k] || {};
143
+
144
+ // recurse
145
+ r = r[k];
146
+ object = object[k];
147
+ } else {
148
+ r[k] = object[k];
149
+ }
150
+ });
151
+
152
+ return result;
153
+ }
154
+
155
+ export function convertScriptTree(scriptTree: any, leafVersion?: number): any {
156
+ if (Array.isArray(scriptTree))
157
+ return scriptTree.map((tr) => convertScriptTree(tr, leafVersion));
158
+
159
+ const script = Object.assign({}, scriptTree);
160
+ if (typeof script.output === 'string') {
161
+ script.output = asmToBuffer(scriptTree.output);
162
+ script.version = script.version || leafVersion;
163
+ }
164
+ return script;
165
+ }