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.
- package/README.md +1 -1
- package/builtin-tasks/compile.js +6 -8
- package/builtin-tasks/compile.js.map +1 -1
- package/builtin-tasks/node.js +9 -12
- package/builtin-tasks/node.js.map +1 -1
- package/builtin-tasks/test.js +2 -3
- package/builtin-tasks/test.js.map +1 -1
- package/console.sol +444 -444
- package/internal/artifacts.js +1 -1
- package/internal/artifacts.js.map +1 -1
- package/internal/cli/ArgumentsParser.js +5 -2
- package/internal/cli/ArgumentsParser.js.map +1 -1
- package/internal/cli/analytics.js +2 -2
- package/internal/cli/analytics.js.map +1 -1
- package/internal/cli/autocomplete.js +20 -32
- package/internal/cli/autocomplete.js.map +1 -1
- package/internal/cli/cli.js +1 -1
- package/internal/cli/cli.js.map +1 -1
- package/internal/cli/project-creation.js +14 -4
- package/internal/cli/project-creation.js.map +1 -1
- package/internal/constants.d.ts.map +1 -1
- package/internal/constants.js +2 -0
- package/internal/constants.js.map +1 -1
- package/internal/core/config/config-loading.js +2 -3
- package/internal/core/config/config-loading.js.map +1 -1
- package/internal/core/config/config-resolution.d.ts.map +1 -1
- package/internal/core/config/config-resolution.js +84 -35
- package/internal/core/config/config-resolution.js.map +1 -1
- package/internal/core/config/config-validation.js +38 -20
- package/internal/core/config/config-validation.js.map +1 -1
- package/internal/core/config/default-config.d.ts.map +1 -1
- package/internal/core/config/default-config.js +17 -4
- package/internal/core/config/default-config.js.map +1 -1
- package/internal/core/errors.js +4 -2
- package/internal/core/errors.js.map +1 -1
- package/internal/core/execution-mode.js +2 -2
- package/internal/core/execution-mode.js.map +1 -1
- package/internal/core/flamegraph.d.ts +10 -0
- package/internal/core/flamegraph.d.ts.map +1 -0
- package/internal/core/flamegraph.js +245 -0
- package/internal/core/flamegraph.js.map +1 -0
- package/internal/core/jsonrpc/types/base-types.d.ts +7 -8
- package/internal/core/jsonrpc/types/base-types.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/base-types.js +24 -24
- package/internal/core/jsonrpc/types/base-types.js.map +1 -1
- package/internal/core/jsonrpc/types/input/blockTag.d.ts +15 -10
- package/internal/core/jsonrpc/types/input/blockTag.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/input/blockTag.js +2 -0
- package/internal/core/jsonrpc/types/input/blockTag.js.map +1 -1
- package/internal/core/jsonrpc/types/input/callRequest.d.ts +5 -6
- package/internal/core/jsonrpc/types/input/callRequest.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/input/callRequest.js.map +1 -1
- package/internal/core/jsonrpc/types/input/filterRequest.d.ts +6 -7
- package/internal/core/jsonrpc/types/input/filterRequest.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/input/filterRequest.js.map +1 -1
- package/internal/core/jsonrpc/types/input/transactionRequest.d.ts +7 -8
- package/internal/core/jsonrpc/types/input/transactionRequest.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/input/transactionRequest.js.map +1 -1
- package/internal/core/jsonrpc/types/output/block.d.ts +29 -30
- package/internal/core/jsonrpc/types/output/block.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/output/block.js +8 -2
- package/internal/core/jsonrpc/types/output/block.js.map +1 -1
- package/internal/core/jsonrpc/types/output/log.d.ts +3 -4
- package/internal/core/jsonrpc/types/output/log.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/output/log.js.map +1 -1
- package/internal/core/jsonrpc/types/output/receipt.d.ts +10 -11
- package/internal/core/jsonrpc/types/output/receipt.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/output/receipt.js.map +1 -1
- package/internal/core/jsonrpc/types/output/transaction.d.ts +13 -14
- package/internal/core/jsonrpc/types/output/transaction.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/output/transaction.js.map +1 -1
- package/internal/core/providers/accounts.d.ts.map +1 -1
- package/internal/core/providers/accounts.js +30 -24
- package/internal/core/providers/accounts.js.map +1 -1
- package/internal/core/providers/chainId.js +1 -1
- package/internal/core/providers/chainId.js.map +1 -1
- package/internal/core/providers/construction.d.ts.map +1 -1
- package/internal/core/providers/construction.js +5 -5
- package/internal/core/providers/construction.js.map +1 -1
- package/internal/core/providers/gas-providers.d.ts +4 -4
- package/internal/core/providers/gas-providers.d.ts.map +1 -1
- package/internal/core/providers/gas-providers.js +16 -15
- package/internal/core/providers/gas-providers.js.map +1 -1
- package/internal/core/providers/http.js +7 -2
- package/internal/core/providers/http.js.map +1 -1
- package/internal/core/providers/util.js +5 -8
- package/internal/core/providers/util.js.map +1 -1
- package/internal/core/runtime-environment.js +1 -1
- package/internal/core/runtime-environment.js.map +1 -1
- package/internal/core/task-profiling.d.ts +18 -0
- package/internal/core/task-profiling.d.ts.map +1 -0
- package/internal/core/task-profiling.js +50 -0
- package/internal/core/task-profiling.js.map +1 -0
- package/internal/core/typescript-support.js +3 -3
- package/internal/core/typescript-support.js.map +1 -1
- package/internal/hardhat-network/jsonrpc/client.d.ts +39 -39
- package/internal/hardhat-network/jsonrpc/client.d.ts.map +1 -1
- package/internal/hardhat-network/jsonrpc/client.js +14 -14
- package/internal/hardhat-network/jsonrpc/client.js.map +1 -1
- package/internal/hardhat-network/provider/BlockchainBase.d.ts +13 -10
- package/internal/hardhat-network/provider/BlockchainBase.d.ts.map +1 -1
- package/internal/hardhat-network/provider/BlockchainBase.js +38 -16
- package/internal/hardhat-network/provider/BlockchainBase.js.map +1 -1
- package/internal/hardhat-network/provider/BlockchainData.d.ts +15 -16
- package/internal/hardhat-network/provider/BlockchainData.d.ts.map +1 -1
- package/internal/hardhat-network/provider/BlockchainData.js +33 -29
- package/internal/hardhat-network/provider/BlockchainData.js.map +1 -1
- package/internal/hardhat-network/provider/HardhatBlockchain.d.ts +7 -8
- package/internal/hardhat-network/provider/HardhatBlockchain.d.ts.map +1 -1
- package/internal/hardhat-network/provider/HardhatBlockchain.js +13 -14
- package/internal/hardhat-network/provider/HardhatBlockchain.js.map +1 -1
- package/internal/hardhat-network/provider/PoolState.d.ts +1 -1
- package/internal/hardhat-network/provider/PoolState.d.ts.map +1 -1
- package/internal/hardhat-network/provider/PoolState.js +2 -3
- package/internal/hardhat-network/provider/PoolState.js.map +1 -1
- package/internal/hardhat-network/provider/TransactionQueue.d.ts +2 -3
- package/internal/hardhat-network/provider/TransactionQueue.d.ts.map +1 -1
- package/internal/hardhat-network/provider/TransactionQueue.js +3 -3
- package/internal/hardhat-network/provider/TransactionQueue.js.map +1 -1
- package/internal/hardhat-network/provider/TxPool.d.ts +8 -8
- package/internal/hardhat-network/provider/TxPool.d.ts.map +1 -1
- package/internal/hardhat-network/provider/TxPool.js +66 -68
- package/internal/hardhat-network/provider/TxPool.js.map +1 -1
- package/internal/hardhat-network/provider/ethereumjs-workarounds.js +2 -2
- package/internal/hardhat-network/provider/ethereumjs-workarounds.js.map +1 -1
- package/internal/hardhat-network/provider/filter.d.ts +5 -6
- package/internal/hardhat-network/provider/filter.d.ts.map +1 -1
- package/internal/hardhat-network/provider/filter.js +7 -8
- package/internal/hardhat-network/provider/filter.js.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts +10 -11
- package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkBlockchain.js +51 -47
- package/internal/hardhat-network/provider/fork/ForkBlockchain.js.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts +8 -10
- package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkStateManager.js +51 -69
- package/internal/hardhat-network/provider/fork/ForkStateManager.js.map +1 -1
- package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts +1 -1
- package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts.map +1 -1
- package/internal/hardhat-network/provider/fork/rpcToBlockData.js +2 -3
- package/internal/hardhat-network/provider/fork/rpcToBlockData.js.map +1 -1
- package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts +2 -2
- package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts.map +1 -1
- package/internal/hardhat-network/provider/fork/rpcToTxData.js +7 -11
- package/internal/hardhat-network/provider/fork/rpcToTxData.js.map +1 -1
- package/internal/hardhat-network/provider/modules/eth.d.ts +2 -1
- package/internal/hardhat-network/provider/modules/eth.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/eth.js +92 -68
- package/internal/hardhat-network/provider/modules/eth.js.map +1 -1
- package/internal/hardhat-network/provider/modules/evm.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/evm.js +14 -14
- package/internal/hardhat-network/provider/modules/evm.js.map +1 -1
- package/internal/hardhat-network/provider/modules/hardhat.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/hardhat.js +13 -13
- package/internal/hardhat-network/provider/modules/hardhat.js.map +1 -1
- package/internal/hardhat-network/provider/modules/logger.d.ts +7 -8
- package/internal/hardhat-network/provider/modules/logger.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/logger.js +29 -32
- package/internal/hardhat-network/provider/modules/logger.js.map +1 -1
- package/internal/hardhat-network/provider/modules/net.d.ts +1 -1
- package/internal/hardhat-network/provider/modules/net.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/personal.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/personal.js +3 -3
- package/internal/hardhat-network/provider/modules/personal.js.map +1 -1
- package/internal/hardhat-network/provider/modules/web3.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/web3.js +5 -4
- package/internal/hardhat-network/provider/modules/web3.js.map +1 -1
- package/internal/hardhat-network/provider/node-types.d.ts +30 -29
- package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
- package/internal/hardhat-network/provider/node.d.ts +47 -42
- package/internal/hardhat-network/provider/node.d.ts.map +1 -1
- package/internal/hardhat-network/provider/node.js +262 -208
- package/internal/hardhat-network/provider/node.js.map +1 -1
- package/internal/hardhat-network/provider/output.d.ts +5 -6
- package/internal/hardhat-network/provider/output.d.ts.map +1 -1
- package/internal/hardhat-network/provider/output.js +39 -36
- package/internal/hardhat-network/provider/output.js.map +1 -1
- package/internal/hardhat-network/provider/provider.d.ts +1 -2
- package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
- package/internal/hardhat-network/provider/provider.js.map +1 -1
- package/internal/hardhat-network/provider/return-data.d.ts +2 -2
- package/internal/hardhat-network/provider/return-data.d.ts.map +1 -1
- package/internal/hardhat-network/provider/return-data.js +4 -1
- package/internal/hardhat-network/provider/return-data.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts +5 -5
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js +60 -17
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts +4 -4
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js +59 -16
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts +3 -3
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js +41 -9
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts +4 -4
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js +7 -23
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts +3 -3
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js +7 -22
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts +3 -3
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js.map +1 -1
- package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts +5 -6
- package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/fork-recomendations-banner.js +2 -3
- package/internal/hardhat-network/provider/utils/fork-recomendations-banner.js.map +1 -1
- package/internal/hardhat-network/provider/utils/getCurrentTimestamp.d.ts +1 -0
- package/internal/hardhat-network/provider/utils/getCurrentTimestamp.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/getCurrentTimestamp.js +5 -1
- package/internal/hardhat-network/provider/utils/getCurrentTimestamp.js.map +1 -1
- package/internal/hardhat-network/provider/utils/makeAccount.d.ts +1 -1
- package/internal/hardhat-network/provider/utils/makeAccount.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/makeAccount.js +6 -6
- package/internal/hardhat-network/provider/utils/makeAccount.js.map +1 -1
- package/internal/hardhat-network/provider/utils/makeCommon.d.ts +2 -2
- package/internal/hardhat-network/provider/utils/makeCommon.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/makeCommon.js +7 -23
- package/internal/hardhat-network/provider/utils/makeCommon.js.map +1 -1
- package/internal/hardhat-network/provider/utils/makeForkClient.d.ts +1 -2
- package/internal/hardhat-network/provider/utils/makeForkClient.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/makeForkClient.js +7 -8
- package/internal/hardhat-network/provider/utils/makeForkClient.js.map +1 -1
- package/internal/hardhat-network/provider/utils/makeStateTrie.d.ts +1 -1
- package/internal/hardhat-network/provider/utils/makeStateTrie.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/makeStateTrie.js +4 -4
- package/internal/hardhat-network/provider/utils/makeStateTrie.js.map +1 -1
- package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts +6 -3
- package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/putGenesisBlock.js +22 -4
- package/internal/hardhat-network/provider/utils/putGenesisBlock.js.map +1 -1
- package/internal/hardhat-network/provider/utils/random.d.ts +15 -0
- package/internal/hardhat-network/provider/utils/random.d.ts.map +1 -0
- package/internal/hardhat-network/provider/utils/random.js +48 -0
- package/internal/hardhat-network/provider/utils/random.js.map +1 -0
- package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.d.ts +1 -2
- package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.js +5 -4
- package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.js.map +1 -1
- package/internal/hardhat-network/provider/utils/reorgs-protection.d.ts +2 -2
- package/internal/hardhat-network/provider/utils/reorgs-protection.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/reorgs-protection.js +7 -7
- package/internal/hardhat-network/provider/utils/reorgs-protection.js.map +1 -1
- package/internal/hardhat-network/provider/utils/txMapToArray.d.ts +1 -1
- package/internal/hardhat-network/provider/utils/txMapToArray.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/compiler-to-model.js +6 -8
- package/internal/hardhat-network/stack-traces/compiler-to-model.js.map +1 -1
- package/internal/hardhat-network/stack-traces/consoleLogger.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/consoleLogger.js +51 -47
- package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
- package/internal/hardhat-network/stack-traces/constants.d.ts +3 -0
- package/internal/hardhat-network/stack-traces/constants.d.ts.map +1 -0
- package/internal/hardhat-network/stack-traces/constants.js +6 -0
- package/internal/hardhat-network/stack-traces/constants.js.map +1 -0
- package/internal/hardhat-network/stack-traces/contracts-identifier.js +2 -2
- package/internal/hardhat-network/stack-traces/contracts-identifier.js.map +1 -1
- package/internal/hardhat-network/stack-traces/debug.js +29 -19
- package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
- package/internal/hardhat-network/stack-traces/error-inferrer.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/error-inferrer.js +48 -26
- package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
- package/internal/hardhat-network/stack-traces/logger.d.ts +223 -2
- package/internal/hardhat-network/stack-traces/logger.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/logger.js +445 -224
- package/internal/hardhat-network/stack-traces/logger.js.map +1 -1
- package/internal/hardhat-network/stack-traces/message-trace.d.ts +6 -7
- package/internal/hardhat-network/stack-traces/message-trace.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/message-trace.js.map +1 -1
- package/internal/hardhat-network/stack-traces/model.js +6 -6
- package/internal/hardhat-network/stack-traces/model.js.map +1 -1
- package/internal/hardhat-network/stack-traces/panic-errors.d.ts +1 -2
- package/internal/hardhat-network/stack-traces/panic-errors.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/panic-errors.js +1 -1
- package/internal/hardhat-network/stack-traces/panic-errors.js.map +1 -1
- package/internal/hardhat-network/stack-traces/solidity-errors.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/solidity-errors.js +21 -12
- package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
- package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts +6 -5
- package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/solidity-stack-trace.js.map +1 -1
- package/internal/hardhat-network/stack-traces/solidityTracer.d.ts +1 -1
- package/internal/hardhat-network/stack-traces/solidityTracer.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/solidityTracer.js +5 -1
- package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts +2 -1
- package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-debug-tracer.js +79 -78
- package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-trace-decoder.js +5 -1
- package/internal/hardhat-network/stack-traces/vm-trace-decoder.js.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-tracer.d.ts +3 -2
- package/internal/hardhat-network/stack-traces/vm-tracer.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-tracer.js +15 -16
- package/internal/hardhat-network/stack-traces/vm-tracer.js.map +1 -1
- package/internal/reset.js +1 -1
- package/internal/reset.js.map +1 -1
- package/internal/sentry/anonymizer.js +2 -3
- package/internal/sentry/anonymizer.js.map +1 -1
- package/internal/sentry/subprocess.js +1 -1
- package/internal/sentry/subprocess.js.map +1 -1
- package/internal/sentry/transport.js +3 -4
- package/internal/sentry/transport.js.map +1 -1
- package/internal/solidity/compilation-job.js +2 -4
- package/internal/solidity/compilation-job.js.map +1 -1
- package/internal/solidity/compiler/downloader.d.ts.map +1 -1
- package/internal/solidity/compiler/downloader.js +6 -6
- package/internal/solidity/compiler/downloader.js.map +1 -1
- package/internal/solidity/dependencyGraph.js +3 -5
- package/internal/solidity/dependencyGraph.js.map +1 -1
- package/internal/solidity/parse.js +1 -1
- package/internal/solidity/parse.js.map +1 -1
- package/internal/solidity/resolver.js +4 -1
- package/internal/solidity/resolver.js.map +1 -1
- package/internal/util/abi-helpers.js +1 -1
- package/internal/util/abi-helpers.js.map +1 -1
- package/internal/util/bigint.d.ts +25 -0
- package/internal/util/bigint.d.ts.map +1 -0
- package/internal/util/bigint.js +67 -0
- package/internal/util/bigint.js.map +1 -0
- package/internal/util/download.js +1 -1
- package/internal/util/download.js.map +1 -1
- package/internal/util/fs-utils.d.ts +32 -0
- package/internal/util/fs-utils.d.ts.map +1 -0
- package/internal/util/fs-utils.js +151 -0
- package/internal/util/fs-utils.js.map +1 -0
- package/internal/util/hardforks.d.ts +3 -3
- package/internal/util/hardforks.d.ts.map +1 -1
- package/internal/util/hardforks.js +5 -28
- package/internal/util/hardforks.js.map +1 -1
- package/internal/util/jsonrpc.js +1 -1
- package/internal/util/jsonrpc.js.map +1 -1
- package/internal/util/lazy.js +2 -2
- package/internal/util/lazy.js.map +1 -1
- package/internal/util/packageInfo.js +1 -1
- package/internal/util/packageInfo.js.map +1 -1
- package/internal/util/scripts-runner.js +5 -2
- package/internal/util/scripts-runner.js.map +1 -1
- package/internal/util/wei-values.d.ts +1 -2
- package/internal/util/wei-values.d.ts.map +1 -1
- package/internal/util/wei-values.js +9 -10
- package/internal/util/wei-values.js.map +1 -1
- package/internal/vendor/await-semaphore/index.d.ts +12 -0
- package/internal/vendor/await-semaphore/index.d.ts.map +1 -0
- package/internal/vendor/await-semaphore/index.js +64 -0
- package/internal/vendor/await-semaphore/index.js.map +1 -0
- package/package.json +13 -9
- package/profiling.d.ts +18 -0
- package/profiling.d.ts.map +1 -0
- package/profiling.js +32 -0
- package/profiling.js.map +1 -0
- package/sample-projects/javascript/scripts/deploy.js +3 -1
- package/sample-projects/javascript/test/Lock.js +1 -1
- package/sample-projects/typescript/scripts/deploy.ts +1 -1
- package/sample-projects/typescript/test/Lock.ts +1 -1
- package/src/builtin-tasks/node.ts +4 -6
- package/src/internal/constants.ts +3 -1
- package/src/internal/core/config/config-resolution.ts +30 -7
- package/src/internal/core/config/default-config.ts +12 -4
- package/src/internal/core/jsonrpc/types/base-types.ts +23 -24
- package/src/internal/core/jsonrpc/types/input/blockTag.ts +2 -4
- package/src/internal/core/jsonrpc/types/input/callRequest.ts +0 -4
- package/src/internal/core/jsonrpc/types/input/filterRequest.ts +0 -4
- package/src/internal/core/jsonrpc/types/input/transactionRequest.ts +0 -4
- package/src/internal/core/jsonrpc/types/output/block.ts +0 -4
- package/src/internal/core/jsonrpc/types/output/log.ts +0 -4
- package/src/internal/core/jsonrpc/types/output/receipt.ts +0 -4
- package/src/internal/core/jsonrpc/types/output/transaction.ts +0 -4
- package/src/internal/core/providers/accounts.ts +16 -26
- package/src/internal/core/providers/construction.ts +5 -3
- package/src/internal/core/providers/gas-providers.ts +25 -33
- package/src/internal/core/providers/util.ts +1 -1
- package/src/internal/hardhat-network/jsonrpc/client.ts +22 -22
- package/src/internal/hardhat-network/provider/BlockchainBase.ts +62 -25
- package/src/internal/hardhat-network/provider/BlockchainData.ts +39 -42
- package/src/internal/hardhat-network/provider/HardhatBlockchain.ts +21 -21
- package/src/internal/hardhat-network/provider/PoolState.ts +3 -4
- package/src/internal/hardhat-network/provider/TransactionQueue.ts +11 -8
- package/src/internal/hardhat-network/provider/TxPool.ts +62 -64
- package/src/internal/hardhat-network/provider/ethereumjs-workarounds.ts +3 -3
- package/src/internal/hardhat-network/provider/filter.ts +9 -12
- package/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts +52 -50
- package/src/internal/hardhat-network/provider/fork/ForkStateManager.ts +35 -60
- package/src/internal/hardhat-network/provider/fork/rpcToBlockData.ts +2 -2
- package/src/internal/hardhat-network/provider/fork/rpcToTxData.ts +3 -3
- package/src/internal/hardhat-network/provider/modules/eth.ts +88 -63
- package/src/internal/hardhat-network/provider/modules/evm.ts +19 -22
- package/src/internal/hardhat-network/provider/modules/hardhat.ts +21 -19
- package/src/internal/hardhat-network/provider/modules/logger.ts +33 -40
- package/src/internal/hardhat-network/provider/modules/net.ts +1 -1
- package/src/internal/hardhat-network/provider/modules/personal.ts +2 -1
- package/src/internal/hardhat-network/provider/modules/web3.ts +5 -4
- package/src/internal/hardhat-network/provider/node-types.ts +32 -31
- package/src/internal/hardhat-network/provider/node.ts +379 -343
- package/src/internal/hardhat-network/provider/output.ts +32 -37
- package/src/internal/hardhat-network/provider/provider.ts +5 -6
- package/src/internal/hardhat-network/provider/return-data.ts +6 -3
- package/src/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.ts +51 -24
- package/src/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.ts +50 -23
- package/src/internal/hardhat-network/provider/transactions/FakeSenderTransaction.ts +29 -11
- package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts +12 -24
- package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.ts +11 -22
- package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.ts +3 -3
- package/src/internal/hardhat-network/provider/types/HardhatBlockchainInterface.ts +8 -9
- package/src/internal/hardhat-network/provider/utils/getCurrentTimestamp.ts +4 -0
- package/src/internal/hardhat-network/provider/utils/makeAccount.ts +4 -10
- package/src/internal/hardhat-network/provider/utils/makeCommon.ts +8 -34
- package/src/internal/hardhat-network/provider/utils/makeForkClient.ts +8 -9
- package/src/internal/hardhat-network/provider/utils/makeStateTrie.ts +3 -3
- package/src/internal/hardhat-network/provider/utils/putGenesisBlock.ts +34 -6
- package/src/internal/hardhat-network/provider/utils/random.ts +54 -0
- package/src/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.ts +6 -7
- package/src/internal/hardhat-network/provider/utils/reorgs-protection.ts +8 -8
- package/src/internal/hardhat-network/stack-traces/consoleLogger.ts +16 -6
- package/src/internal/hardhat-network/stack-traces/contracts-identifier.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/debug.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/error-inferrer.ts +11 -7
- package/src/internal/hardhat-network/stack-traces/logger.ts +444 -223
- package/src/internal/hardhat-network/stack-traces/message-trace.ts +6 -7
- package/src/internal/hardhat-network/stack-traces/model.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/panic-errors.ts +3 -5
- package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +16 -1
- package/src/internal/hardhat-network/stack-traces/solidity-stack-trace.ts +6 -6
- package/src/internal/hardhat-network/stack-traces/solidityTracer.ts +6 -1
- package/src/internal/hardhat-network/stack-traces/vm-debug-tracer.ts +106 -103
- package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +23 -18
- package/src/internal/solidity/compiler/downloader.ts +5 -2
- package/src/internal/util/bigint.ts +84 -0
- package/src/internal/util/hardforks.ts +4 -29
- package/src/internal/util/wei-values.ts +11 -13
- package/src/types/config.ts +8 -10
- package/types/config.d.ts +8 -9
- package/types/config.d.ts.map +1 -1
- package/src/internal/hardhat-network/provider/fork/random.ts +0 -33
- package/src/internal/hardhat-network/provider/utils/bnToHex.ts +0 -5
- 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
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
?
|
|
198
|
+
? rpcQuantityToBigInt(tx.maxFeePerGas)
|
|
199
199
|
: suggestedEip1559Values.maxFeePerGas;
|
|
200
200
|
|
|
201
201
|
const maxPriorityFeePerGas =
|
|
202
202
|
tx.maxPriorityFeePerGas !== undefined
|
|
203
|
-
?
|
|
203
|
+
? rpcQuantityToBigInt(tx.maxPriorityFeePerGas)
|
|
204
204
|
: suggestedEip1559Values.maxPriorityFeePerGas;
|
|
205
205
|
|
|
206
|
-
if (maxFeePerGas
|
|
207
|
-
maxFeePerGas
|
|
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<
|
|
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
|
|
221
|
+
return rpcQuantityToBigInt(response);
|
|
222
222
|
}
|
|
223
223
|
|
|
224
224
|
private async _suggestEip1559FeePriceValues(): Promise<
|
|
225
225
|
| {
|
|
226
|
-
maxFeePerGas:
|
|
227
|
-
maxPriorityFeePerGas:
|
|
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
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
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;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Address,
|
|
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:
|
|
33
|
-
private _maxReorg:
|
|
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:
|
|
54
|
-
blockNumber:
|
|
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:
|
|
69
|
+
blockNumber: bigint,
|
|
70
70
|
includeTransactions?: false
|
|
71
71
|
): Promise<RpcBlock | null>;
|
|
72
72
|
|
|
73
73
|
public async getBlockByNumber(
|
|
74
|
-
blockNumber:
|
|
74
|
+
blockNumber: bigint,
|
|
75
75
|
includeTransactions: true
|
|
76
76
|
): Promise<RpcBlockWithTransactions | null>;
|
|
77
77
|
|
|
78
78
|
public async getBlockByNumber(
|
|
79
|
-
blockNumber:
|
|
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:
|
|
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:
|
|
159
|
-
toBlock:
|
|
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:
|
|
196
|
-
): Promise<{ code: Buffer; transactionCount:
|
|
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:
|
|
229
|
-
newestBlock:
|
|
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
|
|
247
|
+
(res) => res.oldestBlock + BigInt(res.baseFeePerGas.length)
|
|
248
248
|
);
|
|
249
249
|
}
|
|
250
250
|
|
|
251
|
-
public async getLatestBlockNumber(): Promise<
|
|
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) =>
|
|
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[]) =>
|
|
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:
|
|
499
|
+
private _canBeCached(blockNumber: bigint | undefined) {
|
|
500
500
|
if (blockNumber === undefined) {
|
|
501
501
|
return false;
|
|
502
502
|
}
|
|
503
503
|
|
|
504
|
-
return !this._canBeReorgedOut(blockNumber
|
|
504
|
+
return !this._canBeReorgedOut(blockNumber);
|
|
505
505
|
}
|
|
506
506
|
|
|
507
|
-
private _canBeReorgedOut(blockNumber:
|
|
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 "@
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
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 |
|
|
65
|
+
blockHashOrNumber: Buffer | bigint | number
|
|
41
66
|
): Promise<Block | null> {
|
|
42
67
|
if (
|
|
43
|
-
(typeof blockHashOrNumber === "number" ||
|
|
44
|
-
|
|
68
|
+
(typeof blockHashOrNumber === "number" ||
|
|
69
|
+
BigIntUtils.isBigInt(blockHashOrNumber)) &&
|
|
70
|
+
this._data.isReservedBlock(BigInt(blockHashOrNumber))
|
|
45
71
|
) {
|
|
46
|
-
this._data.fulfillBlockReservation(
|
|
72
|
+
this._data.fulfillBlockReservation(BigInt(blockHashOrNumber));
|
|
47
73
|
}
|
|
48
74
|
|
|
49
75
|
if (typeof blockHashOrNumber === "number") {
|
|
50
|
-
return this._data.getBlockByNumber(
|
|
76
|
+
return this._data.getBlockByNumber(BigInt(blockHashOrNumber)) ?? null;
|
|
51
77
|
}
|
|
52
|
-
if (
|
|
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():
|
|
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
|
|
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:
|
|
87
|
-
interval:
|
|
112
|
+
count: bigint,
|
|
113
|
+
interval: bigint,
|
|
88
114
|
previousBlockStateRoot: Buffer,
|
|
89
|
-
previousBlockTotalDifficulty:
|
|
90
|
-
previousBlockBaseFeePerGas:
|
|
115
|
+
previousBlockTotalDifficulty: bigint,
|
|
116
|
+
previousBlockBaseFeePerGas: bigint | undefined
|
|
91
117
|
) {
|
|
92
118
|
this._data.reserveBlocks(
|
|
93
|
-
this.getLatestBlockNumber()
|
|
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
|
-
|
|
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
|
|
142
|
+
while (i <= this.getLatestBlockNumber()) {
|
|
106
143
|
if (this._data.isReservedBlock(i)) {
|
|
107
144
|
const reservation = this._data.cancelReservationWithBlock(i);
|
|
108
|
-
i = reservation.last
|
|
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
|
|
151
|
+
i++;
|
|
115
152
|
}
|
|
116
153
|
}
|
|
117
154
|
}
|
|
118
155
|
|
|
119
|
-
protected async _computeTotalDifficulty(block: Block): Promise<
|
|
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
|
|
160
|
+
if (blockNumber === 0n) {
|
|
124
161
|
return difficulty;
|
|
125
162
|
}
|
|
126
163
|
|
|
127
|
-
const parentBlock = await this.getBlock(blockNumber
|
|
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
|
|
174
|
+
return parentTD + difficulty;
|
|
138
175
|
}
|
|
139
176
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Block } from "@
|
|
2
|
-
import Common from "@
|
|
3
|
-
import { TypedTransaction } from "@
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
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:
|
|
14
|
-
last:
|
|
15
|
-
interval:
|
|
13
|
+
first: bigint;
|
|
14
|
+
last: bigint;
|
|
15
|
+
interval: bigint;
|
|
16
16
|
previousBlockStateRoot: Buffer;
|
|
17
|
-
previousBlockTotalDifficulty:
|
|
18
|
-
previousBlockBaseFeePerGas:
|
|
17
|
+
previousBlockTotalDifficulty: bigint;
|
|
18
|
+
previousBlockBaseFeePerGas: bigint | undefined;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
export class BlockchainData {
|
|
22
|
-
private _blocksByNumber: 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,
|
|
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:
|
|
34
|
-
count:
|
|
35
|
-
interval:
|
|
33
|
+
first: bigint,
|
|
34
|
+
count: bigint,
|
|
35
|
+
interval: bigint,
|
|
36
36
|
previousBlockStateRoot: Buffer,
|
|
37
|
-
previousBlockTotalDifficulty:
|
|
38
|
-
previousBlockBaseFeePerGas:
|
|
37
|
+
previousBlockTotalDifficulty: bigint,
|
|
38
|
+
previousBlockBaseFeePerGas: bigint | undefined
|
|
39
39
|
) {
|
|
40
40
|
const reservation: Reservation = {
|
|
41
41
|
first,
|
|
42
|
-
last: first
|
|
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:
|
|
52
|
-
return this._blocksByNumber.get(blockNumber
|
|
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.
|
|
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:
|
|
106
|
+
public addBlock(block: Block, totalDifficulty: bigint) {
|
|
111
107
|
const blockHash = bufferToHex(block.hash());
|
|
112
|
-
const blockNumber =
|
|
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 =
|
|
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:
|
|
148
|
+
public isReservedBlock(blockNumber: bigint): boolean {
|
|
153
149
|
return this._findBlockReservation(blockNumber) !== -1;
|
|
154
150
|
}
|
|
155
151
|
|
|
156
|
-
private _findBlockReservation(blockNumber:
|
|
152
|
+
private _findBlockReservation(blockNumber: bigint): number {
|
|
157
153
|
return this._blockReservations.findIndex(
|
|
158
154
|
(reservation) =>
|
|
159
|
-
reservation.first
|
|
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:
|
|
179
|
+
public cancelReservationWithBlock(blockNumber: bigint): Reservation {
|
|
184
180
|
return this._removeReservation(this._findBlockReservation(blockNumber));
|
|
185
181
|
}
|
|
186
182
|
|
|
187
|
-
public fulfillBlockReservation(blockNumber:
|
|
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 (
|
|
199
|
+
if (blockNumber !== oldReservation.first) {
|
|
204
200
|
this._blockReservations.push({
|
|
205
201
|
...oldReservation,
|
|
206
|
-
last: blockNumber
|
|
202
|
+
last: blockNumber - 1n,
|
|
207
203
|
});
|
|
208
204
|
}
|
|
209
205
|
|
|
210
|
-
if (
|
|
206
|
+
if (blockNumber !== oldReservation.last) {
|
|
211
207
|
this._blockReservations.push({
|
|
212
208
|
...oldReservation,
|
|
213
|
-
first: blockNumber
|
|
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:
|
|
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
|
|
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
|
|
258
|
-
|
|
253
|
+
return (
|
|
254
|
+
previousTimestamp +
|
|
255
|
+
reservation.interval * (blockNumber - reservation.first + 1n)
|
|
259
256
|
);
|
|
260
257
|
}
|
|
261
258
|
}
|