hardhat 2.6.6 → 2.7.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 +57 -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 +45 -22
- 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 +11 -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.d.ts +49 -0
- package/internal/artifacts.d.ts.map +1 -1
- package/internal/artifacts.js +204 -68
- package/internal/artifacts.js.map +1 -1
- package/internal/cli/analytics.js +11 -10
- 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 +16 -16
- package/internal/cli/cli.js.map +1 -1
- package/internal/cli/project-creation.js +13 -13
- package/internal/cli/project-creation.js.map +1 -1
- package/internal/constants.d.ts +2 -0
- package/internal/constants.d.ts.map +1 -1
- package/internal/constants.js +4 -1
- 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.map +1 -1
- package/internal/core/config/config-loading.js +22 -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 -8
- package/internal/core/config/config-resolution.js.map +1 -1
- package/internal/core/config/config-validation.d.ts +1 -0
- package/internal/core/config/config-validation.d.ts.map +1 -1
- package/internal/core/config/config-validation.js +113 -38
- package/internal/core/config/config-validation.js.map +1 -1
- package/internal/core/config/default-config.d.ts +1 -0
- package/internal/core/config/default-config.d.ts.map +1 -1
- package/internal/core/config/default-config.js +12 -5
- package/internal/core/config/default-config.js.map +1 -1
- package/internal/core/errors-list.d.ts +14 -0
- package/internal/core/errors-list.d.ts.map +1 -1
- package/internal/core/errors-list.js +21 -2
- package/internal/core/errors-list.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 +1 -1
- package/internal/core/jsonrpc/types/output/log.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/output/log.js +5 -4
- package/internal/core/jsonrpc/types/output/log.js.map +1 -1
- package/internal/core/jsonrpc/types/output/receipt.d.ts +1 -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/params/hardhat-params.js +2 -2
- package/internal/core/params/hardhat-params.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 +22 -7
- 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 +6 -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 +20 -18
- 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.d.ts +1 -1
- package/internal/core/typescript-support.d.ts.map +1 -1
- package/internal/core/typescript-support.js +8 -5
- package/internal/core/typescript-support.js.map +1 -1
- package/internal/hardhat-network/jsonrpc/client.d.ts +2 -0
- package/internal/hardhat-network/jsonrpc/client.d.ts.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.js +16 -8
- package/internal/hardhat-network/jsonrpc/handler.js.map +1 -1
- package/internal/hardhat-network/jsonrpc/server.js +1 -1
- 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/HardhatStateManager.js +29 -29
- package/internal/hardhat-network/provider/HardhatStateManager.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/TransactionQueue.d.ts +2 -1
- package/internal/hardhat-network/provider/TransactionQueue.d.ts.map +1 -1
- package/internal/hardhat-network/provider/TransactionQueue.js +16 -2
- package/internal/hardhat-network/provider/TransactionQueue.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.d.ts.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkBlockchain.js +8 -10
- 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.d.ts +3 -0
- package/internal/hardhat-network/provider/modules/hardhat.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/hardhat.js +31 -15
- package/internal/hardhat-network/provider/modules/hardhat.js.map +1 -1
- package/internal/hardhat-network/provider/modules/logger.js +17 -17
- 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.d.ts +9 -0
- package/internal/hardhat-network/provider/modules/personal.d.ts.map +1 -0
- package/internal/hardhat-network/provider/modules/personal.js +31 -0
- package/internal/hardhat-network/provider/modules/personal.js.map +1 -0
- 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 +5 -0
- package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
- package/internal/hardhat-network/provider/node-types.js.map +1 -1
- package/internal/hardhat-network/provider/node.d.ts +4 -1
- package/internal/hardhat-network/provider/node.d.ts.map +1 -1
- package/internal/hardhat-network/provider/node.js +107 -71
- package/internal/hardhat-network/provider/node.js.map +1 -1
- package/internal/hardhat-network/provider/output.d.ts +1 -1
- package/internal/hardhat-network/provider/output.d.ts.map +1 -1
- package/internal/hardhat-network/provider/output.js +94 -91
- package/internal/hardhat-network/provider/output.js.map +1 -1
- package/internal/hardhat-network/provider/provider.d.ts +6 -2
- package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
- package/internal/hardhat-network/provider/provider.js +14 -4
- 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.js +3 -3
- 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.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/error-inferrer.js +42 -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.d.ts +1 -1
- package/internal/hardhat-network/stack-traces/solidityTracer.js +11 -11
- 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/compile.ts +14 -0
- package/src/builtin-tasks/flatten.ts +4 -2
- package/src/builtin-tasks/node.ts +56 -17
- package/src/builtin-tasks/run.ts +13 -8
- package/src/builtin-tasks/utils/watch.ts +3 -1
- package/src/internal/artifacts.ts +269 -72
- package/src/internal/cli/analytics.ts +1 -1
- package/src/internal/cli/autocomplete.ts +3 -3
- package/src/internal/cli/bootstrap.ts +1 -1
- package/src/internal/cli/cli.ts +2 -2
- package/src/internal/cli/project-creation.ts +2 -2
- package/src/internal/constants.ts +4 -0
- package/src/internal/context.ts +1 -1
- package/src/internal/core/config/config-loading.ts +25 -3
- package/src/internal/core/config/config-resolution.ts +28 -0
- package/src/internal/core/config/config-validation.ts +147 -15
- package/src/internal/core/config/default-config.ts +10 -3
- package/src/internal/core/errors-list.ts +21 -2
- package/src/internal/core/execution-mode.ts +1 -1
- package/src/internal/core/jsonrpc/types/output/log.ts +1 -0
- package/src/internal/core/params/argumentTypes.ts +40 -25
- package/src/internal/core/params/env-variables.ts +13 -8
- package/src/internal/core/params/hardhat-params.ts +2 -2
- package/src/internal/core/providers/accounts.ts +23 -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 +8 -2
- package/src/internal/core/providers/gas-providers.ts +7 -5
- 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 +7 -3
- package/src/internal/hardhat-network/jsonrpc/client.ts +2 -2
- package/src/internal/hardhat-network/jsonrpc/handler.ts +12 -2
- package/src/internal/hardhat-network/jsonrpc/server.ts +2 -2
- package/src/internal/hardhat-network/provider/TransactionQueue.ts +31 -4
- package/src/internal/hardhat-network/provider/TxPool.ts +1 -1
- package/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts +2 -4
- package/src/internal/hardhat-network/provider/modules/eth.ts +23 -21
- package/src/internal/hardhat-network/provider/modules/hardhat.ts +24 -1
- package/src/internal/hardhat-network/provider/modules/personal.ts +39 -0
- package/src/internal/hardhat-network/provider/node-types.ts +6 -0
- package/src/internal/hardhat-network/provider/node.ts +68 -26
- package/src/internal/hardhat-network/provider/output.ts +9 -9
- package/src/internal/hardhat-network/provider/provider.ts +16 -2
- package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/error-inferrer.ts +19 -0
- package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/solidityTracer.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/register.ts +1 -1
- package/src/types/config.ts +14 -0
- package/src/utils/contract-names.ts +112 -0
- package/src/utils/source-names.ts +14 -12
- package/types/config.d.ts +10 -0
- package/types/config.d.ts.map +1 -1
- package/utils/contract-names.d.ts +10 -0
- package/utils/contract-names.d.ts.map +1 -1
- package/utils/contract-names.js +92 -1
- package/utils/contract-names.js.map +1 -1
- package/utils/source-names.d.ts +1 -1
- package/utils/source-names.js +8 -6
- package/utils/source-names.js.map +1 -1
- package/CHANGELOG.md +0 -32
|
@@ -38,16 +38,16 @@ export function isTypescriptSupported() {
|
|
|
38
38
|
return cachedIsTypescriptSupported;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
export function loadTsNode() {
|
|
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
|
|
|
@@ -58,6 +58,10 @@ export function loadTsNode() {
|
|
|
58
58
|
return;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
if (tsConfigPath !== undefined) {
|
|
62
|
+
process.env.TS_NODE_PROJECT = tsConfigPath;
|
|
63
|
+
}
|
|
64
|
+
|
|
61
65
|
// See: https://github.com/nomiclabs/hardhat/issues/265
|
|
62
66
|
if (process.env.TS_NODE_FILES === undefined) {
|
|
63
67
|
process.env.TS_NODE_FILES = "true";
|
|
@@ -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
|
}
|
|
@@ -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;
|
|
@@ -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) {
|
|
@@ -2,7 +2,8 @@ import { TypedTransaction } from "@ethereumjs/tx";
|
|
|
2
2
|
import { BN } from "ethereumjs-util";
|
|
3
3
|
import Heap from "mnemonist/heap";
|
|
4
4
|
|
|
5
|
-
import { InternalError } from "../../core/providers/errors";
|
|
5
|
+
import { InternalError, InvalidInputError } from "../../core/providers/errors";
|
|
6
|
+
import { MempoolOrder } from "./node-types";
|
|
6
7
|
import { OrderedTransaction } from "./PoolState";
|
|
7
8
|
|
|
8
9
|
function getEffectiveMinerFee(tx: OrderedTransaction, baseFee?: BN): BN {
|
|
@@ -38,6 +39,33 @@ function decreasingOrderEffectiveMinerFeeComparator(
|
|
|
38
39
|
// in increasing order by orderId.
|
|
39
40
|
return left.orderId - right.orderId;
|
|
40
41
|
}
|
|
42
|
+
|
|
43
|
+
function decreasingOrderComparator(
|
|
44
|
+
left: OrderedTransaction,
|
|
45
|
+
right: OrderedTransaction
|
|
46
|
+
) {
|
|
47
|
+
return left.orderId - right.orderId;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function getOrderedTransactionHeap(
|
|
51
|
+
mempoolOrder: MempoolOrder,
|
|
52
|
+
baseFee?: BN
|
|
53
|
+
): Heap<OrderedTransaction> {
|
|
54
|
+
switch (mempoolOrder) {
|
|
55
|
+
case "priority":
|
|
56
|
+
return new Heap<OrderedTransaction>((a, b) =>
|
|
57
|
+
decreasingOrderEffectiveMinerFeeComparator(a, b, baseFee)
|
|
58
|
+
);
|
|
59
|
+
case "fifo":
|
|
60
|
+
return new Heap<OrderedTransaction>((a, b) =>
|
|
61
|
+
decreasingOrderComparator(a, b)
|
|
62
|
+
);
|
|
63
|
+
default:
|
|
64
|
+
// eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
|
|
65
|
+
throw new InvalidInputError(`Invalid mempool order: ${mempoolOrder}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
41
69
|
/**
|
|
42
70
|
* A queue of transactions in the order that they could be mined in the next
|
|
43
71
|
* block.
|
|
@@ -67,11 +95,10 @@ export class TransactionQueue {
|
|
|
67
95
|
*/
|
|
68
96
|
constructor(
|
|
69
97
|
pendingTransactions: Map<string, OrderedTransaction[]>,
|
|
98
|
+
mempoolOrder: MempoolOrder,
|
|
70
99
|
baseFee?: BN
|
|
71
100
|
) {
|
|
72
|
-
this._heap =
|
|
73
|
-
decreasingOrderEffectiveMinerFeeComparator(a, b, baseFee)
|
|
74
|
-
);
|
|
101
|
+
this._heap = getOrderedTransactionHeap(mempoolOrder, baseFee);
|
|
75
102
|
|
|
76
103
|
for (const [address, txList] of pendingTransactions) {
|
|
77
104
|
if (baseFee === undefined && txList.some((tx) => tx.data.type === 2)) {
|
|
@@ -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
|
}
|
|
@@ -215,9 +215,7 @@ export class ForkBlockchain implements HardhatBlockchainInterface {
|
|
|
215
215
|
: filterParams.addresses,
|
|
216
216
|
topics: filterParams.normalizedTopics,
|
|
217
217
|
});
|
|
218
|
-
return remoteLogs
|
|
219
|
-
.map((log, index) => toRpcLogOutput(log, index))
|
|
220
|
-
.concat(localLogs);
|
|
218
|
+
return remoteLogs.map(toRpcLogOutput).concat(localLogs);
|
|
221
219
|
}
|
|
222
220
|
return this._data.getLogs(filterParams);
|
|
223
221
|
}
|
|
@@ -274,7 +272,7 @@ export class ForkBlockchain implements HardhatBlockchainInterface {
|
|
|
274
272
|
// one for London.
|
|
275
273
|
const common = this._common.copy();
|
|
276
274
|
if (rpcBlock.baseFeePerGas !== undefined) {
|
|
277
|
-
common.setHardfork("london");
|
|
275
|
+
common.setHardfork("london"); // TODO: consider changing this to "latest hardfork"
|
|
278
276
|
} else {
|
|
279
277
|
common.setHardfork("berlin");
|
|
280
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
|
);
|
|
@@ -66,6 +66,9 @@ export class HardhatModule {
|
|
|
66
66
|
case "hardhat_intervalMine":
|
|
67
67
|
return this._intervalMineAction(...this._intervalMineParams(params));
|
|
68
68
|
|
|
69
|
+
case "hardhat_getAutomine":
|
|
70
|
+
return this._getAutomine();
|
|
71
|
+
|
|
69
72
|
case "hardhat_stopImpersonatingAccount":
|
|
70
73
|
return this._stopImpersonatingAction(
|
|
71
74
|
...this._stopImpersonatingParams(params)
|
|
@@ -105,6 +108,9 @@ export class HardhatModule {
|
|
|
105
108
|
return this._setNextBlockBaseFeePerGasAction(
|
|
106
109
|
...this._setNextBlockBaseFeePerGasParams(params)
|
|
107
110
|
);
|
|
111
|
+
|
|
112
|
+
case "hardhat_setCoinbase":
|
|
113
|
+
return this._setCoinbaseAction(...this._setCoinbaseParams(params));
|
|
108
114
|
}
|
|
109
115
|
|
|
110
116
|
throw new MethodNotFoundError(`Method ${method} not found`);
|
|
@@ -184,6 +190,12 @@ export class HardhatModule {
|
|
|
184
190
|
return true;
|
|
185
191
|
}
|
|
186
192
|
|
|
193
|
+
// hardhat_getAutomine
|
|
194
|
+
|
|
195
|
+
private async _getAutomine(): Promise<boolean> {
|
|
196
|
+
return this._node.getAutomine();
|
|
197
|
+
}
|
|
198
|
+
|
|
187
199
|
// hardhat_stopImpersonatingAccount
|
|
188
200
|
|
|
189
201
|
private _stopImpersonatingParams(params: any[]): [Buffer] {
|
|
@@ -233,7 +245,7 @@ export class HardhatModule {
|
|
|
233
245
|
|
|
234
246
|
if (this._node.isEip1559Active()) {
|
|
235
247
|
throw new InvalidInputError(
|
|
236
|
-
"hardhat_setMinGasPrice is not
|
|
248
|
+
"hardhat_setMinGasPrice is not supported when EIP-1559 is active"
|
|
237
249
|
);
|
|
238
250
|
}
|
|
239
251
|
|
|
@@ -337,6 +349,17 @@ export class HardhatModule {
|
|
|
337
349
|
return true;
|
|
338
350
|
}
|
|
339
351
|
|
|
352
|
+
// hardhat_setCoinbase
|
|
353
|
+
|
|
354
|
+
private _setCoinbaseParams(params: any[]): [Buffer] {
|
|
355
|
+
return validateParams(params, rpcAddress);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
private async _setCoinbaseAction(address: Buffer) {
|
|
359
|
+
await this._node.setCoinbase(new Address(address));
|
|
360
|
+
return true;
|
|
361
|
+
}
|
|
362
|
+
|
|
340
363
|
private async _logBlock(result: MineBlockResult) {
|
|
341
364
|
const { block, traces } = result;
|
|
342
365
|
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Address, toRpcSig } from "ethereumjs-util";
|
|
2
|
+
import { rpcAddress, rpcData } from "../../../core/jsonrpc/types/base-types";
|
|
3
|
+
import { validateParams } from "../../../core/jsonrpc/types/input/validation";
|
|
4
|
+
import { MethodNotFoundError } from "../../../core/providers/errors";
|
|
5
|
+
import { HardhatNode } from "../node";
|
|
6
|
+
|
|
7
|
+
/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */
|
|
8
|
+
|
|
9
|
+
export class PersonalModule {
|
|
10
|
+
constructor(private readonly _node: HardhatNode) {}
|
|
11
|
+
|
|
12
|
+
public async processRequest(
|
|
13
|
+
method: string,
|
|
14
|
+
params: any[] = []
|
|
15
|
+
): Promise<any> {
|
|
16
|
+
switch (method) {
|
|
17
|
+
case "personal_sign": {
|
|
18
|
+
return this._signAction(...this._signParams(params));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
throw new MethodNotFoundError(`Method ${method} not found`);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// personal_sign
|
|
26
|
+
|
|
27
|
+
private _signParams(params: any[]): [Buffer, Buffer] {
|
|
28
|
+
return validateParams(params, rpcData, rpcAddress);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
private async _signAction(data: Buffer, address: Buffer): Promise<string> {
|
|
32
|
+
const signature = await this._node.signPersonalMessage(
|
|
33
|
+
new Address(address),
|
|
34
|
+
data
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
return toRpcSig(signature.v, signature.r, signature.s);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -3,6 +3,7 @@ import { RunBlockResult } from "@ethereumjs/vm/dist/runBlock";
|
|
|
3
3
|
import { BN } from "ethereumjs-util";
|
|
4
4
|
|
|
5
5
|
import { BuildInfo } from "../../../types";
|
|
6
|
+
import { HARDHAT_MEMPOOL_SUPPORTED_ORDERS } from "../../constants";
|
|
6
7
|
import { MessageTrace } from "../stack-traces/message-trace";
|
|
7
8
|
|
|
8
9
|
import type { ReturnData } from "./return-data";
|
|
@@ -28,6 +29,8 @@ interface CommonConfig {
|
|
|
28
29
|
initialDate?: Date;
|
|
29
30
|
tracingConfig?: TracingConfig;
|
|
30
31
|
initialBaseFeePerGas?: number;
|
|
32
|
+
mempoolOrder: MempoolOrder;
|
|
33
|
+
coinbase: string;
|
|
31
34
|
}
|
|
32
35
|
|
|
33
36
|
export type LocalNodeConfig = CommonConfig;
|
|
@@ -48,6 +51,8 @@ export interface TracingConfig {
|
|
|
48
51
|
|
|
49
52
|
export type IntervalMiningConfig = number | [number, number];
|
|
50
53
|
|
|
54
|
+
export type MempoolOrder = typeof HARDHAT_MEMPOOL_SUPPORTED_ORDERS[number];
|
|
55
|
+
|
|
51
56
|
export interface GenesisAccount {
|
|
52
57
|
privateKey: string;
|
|
53
58
|
balance: string | number | BN;
|
|
@@ -121,6 +126,7 @@ export interface Snapshot {
|
|
|
121
126
|
nextBlockTimestamp: BN;
|
|
122
127
|
irregularStatesByBlockNumber: Map<string, Buffer>;
|
|
123
128
|
userProvidedNextBlockBaseFeePerGas: BN | undefined;
|
|
129
|
+
coinbase: string;
|
|
124
130
|
}
|
|
125
131
|
|
|
126
132
|
export type SendTransactionResult =
|
|
@@ -82,6 +82,7 @@ import {
|
|
|
82
82
|
GatherTracesResult,
|
|
83
83
|
GenesisAccount,
|
|
84
84
|
isForkedNodeConfig,
|
|
85
|
+
MempoolOrder,
|
|
85
86
|
MineBlockResult,
|
|
86
87
|
NodeConfig,
|
|
87
88
|
RunCallResult,
|
|
@@ -115,10 +116,6 @@ const log = debug("hardhat:core:hardhat-network:node");
|
|
|
115
116
|
|
|
116
117
|
const ethSigUtil = require("eth-sig-util");
|
|
117
118
|
|
|
118
|
-
export const COINBASE_ADDRESS = Address.fromString(
|
|
119
|
-
"0xc014ba5ec014ba5ec014ba5ec014ba5ec014ba5e"
|
|
120
|
-
);
|
|
121
|
-
|
|
122
119
|
/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */
|
|
123
120
|
|
|
124
121
|
export class HardhatNode extends EventEmitter {
|
|
@@ -132,6 +129,7 @@ export class HardhatNode extends EventEmitter {
|
|
|
132
129
|
allowUnlimitedContractSize,
|
|
133
130
|
tracingConfig,
|
|
134
131
|
minGasPrice,
|
|
132
|
+
mempoolOrder,
|
|
135
133
|
} = config;
|
|
136
134
|
|
|
137
135
|
let common: Common;
|
|
@@ -242,6 +240,8 @@ export class HardhatNode extends EventEmitter {
|
|
|
242
240
|
automine,
|
|
243
241
|
minGasPrice,
|
|
244
242
|
initialBlockTimeOffset,
|
|
243
|
+
mempoolOrder,
|
|
244
|
+
config.coinbase,
|
|
245
245
|
genesisAccounts,
|
|
246
246
|
tracingConfig,
|
|
247
247
|
forkNetworkId,
|
|
@@ -268,7 +268,7 @@ The hardfork must be at least spuriousDragon, but ${common.hardfork()} was given
|
|
|
268
268
|
let upstreamCommon: Common;
|
|
269
269
|
try {
|
|
270
270
|
upstreamCommon = new Common({ chain: remoteChainId });
|
|
271
|
-
} catch
|
|
271
|
+
} catch {
|
|
272
272
|
// If ethereumjs doesn't have a common it will throw and we won't have
|
|
273
273
|
// info about the activation block of each hardfork, so we don't run
|
|
274
274
|
// this validation.
|
|
@@ -315,6 +315,8 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
315
315
|
private _automine: boolean,
|
|
316
316
|
private _minGasPrice: BN,
|
|
317
317
|
private _blockTimeOffsetSeconds: BN = new BN(0),
|
|
318
|
+
private _mempoolOrder: MempoolOrder,
|
|
319
|
+
private _coinbase: string,
|
|
318
320
|
genesisAccounts: GenesisAccount[],
|
|
319
321
|
tracingConfig?: TracingConfig,
|
|
320
322
|
private _forkNetworkId?: number,
|
|
@@ -367,7 +369,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
367
369
|
error
|
|
368
370
|
);
|
|
369
371
|
|
|
370
|
-
|
|
372
|
+
if (error instanceof Error) {
|
|
373
|
+
Reporter.reportError(error);
|
|
374
|
+
}
|
|
371
375
|
}
|
|
372
376
|
}
|
|
373
377
|
|
|
@@ -434,16 +438,21 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
434
438
|
try {
|
|
435
439
|
result = await this._mineBlockWithPendingTxs(blockTimestamp);
|
|
436
440
|
} catch (err) {
|
|
437
|
-
if (err
|
|
438
|
-
|
|
439
|
-
|
|
441
|
+
if (err instanceof Error) {
|
|
442
|
+
if (err?.message.includes("sender doesn't have enough funds")) {
|
|
443
|
+
throw new InvalidInputError(err.message, err);
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
// Some network errors are HardhatErrors, and can end up here when forking
|
|
447
|
+
if (HardhatError.isHardhatError(err)) {
|
|
448
|
+
throw err;
|
|
449
|
+
}
|
|
440
450
|
|
|
441
|
-
|
|
442
|
-
if (HardhatError.isHardhatError(err)) {
|
|
443
|
-
throw err;
|
|
451
|
+
throw new TransactionExecutionError(err);
|
|
444
452
|
}
|
|
445
453
|
|
|
446
|
-
|
|
454
|
+
// eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
|
|
455
|
+
throw err;
|
|
447
456
|
}
|
|
448
457
|
|
|
449
458
|
await this._saveBlockAsSuccessfullyRun(result.block, result.blockResult);
|
|
@@ -697,7 +706,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
697
706
|
}
|
|
698
707
|
|
|
699
708
|
public getCoinbaseAddress(): Address {
|
|
700
|
-
return
|
|
709
|
+
return Address.fromString(this._coinbase);
|
|
701
710
|
}
|
|
702
711
|
|
|
703
712
|
public async getStorageAt(
|
|
@@ -870,6 +879,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
870
879
|
irregularStatesByBlockNumber: this._irregularStatesByBlockNumber,
|
|
871
880
|
userProvidedNextBlockBaseFeePerGas:
|
|
872
881
|
this.getUserProvidedNextBlockBaseFeePerGas(),
|
|
882
|
+
coinbase: this.getCoinbaseAddress().toString(),
|
|
873
883
|
};
|
|
874
884
|
|
|
875
885
|
this._irregularStatesByBlockNumber = new Map(
|
|
@@ -924,6 +934,8 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
924
934
|
this._resetUserProvidedNextBlockBaseFeePerGas();
|
|
925
935
|
}
|
|
926
936
|
|
|
937
|
+
this._coinbase = snapshot.coinbase;
|
|
938
|
+
|
|
927
939
|
// We delete this and the following snapshots, as they can only be used
|
|
928
940
|
// once in Ganache
|
|
929
941
|
this._snapshots.splice(snapshotIndex);
|
|
@@ -1103,6 +1115,10 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1103
1115
|
this._automine = automine;
|
|
1104
1116
|
}
|
|
1105
1117
|
|
|
1118
|
+
public getAutomine() {
|
|
1119
|
+
return this._automine;
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1106
1122
|
public async setBlockGasLimit(gasLimit: BN | number) {
|
|
1107
1123
|
this._txPool.setBlockGasLimit(gasLimit);
|
|
1108
1124
|
await this._txPool.updatePendingAndQueued();
|
|
@@ -1345,6 +1361,10 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1345
1361
|
};
|
|
1346
1362
|
}
|
|
1347
1363
|
|
|
1364
|
+
public async setCoinbase(coinbase: Address) {
|
|
1365
|
+
this._coinbase = coinbase.toString();
|
|
1366
|
+
}
|
|
1367
|
+
|
|
1348
1368
|
private _getGasUsedRatio(block: Block): number {
|
|
1349
1369
|
const FLOATS_PRECISION = 100_000;
|
|
1350
1370
|
|
|
@@ -1372,12 +1392,28 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1372
1392
|
.map((hash) => this.getTransactionReceipt(hash))
|
|
1373
1393
|
);
|
|
1374
1394
|
|
|
1375
|
-
const
|
|
1376
|
-
.map((r) =>
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1395
|
+
const effectiveGasRewardAndGas = receipts
|
|
1396
|
+
.map((r, i) => {
|
|
1397
|
+
const tx = block.transactions[i];
|
|
1398
|
+
const baseFeePerGas = block.header.baseFeePerGas ?? new BN(0);
|
|
1399
|
+
|
|
1400
|
+
// reward = min(maxPriorityFeePerGas, maxFeePerGas - baseFeePerGas)
|
|
1401
|
+
let effectiveGasReward: BN;
|
|
1402
|
+
if ("maxPriorityFeePerGas" in tx) {
|
|
1403
|
+
effectiveGasReward = tx.maxFeePerGas.sub(baseFeePerGas);
|
|
1404
|
+
if (tx.maxPriorityFeePerGas.lt(effectiveGasReward)) {
|
|
1405
|
+
effectiveGasReward = tx.maxPriorityFeePerGas;
|
|
1406
|
+
}
|
|
1407
|
+
} else {
|
|
1408
|
+
effectiveGasReward = tx.gasPrice.sub(baseFeePerGas);
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1411
|
+
return {
|
|
1412
|
+
effectiveGasReward,
|
|
1413
|
+
gasUsed: rpcQuantityToBN(r?.gasUsed!),
|
|
1414
|
+
};
|
|
1415
|
+
})
|
|
1416
|
+
.sort((a, b) => a.effectiveGasReward.cmp(b.effectiveGasReward));
|
|
1381
1417
|
|
|
1382
1418
|
return rewardPercentiles.map((p) => {
|
|
1383
1419
|
let gasUsed = new BN(0);
|
|
@@ -1385,16 +1421,16 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1385
1421
|
.muln(Math.ceil(p * FLOATS_PRECISION))
|
|
1386
1422
|
.divn(100 * FLOATS_PRECISION);
|
|
1387
1423
|
|
|
1388
|
-
for (const values of
|
|
1424
|
+
for (const values of effectiveGasRewardAndGas) {
|
|
1389
1425
|
gasUsed = gasUsed.add(values.gasUsed);
|
|
1390
1426
|
|
|
1391
1427
|
if (targetGas.lte(gasUsed)) {
|
|
1392
|
-
return values.
|
|
1428
|
+
return values.effectiveGasReward;
|
|
1393
1429
|
}
|
|
1394
1430
|
}
|
|
1395
1431
|
|
|
1396
|
-
return
|
|
1397
|
-
.
|
|
1432
|
+
return effectiveGasRewardAndGas[effectiveGasRewardAndGas.length - 1]
|
|
1433
|
+
.effectiveGasReward;
|
|
1398
1434
|
});
|
|
1399
1435
|
}
|
|
1400
1436
|
|
|
@@ -1479,7 +1515,12 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1479
1515
|
try {
|
|
1480
1516
|
sender = tx.getSenderAddress(); // verifies signature as a side effect
|
|
1481
1517
|
} catch (e) {
|
|
1482
|
-
|
|
1518
|
+
if (e instanceof Error) {
|
|
1519
|
+
throw new InvalidInputError(e.message);
|
|
1520
|
+
}
|
|
1521
|
+
|
|
1522
|
+
// eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
|
|
1523
|
+
throw e;
|
|
1483
1524
|
}
|
|
1484
1525
|
|
|
1485
1526
|
// validate nonce
|
|
@@ -1559,6 +1600,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1559
1600
|
const pendingTxs = this._txPool.getPendingTransactions();
|
|
1560
1601
|
const transactionQueue = new TransactionQueue(
|
|
1561
1602
|
pendingTxs,
|
|
1603
|
+
this._mempoolOrder,
|
|
1562
1604
|
headerData.baseFeePerGas
|
|
1563
1605
|
);
|
|
1564
1606
|
|
|
@@ -2306,7 +2348,7 @@ function getCommonForTracing(networkId: number, blockNumber: number): Common {
|
|
|
2306
2348
|
common.setHardfork(common.activeHardfork(blockNumber));
|
|
2307
2349
|
|
|
2308
2350
|
return common;
|
|
2309
|
-
} catch
|
|
2351
|
+
} catch {
|
|
2310
2352
|
throw new InternalError(
|
|
2311
2353
|
`Network id ${networkId} does not correspond to a network that Hardhat can trace`
|
|
2312
2354
|
);
|
|
@@ -292,18 +292,18 @@ export function getRpcReceiptOutputsFromLocalBlockExecution(
|
|
|
292
292
|
): RpcReceiptOutput[] {
|
|
293
293
|
const receipts: RpcReceiptOutput[] = [];
|
|
294
294
|
|
|
295
|
-
let
|
|
295
|
+
let blockLogIndex = 0;
|
|
296
296
|
|
|
297
297
|
for (let i = 0; i < runBlockResult.results.length; i += 1) {
|
|
298
298
|
const tx = block.transactions[i];
|
|
299
299
|
const { createdAddress, gasUsed } = runBlockResult.results[i];
|
|
300
300
|
const receipt = runBlockResult.receipts[i];
|
|
301
301
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
);
|
|
302
|
+
const logs = receipt.logs.map((log) => {
|
|
303
|
+
const result = getRpcLogOutput(log, tx, block, i, blockLogIndex);
|
|
304
|
+
blockLogIndex += 1;
|
|
305
|
+
return result;
|
|
306
|
+
});
|
|
307
307
|
|
|
308
308
|
const rpcReceipt: RpcReceiptOutput = {
|
|
309
309
|
transactionHash: bufferToRpcData(tx.hash()),
|
|
@@ -312,7 +312,7 @@ export function getRpcReceiptOutputsFromLocalBlockExecution(
|
|
|
312
312
|
blockNumber: numberToRpcQuantity(new BN(block.header.number)),
|
|
313
313
|
from: bufferToRpcData(tx.getSenderAddress().toBuffer()),
|
|
314
314
|
to: tx.to === undefined ? null : bufferToRpcData(tx.to.toBuffer()),
|
|
315
|
-
cumulativeGasUsed: numberToRpcQuantity(
|
|
315
|
+
cumulativeGasUsed: numberToRpcQuantity(new BN(receipt.gasUsed)),
|
|
316
316
|
gasUsed: numberToRpcQuantity(gasUsed),
|
|
317
317
|
contractAddress:
|
|
318
318
|
createdAddress !== undefined
|
|
@@ -395,7 +395,7 @@ export function remoteReceiptToRpcReceiptOutput(
|
|
|
395
395
|
};
|
|
396
396
|
}
|
|
397
397
|
|
|
398
|
-
export function toRpcLogOutput(log: RpcLog
|
|
398
|
+
export function toRpcLogOutput(log: RpcLog): RpcLogOutput {
|
|
399
399
|
return {
|
|
400
400
|
removed: false,
|
|
401
401
|
address: bufferToRpcData(log.address),
|
|
@@ -403,7 +403,7 @@ export function toRpcLogOutput(log: RpcLog, index?: number): RpcLogOutput {
|
|
|
403
403
|
blockNumber:
|
|
404
404
|
log.blockNumber !== null ? numberToRpcQuantity(log.blockNumber) : null,
|
|
405
405
|
data: bufferToRpcData(log.data),
|
|
406
|
-
logIndex:
|
|
406
|
+
logIndex: log.logIndex !== null ? numberToRpcQuantity(log.logIndex) : null,
|
|
407
407
|
transactionIndex:
|
|
408
408
|
log.transactionIndex !== null
|
|
409
409
|
? numberToRpcQuantity(log.transactionIndex)
|