hardhat 3.3.0 → 3.4.1
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/CHANGELOG.md +69 -0
- package/dist/src/internal/builtin-plugins/artifacts/artifact-manager.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/artifacts/artifact-manager.js +6 -14
- package/dist/src/internal/builtin-plugins/artifacts/artifact-manager.js.map +1 -1
- package/dist/src/internal/builtin-plugins/artifacts/hook-handlers/hre.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/artifacts/hook-handlers/hre.js +10 -10
- package/dist/src/internal/builtin-plugins/artifacts/hook-handlers/hre.js.map +1 -1
- package/dist/src/internal/builtin-plugins/clean/index.js +1 -1
- package/dist/src/internal/builtin-plugins/clean/index.js.map +1 -1
- package/dist/src/internal/builtin-plugins/console/index.js +1 -1
- package/dist/src/internal/builtin-plugins/console/index.js.map +1 -1
- package/dist/src/internal/builtin-plugins/console/task-action.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/console/task-action.js +2 -1
- package/dist/src/internal/builtin-plugins/console/task-action.js.map +1 -1
- package/dist/src/internal/builtin-plugins/coverage/hook-handlers/solidity.js +2 -2
- package/dist/src/internal/builtin-plugins/coverage/hook-handlers/solidity.js.map +1 -1
- package/dist/src/internal/builtin-plugins/flatten/index.js +1 -1
- package/dist/src/internal/builtin-plugins/flatten/index.js.map +1 -1
- package/dist/src/internal/builtin-plugins/gas-analytics/exports.d.ts +1 -1
- package/dist/src/internal/builtin-plugins/gas-analytics/exports.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/gas-analytics/exports.js +1 -1
- package/dist/src/internal/builtin-plugins/gas-analytics/exports.js.map +1 -1
- package/dist/src/internal/builtin-plugins/gas-analytics/function-gas-snapshots.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/gas-analytics/function-gas-snapshots.js +1 -2
- package/dist/src/internal/builtin-plugins/gas-analytics/function-gas-snapshots.js.map +1 -1
- package/dist/src/internal/builtin-plugins/gas-analytics/gas-analytics-manager.d.ts +7 -5
- package/dist/src/internal/builtin-plugins/gas-analytics/gas-analytics-manager.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/gas-analytics/gas-analytics-manager.js +60 -44
- package/dist/src/internal/builtin-plugins/gas-analytics/gas-analytics-manager.js.map +1 -1
- package/dist/src/internal/builtin-plugins/gas-analytics/helpers/accessors.d.ts +6 -0
- package/dist/src/internal/builtin-plugins/gas-analytics/helpers/accessors.d.ts.map +1 -0
- package/dist/src/internal/builtin-plugins/gas-analytics/helpers/accessors.js +14 -0
- package/dist/src/internal/builtin-plugins/gas-analytics/helpers/accessors.js.map +1 -0
- package/dist/src/internal/builtin-plugins/gas-analytics/helpers/compat.d.ts +4 -0
- package/dist/src/internal/builtin-plugins/gas-analytics/helpers/compat.d.ts.map +1 -0
- package/dist/src/internal/builtin-plugins/gas-analytics/helpers/compat.js +27 -0
- package/dist/src/internal/builtin-plugins/gas-analytics/helpers/compat.js.map +1 -0
- package/dist/src/internal/builtin-plugins/gas-analytics/helpers/utils.d.ts +36 -0
- package/dist/src/internal/builtin-plugins/gas-analytics/helpers/utils.d.ts.map +1 -0
- package/dist/src/internal/builtin-plugins/gas-analytics/helpers/utils.js +86 -0
- package/dist/src/internal/builtin-plugins/gas-analytics/helpers/utils.js.map +1 -0
- package/dist/src/internal/builtin-plugins/gas-analytics/hook-handlers/hre.js +1 -1
- package/dist/src/internal/builtin-plugins/gas-analytics/hook-handlers/hre.js.map +1 -1
- package/dist/src/internal/builtin-plugins/gas-analytics/hook-handlers/test.js +1 -1
- package/dist/src/internal/builtin-plugins/gas-analytics/hook-handlers/test.js.map +1 -1
- package/dist/src/internal/builtin-plugins/gas-analytics/index.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/gas-analytics/index.js +2 -2
- package/dist/src/internal/builtin-plugins/gas-analytics/index.js.map +1 -1
- package/dist/src/internal/builtin-plugins/gas-analytics/snapshot-cheatcodes.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/gas-analytics/snapshot-cheatcodes.js +1 -2
- package/dist/src/internal/builtin-plugins/gas-analytics/snapshot-cheatcodes.js.map +1 -1
- package/dist/src/internal/builtin-plugins/gas-analytics/types.d.ts +10 -2
- package/dist/src/internal/builtin-plugins/gas-analytics/types.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.js +4 -4
- package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/edr/genesis-state.js +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/edr/genesis-state.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.d.ts +4 -4
- package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.js +2 -2
- package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.d.ts +6 -3
- package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.js +23 -5
- package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.js +3 -2
- package/dist/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/hre.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/hre.js +24 -2
- package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/hre.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/network.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/network.js +19 -11
- package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/network.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/http-provider.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/http-provider.js +2 -2
- package/dist/src/internal/builtin-plugins/network-manager/http-provider.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/network-manager.d.ts +11 -1
- package/dist/src/internal/builtin-plugins/network-manager/network-manager.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/network-manager.js +91 -24
- package/dist/src/internal/builtin-plugins/network-manager/network-manager.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/hd-wallet-handler.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/hd-wallet-handler.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.d.ts +1 -0
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.js +22 -8
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/sender.d.ts +2 -0
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/sender.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/sender.js +19 -12
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/sender.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/chain-id/chain-id-handler.d.ts +1 -0
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/chain-id/chain-id-handler.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/chain-id/chain-id-handler.js +9 -3
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/chain-id/chain-id-handler.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-handler.d.ts +2 -0
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-handler.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-handler.js +5 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-handler.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-price-handler.d.ts +1 -0
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-price-handler.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-price-handler.js +5 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-price-handler.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-handler.d.ts +1 -0
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-handler.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-handler.js +5 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-handler.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-price-handler.d.ts +1 -0
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-price-handler.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-price-handler.js +5 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-price-handler.js.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/types.d.ts +9 -0
- package/dist/src/internal/builtin-plugins/network-manager/request-handlers/types.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/revert-error-code.d.ts +2 -0
- package/dist/src/internal/builtin-plugins/network-manager/revert-error-code.d.ts.map +1 -0
- package/dist/src/internal/builtin-plugins/network-manager/revert-error-code.js +3 -0
- package/dist/src/internal/builtin-plugins/network-manager/revert-error-code.js.map +1 -0
- package/dist/src/internal/builtin-plugins/network-manager/type-extensions/config.d.ts +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/type-extensions/config.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/type-validation.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/network-manager/type-validation.js +2 -1
- package/dist/src/internal/builtin-plugins/network-manager/type-validation.js.map +1 -1
- package/dist/src/internal/builtin-plugins/node/helpers.js +1 -1
- package/dist/src/internal/builtin-plugins/node/helpers.js.map +1 -1
- package/dist/src/internal/builtin-plugins/node/index.js +1 -1
- package/dist/src/internal/builtin-plugins/node/index.js.map +1 -1
- package/dist/src/internal/builtin-plugins/node/json-rpc/handler.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/node/json-rpc/handler.js +8 -2
- package/dist/src/internal/builtin-plugins/node/json-rpc/handler.js.map +1 -1
- package/dist/src/internal/builtin-plugins/node/task-action.js +2 -2
- package/dist/src/internal/builtin-plugins/node/task-action.js.map +1 -1
- package/dist/src/internal/builtin-plugins/run/index.js +1 -1
- package/dist/src/internal/builtin-plugins/run/index.js.map +1 -1
- package/dist/src/internal/builtin-plugins/run/task-action.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/run/task-action.js +2 -1
- package/dist/src/internal/builtin-plugins/run/task-action.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/artifacts.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/artifacts.js +3 -0
- package/dist/src/internal/builtin-plugins/solidity/build-system/artifacts.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.d.ts +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.js +125 -39
- package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/cache.d.ts +2 -0
- package/dist/src/internal/builtin-plugins/solidity/build-system/cache.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/cache.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/compilation-job.d.ts +3 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/compilation-job.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/compilation-job.js +12 -4
- package/dist/src/internal/builtin-plugins/solidity/build-system/compilation-job.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/downloader.js +4 -4
- package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/downloader.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/index.js +2 -2
- package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/index.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/solcjs-runner.js +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/solcjs-runner.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/dependency-graph-building.js +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/dependency-graph-building.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/dependency-graph.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/dependency-graph.js +5 -5
- package/dist/src/internal/builtin-plugins/solidity/build-system/dependency-graph.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/read-source-file.js +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/read-source-file.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/resolver/dependency-resolver.js +10 -10
- package/dist/src/internal/builtin-plugins/solidity/build-system/resolver/dependency-resolver.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/resolver/remapped-npm-packages-graph.js +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/resolver/remapped-npm-packages-graph.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/solc-info.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/solc-info.js +1 -0
- package/dist/src/internal/builtin-plugins/solidity/build-system/solc-info.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/build-system/warning-suppression.js +2 -2
- package/dist/src/internal/builtin-plugins/solidity/build-system/warning-suppression.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/config.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/config.js +19 -16
- package/dist/src/internal/builtin-plugins/solidity/config.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/constants.d.ts +3 -0
- package/dist/src/internal/builtin-plugins/solidity/constants.d.ts.map +1 -0
- package/dist/src/internal/builtin-plugins/solidity/constants.js +19 -0
- package/dist/src/internal/builtin-plugins/solidity/constants.js.map +1 -0
- package/dist/src/internal/builtin-plugins/solidity/hook-handlers/config.js +1 -1
- package/dist/src/internal/builtin-plugins/solidity/hook-handlers/config.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/hook-handlers/hre.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/hook-handlers/hre.js +10 -10
- package/dist/src/internal/builtin-plugins/solidity/hook-handlers/hre.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/index.js +1 -1
- package/dist/src/internal/builtin-plugins/solidity/index.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/solidity-hooks.js +1 -1
- package/dist/src/internal/builtin-plugins/solidity/solidity-hooks.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/tasks/build.d.ts +1 -1
- package/dist/src/internal/builtin-plugins/solidity/tasks/build.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/tasks/build.js +225 -55
- package/dist/src/internal/builtin-plugins/solidity/tasks/build.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/type-extensions.d.ts +30 -4
- package/dist/src/internal/builtin-plugins/solidity/type-extensions.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity/type-extensions.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/config.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/config.js +5 -3
- package/dist/src/internal/builtin-plugins/solidity-test/config.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/edr-artifacts.js +2 -2
- package/dist/src/internal/builtin-plugins/solidity-test/edr-artifacts.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/helpers.d.ts +0 -2
- package/dist/src/internal/builtin-plugins/solidity-test/helpers.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/helpers.js +0 -3
- package/dist/src/internal/builtin-plugins/solidity-test/helpers.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/hook-handlers/config.js +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/hook-handlers/config.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/hook-handlers/test.js +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/hook-handlers/test.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/index.js +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/index.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/reporter.js +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/reporter.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/runner.d.ts +2 -8
- package/dist/src/internal/builtin-plugins/solidity-test/runner.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/runner.js +47 -50
- package/dist/src/internal/builtin-plugins/solidity-test/runner.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/stack-trace-solidity-errors.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/stack-trace-solidity-errors.js +11 -2
- package/dist/src/internal/builtin-plugins/solidity-test/stack-trace-solidity-errors.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/task-action.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/task-action.js +108 -32
- package/dist/src/internal/builtin-plugins/solidity-test/task-action.js.map +1 -1
- package/dist/src/internal/builtin-plugins/solidity-test/type-extensions.d.ts +1 -2
- package/dist/src/internal/builtin-plugins/solidity-test/type-extensions.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/telemetry/index.js +1 -1
- package/dist/src/internal/builtin-plugins/telemetry/index.js.map +1 -1
- package/dist/src/internal/builtin-plugins/test/hook-handlers/config.js +1 -1
- package/dist/src/internal/builtin-plugins/test/hook-handlers/config.js.map +1 -1
- package/dist/src/internal/builtin-plugins/test/index.js +1 -1
- package/dist/src/internal/builtin-plugins/test/index.js.map +1 -1
- package/dist/src/internal/builtin-plugins/test/task-action.d.ts.map +1 -1
- package/dist/src/internal/builtin-plugins/test/task-action.js +3 -4
- package/dist/src/internal/builtin-plugins/test/task-action.js.map +1 -1
- package/dist/src/internal/cli/init/init.js +1 -1
- package/dist/src/internal/cli/init/init.js.map +1 -1
- package/dist/src/internal/cli/main.d.ts.map +1 -1
- package/dist/src/internal/cli/main.js +12 -2
- package/dist/src/internal/cli/main.js.map +1 -1
- package/dist/src/internal/cli/node-version.d.ts.map +1 -1
- package/dist/src/internal/cli/node-version.js +3 -0
- package/dist/src/internal/cli/node-version.js.map +1 -1
- package/dist/src/internal/cli/telemetry/analytics/analytics.js +2 -2
- package/dist/src/internal/cli/telemetry/analytics/analytics.js.map +1 -1
- package/dist/src/internal/cli/telemetry/error-reporter/global-error-handlers.d.ts +6 -0
- package/dist/src/internal/cli/telemetry/error-reporter/global-error-handlers.d.ts.map +1 -0
- package/dist/src/internal/cli/telemetry/error-reporter/global-error-handlers.js +47 -0
- package/dist/src/internal/cli/telemetry/error-reporter/global-error-handlers.js.map +1 -0
- package/dist/src/internal/cli/telemetry/error-reporter/reporter.d.ts +27 -0
- package/dist/src/internal/cli/telemetry/error-reporter/reporter.d.ts.map +1 -0
- package/dist/src/internal/cli/telemetry/error-reporter/reporter.js +40 -0
- package/dist/src/internal/cli/telemetry/error-reporter/reporter.js.map +1 -0
- package/dist/src/internal/cli/telemetry/sentry/anonymizer.js +1 -1
- package/dist/src/internal/cli/telemetry/sentry/anonymizer.js.map +1 -1
- package/dist/src/internal/cli/telemetry/sentry/init.d.ts +0 -8
- package/dist/src/internal/cli/telemetry/sentry/init.d.ts.map +1 -1
- package/dist/src/internal/cli/telemetry/sentry/init.js +1 -37
- package/dist/src/internal/cli/telemetry/sentry/init.js.map +1 -1
- package/dist/src/internal/cli/telemetry/sentry/reporter.d.ts +8 -2
- package/dist/src/internal/cli/telemetry/sentry/reporter.d.ts.map +1 -1
- package/dist/src/internal/cli/telemetry/sentry/reporter.js +18 -12
- package/dist/src/internal/cli/telemetry/sentry/reporter.js.map +1 -1
- package/dist/src/internal/cli/telemetry/sentry/transport.js +1 -1
- package/dist/src/internal/cli/telemetry/sentry/transport.js.map +1 -1
- package/dist/src/internal/cli/telemetry/telemetry-permissions.js +1 -1
- package/dist/src/internal/cli/telemetry/telemetry-permissions.js.map +1 -1
- package/dist/src/internal/config-loading.js +3 -3
- package/dist/src/internal/config-loading.js.map +1 -1
- package/dist/src/internal/core/configuration-variables.d.ts.map +1 -1
- package/dist/src/internal/core/configuration-variables.js +1 -1
- package/dist/src/internal/core/configuration-variables.js.map +1 -1
- package/dist/src/internal/core/hook-manager.js +3 -3
- package/dist/src/internal/core/hook-manager.js.map +1 -1
- package/dist/src/internal/core/hre.d.ts.map +1 -1
- package/dist/src/internal/core/hre.js +3 -3
- package/dist/src/internal/core/hre.js.map +1 -1
- package/dist/src/internal/core/plugins/resolve-plugin-list.js +1 -1
- package/dist/src/internal/core/plugins/resolve-plugin-list.js.map +1 -1
- package/dist/src/internal/core/tasks/resolved-task.js +4 -4
- package/dist/src/internal/core/tasks/resolved-task.js.map +1 -1
- package/dist/src/internal/core/user-interruptions.js +9 -9
- package/dist/src/internal/core/user-interruptions.js.map +1 -1
- package/dist/src/internal/hre-initialization.js +1 -1
- package/dist/src/internal/hre-initialization.js.map +1 -1
- package/dist/src/types/artifacts.d.ts +5 -4
- package/dist/src/types/artifacts.d.ts.map +1 -1
- package/dist/src/types/network.d.ts +39 -0
- package/dist/src/types/network.d.ts.map +1 -1
- package/dist/src/types/solidity/build-system.d.ts +66 -3
- package/dist/src/types/solidity/build-system.d.ts.map +1 -1
- package/dist/src/types/solidity/build-system.js.map +1 -1
- package/dist/src/types/solidity/compilation-job.d.ts +6 -0
- package/dist/src/types/solidity/compilation-job.d.ts.map +1 -1
- package/dist/src/types/solidity/solidity-artifacts.d.ts +14 -0
- package/dist/src/types/solidity/solidity-artifacts.d.ts.map +1 -1
- package/package.json +9 -9
- package/src/internal/builtin-plugins/artifacts/artifact-manager.ts +10 -16
- package/src/internal/builtin-plugins/artifacts/hook-handlers/hre.ts +16 -10
- package/src/internal/builtin-plugins/clean/index.ts +1 -1
- package/src/internal/builtin-plugins/console/index.ts +1 -1
- package/src/internal/builtin-plugins/console/task-action.ts +2 -1
- package/src/internal/builtin-plugins/coverage/hook-handlers/solidity.ts +2 -2
- package/src/internal/builtin-plugins/flatten/index.ts +1 -1
- package/src/internal/builtin-plugins/gas-analytics/exports.ts +1 -1
- package/src/internal/builtin-plugins/gas-analytics/function-gas-snapshots.ts +1 -2
- package/src/internal/builtin-plugins/gas-analytics/gas-analytics-manager.ts +100 -61
- package/src/internal/builtin-plugins/gas-analytics/helpers/accessors.ts +31 -0
- package/src/internal/builtin-plugins/gas-analytics/helpers/compat.ts +37 -0
- package/src/internal/builtin-plugins/gas-analytics/helpers/utils.ts +112 -0
- package/src/internal/builtin-plugins/gas-analytics/hook-handlers/hre.ts +1 -1
- package/src/internal/builtin-plugins/gas-analytics/hook-handlers/test.ts +1 -1
- package/src/internal/builtin-plugins/gas-analytics/index.ts +4 -2
- package/src/internal/builtin-plugins/gas-analytics/snapshot-cheatcodes.ts +1 -2
- package/src/internal/builtin-plugins/gas-analytics/types.ts +11 -2
- package/src/internal/builtin-plugins/network-manager/edr/edr-provider.ts +4 -4
- package/src/internal/builtin-plugins/network-manager/edr/genesis-state.ts +1 -1
- package/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.ts +4 -0
- package/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.ts +28 -4
- package/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.ts +3 -2
- package/src/internal/builtin-plugins/network-manager/hook-handlers/hre.ts +31 -2
- package/src/internal/builtin-plugins/network-manager/hook-handlers/network.ts +22 -16
- package/src/internal/builtin-plugins/network-manager/http-provider.ts +6 -2
- package/src/internal/builtin-plugins/network-manager/network-manager.ts +139 -32
- package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/hd-wallet-handler.ts +1 -0
- package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.ts +30 -13
- package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/sender.ts +25 -17
- package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/chain-id/chain-id-handler.ts +13 -5
- package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-handler.ts +7 -1
- package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-price-handler.ts +7 -1
- package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-handler.ts +7 -1
- package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-price-handler.ts +7 -1
- package/src/internal/builtin-plugins/network-manager/request-handlers/types.ts +10 -0
- package/src/internal/builtin-plugins/network-manager/revert-error-code.ts +2 -0
- package/src/internal/builtin-plugins/network-manager/type-extensions/config.ts +1 -1
- package/src/internal/builtin-plugins/network-manager/type-validation.ts +5 -1
- package/src/internal/builtin-plugins/node/helpers.ts +1 -1
- package/src/internal/builtin-plugins/node/index.ts +1 -1
- package/src/internal/builtin-plugins/node/json-rpc/handler.ts +10 -2
- package/src/internal/builtin-plugins/node/task-action.ts +2 -2
- package/src/internal/builtin-plugins/run/index.ts +1 -1
- package/src/internal/builtin-plugins/run/task-action.ts +2 -1
- package/src/internal/builtin-plugins/solidity/build-system/artifacts.ts +3 -0
- package/src/internal/builtin-plugins/solidity/build-system/build-system.ts +176 -45
- package/src/internal/builtin-plugins/solidity/build-system/cache.ts +2 -0
- package/src/internal/builtin-plugins/solidity/build-system/compilation-job.ts +16 -10
- package/src/internal/builtin-plugins/solidity/build-system/compiler/downloader.ts +4 -4
- package/src/internal/builtin-plugins/solidity/build-system/compiler/index.ts +2 -2
- package/src/internal/builtin-plugins/solidity/build-system/compiler/solcjs-runner.ts +1 -1
- package/src/internal/builtin-plugins/solidity/build-system/dependency-graph-building.ts +1 -1
- package/src/internal/builtin-plugins/solidity/build-system/dependency-graph.ts +9 -7
- package/src/internal/builtin-plugins/solidity/build-system/read-source-file.ts +2 -2
- package/src/internal/builtin-plugins/solidity/build-system/resolver/dependency-resolver.ts +11 -11
- package/src/internal/builtin-plugins/solidity/build-system/resolver/remapped-npm-packages-graph.ts +1 -1
- package/src/internal/builtin-plugins/solidity/build-system/solc-info.ts +1 -0
- package/src/internal/builtin-plugins/solidity/build-system/warning-suppression.ts +2 -2
- package/src/internal/builtin-plugins/solidity/config.ts +23 -13
- package/src/internal/builtin-plugins/solidity/constants.ts +21 -0
- package/src/internal/builtin-plugins/solidity/hook-handlers/config.ts +1 -1
- package/src/internal/builtin-plugins/solidity/hook-handlers/hre.ts +14 -10
- package/src/internal/builtin-plugins/solidity/index.ts +1 -1
- package/src/internal/builtin-plugins/solidity/solidity-hooks.ts +1 -1
- package/src/internal/builtin-plugins/solidity/tasks/build.ts +359 -74
- package/src/internal/builtin-plugins/solidity/type-extensions.ts +38 -8
- package/src/internal/builtin-plugins/solidity-test/config.ts +11 -2
- package/src/internal/builtin-plugins/solidity-test/edr-artifacts.ts +2 -2
- package/src/internal/builtin-plugins/solidity-test/helpers.ts +0 -7
- package/src/internal/builtin-plugins/solidity-test/hook-handlers/config.ts +1 -1
- package/src/internal/builtin-plugins/solidity-test/hook-handlers/test.ts +1 -1
- package/src/internal/builtin-plugins/solidity-test/index.ts +1 -1
- package/src/internal/builtin-plugins/solidity-test/reporter.ts +1 -1
- package/src/internal/builtin-plugins/solidity-test/runner.ts +64 -83
- package/src/internal/builtin-plugins/solidity-test/stack-trace-solidity-errors.ts +15 -2
- package/src/internal/builtin-plugins/solidity-test/task-action.ts +161 -43
- package/src/internal/builtin-plugins/solidity-test/type-extensions.ts +1 -2
- package/src/internal/builtin-plugins/telemetry/index.ts +1 -1
- package/src/internal/builtin-plugins/test/hook-handlers/config.ts +1 -1
- package/src/internal/builtin-plugins/test/index.ts +1 -1
- package/src/internal/builtin-plugins/test/task-action.ts +3 -4
- package/src/internal/cli/init/init.ts +1 -1
- package/src/internal/cli/main.ts +19 -3
- package/src/internal/cli/node-version.ts +3 -0
- package/src/internal/cli/telemetry/analytics/analytics.ts +2 -2
- package/src/internal/cli/telemetry/error-reporter/global-error-handlers.ts +64 -0
- package/src/internal/cli/telemetry/error-reporter/reporter.ts +49 -0
- package/src/internal/cli/telemetry/sentry/anonymizer.ts +1 -1
- package/src/internal/cli/telemetry/sentry/init.ts +2 -62
- package/src/internal/cli/telemetry/sentry/reporter.ts +27 -15
- package/src/internal/cli/telemetry/sentry/transport.ts +1 -1
- package/src/internal/cli/telemetry/telemetry-permissions.ts +1 -1
- package/src/internal/config-loading.ts +3 -3
- package/src/internal/core/configuration-variables.ts +19 -18
- package/src/internal/core/hook-manager.ts +3 -3
- package/src/internal/core/hre.ts +5 -3
- package/src/internal/core/plugins/resolve-plugin-list.ts +1 -1
- package/src/internal/core/tasks/resolved-task.ts +4 -4
- package/src/internal/core/user-interruptions.ts +9 -9
- package/src/internal/hre-initialization.ts +1 -1
- package/src/types/artifacts.ts +5 -4
- package/src/types/network.ts +48 -0
- package/src/types/solidity/build-system.ts +66 -3
- package/src/types/solidity/compilation-job.ts +7 -0
- package/src/types/solidity/solidity-artifacts.ts +16 -0
- package/templates/hardhat-2/04-mocha-viem-ts/package.json +1 -1
- package/templates/hardhat-3/01-node-test-runner-viem/gitignore +11 -0
- package/templates/hardhat-3/01-node-test-runner-viem/package.json +12 -12
- package/templates/hardhat-3/01-node-test-runner-viem/scripts/send-op-tx.ts +1 -1
- package/templates/hardhat-3/01-node-test-runner-viem/test/Counter.ts +1 -1
- package/templates/hardhat-3/02-mocha-ethers/gitignore +11 -0
- package/templates/hardhat-3/02-mocha-ethers/package.json +14 -14
- package/templates/hardhat-3/02-mocha-ethers/scripts/send-op-tx.ts +1 -1
- package/templates/hardhat-3/02-mocha-ethers/test/Counter.ts +1 -1
- package/templates/hardhat-3/03-minimal/gitignore +11 -0
- package/templates/hardhat-3/03-minimal/package.json +1 -1
- package/dist/src/internal/builtin-plugins/gas-analytics/helpers.d.ts +0 -14
- package/dist/src/internal/builtin-plugins/gas-analytics/helpers.d.ts.map +0 -1
- package/dist/src/internal/builtin-plugins/gas-analytics/helpers.js +0 -55
- package/dist/src/internal/builtin-plugins/gas-analytics/helpers.js.map +0 -1
- package/src/internal/builtin-plugins/gas-analytics/helpers.ts +0 -96
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
ContractGasStatsJson,
|
|
3
|
+
DeploymentGasStatsJsonEntry,
|
|
3
4
|
GasAnalyticsManager,
|
|
4
5
|
GasMeasurement,
|
|
5
6
|
GasStatsJson,
|
|
@@ -10,7 +11,10 @@ import type { TableItem } from "@nomicfoundation/hardhat-utils/format";
|
|
|
10
11
|
import crypto from "node:crypto";
|
|
11
12
|
import path from "node:path";
|
|
12
13
|
|
|
13
|
-
import {
|
|
14
|
+
import {
|
|
15
|
+
HardhatError,
|
|
16
|
+
assertHardhatInvariant,
|
|
17
|
+
} from "@nomicfoundation/hardhat-errors";
|
|
14
18
|
import { formatTable } from "@nomicfoundation/hardhat-utils/format";
|
|
15
19
|
import {
|
|
16
20
|
ensureDir,
|
|
@@ -27,12 +31,27 @@ import debug from "debug";
|
|
|
27
31
|
|
|
28
32
|
import { parseFullyQualifiedName } from "../../../utils/contract-names.js";
|
|
29
33
|
|
|
34
|
+
import {
|
|
35
|
+
avg,
|
|
36
|
+
getDisplayKey,
|
|
37
|
+
getFunctionName,
|
|
38
|
+
getProxyLabel,
|
|
39
|
+
getUserFqn,
|
|
40
|
+
makeGroupKey,
|
|
41
|
+
median,
|
|
42
|
+
} from "./helpers/utils.js";
|
|
43
|
+
|
|
30
44
|
const gasStatsLog = debug(
|
|
31
45
|
"hardhat:core:gas-analytics:gas-analytics-manager:gas-stats",
|
|
32
46
|
);
|
|
33
47
|
|
|
48
|
+
interface DeploymentGasStats extends GasStats {
|
|
49
|
+
runtimeSize: number;
|
|
50
|
+
}
|
|
51
|
+
|
|
34
52
|
interface ContractGasStats {
|
|
35
|
-
|
|
53
|
+
proxyChain: string[];
|
|
54
|
+
deployment?: DeploymentGasStats;
|
|
36
55
|
functions: Map<
|
|
37
56
|
string, // function name or signature (if overloaded)
|
|
38
57
|
GasStats
|
|
@@ -52,7 +71,9 @@ interface GasStats {
|
|
|
52
71
|
type GasMeasurementsByContract = Map<string, ContractGasMeasurements>;
|
|
53
72
|
|
|
54
73
|
interface ContractGasMeasurements {
|
|
74
|
+
proxyChain: string[];
|
|
55
75
|
deployments: number[];
|
|
76
|
+
deploymentRuntimeSize?: number;
|
|
56
77
|
functions: Map<
|
|
57
78
|
string, // functionSig
|
|
58
79
|
number[]
|
|
@@ -170,18 +191,25 @@ export class GasAnalyticsManagerImplementation implements GasAnalyticsManager {
|
|
|
170
191
|
const gasStatsByContract: GasStatsByContract = new Map();
|
|
171
192
|
const measurementsByContract = this._aggregateGasMeasurements();
|
|
172
193
|
|
|
173
|
-
for (const [
|
|
194
|
+
for (const [groupKey, measurements] of measurementsByContract) {
|
|
174
195
|
const contractGasStats: ContractGasStats = {
|
|
196
|
+
proxyChain: measurements.proxyChain,
|
|
175
197
|
functions: new Map(),
|
|
176
198
|
};
|
|
177
199
|
|
|
178
200
|
if (measurements.deployments.length > 0) {
|
|
201
|
+
assertHardhatInvariant(
|
|
202
|
+
measurements.deploymentRuntimeSize !== undefined,
|
|
203
|
+
"deploymentRuntimeSize must be set when deployments exist",
|
|
204
|
+
);
|
|
205
|
+
|
|
179
206
|
contractGasStats.deployment = {
|
|
180
207
|
min: Math.min(...measurements.deployments),
|
|
181
208
|
max: Math.max(...measurements.deployments),
|
|
182
209
|
avg: Math.round(avg(measurements.deployments)),
|
|
183
210
|
median: Math.round(median(measurements.deployments)),
|
|
184
211
|
count: measurements.deployments.length,
|
|
212
|
+
runtimeSize: measurements.deploymentRuntimeSize,
|
|
185
213
|
};
|
|
186
214
|
}
|
|
187
215
|
|
|
@@ -207,7 +235,20 @@ export class GasAnalyticsManagerImplementation implements GasAnalyticsManager {
|
|
|
207
235
|
);
|
|
208
236
|
}
|
|
209
237
|
|
|
210
|
-
gasStatsByContract.set(
|
|
238
|
+
gasStatsByContract.set(groupKey, contractGasStats);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// Duplicate deployment stats from direct-call groups to proxied groups
|
|
242
|
+
for (const [groupKey, stats] of gasStatsByContract) {
|
|
243
|
+
if (stats.proxyChain.length > 0 && stats.deployment === undefined) {
|
|
244
|
+
// Extract contractFqn from the groupKey (everything before the first \0)
|
|
245
|
+
const contractFqn = groupKey.split("\0")[0];
|
|
246
|
+
const directKey = makeGroupKey(contractFqn, []);
|
|
247
|
+
const directStats = gasStatsByContract.get(directKey);
|
|
248
|
+
if (directStats?.deployment !== undefined) {
|
|
249
|
+
stats.deployment = directStats.deployment;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
211
252
|
}
|
|
212
253
|
|
|
213
254
|
return gasStatsByContract;
|
|
@@ -220,22 +261,28 @@ export class GasAnalyticsManagerImplementation implements GasAnalyticsManager {
|
|
|
220
261
|
const measurementsByContract: GasMeasurementsByContract = new Map();
|
|
221
262
|
|
|
222
263
|
for (const currentMeasurement of this.gasMeasurements) {
|
|
223
|
-
|
|
224
|
-
currentMeasurement.
|
|
225
|
-
|
|
264
|
+
const proxyChain =
|
|
265
|
+
currentMeasurement.type === "function"
|
|
266
|
+
? currentMeasurement.proxyChain
|
|
267
|
+
: [];
|
|
268
|
+
const groupKey = makeGroupKey(currentMeasurement.contractFqn, proxyChain);
|
|
269
|
+
|
|
270
|
+
let contractMeasurements = measurementsByContract.get(groupKey);
|
|
226
271
|
if (contractMeasurements === undefined) {
|
|
227
272
|
contractMeasurements = {
|
|
273
|
+
proxyChain,
|
|
228
274
|
deployments: [],
|
|
229
275
|
functions: new Map(),
|
|
230
276
|
};
|
|
231
|
-
measurementsByContract.set(
|
|
232
|
-
currentMeasurement.contractFqn,
|
|
233
|
-
contractMeasurements,
|
|
234
|
-
);
|
|
277
|
+
measurementsByContract.set(groupKey, contractMeasurements);
|
|
235
278
|
}
|
|
236
279
|
|
|
237
280
|
if (currentMeasurement.type === "deployment") {
|
|
238
281
|
contractMeasurements.deployments.push(currentMeasurement.gas);
|
|
282
|
+
if (contractMeasurements.deploymentRuntimeSize === undefined) {
|
|
283
|
+
contractMeasurements.deploymentRuntimeSize =
|
|
284
|
+
currentMeasurement.runtimeSize;
|
|
285
|
+
}
|
|
239
286
|
} else {
|
|
240
287
|
let measurements = contractMeasurements.functions.get(
|
|
241
288
|
currentMeasurement.functionSig,
|
|
@@ -267,15 +314,16 @@ export class GasAnalyticsManagerImplementation implements GasAnalyticsManager {
|
|
|
267
314
|
rows.push({ type: "title", text: chalk.bold("Gas Usage Statistics") });
|
|
268
315
|
}
|
|
269
316
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
317
|
+
const sortedContracts = getSortedContractEntries(gasStatsByContract);
|
|
318
|
+
for (const {
|
|
319
|
+
userFqn,
|
|
320
|
+
proxyLabel,
|
|
321
|
+
stats: contractGasStats,
|
|
322
|
+
} of sortedContracts) {
|
|
276
323
|
rows.push({
|
|
277
324
|
type: "section-header",
|
|
278
|
-
text: chalk.cyan.bold(
|
|
325
|
+
text: chalk.cyan.bold(userFqn),
|
|
326
|
+
subtitle: proxyLabel !== undefined ? chalk.cyan(proxyLabel) : undefined,
|
|
279
327
|
});
|
|
280
328
|
|
|
281
329
|
if (contractGasStats.functions.size > 0) {
|
|
@@ -337,6 +385,13 @@ export class GasAnalyticsManagerImplementation implements GasAnalyticsManager {
|
|
|
337
385
|
`${contractGasStats.deployment.count}`,
|
|
338
386
|
],
|
|
339
387
|
});
|
|
388
|
+
rows.push({
|
|
389
|
+
type: "header",
|
|
390
|
+
cells: [
|
|
391
|
+
chalk.yellow("Bytecode size"),
|
|
392
|
+
`${contractGasStats.deployment.runtimeSize}`,
|
|
393
|
+
],
|
|
394
|
+
});
|
|
340
395
|
}
|
|
341
396
|
}
|
|
342
397
|
|
|
@@ -349,19 +404,13 @@ export class GasAnalyticsManagerImplementation implements GasAnalyticsManager {
|
|
|
349
404
|
public _generateGasStatsJson(
|
|
350
405
|
gasStatsByContract: GasStatsByContract,
|
|
351
406
|
): GasStatsJson {
|
|
352
|
-
const sortedContracts =
|
|
353
|
-
.map(([internalFqn, stats]) => ({
|
|
354
|
-
userFqn: getUserFqn(internalFqn),
|
|
355
|
-
stats,
|
|
356
|
-
}))
|
|
357
|
-
.sort((a, b) => a.userFqn.localeCompare(b.userFqn));
|
|
358
|
-
|
|
407
|
+
const sortedContracts = getSortedContractEntries(gasStatsByContract);
|
|
359
408
|
const contracts: Record<string, ContractGasStatsJson> = {};
|
|
360
409
|
|
|
361
|
-
for (const { userFqn, stats } of sortedContracts) {
|
|
410
|
+
for (const { userFqn, displayKey, stats } of sortedContracts) {
|
|
362
411
|
const { sourceName, contractName } = parseFullyQualifiedName(userFqn);
|
|
363
412
|
|
|
364
|
-
const deployment:
|
|
413
|
+
const deployment: DeploymentGasStatsJsonEntry | null =
|
|
365
414
|
stats.deployment !== undefined ? { ...stats.deployment } : null;
|
|
366
415
|
|
|
367
416
|
let functions: Record<string, GasStatsJsonEntry> | null = null;
|
|
@@ -377,44 +426,34 @@ export class GasAnalyticsManagerImplementation implements GasAnalyticsManager {
|
|
|
377
426
|
functions = Object.fromEntries(sortedFunctions);
|
|
378
427
|
}
|
|
379
428
|
|
|
380
|
-
contracts[
|
|
429
|
+
contracts[displayKey] = {
|
|
430
|
+
sourceName,
|
|
431
|
+
contractName,
|
|
432
|
+
proxyChain: stats.proxyChain.map(getUserFqn),
|
|
433
|
+
deployment,
|
|
434
|
+
functions,
|
|
435
|
+
};
|
|
381
436
|
}
|
|
382
437
|
|
|
383
438
|
return { contracts };
|
|
384
439
|
}
|
|
385
440
|
}
|
|
386
441
|
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
return
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
if (inputFqn.startsWith("npm/")) {
|
|
406
|
-
const withoutPrefix = inputFqn.slice("npm/".length);
|
|
407
|
-
// Match "<pkg>@<version>/<rest>", where <pkg> may be scoped (@scope/pkg)
|
|
408
|
-
const match = withoutPrefix.match(/^(@?[^@/]+(?:\/[^@/]+)*)@[^/]+\/(.*)$/);
|
|
409
|
-
if (match !== null) {
|
|
410
|
-
return `${match[1]}/${match[2]}`;
|
|
411
|
-
}
|
|
412
|
-
return withoutPrefix;
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
return inputFqn;
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
export function getFunctionName(signature: string): string {
|
|
419
|
-
return signature.split("(")[0];
|
|
442
|
+
function getSortedContractEntries(
|
|
443
|
+
gasStatsByContract: GasStatsByContract,
|
|
444
|
+
): Array<{
|
|
445
|
+
userFqn: string;
|
|
446
|
+
displayKey: string;
|
|
447
|
+
proxyLabel: string | undefined;
|
|
448
|
+
stats: ContractGasStats;
|
|
449
|
+
}> {
|
|
450
|
+
return [...gasStatsByContract.entries()]
|
|
451
|
+
.map(([groupKey, stats]) => {
|
|
452
|
+
const contractFqn = groupKey.split("\0")[0];
|
|
453
|
+
const userFqn = getUserFqn(contractFqn);
|
|
454
|
+
const displayKey = getDisplayKey(userFqn, stats.proxyChain);
|
|
455
|
+
const proxyLabel = getProxyLabel(stats.proxyChain);
|
|
456
|
+
return { userFqn, displayKey, proxyLabel, stats };
|
|
457
|
+
})
|
|
458
|
+
.sort((a, b) => a.displayKey.localeCompare(b.displayKey));
|
|
420
459
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { HookContext } from "../../../../types/hooks.js";
|
|
2
|
+
import type { HardhatRuntimeEnvironment } from "../../../../types/hre.js";
|
|
3
|
+
import type { GasAnalyticsManager } from "../types.js";
|
|
4
|
+
|
|
5
|
+
import { assertHardhatInvariant } from "@nomicfoundation/hardhat-errors";
|
|
6
|
+
|
|
7
|
+
import { HardhatRuntimeEnvironmentImplementation } from "../../../core/hre.js";
|
|
8
|
+
import { GasAnalyticsManagerImplementation } from "../gas-analytics-manager.js";
|
|
9
|
+
|
|
10
|
+
export function getGasAnalyticsManager(
|
|
11
|
+
hookContextOrHre: HookContext | HardhatRuntimeEnvironment,
|
|
12
|
+
): GasAnalyticsManager {
|
|
13
|
+
assertHardhatInvariant(
|
|
14
|
+
"_gasAnalytics" in hookContextOrHre &&
|
|
15
|
+
hookContextOrHre._gasAnalytics instanceof
|
|
16
|
+
GasAnalyticsManagerImplementation,
|
|
17
|
+
"Expected _gasAnalytics to be an instance of GasAnalyticsManagerImplementation",
|
|
18
|
+
);
|
|
19
|
+
return hookContextOrHre._gasAnalytics;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function setGasAnalyticsManager(
|
|
23
|
+
hre: HardhatRuntimeEnvironment,
|
|
24
|
+
gasAnalyticsManager: GasAnalyticsManager,
|
|
25
|
+
): void {
|
|
26
|
+
assertHardhatInvariant(
|
|
27
|
+
hre instanceof HardhatRuntimeEnvironmentImplementation,
|
|
28
|
+
"Expected HRE to be an instance of HardhatRuntimeEnvironmentImplementation",
|
|
29
|
+
);
|
|
30
|
+
hre._gasAnalytics = gasAnalyticsManager;
|
|
31
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { HardhatRuntimeEnvironment } from "../../../../types/hre.js";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
testRunDone,
|
|
5
|
+
testRunStart,
|
|
6
|
+
testWorkerDone,
|
|
7
|
+
} from "../hook-handlers/test.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* The following helpers are kept for backward compatibility with older versions
|
|
11
|
+
* of test runner plugins (hardhat-mocha, hardhat-node-test-runner) that import
|
|
12
|
+
* from "hardhat/internal/gas-analytics".
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
let cachedHre: HardhatRuntimeEnvironment | undefined;
|
|
16
|
+
async function getHre(): Promise<HardhatRuntimeEnvironment> {
|
|
17
|
+
if (cachedHre === undefined) {
|
|
18
|
+
const { default: hre } = await import("../../../../index.js");
|
|
19
|
+
cachedHre = hre;
|
|
20
|
+
}
|
|
21
|
+
return cachedHre;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export async function markTestRunStart(id: string): Promise<void> {
|
|
25
|
+
const hre = await getHre();
|
|
26
|
+
await testRunStart(hre, id);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export async function markTestWorkerDone(id: string): Promise<void> {
|
|
30
|
+
const hre = await getHre();
|
|
31
|
+
await testWorkerDone(hre, id);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export async function markTestRunDone(id: string): Promise<void> {
|
|
35
|
+
const hre = await getHre();
|
|
36
|
+
await testRunDone(hre, id);
|
|
37
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Converts an internal FQN (e.g. `"project/contracts/Foo.sol:Foo"` or
|
|
5
|
+
* `"npm/@oz/contracts@5.0.0/token/ERC20.sol:ERC20"`) to its user-friendly
|
|
6
|
+
* form by stripping the `project/` prefix or npm version segment.
|
|
7
|
+
*/
|
|
8
|
+
export function getUserFqn(inputFqn: string): string {
|
|
9
|
+
if (inputFqn.startsWith("project/")) {
|
|
10
|
+
return inputFqn.slice("project/".length);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
if (inputFqn.startsWith("npm/")) {
|
|
14
|
+
const withoutPrefix = inputFqn.slice("npm/".length);
|
|
15
|
+
// Match "<pkg>@<version>/<rest>", where <pkg> may be scoped (@scope/pkg)
|
|
16
|
+
const match = withoutPrefix.match(/^(@?[^@/]+(?:\/[^@/]+)*)@[^/]+\/(.*)$/);
|
|
17
|
+
if (match !== null) {
|
|
18
|
+
return `${match[1]}/${match[2]}`;
|
|
19
|
+
}
|
|
20
|
+
return withoutPrefix;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return inputFqn;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Extracts the function name from a Solidity function signature
|
|
28
|
+
* (e.g. `"transfer(address,uint256)"` → `"transfer"`).
|
|
29
|
+
*/
|
|
30
|
+
export function getFunctionName(signature: string): string {
|
|
31
|
+
return signature.split("(")[0];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Builds a deterministic string key for grouping gas measurements by
|
|
36
|
+
* (contractFqn, proxyChain). Uses null-byte separators to avoid collisions.
|
|
37
|
+
*/
|
|
38
|
+
export function makeGroupKey(
|
|
39
|
+
contractFqn: string,
|
|
40
|
+
proxyChain: string[],
|
|
41
|
+
): string {
|
|
42
|
+
if (proxyChain.length === 0) {
|
|
43
|
+
return contractFqn;
|
|
44
|
+
}
|
|
45
|
+
return contractFqn + "\0" + proxyChain.join("\0");
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Returns a human-readable proxy label like `"(via Proxy2 → Proxy)"`,
|
|
50
|
+
* or `undefined` for direct calls. Strips the last element (the
|
|
51
|
+
* implementation) and converts internal FQNs to user-friendly format.
|
|
52
|
+
*/
|
|
53
|
+
export function getProxyLabel(proxyChain: string[]): string | undefined {
|
|
54
|
+
const proxies = proxyChain.slice(0, -1).map(getUserFqn);
|
|
55
|
+
if (proxies.length === 0) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
return `(via ${proxies.join(" → ")})`;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Returns a display key for a contract entry, appending the proxy label
|
|
63
|
+
* when the call went through a proxy chain. Used for table headers and
|
|
64
|
+
* JSON object keys.
|
|
65
|
+
*/
|
|
66
|
+
export function getDisplayKey(userFqn: string, proxyChain: string[]): string {
|
|
67
|
+
const label = getProxyLabel(proxyChain);
|
|
68
|
+
if (label === undefined) {
|
|
69
|
+
return userFqn;
|
|
70
|
+
}
|
|
71
|
+
return `${userFqn} ${label}`;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function avg(values: number[]): number {
|
|
75
|
+
return values.reduce((a, c) => a + c, 0) / values.length;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export function median(values: number[]): number {
|
|
79
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
80
|
+
const mid = Math.floor(sorted.length / 2);
|
|
81
|
+
|
|
82
|
+
return sorted.length % 2 === 1
|
|
83
|
+
? sorted[mid]
|
|
84
|
+
: (sorted[mid - 1] + sorted[mid]) / 2;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export function formatSectionHeader(
|
|
88
|
+
sectionName: string,
|
|
89
|
+
{
|
|
90
|
+
changedLength,
|
|
91
|
+
addedLength,
|
|
92
|
+
removedLength,
|
|
93
|
+
}: {
|
|
94
|
+
changedLength: number;
|
|
95
|
+
addedLength: number;
|
|
96
|
+
removedLength: number;
|
|
97
|
+
},
|
|
98
|
+
): string {
|
|
99
|
+
const parts: string[] = [];
|
|
100
|
+
|
|
101
|
+
if (changedLength > 0) {
|
|
102
|
+
parts.push(`${changedLength} changed`);
|
|
103
|
+
}
|
|
104
|
+
if (addedLength > 0) {
|
|
105
|
+
parts.push(`${addedLength} added`);
|
|
106
|
+
}
|
|
107
|
+
if (removedLength > 0) {
|
|
108
|
+
parts.push(`${removedLength} removed`);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return `${sectionName}: ${chalk.gray(parts.join(", "))}`;
|
|
112
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { HardhatRuntimeEnvironmentHooks } from "../../../../types/hooks.js";
|
|
2
2
|
|
|
3
3
|
import { GasAnalyticsManagerImplementation } from "../gas-analytics-manager.js";
|
|
4
|
-
import { setGasAnalyticsManager } from "../helpers.js";
|
|
4
|
+
import { setGasAnalyticsManager } from "../helpers/accessors.js";
|
|
5
5
|
|
|
6
6
|
export default async (): Promise<Partial<HardhatRuntimeEnvironmentHooks>> => ({
|
|
7
7
|
created: async (context, hre) => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { HookContext, TestHooks } from "../../../../types/hooks.js";
|
|
2
2
|
|
|
3
|
-
import { getGasAnalyticsManager } from "../helpers.js";
|
|
3
|
+
import { getGasAnalyticsManager } from "../helpers/accessors.js";
|
|
4
4
|
|
|
5
5
|
export default async (): Promise<Partial<TestHooks>> => ({
|
|
6
6
|
onTestRunStart: async (context, id, next) => {
|
|
@@ -22,7 +22,7 @@ const hardhatPlugin: HardhatPlugin = {
|
|
|
22
22
|
default: async (args, _hre, runSuper) => {
|
|
23
23
|
// We don't need to do anything here, as the test task will forward
|
|
24
24
|
// the arguments to its subtasks.
|
|
25
|
-
return runSuper(args);
|
|
25
|
+
return await runSuper(args);
|
|
26
26
|
},
|
|
27
27
|
}))
|
|
28
28
|
.build(),
|
|
@@ -35,7 +35,9 @@ const hardhatPlugin: HardhatPlugin = {
|
|
|
35
35
|
name: "snapshotCheck",
|
|
36
36
|
description: "Check the snapshots match the stored values",
|
|
37
37
|
})
|
|
38
|
-
.setAction(
|
|
38
|
+
.setAction(
|
|
39
|
+
async () => await import("./tasks/solidity-test/task-action.js"),
|
|
40
|
+
)
|
|
39
41
|
.build(),
|
|
40
42
|
],
|
|
41
43
|
globalOptions: [
|
|
@@ -18,8 +18,7 @@ import {
|
|
|
18
18
|
parseFullyQualifiedName,
|
|
19
19
|
} from "../../../utils/contract-names.js";
|
|
20
20
|
|
|
21
|
-
import { getUserFqn } from "./
|
|
22
|
-
import { formatSectionHeader } from "./helpers.js";
|
|
21
|
+
import { formatSectionHeader, getUserFqn } from "./helpers/utils.js";
|
|
23
22
|
|
|
24
23
|
export const SNAPSHOT_CHEATCODES_DIR = "snapshots";
|
|
25
24
|
|
|
@@ -9,6 +9,13 @@ export interface GasStatsJsonEntry {
|
|
|
9
9
|
count: number;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Gas statistics for a deployment, including bytecode size.
|
|
14
|
+
*/
|
|
15
|
+
export interface DeploymentGasStatsJsonEntry extends GasStatsJsonEntry {
|
|
16
|
+
runtimeSize: number;
|
|
17
|
+
}
|
|
18
|
+
|
|
12
19
|
/**
|
|
13
20
|
* Gas statistics for a single contract in the JSON output.
|
|
14
21
|
* `deployment` is null when the contract was never deployed during the test run
|
|
@@ -18,7 +25,8 @@ export interface GasStatsJsonEntry {
|
|
|
18
25
|
export interface ContractGasStatsJson {
|
|
19
26
|
sourceName: string;
|
|
20
27
|
contractName: string;
|
|
21
|
-
|
|
28
|
+
proxyChain: string[];
|
|
29
|
+
deployment: DeploymentGasStatsJsonEntry | null;
|
|
22
30
|
functions: Record<string, GasStatsJsonEntry> | null;
|
|
23
31
|
}
|
|
24
32
|
|
|
@@ -39,11 +47,12 @@ interface BaseGasMeasurement {
|
|
|
39
47
|
interface FunctionGasMeasurement extends BaseGasMeasurement {
|
|
40
48
|
type: "function";
|
|
41
49
|
functionSig: string;
|
|
50
|
+
proxyChain: string[];
|
|
42
51
|
}
|
|
43
52
|
|
|
44
53
|
interface DeploymentGasMeasurement extends BaseGasMeasurement {
|
|
45
54
|
type: "deployment";
|
|
46
|
-
|
|
55
|
+
runtimeSize: number;
|
|
47
56
|
}
|
|
48
57
|
|
|
49
58
|
export type GasMeasurement = FunctionGasMeasurement | DeploymentGasMeasurement;
|
|
@@ -36,7 +36,7 @@ import { numberToHexString } from "@nomicfoundation/hardhat-utils/hex";
|
|
|
36
36
|
import { deepEqual } from "@nomicfoundation/hardhat-utils/lang";
|
|
37
37
|
import debug from "debug";
|
|
38
38
|
|
|
39
|
-
import { sendErrorTelemetry } from "../../../cli/telemetry/
|
|
39
|
+
import { sendErrorTelemetry } from "../../../cli/telemetry/error-reporter/reporter.js";
|
|
40
40
|
import { EDR_NETWORK_REVERT_SNAPSHOT_EVENT } from "../../../constants.js";
|
|
41
41
|
import { hardhatChainTypeToEdrChainType } from "../../../edr/chain-type.js";
|
|
42
42
|
import { getGlobalEdrContext } from "../../../edr/context.js";
|
|
@@ -87,7 +87,7 @@ export const DEFAULT_EDR_NETWORK_HD_ACCOUNTS_CONFIG_PARAMS: EdrNetworkDefaultHDA
|
|
|
87
87
|
export async function isDefaultEdrNetworkHDAccountsConfig(
|
|
88
88
|
accounts: EdrNetworkHDAccountsConfig,
|
|
89
89
|
): Promise<boolean> {
|
|
90
|
-
return deepEqual(
|
|
90
|
+
return await deepEqual(
|
|
91
91
|
{
|
|
92
92
|
...accounts,
|
|
93
93
|
mnemonic: await accounts.mnemonic.get(),
|
|
@@ -325,7 +325,7 @@ export class EdrProvider extends BaseProvider {
|
|
|
325
325
|
typeof jsonRpcResponse.result === "string",
|
|
326
326
|
"Invalid client version response",
|
|
327
327
|
);
|
|
328
|
-
return clientVersion(jsonRpcResponse.result);
|
|
328
|
+
return await clientVersion(jsonRpcResponse.result);
|
|
329
329
|
} else {
|
|
330
330
|
return jsonRpcResponse.result;
|
|
331
331
|
}
|
|
@@ -496,7 +496,7 @@ export class EdrProvider extends BaseProvider {
|
|
|
496
496
|
throw new UnknownError(error.message, error);
|
|
497
497
|
}
|
|
498
498
|
|
|
499
|
-
return this.#handleEdrResponse(
|
|
499
|
+
return await this.#handleEdrResponse(
|
|
500
500
|
edrResponse,
|
|
501
501
|
request.method,
|
|
502
502
|
Array.isArray(request.params) ? request.params : undefined,
|
|
@@ -79,7 +79,7 @@ export async function getGenesisStateAndOwnedAccounts(
|
|
|
79
79
|
return cached;
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
return genesisStateAndAccountsCacheMutex.exclusiveRun(async () => {
|
|
82
|
+
return await genesisStateAndAccountsCacheMutex.exclusiveRun(async () => {
|
|
83
83
|
// We need to check again inside the mutex callback in case another async
|
|
84
84
|
// operation initialized it while we were waiting to acquire the mutex
|
|
85
85
|
const cachedAfterWaiting = genesisStateAndAccountsCache
|
package/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.ts
CHANGED
|
@@ -25,10 +25,12 @@ import type {
|
|
|
25
25
|
InternalFunctionCallStackEntry,
|
|
26
26
|
ContractCallRunOutOfGasError,
|
|
27
27
|
CheatcodeErrorStackTraceEntry,
|
|
28
|
+
CheatcodeErrorDetails,
|
|
28
29
|
} from "@nomicfoundation/edr";
|
|
29
30
|
|
|
30
31
|
import {
|
|
31
32
|
StackTraceEntryType,
|
|
33
|
+
CheatcodeErrorCode,
|
|
32
34
|
stackTraceEntryTypeToString,
|
|
33
35
|
FALLBACK_FUNCTION_NAME,
|
|
34
36
|
RECEIVE_FUNCTION_NAME,
|
|
@@ -42,6 +44,7 @@ import {
|
|
|
42
44
|
export {
|
|
43
45
|
SourceReference,
|
|
44
46
|
StackTraceEntryType,
|
|
47
|
+
CheatcodeErrorCode,
|
|
45
48
|
stackTraceEntryTypeToString,
|
|
46
49
|
FALLBACK_FUNCTION_NAME,
|
|
47
50
|
RECEIVE_FUNCTION_NAME,
|
|
@@ -77,6 +80,7 @@ export type {
|
|
|
77
80
|
ContractTooLargeErrorStackTraceEntry,
|
|
78
81
|
InternalFunctionCallStackEntry,
|
|
79
82
|
ContractCallRunOutOfGasError,
|
|
83
|
+
CheatcodeErrorDetails,
|
|
80
84
|
};
|
|
81
85
|
|
|
82
86
|
export type SolidityStackTraceEntry =
|
package/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.ts
CHANGED
|
@@ -9,8 +9,11 @@ import { assertHardhatInvariant } from "@nomicfoundation/hardhat-errors";
|
|
|
9
9
|
import { bytesToHexString } from "@nomicfoundation/hardhat-utils/bytes";
|
|
10
10
|
import { panicErrorCodeToMessage } from "@nomicfoundation/hardhat-utils/panic-errors";
|
|
11
11
|
|
|
12
|
+
import { REVERT_ERROR_CODE } from "../../revert-error-code.js";
|
|
13
|
+
|
|
12
14
|
import {
|
|
13
15
|
StackTraceEntryType,
|
|
16
|
+
CheatcodeErrorCode,
|
|
14
17
|
CONSTRUCTOR_FUNCTION_NAME,
|
|
15
18
|
PRECOMPILE_FUNCTION_NAME,
|
|
16
19
|
UNKNOWN_FUNCTION_NAME,
|
|
@@ -266,9 +269,25 @@ function getMessageFromLastStackTraceEntry(
|
|
|
266
269
|
return `VM Exception while processing transaction: ${panicMessage}`;
|
|
267
270
|
|
|
268
271
|
case StackTraceEntryType.CUSTOM_ERROR:
|
|
269
|
-
case StackTraceEntryType.CHEATCODE_ERROR:
|
|
270
272
|
return `VM Exception while processing transaction: ${stackTraceEntry.message}`;
|
|
271
273
|
|
|
274
|
+
case StackTraceEntryType.CHEATCODE_ERROR: {
|
|
275
|
+
let message = stackTraceEntry.message;
|
|
276
|
+
|
|
277
|
+
if (stackTraceEntry.details !== undefined) {
|
|
278
|
+
switch (stackTraceEntry.details.code) {
|
|
279
|
+
case CheatcodeErrorCode.UnsupportedCheatcode:
|
|
280
|
+
message = `Cheatcode '${stackTraceEntry.details.cheatcode}' is not supported by Hardhat.`;
|
|
281
|
+
break;
|
|
282
|
+
case CheatcodeErrorCode.MissingCheatcode:
|
|
283
|
+
message = `Cheatcode '${stackTraceEntry.details.cheatcode}' is not yet available in this version of Hardhat.`;
|
|
284
|
+
break;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
return `VM Exception while processing transaction: ${message}`;
|
|
289
|
+
}
|
|
290
|
+
|
|
272
291
|
case StackTraceEntryType.OTHER_EXECUTION_ERROR:
|
|
273
292
|
// TODO: What if there was returnData?
|
|
274
293
|
return `Transaction reverted and Hardhat couldn't infer the reason.`;
|
|
@@ -293,11 +312,15 @@ function getMessageFromLastStackTraceEntry(
|
|
|
293
312
|
}
|
|
294
313
|
|
|
295
314
|
/**
|
|
296
|
-
* Note: This error class
|
|
297
|
-
*
|
|
298
|
-
*
|
|
315
|
+
* Note: This error class does not extend ProviderError because it carries
|
|
316
|
+
* Solidity-specific data (stackTrace) that ProviderError does not model.
|
|
317
|
+
* It does carry `code = 3` to match the de facto standard used by geth and
|
|
318
|
+
* anvil for execution revert errors, allowing libraries like viem to
|
|
319
|
+
* properly detect and handle revert errors via the error cause chain.
|
|
299
320
|
**/
|
|
300
321
|
export class SolidityError extends Error {
|
|
322
|
+
public readonly code: number = REVERT_ERROR_CODE;
|
|
323
|
+
|
|
301
324
|
constructor(
|
|
302
325
|
message: string,
|
|
303
326
|
public readonly stackTrace: SolidityStackTrace,
|
|
@@ -305,6 +328,7 @@ export class SolidityError extends Error {
|
|
|
305
328
|
public readonly transactionHash?: string,
|
|
306
329
|
) {
|
|
307
330
|
super(message);
|
|
331
|
+
this.name = "SolidityError";
|
|
308
332
|
|
|
309
333
|
Object.defineProperty(this, Symbol.for("nodejs.util.inspect.custom"), {
|
|
310
334
|
value: () =>
|