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
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { Common } from "@nomicfoundation/ethereumjs-common";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
LegacyTransaction,
|
|
4
|
+
LegacyTxData,
|
|
5
|
+
TxOptions,
|
|
6
|
+
} from "@nomicfoundation/ethereumjs-tx";
|
|
3
7
|
import { Address } from "@nomicfoundation/ethereumjs-util";
|
|
4
8
|
|
|
5
9
|
import { InternalError } from "../../../core/providers/errors";
|
|
@@ -20,15 +24,15 @@ import { InternalError } from "../../../core/providers/errors";
|
|
|
20
24
|
* This class doesn't use its Common instance, so there's no need to provide
|
|
21
25
|
* one.
|
|
22
26
|
*/
|
|
23
|
-
export class ReadOnlyValidTransaction extends
|
|
24
|
-
public static fromTxData(_txData:
|
|
27
|
+
export class ReadOnlyValidTransaction extends LegacyTransaction {
|
|
28
|
+
public static fromTxData(_txData: LegacyTxData, _opts?: TxOptions): never {
|
|
25
29
|
throw new InternalError(
|
|
26
30
|
"`fromTxData` is not implemented in ReadOnlyValidTransaction"
|
|
27
31
|
);
|
|
28
32
|
}
|
|
29
33
|
|
|
30
34
|
public static fromSerializedTx(
|
|
31
|
-
_serialized:
|
|
35
|
+
_serialized: Uint8Array,
|
|
32
36
|
_opts?: TxOptions
|
|
33
37
|
): never {
|
|
34
38
|
throw new InternalError(
|
|
@@ -37,7 +41,7 @@ export class ReadOnlyValidTransaction extends Transaction {
|
|
|
37
41
|
}
|
|
38
42
|
|
|
39
43
|
public static fromRlpSerializedTx(
|
|
40
|
-
_serialized:
|
|
44
|
+
_serialized: Uint8Array,
|
|
41
45
|
_opts?: TxOptions
|
|
42
46
|
): never {
|
|
43
47
|
throw new InternalError(
|
|
@@ -45,7 +49,10 @@ export class ReadOnlyValidTransaction extends Transaction {
|
|
|
45
49
|
);
|
|
46
50
|
}
|
|
47
51
|
|
|
48
|
-
public static fromValuesArray(
|
|
52
|
+
public static fromValuesArray(
|
|
53
|
+
_values: Uint8Array[],
|
|
54
|
+
_opts?: TxOptions
|
|
55
|
+
): never {
|
|
49
56
|
throw new InternalError(
|
|
50
57
|
"`fromRlpSerializedTx` is not implemented in ReadOnlyValidTransaction"
|
|
51
58
|
);
|
|
@@ -55,8 +62,8 @@ export class ReadOnlyValidTransaction extends Transaction {
|
|
|
55
62
|
|
|
56
63
|
private readonly _sender: Address;
|
|
57
64
|
|
|
58
|
-
constructor(sender: Address, data:
|
|
59
|
-
super(data, { freeze: false,
|
|
65
|
+
constructor(sender: Address, data: LegacyTxData = {}) {
|
|
66
|
+
super(data, { freeze: false, allowUnlimitedInitCodeSize: true });
|
|
60
67
|
|
|
61
68
|
this.common = this._getCommon();
|
|
62
69
|
this._sender = sender;
|
package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { Common } from "@nomicfoundation/ethereumjs-common";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
LegacyTransaction,
|
|
4
|
+
LegacyTxData,
|
|
5
|
+
TxOptions,
|
|
6
|
+
} from "@nomicfoundation/ethereumjs-tx";
|
|
3
7
|
import { Address } from "@nomicfoundation/ethereumjs-util";
|
|
4
8
|
|
|
5
9
|
import { InternalError } from "../../../core/providers/errors";
|
|
@@ -10,15 +14,15 @@ import { InternalError } from "../../../core/providers/errors";
|
|
|
10
14
|
* This class is like `ReadOnlyValidTransaction` but for
|
|
11
15
|
* a transaction with an unknown tx type.
|
|
12
16
|
*/
|
|
13
|
-
export class ReadOnlyValidUnknownTypeTransaction extends
|
|
14
|
-
public static fromTxData(_txData:
|
|
17
|
+
export class ReadOnlyValidUnknownTypeTransaction extends LegacyTransaction {
|
|
18
|
+
public static fromTxData(_txData: LegacyTxData, _opts?: TxOptions): never {
|
|
15
19
|
throw new InternalError(
|
|
16
20
|
"`fromTxData` is not implemented in ReadOnlyValidUnknownTypeTransaction"
|
|
17
21
|
);
|
|
18
22
|
}
|
|
19
23
|
|
|
20
24
|
public static fromSerializedTx(
|
|
21
|
-
_serialized:
|
|
25
|
+
_serialized: Uint8Array,
|
|
22
26
|
_opts?: TxOptions
|
|
23
27
|
): never {
|
|
24
28
|
throw new InternalError(
|
|
@@ -27,7 +31,7 @@ export class ReadOnlyValidUnknownTypeTransaction extends Transaction {
|
|
|
27
31
|
}
|
|
28
32
|
|
|
29
33
|
public static fromRlpSerializedTx(
|
|
30
|
-
_serialized:
|
|
34
|
+
_serialized: Uint8Array,
|
|
31
35
|
_opts?: TxOptions
|
|
32
36
|
): never {
|
|
33
37
|
throw new InternalError(
|
|
@@ -35,7 +39,10 @@ export class ReadOnlyValidUnknownTypeTransaction extends Transaction {
|
|
|
35
39
|
);
|
|
36
40
|
}
|
|
37
41
|
|
|
38
|
-
public static fromValuesArray(
|
|
42
|
+
public static fromValuesArray(
|
|
43
|
+
_values: Uint8Array[],
|
|
44
|
+
_opts?: TxOptions
|
|
45
|
+
): never {
|
|
39
46
|
throw new InternalError(
|
|
40
47
|
"`fromRlpSerializedTx` is not implemented in ReadOnlyValidUnknownTypeTransaction"
|
|
41
48
|
);
|
|
@@ -46,8 +53,8 @@ export class ReadOnlyValidUnknownTypeTransaction extends Transaction {
|
|
|
46
53
|
private readonly _sender: Address;
|
|
47
54
|
private readonly _actualType: number;
|
|
48
55
|
|
|
49
|
-
constructor(sender: Address, type: number, data:
|
|
50
|
-
super(data, { freeze: false,
|
|
56
|
+
constructor(sender: Address, type: number, data: LegacyTxData = {}) {
|
|
57
|
+
super(data, { freeze: false, allowUnlimitedInitCodeSize: true });
|
|
51
58
|
|
|
52
59
|
this.common = this._getCommon();
|
|
53
60
|
this._sender = sender;
|
|
@@ -9,17 +9,17 @@ export interface HardhatBlockchainInterface extends BlockchainInterface {
|
|
|
9
9
|
reserveBlocks(
|
|
10
10
|
count: bigint,
|
|
11
11
|
interval: bigint,
|
|
12
|
-
previousBlockStateRoot:
|
|
12
|
+
previousBlockStateRoot: Uint8Array,
|
|
13
13
|
previousBlockTotalDifficulty: bigint,
|
|
14
14
|
previousBlockBaseFeePerGas: bigint | undefined
|
|
15
15
|
): void;
|
|
16
16
|
deleteLaterBlocks(block: Block): void;
|
|
17
|
-
getBlockByTransactionHash(transactionHash:
|
|
17
|
+
getBlockByTransactionHash(transactionHash: Uint8Array): Promise<Block | null>;
|
|
18
18
|
getLatestBlock(): Promise<Block>;
|
|
19
19
|
getLatestBlockNumber(): bigint;
|
|
20
20
|
getLogs(filterParams: FilterParams): Promise<RpcLogOutput[]>;
|
|
21
|
-
getTotalDifficulty(blockHash:
|
|
21
|
+
getTotalDifficulty(blockHash: Uint8Array): Promise<bigint>;
|
|
22
22
|
getTransactionReceipt(
|
|
23
|
-
transactionHash:
|
|
23
|
+
transactionHash: Uint8Array
|
|
24
24
|
): Promise<RpcReceiptOutput | null>;
|
|
25
25
|
}
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
Account,
|
|
3
3
|
Address,
|
|
4
4
|
privateToAddress,
|
|
5
|
-
|
|
5
|
+
toBytes,
|
|
6
6
|
} from "@nomicfoundation/ethereumjs-util";
|
|
7
7
|
|
|
8
8
|
import { GenesisAccount } from "../node-types";
|
|
@@ -19,7 +19,7 @@ export function makeAccount(ga: GenesisAccount) {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
const account = Account.fromAccountData({ balance });
|
|
22
|
-
const pk =
|
|
22
|
+
const pk = toBytes(ga.privateKey);
|
|
23
23
|
const address = new Address(privateToAddress(pk));
|
|
24
24
|
return { account, address };
|
|
25
25
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Common } from "@nomicfoundation/ethereumjs-common";
|
|
2
2
|
|
|
3
3
|
import { LocalNodeConfig } from "../node-types";
|
|
4
|
+
import { HardforkName } from "../../../util/hardforks";
|
|
5
|
+
import { assertTransientStorageCompatibility } from "../node";
|
|
4
6
|
|
|
5
7
|
export function makeCommon({
|
|
6
8
|
chainId,
|
|
@@ -8,7 +10,10 @@ export function makeCommon({
|
|
|
8
10
|
hardfork,
|
|
9
11
|
enableTransientStorage,
|
|
10
12
|
}: LocalNodeConfig) {
|
|
11
|
-
|
|
13
|
+
assertTransientStorageCompatibility(
|
|
14
|
+
enableTransientStorage,
|
|
15
|
+
hardfork as HardforkName
|
|
16
|
+
);
|
|
12
17
|
|
|
13
18
|
const common = Common.custom(
|
|
14
19
|
{
|
|
@@ -16,8 +21,9 @@ export function makeCommon({
|
|
|
16
21
|
networkId,
|
|
17
22
|
},
|
|
18
23
|
{
|
|
19
|
-
hardfork
|
|
20
|
-
|
|
24
|
+
// ethereumjs uses this name for the merge hardfork
|
|
25
|
+
hardfork:
|
|
26
|
+
hardfork === HardforkName.MERGE ? "mergeForkIdTransition" : hardfork,
|
|
21
27
|
}
|
|
22
28
|
);
|
|
23
29
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
AccessListEIP2930TxData,
|
|
3
|
+
FeeMarketEIP1559TxData,
|
|
4
|
+
LegacyTxData,
|
|
5
5
|
} from "@nomicfoundation/ethereumjs-tx";
|
|
6
6
|
import { Address } from "@nomicfoundation/ethereumjs-util";
|
|
7
7
|
|
|
@@ -9,7 +9,7 @@ import { createNonCryptographicHashBasedIdentifier } from "../../../util/hash";
|
|
|
9
9
|
|
|
10
10
|
// Produces a signature with r and s values taken from a hash of the inputs.
|
|
11
11
|
export function makeFakeSignature(
|
|
12
|
-
tx:
|
|
12
|
+
tx: LegacyTxData | AccessListEIP2930TxData | FeeMarketEIP1559TxData,
|
|
13
13
|
sender: Address
|
|
14
14
|
): {
|
|
15
15
|
r: number;
|
|
@@ -27,9 +27,23 @@ export function makeFakeSignature(
|
|
|
27
27
|
"maxPriorityFeePerGas" in tx ? tx.maxPriorityFeePerGas : "",
|
|
28
28
|
"maxFeePerGas" in tx ? tx.maxFeePerGas : "",
|
|
29
29
|
"accessList" in tx
|
|
30
|
-
? tx.accessList?.map((
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
? tx.accessList?.map((accessListItem) => {
|
|
31
|
+
let address: string;
|
|
32
|
+
let storageKeys: string[];
|
|
33
|
+
if (Array.isArray(accessListItem)) {
|
|
34
|
+
address = Buffer.from(accessListItem[0]).toString("hex");
|
|
35
|
+
storageKeys = accessListItem[1].map((b) =>
|
|
36
|
+
Buffer.from(b).toString("hex")
|
|
37
|
+
);
|
|
38
|
+
} else {
|
|
39
|
+
address = accessListItem.address;
|
|
40
|
+
storageKeys = accessListItem.storageKeys;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return [address, ...storageKeys]
|
|
44
|
+
.map((b) => Buffer.from(b).toString("hex"))
|
|
45
|
+
.join(";");
|
|
46
|
+
})
|
|
33
47
|
: "",
|
|
34
48
|
]
|
|
35
49
|
.map((a) => a?.toString() ?? "")
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Trie } from "@nomicfoundation/ethereumjs-trie";
|
|
2
2
|
import {
|
|
3
3
|
Account,
|
|
4
|
-
|
|
4
|
+
intToBytes,
|
|
5
5
|
setLengthLeft,
|
|
6
6
|
} from "@nomicfoundation/ethereumjs-util";
|
|
7
7
|
|
|
@@ -14,13 +14,13 @@ export async function makeStateTrie(genesisAccounts: GenesisAccount[]) {
|
|
|
14
14
|
|
|
15
15
|
for (const acc of genesisAccounts) {
|
|
16
16
|
const { address, account } = makeAccount(acc);
|
|
17
|
-
await stateTrie.put(address.
|
|
17
|
+
await stateTrie.put(address.toBytes(), account.serialize());
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
// Mimic precompiles activation
|
|
21
21
|
for (let i = 1; i <= 8; i++) {
|
|
22
22
|
await stateTrie.put(
|
|
23
|
-
setLengthLeft(
|
|
23
|
+
setLengthLeft(intToBytes(i), 20),
|
|
24
24
|
new Account().serialize()
|
|
25
25
|
);
|
|
26
26
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Block, HeaderData } from "@nomicfoundation/ethereumjs-block";
|
|
2
2
|
import { Common } from "@nomicfoundation/ethereumjs-common";
|
|
3
|
-
import {
|
|
4
|
-
import { bufferToHex } from "@nomicfoundation/ethereumjs-util";
|
|
3
|
+
import { bytesToHex as bufferToHex } from "@nomicfoundation/ethereumjs-util";
|
|
5
4
|
|
|
6
5
|
import { dateToTimestampSeconds } from "../../../util/date";
|
|
7
6
|
import { hardforkGte, HardforkName } from "../../../util/hardforks";
|
|
@@ -13,9 +12,10 @@ export async function putGenesisBlock(
|
|
|
13
12
|
blockchain: HardhatBlockchain,
|
|
14
13
|
common: Common,
|
|
15
14
|
{ initialDate, blockGasLimit: initialBlockGasLimit }: LocalNodeConfig,
|
|
16
|
-
|
|
15
|
+
stateRoot: Uint8Array,
|
|
17
16
|
hardfork: HardforkName,
|
|
18
|
-
initialMixHash:
|
|
17
|
+
initialMixHash: Uint8Array,
|
|
18
|
+
initialParentBeaconBlockRoot: Uint8Array,
|
|
19
19
|
initialBaseFee?: bigint
|
|
20
20
|
) {
|
|
21
21
|
const initialBlockTimestamp =
|
|
@@ -24,6 +24,7 @@ export async function putGenesisBlock(
|
|
|
24
24
|
: getCurrentTimestamp();
|
|
25
25
|
|
|
26
26
|
const isPostMerge = hardforkGte(hardfork, HardforkName.MERGE);
|
|
27
|
+
const isPostCancun = hardforkGte(hardfork, HardforkName.CANCUN);
|
|
27
28
|
|
|
28
29
|
const header: HeaderData = {
|
|
29
30
|
timestamp: `0x${initialBlockTimestamp.toString(16)}`,
|
|
@@ -31,13 +32,17 @@ export async function putGenesisBlock(
|
|
|
31
32
|
difficulty: isPostMerge ? 0 : 1,
|
|
32
33
|
nonce: isPostMerge ? "0x0000000000000000" : "0x0000000000000042",
|
|
33
34
|
extraData: "0x1234",
|
|
34
|
-
stateRoot: bufferToHex(
|
|
35
|
+
stateRoot: bufferToHex(stateRoot),
|
|
35
36
|
};
|
|
36
37
|
|
|
37
38
|
if (isPostMerge) {
|
|
38
39
|
header.mixHash = initialMixHash;
|
|
39
40
|
}
|
|
40
41
|
|
|
42
|
+
if (isPostCancun) {
|
|
43
|
+
header.parentBeaconBlockRoot = initialParentBeaconBlockRoot;
|
|
44
|
+
}
|
|
45
|
+
|
|
41
46
|
if (initialBaseFee !== undefined) {
|
|
42
47
|
header.baseFeePerGas = initialBaseFee;
|
|
43
48
|
}
|
|
@@ -2,7 +2,7 @@ import type EthereumjsUtilT from "@nomicfoundation/ethereumjs-util";
|
|
|
2
2
|
import type * as UtilKeccakT from "../../../util/keccak";
|
|
3
3
|
|
|
4
4
|
export class RandomBufferGenerator {
|
|
5
|
-
private constructor(private _nextValue:
|
|
5
|
+
private constructor(private _nextValue: Uint8Array) {}
|
|
6
6
|
|
|
7
7
|
public static create(seed: string): RandomBufferGenerator {
|
|
8
8
|
const { keccak256 } = require("../../../util/keccak") as typeof UtilKeccakT;
|
|
@@ -12,7 +12,7 @@ export class RandomBufferGenerator {
|
|
|
12
12
|
return new RandomBufferGenerator(nextValue);
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
public next():
|
|
15
|
+
public next(): Uint8Array {
|
|
16
16
|
const { keccak256 } = require("../../../util/keccak") as typeof UtilKeccakT;
|
|
17
17
|
|
|
18
18
|
const valueToReturn = this._nextValue;
|
|
@@ -32,13 +32,13 @@ export class RandomBufferGenerator {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
export const randomHash = () => {
|
|
35
|
-
const { bufferToHex } =
|
|
35
|
+
const { bytesToHex: bufferToHex } =
|
|
36
36
|
require("@nomicfoundation/ethereumjs-util") as typeof EthereumjsUtilT;
|
|
37
37
|
return bufferToHex(randomHashBuffer());
|
|
38
38
|
};
|
|
39
39
|
|
|
40
40
|
const generator = RandomBufferGenerator.create("seed");
|
|
41
|
-
export const randomHashBuffer = ():
|
|
41
|
+
export const randomHashBuffer = (): Uint8Array => {
|
|
42
42
|
return generator.next();
|
|
43
43
|
};
|
|
44
44
|
|
|
@@ -49,7 +49,7 @@ export const randomAddress = () => {
|
|
|
49
49
|
};
|
|
50
50
|
|
|
51
51
|
export const randomAddressString = () => {
|
|
52
|
-
const { bufferToHex } =
|
|
52
|
+
const { bytesToHex: bufferToHex } =
|
|
53
53
|
require("@nomicfoundation/ethereumjs-util") as typeof EthereumjsUtilT;
|
|
54
54
|
return bufferToHex(randomAddressBuffer());
|
|
55
55
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
bufferToHex,
|
|
4
|
-
|
|
2
|
+
bytesToBigInt,
|
|
3
|
+
bytesToHex as bufferToHex,
|
|
4
|
+
bytesToInt,
|
|
5
5
|
fromSigned,
|
|
6
6
|
} from "@nomicfoundation/ethereumjs-util";
|
|
7
7
|
import util from "util";
|
|
@@ -126,7 +126,7 @@ export class ConsoleLogger {
|
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
private _maybeConsoleLog(call: CallMessageTrace): ConsoleLogs | undefined {
|
|
129
|
-
const sig =
|
|
129
|
+
const sig = bytesToInt(call.calldata.slice(0, 4));
|
|
130
130
|
const parameters = call.calldata.slice(4);
|
|
131
131
|
|
|
132
132
|
const types = this._consoleLogs[sig];
|
|
@@ -162,12 +162,12 @@ export class ConsoleLogger {
|
|
|
162
162
|
}
|
|
163
163
|
}
|
|
164
164
|
|
|
165
|
-
private _decode(data:
|
|
165
|
+
private _decode(data: Uint8Array, types: string[]): ConsoleLogs {
|
|
166
166
|
return types.map((type, i) => {
|
|
167
167
|
const position: number = i * 32;
|
|
168
168
|
switch (types[i]) {
|
|
169
169
|
case Uint256Ty:
|
|
170
|
-
return
|
|
170
|
+
return bytesToBigInt(
|
|
171
171
|
data.slice(position, position + REGISTER_SIZE)
|
|
172
172
|
).toString(10);
|
|
173
173
|
|
|
@@ -183,13 +183,13 @@ export class ConsoleLogger {
|
|
|
183
183
|
return "false";
|
|
184
184
|
|
|
185
185
|
case StringTy:
|
|
186
|
-
const sStart =
|
|
186
|
+
const sStart = bytesToInt(
|
|
187
187
|
data.slice(position, position + REGISTER_SIZE)
|
|
188
188
|
);
|
|
189
|
-
const sLen =
|
|
190
|
-
return
|
|
191
|
-
.slice(sStart + REGISTER_SIZE, sStart + REGISTER_SIZE + sLen)
|
|
192
|
-
|
|
189
|
+
const sLen = bytesToInt(data.slice(sStart, sStart + REGISTER_SIZE));
|
|
190
|
+
return Buffer.from(
|
|
191
|
+
data.slice(sStart + REGISTER_SIZE, sStart + REGISTER_SIZE + sLen)
|
|
192
|
+
).toString();
|
|
193
193
|
|
|
194
194
|
case AddressTy:
|
|
195
195
|
return bufferToHex(
|
|
@@ -197,10 +197,10 @@ export class ConsoleLogger {
|
|
|
197
197
|
);
|
|
198
198
|
|
|
199
199
|
case BytesTy:
|
|
200
|
-
const bStart =
|
|
200
|
+
const bStart = bytesToInt(
|
|
201
201
|
data.slice(position, position + REGISTER_SIZE)
|
|
202
202
|
);
|
|
203
|
-
const bLen =
|
|
203
|
+
const bLen = bytesToInt(data.slice(bStart, bStart + REGISTER_SIZE));
|
|
204
204
|
return bufferToHex(
|
|
205
205
|
data.slice(bStart + REGISTER_SIZE, bStart + REGISTER_SIZE + bLen)
|
|
206
206
|
);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const SUPPORTED_SOLIDITY_VERSION_RANGE = "<=0.8.
|
|
1
|
+
export const SUPPORTED_SOLIDITY_VERSION_RANGE = "<=0.8.24";
|
|
2
2
|
export const FIRST_SOLC_VERSION_SUPPORTED = "0.5.1";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { bufferToHex } from "@nomicfoundation/ethereumjs-util";
|
|
1
|
+
import { bytesToHex as bufferToHex } from "@nomicfoundation/ethereumjs-util";
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
normalizeLibraryRuntimeBytecodeIfNecessary,
|
|
@@ -64,7 +64,7 @@ class BytecodeTrie {
|
|
|
64
64
|
* entire code is covered by the trie, and there's no match, we return undefined.
|
|
65
65
|
*/
|
|
66
66
|
public search(
|
|
67
|
-
code:
|
|
67
|
+
code: Uint8Array,
|
|
68
68
|
currentCodeByte: number = 0
|
|
69
69
|
): Bytecode | BytecodeTrie | undefined {
|
|
70
70
|
if (currentCodeByte > code.length) {
|
|
@@ -130,7 +130,7 @@ export class ContractsIdentifier {
|
|
|
130
130
|
|
|
131
131
|
private _searchBytecode(
|
|
132
132
|
trace: EvmMessageTrace,
|
|
133
|
-
code:
|
|
133
|
+
code: Uint8Array,
|
|
134
134
|
normalizeLibraries = true,
|
|
135
135
|
trie = this._trie,
|
|
136
136
|
firstByteToSearch = 0
|
|
@@ -220,7 +220,7 @@ export class ContractsIdentifier {
|
|
|
220
220
|
/**
|
|
221
221
|
* Returns true if the lastByte is placed right when the metadata starts or after it.
|
|
222
222
|
*/
|
|
223
|
-
private _isMatchingMetadata(code:
|
|
223
|
+
private _isMatchingMetadata(code: Uint8Array, lastByte: number): boolean {
|
|
224
224
|
for (let byte = 0; byte < lastByte; ) {
|
|
225
225
|
const opcode = code[byte];
|
|
226
226
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/* eslint "@typescript-eslint/no-non-null-assertion": "error" */
|
|
2
|
-
import { ERROR } from "@nomicfoundation/ethereumjs-evm/dist/exceptions";
|
|
3
2
|
import { defaultAbiCoder as abi } from "@ethersproject/abi";
|
|
3
|
+
import { ERROR } from "@nomicfoundation/ethereumjs-evm/dist/cjs/exceptions";
|
|
4
|
+
import { equalsBytes } from "@nomicfoundation/ethereumjs-util";
|
|
4
5
|
import semver from "semver";
|
|
5
6
|
|
|
6
7
|
import { assertHardhatInvariant } from "../../core/errors";
|
|
@@ -539,7 +540,7 @@ export class ErrorInferrer {
|
|
|
539
540
|
return;
|
|
540
541
|
}
|
|
541
542
|
|
|
542
|
-
const rawReturnData = returnData.value.toString("hex");
|
|
543
|
+
const rawReturnData = Buffer.from(returnData.value).toString("hex");
|
|
543
544
|
let errorMessage = `reverted with an unrecognized custom error (return data: 0x${rawReturnData})`;
|
|
544
545
|
|
|
545
546
|
for (const customError of trace.bytecode.contract.customErrors) {
|
|
@@ -1623,7 +1624,7 @@ export class ErrorInferrer {
|
|
|
1623
1624
|
): boolean {
|
|
1624
1625
|
const call = trace.steps[callSubtraceStepIndex] as MessageTrace;
|
|
1625
1626
|
|
|
1626
|
-
if (!trace.returnData
|
|
1627
|
+
if (!equalsBytes(trace.returnData, call.returnData)) {
|
|
1627
1628
|
return false;
|
|
1628
1629
|
}
|
|
1629
1630
|
|
|
@@ -1679,7 +1680,7 @@ export class ErrorInferrer {
|
|
|
1679
1680
|
return false;
|
|
1680
1681
|
}
|
|
1681
1682
|
|
|
1682
|
-
if (!trace.returnData
|
|
1683
|
+
if (!equalsBytes(trace.returnData, subtrace.returnData)) {
|
|
1683
1684
|
return false;
|
|
1684
1685
|
}
|
|
1685
1686
|
|
|
@@ -1730,7 +1731,7 @@ export class ErrorInferrer {
|
|
|
1730
1731
|
return this._failsRightAfterCall(trace, callStepIndex);
|
|
1731
1732
|
}
|
|
1732
1733
|
|
|
1733
|
-
private _isPanicReturnData(returnData:
|
|
1734
|
+
private _isPanicReturnData(returnData: Uint8Array): boolean {
|
|
1734
1735
|
return new ReturnData(returnData).isPanicReturnData();
|
|
1735
1736
|
}
|
|
1736
1737
|
}
|
|
@@ -50,9 +50,9 @@ export function linkHexStringBytecode(
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
export function zeroOutAddresses(
|
|
53
|
-
code:
|
|
53
|
+
code: Uint8Array,
|
|
54
54
|
addressesPositions: number[]
|
|
55
|
-
):
|
|
55
|
+
): Uint8Array {
|
|
56
56
|
const addressesSlices = addressesPositions.map((start) => ({
|
|
57
57
|
start,
|
|
58
58
|
length: 20,
|
|
@@ -62,9 +62,9 @@ export function zeroOutAddresses(
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
export function zeroOutSlices(
|
|
65
|
-
code:
|
|
65
|
+
code: Uint8Array,
|
|
66
66
|
slices: Array<{ start: number; length: number }>
|
|
67
|
-
):
|
|
67
|
+
): Uint8Array {
|
|
68
68
|
for (const { start, length } of slices) {
|
|
69
69
|
code = Buffer.concat([
|
|
70
70
|
code.slice(0, start),
|
|
@@ -77,8 +77,8 @@ export function zeroOutSlices(
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
export function normalizeLibraryRuntimeBytecodeIfNecessary(
|
|
80
|
-
code:
|
|
81
|
-
):
|
|
80
|
+
code: Uint8Array
|
|
81
|
+
): Uint8Array {
|
|
82
82
|
// Libraries' protection normalization:
|
|
83
83
|
// Solidity 0.4.20 introduced a protection to prevent libraries from being called directly.
|
|
84
84
|
// This is done by modifying the code on deployment, and hard-coding the contract address.
|
|
@@ -15,7 +15,7 @@ export type DecodedEvmMessageTrace =
|
|
|
15
15
|
|
|
16
16
|
export interface BaseMessageTrace {
|
|
17
17
|
value: bigint;
|
|
18
|
-
returnData:
|
|
18
|
+
returnData: Uint8Array;
|
|
19
19
|
error?: EvmError;
|
|
20
20
|
gasUsed: bigint;
|
|
21
21
|
depth: number;
|
|
@@ -23,13 +23,13 @@ export interface BaseMessageTrace {
|
|
|
23
23
|
|
|
24
24
|
export interface PrecompileMessageTrace extends BaseMessageTrace {
|
|
25
25
|
precompile: number;
|
|
26
|
-
calldata:
|
|
26
|
+
calldata: Uint8Array;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export interface BaseEvmMessageTrace extends BaseMessageTrace {
|
|
30
|
-
code:
|
|
30
|
+
code: Uint8Array;
|
|
31
31
|
value: bigint;
|
|
32
|
-
returnData:
|
|
32
|
+
returnData: Uint8Array;
|
|
33
33
|
error?: EvmError;
|
|
34
34
|
steps: MessageTraceStep[];
|
|
35
35
|
bytecode?: Bytecode;
|
|
@@ -39,13 +39,13 @@ export interface BaseEvmMessageTrace extends BaseMessageTrace {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
export interface CreateMessageTrace extends BaseEvmMessageTrace {
|
|
42
|
-
deployedContract:
|
|
42
|
+
deployedContract: Uint8Array | undefined;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
export interface CallMessageTrace extends BaseEvmMessageTrace {
|
|
46
|
-
calldata:
|
|
47
|
-
address:
|
|
48
|
-
codeAddress:
|
|
46
|
+
calldata: Uint8Array;
|
|
47
|
+
address: Uint8Array;
|
|
48
|
+
codeAddress: Uint8Array;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
export interface DecodedCreateMessageTrace extends CreateMessageTrace {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { bufferToHex } from "@nomicfoundation/ethereumjs-util";
|
|
1
|
+
import { bytesToHex as bufferToHex } from "@nomicfoundation/ethereumjs-util";
|
|
2
2
|
|
|
3
3
|
import { AbiHelpers } from "../../util/abi-helpers";
|
|
4
4
|
|
|
@@ -212,7 +212,7 @@ export class Contract {
|
|
|
212
212
|
}
|
|
213
213
|
|
|
214
214
|
public getFunctionFromSelector(
|
|
215
|
-
selector:
|
|
215
|
+
selector: Uint8Array
|
|
216
216
|
): ContractFunction | undefined {
|
|
217
217
|
return this._selectorHexToFunction.get(bufferToHex(selector));
|
|
218
218
|
}
|
|
@@ -261,7 +261,7 @@ export class ContractFunction {
|
|
|
261
261
|
public readonly contract?: Contract,
|
|
262
262
|
public readonly visibility?: ContractFunctionVisibility,
|
|
263
263
|
public readonly isPayable?: boolean,
|
|
264
|
-
public selector?:
|
|
264
|
+
public selector?: Uint8Array,
|
|
265
265
|
public readonly paramTypes?: any[]
|
|
266
266
|
) {
|
|
267
267
|
if (contract !== undefined && !contract.location.contains(location)) {
|
|
@@ -269,7 +269,7 @@ export class ContractFunction {
|
|
|
269
269
|
}
|
|
270
270
|
}
|
|
271
271
|
|
|
272
|
-
public isValidCalldata(calldata:
|
|
272
|
+
public isValidCalldata(calldata: Uint8Array): boolean {
|
|
273
273
|
if (this.paramTypes === undefined) {
|
|
274
274
|
// if we don't know the param types, we just assume that the call is valid
|
|
275
275
|
return true;
|
|
@@ -294,7 +294,7 @@ export class CustomError {
|
|
|
294
294
|
}
|
|
295
295
|
|
|
296
296
|
private constructor(
|
|
297
|
-
public readonly selector:
|
|
297
|
+
public readonly selector: Uint8Array,
|
|
298
298
|
public readonly name: string,
|
|
299
299
|
public readonly paramTypes: any[]
|
|
300
300
|
) {}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { bufferToHex } from "@nomicfoundation/ethereumjs-util";
|
|
1
|
+
import { bytesToHex as bufferToHex } from "@nomicfoundation/ethereumjs-util";
|
|
2
2
|
|
|
3
3
|
import { panicErrorCodeToMessage } from "./panic-errors";
|
|
4
4
|
import {
|
|
@@ -271,7 +271,9 @@ function getMessageFromLastStackTraceEntry(
|
|
|
271
271
|
}
|
|
272
272
|
|
|
273
273
|
if (!stackTraceEntry.message.isEmpty()) {
|
|
274
|
-
const returnData = stackTraceEntry.message.value.toString(
|
|
274
|
+
const returnData = Buffer.from(stackTraceEntry.message.value).toString(
|
|
275
|
+
"hex"
|
|
276
|
+
);
|
|
275
277
|
|
|
276
278
|
return `VM Exception while processing transaction: reverted with an unrecognized custom error (return data: 0x${returnData})`;
|
|
277
279
|
}
|
|
@@ -61,7 +61,7 @@ export interface UnrecognizedCreateCallstackEntryStackTraceEntry {
|
|
|
61
61
|
|
|
62
62
|
export interface UnrecognizedContractCallstackEntryStackTraceEntry {
|
|
63
63
|
type: StackTraceEntryType.UNRECOGNIZED_CONTRACT_CALLSTACK_ENTRY;
|
|
64
|
-
address:
|
|
64
|
+
address: Uint8Array;
|
|
65
65
|
sourceReference?: undefined;
|
|
66
66
|
}
|
|
67
67
|
|
|
@@ -158,7 +158,7 @@ export interface UnrecognizedCreateErrorStackTraceEntry {
|
|
|
158
158
|
|
|
159
159
|
export interface UnrecognizedContractErrorStackTraceEntry {
|
|
160
160
|
type: StackTraceEntryType.UNRECOGNIZED_CONTRACT_ERROR;
|
|
161
|
-
address:
|
|
161
|
+
address: Uint8Array;
|
|
162
162
|
message: ReturnData;
|
|
163
163
|
sourceReference?: undefined;
|
|
164
164
|
isInvalidOpcodeError: boolean;
|