@btc-vision/bitcoin 6.4.10 → 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 (207) 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/cjs/package.json +3 -3
  9. package/gulpfile.js +42 -42
  10. package/package.json +150 -150
  11. package/src/bip66.ts +107 -107
  12. package/src/block.ts +233 -233
  13. package/src/bufferutils.ts +188 -188
  14. package/src/crypto.ts +108 -108
  15. package/src/ecc_lib.ts +94 -94
  16. package/src/hooks/AdvancedSignatureManager.ts +104 -104
  17. package/src/hooks/SignatureManager.ts +84 -84
  18. package/src/index.ts +105 -105
  19. package/src/merkle.ts +31 -31
  20. package/src/opcodes.ts +280 -280
  21. package/src/payments/bip341.ts +140 -140
  22. package/src/payments/embed.ts +61 -61
  23. package/src/payments/index.ts +172 -172
  24. package/src/payments/lazy.ts +28 -28
  25. package/src/payments/p2ms.ts +156 -156
  26. package/src/payments/p2op.ts +195 -195
  27. package/src/payments/p2pk.ts +93 -93
  28. package/src/payments/p2pkh.ts +214 -214
  29. package/src/payments/p2tr.ts +309 -309
  30. package/src/psbt/bip371.ts +441 -441
  31. package/src/push_data.ts +97 -97
  32. package/src/script.ts +247 -247
  33. package/src/script_number.ts +72 -72
  34. package/src/script_signature.ts +91 -91
  35. package/src/transaction.ts +656 -656
  36. package/test/address.spec.ts +155 -155
  37. package/test/bitcoin.core.spec.ts +212 -212
  38. package/test/block.spec.ts +171 -171
  39. package/test/bufferutils.spec.ts +450 -450
  40. package/test/crypto.spec.ts +49 -49
  41. package/test/fixtures/address.json +329 -329
  42. package/test/fixtures/block.json +148 -148
  43. package/test/fixtures/bufferutils.json +102 -102
  44. package/test/fixtures/core/README.md +26 -26
  45. package/test/fixtures/core/base58_encode_decode.json +50 -50
  46. package/test/fixtures/core/base58_keys_invalid.json +152 -152
  47. package/test/fixtures/core/base58_keys_valid.json +452 -452
  48. package/test/fixtures/core/blocks.json +27 -27
  49. package/test/fixtures/core/sig_canonical.json +7 -7
  50. package/test/fixtures/core/sig_noncanonical.json +33 -33
  51. package/test/fixtures/core/sighash.json +3505 -3505
  52. package/test/fixtures/core/tx_valid.json +2023 -2023
  53. package/test/fixtures/crypto.json +43 -43
  54. package/test/fixtures/ecdsa.json +217 -217
  55. package/test/fixtures/ecpair.json +141 -141
  56. package/test/fixtures/embed.json +108 -108
  57. package/test/fixtures/p2ms.json +434 -434
  58. package/test/fixtures/p2pk.json +179 -179
  59. package/test/fixtures/p2pkh.json +276 -276
  60. package/test/fixtures/p2sh.json +508 -508
  61. package/test/fixtures/p2tr.json +1198 -1198
  62. package/test/fixtures/p2wpkh.json +290 -290
  63. package/test/fixtures/p2wsh.json +489 -489
  64. package/test/fixtures/psbt.json +924 -924
  65. package/test/fixtures/script.json +465 -465
  66. package/test/fixtures/script_number.json +225 -225
  67. package/test/fixtures/signature.json +140 -140
  68. package/test/fixtures/transaction.json +916 -916
  69. package/test/integration/_regtest.ts +6 -6
  70. package/test/integration/addresses.spec.ts +142 -142
  71. package/test/integration/bip32.spec.ts +130 -130
  72. package/test/integration/blocks.spec.ts +28 -28
  73. package/test/integration/cltv.spec.ts +241 -241
  74. package/test/integration/csv.spec.ts +452 -452
  75. package/test/integration/payments.spec.ts +110 -110
  76. package/test/integration/taproot.spec.ts +663 -663
  77. package/test/integration/transactions.spec.ts +668 -668
  78. package/test/payments.spec.ts +114 -114
  79. package/test/payments.utils.ts +165 -165
  80. package/test/psbt.spec.ts +1285 -1285
  81. package/test/script.spec.ts +186 -186
  82. package/test/script_number.spec.ts +26 -26
  83. package/test/script_signature.spec.ts +66 -66
  84. package/test/transaction.spec.ts +337 -337
  85. package/test/ts-node-register.js +7 -7
  86. package/test/tsconfig.json +48 -48
  87. package/test/types.spec.ts +53 -53
  88. package/tsconfig.base.json +27 -27
  89. package/tsconfig.json +19 -19
  90. package/tsconfig.webpack.json +18 -18
  91. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/.ready +0 -0
  92. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/.release-please-manifest.json +0 -3
  93. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/CHANGELOG.md +0 -962
  94. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/CONTRIBUTING.md +0 -34
  95. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/LICENSE +0 -24
  96. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/README.md +0 -273
  97. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/SECURITY.md +0 -2
  98. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/addon.gypi +0 -204
  99. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/bin/node-gyp.js +0 -138
  100. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/.release-please-manifest.json +0 -3
  101. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/LICENSE +0 -28
  102. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/data/ninja/build.ninja +0 -4
  103. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc +0 -12
  104. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/GypVsCMake.md +0 -116
  105. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/Hacking.md +0 -46
  106. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/InputFormatReference.md +0 -1080
  107. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/LanguageSpecification.md +0 -430
  108. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/README.md +0 -27
  109. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/Testing.md +0 -450
  110. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/UserDocumentation.md +0 -965
  111. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/gyp +0 -8
  112. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/gyp.bat +0 -5
  113. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/gyp_main.py +0 -45
  114. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py +0 -365
  115. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py +0 -206
  116. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py +0 -1272
  117. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py +0 -1547
  118. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py +0 -59
  119. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py +0 -153
  120. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py +0 -271
  121. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py +0 -574
  122. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/__init__.py +0 -692
  123. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/common.py +0 -711
  124. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/common_test.py +0 -171
  125. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py +0 -169
  126. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py +0 -113
  127. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py +0 -55
  128. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.py +0 -0
  129. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py +0 -804
  130. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py +0 -1173
  131. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py +0 -1318
  132. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py +0 -127
  133. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py +0 -103
  134. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py +0 -461
  135. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py +0 -89
  136. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py +0 -57
  137. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py +0 -2745
  138. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py +0 -3976
  139. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py +0 -44
  140. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py +0 -2964
  141. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py +0 -67
  142. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py +0 -1391
  143. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py +0 -25
  144. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/input.py +0 -3115
  145. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/input_test.py +0 -98
  146. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py +0 -771
  147. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py +0 -1260
  148. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py +0 -174
  149. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py +0 -61
  150. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py +0 -373
  151. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py +0 -1938
  152. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation_test.py +0 -53
  153. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py +0 -302
  154. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py +0 -3198
  155. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py +0 -65
  156. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/LICENSE +0 -3
  157. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/LICENSE.APACHE +0 -177
  158. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/LICENSE.BSD +0 -23
  159. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/__init__.py +0 -15
  160. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_elffile.py +0 -108
  161. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_manylinux.py +0 -252
  162. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_musllinux.py +0 -83
  163. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_parser.py +0 -359
  164. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_structures.py +0 -61
  165. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_tokenizer.py +0 -192
  166. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/markers.py +0 -252
  167. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/metadata.py +0 -825
  168. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/py.typed +0 -0
  169. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/requirements.py +0 -90
  170. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/specifiers.py +0 -1030
  171. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/tags.py +0 -553
  172. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/utils.py +0 -172
  173. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/version.py +0 -563
  174. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pyproject.toml +0 -120
  175. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/release-please-config.json +0 -11
  176. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/test_gyp.py +0 -261
  177. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/Find-VisualStudio.cs +0 -250
  178. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/build.js +0 -227
  179. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/clean.js +0 -15
  180. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/configure.js +0 -328
  181. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/create-config-gypi.js +0 -150
  182. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/download.js +0 -39
  183. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/find-node-directory.js +0 -63
  184. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/find-python.js +0 -310
  185. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/find-visualstudio.js +0 -590
  186. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/install.js +0 -415
  187. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/list.js +0 -26
  188. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/log.js +0 -168
  189. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/node-gyp.js +0 -188
  190. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/process-release.js +0 -146
  191. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/rebuild.js +0 -12
  192. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/remove.js +0 -43
  193. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/util.js +0 -81
  194. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/macOS_Catalina_acid_test.sh +0 -21
  195. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/package.json +0 -51
  196. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/release-please-config.json +0 -40
  197. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/src/win_delay_load_hook.cc +0 -39
  198. package/browser/ops.d.ts +0 -126
  199. package/build/ops.d.ts +0 -126
  200. package/build/ops.js +0 -127
  201. package/coverage/tmp/coverage-31752-1735543485354-0.json +0 -1
  202. package/coverage/tmp/coverage-59920-1735543484555-0.json +0 -1
  203. package/coverage/tmp/coverage-66252-1735543483919-0.json +0 -1
  204. package/coverage/tmp/coverage-68440-1735543485236-0.json +0 -1
  205. package/coverage/tmp/coverage-70588-1735543484426-0.json +0 -1
  206. package/coverage/tmp/coverage-79292-1735543485296-0.json +0 -1
  207. package/coverage/tmp/coverage-80212-1735543483980-0.json +0 -1
