hardhat 2.19.5 → 2.20.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/node.js +3 -3
- package/builtin-tasks/node.js.map +1 -1
- package/internal/cli/analytics.d.ts.map +1 -1
- package/internal/cli/analytics.js +2 -1
- package/internal/cli/analytics.js.map +1 -1
- package/internal/cli/project-creation.d.ts +1 -1
- package/internal/cli/project-creation.js +1 -1
- package/internal/constants.d.ts.map +1 -1
- package/internal/constants.js +1 -0
- package/internal/constants.js.map +1 -1
- package/internal/core/config/config-resolution.d.ts.map +1 -1
- package/internal/core/config/config-resolution.js +8 -0
- package/internal/core/config/config-resolution.js.map +1 -1
- package/internal/core/config/config-validation.d.ts.map +1 -1
- package/internal/core/config/config-validation.js +10 -0
- package/internal/core/config/config-validation.js.map +1 -1
- package/internal/core/config/default-config.d.ts.map +1 -1
- package/internal/core/config/default-config.js +11 -0
- package/internal/core/config/default-config.js.map +1 -1
- package/internal/core/jsonrpc/types/base-types.d.ts +1 -1
- package/internal/core/jsonrpc/types/base-types.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/base-types.js +7 -5
- package/internal/core/jsonrpc/types/base-types.js.map +1 -1
- package/internal/core/jsonrpc/types/input/callRequest.d.ts +2 -0
- package/internal/core/jsonrpc/types/input/callRequest.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/input/callRequest.js +2 -0
- package/internal/core/jsonrpc/types/input/callRequest.js.map +1 -1
- package/internal/core/jsonrpc/types/input/transactionRequest.d.ts +4 -0
- package/internal/core/jsonrpc/types/input/transactionRequest.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/input/transactionRequest.js +2 -0
- package/internal/core/jsonrpc/types/input/transactionRequest.js.map +1 -1
- package/internal/core/jsonrpc/types/output/block.d.ts +6 -0
- package/internal/core/jsonrpc/types/output/block.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/output/block.js +3 -0
- package/internal/core/jsonrpc/types/output/block.js.map +1 -1
- package/internal/core/providers/accounts.d.ts.map +1 -1
- package/internal/core/providers/accounts.js +10 -10
- package/internal/core/providers/accounts.js.map +1 -1
- package/internal/core/providers/util.js +2 -2
- package/internal/core/providers/util.js.map +1 -1
- package/internal/hardhat-network/jsonrpc/client.d.ts +3 -3
- package/internal/hardhat-network/jsonrpc/client.d.ts.map +1 -1
- package/internal/hardhat-network/jsonrpc/client.js +9 -9
- package/internal/hardhat-network/jsonrpc/client.js.map +1 -1
- package/internal/hardhat-network/provider/BlockchainData.d.ts +5 -5
- package/internal/hardhat-network/provider/BlockchainData.d.ts.map +1 -1
- package/internal/hardhat-network/provider/BlockchainData.js +10 -10
- package/internal/hardhat-network/provider/BlockchainData.js.map +1 -1
- package/internal/hardhat-network/provider/HardhatBlockchain.d.ts +7 -0
- package/internal/hardhat-network/provider/HardhatBlockchain.d.ts.map +1 -1
- package/internal/hardhat-network/provider/HardhatBlockchain.js +14 -2
- package/internal/hardhat-network/provider/HardhatBlockchain.js.map +1 -1
- package/internal/hardhat-network/provider/TxPool.d.ts +2 -3
- package/internal/hardhat-network/provider/TxPool.d.ts.map +1 -1
- package/internal/hardhat-network/provider/TxPool.js +16 -16
- package/internal/hardhat-network/provider/TxPool.js.map +1 -1
- package/internal/hardhat-network/provider/ethereumjs-workarounds.js +1 -1
- package/internal/hardhat-network/provider/ethereumjs-workarounds.js.map +1 -1
- package/internal/hardhat-network/provider/filter.d.ts +5 -6
- package/internal/hardhat-network/provider/filter.d.ts.map +1 -1
- package/internal/hardhat-network/provider/filter.js +2 -2
- package/internal/hardhat-network/provider/filter.js.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts +7 -0
- package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkBlockchain.js +21 -4
- package/internal/hardhat-network/provider/fork/ForkBlockchain.js.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts +16 -9
- package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkStateManager.js +42 -25
- package/internal/hardhat-network/provider/fork/ForkStateManager.js.map +1 -1
- package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts.map +1 -1
- package/internal/hardhat-network/provider/fork/rpcToBlockData.js +3 -0
- package/internal/hardhat-network/provider/fork/rpcToBlockData.js.map +1 -1
- package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts +2 -2
- package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/base.js +4 -4
- package/internal/hardhat-network/provider/modules/base.js.map +1 -1
- package/internal/hardhat-network/provider/modules/eth.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/eth.js +16 -9
- package/internal/hardhat-network/provider/modules/eth.js.map +1 -1
- package/internal/hardhat-network/provider/modules/logger.d.ts +1 -1
- package/internal/hardhat-network/provider/modules/logger.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/logger.js +17 -17
- package/internal/hardhat-network/provider/modules/logger.js.map +1 -1
- package/internal/hardhat-network/provider/node-types.d.ts +17 -13
- package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
- package/internal/hardhat-network/provider/node.d.ts +6 -2
- package/internal/hardhat-network/provider/node.d.ts.map +1 -1
- package/internal/hardhat-network/provider/node.js +148 -79
- package/internal/hardhat-network/provider/node.js.map +1 -1
- package/internal/hardhat-network/provider/output.d.ts +3 -0
- package/internal/hardhat-network/provider/output.d.ts.map +1 -1
- package/internal/hardhat-network/provider/output.js +23 -9
- package/internal/hardhat-network/provider/output.js.map +1 -1
- package/internal/hardhat-network/provider/return-data.d.ts +3 -4
- package/internal/hardhat-network/provider/return-data.d.ts.map +1 -1
- package/internal/hardhat-network/provider/return-data.js +4 -3
- package/internal/hardhat-network/provider/return-data.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts +8 -10
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js +9 -9
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts +8 -10
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js +9 -9
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts +9 -10
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js +6 -7
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts +5 -6
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts +4 -5
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts +7 -8
- 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/transactions/ReadOnlyValidUnknownTypeTransaction.d.ts +7 -8
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.js +2 -2
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.js.map +1 -1
- package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts +4 -5
- package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/makeAccount.js +1 -1
- package/internal/hardhat-network/provider/utils/makeAccount.js.map +1 -1
- package/internal/hardhat-network/provider/utils/makeCommon.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/makeCommon.js +5 -3
- package/internal/hardhat-network/provider/utils/makeCommon.js.map +1 -1
- package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts +2 -2
- package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/makeFakeSignature.js +15 -1
- package/internal/hardhat-network/provider/utils/makeFakeSignature.js.map +1 -1
- package/internal/hardhat-network/provider/utils/makeStateTrie.js +2 -2
- package/internal/hardhat-network/provider/utils/makeStateTrie.js.map +1 -1
- package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts +1 -3
- package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/putGenesisBlock.js +6 -2
- package/internal/hardhat-network/provider/utils/putGenesisBlock.js.map +1 -1
- package/internal/hardhat-network/provider/utils/random.d.ts +3 -3
- package/internal/hardhat-network/provider/utils/random.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/random.js +2 -2
- package/internal/hardhat-network/provider/utils/random.js.map +1 -1
- package/internal/hardhat-network/stack-traces/consoleLogger.js +42 -44
- 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.js +1 -1
- package/internal/hardhat-network/stack-traces/contracts-identifier.js +1 -1
- package/internal/hardhat-network/stack-traces/contracts-identifier.js.map +1 -1
- package/internal/hardhat-network/stack-traces/debug.js +12 -12
- package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
- package/internal/hardhat-network/stack-traces/error-inferrer.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/error-inferrer.js +5 -4
- package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
- package/internal/hardhat-network/stack-traces/library-utils.d.ts +4 -4
- package/internal/hardhat-network/stack-traces/library-utils.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/library-utils.js.map +1 -1
- package/internal/hardhat-network/stack-traces/message-trace.d.ts +8 -9
- package/internal/hardhat-network/stack-traces/message-trace.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/model.d.ts +5 -5
- package/internal/hardhat-network/stack-traces/model.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/model.js +5 -5
- package/internal/hardhat-network/stack-traces/model.js.map +1 -1
- package/internal/hardhat-network/stack-traces/solidity-errors.d.ts.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 +2 -3
- package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/solidityTracer.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/solidityTracer.js +3 -2
- package/internal/hardhat-network/stack-traces/solidityTracer.js.map +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 +34 -28
- package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-tracer.d.ts +1 -2
- package/internal/hardhat-network/stack-traces/vm-tracer.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-tracer.js +9 -9
- package/internal/hardhat-network/stack-traces/vm-tracer.js.map +1 -1
- package/internal/solidity/compiler/downloader.d.ts.map +1 -1
- package/internal/solidity/compiler/downloader.js +2 -2
- package/internal/solidity/compiler/downloader.js.map +1 -1
- package/internal/solidity/compiler/solc-info.d.ts.map +1 -1
- package/internal/solidity/compiler/solc-info.js +1 -0
- package/internal/solidity/compiler/solc-info.js.map +1 -1
- package/internal/util/abi-helpers.d.ts +2 -3
- package/internal/util/abi-helpers.d.ts.map +1 -1
- package/internal/util/abi-helpers.js.map +1 -1
- package/internal/util/bigint.d.ts +1 -2
- package/internal/util/bigint.d.ts.map +1 -1
- package/internal/util/bigint.js +2 -2
- package/internal/util/bigint.js.map +1 -1
- package/internal/util/hardforks.d.ts +2 -1
- package/internal/util/hardforks.d.ts.map +1 -1
- package/internal/util/hardforks.js +2 -0
- package/internal/util/hardforks.js.map +1 -1
- package/internal/util/keccak.d.ts +1 -2
- package/internal/util/keccak.d.ts.map +1 -1
- package/internal/util/keccak.js +1 -1
- package/internal/util/keccak.js.map +1 -1
- package/package.json +12 -11
- package/sample-projects/javascript/contracts/Lock.sol +1 -1
- package/sample-projects/javascript/hardhat.config.js +1 -1
- package/sample-projects/javascript-esm/contracts/Lock.sol +1 -1
- package/sample-projects/javascript-esm/hardhat.config.cjs +1 -1
- package/sample-projects/typescript/contracts/Lock.sol +1 -1
- package/sample-projects/typescript/hardhat.config.ts +1 -1
- package/sample-projects/typescript-viem/contracts/Lock.sol +1 -1
- package/sample-projects/typescript-viem/hardhat.config.ts +1 -1
- package/src/builtin-tasks/node.ts +8 -4
- package/src/internal/cli/analytics.ts +4 -1
- package/src/internal/cli/project-creation.ts +1 -1
- package/src/internal/constants.ts +1 -0
- package/src/internal/core/config/config-resolution.ts +13 -0
- package/src/internal/core/config/config-validation.ts +19 -0
- package/src/internal/core/config/default-config.ts +11 -0
- package/src/internal/core/jsonrpc/types/base-types.ts +12 -7
- package/src/internal/core/jsonrpc/types/input/callRequest.ts +3 -0
- package/src/internal/core/jsonrpc/types/input/transactionRequest.ts +5 -1
- package/src/internal/core/jsonrpc/types/output/block.ts +3 -0
- package/src/internal/core/providers/accounts.ts +24 -13
- package/src/internal/core/providers/util.ts +2 -2
- package/src/internal/hardhat-network/jsonrpc/client.ts +7 -4
- package/src/internal/hardhat-network/provider/BlockchainData.ts +6 -6
- package/src/internal/hardhat-network/provider/HardhatBlockchain.ts +28 -3
- package/src/internal/hardhat-network/provider/TxPool.ts +19 -16
- package/src/internal/hardhat-network/provider/ethereumjs-workarounds.ts +4 -5
- package/src/internal/hardhat-network/provider/filter.ts +11 -8
- package/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts +40 -7
- package/src/internal/hardhat-network/provider/fork/ForkStateManager.ts +79 -39
- package/src/internal/hardhat-network/provider/fork/rpcToBlockData.ts +3 -0
- package/src/internal/hardhat-network/provider/fork/rpcToTxData.ts +2 -2
- package/src/internal/hardhat-network/provider/modules/base.ts +5 -5
- package/src/internal/hardhat-network/provider/modules/eth.ts +40 -14
- package/src/internal/hardhat-network/provider/modules/logger.ts +17 -14
- package/src/internal/hardhat-network/provider/node-types.ts +19 -12
- package/src/internal/hardhat-network/provider/node.ts +210 -86
- package/src/internal/hardhat-network/provider/output.ts +35 -8
- package/src/internal/hardhat-network/provider/return-data.ts +6 -5
- package/src/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.ts +24 -25
- package/src/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.ts +24 -25
- package/src/internal/hardhat-network/provider/transactions/FakeSenderTransaction.ts +27 -16
- package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts +7 -8
- package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.ts +6 -5
- package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.ts +15 -8
- package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.ts +15 -8
- package/src/internal/hardhat-network/provider/types/HardhatBlockchainInterface.ts +4 -4
- package/src/internal/hardhat-network/provider/utils/makeAccount.ts +2 -2
- package/src/internal/hardhat-network/provider/utils/makeCommon.ts +9 -3
- package/src/internal/hardhat-network/provider/utils/makeFakeSignature.ts +21 -7
- package/src/internal/hardhat-network/provider/utils/makeStateTrie.ts +3 -3
- package/src/internal/hardhat-network/provider/utils/putGenesisBlock.ts +10 -5
- package/src/internal/hardhat-network/provider/utils/random.ts +5 -5
- package/src/internal/hardhat-network/stack-traces/consoleLogger.ts +13 -13
- package/src/internal/hardhat-network/stack-traces/constants.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/contracts-identifier.ts +4 -4
- package/src/internal/hardhat-network/stack-traces/debug.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/error-inferrer.ts +6 -5
- package/src/internal/hardhat-network/stack-traces/library-utils.ts +6 -6
- package/src/internal/hardhat-network/stack-traces/message-trace.ts +8 -8
- package/src/internal/hardhat-network/stack-traces/model.ts +5 -5
- package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +4 -2
- package/src/internal/hardhat-network/stack-traces/solidity-stack-trace.ts +2 -2
- package/src/internal/hardhat-network/stack-traces/solidityTracer.ts +3 -2
- package/src/internal/hardhat-network/stack-traces/vm-debug-tracer.ts +49 -38
- package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +15 -13
- package/src/internal/solidity/compiler/downloader.ts +3 -2
- package/src/internal/solidity/compiler/solc-info.ts +1 -0
- package/src/internal/util/abi-helpers.ts +2 -2
- package/src/internal/util/bigint.ts +4 -4
- package/src/internal/util/hardforks.ts +2 -0
- package/src/internal/util/keccak.ts +2 -2
|
@@ -26,14 +26,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.HardhatNode = void 0;
|
|
29
|
+
exports.assertTransientStorageCompatibility = exports.HardhatNode = void 0;
|
|
30
30
|
const ethereumjs_block_1 = require("@nomicfoundation/ethereumjs-block");
|
|
31
31
|
const ethereumjs_common_1 = require("@nomicfoundation/ethereumjs-common");
|
|
32
|
+
const exceptions_1 = require("@nomicfoundation/ethereumjs-evm/dist/cjs/exceptions");
|
|
32
33
|
const ethereumjs_tx_1 = require("@nomicfoundation/ethereumjs-tx");
|
|
33
34
|
const ethereumjs_util_1 = require("@nomicfoundation/ethereumjs-util");
|
|
34
35
|
const ethereumjs_vm_1 = require("@nomicfoundation/ethereumjs-vm");
|
|
35
36
|
const ethereumjs_evm_1 = require("@nomicfoundation/ethereumjs-evm");
|
|
36
|
-
const exceptions_1 = require("@nomicfoundation/ethereumjs-evm/dist/exceptions");
|
|
37
37
|
const ethereumjs_statemanager_1 = require("@nomicfoundation/ethereumjs-statemanager");
|
|
38
38
|
const eth_sig_util_1 = require("@metamask/eth-sig-util");
|
|
39
39
|
const chalk_1 = __importDefault(require("chalk"));
|
|
@@ -79,6 +79,8 @@ const makeStateTrie_1 = require("./utils/makeStateTrie");
|
|
|
79
79
|
const putGenesisBlock_1 = require("./utils/putGenesisBlock");
|
|
80
80
|
const txMapToArray_1 = require("./utils/txMapToArray");
|
|
81
81
|
const random_1 = require("./utils/random");
|
|
82
|
+
const BEACON_ROOT_ADDRESS = "0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02";
|
|
83
|
+
const BEACON_ROOT_BYTECODE = "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500";
|
|
82
84
|
const log = (0, debug_1.default)("hardhat:core:hardhat-network:node");
|
|
83
85
|
/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */
|
|
84
86
|
class HardhatNode extends events_1.default {
|
|
@@ -98,6 +100,7 @@ class HardhatNode extends events_1.default {
|
|
|
98
100
|
: undefined;
|
|
99
101
|
const hardfork = (0, hardforks_1.getHardforkName)(config.hardfork);
|
|
100
102
|
const mixHashGenerator = random_1.RandomBufferGenerator.create("randomMixHashSeed");
|
|
103
|
+
const parentBeaconBlockRootGenerator = random_1.RandomBufferGenerator.create("randomParentBeaconBlockRootSeed");
|
|
101
104
|
let forkClient;
|
|
102
105
|
const common = (0, makeCommon_1.makeCommon)(config);
|
|
103
106
|
if ((0, node_types_1.isForkedNodeConfig)(config)) {
|
|
@@ -109,6 +112,9 @@ class HardhatNode extends events_1.default {
|
|
|
109
112
|
this._validateHardforks(config.forkConfig.blockNumber, common, forkNetworkId);
|
|
110
113
|
const forkStateManager = new ForkStateManager_1.ForkStateManager(forkClient, forkBlockNumber);
|
|
111
114
|
await forkStateManager.initializeGenesisAccounts(genesisAccounts);
|
|
115
|
+
if ((0, hardforks_1.hardforkGte)(hardfork, hardforks_1.HardforkName.CANCUN)) {
|
|
116
|
+
await forkStateManager.putContractCode(ethereumjs_util_1.Address.fromString(BEACON_ROOT_ADDRESS), Buffer.from((0, ethereumjs_util_1.toBytes)(BEACON_ROOT_BYTECODE)));
|
|
117
|
+
}
|
|
112
118
|
stateManager = forkStateManager;
|
|
113
119
|
blockchain = new ForkBlockchain_1.ForkBlockchain(forkClient, forkBlockNumber, common);
|
|
114
120
|
initialBlockTimeOffset = BigInt((0, date_1.getDifferenceInSeconds)(new Date(forkBlockTimestamp), new Date()));
|
|
@@ -137,23 +143,27 @@ class HardhatNode extends events_1.default {
|
|
|
137
143
|
stateManager = new ethereumjs_statemanager_1.DefaultStateManager({
|
|
138
144
|
trie: stateTrie,
|
|
139
145
|
});
|
|
146
|
+
if ((0, hardforks_1.hardforkGte)(hardfork, hardforks_1.HardforkName.CANCUN)) {
|
|
147
|
+
await stateManager.putContractCode(ethereumjs_util_1.Address.fromString(BEACON_ROOT_ADDRESS), Buffer.from((0, ethereumjs_util_1.toBytes)(BEACON_ROOT_BYTECODE)));
|
|
148
|
+
}
|
|
140
149
|
const hardhatBlockchain = new HardhatBlockchain_1.HardhatBlockchain(common);
|
|
141
150
|
const genesisBlockBaseFeePerGas = (0, hardforks_1.hardforkGte)(hardfork, hardforks_1.HardforkName.LONDON)
|
|
142
151
|
? initialBaseFeePerGasConfig ??
|
|
143
152
|
BigInt(default_config_1.HARDHAT_NETWORK_DEFAULT_INITIAL_BASE_FEE_PER_GAS)
|
|
144
153
|
: undefined;
|
|
145
|
-
await (0, putGenesisBlock_1.putGenesisBlock)(hardhatBlockchain, common, config,
|
|
154
|
+
await (0, putGenesisBlock_1.putGenesisBlock)(hardhatBlockchain, common, config, await stateManager.getStateRoot(), hardfork, mixHashGenerator.next(), parentBeaconBlockRootGenerator.next(), genesisBlockBaseFeePerGas);
|
|
146
155
|
if (config.initialDate !== undefined) {
|
|
147
156
|
initialBlockTimeOffset = BigInt((0, date_1.getDifferenceInSeconds)(config.initialDate, new Date()));
|
|
148
157
|
}
|
|
149
158
|
blockchain = hardhatBlockchain;
|
|
150
159
|
}
|
|
151
160
|
const txPool = new TxPool_1.TxPool(stateManager, BigInt(blockGasLimit), common);
|
|
152
|
-
const
|
|
153
|
-
const evm = await ethereumjs_evm_1.EVM.create({
|
|
154
|
-
eei,
|
|
161
|
+
const evm = new ethereumjs_evm_1.EVM({
|
|
155
162
|
allowUnlimitedContractSize,
|
|
163
|
+
allowUnlimitedInitCodeSize: allowUnlimitedContractSize,
|
|
164
|
+
blockchain,
|
|
156
165
|
common,
|
|
166
|
+
stateManager,
|
|
157
167
|
});
|
|
158
168
|
const vm = await ethereumjs_vm_1.VM.create({
|
|
159
169
|
evm,
|
|
@@ -162,8 +172,8 @@ class HardhatNode extends events_1.default {
|
|
|
162
172
|
stateManager,
|
|
163
173
|
blockchain,
|
|
164
174
|
});
|
|
165
|
-
const instanceId = (0, ethereumjs_util_1.
|
|
166
|
-
const node = new HardhatNode(vm, instanceId, stateManager, blockchain, txPool, automine, minGasPrice, initialBlockTimeOffset, mempoolOrder, config.coinbase, genesisAccounts, networkId, chainId, hardfork, hardforkActivations, mixHashGenerator, allowUnlimitedContractSize, allowBlocksWithSameTimestamp, tracingConfig, forkNetworkId, forkBlockNum, forkBlockHash, nextBlockBaseFeePerGas, forkClient, enableTransientStorage);
|
|
175
|
+
const instanceId = (0, ethereumjs_util_1.bytesToBigInt)((0, crypto_1.randomBytes)(32));
|
|
176
|
+
const node = new HardhatNode(vm, instanceId, stateManager, blockchain, txPool, automine, minGasPrice, initialBlockTimeOffset, mempoolOrder, config.coinbase, genesisAccounts, networkId, chainId, hardfork, hardforkActivations, mixHashGenerator, parentBeaconBlockRootGenerator, allowUnlimitedContractSize, allowBlocksWithSameTimestamp, tracingConfig, forkNetworkId, forkBlockNum, forkBlockHash, nextBlockBaseFeePerGas, forkClient, enableTransientStorage);
|
|
167
177
|
return [common, node];
|
|
168
178
|
}
|
|
169
179
|
static _validateHardforks(forkBlockNumber, common, remoteChainId) {
|
|
@@ -183,7 +193,7 @@ The hardfork must be at least spuriousDragon, but ${common.hardfork()} was given
|
|
|
183
193
|
// this validation.
|
|
184
194
|
return;
|
|
185
195
|
}
|
|
186
|
-
upstreamCommon.
|
|
196
|
+
upstreamCommon.setHardforkBy({ blockNumber: forkBlockNumber });
|
|
187
197
|
if (!upstreamCommon.gteHardfork("spuriousDragon")) {
|
|
188
198
|
throw new errors_2.InternalError(`Cannot fork ${upstreamCommon.chainName()} from block ${forkBlockNumber}.
|
|
189
199
|
|
|
@@ -191,7 +201,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
191
201
|
}
|
|
192
202
|
}
|
|
193
203
|
}
|
|
194
|
-
constructor(_vm, _instanceId, _stateManager, _blockchain, _txPool, _automine, _minGasPrice, _blockTimeOffsetSeconds = 0n, _mempoolOrder, _coinbase, genesisAccounts, _configNetworkId, _configChainId, hardfork, _hardforkActivations, _mixHashGenerator, allowUnlimitedContractSize, _allowBlocksWithSameTimestamp, tracingConfig, _forkNetworkId, _forkBlockNumber, _forkBlockHash, nextBlockBaseFee, _forkClient, _enableTransientStorage = false) {
|
|
204
|
+
constructor(_vm, _instanceId, _stateManager, _blockchain, _txPool, _automine, _minGasPrice, _blockTimeOffsetSeconds = 0n, _mempoolOrder, _coinbase, genesisAccounts, _configNetworkId, _configChainId, hardfork, _hardforkActivations, _mixHashGenerator, _parentBeaconBlockRootGenerator, allowUnlimitedContractSize, _allowBlocksWithSameTimestamp, tracingConfig, _forkNetworkId, _forkBlockNumber, _forkBlockHash, nextBlockBaseFee, _forkClient, _enableTransientStorage = false) {
|
|
195
205
|
super();
|
|
196
206
|
this._vm = _vm;
|
|
197
207
|
this._instanceId = _instanceId;
|
|
@@ -208,6 +218,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
208
218
|
this.hardfork = hardfork;
|
|
209
219
|
this._hardforkActivations = _hardforkActivations;
|
|
210
220
|
this._mixHashGenerator = _mixHashGenerator;
|
|
221
|
+
this._parentBeaconBlockRootGenerator = _parentBeaconBlockRootGenerator;
|
|
211
222
|
this.allowUnlimitedContractSize = allowUnlimitedContractSize;
|
|
212
223
|
this._allowBlocksWithSameTimestamp = _allowBlocksWithSameTimestamp;
|
|
213
224
|
this._forkNetworkId = _forkNetworkId;
|
|
@@ -255,26 +266,32 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
255
266
|
}
|
|
256
267
|
}
|
|
257
268
|
async getSignedTransaction(txParams) {
|
|
258
|
-
const senderAddress = (0, ethereumjs_util_1.
|
|
269
|
+
const senderAddress = (0, ethereumjs_util_1.bytesToHex)(txParams.from);
|
|
259
270
|
const pk = this._localAccounts.get(senderAddress);
|
|
260
271
|
if (pk !== undefined) {
|
|
261
272
|
let tx;
|
|
262
|
-
if ("
|
|
273
|
+
if ("blobs" in txParams) {
|
|
274
|
+
tx = ethereumjs_tx_1.BlobEIP4844Transaction.fromTxData(txParams, {
|
|
275
|
+
common: this._vm.common,
|
|
276
|
+
allowUnlimitedInitCodeSize: true,
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
else if ("maxFeePerGas" in txParams) {
|
|
263
280
|
tx = ethereumjs_tx_1.FeeMarketEIP1559Transaction.fromTxData(txParams, {
|
|
264
|
-
common: this._vm.
|
|
265
|
-
|
|
281
|
+
common: this._vm.common,
|
|
282
|
+
allowUnlimitedInitCodeSize: true,
|
|
266
283
|
});
|
|
267
284
|
}
|
|
268
285
|
else if ("accessList" in txParams) {
|
|
269
286
|
tx = ethereumjs_tx_1.AccessListEIP2930Transaction.fromTxData(txParams, {
|
|
270
|
-
common: this._vm.
|
|
271
|
-
|
|
287
|
+
common: this._vm.common,
|
|
288
|
+
allowUnlimitedInitCodeSize: true,
|
|
272
289
|
});
|
|
273
290
|
}
|
|
274
291
|
else {
|
|
275
|
-
tx = ethereumjs_tx_1.
|
|
276
|
-
common: this._vm.
|
|
277
|
-
|
|
292
|
+
tx = ethereumjs_tx_1.LegacyTransaction.fromTxData(txParams, {
|
|
293
|
+
common: this._vm.common,
|
|
294
|
+
allowUnlimitedInitCodeSize: true,
|
|
278
295
|
});
|
|
279
296
|
}
|
|
280
297
|
return tx.sign(pk);
|
|
@@ -417,11 +434,11 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
417
434
|
blockNumberOrPending = this.getLatestBlockNumber();
|
|
418
435
|
}
|
|
419
436
|
const account = await this._runInBlockContext(blockNumberOrPending, () => this._stateManager.getAccount(address));
|
|
420
|
-
return account
|
|
437
|
+
return account?.balance ?? 0n;
|
|
421
438
|
}
|
|
422
439
|
async getNextConfirmedNonce(address, blockNumberOrPending) {
|
|
423
440
|
const account = await this._runInBlockContext(blockNumberOrPending, () => this._stateManager.getAccount(address));
|
|
424
|
-
return account
|
|
441
|
+
return account?.nonce ?? 0n;
|
|
425
442
|
}
|
|
426
443
|
async getAccountNextPendingNonce(address) {
|
|
427
444
|
return this._txPool.getNextPendingNonce(address);
|
|
@@ -536,13 +553,19 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
536
553
|
return ethereumjs_util_1.Address.fromString(this._coinbase);
|
|
537
554
|
}
|
|
538
555
|
async getStorageAt(address, positionIndex, blockNumberOrPending) {
|
|
539
|
-
const key = (0, ethereumjs_util_1.setLengthLeft)((0, ethereumjs_util_1.
|
|
540
|
-
const data = await this._runInBlockContext(blockNumberOrPending, () =>
|
|
556
|
+
const key = (0, ethereumjs_util_1.setLengthLeft)((0, ethereumjs_util_1.bigIntToBytes)(positionIndex), 32);
|
|
557
|
+
const data = await this._runInBlockContext(blockNumberOrPending, async () => {
|
|
558
|
+
const account = await this._stateManager.getAccount(address);
|
|
559
|
+
if (account === undefined) {
|
|
560
|
+
return Uint8Array.from([]);
|
|
561
|
+
}
|
|
562
|
+
return this._stateManager.getContractStorage(address, key);
|
|
563
|
+
});
|
|
541
564
|
const EXPECTED_DATA_SIZE = 32;
|
|
542
565
|
if (data.length < EXPECTED_DATA_SIZE) {
|
|
543
566
|
return Buffer.concat([Buffer.alloc(EXPECTED_DATA_SIZE - data.length, 0), data], EXPECTED_DATA_SIZE);
|
|
544
567
|
}
|
|
545
|
-
return data;
|
|
568
|
+
return Buffer.from(data);
|
|
546
569
|
}
|
|
547
570
|
async getBlockByNumber(blockNumberOrPending) {
|
|
548
571
|
if (blockNumberOrPending === "pending") {
|
|
@@ -573,7 +596,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
573
596
|
return this._blockchain.getTotalDifficulty(block.hash());
|
|
574
597
|
}
|
|
575
598
|
async getCode(address, blockNumberOrPending) {
|
|
576
|
-
return this._runInBlockContext(blockNumberOrPending, () => this._stateManager.getContractCode(address));
|
|
599
|
+
return this._runInBlockContext(blockNumberOrPending, () => this._stateManager.getContractCode(address).then(Buffer.from));
|
|
577
600
|
}
|
|
578
601
|
getNextBlockTimestamp() {
|
|
579
602
|
return this._nextBlockTimestamp;
|
|
@@ -614,7 +637,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
614
637
|
return this._txPool.getTransactionByHash(hash)?.data;
|
|
615
638
|
}
|
|
616
639
|
async getTransactionReceipt(hash) {
|
|
617
|
-
const hashBuffer = hash instanceof Buffer ? hash : (0, ethereumjs_util_1.
|
|
640
|
+
const hashBuffer = hash instanceof Buffer ? hash : (0, ethereumjs_util_1.toBytes)(hash);
|
|
618
641
|
const receipt = await this._blockchain.getTransactionReceipt(hashBuffer);
|
|
619
642
|
return receipt ?? undefined;
|
|
620
643
|
}
|
|
@@ -631,7 +654,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
631
654
|
async signTypedDataV4(address, typedData) {
|
|
632
655
|
const privateKey = this._getLocalAccountPrivateKey(address);
|
|
633
656
|
return (0, eth_sig_util_1.signTypedData)({
|
|
634
|
-
privateKey,
|
|
657
|
+
privateKey: Buffer.from(privateKey),
|
|
635
658
|
version: eth_sig_util_1.SignTypedDataVersion.V4,
|
|
636
659
|
data: typedData,
|
|
637
660
|
});
|
|
@@ -653,6 +676,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
653
676
|
userProvidedNextBlockBaseFeePerGas: this.getUserProvidedNextBlockBaseFeePerGas(),
|
|
654
677
|
coinbase: this.getCoinbaseAddress().toString(),
|
|
655
678
|
mixHashGenerator: this._mixHashGenerator.clone(),
|
|
679
|
+
parentBeaconBlockRootGenerator: this._parentBeaconBlockRootGenerator.clone(),
|
|
656
680
|
};
|
|
657
681
|
this._irregularStatesByBlockNumber = new Map(this._irregularStatesByBlockNumber);
|
|
658
682
|
this._snapshots.push(snapshot);
|
|
@@ -691,6 +715,8 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
691
715
|
}
|
|
692
716
|
this._coinbase = snapshot.coinbase;
|
|
693
717
|
this._mixHashGenerator = snapshot.mixHashGenerator;
|
|
718
|
+
this._parentBeaconBlockRootGenerator =
|
|
719
|
+
snapshot.parentBeaconBlockRootGenerator;
|
|
694
720
|
// We delete this and the following snapshots, as they can only be used
|
|
695
721
|
// once in Ganache
|
|
696
722
|
this._snapshots.splice(snapshotIndex);
|
|
@@ -722,7 +748,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
722
748
|
id: filterId,
|
|
723
749
|
type: filter_1.Type.BLOCK_SUBSCRIPTION,
|
|
724
750
|
deadline: this._newDeadline(),
|
|
725
|
-
hashes: [(0, ethereumjs_util_1.
|
|
751
|
+
hashes: [(0, ethereumjs_util_1.bytesToHex)(block.header.hash())],
|
|
726
752
|
logs: [],
|
|
727
753
|
subscription: isSubscription,
|
|
728
754
|
});
|
|
@@ -804,11 +830,11 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
804
830
|
return true;
|
|
805
831
|
}
|
|
806
832
|
addImpersonatedAccount(address) {
|
|
807
|
-
this._impersonatedAccounts.add((0, ethereumjs_util_1.
|
|
833
|
+
this._impersonatedAccounts.add((0, ethereumjs_util_1.bytesToHex)(address));
|
|
808
834
|
return true;
|
|
809
835
|
}
|
|
810
836
|
removeImpersonatedAccount(address) {
|
|
811
|
-
return this._impersonatedAccounts.delete((0, ethereumjs_util_1.
|
|
837
|
+
return this._impersonatedAccounts.delete((0, ethereumjs_util_1.bytesToHex)(address));
|
|
812
838
|
}
|
|
813
839
|
setAutomine(automine) {
|
|
814
840
|
this._automine = automine;
|
|
@@ -830,14 +856,18 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
830
856
|
}
|
|
831
857
|
const isTransactionMined = await this._isTransactionMined(hash);
|
|
832
858
|
if (isTransactionMined) {
|
|
833
|
-
throw new errors_2.InvalidArgumentsError(`Transaction ${(0, ethereumjs_util_1.
|
|
859
|
+
throw new errors_2.InvalidArgumentsError(`Transaction ${(0, ethereumjs_util_1.bytesToHex)(hash)} cannot be dropped because it's already mined`);
|
|
834
860
|
}
|
|
835
861
|
return false;
|
|
836
862
|
}
|
|
837
863
|
async setAccountBalance(address, newBalance) {
|
|
838
864
|
const account = await this._stateManager.getAccount(address);
|
|
839
|
-
|
|
840
|
-
|
|
865
|
+
await this._stateManager.putAccount(address, ethereumjs_util_1.Account.fromAccountData({
|
|
866
|
+
nonce: account?.nonce,
|
|
867
|
+
balance: newBalance,
|
|
868
|
+
storageRoot: account?.storageRoot,
|
|
869
|
+
codeHash: account?.codeHash,
|
|
870
|
+
}));
|
|
841
871
|
await this._persistIrregularWorldState();
|
|
842
872
|
}
|
|
843
873
|
async setAccountCode(address, newCode) {
|
|
@@ -849,15 +879,20 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
849
879
|
throw new errors_2.InternalError("Cannot set account nonce when the transaction pool is not empty");
|
|
850
880
|
}
|
|
851
881
|
const account = await this._stateManager.getAccount(address);
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
await this._stateManager.putAccount(address,
|
|
882
|
+
const accountNonce = account?.nonce ?? 0n;
|
|
883
|
+
if (newNonce < accountNonce) {
|
|
884
|
+
throw new errors_2.InvalidInputError(`New nonce (${newNonce.toString()}) must not be smaller than the existing nonce (${accountNonce.toString()})`);
|
|
885
|
+
}
|
|
886
|
+
await this._stateManager.putAccount(address, ethereumjs_util_1.Account.fromAccountData({
|
|
887
|
+
nonce: newNonce,
|
|
888
|
+
balance: account?.balance,
|
|
889
|
+
storageRoot: account?.storageRoot,
|
|
890
|
+
codeHash: account?.codeHash,
|
|
891
|
+
}));
|
|
857
892
|
await this._persistIrregularWorldState();
|
|
858
893
|
}
|
|
859
894
|
async setStorageAt(address, positionIndex, value) {
|
|
860
|
-
await this._stateManager.putContractStorage(address, (0, ethereumjs_util_1.setLengthLeft)((0, ethereumjs_util_1.
|
|
895
|
+
await this._stateManager.putContractStorage(address, (0, ethereumjs_util_1.setLengthLeft)((0, ethereumjs_util_1.bigIntToBytes)(positionIndex), 32), value);
|
|
861
896
|
await this._persistIrregularWorldState();
|
|
862
897
|
}
|
|
863
898
|
async traceCall(callParams, block, traceConfig) {
|
|
@@ -869,7 +904,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
869
904
|
async traceTransaction(hash, config) {
|
|
870
905
|
const block = await this.getBlockByTransactionHash(hash);
|
|
871
906
|
if (block === undefined) {
|
|
872
|
-
throw new errors_2.InvalidInputError(`Unable to find a block containing transaction ${(0, ethereumjs_util_1.
|
|
907
|
+
throw new errors_2.InvalidInputError(`Unable to find a block containing transaction ${(0, ethereumjs_util_1.bytesToHex)(hash)}`);
|
|
873
908
|
}
|
|
874
909
|
return this._runInBlockContext(block.header.number - 1n, async () => {
|
|
875
910
|
const blockNumber = block.header.number;
|
|
@@ -890,7 +925,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
890
925
|
// to avoid having to distinguish between empty and non-existing accounts.
|
|
891
926
|
// We *could* do it during the non-forked mode, but for simplicity we just
|
|
892
927
|
// don't support it at all.
|
|
893
|
-
const isPreSpuriousDragon = !vm.
|
|
928
|
+
const isPreSpuriousDragon = !vm.common.gteHardfork("spuriousDragon");
|
|
894
929
|
if (isPreSpuriousDragon) {
|
|
895
930
|
throw new errors_2.InvalidInputError("Tracing is not supported for transactions using hardforks older than Spurious Dragon. ");
|
|
896
931
|
}
|
|
@@ -899,20 +934,20 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
899
934
|
const sender = tx.getSenderAddress();
|
|
900
935
|
if (tx.type === 0) {
|
|
901
936
|
txWithCommon = new FakeSenderTransaction_1.FakeSenderTransaction(sender, tx, {
|
|
902
|
-
common: vm.
|
|
937
|
+
common: vm.common,
|
|
903
938
|
});
|
|
904
939
|
}
|
|
905
940
|
else if (tx.type === 1) {
|
|
906
|
-
txWithCommon = new FakeSenderAccessListEIP2930Transaction_1.FakeSenderAccessListEIP2930Transaction(sender, tx, { common: vm.
|
|
941
|
+
txWithCommon = new FakeSenderAccessListEIP2930Transaction_1.FakeSenderAccessListEIP2930Transaction(sender, tx, { common: vm.common });
|
|
907
942
|
}
|
|
908
943
|
else if (tx.type === 2) {
|
|
909
|
-
txWithCommon = new FakeSenderEIP1559Transaction_1.FakeSenderEIP1559Transaction(sender, { ...tx, gasPrice: undefined }, { common: vm.
|
|
944
|
+
txWithCommon = new FakeSenderEIP1559Transaction_1.FakeSenderEIP1559Transaction(sender, { ...tx, gasPrice: undefined }, { common: vm.common });
|
|
910
945
|
}
|
|
911
946
|
else {
|
|
912
947
|
throw new errors_2.InternalError("Only legacy, EIP2930, and EIP1559 txs are supported");
|
|
913
948
|
}
|
|
914
949
|
const txHash = txWithCommon.hash();
|
|
915
|
-
if (
|
|
950
|
+
if ((0, ethereumjs_util_1.equalsBytes)(txHash, hash)) {
|
|
916
951
|
const vmDebugTracer = new vm_debug_tracer_1.VMDebugTracer(vm);
|
|
917
952
|
return vmDebugTracer.trace(async () => {
|
|
918
953
|
await vm.runTx({
|
|
@@ -1063,7 +1098,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1063
1098
|
async _addPendingTransaction(tx) {
|
|
1064
1099
|
await this._txPool.addTransaction(tx);
|
|
1065
1100
|
await this._notifyPendingTransaction(tx);
|
|
1066
|
-
return (0, ethereumjs_util_1.
|
|
1101
|
+
return (0, ethereumjs_util_1.bytesToHex)(tx.hash());
|
|
1067
1102
|
}
|
|
1068
1103
|
async _mineTransaction(tx) {
|
|
1069
1104
|
await this._addPendingTransaction(tx);
|
|
@@ -1174,6 +1209,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1174
1209
|
if (this.isPostMergeHardfork()) {
|
|
1175
1210
|
headerData.mixHash = this._getNextMixHash();
|
|
1176
1211
|
}
|
|
1212
|
+
if (this.isPostCancunHardfork()) {
|
|
1213
|
+
headerData.parentBeaconBlockRoot = this._getNextParentBeaconBlockRoot();
|
|
1214
|
+
}
|
|
1177
1215
|
headerData.baseFeePerGas = await this.getNextBlockBaseFeePerGas();
|
|
1178
1216
|
const blockBuilder = await this._vm.buildBlock({
|
|
1179
1217
|
parentBlock,
|
|
@@ -1225,22 +1263,22 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1225
1263
|
}
|
|
1226
1264
|
_getMinimalTransactionFee() {
|
|
1227
1265
|
// Typically 21_000 gas
|
|
1228
|
-
return this._vm.
|
|
1266
|
+
return this._vm.common.param("gasPrices", "tx");
|
|
1229
1267
|
}
|
|
1230
1268
|
async _getFakeTransaction(txParams) {
|
|
1231
1269
|
const sender = new ethereumjs_util_1.Address(txParams.from);
|
|
1232
1270
|
if ("maxFeePerGas" in txParams && txParams.maxFeePerGas !== undefined) {
|
|
1233
1271
|
return new FakeSenderEIP1559Transaction_1.FakeSenderEIP1559Transaction(sender, txParams, {
|
|
1234
|
-
common: this._vm.
|
|
1272
|
+
common: this._vm.common,
|
|
1235
1273
|
});
|
|
1236
1274
|
}
|
|
1237
1275
|
if ("accessList" in txParams && txParams.accessList !== undefined) {
|
|
1238
1276
|
return new FakeSenderAccessListEIP2930Transaction_1.FakeSenderAccessListEIP2930Transaction(sender, txParams, {
|
|
1239
|
-
common: this._vm.
|
|
1277
|
+
common: this._vm.common,
|
|
1240
1278
|
});
|
|
1241
1279
|
}
|
|
1242
1280
|
return new FakeSenderTransaction_1.FakeSenderTransaction(sender, txParams, {
|
|
1243
|
-
common: this._vm.
|
|
1281
|
+
common: this._vm.common,
|
|
1244
1282
|
});
|
|
1245
1283
|
}
|
|
1246
1284
|
_getSnapshotIndex(id) {
|
|
@@ -1263,9 +1301,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1263
1301
|
this._snapshots.splice(snapshotIndex);
|
|
1264
1302
|
}
|
|
1265
1303
|
_initLocalAccounts(genesisAccounts) {
|
|
1266
|
-
const privateKeys = genesisAccounts.map((acc) => (0, ethereumjs_util_1.
|
|
1304
|
+
const privateKeys = genesisAccounts.map((acc) => (0, ethereumjs_util_1.toBytes)(acc.privateKey));
|
|
1267
1305
|
for (const pk of privateKeys) {
|
|
1268
|
-
this._localAccounts.set((0, ethereumjs_util_1.
|
|
1306
|
+
this._localAccounts.set((0, ethereumjs_util_1.bytesToHex)((0, ethereumjs_util_1.privateToAddress)(pk)), pk);
|
|
1269
1307
|
}
|
|
1270
1308
|
}
|
|
1271
1309
|
async _getConsoleLogMessages(vmTrace, vmTracerError) {
|
|
@@ -1371,7 +1409,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1371
1409
|
async _notifyPendingTransaction(tx) {
|
|
1372
1410
|
this._filters.forEach((filter) => {
|
|
1373
1411
|
if (filter.type === filter_1.Type.PENDING_TRANSACTION_SUBSCRIPTION) {
|
|
1374
|
-
const hash = (0, ethereumjs_util_1.
|
|
1412
|
+
const hash = (0, ethereumjs_util_1.bytesToHex)(tx.hash());
|
|
1375
1413
|
if (filter.subscription) {
|
|
1376
1414
|
this._emitEthEvent(filter.id, hash);
|
|
1377
1415
|
return;
|
|
@@ -1392,7 +1430,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1392
1430
|
* was added to the blockchain.
|
|
1393
1431
|
*/
|
|
1394
1432
|
async _saveBlockAsSuccessfullyRun(block, runBlockResult) {
|
|
1395
|
-
const receipts = (0, output_1.getRpcReceiptOutputsFromLocalBlockExecution)(block, runBlockResult, (0, output_1.shouldShowTransactionTypeForHardfork)(this._vm.
|
|
1433
|
+
const receipts = (0, output_1.getRpcReceiptOutputsFromLocalBlockExecution)(block, runBlockResult, (0, output_1.shouldShowTransactionTypeForHardfork)(this._vm.common));
|
|
1396
1434
|
this._blockchain.addTransactionReceipts(receipts);
|
|
1397
1435
|
const td = await this.getBlockTotalDifficulty(block);
|
|
1398
1436
|
const rpcLogs = [];
|
|
@@ -1407,10 +1445,10 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1407
1445
|
case filter_1.Type.BLOCK_SUBSCRIPTION:
|
|
1408
1446
|
const hash = block.hash();
|
|
1409
1447
|
if (filter.subscription) {
|
|
1410
|
-
this._emitEthEvent(filter.id, (0, output_1.getRpcBlock)(block, td, (0, output_1.shouldShowTransactionTypeForHardfork)(this._vm.
|
|
1448
|
+
this._emitEthEvent(filter.id, (0, output_1.getRpcBlock)(block, td, (0, output_1.shouldShowTransactionTypeForHardfork)(this._vm.common), false));
|
|
1411
1449
|
return;
|
|
1412
1450
|
}
|
|
1413
|
-
filter.hashes.push((0, ethereumjs_util_1.
|
|
1451
|
+
filter.hashes.push((0, ethereumjs_util_1.bytesToHex)(hash));
|
|
1414
1452
|
break;
|
|
1415
1453
|
case filter_1.Type.LOGS_SUBSCRIPTION:
|
|
1416
1454
|
if ((0, filter_1.bloomFilter)(new ethereumjs_vm_1.Bloom(block.header.logsBloom), filter.criteria.addresses, filter.criteria.normalizedTopics)) {
|
|
@@ -1544,7 +1582,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1544
1582
|
async _applyStateOverrideSet(stateOverrideSet) {
|
|
1545
1583
|
// Multiple state override set can be configured for different addresses, hence the loop
|
|
1546
1584
|
for (const [addrToOverride, stateOverrideOptions] of Object.entries(stateOverrideSet)) {
|
|
1547
|
-
const address = new ethereumjs_util_1.Address((0, ethereumjs_util_1.
|
|
1585
|
+
const address = new ethereumjs_util_1.Address((0, ethereumjs_util_1.toBytes)(addrToOverride));
|
|
1548
1586
|
const { balance, nonce, code, state, stateDiff } = stateOverrideOptions;
|
|
1549
1587
|
await this._overrideBalanceAndNonce(address, balance, nonce);
|
|
1550
1588
|
await this._overrideCode(address, code);
|
|
@@ -1587,7 +1625,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1587
1625
|
throw new errors_2.InvalidInputError("The properties 'state' and 'stateDiff' cannot be used simultaneously when configuring the state override set passed to the eth_call method.");
|
|
1588
1626
|
}
|
|
1589
1627
|
for (const [storageKey, value] of Object.entries(newState)) {
|
|
1590
|
-
await this._stateManager.putContractStorage(address, (0, ethereumjs_util_1.
|
|
1628
|
+
await this._stateManager.putContractStorage(address, (0, ethereumjs_util_1.toBytes)(storageKey), (0, ethereumjs_util_1.setLengthLeft)((0, ethereumjs_util_1.bigIntToBytes)(value), 32));
|
|
1591
1629
|
}
|
|
1592
1630
|
}
|
|
1593
1631
|
/**
|
|
@@ -1613,8 +1651,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1613
1651
|
// we don't need to add the tx to the block because runTx doesn't
|
|
1614
1652
|
// know anything about the txs in the current block
|
|
1615
1653
|
}
|
|
1616
|
-
originalCommon = this._vm.
|
|
1617
|
-
this._vm.
|
|
1654
|
+
originalCommon = this._vm.common;
|
|
1655
|
+
assertTransientStorageCompatibility(this._enableTransientStorage, this._vm.common.hardfork());
|
|
1656
|
+
this._vm.common = ethereumjs_common_1.Common.custom({
|
|
1618
1657
|
chainId: this._forkBlockNumber === undefined ||
|
|
1619
1658
|
blockContext.header.number >= this._forkBlockNumber
|
|
1620
1659
|
? this._configChainId
|
|
@@ -1622,7 +1661,6 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1622
1661
|
networkId: this._forkNetworkId ?? this._configNetworkId,
|
|
1623
1662
|
}, {
|
|
1624
1663
|
hardfork: this._selectHardfork(blockContext.header.number),
|
|
1625
|
-
...this._getTransientStorageSettings(),
|
|
1626
1664
|
});
|
|
1627
1665
|
// If this VM is running without EIP4895, but the block has withdrawals,
|
|
1628
1666
|
// we remove them and the withdrawal root from the block
|
|
@@ -1637,7 +1675,25 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1637
1675
|
},
|
|
1638
1676
|
}, {
|
|
1639
1677
|
freeze: false,
|
|
1640
|
-
common: this._vm.
|
|
1678
|
+
common: this._vm.common,
|
|
1679
|
+
skipConsensusFormatValidation: true,
|
|
1680
|
+
});
|
|
1681
|
+
}
|
|
1682
|
+
// If this VM is running without cancun, but the block has cancun fields,
|
|
1683
|
+
// we remove them from the block
|
|
1684
|
+
if (!this.isCancunBlock(blockNumberOrPending) &&
|
|
1685
|
+
blockContext.header.blobGasUsed !== undefined) {
|
|
1686
|
+
blockContext = ethereumjs_block_1.Block.fromBlockData({
|
|
1687
|
+
...blockContext,
|
|
1688
|
+
header: {
|
|
1689
|
+
...blockContext.header,
|
|
1690
|
+
blobGasUsed: undefined,
|
|
1691
|
+
excessBlobGas: undefined,
|
|
1692
|
+
parentBeaconBlockRoot: undefined,
|
|
1693
|
+
},
|
|
1694
|
+
}, {
|
|
1695
|
+
freeze: false,
|
|
1696
|
+
common: this._vm.common,
|
|
1641
1697
|
skipConsensusFormatValidation: true,
|
|
1642
1698
|
});
|
|
1643
1699
|
}
|
|
@@ -1658,7 +1714,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1658
1714
|
(blockContext.header.baseFeePerGas === undefined || forceBaseFeeZero)) {
|
|
1659
1715
|
blockContext = ethereumjs_block_1.Block.fromBlockData(blockContext, {
|
|
1660
1716
|
freeze: false,
|
|
1661
|
-
common: this._vm.
|
|
1717
|
+
common: this._vm.common,
|
|
1662
1718
|
skipConsensusFormatValidation: true,
|
|
1663
1719
|
});
|
|
1664
1720
|
blockContext.header.baseFeePerGas = 0n;
|
|
@@ -1674,7 +1730,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1674
1730
|
}
|
|
1675
1731
|
finally {
|
|
1676
1732
|
if (originalCommon !== undefined) {
|
|
1677
|
-
this._vm.
|
|
1733
|
+
this._vm.common = originalCommon;
|
|
1678
1734
|
}
|
|
1679
1735
|
await this._stateManager.setStateRoot(initialStateRoot);
|
|
1680
1736
|
}
|
|
@@ -1720,7 +1776,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1720
1776
|
}
|
|
1721
1777
|
return this._runInBlockContext(blockNumberOrPending, async () => {
|
|
1722
1778
|
const account = await this._stateManager.getAccount(address);
|
|
1723
|
-
return account
|
|
1779
|
+
return account?.nonce ?? 0n;
|
|
1724
1780
|
});
|
|
1725
1781
|
}
|
|
1726
1782
|
async _isTransactionMined(hash) {
|
|
@@ -1741,20 +1797,30 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1741
1797
|
isEip1559Active(blockNumberOrPending) {
|
|
1742
1798
|
if (blockNumberOrPending !== undefined &&
|
|
1743
1799
|
blockNumberOrPending !== "pending") {
|
|
1744
|
-
return this._vm.
|
|
1800
|
+
return this._vm.common.hardforkGteHardfork(this._selectHardfork(blockNumberOrPending), "london");
|
|
1745
1801
|
}
|
|
1746
|
-
return this._vm.
|
|
1802
|
+
return this._vm.common.gteHardfork("london");
|
|
1747
1803
|
}
|
|
1748
1804
|
isEip4895Active(blockNumberOrPending) {
|
|
1749
1805
|
if (blockNumberOrPending !== undefined &&
|
|
1750
1806
|
blockNumberOrPending !== "pending") {
|
|
1751
|
-
return this._vm.
|
|
1807
|
+
return this._vm.common.hardforkGteHardfork(this._selectHardfork(blockNumberOrPending), "shanghai");
|
|
1752
1808
|
}
|
|
1753
|
-
return this._vm.
|
|
1809
|
+
return this._vm.common.gteHardfork("shanghai");
|
|
1810
|
+
}
|
|
1811
|
+
isCancunBlock(blockNumberOrPending) {
|
|
1812
|
+
if (blockNumberOrPending !== undefined &&
|
|
1813
|
+
blockNumberOrPending !== "pending") {
|
|
1814
|
+
return this._vm.common.hardforkGteHardfork(this._selectHardfork(blockNumberOrPending), "cancun");
|
|
1815
|
+
}
|
|
1816
|
+
return this._vm.common.gteHardfork("cancun");
|
|
1754
1817
|
}
|
|
1755
1818
|
isPostMergeHardfork() {
|
|
1756
1819
|
return (0, hardforks_1.hardforkGte)(this.hardfork, hardforks_1.HardforkName.MERGE);
|
|
1757
1820
|
}
|
|
1821
|
+
isPostCancunHardfork() {
|
|
1822
|
+
return (0, hardforks_1.hardforkGte)(this.hardfork, hardforks_1.HardforkName.CANCUN);
|
|
1823
|
+
}
|
|
1758
1824
|
setPrevRandao(prevRandao) {
|
|
1759
1825
|
this._mixHashGenerator.setNext(prevRandao);
|
|
1760
1826
|
}
|
|
@@ -1768,7 +1834,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1768
1834
|
const instanceIdHex = BigIntUtils.toEvmWord(this._instanceId);
|
|
1769
1835
|
const instanceId = `0x${instanceIdHex}`;
|
|
1770
1836
|
const latestBlock = await this.getLatestBlock();
|
|
1771
|
-
const latestBlockHashHex = latestBlock.header.hash().toString("hex");
|
|
1837
|
+
const latestBlockHashHex = Buffer.from(latestBlock.header.hash()).toString("hex");
|
|
1772
1838
|
const latestBlockHash = `0x${latestBlockHashHex}`;
|
|
1773
1839
|
const metadata = {
|
|
1774
1840
|
clientVersion,
|
|
@@ -1791,6 +1857,9 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1791
1857
|
_getNextMixHash() {
|
|
1792
1858
|
return this._mixHashGenerator.next();
|
|
1793
1859
|
}
|
|
1860
|
+
_getNextParentBeaconBlockRoot() {
|
|
1861
|
+
return this._parentBeaconBlockRootGenerator.next();
|
|
1862
|
+
}
|
|
1794
1863
|
async _getEstimateGasFeePriceFields(callParams, blockNumberOrPending) {
|
|
1795
1864
|
if (!this.isEip1559Active(blockNumberOrPending) ||
|
|
1796
1865
|
callParams.gasPrice !== undefined) {
|
|
@@ -1820,7 +1889,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1820
1889
|
_selectHardfork(blockNumber) {
|
|
1821
1890
|
if (this._forkBlockNumber === undefined ||
|
|
1822
1891
|
blockNumber >= this._forkBlockNumber) {
|
|
1823
|
-
return this._vm.
|
|
1892
|
+
return this._vm.common.hardfork();
|
|
1824
1893
|
}
|
|
1825
1894
|
if (this._hardforkActivations.size === 0) {
|
|
1826
1895
|
throw new errors_2.InternalError(`No known hardfork for execution on historical block ${blockNumber.toString()} (relative to fork block number ${this._forkBlockNumber}). The node was not configured with a hardfork activation history. See http://hardhat.org/custom-hardfork-history`);
|
|
@@ -1838,16 +1907,16 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1838
1907
|
if (!constants_1.HARDHAT_NETWORK_SUPPORTED_HARDFORKS.includes(hardfork)) {
|
|
1839
1908
|
throw new errors_2.InternalError(`Tried to run a call or transaction in the context of a block whose hardfork is "${hardfork}", but Hardhat Network only supports the following hardforks: ${constants_1.HARDHAT_NETWORK_SUPPORTED_HARDFORKS.join(", ")}`);
|
|
1840
1909
|
}
|
|
1841
|
-
return hardfork;
|
|
1910
|
+
return hardfork === "merge" ? "mergeForkIdTransition" : hardfork;
|
|
1842
1911
|
}
|
|
1843
1912
|
_getCommonForTracing(networkId, blockNumber) {
|
|
1913
|
+
assertTransientStorageCompatibility(this._enableTransientStorage, this._vm.common.hardfork());
|
|
1844
1914
|
try {
|
|
1845
1915
|
const common = ethereumjs_common_1.Common.custom({
|
|
1846
1916
|
chainId: networkId,
|
|
1847
1917
|
networkId,
|
|
1848
1918
|
}, {
|
|
1849
1919
|
hardfork: this._selectHardfork(BigInt(blockNumber)),
|
|
1850
|
-
...this._getTransientStorageSettings(),
|
|
1851
1920
|
});
|
|
1852
1921
|
return common;
|
|
1853
1922
|
}
|
|
@@ -1855,12 +1924,12 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1855
1924
|
throw new errors_2.InternalError(`Network id ${networkId} does not correspond to a network that Hardhat can trace`);
|
|
1856
1925
|
}
|
|
1857
1926
|
}
|
|
1858
|
-
_getTransientStorageSettings() {
|
|
1859
|
-
if (this._enableTransientStorage) {
|
|
1860
|
-
return { eips: [1153] };
|
|
1861
|
-
}
|
|
1862
|
-
return {};
|
|
1863
|
-
}
|
|
1864
1927
|
}
|
|
1865
1928
|
exports.HardhatNode = HardhatNode;
|
|
1929
|
+
function assertTransientStorageCompatibility(enableTransientStorage, hardfork) {
|
|
1930
|
+
if (enableTransientStorage && !(0, hardforks_1.hardforkGte)(hardfork, hardforks_1.HardforkName.CANCUN)) {
|
|
1931
|
+
throw new errors_2.InternalError(`Transient storage is not compatible with hardfork "${hardfork}". To use transient storage, set the hardfork to "cancun" or later.`);
|
|
1932
|
+
}
|
|
1933
|
+
}
|
|
1934
|
+
exports.assertTransientStorageCompatibility = assertTransientStorageCompatibility;
|
|
1866
1935
|
//# sourceMappingURL=node.js.map
|