xpi-ts 0.2.13 → 0.2.15

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 (277) hide show
  1. package/dist/cjs/lib/bitcore/address.js +75 -74
  2. package/dist/cjs/lib/bitcore/block/block.js +124 -126
  3. package/dist/cjs/lib/bitcore/block/blockheader.js +142 -208
  4. package/dist/cjs/lib/bitcore/block/index.js +3 -1
  5. package/dist/cjs/lib/bitcore/block/merkleblock.js +301 -0
  6. package/dist/cjs/lib/bitcore/crypto/bn.js +18 -22
  7. package/dist/cjs/lib/bitcore/crypto/ecdsa.js +50 -49
  8. package/dist/cjs/lib/bitcore/crypto/hash.js +25 -22
  9. package/dist/cjs/lib/bitcore/crypto/musig2.js +86 -92
  10. package/dist/cjs/lib/bitcore/crypto/point.js +42 -35
  11. package/dist/cjs/lib/bitcore/crypto/random.js +3 -2
  12. package/dist/cjs/lib/bitcore/crypto/schnorr.js +46 -55
  13. package/dist/cjs/lib/bitcore/crypto/signature.js +67 -55
  14. package/dist/cjs/lib/bitcore/crypto/sigtype.js +1 -1
  15. package/dist/cjs/lib/bitcore/encoding/base58.js +5 -4
  16. package/dist/cjs/lib/bitcore/encoding/base58check.js +14 -57
  17. package/dist/cjs/lib/bitcore/encoding/bufferreader.js +17 -17
  18. package/dist/cjs/lib/bitcore/encoding/bufferwriter.js +22 -26
  19. package/dist/cjs/lib/bitcore/encoding/varint.js +12 -11
  20. package/dist/cjs/lib/bitcore/errors.js +1 -0
  21. package/dist/cjs/lib/bitcore/hdprivatekey.js +74 -66
  22. package/dist/cjs/lib/bitcore/hdpublickey.js +96 -116
  23. package/dist/cjs/lib/bitcore/index.js +165 -172
  24. package/dist/cjs/lib/bitcore/message.js +36 -35
  25. package/dist/cjs/lib/bitcore/mnemonic/mnemonic.js +4 -3
  26. package/dist/cjs/lib/bitcore/mnemonic/pbkdf2.js +6 -5
  27. package/dist/cjs/lib/bitcore/mnemonic/words/french.js +2053 -0
  28. package/dist/cjs/lib/bitcore/mnemonic/words/index.js +2 -0
  29. package/dist/cjs/lib/bitcore/musig2/session.js +26 -25
  30. package/dist/cjs/lib/bitcore/musig2/signer.js +17 -16
  31. package/dist/cjs/lib/bitcore/networks.js +4 -3
  32. package/dist/cjs/lib/bitcore/opcode.js +11 -7
  33. package/dist/cjs/lib/bitcore/privatekey.js +42 -42
  34. package/dist/cjs/lib/bitcore/publickey.js +61 -57
  35. package/dist/cjs/lib/bitcore/script/interpreter/condition-stack.js +41 -0
  36. package/dist/cjs/lib/bitcore/script/interpreter/index.js +25 -0
  37. package/dist/cjs/lib/bitcore/script/interpreter/interpreter.js +1362 -0
  38. package/dist/cjs/lib/bitcore/script/interpreter/script-num.js +200 -0
  39. package/dist/cjs/lib/bitcore/script/interpreter/types.js +96 -0
  40. package/dist/cjs/lib/bitcore/{taproot.js → script/taproot.js} +107 -95
  41. package/dist/cjs/lib/bitcore/script.js +163 -104
  42. package/dist/cjs/lib/bitcore/taproot/musig2.js +51 -42
  43. package/dist/cjs/lib/bitcore/transaction/index.js +21 -21
  44. package/dist/cjs/lib/bitcore/transaction/input/multisig.js +10 -0
  45. package/dist/cjs/lib/bitcore/transaction/input/multisigscripthash.js +10 -0
  46. package/dist/cjs/lib/bitcore/transaction/input/publickey.js +10 -0
  47. package/dist/cjs/lib/bitcore/transaction/input/publickeyhash.js +10 -0
  48. package/dist/cjs/lib/bitcore/transaction/input/taproot.js +20 -0
  49. package/dist/cjs/lib/bitcore/transaction/input.js +145 -166
  50. package/dist/cjs/lib/bitcore/transaction/outpoint.js +89 -0
  51. package/dist/cjs/lib/bitcore/transaction/output.js +13 -8
  52. package/dist/cjs/lib/bitcore/transaction/sighash.js +96 -96
  53. package/dist/cjs/lib/bitcore/transaction/signature.js +39 -40
  54. package/dist/cjs/lib/bitcore/transaction/transaction.js +130 -118
  55. package/dist/cjs/lib/bitcore/transaction/unspentoutput.js +27 -23
  56. package/dist/cjs/lib/bitcore/util/bits.js +33 -0
  57. package/dist/cjs/lib/bitcore/util/buffer.js +29 -18
  58. package/dist/cjs/lib/bitcore/util/js.js +0 -3
  59. package/dist/cjs/lib/bitcore/util/merkle.js +53 -0
  60. package/dist/cjs/lib/bitcore/util/preconditions.js +8 -7
  61. package/dist/cjs/lib/bitcore/xaddress.js +27 -23
  62. package/dist/cjs/lib/{bitcore/taproot/nft.js → nft.js} +98 -29
  63. package/dist/cjs/lib/rank/index.js +28 -27
  64. package/dist/cjs/lib/rank/script.js +2 -1
  65. package/dist/cjs/lib/rank/transaction.js +2 -1
  66. package/dist/cjs/utils/string.js +6 -5
  67. package/dist/esm/lib/bitcore/address.js +42 -41
  68. package/dist/esm/lib/bitcore/block/block.js +126 -128
  69. package/dist/esm/lib/bitcore/block/blockheader.js +141 -207
  70. package/dist/esm/lib/bitcore/block/index.js +1 -0
  71. package/dist/esm/lib/bitcore/block/merkleblock.js +295 -0
  72. package/dist/esm/lib/bitcore/crypto/bn.js +18 -22
  73. package/dist/esm/lib/bitcore/crypto/ecdsa.js +25 -24
  74. package/dist/esm/lib/bitcore/crypto/hash.js +25 -22
  75. package/dist/esm/lib/bitcore/crypto/musig2.js +60 -66
  76. package/dist/esm/lib/bitcore/crypto/point.js +22 -15
  77. package/dist/esm/lib/bitcore/crypto/random.js +3 -2
  78. package/dist/esm/lib/bitcore/crypto/schnorr.js +35 -44
  79. package/dist/esm/lib/bitcore/crypto/signature.js +61 -49
  80. package/dist/esm/lib/bitcore/crypto/sigtype.js +1 -1
  81. package/dist/esm/lib/bitcore/encoding/base58.js +5 -4
  82. package/dist/esm/lib/bitcore/encoding/base58check.js +11 -57
  83. package/dist/esm/lib/bitcore/encoding/bufferreader.js +7 -7
  84. package/dist/esm/lib/bitcore/encoding/bufferwriter.js +18 -21
  85. package/dist/esm/lib/bitcore/encoding/varint.js +7 -6
  86. package/dist/esm/lib/bitcore/errors.js +1 -0
  87. package/dist/esm/lib/bitcore/hdprivatekey.js +47 -39
  88. package/dist/esm/lib/bitcore/hdpublickey.js +77 -97
  89. package/dist/esm/lib/bitcore/index.js +42 -45
  90. package/dist/esm/lib/bitcore/message.js +16 -15
  91. package/dist/esm/lib/bitcore/mnemonic/mnemonic.js +4 -3
  92. package/dist/esm/lib/bitcore/mnemonic/pbkdf2.js +5 -4
  93. package/dist/esm/lib/bitcore/mnemonic/words/french.js +2050 -0
  94. package/dist/esm/lib/bitcore/mnemonic/words/index.js +2 -0
  95. package/dist/esm/lib/bitcore/musig2/session.js +17 -16
  96. package/dist/esm/lib/bitcore/musig2/signer.js +19 -18
  97. package/dist/esm/lib/bitcore/networks.js +4 -3
  98. package/dist/esm/lib/bitcore/opcode.js +9 -5
  99. package/dist/esm/lib/bitcore/privatekey.js +25 -25
  100. package/dist/esm/lib/bitcore/publickey.js +46 -42
  101. package/dist/esm/lib/bitcore/script/interpreter/condition-stack.js +37 -0
  102. package/dist/esm/lib/bitcore/script/interpreter/index.js +4 -0
  103. package/dist/esm/lib/bitcore/script/interpreter/interpreter.js +1356 -0
  104. package/dist/esm/lib/bitcore/script/interpreter/script-num.js +195 -0
  105. package/dist/esm/lib/bitcore/script/interpreter/types.js +93 -0
  106. package/dist/esm/lib/bitcore/{taproot.js → script/taproot.js} +92 -81
  107. package/dist/esm/lib/bitcore/script.js +163 -102
  108. package/dist/esm/lib/bitcore/taproot/musig2.js +36 -27
  109. package/dist/esm/lib/bitcore/transaction/index.js +6 -6
  110. package/dist/esm/lib/bitcore/transaction/input/multisig.js +6 -0
  111. package/dist/esm/lib/bitcore/transaction/input/multisigscripthash.js +6 -0
  112. package/dist/esm/lib/bitcore/transaction/input/publickey.js +6 -0
  113. package/dist/esm/lib/bitcore/transaction/input/publickeyhash.js +6 -0
  114. package/dist/esm/lib/bitcore/transaction/input/taproot.js +16 -0
  115. package/dist/esm/lib/bitcore/transaction/input.js +55 -76
  116. package/dist/esm/lib/bitcore/transaction/outpoint.js +85 -0
  117. package/dist/esm/lib/bitcore/transaction/output.js +13 -8
  118. package/dist/esm/lib/bitcore/transaction/sighash.js +22 -22
  119. package/dist/esm/lib/bitcore/transaction/signature.js +16 -17
  120. package/dist/esm/lib/bitcore/transaction/transaction.js +58 -46
  121. package/dist/esm/lib/bitcore/transaction/unspentoutput.js +15 -11
  122. package/dist/esm/lib/bitcore/util/bits.js +27 -0
  123. package/dist/esm/lib/bitcore/util/buffer.js +20 -9
  124. package/dist/esm/lib/bitcore/util/js.js +0 -3
  125. package/dist/esm/lib/bitcore/util/merkle.js +47 -0
  126. package/dist/esm/lib/bitcore/util/preconditions.js +3 -2
  127. package/dist/esm/lib/bitcore/xaddress.js +16 -12
  128. package/dist/esm/lib/{bitcore/taproot/nft.js → nft.js} +97 -28
  129. package/dist/esm/lib/rank/index.js +15 -14
  130. package/dist/esm/lib/rank/script.js +1 -0
  131. package/dist/esm/lib/rank/transaction.js +1 -0
  132. package/dist/esm/utils/string.js +1 -0
  133. package/dist/types/lib/bitcore/address.d.ts +4 -3
  134. package/dist/types/lib/bitcore/address.d.ts.map +1 -1
  135. package/dist/types/lib/bitcore/block/block.d.ts +11 -19
  136. package/dist/types/lib/bitcore/block/block.d.ts.map +1 -1
  137. package/dist/types/lib/bitcore/block/blockheader.d.ts +30 -32
  138. package/dist/types/lib/bitcore/block/blockheader.d.ts.map +1 -1
  139. package/dist/types/lib/bitcore/block/index.d.ts +2 -0
  140. package/dist/types/lib/bitcore/block/index.d.ts.map +1 -1
  141. package/dist/types/lib/bitcore/block/merkleblock.d.ts +53 -0
  142. package/dist/types/lib/bitcore/block/merkleblock.d.ts.map +1 -0
  143. package/dist/types/lib/bitcore/crypto/bn.d.ts +2 -2
  144. package/dist/types/lib/bitcore/crypto/bn.d.ts.map +1 -1
  145. package/dist/types/lib/bitcore/crypto/ecdsa.d.ts +5 -4
  146. package/dist/types/lib/bitcore/crypto/ecdsa.d.ts.map +1 -1
  147. package/dist/types/lib/bitcore/crypto/hash.d.ts +3 -1
  148. package/dist/types/lib/bitcore/crypto/hash.d.ts.map +1 -1
  149. package/dist/types/lib/bitcore/crypto/musig2.d.ts +22 -30
  150. package/dist/types/lib/bitcore/crypto/musig2.d.ts.map +1 -1
  151. package/dist/types/lib/bitcore/crypto/point.d.ts +8 -3
  152. package/dist/types/lib/bitcore/crypto/point.d.ts.map +1 -1
  153. package/dist/types/lib/bitcore/crypto/random.d.ts +1 -0
  154. package/dist/types/lib/bitcore/crypto/random.d.ts.map +1 -1
  155. package/dist/types/lib/bitcore/crypto/schnorr.d.ts +5 -4
  156. package/dist/types/lib/bitcore/crypto/schnorr.d.ts.map +1 -1
  157. package/dist/types/lib/bitcore/crypto/signature.d.ts +4 -1
  158. package/dist/types/lib/bitcore/crypto/signature.d.ts.map +1 -1
  159. package/dist/types/lib/bitcore/crypto/sigtype.d.ts +1 -0
  160. package/dist/types/lib/bitcore/crypto/sigtype.d.ts.map +1 -1
  161. package/dist/types/lib/bitcore/encoding/base58.d.ts +1 -0
  162. package/dist/types/lib/bitcore/encoding/base58.d.ts.map +1 -1
  163. package/dist/types/lib/bitcore/encoding/base58check.d.ts +1 -2
  164. package/dist/types/lib/bitcore/encoding/base58check.d.ts.map +1 -1
  165. package/dist/types/lib/bitcore/encoding/bufferreader.d.ts +2 -1
  166. package/dist/types/lib/bitcore/encoding/bufferreader.d.ts.map +1 -1
  167. package/dist/types/lib/bitcore/encoding/bufferwriter.d.ts +2 -2
  168. package/dist/types/lib/bitcore/encoding/bufferwriter.d.ts.map +1 -1
  169. package/dist/types/lib/bitcore/encoding/varint.d.ts +3 -2
  170. package/dist/types/lib/bitcore/encoding/varint.d.ts.map +1 -1
  171. package/dist/types/lib/bitcore/errors.d.ts +3 -0
  172. package/dist/types/lib/bitcore/errors.d.ts.map +1 -1
  173. package/dist/types/lib/bitcore/hdprivatekey.d.ts +5 -4
  174. package/dist/types/lib/bitcore/hdprivatekey.d.ts.map +1 -1
  175. package/dist/types/lib/bitcore/hdpublickey.d.ts +4 -3
  176. package/dist/types/lib/bitcore/hdpublickey.d.ts.map +1 -1
  177. package/dist/types/lib/bitcore/index.d.ts +55 -60
  178. package/dist/types/lib/bitcore/index.d.ts.map +1 -1
  179. package/dist/types/lib/bitcore/message.d.ts +7 -4
  180. package/dist/types/lib/bitcore/message.d.ts.map +1 -1
  181. package/dist/types/lib/bitcore/mnemonic/mnemonic.d.ts +2 -0
  182. package/dist/types/lib/bitcore/mnemonic/mnemonic.d.ts.map +1 -1
  183. package/dist/types/lib/bitcore/mnemonic/pbkdf2.d.ts +1 -0
  184. package/dist/types/lib/bitcore/mnemonic/pbkdf2.d.ts.map +1 -1
  185. package/dist/types/lib/bitcore/mnemonic/words/french.d.ts +2 -0
  186. package/dist/types/lib/bitcore/mnemonic/words/french.d.ts.map +1 -0
  187. package/dist/types/lib/bitcore/mnemonic/words/index.d.ts +1 -0
  188. package/dist/types/lib/bitcore/mnemonic/words/index.d.ts.map +1 -1
  189. package/dist/types/lib/bitcore/musig2/session.d.ts +8 -7
  190. package/dist/types/lib/bitcore/musig2/session.d.ts.map +1 -1
  191. package/dist/types/lib/bitcore/musig2/signer.d.ts +10 -9
  192. package/dist/types/lib/bitcore/musig2/signer.d.ts.map +1 -1
  193. package/dist/types/lib/bitcore/networks.d.ts +1 -0
  194. package/dist/types/lib/bitcore/networks.d.ts.map +1 -1
  195. package/dist/types/lib/bitcore/opcode.d.ts +5 -0
  196. package/dist/types/lib/bitcore/opcode.d.ts.map +1 -1
  197. package/dist/types/lib/bitcore/privatekey.d.ts +5 -4
  198. package/dist/types/lib/bitcore/privatekey.d.ts.map +1 -1
  199. package/dist/types/lib/bitcore/publickey.d.ts +13 -6
  200. package/dist/types/lib/bitcore/publickey.d.ts.map +1 -1
  201. package/dist/types/lib/bitcore/{chunk.d.ts → script/chunk.d.ts} +1 -0
  202. package/dist/types/lib/bitcore/script/chunk.d.ts.map +1 -0
  203. package/dist/types/lib/bitcore/script/interpreter/condition-stack.d.ts +11 -0
  204. package/dist/types/lib/bitcore/script/interpreter/condition-stack.d.ts.map +1 -0
  205. package/dist/types/lib/bitcore/script/interpreter/index.d.ts +5 -0
  206. package/dist/types/lib/bitcore/script/interpreter/index.d.ts.map +1 -0
  207. package/dist/types/lib/bitcore/script/interpreter/interpreter.d.ts +21 -0
  208. package/dist/types/lib/bitcore/script/interpreter/interpreter.d.ts.map +1 -0
  209. package/dist/types/lib/bitcore/script/interpreter/script-num.d.ts +35 -0
  210. package/dist/types/lib/bitcore/script/interpreter/script-num.d.ts.map +1 -0
  211. package/dist/types/lib/bitcore/script/interpreter/types.d.ts +101 -0
  212. package/dist/types/lib/bitcore/script/interpreter/types.d.ts.map +1 -0
  213. package/dist/types/lib/bitcore/{taproot.d.ts → script/taproot.d.ts} +20 -7
  214. package/dist/types/lib/bitcore/script/taproot.d.ts.map +1 -0
  215. package/dist/types/lib/bitcore/script.d.ts +12 -11
  216. package/dist/types/lib/bitcore/script.d.ts.map +1 -1
  217. package/dist/types/lib/bitcore/taproot/musig2.d.ts +17 -16
  218. package/dist/types/lib/bitcore/taproot/musig2.d.ts.map +1 -1
  219. package/dist/types/lib/bitcore/transaction/index.d.ts +11 -11
  220. package/dist/types/lib/bitcore/transaction/index.d.ts.map +1 -1
  221. package/dist/types/lib/bitcore/transaction/input/multisig.d.ts +5 -0
  222. package/dist/types/lib/bitcore/transaction/input/multisig.d.ts.map +1 -0
  223. package/dist/types/lib/bitcore/transaction/input/multisigscripthash.d.ts +5 -0
  224. package/dist/types/lib/bitcore/transaction/input/multisigscripthash.d.ts.map +1 -0
  225. package/dist/types/lib/bitcore/transaction/input/publickey.d.ts +5 -0
  226. package/dist/types/lib/bitcore/transaction/input/publickey.d.ts.map +1 -0
  227. package/dist/types/lib/bitcore/transaction/input/publickeyhash.d.ts +6 -0
  228. package/dist/types/lib/bitcore/transaction/input/publickeyhash.d.ts.map +1 -0
  229. package/dist/types/lib/bitcore/transaction/input/taproot.d.ts +18 -0
  230. package/dist/types/lib/bitcore/transaction/input/taproot.d.ts.map +1 -0
  231. package/dist/types/lib/bitcore/transaction/input.d.ts +27 -35
  232. package/dist/types/lib/bitcore/transaction/input.d.ts.map +1 -1
  233. package/dist/types/lib/bitcore/transaction/outpoint.d.ts +32 -0
  234. package/dist/types/lib/bitcore/transaction/outpoint.d.ts.map +1 -0
  235. package/dist/types/lib/bitcore/transaction/output.d.ts +3 -1
  236. package/dist/types/lib/bitcore/transaction/output.d.ts.map +1 -1
  237. package/dist/types/lib/bitcore/transaction/sighash.d.ts +8 -7
  238. package/dist/types/lib/bitcore/transaction/sighash.d.ts.map +1 -1
  239. package/dist/types/lib/bitcore/transaction/signature.d.ts +3 -2
  240. package/dist/types/lib/bitcore/transaction/signature.d.ts.map +1 -1
  241. package/dist/types/lib/bitcore/transaction/transaction.d.ts +18 -15
  242. package/dist/types/lib/bitcore/transaction/transaction.d.ts.map +1 -1
  243. package/dist/types/lib/bitcore/transaction/unspentoutput.d.ts +9 -7
  244. package/dist/types/lib/bitcore/transaction/unspentoutput.d.ts.map +1 -1
  245. package/dist/types/lib/bitcore/unit.d.ts.map +1 -1
  246. package/dist/types/lib/bitcore/util/base32.d.ts.map +1 -1
  247. package/dist/types/lib/bitcore/util/bits.d.ts +5 -0
  248. package/dist/types/lib/bitcore/util/bits.d.ts.map +1 -0
  249. package/dist/types/lib/bitcore/util/buffer.d.ts +10 -2
  250. package/dist/types/lib/bitcore/util/buffer.d.ts.map +1 -1
  251. package/dist/types/lib/bitcore/util/js.d.ts +0 -1
  252. package/dist/types/lib/bitcore/util/js.d.ts.map +1 -1
  253. package/dist/types/lib/bitcore/util/merkle.d.ts +6 -0
  254. package/dist/types/lib/bitcore/util/merkle.d.ts.map +1 -0
  255. package/dist/types/lib/bitcore/util/preconditions.d.ts.map +1 -1
  256. package/dist/types/lib/bitcore/xaddress.d.ts +1 -0
  257. package/dist/types/lib/bitcore/xaddress.d.ts.map +1 -1
  258. package/dist/types/lib/{bitcore/taproot/nft.d.ts → nft.d.ts} +26 -12
  259. package/dist/types/lib/nft.d.ts.map +1 -0
  260. package/dist/types/lib/rank/index.d.ts +1 -0
  261. package/dist/types/lib/rank/index.d.ts.map +1 -1
  262. package/dist/types/lib/rank/script.d.ts +1 -0
  263. package/dist/types/lib/rank/script.d.ts.map +1 -1
  264. package/dist/types/lib/rank/transaction.d.ts +1 -0
  265. package/dist/types/lib/rank/transaction.d.ts.map +1 -1
  266. package/dist/types/utils/string.d.ts +1 -0
  267. package/dist/types/utils/string.d.ts.map +1 -1
  268. package/package.json +3 -2
  269. package/dist/cjs/lib/bitcore/script/interpreter.js +0 -1757
  270. package/dist/esm/lib/bitcore/script/interpreter.js +0 -1753
  271. package/dist/types/lib/bitcore/chunk.d.ts.map +0 -1
  272. package/dist/types/lib/bitcore/script/interpreter.d.ts +0 -101
  273. package/dist/types/lib/bitcore/script/interpreter.d.ts.map +0 -1
  274. package/dist/types/lib/bitcore/taproot/nft.d.ts.map +0 -1
  275. package/dist/types/lib/bitcore/taproot.d.ts.map +0 -1
  276. /package/dist/cjs/lib/bitcore/{chunk.js → script/chunk.js} +0 -0
  277. /package/dist/esm/lib/bitcore/{chunk.js → script/chunk.js} +0 -0