@@ -1,171 +1,171 @@
1
- import assert from 'assert';
2
- import { beforeEach, describe, it } from 'mocha';
3
- import { Block } from '../src/index.js';
4
-
5
- import fixtures from './fixtures/block.json' with { type: 'json' };
6
-
7
- describe('Block', () => {
8
- describe('version', () => {
9
- it('should be interpreted as an int32le', () => {
10
- const blockHex =
11
- 'ffffffff000000000000000000000000000000000000000000000000000000000000' +
12
- '00004141414141414141414141414141414141414141414141414141414141414141' +
13
- '01000000020000000300000000';
14
- const block = Block.fromHex(blockHex);
15
- assert.strictEqual(-1, block.version);
16
- assert.strictEqual(1, block.timestamp);
17
- });
18
- });
19
-
20
- describe('calculateTarget', () => {
21
- fixtures.targets.forEach((f) => {
22
- it('returns ' + f.expected + ' for 0x' + f.bits, () => {
23
- const bits = parseInt(f.bits, 16);
24
-
25
- assert.strictEqual(Block.calculateTarget(bits).toString('hex'), f.expected);
26
- });
27
- });
28
- });
29
-
30
- describe('fromBuffer/fromHex', () => {
31
- fixtures.valid.forEach((f) => {
32
- it('imports ' + f.description, () => {
33
- const block = Block.fromHex(f.hex);
34
-
35
- assert.strictEqual(block.version, f.version);
36
- assert.strictEqual(block.prevHash!.toString('hex'), f.prevHash);
37
- assert.strictEqual(block.merkleRoot!.toString('hex'), f.merkleRoot);
38
- if (block.witnessCommit) {
39
- assert.strictEqual(block.witnessCommit.toString('hex'), f.witnessCommit);
40
- }
41
- assert.strictEqual(block.timestamp, f.timestamp);
42
- assert.strictEqual(block.bits, f.bits);
43
- assert.strictEqual(block.nonce, f.nonce);
44
- assert.strictEqual(!block.transactions, f.hex.length === 160);
45
- if (f.size && f.strippedSize && f.weight) {
46
- assert.strictEqual(block.byteLength(false, true), f.size);
47
- assert.strictEqual(block.byteLength(false, false), f.strippedSize);
48
- assert.strictEqual(block.weight(), f.weight);
49
- }
50
- });
51
- });
52
-
53
- fixtures.invalid.forEach((f) => {
54
- it('throws on ' + f.exception, () => {
55
- assert.throws(() => {
56
- Block.fromHex(f.hex);
57
- }, new RegExp(f.exception));
58
- });
59
- });
60
- });
61
-
62
- describe('toBuffer/toHex', () => {
63
- fixtures.valid.forEach((f) => {
64
- let block: Block;
65
-
66
- beforeEach(() => {
67
- block = Block.fromHex(f.hex);
68
- });
69
-
70
- it('exports ' + f.description, () => {
71
- assert.strictEqual(block.toHex(true), f.hex.slice(0, 160));
72
- assert.strictEqual(block.toHex(), f.hex);
73
- });
74
- });
75
- });
76
-
77
- describe('getHash/getId', () => {
78
- fixtures.valid.forEach((f) => {
79
- let block: Block;
80
-
81
- beforeEach(() => {
82
- block = Block.fromHex(f.hex);
83
- });
84
-
85
- it('returns ' + f.id + ' for ' + f.description, () => {
86
- assert.strictEqual(block.getHash().toString('hex'), f.hash);
87
- assert.strictEqual(block.getId(), f.id);
88
- });
89
- });
90
- });
91
-
92
- describe('getUTCDate', () => {
93
- fixtures.valid.forEach((f) => {
94
- let block: Block;
95
-
96
- beforeEach(() => {
97
- block = Block.fromHex(f.hex);
98
- });
99
-
100
- it('returns UTC date of ' + f.id, () => {
101
- const utcDate = block.getUTCDate().getTime();
102
-
103
- assert.strictEqual(utcDate, f.timestamp * 1e3);
104
- });
105
- });
106
- });
107
-
108
- describe('calculateMerkleRoot', () => {
109
- it('should throw on zero-length transaction array', () => {
110
- assert.throws(() => {
111
- Block.calculateMerkleRoot([]);
112
- }, /Cannot compute merkle root for zero transactions/);
113
- });
114
-
115
- fixtures.valid.forEach((f) => {
116
- if (f.hex.length === 160) return;
117
-
118
- let block: Block;
119
-
120
- beforeEach(() => {
121
- block = Block.fromHex(f.hex);
122
- });
123
-
124
- it('returns ' + f.merkleRoot + ' for ' + f.id, () => {
125
- assert.strictEqual(
126
- Block.calculateMerkleRoot(block.transactions!).toString('hex'),
127
- f.merkleRoot,
128
- );
129
- });
130
-
131
- if (f.witnessCommit) {
132
- it('returns witness commit ' + f.witnessCommit + ' for ' + f.id, () => {
133
- assert.strictEqual(
134
- Block.calculateMerkleRoot(block.transactions!, true).toString('hex'),
135
- f.witnessCommit,
136
- );
137
- });
138
- }
139
- });
140
- });
141
-
142
- describe('checkTxRoots', () => {
143
- fixtures.valid.forEach((f) => {
144
- if (f.hex.length === 160) return;
145
-
146
- let block: Block;
147
-
148
- beforeEach(() => {
149
- block = Block.fromHex(f.hex);
150
- });
151
-
152
- it('returns ' + f.valid + ' for ' + f.id, () => {
153
- assert.strictEqual(block.checkTxRoots(), true);
154
- });
155
- });
156
- });
157
-
158
- describe('checkProofOfWork', () => {
159
- fixtures.valid.forEach((f) => {
160
- let block: Block;
161
-
162
- beforeEach(() => {
163
- block = Block.fromHex(f.hex);
164
- });
165
-
166
- it('returns ' + f.valid + ' for ' + f.id, () => {
167
- assert.strictEqual(block.checkProofOfWork(), f.valid);
168
- });
169
- });
170
- });
171
- });
1
+ import assert from 'assert';
2
+ import { beforeEach, describe, it } from 'mocha';
3
+ import { Block } from '../src/index.js';
4
+
5
+ import fixtures from './fixtures/block.json' with { type: 'json' };
6
+
7
+ describe('Block', () => {
8
+ describe('version', () => {
9
+ it('should be interpreted as an int32le', () => {
10
+ const blockHex =
11
+ 'ffffffff000000000000000000000000000000000000000000000000000000000000' +
12
+ '00004141414141414141414141414141414141414141414141414141414141414141' +
13
+ '01000000020000000300000000';
14
+ const block = Block.fromHex(blockHex);
15
+ assert.strictEqual(-1, block.version);
16
+ assert.strictEqual(1, block.timestamp);
17
+ });
18
+ });
19
+
20
+ describe('calculateTarget', () => {
21
+ fixtures.targets.forEach((f) => {
22
+ it('returns ' + f.expected + ' for 0x' + f.bits, () => {
23
+ const bits = parseInt(f.bits, 16);
24
+
25
+ assert.strictEqual(Block.calculateTarget(bits).toString('hex'), f.expected);
26
+ });
27
+ });
28
+ });
29
+
30
+ describe('fromBuffer/fromHex', () => {
31
+ fixtures.valid.forEach((f) => {
32
+ it('imports ' + f.description, () => {
33
+ const block = Block.fromHex(f.hex);
34
+
35
+ assert.strictEqual(block.version, f.version);
36
+ assert.strictEqual(block.prevHash!.toString('hex'), f.prevHash);
37
+ assert.strictEqual(block.merkleRoot!.toString('hex'), f.merkleRoot);
38
+ if (block.witnessCommit) {
39
+ assert.strictEqual(block.witnessCommit.toString('hex'), f.witnessCommit);
40
+ }
41
+ assert.strictEqual(block.timestamp, f.timestamp);
42
+ assert.strictEqual(block.bits, f.bits);
43
+ assert.strictEqual(block.nonce, f.nonce);
44
+ assert.strictEqual(!block.transactions, f.hex.length === 160);
45
+ if (f.size && f.strippedSize && f.weight) {
46
+ assert.strictEqual(block.byteLength(false, true), f.size);
47
+ assert.strictEqual(block.byteLength(false, false), f.strippedSize);
48
+ assert.strictEqual(block.weight(), f.weight);
49
+ }
50
+ });
51
+ });
52
+
53
+ fixtures.invalid.forEach((f) => {
54
+ it('throws on ' + f.exception, () => {
55
+ assert.throws(() => {
56
+ Block.fromHex(f.hex);
57
+ }, new RegExp(f.exception));
58
+ });
59
+ });
60
+ });
61
+
62
+ describe('toBuffer/toHex', () => {
63
+ fixtures.valid.forEach((f) => {
64
+ let block: Block;
65
+
66
+ beforeEach(() => {
67
+ block = Block.fromHex(f.hex);
68
+ });
69
+
70
+ it('exports ' + f.description, () => {
71
+ assert.strictEqual(block.toHex(true), f.hex.slice(0, 160));
72
+ assert.strictEqual(block.toHex(), f.hex);
73
+ });
74
+ });
75
+ });
76
+
77
+ describe('getHash/getId', () => {
78
+ fixtures.valid.forEach((f) => {
79
+ let block: Block;
80
+
81
+ beforeEach(() => {
82
+ block = Block.fromHex(f.hex);
83
+ });
84
+
85
+ it('returns ' + f.id + ' for ' + f.description, () => {
86
+ assert.strictEqual(block.getHash().toString('hex'), f.hash);
87
+ assert.strictEqual(block.getId(), f.id);
88
+ });
89
+ });
90
+ });
91
+
92
+ describe('getUTCDate', () => {
93
+ fixtures.valid.forEach((f) => {
94
+ let block: Block;
95
+
96
+ beforeEach(() => {
97
+ block = Block.fromHex(f.hex);
98
+ });
99
+
100
+ it('returns UTC date of ' + f.id, () => {
101
+ const utcDate = block.getUTCDate().getTime();
102
+
103
+ assert.strictEqual(utcDate, f.timestamp * 1e3);
104
+ });
105
+ });
106
+ });
107
+
108
+ describe('calculateMerkleRoot', () => {
109
+ it('should throw on zero-length transaction array', () => {
110
+ assert.throws(() => {
111
+ Block.calculateMerkleRoot([]);
112
+ }, /Cannot compute merkle root for zero transactions/);
113
+ });
114
+
115
+ fixtures.valid.forEach((f) => {
116
+ if (f.hex.length === 160) return;
117
+
118
+ let block: Block;
119
+
120
+ beforeEach(() => {
121
+ block = Block.fromHex(f.hex);
122
+ });
123
+
124
+ it('returns ' + f.merkleRoot + ' for ' + f.id, () => {
125
+ assert.strictEqual(
126
+ Block.calculateMerkleRoot(block.transactions!).toString('hex'),
127
+ f.merkleRoot,
128
+ );
129
+ });
130
+
131
+ if (f.witnessCommit) {
132
+ it('returns witness commit ' + f.witnessCommit + ' for ' + f.id, () => {
133
+ assert.strictEqual(
134
+ Block.calculateMerkleRoot(block.transactions!, true).toString('hex'),
135
+ f.witnessCommit,
136
+ );
137
+ });
138
+ }
139
+ });
140
+ });
141
+
142
+ describe('checkTxRoots', () => {
143
+ fixtures.valid.forEach((f) => {
144
+ if (f.hex.length === 160) return;
145
+
146
+ let block: Block;
147
+
148
+ beforeEach(() => {
149
+ block = Block.fromHex(f.hex);
150
+ });
151
+
152
+ it('returns ' + f.valid + ' for ' + f.id, () => {
153
+ assert.strictEqual(block.checkTxRoots(), true);
154
+ });
155
+ });
156
+ });
157
+
158
+ describe('checkProofOfWork', () => {
159
+ fixtures.valid.forEach((f) => {
160
+ let block: Block;
161
+
162
+ beforeEach(() => {
163
+ block = Block.fromHex(f.hex);
164
+ });
165
+
166
+ it('returns ' + f.valid + ' for ' + f.id, () => {
167
+ assert.strictEqual(block.checkProofOfWork(), f.valid);
168
+ });
169
+ });
170
+ });
171
+ });