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