hardhat 2.11.0-dev.0 → 2.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/builtin-tasks/clean.js +2 -1
- package/builtin-tasks/clean.js.map +1 -1
- package/builtin-tasks/compile.js +52 -95
- package/builtin-tasks/compile.js.map +1 -1
- package/builtin-tasks/flatten.js +2 -21
- package/builtin-tasks/flatten.js.map +1 -1
- package/builtin-tasks/node.js +1 -1
- package/builtin-tasks/node.js.map +1 -1
- package/builtin-tasks/test.js +3 -3
- package/builtin-tasks/test.js.map +1 -1
- package/builtin-tasks/utils/solidity-files-cache.d.ts.map +1 -1
- package/builtin-tasks/utils/solidity-files-cache.js +5 -6
- package/builtin-tasks/utils/solidity-files-cache.js.map +1 -1
- package/internal/artifacts.d.ts +3 -11
- package/internal/artifacts.d.ts.map +1 -1
- package/internal/artifacts.js +266 -133
- package/internal/artifacts.js.map +1 -1
- package/internal/cli/cli.js +26 -12
- package/internal/cli/cli.js.map +1 -1
- package/internal/core/config/config-loading.js +2 -2
- 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 +11 -31
- package/internal/core/config/config-resolution.js.map +1 -1
- package/internal/core/config/default-config.js +1 -1
- package/internal/core/config/default-config.js.map +1 -1
- package/internal/core/errors-list.d.ts +7 -0
- package/internal/core/errors-list.d.ts.map +1 -1
- package/internal/core/errors-list.js +28 -11
- package/internal/core/errors-list.js.map +1 -1
- package/internal/core/errors.d.ts +2 -1
- package/internal/core/errors.d.ts.map +1 -1
- package/internal/core/errors.js +5 -1
- package/internal/core/errors.js.map +1 -1
- package/internal/core/execution-mode.d.ts.map +1 -1
- package/internal/core/execution-mode.js +2 -21
- package/internal/core/execution-mode.js.map +1 -1
- package/internal/core/flamegraph.d.ts +4 -0
- package/internal/core/flamegraph.d.ts.map +1 -1
- package/internal/core/flamegraph.js +13 -3
- package/internal/core/flamegraph.js.map +1 -1
- package/internal/core/jsonrpc/types/base-types.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/base-types.js +12 -12
- package/internal/core/jsonrpc/types/base-types.js.map +1 -1
- package/internal/core/params/hardhat-params.d.ts.map +1 -1
- package/internal/core/params/hardhat-params.js +18 -0
- package/internal/core/params/hardhat-params.js.map +1 -1
- package/internal/core/providers/accounts.js +9 -9
- package/internal/core/providers/accounts.js.map +1 -1
- package/internal/core/providers/construction.d.ts.map +1 -1
- package/internal/core/providers/construction.js +5 -6
- package/internal/core/providers/construction.js.map +1 -1
- package/internal/core/providers/gas-providers.d.ts +2 -2
- package/internal/core/providers/util.js +1 -1
- package/internal/core/providers/util.js.map +1 -1
- package/internal/core/runtime-environment.d.ts +6 -0
- package/internal/core/runtime-environment.d.ts.map +1 -1
- package/internal/core/runtime-environment.js +72 -6
- 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 +6 -2
- package/internal/core/typescript-support.js.map +1 -1
- package/internal/hardhat-network/jsonrpc/client.d.ts +1 -1
- package/internal/hardhat-network/jsonrpc/client.d.ts.map +1 -1
- package/internal/hardhat-network/jsonrpc/client.js +10 -10
- package/internal/hardhat-network/jsonrpc/client.js.map +1 -1
- package/internal/hardhat-network/provider/BlockchainBase.d.ts +4 -4
- package/internal/hardhat-network/provider/BlockchainBase.d.ts.map +1 -1
- package/internal/hardhat-network/provider/BlockchainBase.js +31 -12
- package/internal/hardhat-network/provider/BlockchainBase.js.map +1 -1
- package/internal/hardhat-network/provider/BlockchainData.d.ts +3 -3
- package/internal/hardhat-network/provider/BlockchainData.d.ts.map +1 -1
- package/internal/hardhat-network/provider/BlockchainData.js +15 -15
- package/internal/hardhat-network/provider/BlockchainData.js.map +1 -1
- package/internal/hardhat-network/provider/HardhatBlockchain.d.ts +3 -3
- package/internal/hardhat-network/provider/HardhatBlockchain.d.ts.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.d.ts +1 -1
- package/internal/hardhat-network/provider/PoolState.d.ts.map +1 -1
- package/internal/hardhat-network/provider/PoolState.js +21 -2
- package/internal/hardhat-network/provider/PoolState.js.map +1 -1
- package/internal/hardhat-network/provider/TransactionQueue.d.ts +1 -1
- package/internal/hardhat-network/provider/TransactionQueue.d.ts.map +1 -1
- package/internal/hardhat-network/provider/TransactionQueue.js +22 -3
- package/internal/hardhat-network/provider/TransactionQueue.js.map +1 -1
- package/internal/hardhat-network/provider/TxPool.d.ts +4 -4
- package/internal/hardhat-network/provider/TxPool.d.ts.map +1 -1
- package/internal/hardhat-network/provider/TxPool.js +35 -16
- package/internal/hardhat-network/provider/TxPool.js.map +1 -1
- package/internal/hardhat-network/provider/ethereumjs-workarounds.js +4 -4
- package/internal/hardhat-network/provider/ethereumjs-workarounds.js.map +1 -1
- package/internal/hardhat-network/provider/filter.d.ts +1 -1
- package/internal/hardhat-network/provider/filter.d.ts.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/ForkBlockchain.d.ts +3 -3
- package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkBlockchain.js +13 -12
- package/internal/hardhat-network/provider/fork/ForkBlockchain.js.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts +3 -5
- package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkStateManager.js +36 -40
- package/internal/hardhat-network/provider/fork/ForkStateManager.js.map +1 -1
- package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts +1 -1
- package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts.map +1 -1
- package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts +2 -2
- package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts.map +1 -1
- package/internal/hardhat-network/provider/fork/rpcToTxData.js.map +1 -1
- package/internal/hardhat-network/provider/modules/eth.d.ts +1 -1
- package/internal/hardhat-network/provider/modules/eth.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/eth.js +22 -22
- package/internal/hardhat-network/provider/modules/eth.js.map +1 -1
- package/internal/hardhat-network/provider/modules/hardhat.d.ts +2 -0
- package/internal/hardhat-network/provider/modules/hardhat.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/hardhat.js +20 -6
- package/internal/hardhat-network/provider/modules/hardhat.js.map +1 -1
- package/internal/hardhat-network/provider/modules/logger.d.ts +2 -2
- package/internal/hardhat-network/provider/modules/logger.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/logger.js +14 -14
- package/internal/hardhat-network/provider/modules/logger.js.map +1 -1
- package/internal/hardhat-network/provider/modules/net.d.ts +1 -1
- package/internal/hardhat-network/provider/modules/net.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/personal.js +3 -3
- package/internal/hardhat-network/provider/modules/personal.js.map +1 -1
- package/internal/hardhat-network/provider/modules/web3.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/web3.js +4 -5
- package/internal/hardhat-network/provider/modules/web3.js.map +1 -1
- package/internal/hardhat-network/provider/node-types.d.ts +4 -4
- package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
- package/internal/hardhat-network/provider/node.d.ts +5 -4
- package/internal/hardhat-network/provider/node.d.ts.map +1 -1
- package/internal/hardhat-network/provider/node.js +71 -49
- package/internal/hardhat-network/provider/node.js.map +1 -1
- package/internal/hardhat-network/provider/output.d.ts +4 -4
- package/internal/hardhat-network/provider/output.d.ts.map +1 -1
- package/internal/hardhat-network/provider/output.js +24 -5
- package/internal/hardhat-network/provider/output.js.map +1 -1
- package/internal/hardhat-network/provider/provider.d.ts +2 -2
- package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
- package/internal/hardhat-network/provider/provider.js +3 -3
- package/internal/hardhat-network/provider/provider.js.map +1 -1
- package/internal/hardhat-network/provider/return-data.d.ts +1 -1
- package/internal/hardhat-network/provider/return-data.d.ts.map +1 -1
- package/internal/hardhat-network/provider/return-data.js +5 -4
- package/internal/hardhat-network/provider/return-data.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts +4 -4
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js +8 -8
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts +3 -3
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js +8 -8
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts +3 -3
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js +5 -5
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts +4 -4
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js +25 -6
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts +3 -3
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js +25 -6
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts +3 -3
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js +2 -2
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js.map +1 -1
- package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts +2 -2
- package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/makeAccount.d.ts +1 -1
- package/internal/hardhat-network/provider/utils/makeAccount.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/makeAccount.js +4 -4
- package/internal/hardhat-network/provider/utils/makeAccount.js.map +1 -1
- package/internal/hardhat-network/provider/utils/makeCommon.d.ts +1 -1
- package/internal/hardhat-network/provider/utils/makeCommon.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/makeCommon.js +2 -2
- package/internal/hardhat-network/provider/utils/makeCommon.js.map +1 -1
- package/internal/hardhat-network/provider/utils/makeStateTrie.d.ts +1 -1
- package/internal/hardhat-network/provider/utils/makeStateTrie.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/makeStateTrie.js +4 -4
- package/internal/hardhat-network/provider/utils/makeStateTrie.js.map +1 -1
- package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts +3 -3
- package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/putGenesisBlock.js +4 -4
- package/internal/hardhat-network/provider/utils/putGenesisBlock.js.map +1 -1
- package/internal/hardhat-network/provider/utils/random.d.ts +2 -1
- package/internal/hardhat-network/provider/utils/random.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/random.js +10 -9
- package/internal/hardhat-network/provider/utils/random.js.map +1 -1
- package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.js +21 -2
- package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.js.map +1 -1
- package/internal/hardhat-network/provider/utils/txMapToArray.d.ts +1 -1
- package/internal/hardhat-network/provider/utils/txMapToArray.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/consoleLogger.js +45 -45
- package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
- package/internal/hardhat-network/stack-traces/constants.d.ts +1 -1
- package/internal/hardhat-network/stack-traces/constants.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/constants.js +1 -1
- package/internal/hardhat-network/stack-traces/constants.js.map +1 -1
- package/internal/hardhat-network/stack-traces/contracts-identifier.js +2 -2
- package/internal/hardhat-network/stack-traces/contracts-identifier.js.map +1 -1
- package/internal/hardhat-network/stack-traces/debug.js +13 -13
- package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
- package/internal/hardhat-network/stack-traces/error-inferrer.js +2 -2
- package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
- package/internal/hardhat-network/stack-traces/message-trace.d.ts +1 -1
- package/internal/hardhat-network/stack-traces/message-trace.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/model.js +6 -6
- package/internal/hardhat-network/stack-traces/model.js.map +1 -1
- package/internal/hardhat-network/stack-traces/panic-errors.d.ts +1 -1
- package/internal/hardhat-network/stack-traces/panic-errors.js +9 -9
- package/internal/hardhat-network/stack-traces/panic-errors.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/solidity-stack-trace.d.ts +1 -1
- package/internal/hardhat-network/stack-traces/solidityTracer.d.ts +0 -2
- package/internal/hardhat-network/stack-traces/solidityTracer.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/solidityTracer.js +2 -4
- package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts +1 -1
- package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-debug-tracer.js +27 -25
- package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-tracer.d.ts +2 -2
- package/internal/hardhat-network/stack-traces/vm-tracer.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-tracer.js +15 -12
- package/internal/hardhat-network/stack-traces/vm-tracer.js.map +1 -1
- package/internal/lib/hardhat-lib.d.ts.map +1 -1
- package/internal/lib/hardhat-lib.js +0 -2
- package/internal/lib/hardhat-lib.js.map +1 -1
- package/internal/solidity/compilation-job.d.ts.map +1 -1
- package/internal/solidity/compilation-job.js +6 -7
- package/internal/solidity/compilation-job.js.map +1 -1
- package/internal/solidity/compiler/downloader.d.ts +66 -40
- package/internal/solidity/compiler/downloader.d.ts.map +1 -1
- package/internal/solidity/compiler/downloader.js +180 -154
- package/internal/solidity/compiler/downloader.js.map +1 -1
- package/internal/solidity/compiler/index.d.ts +8 -4
- package/internal/solidity/compiler/index.d.ts.map +1 -1
- package/internal/solidity/compiler/index.js +1 -1
- package/internal/solidity/compiler/index.js.map +1 -1
- package/internal/solidity/dependencyGraph.d.ts.map +1 -1
- package/internal/solidity/dependencyGraph.js +3 -5
- package/internal/solidity/dependencyGraph.js.map +1 -1
- package/internal/solidity/parse.d.ts.map +1 -1
- package/internal/solidity/parse.js +2 -58
- package/internal/solidity/parse.js.map +1 -1
- package/internal/solidity/resolver.d.ts +1 -0
- package/internal/solidity/resolver.d.ts.map +1 -1
- package/internal/solidity/resolver.js +33 -8
- package/internal/solidity/resolver.js.map +1 -1
- package/internal/util/bigint.d.ts +13 -24
- package/internal/util/bigint.d.ts.map +1 -1
- package/internal/util/bigint.js +22 -29
- package/internal/util/bigint.js.map +1 -1
- package/internal/util/download.d.ts.map +1 -1
- package/internal/util/download.js +1 -1
- package/internal/util/download.js.map +1 -1
- package/internal/util/fs-utils.d.ts +26 -9
- package/internal/util/fs-utils.d.ts.map +1 -1
- package/internal/util/fs-utils.js +111 -68
- package/internal/util/fs-utils.js.map +1 -1
- package/internal/util/glob.d.ts +13 -0
- package/internal/util/glob.d.ts.map +1 -1
- package/internal/util/glob.js +13 -0
- package/internal/util/glob.js.map +1 -1
- package/internal/util/keccak.d.ts +3 -0
- package/internal/util/keccak.d.ts.map +1 -0
- package/internal/util/keccak.js +12 -0
- package/internal/util/keccak.js.map +1 -0
- package/internal/util/scripts-runner.d.ts.map +1 -1
- package/internal/util/scripts-runner.js +7 -4
- package/internal/util/scripts-runner.js.map +1 -1
- package/package.json +15 -15
- package/register.js +1 -3
- package/register.js.map +1 -1
- package/sample-projects/javascript/contracts/Lock.sol +3 -3
- package/sample-projects/typescript/contracts/Lock.sol +3 -3
- package/src/builtin-tasks/clean.ts +9 -6
- package/src/builtin-tasks/compile.ts +96 -128
- package/src/builtin-tasks/flatten.ts +2 -3
- package/src/builtin-tasks/node.ts +2 -2
- package/src/builtin-tasks/test.ts +7 -3
- package/src/builtin-tasks/utils/solidity-files-cache.ts +9 -8
- package/src/internal/artifacts.ts +392 -182
- package/src/internal/cli/cli.ts +43 -17
- package/src/internal/core/config/config-loading.ts +1 -1
- package/src/internal/core/config/config-resolution.ts +12 -24
- package/src/internal/core/config/default-config.ts +1 -1
- package/src/internal/core/errors-list.ts +29 -13
- package/src/internal/core/errors.ts +10 -2
- package/src/internal/core/execution-mode.ts +2 -3
- package/src/internal/core/flamegraph.ts +270 -0
- package/src/internal/core/jsonrpc/types/base-types.ts +7 -3
- package/src/internal/core/params/hardhat-params.ts +18 -0
- package/src/internal/core/providers/accounts.ts +8 -8
- package/src/internal/core/providers/construction.ts +10 -8
- package/src/internal/core/providers/gas-providers.ts +2 -2
- package/src/internal/core/providers/util.ts +1 -1
- package/src/internal/core/runtime-environment.ts +103 -10
- package/src/internal/core/task-profiling.ts +56 -0
- package/src/internal/core/typescript-support.ts +11 -2
- package/src/internal/hardhat-network/jsonrpc/client.ts +1 -1
- package/src/internal/hardhat-network/provider/BlockchainBase.ts +6 -6
- package/src/internal/hardhat-network/provider/BlockchainData.ts +5 -5
- package/src/internal/hardhat-network/provider/HardhatBlockchain.ts +4 -4
- package/src/internal/hardhat-network/provider/PoolState.ts +2 -2
- package/src/internal/hardhat-network/provider/TransactionQueue.ts +2 -2
- package/src/internal/hardhat-network/provider/TxPool.ts +12 -5
- package/src/internal/hardhat-network/provider/ethereumjs-workarounds.ts +3 -3
- package/src/internal/hardhat-network/provider/filter.ts +2 -2
- package/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts +10 -10
- package/src/internal/hardhat-network/provider/fork/ForkStateManager.ts +12 -18
- package/src/internal/hardhat-network/provider/fork/rpcToBlockData.ts +1 -1
- package/src/internal/hardhat-network/provider/fork/rpcToTxData.ts +5 -2
- package/src/internal/hardhat-network/provider/modules/eth.ts +10 -6
- package/src/internal/hardhat-network/provider/modules/hardhat.ts +25 -1
- package/src/internal/hardhat-network/provider/modules/logger.ts +3 -3
- package/src/internal/hardhat-network/provider/modules/net.ts +1 -1
- package/src/internal/hardhat-network/provider/modules/personal.ts +1 -1
- package/src/internal/hardhat-network/provider/modules/web3.ts +4 -6
- package/src/internal/hardhat-network/provider/node-types.ts +6 -6
- package/src/internal/hardhat-network/provider/node.ts +25 -12
- package/src/internal/hardhat-network/provider/output.ts +6 -6
- package/src/internal/hardhat-network/provider/provider.ts +7 -6
- package/src/internal/hardhat-network/provider/return-data.ts +9 -5
- package/src/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.ts +9 -5
- package/src/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.ts +8 -4
- package/src/internal/hardhat-network/provider/transactions/FakeSenderTransaction.ts +4 -4
- package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts +8 -5
- package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.ts +4 -4
- package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.ts +3 -3
- package/src/internal/hardhat-network/provider/types/HardhatBlockchainInterface.ts +2 -2
- package/src/internal/hardhat-network/provider/utils/makeAccount.ts +6 -1
- package/src/internal/hardhat-network/provider/utils/makeCommon.ts +1 -1
- package/src/internal/hardhat-network/provider/utils/makeStateTrie.ts +7 -3
- package/src/internal/hardhat-network/provider/utils/putGenesisBlock.ts +6 -6
- package/src/internal/hardhat-network/provider/utils/random.ts +17 -14
- package/src/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/consoleLogger.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/constants.ts +2 -0
- package/src/internal/hardhat-network/stack-traces/contracts-identifier.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/debug.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/error-inferrer.ts +3 -3
- package/src/internal/hardhat-network/stack-traces/message-trace.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/model.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/panic-errors.ts +11 -11
- package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/solidity-stack-trace.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/solidityTracer.ts +1 -4
- package/src/internal/hardhat-network/stack-traces/vm-debug-tracer.ts +31 -17
- package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +29 -14
- package/src/internal/lib/hardhat-lib.ts +0 -3
- package/src/internal/solidity/compilation-job.ts +11 -11
- package/src/internal/solidity/compiler/downloader.ts +271 -243
- package/src/internal/solidity/compiler/index.ts +13 -7
- package/src/internal/solidity/dependencyGraph.ts +12 -8
- package/src/internal/solidity/parse.ts +4 -70
- package/src/internal/solidity/resolver.ts +36 -8
- package/src/internal/util/bigint.ts +25 -43
- package/src/internal/util/download.ts +2 -2
- package/src/internal/util/fs-utils.ts +223 -0
- package/src/internal/util/glob.ts +13 -0
- package/src/internal/util/keccak.ts +5 -0
- package/src/internal/util/scripts-runner.ts +13 -4
- package/src/internal/util/wei-values.ts +1 -1
- package/src/internal/{hardhat-network/vendor → vendor}/await-semaphore/index.ts +0 -0
- package/src/profiling.ts +37 -0
- package/src/register.ts +1 -4
- package/src/types/artifacts.ts +21 -0
- package/src/types/config.ts +7 -7
- package/src/types/runtime.ts +2 -0
- package/src/utils/source-names.ts +36 -26
- package/types/artifacts.d.ts +19 -0
- package/types/artifacts.d.ts.map +1 -1
- package/types/config.d.ts +7 -7
- package/types/runtime.d.ts +2 -0
- package/types/runtime.d.ts.map +1 -1
- package/utils/source-names.d.ts.map +1 -1
- package/utils/source-names.js +25 -36
- package/utils/source-names.js.map +1 -1
- package/internal/hardhat-network/provider/fork/random.d.ts +0 -7
- package/internal/hardhat-network/provider/fork/random.d.ts.map +0 -1
- package/internal/hardhat-network/provider/fork/random.js +0 -32
- package/internal/hardhat-network/provider/fork/random.js.map +0 -1
- package/internal/hardhat-network/provider/utils/bnToHex.d.ts +0 -3
- package/internal/hardhat-network/provider/utils/bnToHex.d.ts.map +0 -1
- package/internal/hardhat-network/provider/utils/bnToHex.js +0 -9
- package/internal/hardhat-network/provider/utils/bnToHex.js.map +0 -1
- package/internal/hardhat-network/provider/utils/makeForkCommon.d.ts +0 -4
- package/internal/hardhat-network/provider/utils/makeForkCommon.d.ts.map +0 -1
- package/internal/hardhat-network/provider/utils/makeForkCommon.js +0 -16
- package/internal/hardhat-network/provider/utils/makeForkCommon.js.map +0 -1
- package/internal/hardhat-network/vendor/await-semaphore/index.d.ts +0 -12
- package/internal/hardhat-network/vendor/await-semaphore/index.d.ts.map +0 -1
- package/internal/hardhat-network/vendor/await-semaphore/index.js +0 -64
- package/internal/hardhat-network/vendor/await-semaphore/index.js.map +0 -1
- package/internal/util/antlr-prototype-pollution-workaround.d.ts +0 -16
- package/internal/util/antlr-prototype-pollution-workaround.d.ts.map +0 -1
- package/internal/util/antlr-prototype-pollution-workaround.js +0 -22
- package/internal/util/antlr-prototype-pollution-workaround.js.map +0 -1
- package/src/internal/util/antlr-prototype-pollution-workaround.ts +0 -17
package/src/internal/cli/cli.ts
CHANGED
|
@@ -4,12 +4,20 @@ import debug from "debug";
|
|
|
4
4
|
import semver from "semver";
|
|
5
5
|
import "source-map-support/register";
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
TASK_COMPILE,
|
|
9
|
+
TASK_HELP,
|
|
10
|
+
TASK_TEST,
|
|
11
|
+
} from "../../builtin-tasks/task-names";
|
|
8
12
|
import { TaskArguments } from "../../types";
|
|
9
13
|
import { HARDHAT_NAME } from "../constants";
|
|
10
14
|
import { HardhatContext } from "../context";
|
|
11
15
|
import { loadConfigAndTasks } from "../core/config/config-loading";
|
|
12
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
assertHardhatInvariant,
|
|
18
|
+
HardhatError,
|
|
19
|
+
HardhatPluginError,
|
|
20
|
+
} from "../core/errors";
|
|
13
21
|
import { ERRORS, getErrorCode } from "../core/errors-list";
|
|
14
22
|
import { isHardhatInstalledLocallyOrLinked } from "../core/execution-mode";
|
|
15
23
|
import { getEnvHardhatArguments } from "../core/params/env-variables";
|
|
@@ -27,7 +35,7 @@ import {
|
|
|
27
35
|
} from "../util/global-dir";
|
|
28
36
|
import { getPackageJson, PackageJson } from "../util/packageInfo";
|
|
29
37
|
|
|
30
|
-
import {
|
|
38
|
+
import { saveFlamegraph } from "../core/flamegraph";
|
|
31
39
|
import { Analytics } from "./analytics";
|
|
32
40
|
import { ArgumentsParser } from "./ArgumentsParser";
|
|
33
41
|
import { enableEmoji } from "./emoji";
|
|
@@ -41,8 +49,6 @@ import {
|
|
|
41
49
|
|
|
42
50
|
const log = debug("hardhat:core:cli");
|
|
43
51
|
|
|
44
|
-
applyWorkaround();
|
|
45
|
-
|
|
46
52
|
const ANALYTICS_SLOW_TASK_THRESHOLD = 300;
|
|
47
53
|
|
|
48
54
|
async function printVersionMessage(packageJson: PackageJson) {
|
|
@@ -167,7 +173,13 @@ async function main() {
|
|
|
167
173
|
}
|
|
168
174
|
|
|
169
175
|
if (willRunWithTypescript(hardhatArguments.config)) {
|
|
170
|
-
loadTsNode(hardhatArguments.tsconfig);
|
|
176
|
+
loadTsNode(hardhatArguments.tsconfig, hardhatArguments.typecheck);
|
|
177
|
+
} else {
|
|
178
|
+
if (hardhatArguments.typecheck === true) {
|
|
179
|
+
throw new HardhatError(
|
|
180
|
+
ERRORS.ARGUMENTS.TYPECHECK_USED_IN_JAVASCRIPT_PROJECT
|
|
181
|
+
);
|
|
182
|
+
}
|
|
171
183
|
}
|
|
172
184
|
|
|
173
185
|
let taskName = parsedTaskName ?? TASK_HELP;
|
|
@@ -251,23 +263,37 @@ async function main() {
|
|
|
251
263
|
|
|
252
264
|
ctx.setHardhatRuntimeEnvironment(env);
|
|
253
265
|
|
|
254
|
-
|
|
266
|
+
try {
|
|
267
|
+
const timestampBeforeRun = new Date().getTime();
|
|
255
268
|
|
|
256
|
-
|
|
269
|
+
await env.run(taskName, taskArguments);
|
|
257
270
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
271
|
+
const timestampAfterRun = new Date().getTime();
|
|
272
|
+
|
|
273
|
+
if (
|
|
274
|
+
timestampAfterRun - timestampBeforeRun >
|
|
275
|
+
ANALYTICS_SLOW_TASK_THRESHOLD &&
|
|
276
|
+
taskName !== TASK_COMPILE
|
|
277
|
+
) {
|
|
278
|
+
await hitPromise;
|
|
279
|
+
} else {
|
|
280
|
+
abortAnalytics();
|
|
281
|
+
}
|
|
282
|
+
} finally {
|
|
283
|
+
if (hardhatArguments.flamegraph === true) {
|
|
284
|
+
assertHardhatInvariant(
|
|
285
|
+
env.entryTaskProfile !== undefined,
|
|
286
|
+
"--flamegraph was set but entryTaskProfile is not defined"
|
|
287
|
+
);
|
|
288
|
+
|
|
289
|
+
const flamegraphPath = saveFlamegraph(env.entryTaskProfile);
|
|
290
|
+
console.log("Created flamegraph file", flamegraphPath);
|
|
291
|
+
}
|
|
266
292
|
}
|
|
267
293
|
|
|
268
294
|
// VSCode extension prompt for installation
|
|
269
295
|
if (
|
|
270
|
-
taskName ===
|
|
296
|
+
taskName === TASK_TEST &&
|
|
271
297
|
!isRunningOnCiServer() &&
|
|
272
298
|
process.stdout.isTTY === true
|
|
273
299
|
) {
|
|
@@ -12,12 +12,12 @@ import {
|
|
|
12
12
|
HardhatUserConfig,
|
|
13
13
|
} from "../../../types";
|
|
14
14
|
import { HardhatContext } from "../../context";
|
|
15
|
-
import { SUPPORTED_SOLIDITY_VERSION_RANGE } from "../../hardhat-network/stack-traces/solidityTracer";
|
|
16
15
|
import { findClosestPackageJson } from "../../util/packageInfo";
|
|
17
16
|
import { HardhatError } from "../errors";
|
|
18
17
|
import { ERRORS } from "../errors-list";
|
|
19
18
|
import { getUserConfigPath } from "../project-structure";
|
|
20
19
|
|
|
20
|
+
import { SUPPORTED_SOLIDITY_VERSION_RANGE } from "../../hardhat-network/stack-traces/constants";
|
|
21
21
|
import { resolveConfig } from "./config-resolution";
|
|
22
22
|
import { validateConfig } from "./config-validation";
|
|
23
23
|
import { DEFAULT_SOLC_VERSION } from "./default-config";
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as fs from "fs";
|
|
2
1
|
import cloneDeep from "lodash/cloneDeep";
|
|
3
2
|
import path from "path";
|
|
4
3
|
|
|
@@ -32,11 +31,11 @@ import {
|
|
|
32
31
|
SolidityUserConfig,
|
|
33
32
|
} from "../../../types";
|
|
34
33
|
import { HARDHAT_NETWORK_NAME } from "../../constants";
|
|
35
|
-
import { BigIntUtils } from "../../util/bigint";
|
|
36
34
|
import { HardforkName } from "../../util/hardforks";
|
|
37
35
|
import { fromEntries } from "../../util/lang";
|
|
38
36
|
import { assertHardhatInvariant } from "../errors";
|
|
39
37
|
|
|
38
|
+
import { getRealPathSync } from "../../util/fs-utils";
|
|
40
39
|
import {
|
|
41
40
|
DEFAULT_SOLC_VERSION,
|
|
42
41
|
defaultDefaultNetwork,
|
|
@@ -157,9 +156,7 @@ function resolveHardhatNetworkConfig(
|
|
|
157
156
|
if (forking !== undefined) {
|
|
158
157
|
const blockNumber = hardhatNetworkConfig?.forking?.blockNumber;
|
|
159
158
|
if (blockNumber !== undefined) {
|
|
160
|
-
forking.blockNumber =
|
|
161
|
-
hardhatNetworkConfig?.forking?.blockNumber
|
|
162
|
-
);
|
|
159
|
+
forking.blockNumber = hardhatNetworkConfig?.forking?.blockNumber;
|
|
163
160
|
}
|
|
164
161
|
|
|
165
162
|
const httpHeaders = hardhatNetworkConfig.forking?.httpHeaders;
|
|
@@ -175,21 +172,16 @@ function resolveHardhatNetworkConfig(
|
|
|
175
172
|
clonedDefaultHardhatNetworkParams.minGasPrice
|
|
176
173
|
);
|
|
177
174
|
|
|
178
|
-
const blockGasLimit =
|
|
175
|
+
const blockGasLimit =
|
|
179
176
|
hardhatNetworkConfig.blockGasLimit ??
|
|
180
|
-
|
|
181
|
-
);
|
|
177
|
+
clonedDefaultHardhatNetworkParams.blockGasLimit;
|
|
182
178
|
|
|
183
|
-
const gas =
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
const
|
|
187
|
-
hardhatNetworkConfig.gasPrice ?? clonedDefaultHardhatNetworkParams.gasPrice
|
|
188
|
-
);
|
|
189
|
-
const initialBaseFeePerGas = BigIntUtils.mapNumberToBigInt(
|
|
179
|
+
const gas = hardhatNetworkConfig.gas ?? blockGasLimit;
|
|
180
|
+
const gasPrice =
|
|
181
|
+
hardhatNetworkConfig.gasPrice ?? clonedDefaultHardhatNetworkParams.gasPrice;
|
|
182
|
+
const initialBaseFeePerGas =
|
|
190
183
|
hardhatNetworkConfig.initialBaseFeePerGas ??
|
|
191
|
-
|
|
192
|
-
);
|
|
184
|
+
clonedDefaultHardhatNetworkParams.initialBaseFeePerGas;
|
|
193
185
|
|
|
194
186
|
const initialDate =
|
|
195
187
|
hardhatNetworkConfig.initialDate ?? new Date().toISOString();
|
|
@@ -277,12 +269,8 @@ function resolveHttpNetworkConfig(
|
|
|
277
269
|
...networkConfig,
|
|
278
270
|
accounts,
|
|
279
271
|
url,
|
|
280
|
-
gas:
|
|
281
|
-
|
|
282
|
-
),
|
|
283
|
-
gasPrice: BigIntUtils.mapNumberToBigInt(
|
|
284
|
-
networkConfig.gasPrice ?? defaultHttpNetworkParams.gasPrice
|
|
285
|
-
),
|
|
272
|
+
gas: networkConfig.gas ?? defaultHttpNetworkParams.gas,
|
|
273
|
+
gasPrice: networkConfig.gasPrice ?? defaultHttpNetworkParams.gasPrice,
|
|
286
274
|
};
|
|
287
275
|
}
|
|
288
276
|
|
|
@@ -455,7 +443,7 @@ export function resolveProjectPaths(
|
|
|
455
443
|
userConfigPath: string,
|
|
456
444
|
userPaths: ProjectPathsUserConfig = {}
|
|
457
445
|
): ProjectPathsConfig {
|
|
458
|
-
const configFile =
|
|
446
|
+
const configFile = getRealPathSync(userConfigPath);
|
|
459
447
|
const configDir = path.dirname(configFile);
|
|
460
448
|
|
|
461
449
|
const root = resolvePathFrom(configDir, "", userPaths.root);
|
|
@@ -37,7 +37,7 @@ export const defaultHardhatNetworkParams: Omit<
|
|
|
37
37
|
"gas" | "initialDate"
|
|
38
38
|
> = {
|
|
39
39
|
hardfork: "arrowGlacier",
|
|
40
|
-
blockGasLimit:
|
|
40
|
+
blockGasLimit: 30_000_000,
|
|
41
41
|
gasPrice: HARDHAT_NETWORK_DEFAULT_GAS_PRICE,
|
|
42
42
|
chainId: 31337,
|
|
43
43
|
throwOnTransactionFailures: true,
|
|
@@ -668,6 +668,16 @@ Please double check how you invoked Hardhat or ran your task.`,
|
|
|
668
668
|
This is not supported. Please run the help task to see the available options.`,
|
|
669
669
|
shouldBeReported: false,
|
|
670
670
|
},
|
|
671
|
+
TYPECHECK_USED_IN_JAVASCRIPT_PROJECT: {
|
|
672
|
+
number: 313,
|
|
673
|
+
title: "The --typecheck flag was used in a javascript project",
|
|
674
|
+
message:
|
|
675
|
+
"Trying to use the --typecheck flag, but the project is not in typescript",
|
|
676
|
+
description: `You tried to run Hardhat with the \`--typecheck\` flag in a javascript project.
|
|
677
|
+
|
|
678
|
+
This flag can only be used in typescript projects.`,
|
|
679
|
+
shouldBeReported: false,
|
|
680
|
+
},
|
|
671
681
|
},
|
|
672
682
|
RESOLVER: {
|
|
673
683
|
FILE_NOT_FOUND: {
|
|
@@ -787,42 +797,48 @@ Try installing the library using npm.`,
|
|
|
787
797
|
SOLC: {
|
|
788
798
|
INVALID_VERSION: {
|
|
789
799
|
number: 500,
|
|
790
|
-
message:
|
|
791
|
-
|
|
792
|
-
|
|
800
|
+
message: `Solidity version %version% is invalid or hasn't been released yet.
|
|
801
|
+
|
|
802
|
+
If you are certain it has been released, run "npx hardhat clean --global" and try again`,
|
|
803
|
+
title: "Invalid or unreleased `solc` version",
|
|
793
804
|
description: `The Solidity version in your config is invalid or hasn't been released yet.
|
|
794
805
|
|
|
795
|
-
|
|
806
|
+
If you are certain it has been released, run \`npx hardhat clean --global\` and try again.`,
|
|
796
807
|
shouldBeReported: false,
|
|
797
808
|
},
|
|
798
809
|
DOWNLOAD_FAILED: {
|
|
799
810
|
number: 501,
|
|
800
811
|
message:
|
|
801
|
-
"Couldn't download compiler version %remoteVersion%. Please check your connection.",
|
|
812
|
+
"Couldn't download compiler version %remoteVersion%. Please check your internet connection and try again.",
|
|
802
813
|
title: "`solc` download failed",
|
|
803
814
|
description: `Couldn't download \`solc\`.
|
|
804
815
|
|
|
805
|
-
Please check your
|
|
816
|
+
Please check your internet connection and try again.`,
|
|
806
817
|
shouldBeReported: false,
|
|
807
818
|
},
|
|
808
819
|
VERSION_LIST_DOWNLOAD_FAILED: {
|
|
809
820
|
number: 502,
|
|
810
821
|
message:
|
|
811
|
-
"Couldn't download compiler
|
|
822
|
+
"Couldn't download compiler version list. Please check your internet connection and try again.",
|
|
812
823
|
title: "Couldn't obtain `solc` version list",
|
|
813
824
|
description: `Couldn't download \`solc\`'s version list.
|
|
814
825
|
|
|
815
|
-
Please check your
|
|
826
|
+
Please check your internet connection and try again.`,
|
|
816
827
|
shouldBeReported: false,
|
|
817
828
|
},
|
|
818
829
|
INVALID_DOWNLOAD: {
|
|
819
830
|
number: 503,
|
|
820
|
-
message:
|
|
821
|
-
|
|
831
|
+
message: `Couldn't download compiler version %remoteVersion%: Checksum verification failed.
|
|
832
|
+
|
|
833
|
+
Please check your internet connection and try again.
|
|
834
|
+
|
|
835
|
+
If this error persists, run "npx hardhat clean --global".`,
|
|
822
836
|
title: "Downloaded `solc` checksum verification failed",
|
|
823
|
-
description: `
|
|
824
|
-
|
|
825
|
-
Please check your
|
|
837
|
+
description: `Hardhat downloaded a version of the Solidity compiler, and its checksum verification failed.
|
|
838
|
+
|
|
839
|
+
Please check your internet connection and try again.
|
|
840
|
+
|
|
841
|
+
If this error persists, run \`npx hardhat clean --global\`.`,
|
|
826
842
|
shouldBeReported: false,
|
|
827
843
|
},
|
|
828
844
|
CANT_GET_COMPILER: {
|
|
@@ -6,6 +6,8 @@ import { ErrorDescriptor, ERRORS, getErrorCode } from "./errors-list";
|
|
|
6
6
|
const inspect = Symbol.for("nodejs.util.inspect.custom");
|
|
7
7
|
|
|
8
8
|
export class CustomError extends Error {
|
|
9
|
+
private _stack: string;
|
|
10
|
+
|
|
9
11
|
constructor(message: string, public readonly parent?: Error) {
|
|
10
12
|
// WARNING: Using super when extending a builtin class doesn't work well
|
|
11
13
|
// with TS if you are compiling to a version of JavaScript that doesn't have
|
|
@@ -20,10 +22,16 @@ export class CustomError extends Error {
|
|
|
20
22
|
if ((Error as any).captureStackTrace !== undefined) {
|
|
21
23
|
(Error as any).captureStackTrace(this, this.constructor);
|
|
22
24
|
}
|
|
25
|
+
|
|
26
|
+
this._stack = this.stack ?? "";
|
|
27
|
+
|
|
28
|
+
Object.defineProperty(this, "stack", {
|
|
29
|
+
get: () => this[inspect](),
|
|
30
|
+
});
|
|
23
31
|
}
|
|
24
32
|
|
|
25
|
-
public [inspect]() {
|
|
26
|
-
let str = this.
|
|
33
|
+
public [inspect](): string {
|
|
34
|
+
let str = this._stack;
|
|
27
35
|
if (this.parent !== undefined) {
|
|
28
36
|
const parentAsAny = this.parent as any;
|
|
29
37
|
const causeString =
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import * as fs from "fs";
|
|
2
|
-
|
|
3
1
|
import { getPackageJsonPath } from "../util/packageInfo";
|
|
2
|
+
import { getRealPathSync } from "../util/fs-utils";
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* Returns true if Hardhat is installed locally or linked from its repository,
|
|
@@ -20,7 +19,7 @@ export function isHardhatInstalledLocallyOrLinked(configPath?: string) {
|
|
|
20
19
|
// We need to get the realpaths here, as hardhat may be linked and
|
|
21
20
|
// running with `node --preserve-symlinks`
|
|
22
21
|
return (
|
|
23
|
-
|
|
22
|
+
getRealPathSync(resolvedPackageJson) === getRealPathSync(thisPackageJson)
|
|
24
23
|
);
|
|
25
24
|
} catch {
|
|
26
25
|
return false;
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import { assertHardhatInvariant } from "./errors";
|
|
3
|
+
import { flagParallelChildren, TaskProfile } from "./task-profiling";
|
|
4
|
+
|
|
5
|
+
export interface Flamegraph {
|
|
6
|
+
name: string;
|
|
7
|
+
value: number;
|
|
8
|
+
children: Flamegraph[];
|
|
9
|
+
parallel: boolean;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function profileToFlamegraph(profile: TaskProfile): Flamegraph {
|
|
13
|
+
assertHardhatInvariant(
|
|
14
|
+
profile.end !== undefined,
|
|
15
|
+
`Formatting invalid task profile for ${profile.name}. No end was recorded.`
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
return {
|
|
19
|
+
name: profile.name,
|
|
20
|
+
// We assume this is a safe int, which is ok unless a task runs for months
|
|
21
|
+
value: Number(profile.end - profile.start),
|
|
22
|
+
children: profile.children.map((c) => profileToFlamegraph(c)),
|
|
23
|
+
parallel: profile.parallel === true,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Merges compatible children of toFold and its children.
|
|
29
|
+
*
|
|
30
|
+
* Compatible in a traditional Flamegraph means having the same name. We
|
|
31
|
+
* modified that notion and also require their `parallel` flag to have the same
|
|
32
|
+
* value. This means that parallel and non-parallel calls to the same function
|
|
33
|
+
* are shown with two Flamegraph "blocks".
|
|
34
|
+
*
|
|
35
|
+
* The parallel block shows the max running time, instead of the sum of them.
|
|
36
|
+
**/
|
|
37
|
+
function foldFramegraph(toFold: Flamegraph): Flamegraph {
|
|
38
|
+
if (toFold.children.length === 0) {
|
|
39
|
+
return {
|
|
40
|
+
name: toFold.name,
|
|
41
|
+
value: toFold.value,
|
|
42
|
+
children: [],
|
|
43
|
+
parallel: toFold.parallel,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const children = toFold.children.map((c) => foldFramegraph(c));
|
|
48
|
+
children.sort((a, b) =>
|
|
49
|
+
a.parallel === b.parallel ? 0 : b.parallel ? -1 : 1
|
|
50
|
+
);
|
|
51
|
+
children.sort((a, b) => a.name.localeCompare(b.name));
|
|
52
|
+
|
|
53
|
+
const foldedChildren = [children[0]];
|
|
54
|
+
const mergedChildren = new Set<number>();
|
|
55
|
+
for (let i = 1; i < children.length; i++) {
|
|
56
|
+
const latest = foldedChildren[foldedChildren.length - 1];
|
|
57
|
+
if (
|
|
58
|
+
children[i].name === latest.name &&
|
|
59
|
+
children[i].parallel === latest.parallel
|
|
60
|
+
) {
|
|
61
|
+
if (latest.parallel) {
|
|
62
|
+
latest.value = Math.max(latest.value, children[i].value);
|
|
63
|
+
} else {
|
|
64
|
+
latest.value += children[i].value;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
latest.children.push(...children[i].children);
|
|
68
|
+
mergedChildren.add(foldedChildren.length - 1);
|
|
69
|
+
} else {
|
|
70
|
+
foldedChildren.push(children[i]);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
for (const i of mergedChildren.values()) {
|
|
75
|
+
foldedChildren[i] = foldFramegraph(foldedChildren[i]);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
name: toFold.name,
|
|
80
|
+
value: toFold.value,
|
|
81
|
+
children: foldedChildren,
|
|
82
|
+
parallel: toFold.parallel,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function createFlamegraphHtmlFile(flamegraph: Flamegraph): string {
|
|
87
|
+
const content = getFlamegraphFileContent(foldFramegraph(flamegraph));
|
|
88
|
+
const path = "flamegraph.html";
|
|
89
|
+
|
|
90
|
+
fs.writeFileSync(path, content, { encoding: "utf8" });
|
|
91
|
+
|
|
92
|
+
return path;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function getFlamegraphFileContent(flamegraph: Flamegraph): string {
|
|
96
|
+
const data = JSON.stringify(foldFramegraph(flamegraph), undefined, 2);
|
|
97
|
+
return `<!-- Based on d3-flamegraph's example. See its license in: https://github.com/spiermar/d3-flame-graph/blob/master/LICENSE -->
|
|
98
|
+
<!DOCTYPE html>
|
|
99
|
+
<html lang="en">
|
|
100
|
+
<head>
|
|
101
|
+
<meta charset="utf-8">
|
|
102
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
103
|
+
|
|
104
|
+
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
|
|
105
|
+
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/spiermar/d3-flame-graph@2.0.3/dist/d3-flamegraph.css">
|
|
106
|
+
|
|
107
|
+
<style>
|
|
108
|
+
/* Space out content a bit */
|
|
109
|
+
body {
|
|
110
|
+
padding-top: 20px;
|
|
111
|
+
padding-bottom: 20px;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/* Custom page header */
|
|
115
|
+
.header {
|
|
116
|
+
padding-bottom: 20px;
|
|
117
|
+
padding-right: 15px;
|
|
118
|
+
padding-left: 15px;
|
|
119
|
+
border-bottom: 1px solid #e5e5e5;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* Make the masthead heading the same height as the navigation */
|
|
123
|
+
.header h3 {
|
|
124
|
+
margin-top: 0;
|
|
125
|
+
margin-bottom: 0;
|
|
126
|
+
line-height: 40px;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/* Customize container */
|
|
130
|
+
.container {
|
|
131
|
+
max-width: 990px;
|
|
132
|
+
}
|
|
133
|
+
</style>
|
|
134
|
+
|
|
135
|
+
<title>Hardhat task flamegraph</title>
|
|
136
|
+
</head>
|
|
137
|
+
<body>
|
|
138
|
+
<div class="container">
|
|
139
|
+
<div class="header clearfix">
|
|
140
|
+
<nav>
|
|
141
|
+
<div class="pull-right">
|
|
142
|
+
<form class="form-inline" id="form">
|
|
143
|
+
<a class="btn" href="javascript: resetZoom();">Reset zoom</a>
|
|
144
|
+
<a class="btn" href="javascript: clear();">Clear</a>
|
|
145
|
+
<div class="form-group">
|
|
146
|
+
<input type="text" class="form-control" id="term">
|
|
147
|
+
</div>
|
|
148
|
+
<a class="btn btn-primary" href="javascript: search();">Search</a>
|
|
149
|
+
</form>
|
|
150
|
+
</div>
|
|
151
|
+
</nav>
|
|
152
|
+
<h3 class="text-muted">Hardhat task flamegraph</h3>
|
|
153
|
+
</div>
|
|
154
|
+
<div id="chart">
|
|
155
|
+
</div>
|
|
156
|
+
<hr>
|
|
157
|
+
<div id="details">
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
|
|
161
|
+
<!-- D3.js -->
|
|
162
|
+
<script src="https://d3js.org/d3.v4.min.js" charset="utf-8"></script>
|
|
163
|
+
|
|
164
|
+
<!-- d3-tip -->
|
|
165
|
+
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/d3-tip/0.9.1/d3-tip.min.js"></script>
|
|
166
|
+
|
|
167
|
+
<!-- d3-flamegraph -->
|
|
168
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/spiermar/d3-flame-graph@2.0.3/dist/d3-flamegraph.min.js"></script>
|
|
169
|
+
|
|
170
|
+
<script type="text/javascript">
|
|
171
|
+
const flameGraph = d3.flamegraph()
|
|
172
|
+
.width(960)
|
|
173
|
+
.cellHeight(18)
|
|
174
|
+
.transitionDuration(750)
|
|
175
|
+
.minFrameSize(5)
|
|
176
|
+
.transitionEase(d3.easeCubic)
|
|
177
|
+
.sort(true)
|
|
178
|
+
.title("")
|
|
179
|
+
.onClick(onClick)
|
|
180
|
+
.differential(false)
|
|
181
|
+
.selfValue(false);
|
|
182
|
+
|
|
183
|
+
function label(d) {
|
|
184
|
+
if (d.data.parallel) {
|
|
185
|
+
return "(multiple parallel runs) task: " + d.data.name + ", max time: " + readableTime(d.data.value);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
return "task: " + d.data.name + ", time: " + readableTime(d.data.value);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function readableTime(t) {
|
|
192
|
+
const NANOSECONDS_TO_MILLISECONDS = 1_000_000;
|
|
193
|
+
const NANOSECONDS_TO_SECONDS = 1_000_000_000;
|
|
194
|
+
|
|
195
|
+
if (t < NANOSECONDS_TO_MILLISECONDS) {
|
|
196
|
+
return t + "ns";
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if (t < NANOSECONDS_TO_SECONDS) {
|
|
200
|
+
return (t / NANOSECONDS_TO_MILLISECONDS).toFixed(4) + "ms";
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return (t / NANOSECONDS_TO_SECONDS).toFixed(4) + "s";
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
const tip = d3.tip()
|
|
207
|
+
.direction("s")
|
|
208
|
+
.offset([8, 0])
|
|
209
|
+
.attr('class', 'd3-flame-graph-tip')
|
|
210
|
+
.html(label);
|
|
211
|
+
|
|
212
|
+
flameGraph.tooltip(tip);
|
|
213
|
+
|
|
214
|
+
const details = document.getElementById("details");
|
|
215
|
+
flameGraph.setDetailsElement(details);
|
|
216
|
+
|
|
217
|
+
flameGraph.label(label);
|
|
218
|
+
|
|
219
|
+
flameGraph.setColorMapper(function(d, originalColor) {
|
|
220
|
+
if (d.highlight) {
|
|
221
|
+
return '#E600E6';
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
if (d.data.parallel) {
|
|
225
|
+
return '#1478eb'
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
return "#EB5414"
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
d3.select("#chart")
|
|
232
|
+
.datum(${data})
|
|
233
|
+
.call(flameGraph);
|
|
234
|
+
|
|
235
|
+
document.getElementById("form").addEventListener("submit", function(event){
|
|
236
|
+
event.preventDefault();
|
|
237
|
+
search();
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
function search() {
|
|
241
|
+
const term = document.getElementById("term").value;
|
|
242
|
+
flameGraph.search(term);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
function clear() {
|
|
246
|
+
document.getElementById('term').value = '';
|
|
247
|
+
flameGraph.clear();
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
function resetZoom() {
|
|
251
|
+
flameGraph.resetZoom();
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
function onClick(d) {
|
|
255
|
+
console.info("Clicked on " + d.data.name);
|
|
256
|
+
}
|
|
257
|
+
</script>
|
|
258
|
+
</body>
|
|
259
|
+
</html>
|
|
260
|
+
`;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Converts the TaskProfile into a flamegraph, saves it, and returns its path.
|
|
265
|
+
*/
|
|
266
|
+
export function saveFlamegraph(profile: TaskProfile): string {
|
|
267
|
+
flagParallelChildren(profile);
|
|
268
|
+
const flamegraph = profileToFlamegraph(profile);
|
|
269
|
+
return createFlamegraphHtmlFile(flamegraph);
|
|
270
|
+
}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
bufferToHex,
|
|
3
|
+
isValidAddress,
|
|
4
|
+
toBuffer,
|
|
5
|
+
} from "@nomicfoundation/ethereumjs-util";
|
|
2
6
|
import * as t from "io-ts";
|
|
3
7
|
|
|
4
|
-
import
|
|
8
|
+
import * as BigIntUtils from "../../../util/bigint";
|
|
5
9
|
import { assertHardhatInvariant, HardhatError } from "../../errors";
|
|
6
10
|
import { ERRORS } from "../../errors-list";
|
|
7
11
|
|
|
@@ -128,7 +132,7 @@ export function numberToRpcStorageSlot(n: number | bigint): string {
|
|
|
128
132
|
"Expected number"
|
|
129
133
|
);
|
|
130
134
|
|
|
131
|
-
return `0x${BigIntUtils.
|
|
135
|
+
return `0x${BigIntUtils.toEvmWord(n)}`;
|
|
132
136
|
}
|
|
133
137
|
|
|
134
138
|
/**
|
|
@@ -84,4 +84,22 @@ export const HARDHAT_PARAM_DEFINITIONS: HardhatParamDefinitions = {
|
|
|
84
84
|
isFlag: false,
|
|
85
85
|
isVariadic: false,
|
|
86
86
|
},
|
|
87
|
+
flamegraph: {
|
|
88
|
+
name: "flamegraph",
|
|
89
|
+
defaultValue: undefined,
|
|
90
|
+
description: "Generate a flamegraph of your Hardhat tasks",
|
|
91
|
+
type: types.boolean,
|
|
92
|
+
isOptional: true,
|
|
93
|
+
isFlag: true,
|
|
94
|
+
isVariadic: false,
|
|
95
|
+
},
|
|
96
|
+
typecheck: {
|
|
97
|
+
name: "typecheck",
|
|
98
|
+
defaultValue: false,
|
|
99
|
+
description: "Enable TypeScript type-checking of your scripts/tests",
|
|
100
|
+
type: types.boolean,
|
|
101
|
+
isFlag: true,
|
|
102
|
+
isOptional: true,
|
|
103
|
+
isVariadic: false,
|
|
104
|
+
},
|
|
87
105
|
};
|