hardhat 2.10.1 → 2.11.0-dev.0

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 (440) hide show
  1. package/README.md +1 -1
  2. package/builtin-tasks/compile.js +6 -8
  3. package/builtin-tasks/compile.js.map +1 -1
  4. package/builtin-tasks/node.js +9 -12
  5. package/builtin-tasks/node.js.map +1 -1
  6. package/builtin-tasks/test.js +2 -3
  7. package/builtin-tasks/test.js.map +1 -1
  8. package/console.sol +444 -444
  9. package/internal/artifacts.js +1 -1
  10. package/internal/artifacts.js.map +1 -1
  11. package/internal/cli/ArgumentsParser.js +5 -2
  12. package/internal/cli/ArgumentsParser.js.map +1 -1
  13. package/internal/cli/analytics.js +2 -2
  14. package/internal/cli/analytics.js.map +1 -1
  15. package/internal/cli/autocomplete.js +20 -32
  16. package/internal/cli/autocomplete.js.map +1 -1
  17. package/internal/cli/cli.js +1 -1
  18. package/internal/cli/cli.js.map +1 -1
  19. package/internal/cli/project-creation.js +14 -4
  20. package/internal/cli/project-creation.js.map +1 -1
  21. package/internal/constants.d.ts.map +1 -1
  22. package/internal/constants.js +2 -0
  23. package/internal/constants.js.map +1 -1
  24. package/internal/core/config/config-loading.js +2 -3
  25. package/internal/core/config/config-loading.js.map +1 -1
  26. package/internal/core/config/config-resolution.d.ts.map +1 -1
  27. package/internal/core/config/config-resolution.js +84 -35
  28. package/internal/core/config/config-resolution.js.map +1 -1
  29. package/internal/core/config/config-validation.js +38 -20
  30. package/internal/core/config/config-validation.js.map +1 -1
  31. package/internal/core/config/default-config.d.ts.map +1 -1
  32. package/internal/core/config/default-config.js +17 -4
  33. package/internal/core/config/default-config.js.map +1 -1
  34. package/internal/core/errors.js +4 -2
  35. package/internal/core/errors.js.map +1 -1
  36. package/internal/core/execution-mode.js +2 -2
  37. package/internal/core/execution-mode.js.map +1 -1
  38. package/internal/core/flamegraph.d.ts +10 -0
  39. package/internal/core/flamegraph.d.ts.map +1 -0
  40. package/internal/core/flamegraph.js +245 -0
  41. package/internal/core/flamegraph.js.map +1 -0
  42. package/internal/core/jsonrpc/types/base-types.d.ts +7 -8
  43. package/internal/core/jsonrpc/types/base-types.d.ts.map +1 -1
  44. package/internal/core/jsonrpc/types/base-types.js +24 -24
  45. package/internal/core/jsonrpc/types/base-types.js.map +1 -1
  46. package/internal/core/jsonrpc/types/input/blockTag.d.ts +15 -10
  47. package/internal/core/jsonrpc/types/input/blockTag.d.ts.map +1 -1
  48. package/internal/core/jsonrpc/types/input/blockTag.js +2 -0
  49. package/internal/core/jsonrpc/types/input/blockTag.js.map +1 -1
  50. package/internal/core/jsonrpc/types/input/callRequest.d.ts +5 -6
  51. package/internal/core/jsonrpc/types/input/callRequest.d.ts.map +1 -1
  52. package/internal/core/jsonrpc/types/input/callRequest.js.map +1 -1
  53. package/internal/core/jsonrpc/types/input/filterRequest.d.ts +6 -7
  54. package/internal/core/jsonrpc/types/input/filterRequest.d.ts.map +1 -1
  55. package/internal/core/jsonrpc/types/input/filterRequest.js.map +1 -1
  56. package/internal/core/jsonrpc/types/input/transactionRequest.d.ts +7 -8
  57. package/internal/core/jsonrpc/types/input/transactionRequest.d.ts.map +1 -1
  58. package/internal/core/jsonrpc/types/input/transactionRequest.js.map +1 -1
  59. package/internal/core/jsonrpc/types/output/block.d.ts +29 -30
  60. package/internal/core/jsonrpc/types/output/block.d.ts.map +1 -1
  61. package/internal/core/jsonrpc/types/output/block.js +8 -2
  62. package/internal/core/jsonrpc/types/output/block.js.map +1 -1
  63. package/internal/core/jsonrpc/types/output/log.d.ts +3 -4
  64. package/internal/core/jsonrpc/types/output/log.d.ts.map +1 -1
  65. package/internal/core/jsonrpc/types/output/log.js.map +1 -1
  66. package/internal/core/jsonrpc/types/output/receipt.d.ts +10 -11
  67. package/internal/core/jsonrpc/types/output/receipt.d.ts.map +1 -1
  68. package/internal/core/jsonrpc/types/output/receipt.js.map +1 -1
  69. package/internal/core/jsonrpc/types/output/transaction.d.ts +13 -14
  70. package/internal/core/jsonrpc/types/output/transaction.d.ts.map +1 -1
  71. package/internal/core/jsonrpc/types/output/transaction.js.map +1 -1
  72. package/internal/core/providers/accounts.d.ts.map +1 -1
  73. package/internal/core/providers/accounts.js +30 -24
  74. package/internal/core/providers/accounts.js.map +1 -1
  75. package/internal/core/providers/chainId.js +1 -1
  76. package/internal/core/providers/chainId.js.map +1 -1
  77. package/internal/core/providers/construction.d.ts.map +1 -1
  78. package/internal/core/providers/construction.js +5 -5
  79. package/internal/core/providers/construction.js.map +1 -1
  80. package/internal/core/providers/gas-providers.d.ts +4 -4
  81. package/internal/core/providers/gas-providers.d.ts.map +1 -1
  82. package/internal/core/providers/gas-providers.js +16 -15
  83. package/internal/core/providers/gas-providers.js.map +1 -1
  84. package/internal/core/providers/http.js +7 -2
  85. package/internal/core/providers/http.js.map +1 -1
  86. package/internal/core/providers/util.js +5 -8
  87. package/internal/core/providers/util.js.map +1 -1
  88. package/internal/core/runtime-environment.js +1 -1
  89. package/internal/core/runtime-environment.js.map +1 -1
  90. package/internal/core/task-profiling.d.ts +18 -0
  91. package/internal/core/task-profiling.d.ts.map +1 -0
  92. package/internal/core/task-profiling.js +50 -0
  93. package/internal/core/task-profiling.js.map +1 -0
  94. package/internal/core/typescript-support.js +3 -3
  95. package/internal/core/typescript-support.js.map +1 -1
  96. package/internal/hardhat-network/jsonrpc/client.d.ts +39 -39
  97. package/internal/hardhat-network/jsonrpc/client.d.ts.map +1 -1
  98. package/internal/hardhat-network/jsonrpc/client.js +14 -14
  99. package/internal/hardhat-network/jsonrpc/client.js.map +1 -1
  100. package/internal/hardhat-network/provider/BlockchainBase.d.ts +13 -10
  101. package/internal/hardhat-network/provider/BlockchainBase.d.ts.map +1 -1
  102. package/internal/hardhat-network/provider/BlockchainBase.js +38 -16
  103. package/internal/hardhat-network/provider/BlockchainBase.js.map +1 -1
  104. package/internal/hardhat-network/provider/BlockchainData.d.ts +15 -16
  105. package/internal/hardhat-network/provider/BlockchainData.d.ts.map +1 -1
  106. package/internal/hardhat-network/provider/BlockchainData.js +33 -29
  107. package/internal/hardhat-network/provider/BlockchainData.js.map +1 -1
  108. package/internal/hardhat-network/provider/HardhatBlockchain.d.ts +7 -8
  109. package/internal/hardhat-network/provider/HardhatBlockchain.d.ts.map +1 -1
  110. package/internal/hardhat-network/provider/HardhatBlockchain.js +13 -14
  111. package/internal/hardhat-network/provider/HardhatBlockchain.js.map +1 -1
  112. package/internal/hardhat-network/provider/PoolState.d.ts +1 -1
  113. package/internal/hardhat-network/provider/PoolState.d.ts.map +1 -1
  114. package/internal/hardhat-network/provider/PoolState.js +2 -3
  115. package/internal/hardhat-network/provider/PoolState.js.map +1 -1
  116. package/internal/hardhat-network/provider/TransactionQueue.d.ts +2 -3
  117. package/internal/hardhat-network/provider/TransactionQueue.d.ts.map +1 -1
  118. package/internal/hardhat-network/provider/TransactionQueue.js +3 -3
  119. package/internal/hardhat-network/provider/TransactionQueue.js.map +1 -1
  120. package/internal/hardhat-network/provider/TxPool.d.ts +8 -8
  121. package/internal/hardhat-network/provider/TxPool.d.ts.map +1 -1
  122. package/internal/hardhat-network/provider/TxPool.js +66 -68
  123. package/internal/hardhat-network/provider/TxPool.js.map +1 -1
  124. package/internal/hardhat-network/provider/ethereumjs-workarounds.js +2 -2
  125. package/internal/hardhat-network/provider/ethereumjs-workarounds.js.map +1 -1
  126. package/internal/hardhat-network/provider/filter.d.ts +5 -6
  127. package/internal/hardhat-network/provider/filter.d.ts.map +1 -1
  128. package/internal/hardhat-network/provider/filter.js +7 -8
  129. package/internal/hardhat-network/provider/filter.js.map +1 -1
  130. package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts +10 -11
  131. package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts.map +1 -1
  132. package/internal/hardhat-network/provider/fork/ForkBlockchain.js +51 -47
  133. package/internal/hardhat-network/provider/fork/ForkBlockchain.js.map +1 -1
  134. package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts +8 -10
  135. package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts.map +1 -1
  136. package/internal/hardhat-network/provider/fork/ForkStateManager.js +51 -69
  137. package/internal/hardhat-network/provider/fork/ForkStateManager.js.map +1 -1
  138. package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts +1 -1
  139. package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts.map +1 -1
  140. package/internal/hardhat-network/provider/fork/rpcToBlockData.js +2 -3
  141. package/internal/hardhat-network/provider/fork/rpcToBlockData.js.map +1 -1
  142. package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts +2 -2
  143. package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts.map +1 -1
  144. package/internal/hardhat-network/provider/fork/rpcToTxData.js +7 -11
  145. package/internal/hardhat-network/provider/fork/rpcToTxData.js.map +1 -1
  146. package/internal/hardhat-network/provider/modules/eth.d.ts +2 -1
  147. package/internal/hardhat-network/provider/modules/eth.d.ts.map +1 -1
  148. package/internal/hardhat-network/provider/modules/eth.js +92 -68
  149. package/internal/hardhat-network/provider/modules/eth.js.map +1 -1
  150. package/internal/hardhat-network/provider/modules/evm.d.ts.map +1 -1
  151. package/internal/hardhat-network/provider/modules/evm.js +14 -14
  152. package/internal/hardhat-network/provider/modules/evm.js.map +1 -1
  153. package/internal/hardhat-network/provider/modules/hardhat.d.ts.map +1 -1
  154. package/internal/hardhat-network/provider/modules/hardhat.js +13 -13
  155. package/internal/hardhat-network/provider/modules/hardhat.js.map +1 -1
  156. package/internal/hardhat-network/provider/modules/logger.d.ts +7 -8
  157. package/internal/hardhat-network/provider/modules/logger.d.ts.map +1 -1
  158. package/internal/hardhat-network/provider/modules/logger.js +29 -32
  159. package/internal/hardhat-network/provider/modules/logger.js.map +1 -1
  160. package/internal/hardhat-network/provider/modules/net.d.ts +1 -1
  161. package/internal/hardhat-network/provider/modules/net.d.ts.map +1 -1
  162. package/internal/hardhat-network/provider/modules/personal.d.ts.map +1 -1
  163. package/internal/hardhat-network/provider/modules/personal.js +3 -3
  164. package/internal/hardhat-network/provider/modules/personal.js.map +1 -1
  165. package/internal/hardhat-network/provider/modules/web3.d.ts.map +1 -1
  166. package/internal/hardhat-network/provider/modules/web3.js +5 -4
  167. package/internal/hardhat-network/provider/modules/web3.js.map +1 -1
  168. package/internal/hardhat-network/provider/node-types.d.ts +30 -29
  169. package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
  170. package/internal/hardhat-network/provider/node.d.ts +47 -42
  171. package/internal/hardhat-network/provider/node.d.ts.map +1 -1
  172. package/internal/hardhat-network/provider/node.js +262 -208
  173. package/internal/hardhat-network/provider/node.js.map +1 -1
  174. package/internal/hardhat-network/provider/output.d.ts +5 -6
  175. package/internal/hardhat-network/provider/output.d.ts.map +1 -1
  176. package/internal/hardhat-network/provider/output.js +39 -36
  177. package/internal/hardhat-network/provider/output.js.map +1 -1
  178. package/internal/hardhat-network/provider/provider.d.ts +1 -2
  179. package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
  180. package/internal/hardhat-network/provider/provider.js.map +1 -1
  181. package/internal/hardhat-network/provider/return-data.d.ts +2 -2
  182. package/internal/hardhat-network/provider/return-data.d.ts.map +1 -1
  183. package/internal/hardhat-network/provider/return-data.js +4 -1
  184. package/internal/hardhat-network/provider/return-data.js.map +1 -1
  185. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts +5 -5
  186. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts.map +1 -1
  187. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js +60 -17
  188. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
  189. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts +4 -4
  190. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts.map +1 -1
  191. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js +59 -16
  192. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
  193. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts +3 -3
  194. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts.map +1 -1
  195. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js +41 -9
  196. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
  197. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts +4 -4
  198. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts.map +1 -1
  199. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js +7 -23
  200. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js.map +1 -1
  201. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts +3 -3
  202. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts.map +1 -1
  203. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js +7 -22
  204. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js.map +1 -1
  205. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts +3 -3
  206. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts.map +1 -1
  207. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js +1 -1
  208. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js.map +1 -1
  209. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts +5 -6
  210. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts.map +1 -1
  211. package/internal/hardhat-network/provider/utils/fork-recomendations-banner.js +2 -3
  212. package/internal/hardhat-network/provider/utils/fork-recomendations-banner.js.map +1 -1
  213. package/internal/hardhat-network/provider/utils/getCurrentTimestamp.d.ts +1 -0
  214. package/internal/hardhat-network/provider/utils/getCurrentTimestamp.d.ts.map +1 -1
  215. package/internal/hardhat-network/provider/utils/getCurrentTimestamp.js +5 -1
  216. package/internal/hardhat-network/provider/utils/getCurrentTimestamp.js.map +1 -1
  217. package/internal/hardhat-network/provider/utils/makeAccount.d.ts +1 -1
  218. package/internal/hardhat-network/provider/utils/makeAccount.d.ts.map +1 -1
  219. package/internal/hardhat-network/provider/utils/makeAccount.js +6 -6
  220. package/internal/hardhat-network/provider/utils/makeAccount.js.map +1 -1
  221. package/internal/hardhat-network/provider/utils/makeCommon.d.ts +2 -2
  222. package/internal/hardhat-network/provider/utils/makeCommon.d.ts.map +1 -1
  223. package/internal/hardhat-network/provider/utils/makeCommon.js +7 -23
  224. package/internal/hardhat-network/provider/utils/makeCommon.js.map +1 -1
  225. package/internal/hardhat-network/provider/utils/makeForkClient.d.ts +1 -2
  226. package/internal/hardhat-network/provider/utils/makeForkClient.d.ts.map +1 -1
  227. package/internal/hardhat-network/provider/utils/makeForkClient.js +7 -8
  228. package/internal/hardhat-network/provider/utils/makeForkClient.js.map +1 -1
  229. package/internal/hardhat-network/provider/utils/makeStateTrie.d.ts +1 -1
  230. package/internal/hardhat-network/provider/utils/makeStateTrie.d.ts.map +1 -1
  231. package/internal/hardhat-network/provider/utils/makeStateTrie.js +4 -4
  232. package/internal/hardhat-network/provider/utils/makeStateTrie.js.map +1 -1
  233. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts +6 -3
  234. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts.map +1 -1
  235. package/internal/hardhat-network/provider/utils/putGenesisBlock.js +22 -4
  236. package/internal/hardhat-network/provider/utils/putGenesisBlock.js.map +1 -1
  237. package/internal/hardhat-network/provider/utils/random.d.ts +15 -0
  238. package/internal/hardhat-network/provider/utils/random.d.ts.map +1 -0
  239. package/internal/hardhat-network/provider/utils/random.js +48 -0
  240. package/internal/hardhat-network/provider/utils/random.js.map +1 -0
  241. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.d.ts +1 -2
  242. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.d.ts.map +1 -1
  243. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.js +5 -4
  244. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.js.map +1 -1
  245. package/internal/hardhat-network/provider/utils/reorgs-protection.d.ts +2 -2
  246. package/internal/hardhat-network/provider/utils/reorgs-protection.d.ts.map +1 -1
  247. package/internal/hardhat-network/provider/utils/reorgs-protection.js +7 -7
  248. package/internal/hardhat-network/provider/utils/reorgs-protection.js.map +1 -1
  249. package/internal/hardhat-network/provider/utils/txMapToArray.d.ts +1 -1
  250. package/internal/hardhat-network/provider/utils/txMapToArray.d.ts.map +1 -1
  251. package/internal/hardhat-network/stack-traces/compiler-to-model.js +6 -8
  252. package/internal/hardhat-network/stack-traces/compiler-to-model.js.map +1 -1
  253. package/internal/hardhat-network/stack-traces/consoleLogger.d.ts.map +1 -1
  254. package/internal/hardhat-network/stack-traces/consoleLogger.js +51 -47
  255. package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
  256. package/internal/hardhat-network/stack-traces/constants.d.ts +3 -0
  257. package/internal/hardhat-network/stack-traces/constants.d.ts.map +1 -0
  258. package/internal/hardhat-network/stack-traces/constants.js +6 -0
  259. package/internal/hardhat-network/stack-traces/constants.js.map +1 -0
  260. package/internal/hardhat-network/stack-traces/contracts-identifier.js +2 -2
  261. package/internal/hardhat-network/stack-traces/contracts-identifier.js.map +1 -1
  262. package/internal/hardhat-network/stack-traces/debug.js +29 -19
  263. package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
  264. package/internal/hardhat-network/stack-traces/error-inferrer.d.ts.map +1 -1
  265. package/internal/hardhat-network/stack-traces/error-inferrer.js +48 -26
  266. package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
  267. package/internal/hardhat-network/stack-traces/logger.d.ts +223 -2
  268. package/internal/hardhat-network/stack-traces/logger.d.ts.map +1 -1
  269. package/internal/hardhat-network/stack-traces/logger.js +445 -224
  270. package/internal/hardhat-network/stack-traces/logger.js.map +1 -1
  271. package/internal/hardhat-network/stack-traces/message-trace.d.ts +6 -7
  272. package/internal/hardhat-network/stack-traces/message-trace.d.ts.map +1 -1
  273. package/internal/hardhat-network/stack-traces/message-trace.js.map +1 -1
  274. package/internal/hardhat-network/stack-traces/model.js +6 -6
  275. package/internal/hardhat-network/stack-traces/model.js.map +1 -1
  276. package/internal/hardhat-network/stack-traces/panic-errors.d.ts +1 -2
  277. package/internal/hardhat-network/stack-traces/panic-errors.d.ts.map +1 -1
  278. package/internal/hardhat-network/stack-traces/panic-errors.js +1 -1
  279. package/internal/hardhat-network/stack-traces/panic-errors.js.map +1 -1
  280. package/internal/hardhat-network/stack-traces/solidity-errors.d.ts.map +1 -1
  281. package/internal/hardhat-network/stack-traces/solidity-errors.js +21 -12
  282. package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
  283. package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts +6 -5
  284. package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts.map +1 -1
  285. package/internal/hardhat-network/stack-traces/solidity-stack-trace.js.map +1 -1
  286. package/internal/hardhat-network/stack-traces/solidityTracer.d.ts +1 -1
  287. package/internal/hardhat-network/stack-traces/solidityTracer.d.ts.map +1 -1
  288. package/internal/hardhat-network/stack-traces/solidityTracer.js +5 -1
  289. package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
  290. package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts +2 -1
  291. package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts.map +1 -1
  292. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js +79 -78
  293. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -1
  294. package/internal/hardhat-network/stack-traces/vm-trace-decoder.js +5 -1
  295. package/internal/hardhat-network/stack-traces/vm-trace-decoder.js.map +1 -1
  296. package/internal/hardhat-network/stack-traces/vm-tracer.d.ts +3 -2
  297. package/internal/hardhat-network/stack-traces/vm-tracer.d.ts.map +1 -1
  298. package/internal/hardhat-network/stack-traces/vm-tracer.js +15 -16
  299. package/internal/hardhat-network/stack-traces/vm-tracer.js.map +1 -1
  300. package/internal/reset.js +1 -1
  301. package/internal/reset.js.map +1 -1
  302. package/internal/sentry/anonymizer.js +2 -3
  303. package/internal/sentry/anonymizer.js.map +1 -1
  304. package/internal/sentry/subprocess.js +1 -1
  305. package/internal/sentry/subprocess.js.map +1 -1
  306. package/internal/sentry/transport.js +3 -4
  307. package/internal/sentry/transport.js.map +1 -1
  308. package/internal/solidity/compilation-job.js +2 -4
  309. package/internal/solidity/compilation-job.js.map +1 -1
  310. package/internal/solidity/compiler/downloader.d.ts.map +1 -1
  311. package/internal/solidity/compiler/downloader.js +6 -6
  312. package/internal/solidity/compiler/downloader.js.map +1 -1
  313. package/internal/solidity/dependencyGraph.js +3 -5
  314. package/internal/solidity/dependencyGraph.js.map +1 -1
  315. package/internal/solidity/parse.js +1 -1
  316. package/internal/solidity/parse.js.map +1 -1
  317. package/internal/solidity/resolver.js +4 -1
  318. package/internal/solidity/resolver.js.map +1 -1
  319. package/internal/util/abi-helpers.js +1 -1
  320. package/internal/util/abi-helpers.js.map +1 -1
  321. package/internal/util/bigint.d.ts +25 -0
  322. package/internal/util/bigint.d.ts.map +1 -0
  323. package/internal/util/bigint.js +67 -0
  324. package/internal/util/bigint.js.map +1 -0
  325. package/internal/util/download.js +1 -1
  326. package/internal/util/download.js.map +1 -1
  327. package/internal/util/fs-utils.d.ts +32 -0
  328. package/internal/util/fs-utils.d.ts.map +1 -0
  329. package/internal/util/fs-utils.js +151 -0
  330. package/internal/util/fs-utils.js.map +1 -0
  331. package/internal/util/hardforks.d.ts +3 -3
  332. package/internal/util/hardforks.d.ts.map +1 -1
  333. package/internal/util/hardforks.js +5 -28
  334. package/internal/util/hardforks.js.map +1 -1
  335. package/internal/util/jsonrpc.js +1 -1
  336. package/internal/util/jsonrpc.js.map +1 -1
  337. package/internal/util/lazy.js +2 -2
  338. package/internal/util/lazy.js.map +1 -1
  339. package/internal/util/packageInfo.js +1 -1
  340. package/internal/util/packageInfo.js.map +1 -1
  341. package/internal/util/scripts-runner.js +5 -2
  342. package/internal/util/scripts-runner.js.map +1 -1
  343. package/internal/util/wei-values.d.ts +1 -2
  344. package/internal/util/wei-values.d.ts.map +1 -1
  345. package/internal/util/wei-values.js +9 -10
  346. package/internal/util/wei-values.js.map +1 -1
  347. package/internal/vendor/await-semaphore/index.d.ts +12 -0
  348. package/internal/vendor/await-semaphore/index.d.ts.map +1 -0
  349. package/internal/vendor/await-semaphore/index.js +64 -0
  350. package/internal/vendor/await-semaphore/index.js.map +1 -0
  351. package/package.json +13 -9
  352. package/profiling.d.ts +18 -0
  353. package/profiling.d.ts.map +1 -0
  354. package/profiling.js +32 -0
  355. package/profiling.js.map +1 -0
  356. package/sample-projects/javascript/scripts/deploy.js +3 -1
  357. package/sample-projects/javascript/test/Lock.js +1 -1
  358. package/sample-projects/typescript/scripts/deploy.ts +1 -1
  359. package/sample-projects/typescript/test/Lock.ts +1 -1
  360. package/src/builtin-tasks/node.ts +4 -6
  361. package/src/internal/constants.ts +3 -1
  362. package/src/internal/core/config/config-resolution.ts +30 -7
  363. package/src/internal/core/config/default-config.ts +12 -4
  364. package/src/internal/core/jsonrpc/types/base-types.ts +23 -24
  365. package/src/internal/core/jsonrpc/types/input/blockTag.ts +2 -4
  366. package/src/internal/core/jsonrpc/types/input/callRequest.ts +0 -4
  367. package/src/internal/core/jsonrpc/types/input/filterRequest.ts +0 -4
  368. package/src/internal/core/jsonrpc/types/input/transactionRequest.ts +0 -4
  369. package/src/internal/core/jsonrpc/types/output/block.ts +0 -4
  370. package/src/internal/core/jsonrpc/types/output/log.ts +0 -4
  371. package/src/internal/core/jsonrpc/types/output/receipt.ts +0 -4
  372. package/src/internal/core/jsonrpc/types/output/transaction.ts +0 -4
  373. package/src/internal/core/providers/accounts.ts +16 -26
  374. package/src/internal/core/providers/construction.ts +5 -3
  375. package/src/internal/core/providers/gas-providers.ts +25 -33
  376. package/src/internal/core/providers/util.ts +1 -1
  377. package/src/internal/hardhat-network/jsonrpc/client.ts +22 -22
  378. package/src/internal/hardhat-network/provider/BlockchainBase.ts +62 -25
  379. package/src/internal/hardhat-network/provider/BlockchainData.ts +39 -42
  380. package/src/internal/hardhat-network/provider/HardhatBlockchain.ts +21 -21
  381. package/src/internal/hardhat-network/provider/PoolState.ts +3 -4
  382. package/src/internal/hardhat-network/provider/TransactionQueue.ts +11 -8
  383. package/src/internal/hardhat-network/provider/TxPool.ts +62 -64
  384. package/src/internal/hardhat-network/provider/ethereumjs-workarounds.ts +3 -3
  385. package/src/internal/hardhat-network/provider/filter.ts +9 -12
  386. package/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts +52 -50
  387. package/src/internal/hardhat-network/provider/fork/ForkStateManager.ts +35 -60
  388. package/src/internal/hardhat-network/provider/fork/rpcToBlockData.ts +2 -2
  389. package/src/internal/hardhat-network/provider/fork/rpcToTxData.ts +3 -3
  390. package/src/internal/hardhat-network/provider/modules/eth.ts +88 -63
  391. package/src/internal/hardhat-network/provider/modules/evm.ts +19 -22
  392. package/src/internal/hardhat-network/provider/modules/hardhat.ts +21 -19
  393. package/src/internal/hardhat-network/provider/modules/logger.ts +33 -40
  394. package/src/internal/hardhat-network/provider/modules/net.ts +1 -1
  395. package/src/internal/hardhat-network/provider/modules/personal.ts +2 -1
  396. package/src/internal/hardhat-network/provider/modules/web3.ts +5 -4
  397. package/src/internal/hardhat-network/provider/node-types.ts +32 -31
  398. package/src/internal/hardhat-network/provider/node.ts +379 -343
  399. package/src/internal/hardhat-network/provider/output.ts +32 -37
  400. package/src/internal/hardhat-network/provider/provider.ts +5 -6
  401. package/src/internal/hardhat-network/provider/return-data.ts +6 -3
  402. package/src/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.ts +51 -24
  403. package/src/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.ts +50 -23
  404. package/src/internal/hardhat-network/provider/transactions/FakeSenderTransaction.ts +29 -11
  405. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts +12 -24
  406. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.ts +11 -22
  407. package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.ts +3 -3
  408. package/src/internal/hardhat-network/provider/types/HardhatBlockchainInterface.ts +8 -9
  409. package/src/internal/hardhat-network/provider/utils/getCurrentTimestamp.ts +4 -0
  410. package/src/internal/hardhat-network/provider/utils/makeAccount.ts +4 -10
  411. package/src/internal/hardhat-network/provider/utils/makeCommon.ts +8 -34
  412. package/src/internal/hardhat-network/provider/utils/makeForkClient.ts +8 -9
  413. package/src/internal/hardhat-network/provider/utils/makeStateTrie.ts +3 -3
  414. package/src/internal/hardhat-network/provider/utils/putGenesisBlock.ts +34 -6
  415. package/src/internal/hardhat-network/provider/utils/random.ts +54 -0
  416. package/src/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.ts +6 -7
  417. package/src/internal/hardhat-network/provider/utils/reorgs-protection.ts +8 -8
  418. package/src/internal/hardhat-network/stack-traces/consoleLogger.ts +16 -6
  419. package/src/internal/hardhat-network/stack-traces/contracts-identifier.ts +1 -1
  420. package/src/internal/hardhat-network/stack-traces/debug.ts +1 -1
  421. package/src/internal/hardhat-network/stack-traces/error-inferrer.ts +11 -7
  422. package/src/internal/hardhat-network/stack-traces/logger.ts +444 -223
  423. package/src/internal/hardhat-network/stack-traces/message-trace.ts +6 -7
  424. package/src/internal/hardhat-network/stack-traces/model.ts +1 -1
  425. package/src/internal/hardhat-network/stack-traces/panic-errors.ts +3 -5
  426. package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +16 -1
  427. package/src/internal/hardhat-network/stack-traces/solidity-stack-trace.ts +6 -6
  428. package/src/internal/hardhat-network/stack-traces/solidityTracer.ts +6 -1
  429. package/src/internal/hardhat-network/stack-traces/vm-debug-tracer.ts +106 -103
  430. package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +23 -18
  431. package/src/internal/solidity/compiler/downloader.ts +5 -2
  432. package/src/internal/util/bigint.ts +84 -0
  433. package/src/internal/util/hardforks.ts +4 -29
  434. package/src/internal/util/wei-values.ts +11 -13
  435. package/src/types/config.ts +8 -10
  436. package/types/config.d.ts +8 -9
  437. package/types/config.d.ts.map +1 -1
  438. package/src/internal/hardhat-network/provider/fork/random.ts +0 -33
  439. package/src/internal/hardhat-network/provider/utils/bnToHex.ts +0 -5
  440. package/src/internal/hardhat-network/provider/utils/makeForkCommon.ts +0 -15
