hardhat 2.20.0 → 2.21.0-dev.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/internal/core/jsonrpc/types/input/blockTag.d.ts +3 -3
- package/internal/core/jsonrpc/types/input/filterRequest.d.ts +6 -6
- package/internal/core/providers/construction.d.ts.map +1 -1
- package/internal/core/providers/construction.js +28 -4
- package/internal/core/providers/construction.js.map +1 -1
- package/internal/core/providers/http.d.ts +2 -0
- package/internal/core/providers/http.d.ts.map +1 -1
- package/internal/core/providers/http.js +2 -1
- package/internal/core/providers/http.js.map +1 -1
- package/internal/core/runtime-environment.d.ts.map +1 -1
- package/internal/core/runtime-environment.js.map +1 -1
- package/internal/hardhat-network/jsonrpc/client.d.ts +0 -2
- package/internal/hardhat-network/jsonrpc/client.d.ts.map +1 -1
- package/internal/hardhat-network/jsonrpc/client.js +0 -16
- package/internal/hardhat-network/jsonrpc/client.js.map +1 -1
- package/internal/hardhat-network/jsonrpc/handler.js +9 -1
- package/internal/hardhat-network/jsonrpc/handler.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 +0 -7
- package/internal/hardhat-network/provider/HardhatBlockchain.d.ts.map +1 -1
- package/internal/hardhat-network/provider/HardhatBlockchain.js +2 -14
- package/internal/hardhat-network/provider/HardhatBlockchain.js.map +1 -1
- package/internal/hardhat-network/provider/TxPool.d.ts +3 -2
- 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 +6 -5
- 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 +0 -7
- package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkBlockchain.js +4 -21
- package/internal/hardhat-network/provider/fork/ForkBlockchain.js.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts +13 -19
- package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkStateManager.js +61 -59
- 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 +0 -3
- 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/fork/rpcToTxData.js +1 -1
- package/internal/hardhat-network/provider/fork/rpcToTxData.js.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 +9 -16
- package/internal/hardhat-network/provider/modules/eth.js.map +1 -1
- package/internal/hardhat-network/provider/modules/logger.d.ts +6 -84
- package/internal/hardhat-network/provider/modules/logger.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/logger.js +3 -530
- package/internal/hardhat-network/provider/modules/logger.js.map +1 -1
- package/internal/hardhat-network/provider/node-types.d.ts +2 -65
- package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
- package/internal/hardhat-network/provider/node-types.js +0 -5
- package/internal/hardhat-network/provider/node-types.js.map +1 -1
- package/internal/hardhat-network/provider/node.d.ts +2 -6
- package/internal/hardhat-network/provider/node.d.ts.map +1 -1
- package/internal/hardhat-network/provider/node.js +79 -148
- package/internal/hardhat-network/provider/node.js.map +1 -1
- package/internal/hardhat-network/provider/output.d.ts +0 -14
- package/internal/hardhat-network/provider/output.d.ts.map +1 -1
- package/internal/hardhat-network/provider/output.js +0 -264
- package/internal/hardhat-network/provider/output.js.map +1 -1
- package/internal/hardhat-network/provider/provider.d.ts +26 -25
- package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
- package/internal/hardhat-network/provider/provider.js +342 -186
- package/internal/hardhat-network/provider/provider.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts +10 -8
- 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 +10 -8
- 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 +10 -9
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js +7 -6
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts +6 -5
- 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 +5 -4
- 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 +8 -7
- 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 +8 -7
- 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 +5 -4
- package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/convertToEdr.d.ts +14 -0
- package/internal/hardhat-network/provider/utils/convertToEdr.d.ts.map +1 -0
- package/internal/hardhat-network/provider/utils/convertToEdr.js +191 -0
- package/internal/hardhat-network/provider/utils/convertToEdr.js.map +1 -0
- package/internal/hardhat-network/provider/utils/getCurrentTimestamp.d.ts +0 -1
- package/internal/hardhat-network/provider/utils/getCurrentTimestamp.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/getCurrentTimestamp.js +1 -5
- package/internal/hardhat-network/provider/utils/getCurrentTimestamp.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 +1 -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 +1 -15
- package/internal/hardhat-network/provider/utils/makeFakeSignature.js.map +1 -1
- package/internal/hardhat-network/provider/utils/makeForkClient.d.ts +10 -1
- package/internal/hardhat-network/provider/utils/makeForkClient.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/makeForkClient.js +38 -18
- package/internal/hardhat-network/provider/utils/makeForkClient.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 +3 -1
- package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/putGenesisBlock.js +2 -6
- package/internal/hardhat-network/provider/utils/putGenesisBlock.js.map +1 -1
- package/internal/hardhat-network/provider/utils/random.d.ts +1 -0
- package/internal/hardhat-network/provider/utils/random.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/random.js +7 -1
- package/internal/hardhat-network/provider/utils/random.js.map +1 -1
- package/internal/hardhat-network/provider/utils/reorgs-protection.d.ts +1 -1
- package/internal/hardhat-network/provider/utils/reorgs-protection.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/reorgs-protection.js +5 -5
- package/internal/hardhat-network/provider/utils/reorgs-protection.js.map +1 -1
- package/internal/hardhat-network/provider/vm/exit.d.ts +22 -0
- package/internal/hardhat-network/provider/vm/exit.d.ts.map +1 -0
- package/internal/hardhat-network/provider/vm/exit.js +93 -0
- package/internal/hardhat-network/provider/vm/exit.js.map +1 -0
- package/internal/hardhat-network/provider/vm/minimal-vm.d.ts +29 -0
- package/internal/hardhat-network/provider/vm/minimal-vm.d.ts.map +1 -0
- package/internal/hardhat-network/provider/vm/minimal-vm.js +46 -0
- package/internal/hardhat-network/provider/vm/minimal-vm.js.map +1 -0
- package/internal/hardhat-network/provider/vm/proxy-vm.d.ts +36 -0
- package/internal/hardhat-network/provider/vm/proxy-vm.d.ts.map +1 -0
- package/internal/hardhat-network/provider/vm/proxy-vm.js +73 -0
- package/internal/hardhat-network/provider/vm/proxy-vm.js.map +1 -0
- package/internal/hardhat-network/provider/vm/types.d.ts +27 -0
- package/internal/hardhat-network/provider/vm/types.d.ts.map +1 -0
- package/internal/hardhat-network/provider/vm/types.js +3 -0
- package/internal/hardhat-network/provider/vm/types.js.map +1 -0
- package/internal/hardhat-network/stack-traces/consoleLogger.d.ts +6 -0
- package/internal/hardhat-network/stack-traces/consoleLogger.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/consoleLogger.js +33 -16
- package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
- package/internal/hardhat-network/stack-traces/contracts-identifier.d.ts +1 -2
- package/internal/hardhat-network/stack-traces/contracts-identifier.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/contracts-identifier.js +6 -7
- package/internal/hardhat-network/stack-traces/contracts-identifier.js.map +1 -1
- package/internal/hardhat-network/stack-traces/debug.js +6 -6
- 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 +13 -7
- package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
- package/internal/hardhat-network/stack-traces/message-trace.d.ts +8 -3
- package/internal/hardhat-network/stack-traces/message-trace.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/message-trace.js +22 -1
- package/internal/hardhat-network/stack-traces/message-trace.js.map +1 -1
- package/internal/hardhat-network/stack-traces/model.d.ts +8 -0
- package/internal/hardhat-network/stack-traces/model.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/model.js +52 -0
- package/internal/hardhat-network/stack-traces/model.js.map +1 -1
- package/internal/hardhat-network/stack-traces/opcodes.d.ts +1 -0
- package/internal/hardhat-network/stack-traces/opcodes.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/opcodes.js +5 -1
- package/internal/hardhat-network/stack-traces/opcodes.js.map +1 -1
- package/internal/hardhat-network/stack-traces/solidity-errors.js +2 -2
- package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
- package/internal/hardhat-network/stack-traces/solidityTracer.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/solidityTracer.js +5 -5
- 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 +28 -34
- package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-trace-decoder.d.ts +7 -0
- package/internal/hardhat-network/stack-traces/vm-trace-decoder.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-trace-decoder.js +69 -2
- package/internal/hardhat-network/stack-traces/vm-trace-decoder.js.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-tracer.d.ts +7 -12
- package/internal/hardhat-network/stack-traces/vm-tracer.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-tracer.js +46 -65
- package/internal/hardhat-network/stack-traces/vm-tracer.js.map +1 -1
- package/internal/util/date.d.ts +1 -0
- package/internal/util/date.d.ts.map +1 -1
- package/internal/util/date.js +5 -1
- package/internal/util/date.js.map +1 -1
- package/internal/util/hardforks.d.ts +2 -0
- package/internal/util/hardforks.d.ts.map +1 -1
- package/internal/util/hardforks.js +27 -1
- package/internal/util/hardforks.js.map +1 -1
- package/package.json +18 -16
- package/src/internal/core/providers/construction.ts +7 -9
- package/src/internal/core/providers/http.ts +3 -1
- package/src/internal/core/runtime-environment.ts +2 -1
- package/src/internal/hardhat-network/jsonrpc/client.ts +1 -28
- package/src/internal/hardhat-network/jsonrpc/handler.ts +9 -1
- package/src/internal/hardhat-network/provider/modules/logger.ts +6 -801
- package/src/internal/hardhat-network/provider/node-types.ts +2 -89
- package/src/internal/hardhat-network/provider/output.ts +0 -352
- package/src/internal/hardhat-network/provider/provider.ts +482 -263
- package/src/internal/hardhat-network/provider/utils/convertToEdr.ts +228 -0
- package/src/internal/hardhat-network/provider/utils/getCurrentTimestamp.ts +0 -4
- package/src/internal/hardhat-network/provider/utils/makeCommon.ts +1 -12
- package/src/internal/hardhat-network/provider/utils/makeForkClient.ts +63 -24
- package/src/internal/hardhat-network/provider/utils/random.ts +8 -1
- package/src/internal/hardhat-network/provider/utils/reorgs-protection.ts +5 -5
- package/src/internal/hardhat-network/provider/vm/exit.ts +101 -0
- package/src/internal/hardhat-network/provider/vm/minimal-vm.ts +101 -0
- package/src/internal/hardhat-network/provider/vm/types.ts +31 -0
- package/src/internal/hardhat-network/stack-traces/consoleLogger.ts +40 -21
- package/src/internal/hardhat-network/stack-traces/contracts-identifier.ts +10 -12
- package/src/internal/hardhat-network/stack-traces/debug.ts +6 -6
- package/src/internal/hardhat-network/stack-traces/error-inferrer.ts +15 -8
- package/src/internal/hardhat-network/stack-traces/message-trace.ts +40 -4
- package/src/internal/hardhat-network/stack-traces/model.ts +61 -0
- package/src/internal/hardhat-network/stack-traces/opcodes.ts +4 -0
- package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +2 -2
- package/src/internal/hardhat-network/stack-traces/solidityTracer.ts +6 -5
- package/src/internal/hardhat-network/stack-traces/vm-trace-decoder.ts +113 -4
- package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +67 -95
- package/src/internal/util/date.ts +4 -0
- package/src/internal/util/hardforks.ts +52 -0
- package/src/internal/hardhat-network/provider/BlockchainBase.ts +0 -185
- package/src/internal/hardhat-network/provider/BlockchainData.ts +0 -261
- package/src/internal/hardhat-network/provider/HardhatBlockchain.ts +0 -140
- package/src/internal/hardhat-network/provider/PoolState.ts +0 -48
- package/src/internal/hardhat-network/provider/TransactionQueue.ts +0 -158
- package/src/internal/hardhat-network/provider/TxPool.ts +0 -715
- package/src/internal/hardhat-network/provider/ethereumjs-workarounds.ts +0 -21
- package/src/internal/hardhat-network/provider/filter.ts +0 -142
- package/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts +0 -433
- package/src/internal/hardhat-network/provider/fork/ForkStateManager.ts +0 -480
- package/src/internal/hardhat-network/provider/fork/rpcToBlockData.ts +0 -35
- package/src/internal/hardhat-network/provider/fork/rpcToTxData.ts +0 -44
- package/src/internal/hardhat-network/provider/modules/base.ts +0 -156
- package/src/internal/hardhat-network/provider/modules/debug.ts +0 -104
- package/src/internal/hardhat-network/provider/modules/eth.ts +0 -1781
- package/src/internal/hardhat-network/provider/modules/evm.ts +0 -249
- package/src/internal/hardhat-network/provider/modules/hardhat.ts +0 -481
- package/src/internal/hardhat-network/provider/modules/net.ts +0 -60
- package/src/internal/hardhat-network/provider/modules/personal.ts +0 -40
- package/src/internal/hardhat-network/provider/modules/web3.ts +0 -49
- package/src/internal/hardhat-network/provider/node.ts +0 -2993
- package/src/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.ts +0 -226
- package/src/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.ts +0 -224
- package/src/internal/hardhat-network/provider/transactions/FakeSenderTransaction.ts +0 -216
- package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts +0 -143
- package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.ts +0 -144
- package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.ts +0 -171
- package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.ts +0 -169
- package/src/internal/hardhat-network/provider/types/HardhatBlockchainInterface.ts +0 -25
- package/src/internal/hardhat-network/provider/utils/makeFakeSignature.ts +0 -60
- package/src/internal/hardhat-network/provider/utils/makeStateTrie.ts +0 -29
- package/src/internal/hardhat-network/provider/utils/putGenesisBlock.ts +0 -61
- package/src/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.ts +0 -45
- package/src/internal/hardhat-network/provider/utils/txMapToArray.ts +0 -7
- package/src/internal/hardhat-network/stack-traces/vm-debug-tracer.ts +0 -630
|
@@ -1,17 +1,30 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
Artifacts,
|
|
3
3
|
BoundExperimentalHardhatNetworkMessageTraceHook,
|
|
4
|
+
CompilerInput,
|
|
5
|
+
CompilerOutput,
|
|
4
6
|
EIP1193Provider,
|
|
5
7
|
EthSubscription,
|
|
6
8
|
HardhatNetworkChainsConfig,
|
|
7
9
|
RequestArguments,
|
|
8
10
|
} from "../../../types";
|
|
9
11
|
|
|
12
|
+
import {
|
|
13
|
+
EdrContext,
|
|
14
|
+
Provider as EdrProviderT,
|
|
15
|
+
ExecutionResult,
|
|
16
|
+
RawTrace,
|
|
17
|
+
Response,
|
|
18
|
+
SubscriptionEvent,
|
|
19
|
+
TracingMessage,
|
|
20
|
+
TracingStep,
|
|
21
|
+
} from "@nomicfoundation/edr";
|
|
10
22
|
import { Common } from "@nomicfoundation/ethereumjs-common";
|
|
11
23
|
import chalk from "chalk";
|
|
12
24
|
import debug from "debug";
|
|
13
25
|
import { EventEmitter } from "events";
|
|
14
26
|
import fsExtra from "fs-extra";
|
|
27
|
+
import * as t from "io-ts";
|
|
15
28
|
import semver from "semver";
|
|
16
29
|
|
|
17
30
|
import {
|
|
@@ -19,24 +32,31 @@ import {
|
|
|
19
32
|
HARDHAT_NETWORK_REVERT_SNAPSHOT_EVENT,
|
|
20
33
|
} from "../../constants";
|
|
21
34
|
import {
|
|
35
|
+
rpcCompilerInput,
|
|
36
|
+
rpcCompilerOutput,
|
|
37
|
+
} from "../../core/jsonrpc/types/input/solc";
|
|
38
|
+
import { validateParams } from "../../core/jsonrpc/types/input/validation";
|
|
39
|
+
import {
|
|
40
|
+
InvalidArgumentsError,
|
|
22
41
|
InvalidInputError,
|
|
23
|
-
MethodNotFoundError,
|
|
24
|
-
MethodNotSupportedError,
|
|
25
42
|
ProviderError,
|
|
26
43
|
} from "../../core/providers/errors";
|
|
27
|
-
import {
|
|
28
|
-
|
|
44
|
+
import { isErrorResponse } from "../../core/providers/http";
|
|
45
|
+
import { getHardforkName } from "../../util/hardforks";
|
|
46
|
+
import { createModelsAndDecodeBytecodes } from "../stack-traces/compiler-to-model";
|
|
47
|
+
import { ConsoleLogger } from "../stack-traces/consoleLogger";
|
|
48
|
+
import { ContractsIdentifier } from "../stack-traces/contracts-identifier";
|
|
49
|
+
import {
|
|
50
|
+
VmTraceDecoder,
|
|
51
|
+
initializeVmTraceDecoder,
|
|
52
|
+
} from "../stack-traces/vm-trace-decoder";
|
|
29
53
|
import { FIRST_SOLC_VERSION_SUPPORTED } from "../stack-traces/constants";
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
34
|
-
|
|
35
|
-
import {
|
|
36
|
-
import { PersonalModule } from "./modules/personal";
|
|
37
|
-
import { NetModule } from "./modules/net";
|
|
38
|
-
import { Web3Module } from "./modules/web3";
|
|
39
|
-
import { HardhatNode } from "./node";
|
|
54
|
+
import { encodeSolidityStackTrace } from "../stack-traces/solidity-errors";
|
|
55
|
+
import { SolidityStackTrace } from "../stack-traces/solidity-stack-trace";
|
|
56
|
+
import { SolidityTracer } from "../stack-traces/solidityTracer";
|
|
57
|
+
import { VMTracer } from "../stack-traces/vm-tracer";
|
|
58
|
+
|
|
59
|
+
import { getPackageJson } from "../../util/packageInfo";
|
|
40
60
|
import {
|
|
41
61
|
ForkConfig,
|
|
42
62
|
GenesisAccount,
|
|
@@ -45,18 +65,35 @@ import {
|
|
|
45
65
|
NodeConfig,
|
|
46
66
|
TracingConfig,
|
|
47
67
|
} from "./node-types";
|
|
68
|
+
import {
|
|
69
|
+
edrRpcDebugTraceToHardhat,
|
|
70
|
+
edrTracingMessageResultToMinimalEVMResult,
|
|
71
|
+
edrTracingMessageToMinimalMessage,
|
|
72
|
+
edrTracingStepToMinimalInterpreterStep,
|
|
73
|
+
ethereumjsIntervalMiningConfigToEdr,
|
|
74
|
+
ethereumjsMempoolOrderToEdrMineOrdering,
|
|
75
|
+
ethereumsjsHardforkToEdrSpecId,
|
|
76
|
+
} from "./utils/convertToEdr";
|
|
77
|
+
import { makeCommon } from "./utils/makeCommon";
|
|
78
|
+
import { LoggerConfig, printLine, replaceLastLine } from "./modules/logger";
|
|
79
|
+
import { MinimalEthereumJsVm, getMinimalEthereumJsVm } from "./vm/minimal-vm";
|
|
48
80
|
|
|
49
81
|
const log = debug("hardhat:core:hardhat-network:provider");
|
|
50
82
|
|
|
51
|
-
// Set of methods that are never logged
|
|
52
|
-
const PRIVATE_RPC_METHODS = new Set([
|
|
53
|
-
"hardhat_getStackTraceFailuresCount",
|
|
54
|
-
"hardhat_setLoggingEnabled",
|
|
55
|
-
]);
|
|
56
|
-
|
|
57
83
|
/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */
|
|
58
84
|
|
|
59
85
|
export const DEFAULT_COINBASE = "0xc014ba5ec014ba5ec014ba5ec014ba5ec014ba5e";
|
|
86
|
+
let _globalEdrContext: EdrContext | undefined;
|
|
87
|
+
|
|
88
|
+
// Lazy initialize the global EDR context.
|
|
89
|
+
export function getGlobalEdrContext(): EdrContext {
|
|
90
|
+
if (_globalEdrContext === undefined) {
|
|
91
|
+
// Only one is allowed to exist
|
|
92
|
+
_globalEdrContext = new EdrContext();
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return _globalEdrContext;
|
|
96
|
+
}
|
|
60
97
|
|
|
61
98
|
interface HardhatNetworkProviderConfig {
|
|
62
99
|
hardfork: string;
|
|
@@ -83,312 +120,494 @@ interface HardhatNetworkProviderConfig {
|
|
|
83
120
|
enableTransientStorage: boolean;
|
|
84
121
|
}
|
|
85
122
|
|
|
86
|
-
export
|
|
123
|
+
export function getNodeConfig(
|
|
124
|
+
config: HardhatNetworkProviderConfig,
|
|
125
|
+
tracingConfig?: TracingConfig
|
|
126
|
+
): NodeConfig {
|
|
127
|
+
return {
|
|
128
|
+
automine: config.automine,
|
|
129
|
+
blockGasLimit: config.blockGasLimit,
|
|
130
|
+
minGasPrice: config.minGasPrice,
|
|
131
|
+
genesisAccounts: config.genesisAccounts,
|
|
132
|
+
allowUnlimitedContractSize: config.allowUnlimitedContractSize,
|
|
133
|
+
tracingConfig,
|
|
134
|
+
initialBaseFeePerGas: config.initialBaseFeePerGas,
|
|
135
|
+
mempoolOrder: config.mempoolOrder,
|
|
136
|
+
hardfork: config.hardfork,
|
|
137
|
+
chainId: config.chainId,
|
|
138
|
+
networkId: config.networkId,
|
|
139
|
+
initialDate: config.initialDate,
|
|
140
|
+
forkConfig: config.forkConfig,
|
|
141
|
+
forkCachePath:
|
|
142
|
+
config.forkConfig !== undefined ? config.forkCachePath : undefined,
|
|
143
|
+
coinbase: config.coinbase ?? DEFAULT_COINBASE,
|
|
144
|
+
chains: config.chains,
|
|
145
|
+
allowBlocksWithSameTimestamp: config.allowBlocksWithSameTimestamp,
|
|
146
|
+
enableTransientStorage: config.enableTransientStorage,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
export interface RawTraceCallbacks {
|
|
151
|
+
onStep?: (messageTrace: TracingStep) => Promise<void>;
|
|
152
|
+
onBeforeMessage?: (messageTrace: TracingMessage) => Promise<void>;
|
|
153
|
+
onAfterMessage?: (messageTrace: ExecutionResult) => Promise<void>;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
class EdrProviderEventAdapter extends EventEmitter {}
|
|
157
|
+
|
|
158
|
+
export class EdrProviderWrapper
|
|
87
159
|
extends EventEmitter
|
|
88
160
|
implements EIP1193Provider
|
|
89
161
|
{
|
|
90
|
-
private
|
|
91
|
-
|
|
92
|
-
private
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
private readonly _logger: ModulesLogger,
|
|
105
|
-
private readonly _artifacts?: Artifacts
|
|
162
|
+
private _failedStackTraces = 0;
|
|
163
|
+
|
|
164
|
+
private constructor(
|
|
165
|
+
private readonly _provider: EdrProviderT,
|
|
166
|
+
// we add this for backwards-compatibility with plugins like solidity-coverage
|
|
167
|
+
private readonly _node: {
|
|
168
|
+
_vm: MinimalEthereumJsVm;
|
|
169
|
+
},
|
|
170
|
+
private readonly _eventAdapter: EdrProviderEventAdapter,
|
|
171
|
+
private readonly _vmTraceDecoder: VmTraceDecoder,
|
|
172
|
+
private readonly _rawTraceCallbacks: RawTraceCallbacks,
|
|
173
|
+
// The common configuration for EthereumJS VM is not used by EDR, but tests expect it as part of the provider.
|
|
174
|
+
private readonly _common: Common,
|
|
175
|
+
tracingConfig?: TracingConfig
|
|
106
176
|
) {
|
|
107
177
|
super();
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
public async request(args: RequestArguments): Promise<unknown> {
|
|
111
|
-
const release = await this._mutex.acquire();
|
|
112
178
|
|
|
113
|
-
if (
|
|
114
|
-
|
|
115
|
-
"Hardhat Network doesn't support JSON-RPC params sent as an object"
|
|
116
|
-
);
|
|
179
|
+
if (tracingConfig !== undefined) {
|
|
180
|
+
initializeVmTraceDecoder(this._vmTraceDecoder, tracingConfig);
|
|
117
181
|
}
|
|
182
|
+
}
|
|
118
183
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
184
|
+
public static async create(
|
|
185
|
+
config: HardhatNetworkProviderConfig,
|
|
186
|
+
loggerConfig: LoggerConfig,
|
|
187
|
+
rawTraceCallbacks: RawTraceCallbacks,
|
|
188
|
+
tracingConfig?: TracingConfig
|
|
189
|
+
): Promise<EdrProviderWrapper> {
|
|
190
|
+
const { Provider } =
|
|
191
|
+
require("@nomicfoundation/edr") as typeof import("@nomicfoundation/edr");
|
|
192
|
+
|
|
193
|
+
const coinbase = config.coinbase ?? DEFAULT_COINBASE;
|
|
194
|
+
|
|
195
|
+
let fork;
|
|
196
|
+
if (config.forkConfig !== undefined) {
|
|
197
|
+
fork = {
|
|
198
|
+
jsonRpcUrl: config.forkConfig.jsonRpcUrl,
|
|
199
|
+
blockNumber:
|
|
200
|
+
config.forkConfig.blockNumber !== undefined
|
|
201
|
+
? BigInt(config.forkConfig.blockNumber)
|
|
202
|
+
: undefined,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
126
205
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
206
|
+
const initialDate =
|
|
207
|
+
config.initialDate !== undefined
|
|
208
|
+
? BigInt(Math.floor(config.initialDate.getTime() / 1000))
|
|
209
|
+
: undefined;
|
|
210
|
+
|
|
211
|
+
// To accomodate construction ordering, we need an adapter to forward events
|
|
212
|
+
// from the EdrProvider callback to the wrapper's listener
|
|
213
|
+
const eventAdapter = new EdrProviderEventAdapter();
|
|
214
|
+
|
|
215
|
+
const printLineFn = loggerConfig.printLineFn ?? printLine;
|
|
216
|
+
const replaceLastLineFn = loggerConfig.replaceLastLineFn ?? replaceLastLine;
|
|
217
|
+
|
|
218
|
+
const contractsIdentifier = new ContractsIdentifier();
|
|
219
|
+
const vmTraceDecoder = new VmTraceDecoder(contractsIdentifier);
|
|
220
|
+
|
|
221
|
+
const provider = await Provider.withConfig(
|
|
222
|
+
getGlobalEdrContext(),
|
|
223
|
+
{
|
|
224
|
+
allowBlocksWithSameTimestamp:
|
|
225
|
+
config.allowBlocksWithSameTimestamp ?? false,
|
|
226
|
+
allowUnlimitedContractSize: config.allowUnlimitedContractSize,
|
|
227
|
+
bailOnCallFailure: config.throwOnCallFailures,
|
|
228
|
+
bailOnTransactionFailure: config.throwOnTransactionFailures,
|
|
229
|
+
blockGasLimit: BigInt(config.blockGasLimit),
|
|
230
|
+
chainId: BigInt(config.chainId),
|
|
231
|
+
chains: Array.from(config.chains, ([chainId, hardforkConfig]) => {
|
|
232
|
+
return {
|
|
233
|
+
chainId: BigInt(chainId),
|
|
234
|
+
hardforks: Array.from(
|
|
235
|
+
hardforkConfig.hardforkHistory,
|
|
236
|
+
([hardfork, blockNumber]) => {
|
|
237
|
+
return {
|
|
238
|
+
blockNumber: BigInt(blockNumber),
|
|
239
|
+
specId: ethereumsjsHardforkToEdrSpecId(
|
|
240
|
+
getHardforkName(hardfork)
|
|
241
|
+
),
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
),
|
|
245
|
+
};
|
|
246
|
+
}),
|
|
247
|
+
cacheDir: config.forkCachePath,
|
|
248
|
+
coinbase: Buffer.from(coinbase.slice(2), "hex"),
|
|
249
|
+
fork,
|
|
250
|
+
hardfork: ethereumsjsHardforkToEdrSpecId(
|
|
251
|
+
getHardforkName(config.hardfork)
|
|
252
|
+
),
|
|
253
|
+
genesisAccounts: config.genesisAccounts.map((account) => {
|
|
254
|
+
return {
|
|
255
|
+
secretKey: account.privateKey,
|
|
256
|
+
balance: BigInt(account.balance),
|
|
257
|
+
};
|
|
258
|
+
}),
|
|
259
|
+
initialDate,
|
|
260
|
+
initialBaseFeePerGas:
|
|
261
|
+
config.initialBaseFeePerGas !== undefined
|
|
262
|
+
? BigInt(config.initialBaseFeePerGas!)
|
|
263
|
+
: undefined,
|
|
264
|
+
minGasPrice: config.minGasPrice,
|
|
265
|
+
mining: {
|
|
266
|
+
autoMine: config.automine,
|
|
267
|
+
interval: ethereumjsIntervalMiningConfigToEdr(config.intervalMining),
|
|
268
|
+
memPool: {
|
|
269
|
+
order: ethereumjsMempoolOrderToEdrMineOrdering(config.mempoolOrder),
|
|
270
|
+
},
|
|
271
|
+
},
|
|
272
|
+
networkId: BigInt(config.networkId),
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
enable: loggerConfig.enabled,
|
|
276
|
+
decodeConsoleLogInputsCallback: (inputs: Buffer[]) => {
|
|
277
|
+
const consoleLogger = new ConsoleLogger();
|
|
278
|
+
return consoleLogger.getDecodedLogs(inputs);
|
|
279
|
+
},
|
|
280
|
+
getContractAndFunctionNameCallback: (
|
|
281
|
+
code: Buffer,
|
|
282
|
+
calldata?: Buffer
|
|
283
|
+
) => {
|
|
284
|
+
return vmTraceDecoder.getContractAndFunctionNamesForCall(
|
|
285
|
+
code,
|
|
286
|
+
calldata
|
|
287
|
+
);
|
|
288
|
+
},
|
|
289
|
+
printLineCallback: (message: string, replace: boolean) => {
|
|
290
|
+
if (replace) {
|
|
291
|
+
replaceLastLineFn(message);
|
|
292
|
+
} else {
|
|
293
|
+
printLineFn(message);
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
},
|
|
297
|
+
(event: SubscriptionEvent) => {
|
|
298
|
+
eventAdapter.emit("ethEvent", event);
|
|
132
299
|
}
|
|
300
|
+
);
|
|
133
301
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
private async _sendWithLogging(
|
|
141
|
-
method: string,
|
|
142
|
-
params: any[] = []
|
|
143
|
-
): Promise<any> {
|
|
144
|
-
try {
|
|
145
|
-
const result = await this._send(method, params);
|
|
146
|
-
// We log after running the method, because we want to use different
|
|
147
|
-
// colors depending on whether it failed or not
|
|
302
|
+
const minimalEthereumJsNode = {
|
|
303
|
+
_vm: getMinimalEthereumJsVm(provider),
|
|
304
|
+
};
|
|
148
305
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
306
|
+
const common = makeCommon(getNodeConfig(config));
|
|
307
|
+
const wrapper = new EdrProviderWrapper(
|
|
308
|
+
provider,
|
|
309
|
+
minimalEthereumJsNode,
|
|
310
|
+
eventAdapter,
|
|
311
|
+
vmTraceDecoder,
|
|
312
|
+
rawTraceCallbacks,
|
|
313
|
+
common,
|
|
314
|
+
tracingConfig
|
|
315
|
+
);
|
|
152
316
|
|
|
153
|
-
|
|
154
|
-
|
|
317
|
+
// Pass through all events from the provider
|
|
318
|
+
eventAdapter.addListener(
|
|
319
|
+
"ethEvent",
|
|
320
|
+
wrapper._ethEventListener.bind(wrapper)
|
|
321
|
+
);
|
|
155
322
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
this._logger.printEmptyLine();
|
|
159
|
-
}
|
|
160
|
-
}
|
|
323
|
+
return wrapper;
|
|
324
|
+
}
|
|
161
325
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
this._logger.printMethodNotSupported(method);
|
|
326
|
+
public async request(args: RequestArguments): Promise<unknown> {
|
|
327
|
+
if (args.params !== undefined && !Array.isArray(args.params)) {
|
|
328
|
+
throw new InvalidInputError(
|
|
329
|
+
"Hardhat Network doesn't support JSON-RPC params sent as an object"
|
|
330
|
+
);
|
|
331
|
+
}
|
|
169
332
|
|
|
170
|
-
|
|
171
|
-
}
|
|
333
|
+
const params = args.params ?? [];
|
|
172
334
|
|
|
173
|
-
|
|
174
|
-
this.
|
|
335
|
+
if (args.method === "hardhat_addCompilationResult") {
|
|
336
|
+
return this._addCompilationResultAction(
|
|
337
|
+
...this._addCompilationResultParams(params)
|
|
338
|
+
);
|
|
339
|
+
} else if (args.method === "hardhat_getStackTraceFailuresCount") {
|
|
340
|
+
return this._getStackTraceFailuresCountAction(
|
|
341
|
+
...this._getStackTraceFailuresCountParams(params)
|
|
342
|
+
);
|
|
343
|
+
}
|
|
175
344
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
345
|
+
const stringifiedArgs = JSON.stringify({
|
|
346
|
+
method: args.method,
|
|
347
|
+
params,
|
|
348
|
+
});
|
|
180
349
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
350
|
+
const responseObject: Response = await this._provider.handleRequest(
|
|
351
|
+
stringifiedArgs
|
|
352
|
+
);
|
|
353
|
+
const response = JSON.parse(responseObject.json);
|
|
354
|
+
|
|
355
|
+
const rawTraces = responseObject.traces;
|
|
356
|
+
for (const rawTrace of rawTraces) {
|
|
357
|
+
const trace = rawTrace.trace();
|
|
358
|
+
for (const traceItem of trace) {
|
|
359
|
+
if ("pc" in traceItem) {
|
|
360
|
+
this._node._vm.evm.events.emit(
|
|
361
|
+
"step",
|
|
362
|
+
edrTracingStepToMinimalInterpreterStep(traceItem)
|
|
363
|
+
);
|
|
364
|
+
if (this._rawTraceCallbacks.onStep !== undefined) {
|
|
365
|
+
await this._rawTraceCallbacks.onStep(traceItem);
|
|
366
|
+
}
|
|
367
|
+
} else if ("executionResult" in traceItem) {
|
|
368
|
+
this._node._vm.evm.events.emit(
|
|
369
|
+
"afterMessage",
|
|
370
|
+
edrTracingMessageResultToMinimalEVMResult(traceItem)
|
|
371
|
+
);
|
|
372
|
+
if (this._rawTraceCallbacks.onAfterMessage !== undefined) {
|
|
373
|
+
await this._rawTraceCallbacks.onAfterMessage(
|
|
374
|
+
traceItem.executionResult
|
|
375
|
+
);
|
|
185
376
|
}
|
|
186
377
|
} else {
|
|
187
|
-
this.
|
|
378
|
+
this._node._vm.evm.events.emit(
|
|
379
|
+
"beforeMessage",
|
|
380
|
+
edrTracingMessageToMinimalMessage(traceItem)
|
|
381
|
+
);
|
|
382
|
+
if (this._rawTraceCallbacks.onBeforeMessage !== undefined) {
|
|
383
|
+
await this._rawTraceCallbacks.onBeforeMessage(traceItem);
|
|
384
|
+
}
|
|
188
385
|
}
|
|
189
386
|
}
|
|
190
|
-
|
|
191
|
-
this._logger.printEmptyLine();
|
|
192
|
-
|
|
193
|
-
throw err;
|
|
194
387
|
}
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
private async _send(method: string, params: any[] = []): Promise<any> {
|
|
198
|
-
await this._init();
|
|
199
388
|
|
|
200
|
-
if (
|
|
201
|
-
|
|
202
|
-
}
|
|
389
|
+
if (isErrorResponse(response)) {
|
|
390
|
+
let error;
|
|
203
391
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
392
|
+
const solidityTrace = responseObject.solidityTrace;
|
|
393
|
+
let stackTrace: SolidityStackTrace | undefined;
|
|
394
|
+
if (solidityTrace !== null) {
|
|
395
|
+
stackTrace = await this._rawTraceToSolidityStackTrace(solidityTrace);
|
|
396
|
+
}
|
|
207
397
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
398
|
+
if (stackTrace !== undefined) {
|
|
399
|
+
error = encodeSolidityStackTrace(response.error.message, stackTrace);
|
|
400
|
+
// Pass data and transaction hash from the original error
|
|
401
|
+
(error as any).data = {
|
|
402
|
+
data: response.error.data?.data ?? undefined,
|
|
403
|
+
transactionHash: response.error.data?.transactionHash ?? undefined,
|
|
404
|
+
};
|
|
405
|
+
} else {
|
|
406
|
+
if (response.error.code === InvalidArgumentsError.CODE) {
|
|
407
|
+
error = new InvalidArgumentsError(response.error.message);
|
|
408
|
+
} else {
|
|
409
|
+
error = new ProviderError(
|
|
410
|
+
response.error.message,
|
|
411
|
+
response.error.code
|
|
412
|
+
);
|
|
413
|
+
}
|
|
414
|
+
error.data = response.error.data;
|
|
415
|
+
}
|
|
211
416
|
|
|
212
|
-
|
|
213
|
-
|
|
417
|
+
// eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error
|
|
418
|
+
throw error;
|
|
214
419
|
}
|
|
215
420
|
|
|
216
|
-
if (method
|
|
217
|
-
|
|
421
|
+
if (args.method === "hardhat_reset") {
|
|
422
|
+
this.emit(HARDHAT_NETWORK_RESET_EVENT);
|
|
423
|
+
} else if (args.method === "evm_revert") {
|
|
424
|
+
this.emit(HARDHAT_NETWORK_REVERT_SNAPSHOT_EVENT);
|
|
218
425
|
}
|
|
219
426
|
|
|
220
|
-
|
|
221
|
-
|
|
427
|
+
// Override EDR version string with Hardhat version string with EDR backend,
|
|
428
|
+
// e.g. `HardhatNetwork/2.19.0/@nomicfoundation/edr/0.2.0-dev`
|
|
429
|
+
if (args.method === "web3_clientVersion") {
|
|
430
|
+
return clientVersion(response.result);
|
|
431
|
+
} else if (
|
|
432
|
+
args.method === "debug_traceTransaction" ||
|
|
433
|
+
args.method === "debug_traceCall"
|
|
434
|
+
) {
|
|
435
|
+
return edrRpcDebugTraceToHardhat(response.result);
|
|
436
|
+
} else {
|
|
437
|
+
return response.result;
|
|
222
438
|
}
|
|
439
|
+
}
|
|
223
440
|
|
|
224
|
-
|
|
225
|
-
|
|
441
|
+
private _ethEventListener(event: SubscriptionEvent) {
|
|
442
|
+
const subscription = `0x${event.filterId.toString(16)}`;
|
|
443
|
+
const results = Array.isArray(event.result) ? event.result : [event.result];
|
|
444
|
+
for (const result of results) {
|
|
445
|
+
this._emitLegacySubscriptionEvent(subscription, result);
|
|
446
|
+
this._emitEip1193SubscriptionEvent(subscription, result);
|
|
226
447
|
}
|
|
227
|
-
|
|
228
|
-
throw new MethodNotFoundError(`Method ${method} not found`);
|
|
229
448
|
}
|
|
230
449
|
|
|
231
|
-
private
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
450
|
+
private _emitLegacySubscriptionEvent(subscription: string, result: any) {
|
|
451
|
+
this.emit("notification", {
|
|
452
|
+
subscription,
|
|
453
|
+
result,
|
|
454
|
+
});
|
|
455
|
+
}
|
|
235
456
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
initialBaseFeePerGas: this._config.initialBaseFeePerGas,
|
|
244
|
-
mempoolOrder: this._config.mempoolOrder,
|
|
245
|
-
hardfork: this._config.hardfork,
|
|
246
|
-
chainId: this._config.chainId,
|
|
247
|
-
networkId: this._config.networkId,
|
|
248
|
-
initialDate: this._config.initialDate,
|
|
249
|
-
forkConfig: this._config.forkConfig,
|
|
250
|
-
forkCachePath:
|
|
251
|
-
this._config.forkConfig !== undefined
|
|
252
|
-
? this._config.forkCachePath
|
|
253
|
-
: undefined,
|
|
254
|
-
coinbase: this._config.coinbase ?? DEFAULT_COINBASE,
|
|
255
|
-
chains: this._config.chains,
|
|
256
|
-
allowBlocksWithSameTimestamp: this._config.allowBlocksWithSameTimestamp,
|
|
257
|
-
enableTransientStorage: this._config.enableTransientStorage,
|
|
457
|
+
private _emitEip1193SubscriptionEvent(subscription: string, result: unknown) {
|
|
458
|
+
const message: EthSubscription = {
|
|
459
|
+
type: "eth_subscription",
|
|
460
|
+
data: {
|
|
461
|
+
subscription,
|
|
462
|
+
result,
|
|
463
|
+
},
|
|
258
464
|
};
|
|
259
465
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
this._common = common;
|
|
263
|
-
this._node = node;
|
|
466
|
+
this.emit("message", message);
|
|
467
|
+
}
|
|
264
468
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
469
|
+
private _addCompilationResultParams(
|
|
470
|
+
params: any[]
|
|
471
|
+
): [string, CompilerInput, CompilerOutput] {
|
|
472
|
+
return validateParams(
|
|
473
|
+
params,
|
|
474
|
+
t.string,
|
|
475
|
+
rpcCompilerInput,
|
|
476
|
+
rpcCompilerOutput
|
|
272
477
|
);
|
|
478
|
+
}
|
|
273
479
|
|
|
274
|
-
|
|
480
|
+
private async _addCompilationResultAction(
|
|
481
|
+
solcVersion: string,
|
|
482
|
+
compilerInput: CompilerInput,
|
|
483
|
+
compilerOutput: CompilerOutput
|
|
484
|
+
): Promise<boolean> {
|
|
485
|
+
let bytecodes;
|
|
486
|
+
try {
|
|
487
|
+
bytecodes = createModelsAndDecodeBytecodes(
|
|
488
|
+
solcVersion,
|
|
489
|
+
compilerInput,
|
|
490
|
+
compilerOutput
|
|
491
|
+
);
|
|
492
|
+
} catch (error) {
|
|
493
|
+
console.warn(
|
|
494
|
+
chalk.yellow(
|
|
495
|
+
"The Hardhat Network tracing engine could not be updated. Run Hardhat with --verbose to learn more."
|
|
496
|
+
)
|
|
497
|
+
);
|
|
275
498
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
miningTimer,
|
|
281
|
-
this._logger,
|
|
282
|
-
this._config.allowBlocksWithSameTimestamp,
|
|
283
|
-
this._config.experimentalHardhatNetworkMessageTraceHooks
|
|
284
|
-
);
|
|
285
|
-
this._hardhatModule = new HardhatModule(
|
|
286
|
-
node,
|
|
287
|
-
(forkConfig?: ForkConfig) => this._reset(miningTimer, forkConfig),
|
|
288
|
-
(loggingEnabled: boolean) => {
|
|
289
|
-
this._logger.setEnabled(loggingEnabled);
|
|
290
|
-
},
|
|
291
|
-
this._logger,
|
|
292
|
-
this._config.experimentalHardhatNetworkMessageTraceHooks
|
|
293
|
-
);
|
|
294
|
-
this._debugModule = new DebugModule(node);
|
|
295
|
-
this._personalModule = new PersonalModule(node);
|
|
499
|
+
log(
|
|
500
|
+
"ContractsIdentifier failed to be updated. Please report this to help us improve Hardhat.\n",
|
|
501
|
+
error
|
|
502
|
+
);
|
|
296
503
|
|
|
297
|
-
|
|
298
|
-
|
|
504
|
+
return false;
|
|
505
|
+
}
|
|
299
506
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
507
|
+
for (const bytecode of bytecodes) {
|
|
508
|
+
this._vmTraceDecoder.addBytecode(bytecode);
|
|
509
|
+
}
|
|
303
510
|
|
|
304
|
-
|
|
511
|
+
return true;
|
|
512
|
+
}
|
|
305
513
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
if (semver.gte(buildInfo.solcVersion, FIRST_SOLC_VERSION_SUPPORTED)) {
|
|
310
|
-
buildInfos.push(buildInfo);
|
|
311
|
-
}
|
|
312
|
-
}
|
|
514
|
+
private _getStackTraceFailuresCountParams(params: any[]): [] {
|
|
515
|
+
return validateParams(params);
|
|
516
|
+
}
|
|
313
517
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
};
|
|
317
|
-
} catch (error) {
|
|
318
|
-
console.warn(
|
|
319
|
-
chalk.yellow(
|
|
320
|
-
"Stack traces engine could not be initialized. Run Hardhat with --verbose to learn more."
|
|
321
|
-
)
|
|
322
|
-
);
|
|
323
|
-
|
|
324
|
-
log(
|
|
325
|
-
"Solidity stack traces disabled: Failed to read solc's input and output files. Please report this to help us improve Hardhat.\n",
|
|
326
|
-
error
|
|
327
|
-
);
|
|
328
|
-
}
|
|
329
|
-
}
|
|
518
|
+
private _getStackTraceFailuresCountAction(): number {
|
|
519
|
+
return this._failedStackTraces;
|
|
330
520
|
}
|
|
331
521
|
|
|
332
|
-
private
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
522
|
+
private async _rawTraceToSolidityStackTrace(
|
|
523
|
+
rawTrace: RawTrace
|
|
524
|
+
): Promise<SolidityStackTrace | undefined> {
|
|
525
|
+
const vmTracer = new VMTracer(false);
|
|
526
|
+
|
|
527
|
+
const trace = rawTrace.trace();
|
|
528
|
+
for (const traceItem of trace) {
|
|
529
|
+
if ("pc" in traceItem) {
|
|
530
|
+
await vmTracer.addStep(traceItem);
|
|
531
|
+
} else if ("executionResult" in traceItem) {
|
|
532
|
+
await vmTracer.addAfterMessage(traceItem.executionResult);
|
|
533
|
+
} else {
|
|
534
|
+
await vmTracer.addBeforeMessage(traceItem);
|
|
341
535
|
}
|
|
342
|
-
|
|
536
|
+
}
|
|
343
537
|
|
|
344
|
-
|
|
538
|
+
let vmTrace = vmTracer.getLastTopLevelMessageTrace();
|
|
539
|
+
const vmTracerError = vmTracer.getLastError();
|
|
345
540
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
private async _reset(miningTimer: MiningTimer, forkConfig?: ForkConfig) {
|
|
350
|
-
this._config.forkConfig = forkConfig;
|
|
351
|
-
if (this._node !== undefined) {
|
|
352
|
-
this._stopForwardingNodeEvents(this._node);
|
|
541
|
+
if (vmTrace !== undefined) {
|
|
542
|
+
vmTrace = this._vmTraceDecoder.tryToDecodeMessageTrace(vmTrace);
|
|
353
543
|
}
|
|
354
|
-
this._node = undefined;
|
|
355
544
|
|
|
356
|
-
|
|
545
|
+
try {
|
|
546
|
+
if (vmTrace === undefined || vmTracerError !== undefined) {
|
|
547
|
+
throw vmTracerError;
|
|
548
|
+
}
|
|
357
549
|
|
|
358
|
-
|
|
550
|
+
const solidityTracer = new SolidityTracer();
|
|
551
|
+
return solidityTracer.getStackTrace(vmTrace);
|
|
552
|
+
} catch (err) {
|
|
553
|
+
this._failedStackTraces += 1;
|
|
554
|
+
log(
|
|
555
|
+
"Could not generate stack trace. Please report this to help us improve Hardhat.\n",
|
|
556
|
+
err
|
|
557
|
+
);
|
|
558
|
+
}
|
|
359
559
|
}
|
|
560
|
+
}
|
|
360
561
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
562
|
+
async function clientVersion(edrClientVersion: string): Promise<string> {
|
|
563
|
+
const hardhatPackage = await getPackageJson();
|
|
564
|
+
const edrVersion = edrClientVersion.split("/")[1];
|
|
565
|
+
return `HardhatNetwork/${hardhatPackage.version}/@nomicfoundation/edr/${edrVersion}`;
|
|
566
|
+
}
|
|
364
567
|
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
568
|
+
export async function createHardhatNetworkProvider(
|
|
569
|
+
hardhatNetworkProviderConfig: HardhatNetworkProviderConfig,
|
|
570
|
+
loggerConfig: LoggerConfig,
|
|
571
|
+
artifacts?: Artifacts
|
|
572
|
+
): Promise<EIP1193Provider> {
|
|
573
|
+
return EdrProviderWrapper.create(
|
|
574
|
+
hardhatNetworkProviderConfig,
|
|
575
|
+
loggerConfig,
|
|
576
|
+
{},
|
|
577
|
+
await makeTracingConfig(artifacts)
|
|
578
|
+
);
|
|
579
|
+
}
|
|
368
580
|
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
};
|
|
581
|
+
async function makeTracingConfig(
|
|
582
|
+
artifacts: Artifacts | undefined
|
|
583
|
+
): Promise<TracingConfig | undefined> {
|
|
584
|
+
if (artifacts !== undefined) {
|
|
585
|
+
const buildInfos = [];
|
|
375
586
|
|
|
376
|
-
|
|
377
|
-
this.emit("notification", {
|
|
378
|
-
subscription,
|
|
379
|
-
result,
|
|
380
|
-
});
|
|
381
|
-
}
|
|
587
|
+
const buildInfoFiles = await artifacts.getBuildInfoPaths();
|
|
382
588
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
}
|
|
390
|
-
};
|
|
589
|
+
try {
|
|
590
|
+
for (const buildInfoFile of buildInfoFiles) {
|
|
591
|
+
const buildInfo = await fsExtra.readJson(buildInfoFile);
|
|
592
|
+
if (semver.gte(buildInfo.solcVersion, FIRST_SOLC_VERSION_SUPPORTED)) {
|
|
593
|
+
buildInfos.push(buildInfo);
|
|
594
|
+
}
|
|
595
|
+
}
|
|
391
596
|
|
|
392
|
-
|
|
597
|
+
return {
|
|
598
|
+
buildInfos,
|
|
599
|
+
};
|
|
600
|
+
} catch (error) {
|
|
601
|
+
console.warn(
|
|
602
|
+
chalk.yellow(
|
|
603
|
+
"Stack traces engine could not be initialized. Run Hardhat with --verbose to learn more."
|
|
604
|
+
)
|
|
605
|
+
);
|
|
606
|
+
|
|
607
|
+
log(
|
|
608
|
+
"Solidity stack traces disabled: Failed to read solc's input and output files. Please report this to help us improve Hardhat.\n",
|
|
609
|
+
error
|
|
610
|
+
);
|
|
611
|
+
}
|
|
393
612
|
}
|
|
394
613
|
}
|