hardhat 2.10.1 → 2.11.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/README.md +1 -1
- package/builtin-tasks/compile.js +6 -8
- package/builtin-tasks/compile.js.map +1 -1
- package/builtin-tasks/node.js +9 -12
- package/builtin-tasks/node.js.map +1 -1
- package/builtin-tasks/test.js +2 -3
- package/builtin-tasks/test.js.map +1 -1
- package/console.sol +444 -444
- package/internal/artifacts.js +1 -1
- package/internal/artifacts.js.map +1 -1
- package/internal/cli/ArgumentsParser.js +5 -2
- package/internal/cli/ArgumentsParser.js.map +1 -1
- package/internal/cli/analytics.js +2 -2
- package/internal/cli/analytics.js.map +1 -1
- package/internal/cli/autocomplete.js +20 -32
- package/internal/cli/autocomplete.js.map +1 -1
- package/internal/cli/cli.js +1 -1
- package/internal/cli/cli.js.map +1 -1
- package/internal/cli/project-creation.js +14 -4
- package/internal/cli/project-creation.js.map +1 -1
- package/internal/constants.d.ts.map +1 -1
- package/internal/constants.js +2 -0
- package/internal/constants.js.map +1 -1
- package/internal/core/config/config-loading.js +2 -3
- package/internal/core/config/config-loading.js.map +1 -1
- package/internal/core/config/config-resolution.d.ts.map +1 -1
- package/internal/core/config/config-resolution.js +84 -35
- package/internal/core/config/config-resolution.js.map +1 -1
- package/internal/core/config/config-validation.js +38 -20
- 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 +17 -4
- package/internal/core/config/default-config.js.map +1 -1
- package/internal/core/errors.js +4 -2
- package/internal/core/errors.js.map +1 -1
- package/internal/core/execution-mode.js +2 -2
- package/internal/core/execution-mode.js.map +1 -1
- package/internal/core/flamegraph.d.ts +10 -0
- package/internal/core/flamegraph.d.ts.map +1 -0
- package/internal/core/flamegraph.js +245 -0
- package/internal/core/flamegraph.js.map +1 -0
- package/internal/core/jsonrpc/types/base-types.d.ts +7 -8
- package/internal/core/jsonrpc/types/base-types.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/base-types.js +24 -24
- package/internal/core/jsonrpc/types/base-types.js.map +1 -1
- package/internal/core/jsonrpc/types/input/blockTag.d.ts +15 -10
- package/internal/core/jsonrpc/types/input/blockTag.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/input/blockTag.js +2 -0
- package/internal/core/jsonrpc/types/input/blockTag.js.map +1 -1
- package/internal/core/jsonrpc/types/input/callRequest.d.ts +5 -6
- package/internal/core/jsonrpc/types/input/callRequest.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/input/callRequest.js.map +1 -1
- package/internal/core/jsonrpc/types/input/filterRequest.d.ts +6 -7
- package/internal/core/jsonrpc/types/input/filterRequest.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/input/filterRequest.js.map +1 -1
- package/internal/core/jsonrpc/types/input/transactionRequest.d.ts +7 -8
- package/internal/core/jsonrpc/types/input/transactionRequest.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/input/transactionRequest.js.map +1 -1
- package/internal/core/jsonrpc/types/output/block.d.ts +29 -30
- package/internal/core/jsonrpc/types/output/block.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/output/block.js +8 -2
- package/internal/core/jsonrpc/types/output/block.js.map +1 -1
- package/internal/core/jsonrpc/types/output/log.d.ts +3 -4
- package/internal/core/jsonrpc/types/output/log.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/output/log.js.map +1 -1
- package/internal/core/jsonrpc/types/output/receipt.d.ts +10 -11
- package/internal/core/jsonrpc/types/output/receipt.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/output/receipt.js.map +1 -1
- package/internal/core/jsonrpc/types/output/transaction.d.ts +13 -14
- package/internal/core/jsonrpc/types/output/transaction.d.ts.map +1 -1
- package/internal/core/jsonrpc/types/output/transaction.js.map +1 -1
- package/internal/core/providers/accounts.d.ts.map +1 -1
- package/internal/core/providers/accounts.js +30 -24
- package/internal/core/providers/accounts.js.map +1 -1
- package/internal/core/providers/chainId.js +1 -1
- package/internal/core/providers/chainId.js.map +1 -1
- package/internal/core/providers/construction.d.ts.map +1 -1
- package/internal/core/providers/construction.js +5 -5
- package/internal/core/providers/construction.js.map +1 -1
- package/internal/core/providers/gas-providers.d.ts +4 -4
- package/internal/core/providers/gas-providers.d.ts.map +1 -1
- package/internal/core/providers/gas-providers.js +16 -15
- package/internal/core/providers/gas-providers.js.map +1 -1
- package/internal/core/providers/http.js +7 -2
- package/internal/core/providers/http.js.map +1 -1
- package/internal/core/providers/util.js +5 -8
- package/internal/core/providers/util.js.map +1 -1
- package/internal/core/runtime-environment.js +1 -1
- package/internal/core/runtime-environment.js.map +1 -1
- package/internal/core/task-profiling.d.ts +18 -0
- package/internal/core/task-profiling.d.ts.map +1 -0
- package/internal/core/task-profiling.js +50 -0
- package/internal/core/task-profiling.js.map +1 -0
- package/internal/core/typescript-support.js +3 -3
- package/internal/core/typescript-support.js.map +1 -1
- package/internal/hardhat-network/jsonrpc/client.d.ts +39 -39
- package/internal/hardhat-network/jsonrpc/client.d.ts.map +1 -1
- package/internal/hardhat-network/jsonrpc/client.js +14 -14
- package/internal/hardhat-network/jsonrpc/client.js.map +1 -1
- package/internal/hardhat-network/provider/BlockchainBase.d.ts +13 -10
- package/internal/hardhat-network/provider/BlockchainBase.d.ts.map +1 -1
- package/internal/hardhat-network/provider/BlockchainBase.js +38 -16
- package/internal/hardhat-network/provider/BlockchainBase.js.map +1 -1
- package/internal/hardhat-network/provider/BlockchainData.d.ts +15 -16
- package/internal/hardhat-network/provider/BlockchainData.d.ts.map +1 -1
- package/internal/hardhat-network/provider/BlockchainData.js +33 -29
- package/internal/hardhat-network/provider/BlockchainData.js.map +1 -1
- package/internal/hardhat-network/provider/HardhatBlockchain.d.ts +7 -8
- package/internal/hardhat-network/provider/HardhatBlockchain.d.ts.map +1 -1
- package/internal/hardhat-network/provider/HardhatBlockchain.js +13 -14
- package/internal/hardhat-network/provider/HardhatBlockchain.js.map +1 -1
- package/internal/hardhat-network/provider/PoolState.d.ts +1 -1
- package/internal/hardhat-network/provider/PoolState.d.ts.map +1 -1
- package/internal/hardhat-network/provider/PoolState.js +2 -3
- package/internal/hardhat-network/provider/PoolState.js.map +1 -1
- package/internal/hardhat-network/provider/TransactionQueue.d.ts +2 -3
- package/internal/hardhat-network/provider/TransactionQueue.d.ts.map +1 -1
- package/internal/hardhat-network/provider/TransactionQueue.js +3 -3
- package/internal/hardhat-network/provider/TransactionQueue.js.map +1 -1
- package/internal/hardhat-network/provider/TxPool.d.ts +8 -8
- package/internal/hardhat-network/provider/TxPool.d.ts.map +1 -1
- package/internal/hardhat-network/provider/TxPool.js +66 -68
- package/internal/hardhat-network/provider/TxPool.js.map +1 -1
- package/internal/hardhat-network/provider/ethereumjs-workarounds.js +2 -2
- 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 +7 -8
- package/internal/hardhat-network/provider/filter.js.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts +10 -11
- package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkBlockchain.js +51 -47
- package/internal/hardhat-network/provider/fork/ForkBlockchain.js.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts +8 -10
- package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkStateManager.js +51 -69
- package/internal/hardhat-network/provider/fork/ForkStateManager.js.map +1 -1
- package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts +1 -1
- package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts.map +1 -1
- package/internal/hardhat-network/provider/fork/rpcToBlockData.js +2 -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 +7 -11
- package/internal/hardhat-network/provider/fork/rpcToTxData.js.map +1 -1
- package/internal/hardhat-network/provider/modules/eth.d.ts +2 -1
- package/internal/hardhat-network/provider/modules/eth.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/eth.js +92 -68
- package/internal/hardhat-network/provider/modules/eth.js.map +1 -1
- package/internal/hardhat-network/provider/modules/evm.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/evm.js +14 -14
- package/internal/hardhat-network/provider/modules/evm.js.map +1 -1
- package/internal/hardhat-network/provider/modules/hardhat.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/hardhat.js +13 -13
- package/internal/hardhat-network/provider/modules/hardhat.js.map +1 -1
- package/internal/hardhat-network/provider/modules/logger.d.ts +7 -8
- package/internal/hardhat-network/provider/modules/logger.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/logger.js +29 -32
- package/internal/hardhat-network/provider/modules/logger.js.map +1 -1
- package/internal/hardhat-network/provider/modules/net.d.ts +1 -1
- package/internal/hardhat-network/provider/modules/net.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/personal.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/personal.js +3 -3
- package/internal/hardhat-network/provider/modules/personal.js.map +1 -1
- package/internal/hardhat-network/provider/modules/web3.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/web3.js +5 -4
- package/internal/hardhat-network/provider/modules/web3.js.map +1 -1
- package/internal/hardhat-network/provider/node-types.d.ts +30 -29
- package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
- package/internal/hardhat-network/provider/node.d.ts +47 -42
- package/internal/hardhat-network/provider/node.d.ts.map +1 -1
- package/internal/hardhat-network/provider/node.js +262 -208
- package/internal/hardhat-network/provider/node.js.map +1 -1
- package/internal/hardhat-network/provider/output.d.ts +5 -6
- package/internal/hardhat-network/provider/output.d.ts.map +1 -1
- package/internal/hardhat-network/provider/output.js +39 -36
- package/internal/hardhat-network/provider/output.js.map +1 -1
- package/internal/hardhat-network/provider/provider.d.ts +1 -2
- package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
- package/internal/hardhat-network/provider/provider.js.map +1 -1
- package/internal/hardhat-network/provider/return-data.d.ts +2 -2
- package/internal/hardhat-network/provider/return-data.d.ts.map +1 -1
- package/internal/hardhat-network/provider/return-data.js +4 -1
- package/internal/hardhat-network/provider/return-data.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts +5 -5
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js +60 -17
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts +4 -4
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js +59 -16
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts +3 -3
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js +41 -9
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts +4 -4
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js +7 -23
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts +3 -3
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js +7 -22
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts +3 -3
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js +1 -1
- package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js.map +1 -1
- package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts +5 -6
- package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/fork-recomendations-banner.js +2 -3
- package/internal/hardhat-network/provider/utils/fork-recomendations-banner.js.map +1 -1
- package/internal/hardhat-network/provider/utils/getCurrentTimestamp.d.ts +1 -0
- package/internal/hardhat-network/provider/utils/getCurrentTimestamp.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/getCurrentTimestamp.js +5 -1
- package/internal/hardhat-network/provider/utils/getCurrentTimestamp.js.map +1 -1
- package/internal/hardhat-network/provider/utils/makeAccount.d.ts +1 -1
- package/internal/hardhat-network/provider/utils/makeAccount.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/makeAccount.js +6 -6
- package/internal/hardhat-network/provider/utils/makeAccount.js.map +1 -1
- package/internal/hardhat-network/provider/utils/makeCommon.d.ts +2 -2
- package/internal/hardhat-network/provider/utils/makeCommon.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/makeCommon.js +7 -23
- package/internal/hardhat-network/provider/utils/makeCommon.js.map +1 -1
- package/internal/hardhat-network/provider/utils/makeForkClient.d.ts +1 -2
- package/internal/hardhat-network/provider/utils/makeForkClient.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/makeForkClient.js +7 -8
- package/internal/hardhat-network/provider/utils/makeForkClient.js.map +1 -1
- package/internal/hardhat-network/provider/utils/makeStateTrie.d.ts +1 -1
- package/internal/hardhat-network/provider/utils/makeStateTrie.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/makeStateTrie.js +4 -4
- package/internal/hardhat-network/provider/utils/makeStateTrie.js.map +1 -1
- package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts +6 -3
- package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/putGenesisBlock.js +22 -4
- package/internal/hardhat-network/provider/utils/putGenesisBlock.js.map +1 -1
- package/internal/hardhat-network/provider/utils/random.d.ts +15 -0
- package/internal/hardhat-network/provider/utils/random.d.ts.map +1 -0
- package/internal/hardhat-network/provider/utils/random.js +48 -0
- package/internal/hardhat-network/provider/utils/random.js.map +1 -0
- package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.d.ts +1 -2
- package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.js +5 -4
- package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.js.map +1 -1
- package/internal/hardhat-network/provider/utils/reorgs-protection.d.ts +2 -2
- package/internal/hardhat-network/provider/utils/reorgs-protection.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/reorgs-protection.js +7 -7
- package/internal/hardhat-network/provider/utils/reorgs-protection.js.map +1 -1
- package/internal/hardhat-network/provider/utils/txMapToArray.d.ts +1 -1
- package/internal/hardhat-network/provider/utils/txMapToArray.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/compiler-to-model.js +6 -8
- package/internal/hardhat-network/stack-traces/compiler-to-model.js.map +1 -1
- package/internal/hardhat-network/stack-traces/consoleLogger.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/consoleLogger.js +51 -47
- package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
- package/internal/hardhat-network/stack-traces/constants.d.ts +3 -0
- package/internal/hardhat-network/stack-traces/constants.d.ts.map +1 -0
- package/internal/hardhat-network/stack-traces/constants.js +6 -0
- package/internal/hardhat-network/stack-traces/constants.js.map +1 -0
- package/internal/hardhat-network/stack-traces/contracts-identifier.js +2 -2
- package/internal/hardhat-network/stack-traces/contracts-identifier.js.map +1 -1
- package/internal/hardhat-network/stack-traces/debug.js +29 -19
- 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 +48 -26
- package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
- package/internal/hardhat-network/stack-traces/logger.d.ts +223 -2
- package/internal/hardhat-network/stack-traces/logger.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/logger.js +445 -224
- package/internal/hardhat-network/stack-traces/logger.js.map +1 -1
- package/internal/hardhat-network/stack-traces/message-trace.d.ts +6 -7
- package/internal/hardhat-network/stack-traces/message-trace.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/message-trace.js.map +1 -1
- package/internal/hardhat-network/stack-traces/model.js +6 -6
- package/internal/hardhat-network/stack-traces/model.js.map +1 -1
- package/internal/hardhat-network/stack-traces/panic-errors.d.ts +1 -2
- package/internal/hardhat-network/stack-traces/panic-errors.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/panic-errors.js +1 -1
- package/internal/hardhat-network/stack-traces/panic-errors.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 +21 -12
- package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
- package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts +6 -5
- package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/solidity-stack-trace.js.map +1 -1
- package/internal/hardhat-network/stack-traces/solidityTracer.d.ts +1 -1
- package/internal/hardhat-network/stack-traces/solidityTracer.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/solidityTracer.js +5 -1
- package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts +2 -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 +79 -78
- package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-trace-decoder.js +5 -1
- package/internal/hardhat-network/stack-traces/vm-trace-decoder.js.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-tracer.d.ts +3 -2
- package/internal/hardhat-network/stack-traces/vm-tracer.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-tracer.js +15 -16
- package/internal/hardhat-network/stack-traces/vm-tracer.js.map +1 -1
- package/internal/reset.js +1 -1
- package/internal/reset.js.map +1 -1
- package/internal/sentry/anonymizer.js +2 -3
- package/internal/sentry/anonymizer.js.map +1 -1
- package/internal/sentry/subprocess.js +1 -1
- package/internal/sentry/subprocess.js.map +1 -1
- package/internal/sentry/transport.js +3 -4
- package/internal/sentry/transport.js.map +1 -1
- package/internal/solidity/compilation-job.js +2 -4
- package/internal/solidity/compilation-job.js.map +1 -1
- package/internal/solidity/compiler/downloader.d.ts.map +1 -1
- package/internal/solidity/compiler/downloader.js +6 -6
- package/internal/solidity/compiler/downloader.js.map +1 -1
- package/internal/solidity/dependencyGraph.js +3 -5
- package/internal/solidity/dependencyGraph.js.map +1 -1
- package/internal/solidity/parse.js +1 -1
- package/internal/solidity/parse.js.map +1 -1
- package/internal/solidity/resolver.js +4 -1
- package/internal/solidity/resolver.js.map +1 -1
- package/internal/util/abi-helpers.js +1 -1
- package/internal/util/abi-helpers.js.map +1 -1
- package/internal/util/bigint.d.ts +25 -0
- package/internal/util/bigint.d.ts.map +1 -0
- package/internal/util/bigint.js +67 -0
- package/internal/util/bigint.js.map +1 -0
- package/internal/util/download.js +1 -1
- package/internal/util/download.js.map +1 -1
- package/internal/util/fs-utils.d.ts +32 -0
- package/internal/util/fs-utils.d.ts.map +1 -0
- package/internal/util/fs-utils.js +151 -0
- package/internal/util/fs-utils.js.map +1 -0
- package/internal/util/hardforks.d.ts +3 -3
- package/internal/util/hardforks.d.ts.map +1 -1
- package/internal/util/hardforks.js +5 -28
- package/internal/util/hardforks.js.map +1 -1
- package/internal/util/jsonrpc.js +1 -1
- package/internal/util/jsonrpc.js.map +1 -1
- package/internal/util/lazy.js +2 -2
- package/internal/util/lazy.js.map +1 -1
- package/internal/util/packageInfo.js +1 -1
- package/internal/util/packageInfo.js.map +1 -1
- package/internal/util/scripts-runner.js +5 -2
- package/internal/util/scripts-runner.js.map +1 -1
- package/internal/util/wei-values.d.ts +1 -2
- package/internal/util/wei-values.d.ts.map +1 -1
- package/internal/util/wei-values.js +9 -10
- package/internal/util/wei-values.js.map +1 -1
- package/internal/vendor/await-semaphore/index.d.ts +12 -0
- package/internal/vendor/await-semaphore/index.d.ts.map +1 -0
- package/internal/vendor/await-semaphore/index.js +64 -0
- package/internal/vendor/await-semaphore/index.js.map +1 -0
- package/package.json +13 -9
- package/profiling.d.ts +18 -0
- package/profiling.d.ts.map +1 -0
- package/profiling.js +32 -0
- package/profiling.js.map +1 -0
- package/sample-projects/javascript/scripts/deploy.js +3 -1
- package/sample-projects/javascript/test/Lock.js +1 -1
- package/sample-projects/typescript/scripts/deploy.ts +1 -1
- package/sample-projects/typescript/test/Lock.ts +1 -1
- package/src/builtin-tasks/node.ts +4 -6
- package/src/internal/constants.ts +3 -1
- package/src/internal/core/config/config-resolution.ts +30 -7
- package/src/internal/core/config/default-config.ts +12 -4
- package/src/internal/core/jsonrpc/types/base-types.ts +23 -24
- package/src/internal/core/jsonrpc/types/input/blockTag.ts +2 -4
- package/src/internal/core/jsonrpc/types/input/callRequest.ts +0 -4
- package/src/internal/core/jsonrpc/types/input/filterRequest.ts +0 -4
- package/src/internal/core/jsonrpc/types/input/transactionRequest.ts +0 -4
- package/src/internal/core/jsonrpc/types/output/block.ts +0 -4
- package/src/internal/core/jsonrpc/types/output/log.ts +0 -4
- package/src/internal/core/jsonrpc/types/output/receipt.ts +0 -4
- package/src/internal/core/jsonrpc/types/output/transaction.ts +0 -4
- package/src/internal/core/providers/accounts.ts +16 -26
- package/src/internal/core/providers/construction.ts +5 -3
- package/src/internal/core/providers/gas-providers.ts +25 -33
- package/src/internal/core/providers/util.ts +1 -1
- package/src/internal/hardhat-network/jsonrpc/client.ts +22 -22
- package/src/internal/hardhat-network/provider/BlockchainBase.ts +62 -25
- package/src/internal/hardhat-network/provider/BlockchainData.ts +39 -42
- package/src/internal/hardhat-network/provider/HardhatBlockchain.ts +21 -21
- package/src/internal/hardhat-network/provider/PoolState.ts +3 -4
- package/src/internal/hardhat-network/provider/TransactionQueue.ts +11 -8
- package/src/internal/hardhat-network/provider/TxPool.ts +62 -64
- package/src/internal/hardhat-network/provider/ethereumjs-workarounds.ts +3 -3
- package/src/internal/hardhat-network/provider/filter.ts +9 -12
- package/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts +52 -50
- package/src/internal/hardhat-network/provider/fork/ForkStateManager.ts +35 -60
- package/src/internal/hardhat-network/provider/fork/rpcToBlockData.ts +2 -2
- package/src/internal/hardhat-network/provider/fork/rpcToTxData.ts +3 -3
- package/src/internal/hardhat-network/provider/modules/eth.ts +88 -63
- package/src/internal/hardhat-network/provider/modules/evm.ts +19 -22
- package/src/internal/hardhat-network/provider/modules/hardhat.ts +21 -19
- package/src/internal/hardhat-network/provider/modules/logger.ts +33 -40
- package/src/internal/hardhat-network/provider/modules/net.ts +1 -1
- package/src/internal/hardhat-network/provider/modules/personal.ts +2 -1
- package/src/internal/hardhat-network/provider/modules/web3.ts +5 -4
- package/src/internal/hardhat-network/provider/node-types.ts +32 -31
- package/src/internal/hardhat-network/provider/node.ts +379 -343
- package/src/internal/hardhat-network/provider/output.ts +32 -37
- package/src/internal/hardhat-network/provider/provider.ts +5 -6
- package/src/internal/hardhat-network/provider/return-data.ts +6 -3
- package/src/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.ts +51 -24
- package/src/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.ts +50 -23
- package/src/internal/hardhat-network/provider/transactions/FakeSenderTransaction.ts +29 -11
- package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts +12 -24
- package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.ts +11 -22
- package/src/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.ts +3 -3
- package/src/internal/hardhat-network/provider/types/HardhatBlockchainInterface.ts +8 -9
- package/src/internal/hardhat-network/provider/utils/getCurrentTimestamp.ts +4 -0
- package/src/internal/hardhat-network/provider/utils/makeAccount.ts +4 -10
- package/src/internal/hardhat-network/provider/utils/makeCommon.ts +8 -34
- package/src/internal/hardhat-network/provider/utils/makeForkClient.ts +8 -9
- package/src/internal/hardhat-network/provider/utils/makeStateTrie.ts +3 -3
- package/src/internal/hardhat-network/provider/utils/putGenesisBlock.ts +34 -6
- package/src/internal/hardhat-network/provider/utils/random.ts +54 -0
- package/src/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.ts +6 -7
- package/src/internal/hardhat-network/provider/utils/reorgs-protection.ts +8 -8
- package/src/internal/hardhat-network/stack-traces/consoleLogger.ts +16 -6
- package/src/internal/hardhat-network/stack-traces/contracts-identifier.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/debug.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/error-inferrer.ts +11 -7
- package/src/internal/hardhat-network/stack-traces/logger.ts +444 -223
- package/src/internal/hardhat-network/stack-traces/message-trace.ts +6 -7
- package/src/internal/hardhat-network/stack-traces/model.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/panic-errors.ts +3 -5
- package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +16 -1
- package/src/internal/hardhat-network/stack-traces/solidity-stack-trace.ts +6 -6
- package/src/internal/hardhat-network/stack-traces/solidityTracer.ts +6 -1
- package/src/internal/hardhat-network/stack-traces/vm-debug-tracer.ts +106 -103
- package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +23 -18
- package/src/internal/solidity/compiler/downloader.ts +5 -2
- package/src/internal/util/bigint.ts +84 -0
- package/src/internal/util/hardforks.ts +4 -29
- package/src/internal/util/wei-values.ts +11 -13
- package/src/types/config.ts +8 -10
- package/types/config.d.ts +8 -9
- package/types/config.d.ts.map +1 -1
- package/src/internal/hardhat-network/provider/fork/random.ts +0 -33
- package/src/internal/hardhat-network/provider/utils/bnToHex.ts +0 -5
- package/src/internal/hardhat-network/provider/utils/makeForkCommon.ts +0 -15
|
@@ -1,34 +1,34 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HardhatBlockchain = void 0;
|
|
4
|
-
const
|
|
4
|
+
const util_1 = require("@ignored/util");
|
|
5
5
|
const BlockchainBase_1 = require("./BlockchainBase");
|
|
6
6
|
/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */
|
|
7
7
|
class HardhatBlockchain extends BlockchainBase_1.BlockchainBase {
|
|
8
8
|
constructor(common) {
|
|
9
9
|
super(common);
|
|
10
|
-
this._length =
|
|
10
|
+
this._length = 0n;
|
|
11
11
|
}
|
|
12
12
|
getLatestBlockNumber() {
|
|
13
|
-
return
|
|
13
|
+
return BigInt(this._length - 1n);
|
|
14
14
|
}
|
|
15
15
|
async addBlock(block) {
|
|
16
16
|
this._validateBlock(block);
|
|
17
17
|
const totalDifficulty = await this._computeTotalDifficulty(block);
|
|
18
18
|
this._data.addBlock(block, totalDifficulty);
|
|
19
|
-
this._length +=
|
|
19
|
+
this._length += 1n;
|
|
20
20
|
return block;
|
|
21
21
|
}
|
|
22
22
|
reserveBlocks(count, interval, previousBlockStateRoot, previousBlockTotalDifficulty, previousBlockBaseFeePerGas) {
|
|
23
23
|
super.reserveBlocks(count, interval, previousBlockStateRoot, previousBlockTotalDifficulty, previousBlockBaseFeePerGas);
|
|
24
|
-
this._length
|
|
24
|
+
this._length += count;
|
|
25
25
|
}
|
|
26
26
|
deleteLaterBlocks(block) {
|
|
27
27
|
const actual = this._data.getBlockByHash(block.hash());
|
|
28
28
|
if (actual === undefined) {
|
|
29
29
|
throw new Error("Invalid block");
|
|
30
30
|
}
|
|
31
|
-
this._delBlock(actual.header.number
|
|
31
|
+
this._delBlock(actual.header.number + 1n);
|
|
32
32
|
}
|
|
33
33
|
async getTotalDifficulty(blockHash) {
|
|
34
34
|
const totalDifficulty = this._data.getTotalDifficulty(blockHash);
|
|
@@ -42,23 +42,22 @@ class HardhatBlockchain extends BlockchainBase_1.BlockchainBase {
|
|
|
42
42
|
}
|
|
43
43
|
async getBlockByTransactionHash(transactionHash) {
|
|
44
44
|
const block = this._data.getBlockByTransactionHash(transactionHash);
|
|
45
|
-
return block
|
|
45
|
+
return block ?? null;
|
|
46
46
|
}
|
|
47
47
|
async getTransactionReceipt(transactionHash) {
|
|
48
|
-
|
|
49
|
-
return (_a = this._data.getTransactionReceipt(transactionHash)) !== null && _a !== void 0 ? _a : null;
|
|
48
|
+
return this._data.getTransactionReceipt(transactionHash) ?? null;
|
|
50
49
|
}
|
|
51
50
|
async getLogs(filterParams) {
|
|
52
51
|
return this._data.getLogs(filterParams);
|
|
53
52
|
}
|
|
54
53
|
_validateBlock(block) {
|
|
55
|
-
const blockNumber = block.header.number
|
|
54
|
+
const blockNumber = block.header.number;
|
|
56
55
|
const parentHash = block.header.parentHash;
|
|
57
|
-
const parent = this._data.getBlockByNumber(
|
|
58
|
-
if (this._length !== blockNumber) {
|
|
56
|
+
const parent = this._data.getBlockByNumber(BigInt(blockNumber - 1n));
|
|
57
|
+
if (BigInt(this._length) !== blockNumber) {
|
|
59
58
|
throw new Error(`Invalid block number ${blockNumber}. Expected ${this._length}.`);
|
|
60
59
|
}
|
|
61
|
-
if ((blockNumber ===
|
|
60
|
+
if ((blockNumber === 0n && !parentHash.equals((0, util_1.zeros)(32))) ||
|
|
62
61
|
(blockNumber > 0 &&
|
|
63
62
|
parent !== undefined &&
|
|
64
63
|
!parentHash.equals(parent.hash()))) {
|
|
@@ -67,7 +66,7 @@ class HardhatBlockchain extends BlockchainBase_1.BlockchainBase {
|
|
|
67
66
|
}
|
|
68
67
|
_delBlock(blockNumber) {
|
|
69
68
|
super._delBlock(blockNumber);
|
|
70
|
-
this._length = blockNumber
|
|
69
|
+
this._length = blockNumber;
|
|
71
70
|
}
|
|
72
71
|
}
|
|
73
72
|
exports.HardhatBlockchain = HardhatBlockchain;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HardhatBlockchain.js","sourceRoot":"","sources":["../../../src/internal/hardhat-network/provider/HardhatBlockchain.ts"],"names":[],"mappings":";;;AAGA,
|
|
1
|
+
{"version":3,"file":"HardhatBlockchain.js","sourceRoot":"","sources":["../../../src/internal/hardhat-network/provider/HardhatBlockchain.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PoolState.d.ts","sourceRoot":"","sources":["../../../src/internal/hardhat-network/provider/PoolState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"PoolState.d.ts","sourceRoot":"","sources":["../../../src/internal/hardhat-network/provider/PoolState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EACL,IAAI,IAAI,aAAa,EACrB,GAAG,IAAI,YAAY,EACnB,MAAM,IAAI,eAAe,EAC1B,MAAM,WAAW,CAAC;AAInB,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED,UAAU,2BAA2B;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,yBAAyB,sDAMlC,CAAC;AAEL,oBAAY,qBAAqB,GAC/B,eAAe,CAAC,2BAA2B,CAAC,CAAC;AAC/C,oBAAY,kBAAkB,GAAG,aAAa,CAAC,qBAAqB,CAAC,CAAC;AACtE,oBAAY,qBAAqB,GAAG,YAAY,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAC7E,oBAAY,iBAAiB,GAAG,YAAY,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;AAE5E,MAAM,WAAW,SAAS;IACxB,mBAAmB,EAAE,qBAAqB,CAAC;IAC3C,kBAAkB,EAAE,qBAAqB,CAAC;IAC1C,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,aAAa,oCAKxB,CAAC"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.makePoolState = exports.makeSerializedTransaction = void 0;
|
|
4
|
-
const ethereumjs_util_1 = require("ethereumjs-util");
|
|
5
4
|
const immutable_1 = require("immutable");
|
|
6
|
-
const
|
|
5
|
+
const bigint_1 = require("../../util/bigint");
|
|
7
6
|
exports.makeSerializedTransaction = (0, immutable_1.Record)({
|
|
8
7
|
orderId: 0,
|
|
9
8
|
fakeFrom: undefined,
|
|
@@ -14,6 +13,6 @@ exports.makePoolState = (0, immutable_1.Record)({
|
|
|
14
13
|
pendingTransactions: (0, immutable_1.Map)(),
|
|
15
14
|
queuedTransactions: (0, immutable_1.Map)(),
|
|
16
15
|
hashToTransaction: (0, immutable_1.Map)(),
|
|
17
|
-
blockGasLimit:
|
|
16
|
+
blockGasLimit: bigint_1.BigIntUtils.toHex(9500000),
|
|
18
17
|
});
|
|
19
18
|
//# sourceMappingURL=PoolState.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PoolState.js","sourceRoot":"","sources":["../../../src/internal/hardhat-network/provider/PoolState.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"PoolState.js","sourceRoot":"","sources":["../../../src/internal/hardhat-network/provider/PoolState.ts"],"names":[],"mappings":";;;AACA,yCAImB;AAEnB,8CAAgD;AAcnC,QAAA,yBAAyB,GACpC,IAAA,kBAAe,EAA8B;IAC3C,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,EAAE;IACR,MAAM,EAAE,CAAC;CACV,CAAC,CAAC;AAeQ,QAAA,aAAa,GAAG,IAAA,kBAAe,EAAY;IACtD,mBAAmB,EAAE,IAAA,eAAY,GAA8B;IAC/D,kBAAkB,EAAE,IAAA,eAAY,GAA8B;IAC9D,iBAAiB,EAAE,IAAA,eAAY,GAAiC;IAChE,aAAa,EAAE,oBAAW,CAAC,KAAK,CAAC,OAAO,CAAC;CAC1C,CAAC,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { TypedTransaction } from "@
|
|
2
|
-
import { BN } from "ethereumjs-util";
|
|
1
|
+
import { TypedTransaction } from "@ignored/tx";
|
|
3
2
|
import { MempoolOrder } from "./node-types";
|
|
4
3
|
import { OrderedTransaction } from "./PoolState";
|
|
5
4
|
/**
|
|
@@ -25,7 +24,7 @@ export declare class TransactionQueue {
|
|
|
25
24
|
* sorted by nonce and without nonce gaps.
|
|
26
25
|
* @param baseFee The base fee of the next block, if it's going to use EIP-1559
|
|
27
26
|
*/
|
|
28
|
-
constructor(pendingTransactions: Map<string, OrderedTransaction[]>, mempoolOrder: MempoolOrder, baseFee?:
|
|
27
|
+
constructor(pendingTransactions: Map<string, OrderedTransaction[]>, mempoolOrder: MempoolOrder, baseFee?: bigint);
|
|
29
28
|
getNextTransaction(): TypedTransaction | undefined;
|
|
30
29
|
removeLastSenderTransactions(): void;
|
|
31
30
|
private _moveFirstEnqueuedTransactionToHeap;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionQueue.d.ts","sourceRoot":"","sources":["../../../src/internal/hardhat-network/provider/TransactionQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"TransactionQueue.d.ts","sourceRoot":"","sources":["../../../src/internal/hardhat-network/provider/TransactionQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAK/C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAmEjD;;;;;;;;;;;IAWI;AACJ,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CACxB;IAEZ,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2B;IAEjD,OAAO,CAAC,sBAAsB,CAAC,CAAS;IAExC;;;;;;OAMG;gBAED,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,EACtD,YAAY,EAAE,YAAY,EAC1B,OAAO,CAAC,EAAE,MAAM;IAkBX,kBAAkB,IAAI,gBAAgB,GAAG,SAAS;IAclD,4BAA4B;IAYnC,OAAO,CAAC,mCAAmC;CAU5C"}
|
|
@@ -4,9 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.TransactionQueue = void 0;
|
|
7
|
-
const ethereumjs_util_1 = require("ethereumjs-util");
|
|
8
7
|
const heap_1 = __importDefault(require("mnemonist/heap"));
|
|
9
8
|
const errors_1 = require("../../core/providers/errors");
|
|
9
|
+
const bigint_1 = require("../../util/bigint");
|
|
10
10
|
function getEffectiveMinerFee(tx, baseFee) {
|
|
11
11
|
// This mimics the EIP-1559 normalize_transaction function
|
|
12
12
|
const maxFeePerGas = "gasPrice" in tx.data ? tx.data.gasPrice : tx.data.maxFeePerGas;
|
|
@@ -14,12 +14,12 @@ function getEffectiveMinerFee(tx, baseFee) {
|
|
|
14
14
|
if (baseFee === undefined) {
|
|
15
15
|
return maxFeePerGas;
|
|
16
16
|
}
|
|
17
|
-
return
|
|
17
|
+
return bigint_1.BigIntUtils.min(maxPriorityFeePerGas, maxFeePerGas - baseFee);
|
|
18
18
|
}
|
|
19
19
|
function decreasingOrderEffectiveMinerFeeComparator(left, right, baseFee) {
|
|
20
20
|
const leftEffectiveMinerFee = getEffectiveMinerFee(left, baseFee);
|
|
21
21
|
const rightEffectiveMinerFee = getEffectiveMinerFee(right, baseFee);
|
|
22
|
-
const cmp =
|
|
22
|
+
const cmp = bigint_1.BigIntUtils.cmp(rightEffectiveMinerFee, leftEffectiveMinerFee);
|
|
23
23
|
if (cmp !== 0) {
|
|
24
24
|
return cmp;
|
|
25
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionQueue.js","sourceRoot":"","sources":["../../../src/internal/hardhat-network/provider/TransactionQueue.ts"],"names":[],"mappings":";;;;;;AACA,
|
|
1
|
+
{"version":3,"file":"TransactionQueue.js","sourceRoot":"","sources":["../../../src/internal/hardhat-network/provider/TransactionQueue.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import Common from "@
|
|
3
|
-
import { TypedTransaction } from "@
|
|
4
|
-
import { StateManager } from "@
|
|
5
|
-
import { Address
|
|
2
|
+
import { Common } from "@ignored/common";
|
|
3
|
+
import { TypedTransaction } from "@ignored/tx";
|
|
4
|
+
import { StateManager } from "@ignored/statemanager";
|
|
5
|
+
import { Address } from "@ignored/util";
|
|
6
6
|
import { OrderedTransaction, SerializedTransaction } from "./PoolState";
|
|
7
7
|
export declare function serializeTransaction(tx: OrderedTransaction): SerializedTransaction;
|
|
8
8
|
export declare function deserializeTransaction(tx: SerializedTransaction, common: Common): OrderedTransaction;
|
|
@@ -13,7 +13,7 @@ export declare class TxPool {
|
|
|
13
13
|
private _nextSnapshotId;
|
|
14
14
|
private _nextOrderId;
|
|
15
15
|
private readonly _deserializeTransaction;
|
|
16
|
-
constructor(_stateManager: StateManager, blockGasLimit:
|
|
16
|
+
constructor(_stateManager: StateManager, blockGasLimit: bigint, common: Common);
|
|
17
17
|
addTransaction(tx: TypedTransaction): Promise<void>;
|
|
18
18
|
/**
|
|
19
19
|
* Remove transaction with the given hash from the mempool. Returns true
|
|
@@ -32,9 +32,9 @@ export declare class TxPool {
|
|
|
32
32
|
* Returns the next available nonce for an address, taking into account
|
|
33
33
|
* its pending transactions.
|
|
34
34
|
*/
|
|
35
|
-
getNextPendingNonce(accountAddress: Address): Promise<
|
|
36
|
-
getBlockGasLimit():
|
|
37
|
-
setBlockGasLimit(newLimit:
|
|
35
|
+
getNextPendingNonce(accountAddress: Address): Promise<bigint>;
|
|
36
|
+
getBlockGasLimit(): bigint;
|
|
37
|
+
setBlockGasLimit(newLimit: bigint | number): void;
|
|
38
38
|
/**
|
|
39
39
|
* Updates the pending and queued list of all addresses
|
|
40
40
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TxPool.d.ts","sourceRoot":"","sources":["../../../src/internal/hardhat-network/provider/TxPool.ts"],"names":[],"mappings":";AAAA,OAAO,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"TxPool.d.ts","sourceRoot":"","sources":["../../../src/internal/hardhat-network/provider/TxPool.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAsB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAyB,MAAM,eAAe,CAAC;AAM/D,OAAO,EAIL,kBAAkB,EAGlB,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAQrB,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,kBAAkB,GACrB,qBAAqB,CAYvB;AAED,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,qBAAqB,EACzB,MAAM,EAAE,MAAM,GACb,kBAAkB,CAuCpB;AAED,qBAAa,MAAM;IAWf,OAAO,CAAC,QAAQ,CAAC,aAAa;IAVhC,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,kBAAkB,CAAiD;IAC3E,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,YAAY,CAAK;IAEzB,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAEhB;gBAGL,aAAa,EAAE,YAAY,EAC5C,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM;IAQH,cAAc,CAAC,EAAE,EAAE,gBAAgB;IAgBhD;;;OAGG;IACI,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAiD1C,QAAQ,IAAI,MAAM;IAMlB,MAAM,CAAC,UAAU,EAAE,MAAM;IAUzB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IASlE,sBAAsB,IAAI,OAAO;IAKjC,qBAAqB,IAAI,OAAO;IAKhC,OAAO,IAAI,OAAO;IAIlB,sBAAsB,IAAI,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAW3D,qBAAqB,IAAI,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAWjE;;;OAGG;IACU,mBAAmB,CAAC,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAanE,gBAAgB,IAAI,MAAM;IAI1B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQjD;;OAEG;IACU,sBAAsB;IA+DnC,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,SAAS;IAkBjB,OAAO,CAAC,sBAAsB;IA0B9B,OAAO,CAAC,qBAAqB;YAsBf,oBAAoB;IAyDlC,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,wBAAwB;IAOhC,OAAO,CAAC,UAAU;IAelB;;;OAGG;YACW,sBAAsB;IAOpC;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAezB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,UAAU;IA+DlB,OAAO,CAAC,kBAAkB;CAW3B"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TxPool = exports.deserializeTransaction = exports.serializeTransaction = void 0;
|
|
4
|
-
const tx_1 = require("@
|
|
5
|
-
const
|
|
4
|
+
const tx_1 = require("@ignored/tx");
|
|
5
|
+
const util_1 = require("@ignored/util");
|
|
6
6
|
const immutable_1 = require("immutable");
|
|
7
7
|
const errors_1 = require("../../core/providers/errors");
|
|
8
|
+
const bigint_1 = require("../../util/bigint");
|
|
8
9
|
const PoolState_1 = require("./PoolState");
|
|
9
10
|
const FakeSenderAccessListEIP2930Transaction_1 = require("./transactions/FakeSenderAccessListEIP2930Transaction");
|
|
10
11
|
const FakeSenderTransaction_1 = require("./transactions/FakeSenderTransaction");
|
|
11
|
-
const bnToHex_1 = require("./utils/bnToHex");
|
|
12
12
|
const reorganizeTransactionsLists_1 = require("./utils/reorganizeTransactionsLists");
|
|
13
13
|
const FakeSenderEIP1559Transaction_1 = require("./transactions/FakeSenderEIP1559Transaction");
|
|
14
14
|
/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */
|
|
15
15
|
function serializeTransaction(tx) {
|
|
16
|
-
const rlpSerialization = (0,
|
|
16
|
+
const rlpSerialization = (0, util_1.bufferToHex)(tx.data.serialize());
|
|
17
17
|
const isFake = tx.data instanceof FakeSenderTransaction_1.FakeSenderTransaction ||
|
|
18
18
|
tx.data instanceof FakeSenderAccessListEIP2930Transaction_1.FakeSenderAccessListEIP2930Transaction ||
|
|
19
19
|
tx.data instanceof FakeSenderEIP1559Transaction_1.FakeSenderEIP1559Transaction;
|
|
@@ -21,7 +21,7 @@ function serializeTransaction(tx) {
|
|
|
21
21
|
orderId: tx.orderId,
|
|
22
22
|
fakeFrom: isFake ? tx.data.getSenderAddress().toString() : undefined,
|
|
23
23
|
data: rlpSerialization,
|
|
24
|
-
txType: tx.data.
|
|
24
|
+
txType: tx.data.type,
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
27
|
exports.serializeTransaction = serializeTransaction;
|
|
@@ -30,8 +30,8 @@ function deserializeTransaction(tx, common) {
|
|
|
30
30
|
const fakeFrom = tx.get("fakeFrom");
|
|
31
31
|
let data;
|
|
32
32
|
if (fakeFrom !== undefined) {
|
|
33
|
-
const sender =
|
|
34
|
-
const serialization = (0,
|
|
33
|
+
const sender = util_1.Address.fromString(fakeFrom);
|
|
34
|
+
const serialization = (0, util_1.toBuffer)(rlpSerialization);
|
|
35
35
|
if (tx.get("txType") === 1) {
|
|
36
36
|
data =
|
|
37
37
|
FakeSenderAccessListEIP2930Transaction_1.FakeSenderAccessListEIP2930Transaction.fromSenderAndRlpSerializedTx(sender, serialization, { common });
|
|
@@ -44,7 +44,7 @@ function deserializeTransaction(tx, common) {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
else {
|
|
47
|
-
data = tx_1.TransactionFactory.fromSerializedData((0,
|
|
47
|
+
data = tx_1.TransactionFactory.fromSerializedData((0, util_1.toBuffer)(rlpSerialization), {
|
|
48
48
|
common,
|
|
49
49
|
});
|
|
50
50
|
}
|
|
@@ -61,7 +61,7 @@ class TxPool {
|
|
|
61
61
|
this._nextSnapshotId = 0;
|
|
62
62
|
this._nextOrderId = 0;
|
|
63
63
|
this._state = (0, PoolState_1.makePoolState)({
|
|
64
|
-
blockGasLimit:
|
|
64
|
+
blockGasLimit: bigint_1.BigIntUtils.toHex(blockGasLimit),
|
|
65
65
|
});
|
|
66
66
|
this._deserializeTransaction = (tx) => deserializeTransaction(tx, common);
|
|
67
67
|
}
|
|
@@ -70,8 +70,8 @@ class TxPool {
|
|
|
70
70
|
const nextConfirmedNonce = await this._getNextConfirmedNonce(senderAddress);
|
|
71
71
|
const nextPendingNonce = await this.getNextPendingNonce(senderAddress);
|
|
72
72
|
await this._validateTransaction(tx, senderAddress, nextConfirmedNonce);
|
|
73
|
-
const txNonce =
|
|
74
|
-
if (txNonce
|
|
73
|
+
const txNonce = tx.nonce;
|
|
74
|
+
if (txNonce > nextPendingNonce) {
|
|
75
75
|
this._addQueuedTransaction(tx);
|
|
76
76
|
}
|
|
77
77
|
else {
|
|
@@ -83,7 +83,6 @@ class TxPool {
|
|
|
83
83
|
* if a transaction was removed, false otherwise.
|
|
84
84
|
*/
|
|
85
85
|
removeTransaction(txHash) {
|
|
86
|
-
var _a, _b;
|
|
87
86
|
const tx = this.getTransactionByHash(txHash);
|
|
88
87
|
if (tx === undefined) {
|
|
89
88
|
// transaction doesn't exist in the mempool
|
|
@@ -92,8 +91,10 @@ class TxPool {
|
|
|
92
91
|
this._deleteTransactionByHash(txHash);
|
|
93
92
|
const serializedTx = serializeTransaction(tx);
|
|
94
93
|
const senderAddress = this._getSenderAddress(tx.data).toString();
|
|
95
|
-
const pendingForAddress =
|
|
96
|
-
|
|
94
|
+
const pendingForAddress = this._getPendingForAddress(senderAddress) ??
|
|
95
|
+
(0, immutable_1.List)();
|
|
96
|
+
const queuedForAddress = this._getQueuedForAddress(senderAddress) ??
|
|
97
|
+
(0, immutable_1.List)();
|
|
97
98
|
// if the tx to remove is in the pending state, remove it
|
|
98
99
|
// and move the following transactions to the queued list
|
|
99
100
|
const indexOfPendingTx = pendingForAddress.indexOf(serializedTx);
|
|
@@ -127,7 +128,7 @@ class TxPool {
|
|
|
127
128
|
this._removeSnapshotsAfter(snapshotId);
|
|
128
129
|
}
|
|
129
130
|
getTransactionByHash(hash) {
|
|
130
|
-
const tx = this._getTransactionsByHash().get((0,
|
|
131
|
+
const tx = this._getTransactionsByHash().get((0, util_1.bufferToHex)(hash));
|
|
131
132
|
if (tx !== undefined) {
|
|
132
133
|
return this._deserializeTransaction(tx);
|
|
133
134
|
}
|
|
@@ -162,19 +163,19 @@ class TxPool {
|
|
|
162
163
|
*/
|
|
163
164
|
async getNextPendingNonce(accountAddress) {
|
|
164
165
|
const pendingTxs = this._getPendingForAddress(accountAddress.toString());
|
|
165
|
-
const lastPendingTx = pendingTxs
|
|
166
|
+
const lastPendingTx = pendingTxs?.last(undefined);
|
|
166
167
|
if (lastPendingTx === undefined) {
|
|
167
168
|
return this._getNextConfirmedNonce(accountAddress);
|
|
168
169
|
}
|
|
169
170
|
const lastPendingTxNonce = this._deserializeTransaction(lastPendingTx).data.nonce;
|
|
170
|
-
return lastPendingTxNonce
|
|
171
|
+
return lastPendingTxNonce + 1n;
|
|
171
172
|
}
|
|
172
173
|
getBlockGasLimit() {
|
|
173
|
-
return
|
|
174
|
+
return BigInt(this._state.get("blockGasLimit"));
|
|
174
175
|
}
|
|
175
176
|
setBlockGasLimit(newLimit) {
|
|
176
177
|
if (typeof newLimit === "number") {
|
|
177
|
-
newLimit =
|
|
178
|
+
newLimit = BigInt(newLimit);
|
|
178
179
|
}
|
|
179
180
|
this._setBlockGasLimit(newLimit);
|
|
180
181
|
}
|
|
@@ -182,28 +183,27 @@ class TxPool {
|
|
|
182
183
|
* Updates the pending and queued list of all addresses
|
|
183
184
|
*/
|
|
184
185
|
async updatePendingAndQueued() {
|
|
185
|
-
var _a;
|
|
186
186
|
let newPending = this._getPending();
|
|
187
187
|
// update pending transactions
|
|
188
188
|
for (const [address, txs] of newPending) {
|
|
189
|
-
const senderAccount = await this._stateManager.getAccount(
|
|
190
|
-
const senderNonce =
|
|
191
|
-
const senderBalance =
|
|
189
|
+
const senderAccount = await this._stateManager.getAccount(util_1.Address.fromString(address));
|
|
190
|
+
const senderNonce = senderAccount.nonce;
|
|
191
|
+
const senderBalance = senderAccount.balance;
|
|
192
192
|
let moveToQueued = false;
|
|
193
193
|
for (const tx of txs) {
|
|
194
194
|
const deserializedTx = this._deserializeTransaction(tx);
|
|
195
195
|
if (moveToQueued) {
|
|
196
196
|
newPending = this._removeTx(newPending, address, deserializedTx);
|
|
197
|
-
const queued =
|
|
197
|
+
const queued = this._getQueuedForAddress(address) ?? (0, immutable_1.List)();
|
|
198
198
|
this._setQueuedForAddress(address, queued.push(tx));
|
|
199
199
|
continue;
|
|
200
200
|
}
|
|
201
|
-
const txNonce =
|
|
201
|
+
const txNonce = deserializedTx.data.nonce;
|
|
202
202
|
if (!this._isTxValid(deserializedTx, txNonce, senderNonce, senderBalance)) {
|
|
203
203
|
newPending = this._removeTx(newPending, address, deserializedTx);
|
|
204
204
|
// if we are dropping a pending transaction with a valid nonce,
|
|
205
205
|
// then we move all the following txs to the queued list
|
|
206
|
-
if (txNonce
|
|
206
|
+
if (txNonce >= senderNonce) {
|
|
207
207
|
moveToQueued = true;
|
|
208
208
|
}
|
|
209
209
|
}
|
|
@@ -213,12 +213,12 @@ class TxPool {
|
|
|
213
213
|
// update queued addresses
|
|
214
214
|
let newQueued = this._getQueued();
|
|
215
215
|
for (const [address, txs] of newQueued) {
|
|
216
|
-
const senderAccount = await this._stateManager.getAccount(
|
|
217
|
-
const senderNonce =
|
|
218
|
-
const senderBalance =
|
|
216
|
+
const senderAccount = await this._stateManager.getAccount(util_1.Address.fromString(address));
|
|
217
|
+
const senderNonce = senderAccount.nonce;
|
|
218
|
+
const senderBalance = senderAccount.balance;
|
|
219
219
|
for (const tx of txs) {
|
|
220
220
|
const deserializedTx = this._deserializeTransaction(tx);
|
|
221
|
-
const txNonce =
|
|
221
|
+
const txNonce = deserializedTx.data.nonce;
|
|
222
222
|
if (!this._isTxValid(deserializedTx, txNonce, senderNonce, senderBalance)) {
|
|
223
223
|
newQueued = this._removeTx(newQueued, address, deserializedTx);
|
|
224
224
|
}
|
|
@@ -253,64 +253,62 @@ class TxPool {
|
|
|
253
253
|
return map.set(address, accountTxs.remove(indexOfTx));
|
|
254
254
|
}
|
|
255
255
|
_addPendingTransaction(tx) {
|
|
256
|
-
var _a, _b;
|
|
257
256
|
const orderedTx = {
|
|
258
257
|
orderId: this._nextOrderId++,
|
|
259
258
|
data: tx,
|
|
260
259
|
};
|
|
261
260
|
const serializedTx = serializeTransaction(orderedTx);
|
|
262
261
|
const hexSenderAddress = tx.getSenderAddress().toString();
|
|
263
|
-
const accountTransactions =
|
|
262
|
+
const accountTransactions = this._getPendingForAddress(hexSenderAddress) ?? (0, immutable_1.List)();
|
|
264
263
|
const replaced = this._replacePendingTx(hexSenderAddress, orderedTx);
|
|
265
264
|
if (!replaced) {
|
|
266
|
-
const { newPending, newQueued } = (0, reorganizeTransactionsLists_1.reorganizeTransactionsLists)(accountTransactions.push(serializedTx),
|
|
265
|
+
const { newPending, newQueued } = (0, reorganizeTransactionsLists_1.reorganizeTransactionsLists)(accountTransactions.push(serializedTx), this._getQueuedForAddress(hexSenderAddress) ?? (0, immutable_1.List)(), (stx) => this._deserializeTransaction(stx).data.nonce);
|
|
267
266
|
this._setPendingForAddress(hexSenderAddress, newPending);
|
|
268
267
|
this._setQueuedForAddress(hexSenderAddress, newQueued);
|
|
269
268
|
}
|
|
270
|
-
this._setTransactionByHash((0,
|
|
269
|
+
this._setTransactionByHash((0, util_1.bufferToHex)(tx.hash()), serializedTx);
|
|
271
270
|
}
|
|
272
271
|
_addQueuedTransaction(tx) {
|
|
273
|
-
var _a;
|
|
274
272
|
const orderedTx = {
|
|
275
273
|
orderId: this._nextOrderId++,
|
|
276
274
|
data: tx,
|
|
277
275
|
};
|
|
278
276
|
const serializedTx = serializeTransaction(orderedTx);
|
|
279
277
|
const hexSenderAddress = tx.getSenderAddress().toString();
|
|
280
|
-
const accountTransactions =
|
|
278
|
+
const accountTransactions = this._getQueuedForAddress(hexSenderAddress) ?? (0, immutable_1.List)();
|
|
281
279
|
const replaced = this._replaceQueuedTx(hexSenderAddress, orderedTx);
|
|
282
280
|
if (!replaced) {
|
|
283
281
|
this._setQueuedForAddress(hexSenderAddress, accountTransactions.push(serializedTx));
|
|
284
282
|
}
|
|
285
|
-
this._setTransactionByHash((0,
|
|
283
|
+
this._setTransactionByHash((0, util_1.bufferToHex)(tx.hash()), serializedTx);
|
|
286
284
|
}
|
|
287
285
|
async _validateTransaction(tx, senderAddress, senderNonce) {
|
|
288
286
|
if (this._knownTransaction(tx)) {
|
|
289
|
-
throw new errors_1.InvalidInputError(`Known transaction: ${(0,
|
|
287
|
+
throw new errors_1.InvalidInputError(`Known transaction: ${(0, util_1.bufferToHex)(tx.hash())}`);
|
|
290
288
|
}
|
|
291
|
-
const txNonce =
|
|
289
|
+
const txNonce = tx.nonce;
|
|
292
290
|
// Geth returns this error if trying to create a contract and no data is provided
|
|
293
291
|
if (tx.to === undefined && tx.data.length === 0) {
|
|
294
292
|
throw new errors_1.InvalidInputError("contract creation without any data provided");
|
|
295
293
|
}
|
|
296
294
|
const senderAccount = await this._stateManager.getAccount(senderAddress);
|
|
297
|
-
const senderBalance =
|
|
295
|
+
const senderBalance = senderAccount.balance;
|
|
298
296
|
const maxFee = "gasPrice" in tx ? tx.gasPrice : tx.maxFeePerGas;
|
|
299
|
-
const txMaxUpfrontCost = tx.gasLimit
|
|
300
|
-
if (txMaxUpfrontCost
|
|
297
|
+
const txMaxUpfrontCost = tx.gasLimit * maxFee + tx.value;
|
|
298
|
+
if (txMaxUpfrontCost > senderBalance) {
|
|
301
299
|
throw new errors_1.InvalidInputError(`sender doesn't have enough funds to send tx. The max upfront cost is: ${txMaxUpfrontCost.toString()}` +
|
|
302
300
|
` and the sender's account only has: ${senderBalance.toString()}`);
|
|
303
301
|
}
|
|
304
|
-
if (txNonce
|
|
302
|
+
if (txNonce < senderNonce) {
|
|
305
303
|
throw new errors_1.InvalidInputError(`Nonce too low. Expected nonce to be at least ${senderNonce.toString()} but got ${txNonce.toString()}.`);
|
|
306
304
|
}
|
|
307
|
-
const gasLimit =
|
|
305
|
+
const gasLimit = tx.gasLimit;
|
|
308
306
|
const baseFee = tx.getBaseFee();
|
|
309
|
-
if (gasLimit
|
|
307
|
+
if (gasLimit < baseFee) {
|
|
310
308
|
throw new errors_1.InvalidInputError(`Transaction requires at least ${baseFee.toString()} gas but got ${gasLimit.toString()}`);
|
|
311
309
|
}
|
|
312
310
|
const blockGasLimit = this.getBlockGasLimit();
|
|
313
|
-
if (gasLimit
|
|
311
|
+
if (gasLimit > blockGasLimit) {
|
|
314
312
|
throw new errors_1.InvalidInputError(`Transaction gas limit is ${gasLimit.toString()} and exceeds block gas limit of ${blockGasLimit.toString()}`);
|
|
315
313
|
}
|
|
316
314
|
}
|
|
@@ -320,7 +318,7 @@ class TxPool {
|
|
|
320
318
|
this._transactionExists(tx, this._getQueuedForAddress(senderAddress)));
|
|
321
319
|
}
|
|
322
320
|
_transactionExists(tx, txList) {
|
|
323
|
-
const existingTx = txList
|
|
321
|
+
const existingTx = txList?.find((etx) => this._deserializeTransaction(etx).data.hash().equals(tx.hash()));
|
|
324
322
|
return existingTx !== undefined;
|
|
325
323
|
}
|
|
326
324
|
_getTransactionsByHash() {
|
|
@@ -354,16 +352,16 @@ class TxPool {
|
|
|
354
352
|
this._state = this._state.set("queuedTransactions", this._getQueued().set(address, transactions));
|
|
355
353
|
}
|
|
356
354
|
_setBlockGasLimit(newLimit) {
|
|
357
|
-
this._state = this._state.set("blockGasLimit",
|
|
355
|
+
this._state = this._state.set("blockGasLimit", bigint_1.BigIntUtils.toHex(newLimit));
|
|
358
356
|
}
|
|
359
357
|
_deleteTransactionByHash(hash) {
|
|
360
|
-
this._state = this._state.set("hashToTransaction", this._getTransactionsByHash().delete((0,
|
|
358
|
+
this._state = this._state.set("hashToTransaction", this._getTransactionsByHash().delete((0, util_1.bufferToHex)(hash)));
|
|
361
359
|
}
|
|
362
360
|
_isTxValid(tx, txNonce, senderNonce, senderBalance) {
|
|
363
|
-
const txGasLimit =
|
|
364
|
-
return (txGasLimit
|
|
365
|
-
txNonce
|
|
366
|
-
tx.data.getUpfrontCost()
|
|
361
|
+
const txGasLimit = tx.data.gasLimit;
|
|
362
|
+
return (txGasLimit <= this.getBlockGasLimit() &&
|
|
363
|
+
txNonce >= senderNonce &&
|
|
364
|
+
tx.data.getUpfrontCost() <= senderBalance);
|
|
367
365
|
}
|
|
368
366
|
/**
|
|
369
367
|
* Returns the next available nonce for an address, ignoring its
|
|
@@ -371,7 +369,7 @@ class TxPool {
|
|
|
371
369
|
*/
|
|
372
370
|
async _getNextConfirmedNonce(accountAddress) {
|
|
373
371
|
const account = await this._stateManager.getAccount(accountAddress);
|
|
374
|
-
return
|
|
372
|
+
return account.nonce;
|
|
375
373
|
}
|
|
376
374
|
/**
|
|
377
375
|
* Checks if some pending tx with the same nonce as `newTx` exists.
|
|
@@ -405,28 +403,28 @@ class TxPool {
|
|
|
405
403
|
if (txs === undefined) {
|
|
406
404
|
return;
|
|
407
405
|
}
|
|
408
|
-
const existingTxEntry = txs.findEntry((tx) => this._deserializeTransaction(tx).data.nonce
|
|
406
|
+
const existingTxEntry = txs.findEntry((tx) => this._deserializeTransaction(tx).data.nonce === newTx.data.nonce);
|
|
409
407
|
if (existingTxEntry === undefined) {
|
|
410
408
|
return;
|
|
411
409
|
}
|
|
412
410
|
const [existingTxIndex, existingTx] = existingTxEntry;
|
|
413
411
|
const deserializedExistingTx = this._deserializeTransaction(existingTx);
|
|
414
|
-
const currentMaxFeePerGas =
|
|
412
|
+
const currentMaxFeePerGas = "gasPrice" in deserializedExistingTx.data
|
|
415
413
|
? deserializedExistingTx.data.gasPrice
|
|
416
|
-
: deserializedExistingTx.data.maxFeePerGas
|
|
417
|
-
const currentPriorityFeePerGas =
|
|
414
|
+
: deserializedExistingTx.data.maxFeePerGas;
|
|
415
|
+
const currentPriorityFeePerGas = "gasPrice" in deserializedExistingTx.data
|
|
418
416
|
? deserializedExistingTx.data.gasPrice
|
|
419
|
-
: deserializedExistingTx.data.maxPriorityFeePerGas
|
|
420
|
-
const newMaxFeePerGas =
|
|
421
|
-
const newPriorityFeePerGas =
|
|
417
|
+
: deserializedExistingTx.data.maxPriorityFeePerGas;
|
|
418
|
+
const newMaxFeePerGas = "gasPrice" in newTx.data ? newTx.data.gasPrice : newTx.data.maxFeePerGas;
|
|
419
|
+
const newPriorityFeePerGas = "gasPrice" in newTx.data
|
|
422
420
|
? newTx.data.gasPrice
|
|
423
|
-
: newTx.data.maxPriorityFeePerGas
|
|
421
|
+
: newTx.data.maxPriorityFeePerGas;
|
|
424
422
|
const minNewMaxFeePerGas = this._getMinNewFeePrice(currentMaxFeePerGas);
|
|
425
423
|
const minNewPriorityFeePerGas = this._getMinNewFeePrice(currentPriorityFeePerGas);
|
|
426
|
-
if (newMaxFeePerGas
|
|
424
|
+
if (newMaxFeePerGas < minNewMaxFeePerGas) {
|
|
427
425
|
throw new errors_1.InvalidInputError(`Replacement transaction underpriced. A gasPrice/maxFeePerGas of at least ${minNewMaxFeePerGas.toString()} is necessary to replace the existing transaction with nonce ${newTx.data.nonce.toString()}.`);
|
|
428
426
|
}
|
|
429
|
-
if (newPriorityFeePerGas
|
|
427
|
+
if (newPriorityFeePerGas < minNewPriorityFeePerGas) {
|
|
430
428
|
throw new errors_1.InvalidInputError(`Replacement transaction underpriced. A gasPrice/maxPriorityFeePerGas of at least ${minNewPriorityFeePerGas.toString()} is necessary to replace the existing transaction with nonce ${newTx.data.nonce.toString()}.`);
|
|
431
429
|
}
|
|
432
430
|
const newTxs = txs.set(existingTxIndex, serializeTransaction(newTx));
|
|
@@ -434,12 +432,12 @@ class TxPool {
|
|
|
434
432
|
return newTxs;
|
|
435
433
|
}
|
|
436
434
|
_getMinNewFeePrice(feePrice) {
|
|
437
|
-
let minNewPriorityFee = feePrice
|
|
438
|
-
if (minNewPriorityFee
|
|
439
|
-
minNewPriorityFee = minNewPriorityFee
|
|
435
|
+
let minNewPriorityFee = feePrice * 110n;
|
|
436
|
+
if (minNewPriorityFee % 100n === 0n) {
|
|
437
|
+
minNewPriorityFee = minNewPriorityFee / 100n;
|
|
440
438
|
}
|
|
441
439
|
else {
|
|
442
|
-
minNewPriorityFee = minNewPriorityFee
|
|
440
|
+
minNewPriorityFee = minNewPriorityFee / 100n + 1n;
|
|
443
441
|
}
|
|
444
442
|
return minNewPriorityFee;
|
|
445
443
|
}
|