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
|
@@ -1,21 +1,16 @@
|
|
|
1
|
-
import
|
|
2
|
-
import debug from "debug";
|
|
1
|
+
import path from "path";
|
|
3
2
|
import fsExtra from "fs-extra";
|
|
3
|
+
import debug from "debug";
|
|
4
4
|
import os from "os";
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
import { HardhatError } from "../../core/errors";
|
|
5
|
+
import { execFile } from "child_process";
|
|
6
|
+
import { download } from "../../util/download";
|
|
7
|
+
import { assertHardhatInvariant, HardhatError } from "../../core/errors";
|
|
8
8
|
import { ERRORS } from "../../core/errors-list";
|
|
9
|
+
import { Mutex } from "../../vendor/await-semaphore";
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
build: string;
|
|
14
|
-
longVersion: string;
|
|
15
|
-
keccak256: string;
|
|
16
|
-
urls: string[];
|
|
17
|
-
platform: CompilerPlatform;
|
|
18
|
-
}
|
|
11
|
+
const log = debug("hardhat:core:solidity:downloader");
|
|
12
|
+
|
|
13
|
+
const COMPILER_REPOSITORY_URL = "https://binaries.soliditylang.org";
|
|
19
14
|
|
|
20
15
|
export enum CompilerPlatform {
|
|
21
16
|
LINUX = "linux-amd64",
|
|
@@ -24,304 +19,337 @@ export enum CompilerPlatform {
|
|
|
24
19
|
WASM = "wasm",
|
|
25
20
|
}
|
|
26
21
|
|
|
27
|
-
interface
|
|
28
|
-
|
|
22
|
+
export interface Compiler {
|
|
23
|
+
version: string;
|
|
24
|
+
longVersion: string;
|
|
25
|
+
compilerPath: string;
|
|
26
|
+
isSolcJs: boolean;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
interface CompilerBuild {
|
|
30
|
+
path: string;
|
|
31
|
+
version: string;
|
|
32
|
+
build: string;
|
|
33
|
+
longVersion: string;
|
|
34
|
+
keccak256: string;
|
|
35
|
+
urls: string[];
|
|
29
36
|
platform: CompilerPlatform;
|
|
30
37
|
}
|
|
31
38
|
|
|
32
|
-
|
|
39
|
+
interface CompilerList {
|
|
33
40
|
builds: CompilerBuild[];
|
|
34
|
-
releases: {
|
|
35
|
-
[version: string]: string;
|
|
36
|
-
};
|
|
41
|
+
releases: { [version: string]: string };
|
|
37
42
|
latestRelease: string;
|
|
38
43
|
}
|
|
39
44
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
/**
|
|
46
|
+
* A compiler downloader which must be specialized per-platform. It can't and
|
|
47
|
+
* shouldn't support multiple platforms at the same time.
|
|
48
|
+
*/
|
|
49
|
+
export interface ICompilerDownloader {
|
|
50
|
+
/**
|
|
51
|
+
* Returns true if the compiler has been downloaded.
|
|
52
|
+
*
|
|
53
|
+
* This function access the filesystem, but doesn't modify it.
|
|
54
|
+
*/
|
|
55
|
+
isCompilerDownloaded(version: string): Promise<boolean>;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Downloads the compiler for a given version, which can later be obtained
|
|
59
|
+
* with getCompiler.
|
|
60
|
+
*/
|
|
61
|
+
downloadCompiler(version: string): Promise<void>;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Returns the compiler, which MUST be downloaded before calling this function.
|
|
65
|
+
*
|
|
66
|
+
* Returns undefined if the compiler has been downloaded but can't be run.
|
|
67
|
+
*
|
|
68
|
+
* This function access the filesystem, but doesn't modify it.
|
|
69
|
+
*/
|
|
70
|
+
getCompiler(version: string): Promise<Compiler | undefined>;
|
|
51
71
|
}
|
|
52
72
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
73
|
+
/**
|
|
74
|
+
* Default implementation of ICompilerDownloader.
|
|
75
|
+
*
|
|
76
|
+
* Important things to note:
|
|
77
|
+
* 1. If a compiler version is not found, this downloader may fail.
|
|
78
|
+
* 1.1. It only re-downloads the list of compilers once every X time.
|
|
79
|
+
* 1.1.1 If a user tries to download a new compiler before X amount of time
|
|
80
|
+
* has passed since its release, they may need to clean the cache, as
|
|
81
|
+
* indicated in the error messages.
|
|
82
|
+
*/
|
|
83
|
+
export class CompilerDownloader implements ICompilerDownloader {
|
|
84
|
+
public static getCompilerPlatform(): CompilerPlatform {
|
|
85
|
+
switch (os.platform()) {
|
|
86
|
+
case "win32":
|
|
87
|
+
return CompilerPlatform.WINDOWS;
|
|
88
|
+
case "linux":
|
|
89
|
+
return CompilerPlatform.LINUX;
|
|
90
|
+
case "darwin":
|
|
91
|
+
return CompilerPlatform.MACOS;
|
|
92
|
+
default:
|
|
93
|
+
return CompilerPlatform.WASM;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
57
96
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
url: string,
|
|
61
|
-
destinationFile: string
|
|
62
|
-
) => Promise<void>;
|
|
63
|
-
private readonly _forceSolcJs: boolean;
|
|
97
|
+
private static _downloaderPerPlatform: Map<string, CompilerDownloader> =
|
|
98
|
+
new Map();
|
|
64
99
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
100
|
+
public static getConcurrencySafeDownloader(
|
|
101
|
+
platform: CompilerPlatform,
|
|
102
|
+
compilersDir: string
|
|
68
103
|
) {
|
|
69
|
-
|
|
70
|
-
this._forceSolcJs = options.forceSolcJs ?? false;
|
|
71
|
-
}
|
|
104
|
+
const key = platform + compilersDir;
|
|
72
105
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
106
|
+
if (!this._downloaderPerPlatform.has(key)) {
|
|
107
|
+
this._downloaderPerPlatform.set(
|
|
108
|
+
key,
|
|
109
|
+
new CompilerDownloader(platform, compilersDir)
|
|
110
|
+
);
|
|
111
|
+
}
|
|
76
112
|
|
|
77
|
-
return this.
|
|
113
|
+
return this._downloaderPerPlatform.get(key)!;
|
|
78
114
|
}
|
|
79
115
|
|
|
80
|
-
public
|
|
81
|
-
|
|
82
|
-
downloadedFilePath: string
|
|
83
|
-
) {
|
|
84
|
-
const ethereumjsUtil = await import("@ignored/util");
|
|
85
|
-
const { keccak256 } = await import("ethereum-cryptography/keccak");
|
|
86
|
-
|
|
87
|
-
const expectedKeccak256 = compilerBuild.keccak256;
|
|
88
|
-
const compiler = await fsExtra.readFile(downloadedFilePath);
|
|
116
|
+
public static defaultCompilerListCachePeriod = 3_600_00;
|
|
117
|
+
private readonly _mutex = new Mutex();
|
|
89
118
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
119
|
+
/**
|
|
120
|
+
* Use CompilerDownloader.getConcurrencySafeDownloader instead
|
|
121
|
+
*/
|
|
122
|
+
constructor(
|
|
123
|
+
private readonly _platform: CompilerPlatform,
|
|
124
|
+
private readonly _compilersDir: string,
|
|
125
|
+
private readonly _compilerListCachePeriodMs = CompilerDownloader.defaultCompilerListCachePeriod,
|
|
126
|
+
private readonly _downloadFunction: typeof download = download
|
|
127
|
+
) {}
|
|
95
128
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
await fsExtra.unlink(this.getCompilersListPath(compilerBuild.platform));
|
|
129
|
+
public async isCompilerDownloaded(version: string): Promise<boolean> {
|
|
130
|
+
const build = await this._getCompilerBuild(version);
|
|
99
131
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
});
|
|
132
|
+
if (build === undefined) {
|
|
133
|
+
return false;
|
|
103
134
|
}
|
|
104
|
-
}
|
|
105
135
|
|
|
106
|
-
|
|
107
|
-
version: string
|
|
108
|
-
): Promise<CompilerPath | undefined> {
|
|
109
|
-
const { default: AdmZip } = await import("adm-zip");
|
|
136
|
+
const downloadPath = this._getCompilerBinaryPathFromBuild(build);
|
|
110
137
|
|
|
111
|
-
|
|
112
|
-
|
|
138
|
+
return fsExtra.pathExists(downloadPath);
|
|
139
|
+
}
|
|
113
140
|
|
|
114
|
-
|
|
141
|
+
public async downloadCompiler(version: string): Promise<void> {
|
|
142
|
+
await this._mutex.use(async () => {
|
|
143
|
+
let build = await this._getCompilerBuild(version);
|
|
144
|
+
|
|
145
|
+
if (build === undefined && (await this._shouldDownloadCompilerList())) {
|
|
146
|
+
try {
|
|
147
|
+
await this._downloadCompilerList();
|
|
148
|
+
} catch (e: any) {
|
|
149
|
+
throw new HardhatError(
|
|
150
|
+
ERRORS.SOLC.VERSION_LIST_DOWNLOAD_FAILED,
|
|
151
|
+
{},
|
|
152
|
+
e
|
|
153
|
+
);
|
|
154
|
+
}
|
|
115
155
|
|
|
116
|
-
|
|
117
|
-
await this.downloadCompiler(compilerBuild, downloadedFilePath);
|
|
156
|
+
build = await this._getCompilerBuild(version);
|
|
118
157
|
}
|
|
119
158
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
if (
|
|
123
|
-
compilerBuild.platform === CompilerPlatform.LINUX ||
|
|
124
|
-
compilerBuild.platform === CompilerPlatform.MACOS
|
|
125
|
-
) {
|
|
126
|
-
fsExtra.chmodSync(downloadedFilePath, 0o755);
|
|
127
|
-
} else if (compilerBuild.platform === CompilerPlatform.WINDOWS) {
|
|
128
|
-
// some window builds are zipped, some are not
|
|
129
|
-
if (downloadedFilePath.endsWith(".zip")) {
|
|
130
|
-
const zip = new AdmZip(downloadedFilePath);
|
|
131
|
-
zip.extractAllTo(
|
|
132
|
-
path.join(this._compilersDir, compilerBuild.version)
|
|
133
|
-
);
|
|
134
|
-
downloadedFilePath = path.join(
|
|
135
|
-
this._compilersDir,
|
|
136
|
-
compilerBuild.version,
|
|
137
|
-
"solc.exe"
|
|
138
|
-
);
|
|
139
|
-
}
|
|
159
|
+
if (build === undefined) {
|
|
160
|
+
throw new HardhatError(ERRORS.SOLC.INVALID_VERSION, { version });
|
|
140
161
|
}
|
|
141
162
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
chalk.yellow(
|
|
153
|
-
`There was an unexpected problem downloading the compiler: ${e.message}`
|
|
154
|
-
)
|
|
163
|
+
let downloadPath: string;
|
|
164
|
+
try {
|
|
165
|
+
downloadPath = await this._downloadCompiler(build);
|
|
166
|
+
} catch (e: any) {
|
|
167
|
+
throw new HardhatError(
|
|
168
|
+
ERRORS.SOLC.DOWNLOAD_FAILED,
|
|
169
|
+
{
|
|
170
|
+
remoteVersion: build.longVersion,
|
|
171
|
+
},
|
|
172
|
+
e
|
|
155
173
|
);
|
|
156
174
|
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
175
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
await this.downloadCompilersList(platform);
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
try {
|
|
169
|
-
return await fsExtra.readJSON(this.getCompilersListPath(platform));
|
|
170
|
-
} catch (error) {
|
|
171
|
-
// if parsing throws a syntax error, redownload and parse once more
|
|
172
|
-
if (!(error instanceof SyntaxError) || pendingRetries === 0) {
|
|
173
|
-
// eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
|
|
174
|
-
throw error;
|
|
176
|
+
const verified = await this._verifyCompilerDownload(build, downloadPath);
|
|
177
|
+
if (!verified) {
|
|
178
|
+
throw new HardhatError(ERRORS.SOLC.INVALID_DOWNLOAD, {
|
|
179
|
+
remoteVersion: build.longVersion,
|
|
180
|
+
});
|
|
175
181
|
}
|
|
176
182
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
return this.getCompilersList(platform, pendingRetries - 1);
|
|
180
|
-
}
|
|
183
|
+
await this._postProcessCompilerDownload(build, downloadPath);
|
|
184
|
+
});
|
|
181
185
|
}
|
|
182
186
|
|
|
183
|
-
public async
|
|
184
|
-
const
|
|
187
|
+
public async getCompiler(version: string): Promise<Compiler | undefined> {
|
|
188
|
+
const build = await this._getCompilerBuild(version);
|
|
185
189
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
190
|
+
assertHardhatInvariant(
|
|
191
|
+
build !== undefined,
|
|
192
|
+
"Trying to get a compiler before it was downloaded"
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
const compilerPath = this._getCompilerBinaryPathFromBuild(build);
|
|
196
|
+
|
|
197
|
+
assertHardhatInvariant(
|
|
198
|
+
await fsExtra.pathExists(compilerPath),
|
|
199
|
+
"Trying to get a compiler before it was downloaded"
|
|
200
|
+
);
|
|
201
|
+
|
|
202
|
+
if (await fsExtra.pathExists(this._getCompilerDoesntWorkFile(build))) {
|
|
203
|
+
return undefined;
|
|
192
204
|
}
|
|
193
205
|
|
|
194
|
-
return
|
|
206
|
+
return {
|
|
207
|
+
version,
|
|
208
|
+
longVersion: build.longVersion,
|
|
209
|
+
compilerPath,
|
|
210
|
+
isSolcJs: this._platform === CompilerPlatform.WASM,
|
|
211
|
+
};
|
|
195
212
|
}
|
|
196
213
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
) {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
this.getCompilersListPath(platform)
|
|
204
|
-
);
|
|
205
|
-
} catch (error: any) {
|
|
206
|
-
throw new HardhatError(
|
|
207
|
-
ERRORS.SOLC.VERSION_LIST_DOWNLOAD_FAILED,
|
|
208
|
-
{},
|
|
209
|
-
error
|
|
210
|
-
);
|
|
214
|
+
private async _getCompilerBuild(
|
|
215
|
+
version: string
|
|
216
|
+
): Promise<CompilerBuild | undefined> {
|
|
217
|
+
const listPath = this._getCompilerListPath();
|
|
218
|
+
if (!(await fsExtra.pathExists(listPath))) {
|
|
219
|
+
return undefined;
|
|
211
220
|
}
|
|
221
|
+
|
|
222
|
+
const list = await this._readCompilerList(listPath);
|
|
223
|
+
return list.builds.find((b) => b.version === version);
|
|
212
224
|
}
|
|
213
225
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
) {
|
|
218
|
-
log(
|
|
219
|
-
`Downloading compiler version ${compilerBuild.version} platform ${compilerBuild.platform}`
|
|
220
|
-
);
|
|
226
|
+
private _getCompilerListPath(): string {
|
|
227
|
+
return path.join(this._compilersDir, this._platform, "list.json");
|
|
228
|
+
}
|
|
221
229
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
);
|
|
230
|
+
private async _readCompilerList(listPath: string): Promise<CompilerList> {
|
|
231
|
+
return fsExtra.readJSON(listPath);
|
|
232
|
+
}
|
|
226
233
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
} catch (error) {
|
|
230
|
-
throw new HardhatError(
|
|
231
|
-
ERRORS.SOLC.DOWNLOAD_FAILED,
|
|
232
|
-
{
|
|
233
|
-
remoteVersion: compilerBuild.version,
|
|
234
|
-
},
|
|
235
|
-
error as Error
|
|
236
|
-
);
|
|
237
|
-
}
|
|
234
|
+
private _getCompilerDownloadPathFromBuild(build: CompilerBuild): string {
|
|
235
|
+
return path.join(this._compilersDir, this._platform, build.path);
|
|
238
236
|
}
|
|
239
237
|
|
|
240
|
-
|
|
241
|
-
|
|
238
|
+
private _getCompilerBinaryPathFromBuild(build: CompilerBuild): string {
|
|
239
|
+
const downloadPath = this._getCompilerDownloadPathFromBuild(build);
|
|
240
|
+
|
|
241
|
+
if (
|
|
242
|
+
this._platform !== CompilerPlatform.WINDOWS ||
|
|
243
|
+
!downloadPath.endsWith(".zip")
|
|
244
|
+
) {
|
|
245
|
+
return downloadPath;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
return path.join(this._compilersDir, build.version, "solc.exe");
|
|
242
249
|
}
|
|
243
250
|
|
|
244
|
-
|
|
245
|
-
return
|
|
251
|
+
private _getCompilerDoesntWorkFile(build: CompilerBuild): string {
|
|
252
|
+
return `${this._getCompilerBinaryPathFromBuild(build)}.does.not.work`;
|
|
246
253
|
}
|
|
247
254
|
|
|
248
|
-
private
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
255
|
+
private async _shouldDownloadCompilerList(): Promise<boolean> {
|
|
256
|
+
const listPath = this._getCompilerListPath();
|
|
257
|
+
if (!(await fsExtra.pathExists(listPath))) {
|
|
258
|
+
return true;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
const stats = await fsExtra.stat(listPath);
|
|
262
|
+
const age = new Date().valueOf() - stats.ctimeMs;
|
|
263
|
+
|
|
264
|
+
return age > this._compilerListCachePeriodMs;
|
|
254
265
|
}
|
|
255
266
|
|
|
256
|
-
private async
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
const compilersListExisted = await this.compilersListExists(platform);
|
|
261
|
-
let list = await this.getCompilersList(platform);
|
|
262
|
-
let compilerBuildPath = list.releases[version];
|
|
267
|
+
private async _downloadCompilerList(): Promise<void> {
|
|
268
|
+
log(`Downloading compiler list for platform ${this._platform}`);
|
|
269
|
+
const url = `${COMPILER_REPOSITORY_URL}/${this._platform}/list.json`;
|
|
270
|
+
const downloadPath = this._getCompilerListPath();
|
|
263
271
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
await fsExtra.unlink(this.getCompilersListPath(platform));
|
|
272
|
+
await this._downloadFunction(url, downloadPath);
|
|
273
|
+
}
|
|
267
274
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
}
|
|
275
|
+
private async _downloadCompiler(build: CompilerBuild): Promise<string> {
|
|
276
|
+
log(`Downloading compiler ${build.longVersion}`);
|
|
277
|
+
const url = `${COMPILER_REPOSITORY_URL}/${this._platform}/${build.path}`;
|
|
278
|
+
const downloadPath = this._getCompilerDownloadPathFromBuild(build);
|
|
271
279
|
|
|
272
|
-
|
|
280
|
+
await this._downloadFunction(url, downloadPath);
|
|
281
|
+
|
|
282
|
+
return downloadPath;
|
|
273
283
|
}
|
|
274
284
|
|
|
275
|
-
private async
|
|
276
|
-
|
|
277
|
-
|
|
285
|
+
private async _verifyCompilerDownload(
|
|
286
|
+
build: CompilerBuild,
|
|
287
|
+
downloadPath: string
|
|
278
288
|
): Promise<boolean> {
|
|
279
|
-
const
|
|
280
|
-
|
|
281
|
-
}
|
|
289
|
+
const ethereumjsUtil = await import("@nomicfoundation/ethereumjs-util");
|
|
290
|
+
const { keccak256 } = await import("../../util/keccak");
|
|
282
291
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
platform: CompilerPlatform
|
|
286
|
-
): Promise<CompilerBuild> {
|
|
287
|
-
const compilerBuildPath = await this._fetchVersionPath(version, platform);
|
|
288
|
-
const list = await this.getCompilersList(platform);
|
|
289
|
-
const compilerBuild = list.builds.find((b) => b.path === compilerBuildPath);
|
|
292
|
+
const expectedKeccak256 = build.keccak256;
|
|
293
|
+
const compiler = await fsExtra.readFile(downloadPath);
|
|
290
294
|
|
|
291
|
-
|
|
292
|
-
|
|
295
|
+
const compilerKeccak256 = ethereumjsUtil.bufferToHex(keccak256(compiler));
|
|
296
|
+
|
|
297
|
+
if (expectedKeccak256 !== compilerKeccak256) {
|
|
298
|
+
await fsExtra.unlink(downloadPath);
|
|
299
|
+
return false;
|
|
293
300
|
}
|
|
294
301
|
|
|
295
|
-
|
|
296
|
-
return compilerBuild;
|
|
302
|
+
return true;
|
|
297
303
|
}
|
|
298
304
|
|
|
299
|
-
private async
|
|
300
|
-
|
|
301
|
-
|
|
305
|
+
private async _postProcessCompilerDownload(
|
|
306
|
+
build: CompilerBuild,
|
|
307
|
+
downloadPath: string
|
|
308
|
+
): Promise<void> {
|
|
309
|
+
if (this._platform === CompilerPlatform.WASM) {
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
302
312
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
313
|
+
if (
|
|
314
|
+
this._platform === CompilerPlatform.LINUX ||
|
|
315
|
+
this._platform === CompilerPlatform.MACOS
|
|
316
|
+
) {
|
|
317
|
+
fsExtra.chmodSync(downloadPath, 0o755);
|
|
318
|
+
} else if (
|
|
319
|
+
this._platform === CompilerPlatform.WINDOWS &&
|
|
320
|
+
downloadPath.endsWith(".zip")
|
|
321
|
+
) {
|
|
322
|
+
// some window builds are zipped, some are not
|
|
323
|
+
const { default: AdmZip } = await import("adm-zip");
|
|
324
|
+
|
|
325
|
+
const solcFolder = path.join(this._compilersDir, build.version);
|
|
326
|
+
await fsExtra.ensureDir(solcFolder);
|
|
327
|
+
|
|
328
|
+
const zip = new AdmZip(downloadPath);
|
|
329
|
+
zip.extractAllTo(solcFolder);
|
|
306
330
|
}
|
|
307
331
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
case "darwin":
|
|
314
|
-
return CompilerPlatform.MACOS;
|
|
315
|
-
default:
|
|
316
|
-
return CompilerPlatform.WASM;
|
|
332
|
+
log("Checking native solc binary");
|
|
333
|
+
const nativeSolcWorks = await this._checkNativeSolc(build);
|
|
334
|
+
|
|
335
|
+
if (nativeSolcWorks) {
|
|
336
|
+
return;
|
|
317
337
|
}
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
338
|
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
}
|
|
339
|
+
await fsExtra.createFile(this._getCompilerDoesntWorkFile(build));
|
|
340
|
+
}
|
|
324
341
|
|
|
325
|
-
|
|
326
|
-
|
|
342
|
+
private _checkNativeSolc(build: CompilerBuild) {
|
|
343
|
+
const solcPath = this._getCompilerBinaryPathFromBuild(build);
|
|
344
|
+
return new Promise((resolve) => {
|
|
345
|
+
try {
|
|
346
|
+
const process = execFile(solcPath, ["--version"]);
|
|
347
|
+
process.on("exit", (code) => {
|
|
348
|
+
resolve(code === 0);
|
|
349
|
+
});
|
|
350
|
+
} catch {
|
|
351
|
+
resolve(false);
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
}
|
|
327
355
|
}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { execFile } from "child_process";
|
|
2
2
|
import * as fs from "fs";
|
|
3
|
+
import { CompilerInput, CompilerOutput } from "../../../types";
|
|
3
4
|
|
|
4
|
-
export
|
|
5
|
+
export interface ICompiler {
|
|
6
|
+
compile(input: CompilerInput): Promise<CompilerOutput>;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export class Compiler implements ICompiler {
|
|
5
10
|
private _loadedSolc?: any;
|
|
6
11
|
|
|
7
12
|
constructor(private _pathToSolcJs: string) {}
|
|
8
13
|
|
|
9
|
-
public async compile(input:
|
|
14
|
+
public async compile(input: CompilerInput) {
|
|
10
15
|
const solc = await this.getSolc();
|
|
11
16
|
|
|
12
17
|
const jsonOutput = solc.compile(JSON.stringify(input));
|
|
@@ -52,13 +57,14 @@ export class Compiler {
|
|
|
52
57
|
}
|
|
53
58
|
}
|
|
54
59
|
|
|
55
|
-
export class NativeCompiler {
|
|
60
|
+
export class NativeCompiler implements ICompiler {
|
|
56
61
|
constructor(private _pathToSolc: string) {}
|
|
57
62
|
|
|
58
|
-
public async compile(input:
|
|
63
|
+
public async compile(input: CompilerInput) {
|
|
59
64
|
const output: string = await new Promise((resolve, reject) => {
|
|
60
|
-
const process =
|
|
61
|
-
|
|
65
|
+
const process = execFile(
|
|
66
|
+
this._pathToSolc,
|
|
67
|
+
[`--standard-json`],
|
|
62
68
|
{
|
|
63
69
|
maxBuffer: 1024 * 1024 * 500,
|
|
64
70
|
},
|
|
@@ -9,9 +9,11 @@ export class DependencyGraph implements taskTypes.DependencyGraph {
|
|
|
9
9
|
): Promise<DependencyGraph> {
|
|
10
10
|
const graph = new DependencyGraph();
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
await Promise.all(
|
|
13
|
+
resolvedFiles.map((resolvedFile) =>
|
|
14
|
+
graph._addDependenciesFrom(resolver, resolvedFile)
|
|
15
|
+
)
|
|
16
|
+
);
|
|
15
17
|
|
|
16
18
|
return graph;
|
|
17
19
|
}
|
|
@@ -167,11 +169,13 @@ export class DependencyGraph implements taskTypes.DependencyGraph {
|
|
|
167
169
|
this._resolvedFiles.set(file.sourceName, file);
|
|
168
170
|
this._dependenciesPerFile.set(file.sourceName, dependencies);
|
|
169
171
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
172
|
+
await Promise.all(
|
|
173
|
+
file.content.imports.map(async (imp) => {
|
|
174
|
+
const dependency = await resolver.resolveImport(file, imp);
|
|
175
|
+
dependencies.add(dependency);
|
|
173
176
|
|
|
174
|
-
|
|
175
|
-
|
|
177
|
+
await this._addDependenciesFrom(resolver, dependency);
|
|
178
|
+
})
|
|
179
|
+
);
|
|
176
180
|
}
|
|
177
181
|
}
|