@@ -1,23 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BlockHeader = void 0;
4
+ const buffer_1 = require("buffer/");
4
5
  const preconditions_js_1 = require("../util/preconditions.js");
5
6
  const buffer_js_1 = require("../util/buffer.js");
6
7
  const bufferreader_js_1 = require("../encoding/bufferreader.js");
7
8
  const bufferwriter_js_1 = require("../encoding/bufferwriter.js");
8
9
  const hash_js_1 = require("../crypto/hash.js");
9
- const js_js_1 = require("../util/js.js");
10
10
  const bn_js_1 = require("../crypto/bn.js");
11
+ const EPOCH_NUM_BLOCKS = 5040;
11
12
  const GENESIS_BITS = 0x1d00ffff;
13
+ const HEADER_SIZE = 160;
12
14
  class BlockHeader {
15
+ static START_OF_HEADER = 0;
16
+ static MAX_TIME_OFFSET = 2 * 60 * 60;
17
+ static LARGEST_HASH = new bn_js_1.BN('10000000000000000000000000000000000000000000000000000000000000000', 'hex');
18
+ static HEADER_SIZE = HEADER_SIZE;
19
+ static EPOCH_NUM_BLOCKS = EPOCH_NUM_BLOCKS;
13
20
  static Constants = {
14
21
  START_OF_HEADER: 0,
15
22
  MAX_TIME_OFFSET: 2 * 60 * 60,
16
23
  LARGEST_HASH: new bn_js_1.BN('10000000000000000000000000000000000000000000000000000000000000000', 'hex'),
17
24
  };
18
- static START_OF_HEADER = 0;
19
- static MAX_TIME_OFFSET = 2 * 60 * 60;
20
- static LARGEST_HASH = BigInt('0x10000000000000000000000000000000000000000000000000000000000000000');
21
25
  prevHash;
22
26
  bits;
23
27
  time;
@@ -35,165 +39,71 @@ class BlockHeader {
35
39
  if (arg instanceof BlockHeader) {
36
40
  return arg;
37
41
  }
38
- this.prevHash = Buffer.alloc(32);
39
- this.bits = 0;
40
- this.time = 0;
41
- this.timestamp = 0;
42
- this.reserved = 0;
43
- this.nonce = new bn_js_1.BN(0);
44
- this.version = 0;
45
- this.size = new bn_js_1.BN(0);
46
- this.height = 0;
47
- this.epochBlock = Buffer.alloc(32);
48
- this.merkleRoot = Buffer.alloc(32);
49
- this.extendedMetadata = Buffer.alloc(32);
50
- if (arg && typeof arg === 'object') {
51
- const info = BlockHeader._from(arg);
52
- this.prevHash = info.prevHash;
53
- this.bits = info.bits;
54
- this.time = info.time;
55
- this.timestamp = info.time;
56
- this.reserved = info.reserved || 0;
57
- this.nonce = info.nonce;
58
- this.version = info.version;
59
- this.size = info.size;
60
- this.height = info.height;
61
- this.epochBlock = info.epochBlock;
62
- this.merkleRoot = info.merkleRoot;
63
- this.extendedMetadata = info.extendedMetadata;
64
- if (info.hash) {
65
- preconditions_js_1.Preconditions.checkState(this.hash === info.hash, 'Argument object hash property does not match block hash.');
66
- }
67
- }
68
- }
69
- static _from(arg) {
70
- let info = {};
71
- if (Buffer.isBuffer(arg)) {
72
- info = BlockHeader._fromBufferReader(new bufferreader_js_1.BufferReader(arg));
73
- }
74
- else if (typeof arg === 'string' && js_js_1.JSUtil.isHexa(arg)) {
75
- const buf = Buffer.from(arg, 'hex');
76
- info = BlockHeader._fromBufferReader(new bufferreader_js_1.BufferReader(buf));
77
- }
78
- else if (typeof arg === 'object' && arg !== null) {
79
- info = BlockHeader._fromObject(arg);
80
- }
81
- else {
82
- throw new TypeError('Unrecognized argument for BlockHeader');
83
- }
84
- return info;
85
- }
86
- static _fromObject(data) {
87
- preconditions_js_1.Preconditions.checkArgument(typeof data === 'object' && data !== null, 'data is required');
88
- let prevHash = data.prevHash;
89
- let merkleRoot = data.merkleRoot;
90
- let epochBlock = data.epochBlock;
91
- let extendedMetadata = data.extendedMetadata;
92
- let nonce = data.nonce;
93
- let size = data.size;
94
- if (typeof data.prevHash === 'string') {
95
- prevHash = buffer_js_1.BufferUtil.reverse(Buffer.from(data.prevHash, 'hex'));
96
- }
97
- else if (!Buffer.isBuffer(data.prevHash)) {
98
- prevHash = Buffer.alloc(32);
99
- }
100
- if (typeof data.merkleRoot === 'string') {
101
- merkleRoot = buffer_js_1.BufferUtil.reverse(Buffer.from(data.merkleRoot, 'hex'));
102
- }
103
- else if (!Buffer.isBuffer(data.merkleRoot)) {
104
- merkleRoot = Buffer.alloc(32);
42
+ const data = arg
43
+ ? BlockHeader._normalizeData(arg)
44
+ : BlockHeader._defaultData();
45
+ this.prevHash = data.prevHash;
46
+ this.bits = data.bits;
47
+ this.time = data.time;
48
+ this.timestamp = data.time;
49
+ this.reserved = data.reserved;
50
+ this.nonce = data.nonce;
51
+ this.version = data.version;
52
+ this.size = data.size;
53
+ this.height = data.height;
54
+ this.epochBlock = data.epochBlock;
55
+ this.merkleRoot = data.merkleRoot;
56
+ this.extendedMetadata = data.extendedMetadata;
57
+ if (data.hash) {
58
+ preconditions_js_1.Preconditions.checkState(this.hash === data.hash, 'Argument object hash property does not match block hash.');
105
59
  }
106
- if (typeof data.epochBlock === 'string') {
107
- epochBlock = buffer_js_1.BufferUtil.reverse(Buffer.from(data.epochBlock, 'hex'));
108
- }
109
- else if (!Buffer.isBuffer(data.epochBlock)) {
110
- epochBlock = Buffer.alloc(32);
111
- }
112
- if (typeof data.extendedMetadata === 'string') {
113
- extendedMetadata = buffer_js_1.BufferUtil.reverse(Buffer.from(data.extendedMetadata, 'hex'));
114
- }
115
- else if (!Buffer.isBuffer(data.extendedMetadata)) {
116
- extendedMetadata = Buffer.alloc(32);
117
- }
118
- if (typeof data.nonce === 'string') {
119
- nonce = new bn_js_1.BN(data.nonce, 10);
120
- }
121
- else if (typeof data.nonce === 'number') {
122
- nonce = new bn_js_1.BN(data.nonce);
123
- }
124
- else if (data.nonce instanceof bn_js_1.BN) {
125
- nonce = data.nonce;
126
- }
127
- else {
128
- nonce = new bn_js_1.BN(0);
129
- }
130
- if (typeof data.size === 'string') {
131
- size = new bn_js_1.BN(data.size, 10);
132
- }
133
- else if (typeof data.size === 'number') {
134
- size = new bn_js_1.BN(data.size);
135
- }
136
- else if (data.size instanceof bn_js_1.BN) {
137
- size = data.size;
138
- }
139
- else {
140
- size = new bn_js_1.BN(0);
141
- }
142
- return {
143
- hash: data.hash,
144
- prevHash: prevHash,
145
- bits: data.bits || 0,
146
- timestamp: data.time || data.timestamp || 0,
147
- reserved: data.reserved || 0,
148
- nonce: nonce,
149
- version: data.version || 0,
150
- size: size,
151
- height: data.height || 0,
152
- epochBlock: epochBlock,
153
- merkleRoot: merkleRoot,
154
- extendedMetadata: extendedMetadata,
155
- time: data.time || data.timestamp || 0,
156
- };
157
60
  }
158
61
  static fromObject(obj) {
159
- const info = BlockHeader._fromObject(obj);
160
- return new BlockHeader(info);
62
+ preconditions_js_1.Preconditions.checkArgument(typeof obj === 'object' && obj !== null, 'data', 'data is required');
63
+ const prevHash = obj.prevHash
64
+ ? buffer_js_1.BufferUtil.reverse(buffer_1.Buffer.from(obj.prevHash, 'hex'))
65
+ : buffer_1.Buffer.alloc(32);
66
+ const merkleRoot = obj.merkleRoot
67
+ ? buffer_js_1.BufferUtil.reverse(buffer_1.Buffer.from(obj.merkleRoot, 'hex'))
68
+ : buffer_1.Buffer.alloc(32);
69
+ const epochBlock = obj.epochBlock
70
+ ? buffer_js_1.BufferUtil.reverse(buffer_1.Buffer.from(obj.epochBlock, 'hex'))
71
+ : buffer_1.Buffer.alloc(32);
72
+ const extendedMetadata = obj.extendedMetadata
73
+ ? buffer_js_1.BufferUtil.reverse(buffer_1.Buffer.from(obj.extendedMetadata, 'hex'))
74
+ : buffer_1.Buffer.alloc(32);
75
+ return new BlockHeader({
76
+ hash: obj.hash,
77
+ prevHash,
78
+ bits: obj.bits || 0,
79
+ time: obj.time || 0,
80
+ reserved: obj.reserved || 0,
81
+ nonce: new bn_js_1.BN(obj.nonce, 10),
82
+ version: obj.version || 0,
83
+ size: new bn_js_1.BN(obj.size),
84
+ height: obj.height || 0,
85
+ epochBlock,
86
+ merkleRoot,
87
+ extendedMetadata,
88
+ });
161
89
  }
162
90
  static fromRawBlock(data) {
163
- if (!Buffer.isBuffer(data)) {
164
- data = Buffer.from(data, 'binary');
91
+ if (!buffer_1.Buffer.isBuffer(data)) {
92
+ data = buffer_1.Buffer.from(data, 'binary');
165
93
  }
166
94
  const br = new bufferreader_js_1.BufferReader(data);
167
- br.pos = BlockHeader.Constants.START_OF_HEADER;
168
- const info = BlockHeader._fromBufferReader(br);
169
- return new BlockHeader(info);
95
+ br.pos = BlockHeader.START_OF_HEADER;
96
+ return BlockHeader.fromBufferReader(br);
170
97
  }
171
98
  static fromBuffer(buf) {
172
- const info = BlockHeader._fromBufferReader(new bufferreader_js_1.BufferReader(buf));
173
- return new BlockHeader(info);
99
+ return BlockHeader.fromBufferReader(new bufferreader_js_1.BufferReader(buf));
174
100
  }
175
101
  static fromString(str) {
176
- const buf = Buffer.from(str, 'hex');
177
- return BlockHeader.fromBuffer(buf);
178
- }
179
- static _fromBufferReader(br) {
180
- return {
181
- prevHash: br.read(32),
182
- bits: br.readUInt32LE(),
183
- time: br.readUInt48LE(),
184
- reserved: br.readUInt16LE(),
185
- nonce: br.readUInt64LEBN(),
186
- version: br.readUInt8(),
187
- size: br.readUInt56LEBN(),
188
- height: br.readUInt32LE(),
189
- epochBlock: br.read(32),
190
- merkleRoot: br.read(32),
191
- extendedMetadata: br.read(32),
192
- };
102
+ return BlockHeader.fromBuffer(buffer_1.Buffer.from(str, 'hex'));
193
103
  }
194
104
  static fromBufferReader(br) {
195
- const info = BlockHeader._fromBufferReader(br);
196
- return new BlockHeader(info);
105
+ const data = BlockHeader._readFromBuffer(br);
106
+ return new BlockHeader(data);
197
107
  }
198
108
  toObject() {
199
109
  return {
@@ -211,7 +121,9 @@ class BlockHeader {
211
121
  extendedMetadata: buffer_js_1.BufferUtil.reverse(this.extendedMetadata).toString('hex'),
212
122
  };
213
123
  }
214
- toJSON = this.toObject;
124
+ toJSON() {
125
+ return this.toObject();
126
+ }
215
127
  toBuffer() {
216
128
  return this.toBufferWriter().toBuffer();
217
129
  }
@@ -235,6 +147,16 @@ class BlockHeader {
235
147
  bw.write(this.extendedMetadata);
236
148
  return bw;
237
149
  }
150
+ get hash() {
151
+ if (!this._id) {
152
+ const hashBuffer = this._computeHash();
153
+ this._id = buffer_js_1.BufferUtil.reverse(hashBuffer).toString('hex');
154
+ }
155
+ return this._id;
156
+ }
157
+ get id() {
158
+ return this.hash;
159
+ }
238
160
  getTargetDifficulty(bits) {
239
161
  bits = bits || this.bits;
240
162
  let target = new bn_js_1.BN(bits & 0xffffff);
@@ -256,72 +178,84 @@ class BlockHeader {
256
178
  difficultyString.slice(decimalPos);
257
179
  return parseFloat(formattedDifficulty);
258
180
  }
259
- _getHash() {
260
- const layer3Hash = this._getLayer3Hash();
261
- const layer2Hash = this._getLayer2Hash(layer3Hash);
262
- const bw = new bufferwriter_js_1.BufferWriter();
263
- bw.write(this.prevHash);
264
- bw.write(layer2Hash);
265
- return hash_js_1.Hash.sha256(bw.toBuffer());
266
- }
267
- _timeToBytes() {
268
- const buf = Buffer.alloc(6);
269
- buf.writeUIntLE(this.time, 0, 6);
270
- return buf;
271
- }
272
- _sizeToBytes() {
273
- const buf = Buffer.alloc(7);
274
- const sizeBuffer = this.size.toArrayLike(Buffer, 'le', 7);
275
- sizeBuffer.copy(buf);
276
- return buf;
277
- }
278
- _getLayer3Hash() {
279
- const bw = new bufferwriter_js_1.BufferWriter();
280
- bw.writeUInt8(this.version);
281
- bw.writeUInt56LEBN(this.size);
282
- bw.writeUInt32LE(this.height);
283
- bw.write(this.epochBlock);
284
- bw.write(this.merkleRoot);
285
- bw.write(this.extendedMetadata);
286
- return hash_js_1.Hash.sha256(bw.toBuffer());
287
- }
288
- _getLayer2Hash(layer3Hash) {
289
- const bw = new bufferwriter_js_1.BufferWriter();
290
- bw.writeUInt32LE(this.bits);
291
- bw.writeUInt48LE(this.time);
292
- bw.writeUInt16LE(this.reserved);
293
- bw.writeUInt64LEBN(this.nonce);
294
- bw.write(layer3Hash);
295
- return hash_js_1.Hash.sha256(bw.toBuffer());
296
- }
297
- get hash() {
298
- if (!this._id) {
299
- const hashBuffer = this._getHash();
300
- const reader = new bufferreader_js_1.BufferReader(hashBuffer);
301
- this._id = reader.readReverse(32).toString('hex');
302
- }
303
- return this._id;
304
- }
305
- get id() {
306
- return this.hash;
307
- }
308
181
  validTimestamp() {
309
182
  const currentTime = Math.round(new Date().getTime() / 1000);
310
- if (this.time > currentTime + BlockHeader.Constants.MAX_TIME_OFFSET) {
311
- return false;
312
- }
313
- return true;
183
+ return this.time <= currentTime + BlockHeader.MAX_TIME_OFFSET;
314
184
  }
315
185
  validProofOfWork() {
316
186
  const pow = new bn_js_1.BN(this.id, 'hex');
317
187
  const target = this.getTargetDifficulty();
318
- if (pow.gt(target)) {
319
- return false;
320
- }
321
- return true;
188
+ return !pow.gt(target);
322
189
  }
323
190
  inspect() {
324
191
  return '<BlockHeader ' + this.id + '>';
325
192
  }
193
+ _computeHash() {
194
+ const bw3 = new bufferwriter_js_1.BufferWriter();
195
+ bw3.writeUInt8(this.version);
196
+ bw3.writeUInt56LEBN(this.size);
197
+ bw3.writeUInt32LE(this.height);
198
+ bw3.write(this.epochBlock);
199
+ bw3.write(this.merkleRoot);
200
+ bw3.write(this.extendedMetadata);
201
+ const layer3Hash = hash_js_1.Hash.sha256(bw3.toBuffer());
202
+ const bw2 = new bufferwriter_js_1.BufferWriter();
203
+ bw2.writeUInt32LE(this.bits);
204
+ bw2.writeUInt48LE(this.time);
205
+ bw2.writeUInt16LE(this.reserved);
206
+ bw2.writeUInt64LEBN(this.nonce);
207
+ bw2.write(layer3Hash);
208
+ const layer2Hash = hash_js_1.Hash.sha256(bw2.toBuffer());
209
+ const bw1 = new bufferwriter_js_1.BufferWriter();
210
+ bw1.write(this.prevHash);
211
+ bw1.write(layer2Hash);
212
+ return hash_js_1.Hash.sha256(bw1.toBuffer());
213
+ }
214
+ static _normalizeData(data) {
215
+ return {
216
+ hash: data.hash,
217
+ prevHash: data.prevHash || buffer_1.Buffer.alloc(32),
218
+ bits: data.bits || 0,
219
+ time: data.time || 0,
220
+ reserved: data.reserved || 0,
221
+ nonce: data.nonce || new bn_js_1.BN(0),
222
+ version: data.version || 0,
223
+ size: data.size || new bn_js_1.BN(0),
224
+ height: data.height || 0,
225
+ epochBlock: data.epochBlock || buffer_1.Buffer.alloc(32),
226
+ merkleRoot: data.merkleRoot || buffer_1.Buffer.alloc(32),
227
+ extendedMetadata: data.extendedMetadata || buffer_1.Buffer.alloc(32),
228
+ };
229
+ }
230
+ static _defaultData() {
231
+ return {
232
+ prevHash: buffer_1.Buffer.alloc(32),
233
+ bits: 0,
234
+ time: 0,
235
+ reserved: 0,
236
+ nonce: new bn_js_1.BN(0),
237
+ version: 0,
238
+ size: new bn_js_1.BN(0),
239
+ height: 0,
240
+ epochBlock: buffer_1.Buffer.alloc(32),
241
+ merkleRoot: buffer_1.Buffer.alloc(32),
242
+ extendedMetadata: buffer_1.Buffer.alloc(32),
243
+ };
244
+ }
245
+ static _readFromBuffer(br) {
246
+ return {
247
+ prevHash: br.read(32),
248
+ bits: br.readUInt32LE(),
249
+ time: br.readUInt48LE(),
250
+ reserved: br.readUInt16LE(),
251
+ nonce: br.readUInt64LEBN(),
252
+ version: br.readUInt8(),
253
+ size: br.readUInt56LEBN(),
254
+ height: br.readUInt32LE(),
255
+ epochBlock: br.read(32),
256
+ merkleRoot: br.read(32),
257
+ extendedMetadata: br.read(32),
258
+ };
259
+ }
326
260
  }
327
261
  exports.BlockHeader = BlockHeader;
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BlockHeader = exports.Block = void 0;
3
+ exports.MerkleBlock = exports.BlockHeader = exports.Block = void 0;
4
4
  var block_js_1 = require("./block.js");
5
5
  Object.defineProperty(exports, "Block", { enumerable: true, get: function () { return block_js_1.Block; } });
6
6
  var blockheader_js_1 = require("./blockheader.js");
7
7
  Object.defineProperty(exports, "BlockHeader", { enumerable: true, get: function () { return blockheader_js_1.BlockHeader; } });
8
+ var merkleblock_js_1 = require("./merkleblock.js");
9
+ Object.defineProperty(exports, "MerkleBlock", { enumerable: true, get: function () { return merkleblock_js_1.MerkleBlock; } });