hardhat 2.7.0 → 2.8.1
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/builtin-tasks/check.js +1 -1
- package/builtin-tasks/check.js.map +1 -1
- package/builtin-tasks/clean.js +3 -3
- package/builtin-tasks/clean.js.map +1 -1
- package/builtin-tasks/compile.js +48 -48
- package/builtin-tasks/compile.js.map +1 -1
- package/builtin-tasks/console.js +3 -3
- package/builtin-tasks/console.js.map +1 -1
- package/builtin-tasks/flatten.js +8 -6
- package/builtin-tasks/flatten.js.map +1 -1
- package/builtin-tasks/help.js +2 -2
- package/builtin-tasks/help.js.map +1 -1
- package/builtin-tasks/node.js +19 -13
- package/builtin-tasks/node.js.map +1 -1
- package/builtin-tasks/run.js +11 -7
- package/builtin-tasks/run.js.map +1 -1
- package/builtin-tasks/test.js +12 -11
- package/builtin-tasks/test.js.map +1 -1
- package/builtin-tasks/utils/solidity-files-cache.js +1 -1
- package/builtin-tasks/utils/solidity-files-cache.js.map +1 -1
- package/builtin-tasks/utils/watch.d.ts.map +1 -1
- package/builtin-tasks/utils/watch.js +4 -2
- package/builtin-tasks/utils/watch.js.map +1 -1
- package/internal/artifacts.js +17 -17
- package/internal/artifacts.js.map +1 -1
- package/internal/cli/analytics.js +10 -9
- package/internal/cli/analytics.js.map +1 -1
- package/internal/cli/autocomplete.js +7 -7
- package/internal/cli/autocomplete.js.map +1 -1
- package/internal/cli/bootstrap.js +2 -2
- package/internal/cli/bootstrap.js.map +1 -1
- package/internal/cli/cli.js +18 -16
- package/internal/cli/cli.js.map +1 -1
- package/internal/cli/project-creation.js +14 -14
- package/internal/cli/project-creation.js.map +1 -1
- package/internal/constants.d.ts.map +1 -1
- package/internal/constants.js +1 -0
- package/internal/constants.js.map +1 -1
- package/internal/context.d.ts +1 -2
- package/internal/context.d.ts.map +1 -1
- package/internal/context.js +3 -3
- package/internal/context.js.map +1 -1
- package/internal/core/config/config-loading.d.ts +3 -2
- package/internal/core/config/config-loading.d.ts.map +1 -1
- package/internal/core/config/config-loading.js +25 -8
- 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 +29 -12
- package/internal/core/config/config-resolution.js.map +1 -1
- package/internal/core/config/config-validation.d.ts.map +1 -1
- package/internal/core/config/config-validation.js +68 -30
- 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 +59 -1
- package/internal/core/config/default-config.js.map +1 -1
- package/internal/core/errors.js +3 -3
- 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/jsonrpc/types/access-list.d.ts +0 -1
- package/internal/core/jsonrpc/types/access-list.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/access-list.js +1 -1
- package/internal/core/jsonrpc/types/access-list.js.map +1 -1
- package/internal/core/jsonrpc/types/base-types.js +9 -9
- package/internal/core/jsonrpc/types/base-types.js.map +1 -1
- package/internal/core/jsonrpc/types/input/blockTag.d.ts +3 -4
- package/internal/core/jsonrpc/types/input/blockTag.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/input/blockTag.js +3 -3
- package/internal/core/jsonrpc/types/input/blockTag.js.map +1 -1
- package/internal/core/jsonrpc/types/input/callRequest.d.ts +0 -1
- package/internal/core/jsonrpc/types/input/callRequest.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/input/callRequest.js +9 -9
- package/internal/core/jsonrpc/types/input/callRequest.js.map +1 -1
- package/internal/core/jsonrpc/types/input/debugTraceTransaction.js +4 -4
- package/internal/core/jsonrpc/types/input/debugTraceTransaction.js.map +1 -1
- package/internal/core/jsonrpc/types/input/filterRequest.d.ts +0 -1
- package/internal/core/jsonrpc/types/input/filterRequest.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/input/filterRequest.js +2 -2
- package/internal/core/jsonrpc/types/input/filterRequest.js.map +1 -1
- package/internal/core/jsonrpc/types/input/hardhat-network.js +4 -4
- package/internal/core/jsonrpc/types/input/hardhat-network.js.map +1 -1
- package/internal/core/jsonrpc/types/input/logAddress.js +1 -1
- package/internal/core/jsonrpc/types/input/logAddress.js.map +1 -1
- package/internal/core/jsonrpc/types/input/logTopics.js +1 -1
- package/internal/core/jsonrpc/types/input/logTopics.js.map +1 -1
- package/internal/core/jsonrpc/types/input/transactionRequest.d.ts +0 -1
- package/internal/core/jsonrpc/types/input/transactionRequest.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/input/transactionRequest.js +10 -10
- package/internal/core/jsonrpc/types/input/transactionRequest.js.map +1 -1
- package/internal/core/jsonrpc/types/output/block.d.ts +0 -1
- package/internal/core/jsonrpc/types/output/block.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/output/block.js +5 -5
- package/internal/core/jsonrpc/types/output/block.js.map +1 -1
- package/internal/core/jsonrpc/types/output/log.d.ts +0 -1
- package/internal/core/jsonrpc/types/output/log.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/output/log.js +5 -5
- package/internal/core/jsonrpc/types/output/log.js.map +1 -1
- package/internal/core/jsonrpc/types/output/receipt.d.ts +0 -1
- package/internal/core/jsonrpc/types/output/receipt.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/output/receipt.js +6 -6
- package/internal/core/jsonrpc/types/output/receipt.js.map +1 -1
- package/internal/core/jsonrpc/types/output/transaction.d.ts +0 -1
- package/internal/core/jsonrpc/types/output/transaction.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/output/transaction.js +9 -9
- package/internal/core/jsonrpc/types/output/transaction.js.map +1 -1
- package/internal/core/params/argumentTypes.d.ts.map +1 -1
- package/internal/core/params/argumentTypes.js +25 -13
- package/internal/core/params/argumentTypes.js.map +1 -1
- package/internal/core/params/env-variables.d.ts.map +1 -1
- package/internal/core/params/env-variables.js +9 -5
- package/internal/core/params/env-variables.js.map +1 -1
- package/internal/core/project-structure.js +1 -1
- package/internal/core/project-structure.js.map +1 -1
- package/internal/core/providers/accounts.d.ts.map +1 -1
- package/internal/core/providers/accounts.js +9 -8
- package/internal/core/providers/accounts.js.map +1 -1
- package/internal/core/providers/backwards-compatibility.js.map +1 -1
- package/internal/core/providers/chainId.js +3 -3
- 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 +4 -4
- package/internal/core/providers/construction.js.map +1 -1
- package/internal/core/providers/gas-providers.d.ts.map +1 -1
- package/internal/core/providers/gas-providers.js +19 -17
- package/internal/core/providers/gas-providers.js.map +1 -1
- package/internal/core/providers/http.js +1 -1
- package/internal/core/providers/http.js.map +1 -1
- package/internal/core/providers/util.js +1 -1
- package/internal/core/providers/util.js.map +1 -1
- package/internal/core/providers/wrapper.d.ts.map +1 -1
- package/internal/core/runtime-environment.d.ts.map +1 -1
- package/internal/core/runtime-environment.js +7 -5
- package/internal/core/runtime-environment.js.map +1 -1
- package/internal/core/typescript-support.js +4 -4
- package/internal/core/typescript-support.js.map +1 -1
- package/internal/hardhat-network/jsonrpc/client.js +23 -23
- package/internal/hardhat-network/jsonrpc/client.js.map +1 -1
- package/internal/hardhat-network/jsonrpc/handler.d.ts +1 -1
- package/internal/hardhat-network/jsonrpc/handler.d.ts.map +1 -1
- package/internal/hardhat-network/jsonrpc/handler.js +18 -9
- package/internal/hardhat-network/jsonrpc/handler.js.map +1 -1
- package/internal/hardhat-network/jsonrpc/server.js +3 -3
- package/internal/hardhat-network/jsonrpc/server.js.map +1 -1
- package/internal/hardhat-network/provider/BlockchainData.d.ts +1 -1
- package/internal/hardhat-network/provider/BlockchainData.js +12 -12
- package/internal/hardhat-network/provider/BlockchainData.js.map +1 -1
- package/internal/hardhat-network/provider/HardhatBlockchain.js +2 -2
- package/internal/hardhat-network/provider/HardhatBlockchain.js.map +1 -1
- package/internal/hardhat-network/provider/PoolState.js +6 -6
- package/internal/hardhat-network/provider/PoolState.js.map +1 -1
- package/internal/hardhat-network/provider/TxPool.js +19 -19
- package/internal/hardhat-network/provider/TxPool.js.map +1 -1
- package/internal/hardhat-network/provider/filter.js +3 -3
- package/internal/hardhat-network/provider/filter.js.map +1 -1
- package/internal/hardhat-network/provider/fork/AccountState.js +4 -4
- package/internal/hardhat-network/provider/fork/AccountState.js.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkBlockchain.js +7 -7
- package/internal/hardhat-network/provider/fork/ForkBlockchain.js.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkStateManager.js +34 -34
- package/internal/hardhat-network/provider/fork/ForkStateManager.js.map +1 -1
- package/internal/hardhat-network/provider/fork/random.d.ts +0 -1
- package/internal/hardhat-network/provider/fork/random.d.ts.map +1 -1
- package/internal/hardhat-network/provider/fork/random.js +13 -8
- package/internal/hardhat-network/provider/fork/random.js.map +1 -1
- package/internal/hardhat-network/provider/fork/rpcToBlockData.js +1 -0
- package/internal/hardhat-network/provider/fork/rpcToBlockData.js.map +1 -1
- package/internal/hardhat-network/provider/fork/rpcToTxData.js.map +1 -1
- package/internal/hardhat-network/provider/modules/debug.js +1 -1
- package/internal/hardhat-network/provider/modules/debug.js.map +1 -1
- package/internal/hardhat-network/provider/modules/eth.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/eth.js +86 -84
- package/internal/hardhat-network/provider/modules/eth.js.map +1 -1
- package/internal/hardhat-network/provider/modules/evm.js +9 -9
- package/internal/hardhat-network/provider/modules/evm.js.map +1 -1
- package/internal/hardhat-network/provider/modules/hardhat.js +16 -16
- package/internal/hardhat-network/provider/modules/hardhat.js.map +1 -1
- package/internal/hardhat-network/provider/modules/logger.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/logger.js +30 -25
- package/internal/hardhat-network/provider/modules/logger.js.map +1 -1
- package/internal/hardhat-network/provider/modules/net.js +2 -2
- package/internal/hardhat-network/provider/modules/net.js.map +1 -1
- package/internal/hardhat-network/provider/modules/personal.js +2 -2
- package/internal/hardhat-network/provider/modules/personal.js.map +1 -1
- package/internal/hardhat-network/provider/modules/web3.js +4 -4
- package/internal/hardhat-network/provider/modules/web3.js.map +1 -1
- package/internal/hardhat-network/provider/node-types.d.ts +2 -1
- package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
- package/internal/hardhat-network/provider/node.d.ts +7 -1
- package/internal/hardhat-network/provider/node.d.ts.map +1 -1
- package/internal/hardhat-network/provider/node.js +141 -76
- package/internal/hardhat-network/provider/node.js.map +1 -1
- package/internal/hardhat-network/provider/output.js +87 -87
- package/internal/hardhat-network/provider/output.js.map +1 -1
- package/internal/hardhat-network/provider/provider.d.ts +3 -2
- package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
- package/internal/hardhat-network/provider/provider.js +5 -3
- package/internal/hardhat-network/provider/provider.js.map +1 -1
- package/internal/hardhat-network/provider/return-data.js +4 -4
- package/internal/hardhat-network/provider/return-data.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/utils/bnToHex.js +1 -1
- package/internal/hardhat-network/provider/utils/bnToHex.js.map +1 -1
- package/internal/hardhat-network/provider/utils/fork-recomendations-banner.js.map +1 -1
- package/internal/hardhat-network/provider/utils/makeAccount.js +4 -4
- package/internal/hardhat-network/provider/utils/makeAccount.js.map +1 -1
- package/internal/hardhat-network/provider/utils/makeCommon.d.ts +1 -2
- package/internal/hardhat-network/provider/utils/makeCommon.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/makeCommon.js +4 -4
- package/internal/hardhat-network/provider/utils/makeCommon.js.map +1 -1
- package/internal/hardhat-network/provider/utils/makeForkClient.js +4 -4
- package/internal/hardhat-network/provider/utils/makeForkClient.js.map +1 -1
- package/internal/hardhat-network/provider/utils/makeStateTrie.js +1 -1
- package/internal/hardhat-network/provider/utils/makeStateTrie.js.map +1 -1
- package/internal/hardhat-network/provider/utils/txMapToArray.js +1 -1
- package/internal/hardhat-network/provider/utils/txMapToArray.js.map +1 -1
- package/internal/hardhat-network/stack-traces/compiler-to-model.js +4 -4
- package/internal/hardhat-network/stack-traces/compiler-to-model.js.map +1 -1
- package/internal/hardhat-network/stack-traces/consoleLogger.js +44 -44
- package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
- package/internal/hardhat-network/stack-traces/contracts-identifier.js +6 -6
- package/internal/hardhat-network/stack-traces/contracts-identifier.js.map +1 -1
- package/internal/hardhat-network/stack-traces/debug.js +17 -17
- package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
- package/internal/hardhat-network/stack-traces/error-inferrer.js +28 -28
- package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
- package/internal/hardhat-network/stack-traces/mapped-inlined-internal-functions-heuristics.js +3 -3
- package/internal/hardhat-network/stack-traces/mapped-inlined-internal-functions-heuristics.js.map +1 -1
- package/internal/hardhat-network/stack-traces/model.js +5 -5
- package/internal/hardhat-network/stack-traces/model.js.map +1 -1
- package/internal/hardhat-network/stack-traces/solidity-errors.js +3 -3
- package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
- package/internal/hardhat-network/stack-traces/solidityTracer.js +10 -10
- package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
- package/internal/hardhat-network/stack-traces/source-maps.js +7 -7
- package/internal/hardhat-network/stack-traces/source-maps.js.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-debug-tracer.js +5 -5
- package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-trace-decoder.js +2 -2
- package/internal/hardhat-network/stack-traces/vm-trace-decoder.js.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-tracer.js +3 -3
- package/internal/hardhat-network/stack-traces/vm-tracer.js.map +1 -1
- package/internal/lib/hardhat-lib.js +3 -3
- package/internal/lib/hardhat-lib.js.map +1 -1
- package/internal/reset.js +1 -1
- package/internal/reset.js.map +1 -1
- package/internal/sentry/anonymizer.js.map +1 -1
- package/internal/sentry/reporter.js +5 -5
- package/internal/sentry/reporter.js.map +1 -1
- package/internal/sentry/subprocess.js +2 -2
- package/internal/sentry/subprocess.js.map +1 -1
- package/internal/sentry/transport.js +1 -1
- package/internal/sentry/transport.js.map +1 -1
- package/internal/solidity/compilation-job.js +4 -4
- package/internal/solidity/compilation-job.js.map +1 -1
- package/internal/solidity/compiler/downloader.d.ts +1 -1
- package/internal/solidity/compiler/downloader.d.ts.map +1 -1
- package/internal/solidity/compiler/downloader.js +21 -7
- package/internal/solidity/compiler/downloader.js.map +1 -1
- package/internal/solidity/compiler/index.js +1 -1
- package/internal/solidity/compiler/index.js.map +1 -1
- package/internal/solidity/dependencyGraph.js +2 -1
- package/internal/solidity/dependencyGraph.js.map +1 -1
- package/internal/solidity/parse.js +3 -2
- package/internal/solidity/parse.js.map +1 -1
- package/internal/solidity/resolver.js +10 -10
- 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/download.d.ts.map +1 -1
- package/internal/util/download.js +12 -1
- package/internal/util/download.js.map +1 -1
- package/internal/util/global-dir.js +1 -1
- package/internal/util/global-dir.js.map +1 -1
- package/internal/util/hardforks.d.ts +2 -1
- package/internal/util/hardforks.d.ts.map +1 -1
- package/internal/util/hardforks.js +3 -1
- 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/packageInfo.js +1 -1
- package/internal/util/packageInfo.js.map +1 -1
- package/internal/util/scripts-runner.js +3 -3
- package/internal/util/scripts-runner.js.map +1 -1
- package/package.json +14 -14
- package/register.js +7 -7
- package/register.js.map +1 -1
- package/src/builtin-tasks/flatten.ts +4 -2
- package/src/builtin-tasks/node.ts +15 -8
- package/src/builtin-tasks/run.ts +13 -8
- package/src/builtin-tasks/test.ts +2 -0
- package/src/builtin-tasks/utils/watch.ts +3 -1
- package/src/internal/artifacts.ts +3 -3
- package/src/internal/cli/autocomplete.ts +3 -3
- package/src/internal/cli/bootstrap.ts +1 -1
- package/src/internal/cli/cli.ts +4 -1
- package/src/internal/cli/project-creation.ts +3 -3
- package/src/internal/constants.ts +1 -0
- package/src/internal/context.ts +1 -1
- package/src/internal/core/config/config-loading.ts +33 -3
- package/src/internal/core/config/config-resolution.ts +33 -3
- package/src/internal/core/config/config-validation.ts +70 -0
- package/src/internal/core/config/default-config.ts +59 -1
- package/src/internal/core/execution-mode.ts +1 -1
- package/src/internal/core/params/argumentTypes.ts +40 -25
- package/src/internal/core/params/env-variables.ts +13 -8
- package/src/internal/core/providers/accounts.ts +4 -3
- package/src/internal/core/providers/backwards-compatibility.ts +1 -1
- package/src/internal/core/providers/chainId.ts +1 -1
- package/src/internal/core/providers/construction.ts +1 -0
- package/src/internal/core/providers/gas-providers.ts +6 -4
- package/src/internal/core/providers/http.ts +1 -1
- package/src/internal/core/providers/wrapper.ts +1 -1
- package/src/internal/core/runtime-environment.ts +3 -1
- package/src/internal/core/typescript-support.ts +2 -2
- package/src/internal/hardhat-network/jsonrpc/client.ts +2 -2
- package/src/internal/hardhat-network/jsonrpc/handler.ts +13 -3
- package/src/internal/hardhat-network/jsonrpc/server.ts +3 -3
- package/src/internal/hardhat-network/provider/TxPool.ts +1 -1
- package/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts +1 -1
- package/src/internal/hardhat-network/provider/modules/eth.ts +23 -21
- package/src/internal/hardhat-network/provider/modules/hardhat.ts +1 -1
- package/src/internal/hardhat-network/provider/modules/logger.ts +13 -9
- package/src/internal/hardhat-network/provider/node-types.ts +2 -1
- package/src/internal/hardhat-network/provider/node.ts +149 -31
- package/src/internal/hardhat-network/provider/provider.ts +4 -1
- package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts +1 -1
- package/src/internal/hardhat-network/provider/utils/makeCommon.ts +2 -2
- package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +3 -3
- package/src/internal/reset.ts +1 -1
- package/src/internal/sentry/subprocess.ts +2 -2
- package/src/internal/solidity/compiler/downloader.ts +27 -12
- package/src/internal/solidity/resolver.ts +1 -1
- package/src/internal/util/abi-helpers.ts +1 -1
- package/src/internal/util/download.ts +17 -1
- package/src/internal/util/hardforks.ts +2 -0
- package/src/internal/util/jsonrpc.ts +1 -1
- package/src/internal/util/packageInfo.ts +1 -1
- package/src/internal/util/scripts-runner.ts +1 -1
- package/src/types/config.ts +28 -0
- package/src/utils/source-names.ts +13 -11
- package/types/config.d.ts +16 -0
- package/types/config.d.ts.map +1 -1
- package/utils/source-names.js +7 -5
- package/utils/source-names.js.map +1 -1
- package/CHANGELOG.md +0 -71
- package/internal/hardhat-network/provider/HardhatStateManager.d.ts +0 -50
- package/internal/hardhat-network/provider/HardhatStateManager.d.ts.map +0 -1
- package/internal/hardhat-network/provider/HardhatStateManager.js +0 -249
- package/internal/hardhat-network/provider/HardhatStateManager.js.map +0 -1
- package/src/internal/hardhat-network/provider/HardhatStateManager.ts +0 -349
|
@@ -41,13 +41,13 @@ export function isTypescriptSupported() {
|
|
|
41
41
|
export function loadTsNode(tsConfigPath?: string) {
|
|
42
42
|
try {
|
|
43
43
|
require.resolve("typescript");
|
|
44
|
-
} catch
|
|
44
|
+
} catch {
|
|
45
45
|
throw new HardhatError(ERRORS.GENERAL.TYPESCRIPT_NOT_INSTALLED);
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
try {
|
|
49
49
|
require.resolve("ts-node");
|
|
50
|
-
} catch
|
|
50
|
+
} catch {
|
|
51
51
|
throw new HardhatError(ERRORS.GENERAL.TS_NODE_NOT_INSTALLED);
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -317,7 +317,7 @@ export class JsonRpcClient {
|
|
|
317
317
|
): Promise<any> {
|
|
318
318
|
try {
|
|
319
319
|
return await this._httpProvider.request({ method, params });
|
|
320
|
-
} catch (err) {
|
|
320
|
+
} catch (err: any) {
|
|
321
321
|
if (this._shouldRetry(isRetryCall, err)) {
|
|
322
322
|
return this._send(method, params, true);
|
|
323
323
|
}
|
|
@@ -429,7 +429,7 @@ export class JsonRpcClient {
|
|
|
429
429
|
encoding: "utf8",
|
|
430
430
|
}
|
|
431
431
|
);
|
|
432
|
-
} catch (error) {
|
|
432
|
+
} catch (error: any) {
|
|
433
433
|
if (error.code === "ENOENT") {
|
|
434
434
|
return undefined;
|
|
435
435
|
}
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
|
|
21
21
|
/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */
|
|
22
22
|
|
|
23
|
-
export
|
|
23
|
+
export class JsonRpcHandler {
|
|
24
24
|
constructor(private readonly _provider: EIP1193Provider) {}
|
|
25
25
|
|
|
26
26
|
public handleHttp = async (req: IncomingMessage, res: ServerResponse) => {
|
|
@@ -207,7 +207,12 @@ const _readJsonHttpRequest = async (req: IncomingMessage): Promise<any> => {
|
|
|
207
207
|
|
|
208
208
|
json = JSON.parse(text);
|
|
209
209
|
} catch (error) {
|
|
210
|
-
|
|
210
|
+
if (error instanceof Error) {
|
|
211
|
+
throw new InvalidJsonInputError(`Parse error: ${error.message}`);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
|
|
215
|
+
throw error;
|
|
211
216
|
}
|
|
212
217
|
|
|
213
218
|
return json;
|
|
@@ -218,7 +223,12 @@ const _readWsRequest = (msg: string): JsonRpcRequest => {
|
|
|
218
223
|
try {
|
|
219
224
|
json = JSON.parse(msg);
|
|
220
225
|
} catch (error) {
|
|
221
|
-
|
|
226
|
+
if (error instanceof Error) {
|
|
227
|
+
throw new InvalidJsonInputError(`Parse error: ${error.message}`);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
|
|
231
|
+
throw error;
|
|
222
232
|
}
|
|
223
233
|
|
|
224
234
|
return json;
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
} from "../../../types";
|
|
10
10
|
import { HttpProvider } from "../../core/providers/http";
|
|
11
11
|
|
|
12
|
-
import JsonRpcHandler from "./handler";
|
|
12
|
+
import { JsonRpcHandler } from "./handler";
|
|
13
13
|
|
|
14
14
|
const log = debug("hardhat:core:hardhat-network:jsonrpc");
|
|
15
15
|
|
|
@@ -72,7 +72,7 @@ export class JsonRpcServer implements IJsonRpcServer {
|
|
|
72
72
|
|
|
73
73
|
public close = async () => {
|
|
74
74
|
await Promise.all([
|
|
75
|
-
new Promise((resolve, reject) => {
|
|
75
|
+
new Promise<void>((resolve, reject) => {
|
|
76
76
|
log("Closing JSON-RPC server");
|
|
77
77
|
this._httpServer.close((err) => {
|
|
78
78
|
if (err !== null && err !== undefined) {
|
|
@@ -85,7 +85,7 @@ export class JsonRpcServer implements IJsonRpcServer {
|
|
|
85
85
|
resolve();
|
|
86
86
|
});
|
|
87
87
|
}),
|
|
88
|
-
new Promise((resolve, reject) => {
|
|
88
|
+
new Promise<void>((resolve, reject) => {
|
|
89
89
|
log("Closing websocket server");
|
|
90
90
|
this._wsServer.close((err) => {
|
|
91
91
|
if (err !== null && err !== undefined) {
|
|
@@ -332,7 +332,7 @@ export class TxPool {
|
|
|
332
332
|
private _getSenderAddress(tx: TypedTransaction): Address {
|
|
333
333
|
try {
|
|
334
334
|
return tx.getSenderAddress(); // verifies signature
|
|
335
|
-
} catch (e) {
|
|
335
|
+
} catch (e: any) {
|
|
336
336
|
if (!tx.isSigned()) {
|
|
337
337
|
throw new InvalidInputError("Invalid Signature");
|
|
338
338
|
}
|
|
@@ -272,7 +272,7 @@ export class ForkBlockchain implements HardhatBlockchainInterface {
|
|
|
272
272
|
// one for London.
|
|
273
273
|
const common = this._common.copy();
|
|
274
274
|
if (rpcBlock.baseFeePerGas !== undefined) {
|
|
275
|
-
common.setHardfork("london");
|
|
275
|
+
common.setHardfork("london"); // TODO: consider changing this to "latest hardfork"
|
|
276
276
|
} else {
|
|
277
277
|
common.setHardfork("berlin");
|
|
278
278
|
}
|
|
@@ -959,29 +959,31 @@ export class EthModule {
|
|
|
959
959
|
// AccessListEIP2930Transaction.fromSerializedTx and Transaction.fromSerializedTx
|
|
960
960
|
// Please keep it updated.
|
|
961
961
|
|
|
962
|
-
if (error
|
|
963
|
-
|
|
964
|
-
|
|
962
|
+
if (error instanceof Error) {
|
|
963
|
+
if (error.message === "invalid remainder") {
|
|
964
|
+
throw new InvalidArgumentsError("Invalid transaction", error);
|
|
965
|
+
}
|
|
965
966
|
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
967
|
+
if (error.message.includes("Incompatible EIP155")) {
|
|
968
|
+
throw new InvalidArgumentsError(
|
|
969
|
+
"Trying to send an incompatible EIP-155 transaction, signed for another chain.",
|
|
970
|
+
error
|
|
971
|
+
);
|
|
972
|
+
}
|
|
972
973
|
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
974
|
+
if (
|
|
975
|
+
error.message.includes("TypedTransaction with ID") &&
|
|
976
|
+
error.message.includes(" unknown")
|
|
977
|
+
) {
|
|
978
|
+
throw new InvalidArgumentsError(`Invalid transaction`, error);
|
|
979
|
+
}
|
|
979
980
|
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
981
|
+
if (error.message.includes("The chain ID does not match")) {
|
|
982
|
+
throw new InvalidArgumentsError(
|
|
983
|
+
`Trying to send a raw transaction with an invalid chainId. The expected chainId is ${this._common.chainIdBN()}`,
|
|
984
|
+
error
|
|
985
|
+
);
|
|
986
|
+
}
|
|
985
987
|
}
|
|
986
988
|
|
|
987
989
|
throw error;
|
|
@@ -1065,7 +1067,7 @@ export class EthModule {
|
|
|
1065
1067
|
if (typeof typedData === "string") {
|
|
1066
1068
|
try {
|
|
1067
1069
|
typedMessage = JSON.parse(typedData);
|
|
1068
|
-
} catch
|
|
1070
|
+
} catch {
|
|
1069
1071
|
throw new InvalidInputError(
|
|
1070
1072
|
`The message parameter is an invalid JSON. Either pass a valid JSON or a plain object conforming to EIP712 TypedData schema.`
|
|
1071
1073
|
);
|
|
@@ -245,7 +245,7 @@ export class HardhatModule {
|
|
|
245
245
|
|
|
246
246
|
if (this._node.isEip1559Active()) {
|
|
247
247
|
throw new InvalidInputError(
|
|
248
|
-
"hardhat_setMinGasPrice is not
|
|
248
|
+
"hardhat_setMinGasPrice is not supported when EIP-1559 is active"
|
|
249
249
|
);
|
|
250
250
|
}
|
|
251
251
|
|
|
@@ -35,15 +35,19 @@ function printLine(line: string) {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
function replaceLastLine(newLine: string) {
|
|
38
|
-
process.stdout.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
ansiEscapes.
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
38
|
+
if (process.stdout.isTTY === true) {
|
|
39
|
+
process.stdout.write(
|
|
40
|
+
// eslint-disable-next-line prefer-template
|
|
41
|
+
ansiEscapes.cursorHide +
|
|
42
|
+
ansiEscapes.cursorPrevLine +
|
|
43
|
+
newLine +
|
|
44
|
+
ansiEscapes.eraseEndLine +
|
|
45
|
+
"\n" +
|
|
46
|
+
ansiEscapes.cursorShow
|
|
47
|
+
);
|
|
48
|
+
} else {
|
|
49
|
+
process.stdout.write(`${newLine}\n`);
|
|
50
|
+
}
|
|
47
51
|
}
|
|
48
52
|
|
|
49
53
|
/**
|
|
@@ -2,8 +2,8 @@ import { Block } from "@ethereumjs/block";
|
|
|
2
2
|
import { RunBlockResult } from "@ethereumjs/vm/dist/runBlock";
|
|
3
3
|
import { BN } from "ethereumjs-util";
|
|
4
4
|
|
|
5
|
-
import { BuildInfo } from "../../../types";
|
|
6
5
|
import { HARDHAT_MEMPOOL_SUPPORTED_ORDERS } from "../../constants";
|
|
6
|
+
import { BuildInfo, HardhatNetworkChainsConfig } from "../../../types";
|
|
7
7
|
import { MessageTrace } from "../stack-traces/message-trace";
|
|
8
8
|
|
|
9
9
|
import type { ReturnData } from "./return-data";
|
|
@@ -31,6 +31,7 @@ interface CommonConfig {
|
|
|
31
31
|
initialBaseFeePerGas?: number;
|
|
32
32
|
mempoolOrder: MempoolOrder;
|
|
33
33
|
coinbase: string;
|
|
34
|
+
chains: HardhatNetworkChainsConfig;
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
export type LocalNodeConfig = CommonConfig;
|
|
@@ -11,7 +11,7 @@ import Bloom from "@ethereumjs/vm/dist/bloom";
|
|
|
11
11
|
import { EVMResult, ExecResult } from "@ethereumjs/vm/dist/evm/evm";
|
|
12
12
|
import { ERROR } from "@ethereumjs/vm/dist/exceptions";
|
|
13
13
|
import { RunBlockResult } from "@ethereumjs/vm/dist/runBlock";
|
|
14
|
-
import { StateManager } from "@ethereumjs/vm/dist/state";
|
|
14
|
+
import { DefaultStateManager, StateManager } from "@ethereumjs/vm/dist/state";
|
|
15
15
|
import chalk from "chalk";
|
|
16
16
|
import debug from "debug";
|
|
17
17
|
import {
|
|
@@ -27,6 +27,8 @@ import {
|
|
|
27
27
|
import EventEmitter from "events";
|
|
28
28
|
|
|
29
29
|
import { CompilerInput, CompilerOutput } from "../../../types";
|
|
30
|
+
import { HardforkHistoryConfig } from "../../../types/config";
|
|
31
|
+
import { HARDHAT_NETWORK_SUPPORTED_HARDFORKS } from "../../constants";
|
|
30
32
|
import {
|
|
31
33
|
HARDHAT_NETWORK_DEFAULT_INITIAL_BASE_FEE_PER_GAS,
|
|
32
34
|
HARDHAT_NETWORK_DEFAULT_MAX_PRIORITY_FEE_PER_GAS,
|
|
@@ -73,7 +75,6 @@ import { bloomFilter, Filter, filterLogs, LATEST_BLOCK, Type } from "./filter";
|
|
|
73
75
|
import { ForkBlockchain } from "./fork/ForkBlockchain";
|
|
74
76
|
import { ForkStateManager } from "./fork/ForkStateManager";
|
|
75
77
|
import { HardhatBlockchain } from "./HardhatBlockchain";
|
|
76
|
-
import { HardhatStateManager } from "./HardhatStateManager";
|
|
77
78
|
import {
|
|
78
79
|
CallParams,
|
|
79
80
|
EstimateGasResult,
|
|
@@ -108,6 +109,7 @@ import { HardhatBlockchainInterface } from "./types/HardhatBlockchainInterface";
|
|
|
108
109
|
import { getCurrentTimestamp } from "./utils/getCurrentTimestamp";
|
|
109
110
|
import { makeCommon } from "./utils/makeCommon";
|
|
110
111
|
import { makeForkClient } from "./utils/makeForkClient";
|
|
112
|
+
import { makeStateTrie } from "./utils/makeStateTrie";
|
|
111
113
|
import { makeForkCommon } from "./utils/makeForkCommon";
|
|
112
114
|
import { putGenesisBlock } from "./utils/putGenesisBlock";
|
|
113
115
|
import { txMapToArray } from "./utils/txMapToArray";
|
|
@@ -130,6 +132,8 @@ export class HardhatNode extends EventEmitter {
|
|
|
130
132
|
tracingConfig,
|
|
131
133
|
minGasPrice,
|
|
132
134
|
mempoolOrder,
|
|
135
|
+
networkId,
|
|
136
|
+
chainId,
|
|
133
137
|
} = config;
|
|
134
138
|
|
|
135
139
|
let common: Common;
|
|
@@ -138,6 +142,8 @@ export class HardhatNode extends EventEmitter {
|
|
|
138
142
|
let initialBlockTimeOffset: BN | undefined;
|
|
139
143
|
let nextBlockBaseFeePerGas: BN | undefined;
|
|
140
144
|
let forkNetworkId: number | undefined;
|
|
145
|
+
let forkBlockNum: number | undefined;
|
|
146
|
+
let hardforkActivations: HardforkHistoryConfig = new Map();
|
|
141
147
|
|
|
142
148
|
const initialBaseFeePerGasConfig =
|
|
143
149
|
config.initialBaseFeePerGas !== undefined
|
|
@@ -152,6 +158,7 @@ export class HardhatNode extends EventEmitter {
|
|
|
152
158
|
common = await makeForkCommon(config);
|
|
153
159
|
|
|
154
160
|
forkNetworkId = forkClient.getNetworkId();
|
|
161
|
+
forkBlockNum = forkBlockNumber.toNumber();
|
|
155
162
|
|
|
156
163
|
this._validateHardforks(
|
|
157
164
|
config.forkConfig.blockNumber,
|
|
@@ -189,12 +196,18 @@ export class HardhatNode extends EventEmitter {
|
|
|
189
196
|
}
|
|
190
197
|
}
|
|
191
198
|
}
|
|
199
|
+
|
|
200
|
+
if (config.chains.has(forkNetworkId)) {
|
|
201
|
+
hardforkActivations = config.chains.get(forkNetworkId)!.hardforkHistory;
|
|
202
|
+
}
|
|
192
203
|
} else {
|
|
193
|
-
const
|
|
194
|
-
|
|
204
|
+
const stateTrie = await makeStateTrie(genesisAccounts);
|
|
205
|
+
common = makeCommon(config, stateTrie);
|
|
195
206
|
|
|
196
|
-
|
|
197
|
-
|
|
207
|
+
stateManager = new DefaultStateManager({
|
|
208
|
+
common,
|
|
209
|
+
trie: stateTrie,
|
|
210
|
+
});
|
|
198
211
|
|
|
199
212
|
const hardhatBlockchain = new HardhatBlockchain();
|
|
200
213
|
|
|
@@ -219,7 +232,6 @@ export class HardhatNode extends EventEmitter {
|
|
|
219
232
|
}
|
|
220
233
|
|
|
221
234
|
blockchain = hardhatBlockchain;
|
|
222
|
-
stateManager = hardhatStateManager;
|
|
223
235
|
}
|
|
224
236
|
|
|
225
237
|
const txPool = new TxPool(stateManager, new BN(blockGasLimit), common);
|
|
@@ -243,8 +255,12 @@ export class HardhatNode extends EventEmitter {
|
|
|
243
255
|
mempoolOrder,
|
|
244
256
|
config.coinbase,
|
|
245
257
|
genesisAccounts,
|
|
258
|
+
networkId,
|
|
259
|
+
chainId,
|
|
260
|
+
hardforkActivations,
|
|
246
261
|
tracingConfig,
|
|
247
262
|
forkNetworkId,
|
|
263
|
+
forkBlockNum,
|
|
248
264
|
nextBlockBaseFeePerGas
|
|
249
265
|
);
|
|
250
266
|
|
|
@@ -268,7 +284,7 @@ The hardfork must be at least spuriousDragon, but ${common.hardfork()} was given
|
|
|
268
284
|
let upstreamCommon: Common;
|
|
269
285
|
try {
|
|
270
286
|
upstreamCommon = new Common({ chain: remoteChainId });
|
|
271
|
-
} catch
|
|
287
|
+
} catch {
|
|
272
288
|
// If ethereumjs doesn't have a common it will throw and we won't have
|
|
273
289
|
// info about the activation block of each hardfork, so we don't run
|
|
274
290
|
// this validation.
|
|
@@ -318,8 +334,12 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
318
334
|
private _mempoolOrder: MempoolOrder,
|
|
319
335
|
private _coinbase: string,
|
|
320
336
|
genesisAccounts: GenesisAccount[],
|
|
337
|
+
private readonly _configNetworkId: number,
|
|
338
|
+
private readonly _configChainId: number,
|
|
339
|
+
private readonly _hardforkActivations: HardforkHistoryConfig,
|
|
321
340
|
tracingConfig?: TracingConfig,
|
|
322
341
|
private _forkNetworkId?: number,
|
|
342
|
+
private _forkBlockNumber?: number,
|
|
323
343
|
nextBlockBaseFee?: BN
|
|
324
344
|
) {
|
|
325
345
|
super();
|
|
@@ -369,7 +389,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
369
389
|
error
|
|
370
390
|
);
|
|
371
391
|
|
|
372
|
-
|
|
392
|
+
if (error instanceof Error) {
|
|
393
|
+
Reporter.reportError(error);
|
|
394
|
+
}
|
|
373
395
|
}
|
|
374
396
|
}
|
|
375
397
|
|
|
@@ -436,16 +458,21 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
436
458
|
try {
|
|
437
459
|
result = await this._mineBlockWithPendingTxs(blockTimestamp);
|
|
438
460
|
} catch (err) {
|
|
439
|
-
if (err
|
|
440
|
-
|
|
441
|
-
|
|
461
|
+
if (err instanceof Error) {
|
|
462
|
+
if (err?.message.includes("sender doesn't have enough funds")) {
|
|
463
|
+
throw new InvalidInputError(err.message, err);
|
|
464
|
+
}
|
|
442
465
|
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
466
|
+
// Some network errors are HardhatErrors, and can end up here when forking
|
|
467
|
+
if (HardhatError.isHardhatError(err)) {
|
|
468
|
+
throw err;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
throw new TransactionExecutionError(err);
|
|
446
472
|
}
|
|
447
473
|
|
|
448
|
-
|
|
474
|
+
// eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
|
|
475
|
+
throw err;
|
|
449
476
|
}
|
|
450
477
|
|
|
451
478
|
await this._saveBlockAsSuccessfullyRun(result.block, result.blockResult);
|
|
@@ -475,7 +502,10 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
475
502
|
blockNumberOrPending
|
|
476
503
|
);
|
|
477
504
|
|
|
478
|
-
if (
|
|
505
|
+
if (
|
|
506
|
+
call.gasPrice !== undefined ||
|
|
507
|
+
!this.isEip1559Active(blockNumberOrPending)
|
|
508
|
+
) {
|
|
479
509
|
txParams = {
|
|
480
510
|
gasPrice: new BN(0),
|
|
481
511
|
nonce,
|
|
@@ -1214,7 +1244,10 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1214
1244
|
"this._forkNetworkId should exist if the blockchain is an instance of ForkBlockchain"
|
|
1215
1245
|
);
|
|
1216
1246
|
|
|
1217
|
-
const common =
|
|
1247
|
+
const common = this._getCommonForTracing(
|
|
1248
|
+
this._forkNetworkId,
|
|
1249
|
+
blockNumber
|
|
1250
|
+
);
|
|
1218
1251
|
|
|
1219
1252
|
vm = new VM({
|
|
1220
1253
|
common,
|
|
@@ -1508,7 +1541,12 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1508
1541
|
try {
|
|
1509
1542
|
sender = tx.getSenderAddress(); // verifies signature as a side effect
|
|
1510
1543
|
} catch (e) {
|
|
1511
|
-
|
|
1544
|
+
if (e instanceof Error) {
|
|
1545
|
+
throw new InvalidInputError(e.message);
|
|
1546
|
+
}
|
|
1547
|
+
|
|
1548
|
+
// eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
|
|
1549
|
+
throw e;
|
|
1512
1550
|
}
|
|
1513
1551
|
|
|
1514
1552
|
// validate nonce
|
|
@@ -2139,6 +2177,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
2139
2177
|
const initialStateRoot = await this._stateManager.getStateRoot();
|
|
2140
2178
|
|
|
2141
2179
|
let blockContext: Block | undefined;
|
|
2180
|
+
let originalCommon: Common | undefined;
|
|
2142
2181
|
|
|
2143
2182
|
try {
|
|
2144
2183
|
if (blockNumberOrPending === "pending") {
|
|
@@ -2173,7 +2212,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
2173
2212
|
// eth_call. This will make the BASEFEE option also return 0, which
|
|
2174
2213
|
// shouldn't. See: https://github.com/nomiclabs/hardhat/issues/1688
|
|
2175
2214
|
if (
|
|
2176
|
-
this.isEip1559Active() &&
|
|
2215
|
+
this.isEip1559Active(blockNumberOrPending) &&
|
|
2177
2216
|
(blockContext.header.baseFeePerGas === undefined || forceBaseFeeZero)
|
|
2178
2217
|
) {
|
|
2179
2218
|
blockContext = Block.fromBlockData(blockContext, {
|
|
@@ -2184,6 +2223,17 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
2184
2223
|
(blockContext.header as any).baseFeePerGas = new BN(0);
|
|
2185
2224
|
}
|
|
2186
2225
|
|
|
2226
|
+
originalCommon = (this._vm as any)._common;
|
|
2227
|
+
(this._vm as any)._common = new Common({
|
|
2228
|
+
chain: {
|
|
2229
|
+
// eslint-disable-next-line @typescript-eslint/dot-notation
|
|
2230
|
+
...this._vm._common["_chainParams"],
|
|
2231
|
+
chainId: this._forkNetworkId ?? this._configChainId,
|
|
2232
|
+
networkId: this._forkNetworkId ?? this._configNetworkId,
|
|
2233
|
+
},
|
|
2234
|
+
hardfork: this._selectHardfork(blockContext.header.number),
|
|
2235
|
+
});
|
|
2236
|
+
|
|
2187
2237
|
return await this._vm.runTx({
|
|
2188
2238
|
block: blockContext,
|
|
2189
2239
|
tx,
|
|
@@ -2192,6 +2242,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
2192
2242
|
skipBlockGasLimitValidation: true,
|
|
2193
2243
|
});
|
|
2194
2244
|
} finally {
|
|
2245
|
+
if (originalCommon !== undefined) {
|
|
2246
|
+
(this._vm as any)._common = originalCommon;
|
|
2247
|
+
}
|
|
2195
2248
|
await this._stateManager.setStateRoot(initialStateRoot);
|
|
2196
2249
|
}
|
|
2197
2250
|
}
|
|
@@ -2287,7 +2340,16 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
2287
2340
|
);
|
|
2288
2341
|
}
|
|
2289
2342
|
|
|
2290
|
-
public isEip1559Active(): boolean {
|
|
2343
|
+
public isEip1559Active(blockNumberOrPending?: BN | "pending"): boolean {
|
|
2344
|
+
if (
|
|
2345
|
+
blockNumberOrPending !== undefined &&
|
|
2346
|
+
blockNumberOrPending !== "pending"
|
|
2347
|
+
) {
|
|
2348
|
+
return this._vm._common.hardforkGteHardfork(
|
|
2349
|
+
this._selectHardfork(blockNumberOrPending),
|
|
2350
|
+
"london"
|
|
2351
|
+
);
|
|
2352
|
+
}
|
|
2291
2353
|
return this._vm._common.gteHardfork("london");
|
|
2292
2354
|
}
|
|
2293
2355
|
|
|
@@ -2297,7 +2359,10 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
2297
2359
|
): Promise<
|
|
2298
2360
|
{ gasPrice: BN } | { maxFeePerGas: BN; maxPriorityFeePerGas: BN }
|
|
2299
2361
|
> {
|
|
2300
|
-
if (
|
|
2362
|
+
if (
|
|
2363
|
+
!this.isEip1559Active(blockNumberOrPending) ||
|
|
2364
|
+
callParams.gasPrice !== undefined
|
|
2365
|
+
) {
|
|
2301
2366
|
return { gasPrice: callParams.gasPrice ?? (await this.getGasPrice()) };
|
|
2302
2367
|
}
|
|
2303
2368
|
|
|
@@ -2327,18 +2392,71 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
2327
2392
|
|
|
2328
2393
|
return { maxFeePerGas, maxPriorityFeePerGas };
|
|
2329
2394
|
}
|
|
2330
|
-
}
|
|
2331
2395
|
|
|
2332
|
-
|
|
2333
|
-
|
|
2334
|
-
|
|
2396
|
+
private _selectHardfork(blockNumber: BN): string {
|
|
2397
|
+
if (
|
|
2398
|
+
this._forkBlockNumber === undefined ||
|
|
2399
|
+
blockNumber.gte(new BN(this._forkBlockNumber))
|
|
2400
|
+
) {
|
|
2401
|
+
return this._vm._common.hardfork() as HardforkName;
|
|
2402
|
+
}
|
|
2335
2403
|
|
|
2336
|
-
|
|
2404
|
+
if (this._hardforkActivations.size === 0) {
|
|
2405
|
+
throw new InternalError(
|
|
2406
|
+
`No known hardfork for execution on historical block ${blockNumber.toString()} (relative to fork block number ${
|
|
2407
|
+
this._forkBlockNumber
|
|
2408
|
+
}). The node was not configured with a hardfork activation history. See http://hardhat.org/hardhat-network/guides/mainnet-forking.html#using-a-custom-hardfork-history`
|
|
2409
|
+
);
|
|
2410
|
+
}
|
|
2337
2411
|
|
|
2338
|
-
|
|
2339
|
-
|
|
2340
|
-
|
|
2341
|
-
|
|
2412
|
+
/** search this._hardforkActivations for the highest block number that
|
|
2413
|
+
* isn't higher than blockNumber, and then return that found block number's
|
|
2414
|
+
* associated hardfork name. */
|
|
2415
|
+
const hardforkHistory: Array<[name: string, block: number]> = Array.from(
|
|
2416
|
+
this._hardforkActivations.entries()
|
|
2342
2417
|
);
|
|
2418
|
+
const [hardfork, activationBlock] = hardforkHistory.reduce(
|
|
2419
|
+
([highestHardfork, highestBlock], [thisHardfork, thisBlock]) =>
|
|
2420
|
+
thisBlock > highestBlock && new BN(thisBlock).lte(blockNumber)
|
|
2421
|
+
? [thisHardfork, thisBlock]
|
|
2422
|
+
: [highestHardfork, highestBlock]
|
|
2423
|
+
);
|
|
2424
|
+
if (hardfork === undefined || blockNumber.ltn(activationBlock)) {
|
|
2425
|
+
throw new InternalError(
|
|
2426
|
+
`Could not find a hardfork to run for block ${blockNumber}, after having looked for one in the HardhatNode's hardfork activation history, which was: ${JSON.stringify(
|
|
2427
|
+
hardforkHistory
|
|
2428
|
+
)}. For more information, see https://hardhat.org/hardhat-network/reference/#config`
|
|
2429
|
+
);
|
|
2430
|
+
}
|
|
2431
|
+
|
|
2432
|
+
if (!HARDHAT_NETWORK_SUPPORTED_HARDFORKS.includes(hardfork)) {
|
|
2433
|
+
throw new InternalError(
|
|
2434
|
+
`Tried to run a call or transaction in the context of a block whose hardfork is "${hardfork}", but Hardhat Network only supports the following hardforks: ${HARDHAT_NETWORK_SUPPORTED_HARDFORKS.join(
|
|
2435
|
+
", "
|
|
2436
|
+
)}`
|
|
2437
|
+
);
|
|
2438
|
+
}
|
|
2439
|
+
|
|
2440
|
+
return hardfork;
|
|
2441
|
+
}
|
|
2442
|
+
|
|
2443
|
+
private _getCommonForTracing(networkId: number, blockNumber: number): Common {
|
|
2444
|
+
try {
|
|
2445
|
+
const common = new Common({
|
|
2446
|
+
chain: {
|
|
2447
|
+
// eslint-disable-next-line @typescript-eslint/dot-notation
|
|
2448
|
+
...Common["_getChainParams"]("mainnet"),
|
|
2449
|
+
chainId: networkId,
|
|
2450
|
+
networkId,
|
|
2451
|
+
},
|
|
2452
|
+
hardfork: this._selectHardfork(new BN(blockNumber)),
|
|
2453
|
+
});
|
|
2454
|
+
|
|
2455
|
+
return common;
|
|
2456
|
+
} catch {
|
|
2457
|
+
throw new InternalError(
|
|
2458
|
+
`Network id ${networkId} does not correspond to a network that Hardhat can trace`
|
|
2459
|
+
);
|
|
2460
|
+
}
|
|
2343
2461
|
}
|
|
2344
2462
|
}
|
|
@@ -11,6 +11,7 @@ import type {
|
|
|
11
11
|
BoundExperimentalHardhatNetworkMessageTraceHook,
|
|
12
12
|
EIP1193Provider,
|
|
13
13
|
EthSubscription,
|
|
14
|
+
HardhatNetworkChainsConfig,
|
|
14
15
|
RequestArguments,
|
|
15
16
|
} from "../../../types";
|
|
16
17
|
import {
|
|
@@ -85,6 +86,7 @@ export class HardhatNetworkProvider
|
|
|
85
86
|
private readonly _automine: boolean,
|
|
86
87
|
private readonly _intervalMining: IntervalMiningConfig,
|
|
87
88
|
private readonly _mempoolOrder: MempoolOrder,
|
|
89
|
+
private readonly _chains: HardhatNetworkChainsConfig,
|
|
88
90
|
private readonly _logger: ModulesLogger,
|
|
89
91
|
private readonly _genesisAccounts: GenesisAccount[] = [],
|
|
90
92
|
private readonly _artifacts?: Artifacts,
|
|
@@ -164,7 +166,7 @@ export class HardhatNetworkProvider
|
|
|
164
166
|
this._logger.printFailedMethod(method);
|
|
165
167
|
this._logger.printLogs();
|
|
166
168
|
|
|
167
|
-
if (!this._logger.isLoggedError(err)) {
|
|
169
|
+
if (err instanceof Error && !this._logger.isLoggedError(err)) {
|
|
168
170
|
if (ProviderError.isProviderError(err)) {
|
|
169
171
|
this._logger.printEmptyLine();
|
|
170
172
|
this._logger.printErrorMessage(err.message);
|
|
@@ -242,6 +244,7 @@ export class HardhatNetworkProvider
|
|
|
242
244
|
forkCachePath:
|
|
243
245
|
this._forkConfig !== undefined ? this._forkCachePath : undefined,
|
|
244
246
|
coinbase: this._coinbase,
|
|
247
|
+
chains: this._chains,
|
|
245
248
|
};
|
|
246
249
|
|
|
247
250
|
const [common, node] = await HardhatNode.create(config);
|
package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts
CHANGED
|
@@ -57,7 +57,7 @@ export class ReadOnlyValidEIP1559Transaction extends FeeMarketEIP1559Transaction
|
|
|
57
57
|
constructor(sender: Address, data: FeeMarketEIP1559TxData = {}) {
|
|
58
58
|
const fakeCommon = new Common({
|
|
59
59
|
chain: "mainnet",
|
|
60
|
-
hardfork: "london",
|
|
60
|
+
hardfork: "london", // TODO: consider chaning this to ["latest hardfork"]
|
|
61
61
|
});
|
|
62
62
|
|
|
63
63
|
// this class should only be used with txs in a hardfork that
|
|
@@ -15,7 +15,7 @@ export function makeCommon(
|
|
|
15
15
|
blockGasLimit,
|
|
16
16
|
hardfork,
|
|
17
17
|
}: LocalNodeConfig,
|
|
18
|
-
|
|
18
|
+
stateTrie: any
|
|
19
19
|
) {
|
|
20
20
|
const initialBlockTimestamp =
|
|
21
21
|
initialDate !== undefined
|
|
@@ -35,7 +35,7 @@ export function makeCommon(
|
|
|
35
35
|
difficulty: 1,
|
|
36
36
|
nonce: "0x0000000000000042",
|
|
37
37
|
extraData: "0x1234",
|
|
38
|
-
stateRoot: bufferToHex(
|
|
38
|
+
stateRoot: bufferToHex(stateTrie.root),
|
|
39
39
|
},
|
|
40
40
|
},
|
|
41
41
|
hardfork
|
|
@@ -36,7 +36,7 @@ export async function wrapWithSolidityErrorsCorrection(
|
|
|
36
36
|
|
|
37
37
|
try {
|
|
38
38
|
return await f();
|
|
39
|
-
} catch (error) {
|
|
39
|
+
} catch (error: any) {
|
|
40
40
|
if (error.stackTrace === undefined) {
|
|
41
41
|
// eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
|
|
42
42
|
throw error;
|