@@ -1,9 +1,8 @@
1
- import { BN } from "ethereumjs-util";
2
1
  import { EIP1193Provider, RequestArguments } from "../../../types";
3
2
  import {
4
3
  numberToRpcQuantity,
5
4
  rpcQuantityToNumber,
6
- rpcQuantityToBN,
5
+ rpcQuantityToBigInt,
7
6
  } from "../jsonrpc/types/base-types";
8
7
 
9
8
  import { ProviderWrapper } from "./wrapper";
@@ -11,7 +10,7 @@ import { ProviderWrapper } from "./wrapper";
11
10
  const DEFAULT_GAS_MULTIPLIER = 1;
12
11
 
13
12
  export class FixedGasProvider extends ProviderWrapper {
14
- constructor(provider: EIP1193Provider, private readonly _gasLimit: number) {
13
+ constructor(provider: EIP1193Provider, private readonly _gasLimit: bigint) {
15
14
  super(provider);
16
15
  }
17
16
 
@@ -31,7 +30,7 @@ export class FixedGasProvider extends ProviderWrapper {
31
30
  }
32
31
 
33
32
  export class FixedGasPriceProvider extends ProviderWrapper {
34
- constructor(provider: EIP1193Provider, private readonly _gasPrice: number) {
33
+ constructor(provider: EIP1193Provider, private readonly _gasPrice: bigint) {
35
34
  super(provider);
36
35
  }
37
36
 
@@ -140,10 +139,11 @@ export class AutomaticGasProvider extends MultipliedGasEstimationProvider {
140
139
  export class AutomaticGasPriceProvider extends ProviderWrapper {
141
140
  // We pay the max base fee that can be required if the next
142
141
  // EIP1559_BASE_FEE_MAX_FULL_BLOCKS_PREFERENCE are full.
143
- public static readonly EIP1559_BASE_FEE_MAX_FULL_BLOCKS_PREFERENCE: number = 3;
142
+ public static readonly EIP1559_BASE_FEE_MAX_FULL_BLOCKS_PREFERENCE: bigint =
143
+ 3n;
144
144
 
145
145
  // See eth_feeHistory for an explanation of what this means
146
- public static readonly EIP1559_REWARD_PERCENTILE: number = 50;
146
+ public static readonly EIP1559_REWARD_PERCENTILE: bigint = 50n;
147
147
 
148
148
  private _nodeHasFeeHistory?: boolean;
149
149
  private _nodeSupportsEIP1559?: boolean;
@@ -195,16 +195,16 @@ export class AutomaticGasPriceProvider extends ProviderWrapper {
195
195
 
196
196
  let maxFeePerGas =
197
197
  tx.maxFeePerGas !== undefined
198
- ? rpcQuantityToBN(tx.maxFeePerGas)
198
+ ? rpcQuantityToBigInt(tx.maxFeePerGas)
199
199
  : suggestedEip1559Values.maxFeePerGas;
200
200
 
201
201
  const maxPriorityFeePerGas =
202
202
  tx.maxPriorityFeePerGas !== undefined
203
- ? rpcQuantityToBN(tx.maxPriorityFeePerGas)
203
+ ? rpcQuantityToBigInt(tx.maxPriorityFeePerGas)
204
204
  : suggestedEip1559Values.maxPriorityFeePerGas;
205
205
 
206
- if (maxFeePerGas.lt(maxPriorityFeePerGas)) {
207
- maxFeePerGas = maxFeePerGas.add(maxPriorityFeePerGas);
206
+ if (maxFeePerGas < maxPriorityFeePerGas) {
207
+ maxFeePerGas += maxPriorityFeePerGas;
208
208
  }
209
209
 
210
210
  tx.maxFeePerGas = numberToRpcQuantity(maxFeePerGas);
@@ -213,18 +213,18 @@ export class AutomaticGasPriceProvider extends ProviderWrapper {
213
213
  return this._wrappedProvider.request(args);
214
214
  }
215
215
 
216
- private async _getGasPrice(): Promise<BN> {
216
+ private async _getGasPrice(): Promise<bigint> {
217
217
  const response = (await this._wrappedProvider.request({
218
218
  method: "eth_gasPrice",
219
219
  })) as string;
220
220
 
221
- return rpcQuantityToBN(response);
221
+ return rpcQuantityToBigInt(response);
222
222
  }
223
223
 
224
224
  private async _suggestEip1559FeePriceValues(): Promise<
225
225
  | {
226
- maxFeePerGas: BN;
227
- maxPriorityFeePerGas: BN;
226
+ maxFeePerGas: bigint;
227
+ maxPriorityFeePerGas: bigint;
228
228
  }
229
229
  | undefined
230
230
  > {
@@ -258,25 +258,17 @@ export class AutomaticGasPriceProvider extends ProviderWrapper {
258
258
  // Each block increases the base fee by 1/8 at most, when full.
259
259
  // We have the next block's base fee, so we compute a cap for the
260
260
  // next N blocks here.
261
- maxFeePerGas: rpcQuantityToBN(response.baseFeePerGas[1])
262
- .mul(
263
- new BN(9).pow(
264
- new BN(
265
- AutomaticGasPriceProvider.EIP1559_BASE_FEE_MAX_FULL_BLOCKS_PREFERENCE -
266
- 1
267
- )
268
- )
269
- )
270
- .div(
271
- new BN(8).pow(
272
- new BN(
273
- AutomaticGasPriceProvider.EIP1559_BASE_FEE_MAX_FULL_BLOCKS_PREFERENCE -
274
- 1
275
- )
276
- )
277
- ),
278
-
279
- maxPriorityFeePerGas: rpcQuantityToBN(response.reward[0][0]),
261
+
262
+ maxFeePerGas:
263
+ (rpcQuantityToBigInt(response.baseFeePerGas[1]) *
264
+ 9n **
265
+ (AutomaticGasPriceProvider.EIP1559_BASE_FEE_MAX_FULL_BLOCKS_PREFERENCE -
266
+ 1n)) /
267
+ 8n **
268
+ (AutomaticGasPriceProvider.EIP1559_BASE_FEE_MAX_FULL_BLOCKS_PREFERENCE -
269
+ 1n),
270
+
271
+ maxPriorityFeePerGas: rpcQuantityToBigInt(response.reward[0][0]),
280
272
  };
281
273
  } catch {
282
274
  this._nodeHasFeeHistory = false;
@@ -53,7 +53,7 @@ export function normalizeHardhatNetworkAccountsConfig(
53
53
  return accountsConfig;
54
54
  }
55
55
 
56
- const { bufferToHex } = require("ethereumjs-util");
56
+ const { bufferToHex } = require("@ignored/util");
57
57
 
58
58
  return derivePrivateKeys(
59
59
  accountsConfig.mnemonic,
@@ -1,4 +1,4 @@
1
- import { Address, BN, bufferToHex } from "ethereumjs-util";
1
+ import { Address, bufferToHex } from "@ignored/util";
2
2
  import fsExtra from "fs-extra";
3
3
  import * as t from "io-ts";
4
4
  import path from "path";
@@ -29,8 +29,8 @@ export class JsonRpcClient {
29
29
  constructor(
30
30
  private _httpProvider: HttpProvider,
31
31
  private _networkId: number,
32
- private _latestBlockNumberOnCreation: number,
33
- private _maxReorg: number,
32
+ private _latestBlockNumberOnCreation: bigint,
33
+ private _maxReorg: bigint,
34
34
  private _forkCachePath?: string
35
35
  ) {}
36
36
 
@@ -50,8 +50,8 @@ export class JsonRpcClient {
50
50
  // Storage key must be 32 bytes long
51
51
  public async getStorageAt(
52
52
  address: Address,
53
- position: BN,
54
- blockNumber: BN
53
+ position: bigint,
54
+ blockNumber: bigint
55
55
  ): Promise<Buffer> {
56
56
  return this._perform(
57
57
  "eth_getStorageAt",
@@ -66,17 +66,17 @@ export class JsonRpcClient {
66
66
  }
67
67
 
68
68
  public async getBlockByNumber(
69
- blockNumber: BN,
69
+ blockNumber: bigint,
70
70
  includeTransactions?: false
71
71
  ): Promise<RpcBlock | null>;
72
72
 
73
73
  public async getBlockByNumber(
74
- blockNumber: BN,
74
+ blockNumber: bigint,
75
75
  includeTransactions: true
76
76
  ): Promise<RpcBlockWithTransactions | null>;
77
77
 
78
78
  public async getBlockByNumber(
79
- blockNumber: BN,
79
+ blockNumber: bigint,
80
80
  includeTransactions = false
81
81
  ): Promise<RpcBlock | RpcBlockWithTransactions | null> {
82
82
  if (includeTransactions) {
@@ -136,7 +136,7 @@ export class JsonRpcClient {
136
136
  );
137
137
  }
138
138
 
139
- public async getTransactionCount(address: Buffer, blockNumber: BN) {
139
+ public async getTransactionCount(address: Buffer, blockNumber: bigint) {
140
140
  return this._perform(
141
141
  "eth_getTransactionCount",
142
142
  [bufferToHex(address), numberToRpcQuantity(blockNumber)],
@@ -155,8 +155,8 @@ export class JsonRpcClient {
155
155
  }
156
156
 
157
157
  public async getLogs(options: {
158
- fromBlock: BN;
159
- toBlock: BN;
158
+ fromBlock: bigint;
159
+ toBlock: bigint;
160
160
  address?: Buffer | Buffer[];
161
161
  topics?: Array<Array<Buffer | null> | null>;
162
162
  }) {
@@ -192,8 +192,8 @@ export class JsonRpcClient {
192
192
 
193
193
  public async getAccountData(
194
194
  address: Address,
195
- blockNumber: BN
196
- ): Promise<{ code: Buffer; transactionCount: BN; balance: BN }> {
195
+ blockNumber: bigint
196
+ ): Promise<{ code: Buffer; transactionCount: bigint; balance: bigint }> {
197
197
  const results = await this._performBatch(
198
198
  [
199
199
  {
@@ -225,8 +225,8 @@ export class JsonRpcClient {
225
225
  // This is part of a temporary fix to https://github.com/NomicFoundation/hardhat/issues/2380
226
226
  // This method caches each request instead of caching each block's fee info individually, which is not ideal
227
227
  public async getFeeHistory(
228
- blockCount: BN,
229
- newestBlock: BN | "pending",
228
+ blockCount: bigint,
229
+ newestBlock: bigint | "pending",
230
230
  rewardPercentiles: number[]
231
231
  ): Promise<FeeHistory> {
232
232
  return this._perform(
@@ -244,11 +244,11 @@ export class JsonRpcClient {
244
244
  gasUsedRatio: t.array(t.number),
245
245
  reward: optional(t.array(t.array(rpcQuantity))),
246
246
  }),
247
- (res) => res.oldestBlock.addn(res.baseFeePerGas.length)
247
+ (res) => res.oldestBlock + BigInt(res.baseFeePerGas.length)
248
248
  );
249
249
  }
250
250
 
251
- public async getLatestBlockNumber(): Promise<BN> {
251
+ public async getLatestBlockNumber(): Promise<bigint> {
252
252
  return this._perform(
253
253
  "eth_blockNumber",
254
254
  [],
@@ -261,7 +261,7 @@ export class JsonRpcClient {
261
261
  method: string,
262
262
  params: any[],
263
263
  tType: t.Type<T>,
264
- getMaxAffectedBlockNumber: (decodedResult: T) => BN | undefined
264
+ getMaxAffectedBlockNumber: (decodedResult: T) => bigint | undefined
265
265
  ): Promise<T> {
266
266
  const cacheKey = this._getCacheKey(method, params);
267
267
 
@@ -303,7 +303,7 @@ export class JsonRpcClient {
303
303
  params: any[];
304
304
  tType: t.Type<any>;
305
305
  }>,
306
- getMaxAffectedBlockNumber: (decodedResults: any[]) => BN | undefined
306
+ getMaxAffectedBlockNumber: (decodedResults: any[]) => bigint | undefined
307
307
  ): Promise<any[]> {
308
308
  // Perform Batch caches the entire batch at once.
309
309
  // It could implement something more clever, like caching per request
@@ -496,15 +496,15 @@ export class JsonRpcClient {
496
496
  );
497
497
  }
498
498
 
499
- private _canBeCached(blockNumber: BN | undefined) {
499
+ private _canBeCached(blockNumber: bigint | undefined) {
500
500
  if (blockNumber === undefined) {
501
501
  return false;
502
502
  }
503
503
 
504
- return !this._canBeReorgedOut(blockNumber.toNumber());
504
+ return !this._canBeReorgedOut(blockNumber);
505
505
  }
506
506
 
507
- private _canBeReorgedOut(blockNumber: number) {
507
+ private _canBeReorgedOut(blockNumber: bigint) {
508
508
  const maxSafeBlockNumber =
509
509
  this._latestBlockNumberOnCreation - this._maxReorg;
510
510
  return blockNumber > maxSafeBlockNumber;
@@ -1,19 +1,44 @@
1
- import { Block } from "@ethereumjs/block";
2
- import Common from "@ethereumjs/common";
3
- import { TypedTransaction } from "@ethereumjs/tx";
4
- import { BN } from "ethereumjs-util";
1
+ import { Block, BlockHeader } from "@ignored/block";
2
+ import {
3
+ BlockchainInterface,
4
+ CasperConsensus,
5
+ CliqueConsensus,
6
+ Consensus,
7
+ EthashConsensus,
8
+ } from "@ignored/blockchain";
9
+ import { Common, ConsensusAlgorithm } from "@ignored/common";
10
+ import { TypedTransaction } from "@ignored/tx";
5
11
 
6
12
  import { assertHardhatInvariant } from "../../core/errors";
13
+ import { BigIntUtils } from "../../util/bigint";
7
14
  import { BlockchainData } from "./BlockchainData";
8
15
  import { RpcReceiptOutput } from "./output";
9
16
 
10
17
  /* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */
11
18
 
12
19
  export abstract class BlockchainBase {
20
+ public consensus: Consensus;
13
21
  protected readonly _data: BlockchainData;
14
22
 
15
23
  constructor(protected _common: Common) {
16
24
  this._data = new BlockchainData(_common);
25
+
26
+ // copied from blockchain.ts in @ignored/blockchain
27
+ switch (this._common.consensusAlgorithm()) {
28
+ case ConsensusAlgorithm.Casper:
29
+ this.consensus = new CasperConsensus();
30
+ break;
31
+ case ConsensusAlgorithm.Clique:
32
+ this.consensus = new CliqueConsensus();
33
+ break;
34
+ case ConsensusAlgorithm.Ethash:
35
+ this.consensus = new EthashConsensus();
36
+ break;
37
+ default:
38
+ throw new Error(
39
+ `consensus algorithm ${this._common.consensusAlgorithm()} not supported`
40
+ );
41
+ }
17
42
  }
18
43
 
19
44
  public abstract addBlock(block: Block): Promise<Block>;
@@ -37,25 +62,26 @@ export abstract class BlockchainBase {
37
62
  }
38
63
 
39
64
  public async getBlock(
40
- blockHashOrNumber: Buffer | BN | number
65
+ blockHashOrNumber: Buffer | bigint | number
41
66
  ): Promise<Block | null> {
42
67
  if (
43
- (typeof blockHashOrNumber === "number" || BN.isBN(blockHashOrNumber)) &&
44
- this._data.isReservedBlock(new BN(blockHashOrNumber))
68
+ (typeof blockHashOrNumber === "number" ||
69
+ BigIntUtils.isBigInt(blockHashOrNumber)) &&
70
+ this._data.isReservedBlock(BigInt(blockHashOrNumber))
45
71
  ) {
46
- this._data.fulfillBlockReservation(new BN(blockHashOrNumber));
72
+ this._data.fulfillBlockReservation(BigInt(blockHashOrNumber));
47
73
  }
48
74
 
49
75
  if (typeof blockHashOrNumber === "number") {
50
- return this._data.getBlockByNumber(new BN(blockHashOrNumber)) ?? null;
76
+ return this._data.getBlockByNumber(BigInt(blockHashOrNumber)) ?? null;
51
77
  }
52
- if (BN.isBN(blockHashOrNumber)) {
78
+ if (BigIntUtils.isBigInt(blockHashOrNumber)) {
53
79
  return this._data.getBlockByNumber(blockHashOrNumber) ?? null;
54
80
  }
55
81
  return this._data.getBlockByHash(blockHashOrNumber) ?? null;
56
82
  }
57
83
 
58
- public abstract getLatestBlockNumber(): BN;
84
+ public abstract getLatestBlockNumber(): bigint;
59
85
 
60
86
  public async getLatestBlock(): Promise<Block> {
61
87
  const block = await this.getBlock(this.getLatestBlockNumber());
@@ -74,7 +100,7 @@ export abstract class BlockchainBase {
74
100
  public iterator(
75
101
  _name: string,
76
102
  _onBlock: (block: Block, reorg: boolean) => void | Promise<void>
77
- ): Promise<number | void> {
103
+ ): Promise<number> {
78
104
  throw new Error("Method not implemented.");
79
105
  }
80
106
 
@@ -83,14 +109,14 @@ export abstract class BlockchainBase {
83
109
  }
84
110
 
85
111
  public reserveBlocks(
86
- count: BN,
87
- interval: BN,
112
+ count: bigint,
113
+ interval: bigint,
88
114
  previousBlockStateRoot: Buffer,
89
- previousBlockTotalDifficulty: BN,
90
- previousBlockBaseFeePerGas: BN | undefined
115
+ previousBlockTotalDifficulty: bigint,
116
+ previousBlockBaseFeePerGas: bigint | undefined
91
117
  ) {
92
118
  this._data.reserveBlocks(
93
- this.getLatestBlockNumber().addn(1),
119
+ this.getLatestBlockNumber() + 1n,
94
120
  count,
95
121
  interval,
96
122
  previousBlockStateRoot,
@@ -99,32 +125,43 @@ export abstract class BlockchainBase {
99
125
  );
100
126
  }
101
127
 
102
- protected _delBlock(blockNumber: BN): void {
128
+ public copy(): BlockchainInterface {
129
+ throw new Error("Method not implemented.");
130
+ }
131
+
132
+ public validateHeader(
133
+ _header: BlockHeader,
134
+ _height?: bigint | undefined
135
+ ): Promise<void> {
136
+ throw new Error("Method not implemented.");
137
+ }
138
+
139
+ protected _delBlock(blockNumber: bigint): void {
103
140
  let i = blockNumber;
104
141
 
105
- while (i.lte(this.getLatestBlockNumber())) {
142
+ while (i <= this.getLatestBlockNumber()) {
106
143
  if (this._data.isReservedBlock(i)) {
107
144
  const reservation = this._data.cancelReservationWithBlock(i);
108
- i = reservation.last.addn(1);
145
+ i = reservation.last + 1n;
109
146
  } else {
110
147
  const current = this._data.getBlockByNumber(i);
111
148
  if (current !== undefined) {
112
149
  this._data.removeBlock(current);
113
150
  }
114
- i = i.addn(1);
151
+ i++;
115
152
  }
116
153
  }
117
154
  }
118
155
 
119
- protected async _computeTotalDifficulty(block: Block): Promise<BN> {
156
+ protected async _computeTotalDifficulty(block: Block): Promise<bigint> {
120
157
  const difficulty = block.header.difficulty;
121
158
  const blockNumber = block.header.number;
122
159
 
123
- if (blockNumber.eqn(0)) {
160
+ if (blockNumber === 0n) {
124
161
  return difficulty;
125
162
  }
126
163
 
127
- const parentBlock = await this.getBlock(blockNumber.subn(1));
164
+ const parentBlock = await this.getBlock(blockNumber - 1n);
128
165
  assertHardhatInvariant(parentBlock !== null, "Parent block should exist");
129
166
 
130
167
  const parentHash = parentBlock.hash();
@@ -134,6 +171,6 @@ export abstract class BlockchainBase {
134
171
  "Parent block should have total difficulty"
135
172
  );
136
173
 
137
- return parentTD.add(difficulty);
174
+ return parentTD + difficulty;
138
175
  }
139
176
  }
@@ -1,8 +1,8 @@
1
- import { Block } from "@ethereumjs/block";
2
- import Common from "@ethereumjs/common";
3
- import { TypedTransaction } from "@ethereumjs/tx";
4
- import Bloom from "@ethereumjs/vm/dist/bloom";
5
- import { BN, bufferToHex } from "ethereumjs-util";
1
+ import { Block } from "@ignored/block";
2
+ import { Common } from "@ignored/common";
3
+ import { TypedTransaction } from "@ignored/tx";
4
+ import { bufferToHex } from "@ignored/util";
5
+ import { Bloom } from "@ignored/vm";
6
6
 
7
7
  import { assertHardhatInvariant } from "../../core/errors";
8
8
  import { bloomFilter, filterLogs } from "./filter";
@@ -10,36 +10,36 @@ import { FilterParams } from "./node-types";
10
10
  import { RpcLogOutput, RpcReceiptOutput } from "./output";
11
11
 
12
12
  interface Reservation {
13
- first: BN;
14
- last: BN;
15
- interval: BN;
13
+ first: bigint;
14
+ last: bigint;
15
+ interval: bigint;
16
16
  previousBlockStateRoot: Buffer;
17
- previousBlockTotalDifficulty: BN;
18
- previousBlockBaseFeePerGas: BN | undefined;
17
+ previousBlockTotalDifficulty: bigint;
18
+ previousBlockBaseFeePerGas: bigint | undefined;
19
19
  }
20
20
 
21
21
  export class BlockchainData {
22
- private _blocksByNumber: Map<number, Block> = new Map();
22
+ private _blocksByNumber: Map<bigint, Block> = new Map();
23
23
  private _blocksByHash: Map<string, Block> = new Map();
24
24
  private _blocksByTransactions: Map<string, Block> = new Map();
25
25
  private _transactions: Map<string, TypedTransaction> = new Map();
26
26
  private _transactionReceipts: Map<string, RpcReceiptOutput> = new Map();
27
- private _totalDifficulty: Map<string, BN> = new Map();
27
+ private _totalDifficulty: Map<string, bigint> = new Map();
28
28
  private _blockReservations: Reservation[] = new Array();
29
29
 
30
30
  constructor(private _common: Common) {}
31
31
 
32
32
  public reserveBlocks(
33
- first: BN,
34
- count: BN,
35
- interval: BN,
33
+ first: bigint,
34
+ count: bigint,
35
+ interval: bigint,
36
36
  previousBlockStateRoot: Buffer,
37
- previousBlockTotalDifficulty: BN,
38
- previousBlockBaseFeePerGas: BN | undefined
37
+ previousBlockTotalDifficulty: bigint,
38
+ previousBlockBaseFeePerGas: bigint | undefined
39
39
  ) {
40
40
  const reservation: Reservation = {
41
41
  first,
42
- last: first.add(count.subn(1)),
42
+ last: first + count - 1n,
43
43
  interval,
44
44
  previousBlockStateRoot,
45
45
  previousBlockTotalDifficulty,
@@ -48,8 +48,8 @@ export class BlockchainData {
48
48
  this._blockReservations.push(reservation);
49
49
  }
50
50
 
51
- public getBlockByNumber(blockNumber: BN) {
52
- return this._blocksByNumber.get(blockNumber.toNumber());
51
+ public getBlockByNumber(blockNumber: bigint) {
52
+ return this._blocksByNumber.get(blockNumber);
53
53
  }
54
54
 
55
55
  public getBlockByHash(blockHash: Buffer) {
@@ -74,16 +74,12 @@ export class BlockchainData {
74
74
 
75
75
  public getLogs(filterParams: FilterParams) {
76
76
  const logs: RpcLogOutput[] = [];
77
- for (
78
- let i = filterParams.fromBlock;
79
- i.lte(filterParams.toBlock);
80
- i = i.addn(1)
81
- ) {
77
+ for (let i = filterParams.fromBlock; i <= filterParams.toBlock; i++) {
82
78
  const block = this.getBlockByNumber(i);
83
79
  if (
84
80
  block === undefined ||
85
81
  !bloomFilter(
86
- new Bloom(block.header.bloom),
82
+ new Bloom(block.header.logsBloom),
87
83
  filterParams.addresses,
88
84
  filterParams.normalizedTopics
89
85
  )
@@ -107,9 +103,9 @@ export class BlockchainData {
107
103
  return logs;
108
104
  }
109
105
 
110
- public addBlock(block: Block, totalDifficulty: BN) {
106
+ public addBlock(block: Block, totalDifficulty: bigint) {
111
107
  const blockHash = bufferToHex(block.hash());
112
- const blockNumber = new BN(block.header.number).toNumber();
108
+ const blockNumber = block.header.number;
113
109
  this._blocksByNumber.set(blockNumber, block);
114
110
  this._blocksByHash.set(blockHash, block);
115
111
  this._totalDifficulty.set(blockHash, totalDifficulty);
@@ -128,7 +124,7 @@ export class BlockchainData {
128
124
  */
129
125
  public removeBlock(block: Block) {
130
126
  const blockHash = bufferToHex(block.hash());
131
- const blockNumber = new BN(block.header.number).toNumber();
127
+ const blockNumber = block.header.number;
132
128
  this._blocksByNumber.delete(blockNumber);
133
129
  this._blocksByHash.delete(blockHash);
134
130
  this._totalDifficulty.delete(blockHash);
@@ -149,14 +145,14 @@ export class BlockchainData {
149
145
  this._transactionReceipts.set(receipt.transactionHash, receipt);
150
146
  }
151
147
 
152
- public isReservedBlock(blockNumber: BN): boolean {
148
+ public isReservedBlock(blockNumber: bigint): boolean {
153
149
  return this._findBlockReservation(blockNumber) !== -1;
154
150
  }
155
151
 
156
- private _findBlockReservation(blockNumber: BN): number {
152
+ private _findBlockReservation(blockNumber: bigint): number {
157
153
  return this._blockReservations.findIndex(
158
154
  (reservation) =>
159
- reservation.first.lte(blockNumber) && blockNumber.lte(reservation.last)
155
+ reservation.first <= blockNumber && blockNumber <= reservation.last
160
156
  );
161
157
  }
162
158
 
@@ -180,11 +176,11 @@ export class BlockchainData {
180
176
  /**
181
177
  * Cancel and return the reservation that has block `blockNumber`
182
178
  */
183
- public cancelReservationWithBlock(blockNumber: BN): Reservation {
179
+ public cancelReservationWithBlock(blockNumber: bigint): Reservation {
184
180
  return this._removeReservation(this._findBlockReservation(blockNumber));
185
181
  }
186
182
 
187
- public fulfillBlockReservation(blockNumber: BN) {
183
+ public fulfillBlockReservation(blockNumber: bigint) {
188
184
  // in addition to adding the given block, the reservation needs to be split
189
185
  // in two in order to accomodate access to the given block.
190
186
 
@@ -200,17 +196,17 @@ export class BlockchainData {
200
196
  // split the block reservation:
201
197
  const oldReservation = this._removeReservation(reservationIndex);
202
198
 
203
- if (!blockNumber.eq(oldReservation.first)) {
199
+ if (blockNumber !== oldReservation.first) {
204
200
  this._blockReservations.push({
205
201
  ...oldReservation,
206
- last: blockNumber.subn(1),
202
+ last: blockNumber - 1n,
207
203
  });
208
204
  }
209
205
 
210
- if (!blockNumber.eq(oldReservation.last)) {
206
+ if (blockNumber !== oldReservation.last) {
211
207
  this._blockReservations.push({
212
208
  ...oldReservation,
213
- first: blockNumber.addn(1),
209
+ first: blockNumber + 1n,
214
210
  });
215
211
  }
216
212
 
@@ -230,7 +226,7 @@ export class BlockchainData {
230
226
  );
231
227
  }
232
228
 
233
- private _calculateTimestampForReservedBlock(blockNumber: BN): BN {
229
+ private _calculateTimestampForReservedBlock(blockNumber: bigint): bigint {
234
230
  const reservationIndex = this._findBlockReservation(blockNumber);
235
231
 
236
232
  assertHardhatInvariant(
@@ -240,7 +236,7 @@ export class BlockchainData {
240
236
 
241
237
  const reservation = this._blockReservations[reservationIndex];
242
238
 
243
- const blockNumberBeforeReservation = reservation.first.subn(1);
239
+ const blockNumberBeforeReservation = reservation.first - 1n;
244
240
 
245
241
  const blockBeforeReservation = this.getBlockByNumber(
246
242
  blockNumberBeforeReservation
@@ -254,8 +250,9 @@ export class BlockchainData {
254
250
  ? this._calculateTimestampForReservedBlock(blockNumberBeforeReservation)
255
251
  : blockBeforeReservation.header.timestamp;
256
252
 
257
- return previousTimestamp.add(
258
- reservation.interval.mul(blockNumber.sub(reservation.first).addn(1))
253
+ return (
254
+ previousTimestamp +
255
+ reservation.interval * (blockNumber - reservation.first + 1n)
259
256
  );
260
257
  }
261
258
  }