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,9 @@
|
|
|
1
|
-
import { Block } from "@
|
|
2
|
-
import Common from "@
|
|
3
|
-
import { TypedTransaction } from "@
|
|
4
|
-
import { Address
|
|
1
|
+
import { Block } from "@ignored/block";
|
|
2
|
+
import { Common } from "@ignored/common";
|
|
3
|
+
import { TypedTransaction } from "@ignored/tx";
|
|
4
|
+
import { Address } from "@ignored/util";
|
|
5
5
|
|
|
6
|
-
import { FeeMarketEIP1559TxData } from "@
|
|
6
|
+
import { FeeMarketEIP1559TxData } from "@ignored/tx/dist/types";
|
|
7
7
|
import { RpcBlockWithTransactions } from "../../../core/jsonrpc/types/output/block";
|
|
8
8
|
import { RpcTransactionReceipt } from "../../../core/jsonrpc/types/output/receipt";
|
|
9
9
|
import { RpcTransaction } from "../../../core/jsonrpc/types/output/transaction";
|
|
@@ -37,24 +37,24 @@ export class ForkBlockchain
|
|
|
37
37
|
|
|
38
38
|
constructor(
|
|
39
39
|
private _jsonRpcClient: JsonRpcClient,
|
|
40
|
-
private _forkBlockNumber:
|
|
40
|
+
private _forkBlockNumber: bigint,
|
|
41
41
|
common: Common
|
|
42
42
|
) {
|
|
43
43
|
super(common);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
public getLatestBlockNumber():
|
|
46
|
+
public getLatestBlockNumber(): bigint {
|
|
47
47
|
return this._latestBlockNumber;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
public async getBlock(
|
|
51
|
-
blockHashOrNumber: Buffer |
|
|
51
|
+
blockHashOrNumber: Buffer | bigint
|
|
52
52
|
): Promise<Block | null> {
|
|
53
53
|
if (
|
|
54
|
-
|
|
55
|
-
this._data.isReservedBlock(
|
|
54
|
+
typeof blockHashOrNumber === "bigint" &&
|
|
55
|
+
this._data.isReservedBlock(blockHashOrNumber)
|
|
56
56
|
) {
|
|
57
|
-
this._data.fulfillBlockReservation(
|
|
57
|
+
this._data.fulfillBlockReservation(blockHashOrNumber);
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
let block: Block | undefined | null;
|
|
@@ -63,42 +63,42 @@ export class ForkBlockchain
|
|
|
63
63
|
return block ?? null;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
block = await this._getBlockByNumber(
|
|
66
|
+
block = await this._getBlockByNumber(BigInt(blockHashOrNumber));
|
|
67
67
|
return block ?? null;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
public async addBlock(block: Block): Promise<Block> {
|
|
71
|
-
const blockNumber =
|
|
72
|
-
if (
|
|
71
|
+
const blockNumber = BigInt(block.header.number);
|
|
72
|
+
if (blockNumber !== this._latestBlockNumber + 1n) {
|
|
73
73
|
throw new Error(
|
|
74
|
-
`Invalid block number ${blockNumber
|
|
75
|
-
.
|
|
76
|
-
|
|
74
|
+
`Invalid block number ${blockNumber}. Expected ${
|
|
75
|
+
this._latestBlockNumber + 1n
|
|
76
|
+
}`
|
|
77
77
|
);
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
// When forking a network whose consensus is not the classic PoW,
|
|
81
81
|
// we can't calculate the hash correctly.
|
|
82
82
|
// Thus, we avoid this check for the first block after the fork.
|
|
83
|
-
if (blockNumber
|
|
83
|
+
if (blockNumber > this._forkBlockNumber + 1n) {
|
|
84
84
|
const parent = await this.getLatestBlock();
|
|
85
85
|
if (!block.header.parentHash.equals(parent.hash())) {
|
|
86
86
|
throw new Error("Invalid parent hash");
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
this._latestBlockNumber
|
|
90
|
+
this._latestBlockNumber++;
|
|
91
91
|
const totalDifficulty = await this._computeTotalDifficulty(block);
|
|
92
92
|
this._data.addBlock(block, totalDifficulty);
|
|
93
93
|
return block;
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
public reserveBlocks(
|
|
97
|
-
count:
|
|
98
|
-
interval:
|
|
97
|
+
count: bigint,
|
|
98
|
+
interval: bigint,
|
|
99
99
|
previousBlockStateRoot: Buffer,
|
|
100
|
-
previousBlockTotalDifficulty:
|
|
101
|
-
previousBlockBaseFeePerGas:
|
|
100
|
+
previousBlockTotalDifficulty: bigint,
|
|
101
|
+
previousBlockBaseFeePerGas: bigint | undefined
|
|
102
102
|
) {
|
|
103
103
|
super.reserveBlocks(
|
|
104
104
|
count,
|
|
@@ -107,25 +107,25 @@ export class ForkBlockchain
|
|
|
107
107
|
previousBlockTotalDifficulty,
|
|
108
108
|
previousBlockBaseFeePerGas
|
|
109
109
|
);
|
|
110
|
-
this._latestBlockNumber
|
|
110
|
+
this._latestBlockNumber += count;
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
public deleteLaterBlocks(block: Block): void {
|
|
114
|
-
const blockNumber =
|
|
114
|
+
const blockNumber = block.header.number;
|
|
115
115
|
const savedBlock = this._data.getBlockByNumber(blockNumber);
|
|
116
116
|
if (savedBlock === undefined || !savedBlock.hash().equals(block.hash())) {
|
|
117
117
|
throw new Error("Invalid block");
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
-
const nextBlockNumber = blockNumber
|
|
121
|
-
if (this._forkBlockNumber
|
|
120
|
+
const nextBlockNumber = blockNumber + 1n;
|
|
121
|
+
if (this._forkBlockNumber >= nextBlockNumber) {
|
|
122
122
|
throw new Error("Cannot delete remote block");
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
this._delBlock(nextBlockNumber);
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
-
public async getTotalDifficulty(blockHash: Buffer): Promise<
|
|
128
|
+
public async getTotalDifficulty(blockHash: Buffer): Promise<bigint> {
|
|
129
129
|
let td = this._data.getTotalDifficulty(blockHash);
|
|
130
130
|
if (td !== undefined) {
|
|
131
131
|
return td;
|
|
@@ -194,14 +194,14 @@ export class ForkBlockchain
|
|
|
194
194
|
}
|
|
195
195
|
|
|
196
196
|
public async getLogs(filterParams: FilterParams): Promise<RpcLogOutput[]> {
|
|
197
|
-
if (filterParams.fromBlock
|
|
197
|
+
if (filterParams.fromBlock <= this._forkBlockNumber) {
|
|
198
198
|
let toBlock = filterParams.toBlock;
|
|
199
199
|
let localLogs: RpcLogOutput[] = [];
|
|
200
|
-
if (toBlock
|
|
200
|
+
if (toBlock > this._forkBlockNumber) {
|
|
201
201
|
toBlock = this._forkBlockNumber;
|
|
202
202
|
localLogs = this._data.getLogs({
|
|
203
203
|
...filterParams,
|
|
204
|
-
fromBlock: this._forkBlockNumber
|
|
204
|
+
fromBlock: this._forkBlockNumber + 1n,
|
|
205
205
|
});
|
|
206
206
|
}
|
|
207
207
|
const remoteLogs = await this._jsonRpcClient.getLogs({
|
|
@@ -227,8 +227,8 @@ export class ForkBlockchain
|
|
|
227
227
|
return this._processRemoteBlock(rpcBlock);
|
|
228
228
|
}
|
|
229
229
|
|
|
230
|
-
private async _getBlockByNumber(blockNumber:
|
|
231
|
-
if (blockNumber
|
|
230
|
+
private async _getBlockByNumber(blockNumber: bigint) {
|
|
231
|
+
if (blockNumber > this._latestBlockNumber) {
|
|
232
232
|
return undefined;
|
|
233
233
|
}
|
|
234
234
|
const block = await super.getBlock(blockNumber);
|
|
@@ -247,19 +247,18 @@ export class ForkBlockchain
|
|
|
247
247
|
rpcBlock === null ||
|
|
248
248
|
rpcBlock.hash === null ||
|
|
249
249
|
rpcBlock.number === null ||
|
|
250
|
-
rpcBlock.number
|
|
250
|
+
rpcBlock.number > this._forkBlockNumber
|
|
251
251
|
) {
|
|
252
252
|
return undefined;
|
|
253
253
|
}
|
|
254
254
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
//
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
} else {
|
|
255
|
+
const forkNetworkId = this._jsonRpcClient.getNetworkId();
|
|
256
|
+
const common = new Common({ chain: forkNetworkId });
|
|
257
|
+
|
|
258
|
+
// We set the common's hardfork to Berlin if the remote block doesn't have
|
|
259
|
+
// EIP-1559 activated. The reason for this is that ethereumjs throws if we
|
|
260
|
+
// have a base fee for an older hardfork, and set a default one for London.
|
|
261
|
+
if (rpcBlock.baseFeePerGas === undefined) {
|
|
263
262
|
common.setHardfork("berlin");
|
|
264
263
|
}
|
|
265
264
|
|
|
@@ -275,21 +274,24 @@ export class ForkBlockchain
|
|
|
275
274
|
|
|
276
275
|
// We use freeze false here because we add the transactions manually
|
|
277
276
|
freeze: false,
|
|
277
|
+
|
|
278
|
+
// don't validate things like the size of `extraData` in the header
|
|
279
|
+
consensusFormatValidation: false,
|
|
278
280
|
});
|
|
279
281
|
|
|
280
282
|
for (const transaction of rpcBlock.transactions) {
|
|
281
283
|
let tx;
|
|
282
|
-
if (transaction.type === undefined || transaction.type
|
|
284
|
+
if (transaction.type === undefined || transaction.type === 0n) {
|
|
283
285
|
tx = new ReadOnlyValidTransaction(
|
|
284
286
|
new Address(transaction.from),
|
|
285
287
|
rpcToTxData(transaction)
|
|
286
288
|
);
|
|
287
|
-
} else if (transaction.type
|
|
289
|
+
} else if (transaction.type === 1n) {
|
|
288
290
|
tx = new ReadOnlyValidEIP2930Transaction(
|
|
289
291
|
new Address(transaction.from),
|
|
290
292
|
rpcToTxData(transaction)
|
|
291
293
|
);
|
|
292
|
-
} else if (transaction.type
|
|
294
|
+
} else if (transaction.type === 2n) {
|
|
293
295
|
tx = new ReadOnlyValidEIP1559Transaction(
|
|
294
296
|
new Address(transaction.from),
|
|
295
297
|
rpcToTxData(transaction) as FeeMarketEIP1559TxData
|
|
@@ -307,19 +309,19 @@ export class ForkBlockchain
|
|
|
307
309
|
return block;
|
|
308
310
|
}
|
|
309
311
|
|
|
310
|
-
protected _delBlock(blockNumber:
|
|
311
|
-
if (blockNumber
|
|
312
|
+
protected _delBlock(blockNumber: bigint): void {
|
|
313
|
+
if (blockNumber <= this._forkBlockNumber) {
|
|
312
314
|
throw new Error("Cannot delete remote block");
|
|
313
315
|
}
|
|
314
316
|
super._delBlock(blockNumber);
|
|
315
|
-
this._latestBlockNumber = blockNumber
|
|
317
|
+
this._latestBlockNumber = blockNumber - 1n;
|
|
316
318
|
}
|
|
317
319
|
|
|
318
320
|
private _processRemoteTransaction(rpcTransaction: RpcTransaction | null) {
|
|
319
321
|
if (
|
|
320
322
|
rpcTransaction === null ||
|
|
321
323
|
rpcTransaction.blockNumber === null ||
|
|
322
|
-
rpcTransaction.blockNumber
|
|
324
|
+
rpcTransaction.blockNumber > this._forkBlockNumber
|
|
323
325
|
) {
|
|
324
326
|
return undefined;
|
|
325
327
|
}
|
|
@@ -337,7 +339,7 @@ export class ForkBlockchain
|
|
|
337
339
|
private async _processRemoteReceipt(
|
|
338
340
|
txReceipt: RpcTransactionReceipt | null
|
|
339
341
|
): Promise<RpcReceiptOutput | undefined> {
|
|
340
|
-
if (txReceipt === null || txReceipt.blockNumber
|
|
342
|
+
if (txReceipt === null || txReceipt.blockNumber > this._forkBlockNumber) {
|
|
341
343
|
return undefined;
|
|
342
344
|
}
|
|
343
345
|
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { EIP2929StateManager } from "@ethereumjs/vm/dist/state/interface";
|
|
1
|
+
import { StateManager } from "@ignored/statemanager";
|
|
3
2
|
import {
|
|
4
3
|
Account,
|
|
4
|
+
bigIntToHex,
|
|
5
|
+
bufferToBigInt,
|
|
5
6
|
Address,
|
|
6
|
-
BN,
|
|
7
7
|
bufferToHex,
|
|
8
|
-
keccak256,
|
|
9
8
|
KECCAK256_NULL,
|
|
10
9
|
toBuffer,
|
|
11
10
|
unpadBuffer,
|
|
12
|
-
} from "
|
|
11
|
+
} from "@ignored/util";
|
|
12
|
+
import { keccak256 } from "ethereum-cryptography/keccak";
|
|
13
13
|
import { Map as ImmutableMap, Record as ImmutableRecord } from "immutable";
|
|
14
14
|
|
|
15
15
|
import { assertHardhatInvariant } from "../../../core/errors";
|
|
@@ -17,13 +17,13 @@ import { InternalError } from "../../../core/providers/errors";
|
|
|
17
17
|
import { JsonRpcClient } from "../../jsonrpc/client";
|
|
18
18
|
import { GenesisAccount } from "../node-types";
|
|
19
19
|
import { makeAccount } from "../utils/makeAccount";
|
|
20
|
+
import { randomHash } from "../utils/random";
|
|
20
21
|
|
|
21
22
|
import {
|
|
22
23
|
AccountState,
|
|
23
24
|
makeAccountState,
|
|
24
25
|
makeEmptyAccountState,
|
|
25
26
|
} from "./AccountState";
|
|
26
|
-
import { randomHash } from "./random";
|
|
27
27
|
|
|
28
28
|
const encodeStorageKey = (address: Buffer, position: Buffer): string => {
|
|
29
29
|
return `${address.toString("hex")}${unpadBuffer(position).toString("hex")}`;
|
|
@@ -42,14 +42,14 @@ const notCheckpointedError = (method: string) =>
|
|
|
42
42
|
const notSupportedError = (method: string) =>
|
|
43
43
|
new Error(`${method} is not supported when forking from remote network`);
|
|
44
44
|
|
|
45
|
-
export class ForkStateManager implements
|
|
45
|
+
export class ForkStateManager implements StateManager {
|
|
46
46
|
private _state: State = ImmutableMap<string, ImmutableRecord<AccountState>>();
|
|
47
47
|
private _initialStateRoot: string = randomHash();
|
|
48
48
|
private _stateRoot: string = this._initialStateRoot;
|
|
49
49
|
private _stateRootToState: Map<string, State> = new Map();
|
|
50
50
|
private _originalStorageCache: Map<string, Buffer> = new Map();
|
|
51
51
|
private _stateCheckpoints: string[] = [];
|
|
52
|
-
private _contextBlockNumber = this._forkBlockNumber
|
|
52
|
+
private _contextBlockNumber = this._forkBlockNumber;
|
|
53
53
|
private _contextChanged = false;
|
|
54
54
|
|
|
55
55
|
// used by the DefaultStateManager calls
|
|
@@ -60,7 +60,7 @@ export class ForkStateManager implements EIP2929StateManager {
|
|
|
60
60
|
|
|
61
61
|
constructor(
|
|
62
62
|
private readonly _jsonRpcClient: JsonRpcClient,
|
|
63
|
-
private readonly _forkBlockNumber:
|
|
63
|
+
private readonly _forkBlockNumber: bigint
|
|
64
64
|
) {
|
|
65
65
|
this._state = ImmutableMap<string, ImmutableRecord<AccountState>>();
|
|
66
66
|
|
|
@@ -69,7 +69,7 @@ export class ForkStateManager implements EIP2929StateManager {
|
|
|
69
69
|
|
|
70
70
|
public async initializeGenesisAccounts(genesisAccounts: GenesisAccount[]) {
|
|
71
71
|
const accounts: Array<{ address: Address; account: Account }> = [];
|
|
72
|
-
const noncesPromises: Array<Promise<
|
|
72
|
+
const noncesPromises: Array<Promise<bigint>> = [];
|
|
73
73
|
|
|
74
74
|
for (const ga of genesisAccounts) {
|
|
75
75
|
const account = makeAccount(ga);
|
|
@@ -118,10 +118,10 @@ export class ForkStateManager implements EIP2929StateManager {
|
|
|
118
118
|
const localBalance = localAccount?.get("balance");
|
|
119
119
|
const localCode = localAccount?.get("code");
|
|
120
120
|
|
|
121
|
-
let nonce: Buffer |
|
|
121
|
+
let nonce: Buffer | bigint | undefined =
|
|
122
122
|
localNonce !== undefined ? toBuffer(localNonce) : undefined;
|
|
123
123
|
|
|
124
|
-
let balance: Buffer |
|
|
124
|
+
let balance: Buffer | bigint | undefined =
|
|
125
125
|
localBalance !== undefined ? toBuffer(localBalance) : undefined;
|
|
126
126
|
|
|
127
127
|
let code: Buffer | undefined =
|
|
@@ -205,7 +205,7 @@ export class ForkStateManager implements EIP2929StateManager {
|
|
|
205
205
|
|
|
206
206
|
const remoteValue = await this._jsonRpcClient.getStorageAt(
|
|
207
207
|
address,
|
|
208
|
-
|
|
208
|
+
bufferToBigInt(key),
|
|
209
209
|
this._contextBlockNumber
|
|
210
210
|
);
|
|
211
211
|
|
|
@@ -266,15 +266,6 @@ export class ForkStateManager implements EIP2929StateManager {
|
|
|
266
266
|
throw notCheckpointedError("commit");
|
|
267
267
|
}
|
|
268
268
|
this._stateCheckpoints.pop();
|
|
269
|
-
|
|
270
|
-
const storageMap = this._accessedStorage.pop();
|
|
271
|
-
if (storageMap !== undefined) {
|
|
272
|
-
(DefaultStateManager.prototype as any)._accessedStorageMerge.call(
|
|
273
|
-
this,
|
|
274
|
-
this._accessedStorage,
|
|
275
|
-
storageMap
|
|
276
|
-
);
|
|
277
|
-
}
|
|
278
269
|
}
|
|
279
270
|
|
|
280
271
|
public async revert(): Promise<void> {
|
|
@@ -323,8 +314,8 @@ export class ForkStateManager implements EIP2929StateManager {
|
|
|
323
314
|
// From https://eips.ethereum.org/EIPS/eip-161
|
|
324
315
|
// An account is considered empty when it has no code and zero nonce and zero balance.
|
|
325
316
|
return (
|
|
326
|
-
|
|
327
|
-
|
|
317
|
+
account.nonce === 0n &&
|
|
318
|
+
account.balance === 0n &&
|
|
328
319
|
account.codeHash.equals(KECCAK256_NULL)
|
|
329
320
|
);
|
|
330
321
|
}
|
|
@@ -337,7 +328,7 @@ export class ForkStateManager implements EIP2929StateManager {
|
|
|
337
328
|
|
|
338
329
|
public setBlockContext(
|
|
339
330
|
stateRoot: Buffer,
|
|
340
|
-
blockNumber:
|
|
331
|
+
blockNumber: bigint,
|
|
341
332
|
irregularState?: Buffer
|
|
342
333
|
) {
|
|
343
334
|
if (this._stateCheckpoints.length !== 0) {
|
|
@@ -349,11 +340,11 @@ export class ForkStateManager implements EIP2929StateManager {
|
|
|
349
340
|
return;
|
|
350
341
|
}
|
|
351
342
|
|
|
352
|
-
if (blockNumber
|
|
343
|
+
if (blockNumber === this._forkBlockNumber) {
|
|
353
344
|
this._setStateRoot(toBuffer(this._initialStateRoot));
|
|
354
345
|
return;
|
|
355
346
|
}
|
|
356
|
-
if (blockNumber
|
|
347
|
+
if (blockNumber > this._forkBlockNumber) {
|
|
357
348
|
this._setStateRoot(stateRoot);
|
|
358
349
|
return;
|
|
359
350
|
}
|
|
@@ -411,45 +402,14 @@ export class ForkStateManager implements EIP2929StateManager {
|
|
|
411
402
|
return value;
|
|
412
403
|
}
|
|
413
404
|
|
|
414
|
-
// the following methods are copied verbatim from
|
|
415
|
-
// DefaultStateManager
|
|
416
|
-
|
|
417
|
-
public isWarmedAddress(address: Buffer): boolean {
|
|
418
|
-
return DefaultStateManager.prototype.isWarmedAddress.call(this, address);
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
public addWarmedAddress(address: Buffer): void {
|
|
422
|
-
return DefaultStateManager.prototype.addWarmedAddress.call(this, address);
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
public isWarmedStorage(address: Buffer, slot: Buffer): boolean {
|
|
426
|
-
return DefaultStateManager.prototype.isWarmedStorage.call(
|
|
427
|
-
this,
|
|
428
|
-
address,
|
|
429
|
-
slot
|
|
430
|
-
);
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
public addWarmedStorage(address: Buffer, slot: Buffer): void {
|
|
434
|
-
return DefaultStateManager.prototype.addWarmedStorage.call(
|
|
435
|
-
this,
|
|
436
|
-
address,
|
|
437
|
-
slot
|
|
438
|
-
);
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
public clearWarmedAccounts(): void {
|
|
442
|
-
return DefaultStateManager.prototype.clearWarmedAccounts.call(this);
|
|
443
|
-
}
|
|
444
|
-
|
|
445
405
|
private _putAccount(address: Address, account: Account): void {
|
|
446
406
|
// Because the vm only ever modifies the nonce, balance and codeHash using this
|
|
447
407
|
// method we ignore the stateRoot property
|
|
448
408
|
const hexAddress = address.toString();
|
|
449
409
|
let localAccount = this._state.get(hexAddress) ?? makeAccountState();
|
|
450
410
|
localAccount = localAccount
|
|
451
|
-
.set("nonce",
|
|
452
|
-
.set("balance",
|
|
411
|
+
.set("nonce", bigIntToHex(account.nonce))
|
|
412
|
+
.set("balance", bigIntToHex(account.balance));
|
|
453
413
|
|
|
454
414
|
// Code is set to empty string here to prevent unnecessary
|
|
455
415
|
// JsonRpcClient.getCode calls in getAccount method
|
|
@@ -468,4 +428,19 @@ export class ForkStateManager implements EIP2929StateManager {
|
|
|
468
428
|
this._stateRoot = newRoot;
|
|
469
429
|
this._state = state;
|
|
470
430
|
}
|
|
431
|
+
|
|
432
|
+
public async hasStateRoot(root: Buffer): Promise<boolean> {
|
|
433
|
+
return this._state.has(bufferToHex(root));
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
public async flush(): Promise<void> {
|
|
437
|
+
// not implemented
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
public async modifyAccountFields(
|
|
441
|
+
_address: Address,
|
|
442
|
+
_accountFields: any
|
|
443
|
+
): Promise<void> {
|
|
444
|
+
// not implemented
|
|
445
|
+
}
|
|
471
446
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BlockData } from "@
|
|
1
|
+
import { BlockData } from "@ignored/block";
|
|
2
2
|
|
|
3
3
|
import { RpcBlockWithTransactions } from "../../../core/jsonrpc/types/output/block";
|
|
4
4
|
|
|
@@ -13,7 +13,7 @@ export function rpcToBlockData(rpcBlock: RpcBlockWithTransactions): BlockData {
|
|
|
13
13
|
stateRoot: rpcBlock.stateRoot,
|
|
14
14
|
transactionsTrie: rpcBlock.transactionsRoot,
|
|
15
15
|
receiptTrie: rpcBlock.receiptsRoot,
|
|
16
|
-
|
|
16
|
+
logsBloom: rpcBlock.logsBloom,
|
|
17
17
|
difficulty: rpcBlock.difficulty,
|
|
18
18
|
number: rpcBlock.number ?? undefined,
|
|
19
19
|
gasLimit: rpcBlock.gasLimit,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { AccessListEIP2930TxData, TxData } from "@
|
|
1
|
+
import { AccessListEIP2930TxData, TxData } from "@ignored/tx";
|
|
2
2
|
|
|
3
|
-
import { FeeMarketEIP1559TxData } from "@
|
|
3
|
+
import { FeeMarketEIP1559TxData } from "@ignored/tx/dist/types";
|
|
4
4
|
import { RpcTransaction } from "../../../core/jsonrpc/types/output/transaction";
|
|
5
5
|
|
|
6
6
|
export function rpcToTxData(
|
|
7
7
|
rpcTransaction: RpcTransaction
|
|
8
8
|
): TxData | AccessListEIP2930TxData | FeeMarketEIP1559TxData {
|
|
9
|
-
const isEip1559 = rpcTransaction.type
|
|
9
|
+
const isEip1559 = rpcTransaction.type === 2n;
|
|
10
10
|
|
|
11
11
|
return {
|
|
12
12
|
gasLimit: rpcTransaction.gas,
|