From cd60ea615e577d5e0bf85b304d3980ed976e6ae7 Mon Sep 17 00:00:00 2001 From: Beepidibop <63800471+beepidibop@users.noreply.github.com> Date: Tue, 11 Jun 2024 10:53:49 -0600 Subject: [PATCH 01/44] Add ContractTypesMap to artifacts.d.ts Add `ContractTypesMap` that returns `GetContractReturnType<${ctd.typeName}["abi"]>` to the `generateArtifactsDefinition()` and `generateDuplicateArtifactsDefinition()`. --- packages/hardhat-viem/src/internal/tasks.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/hardhat-viem/src/internal/tasks.ts b/packages/hardhat-viem/src/internal/tasks.ts index 7e053a051b..177b0e026d 100644 --- a/packages/hardhat-viem/src/internal/tasks.ts +++ b/packages/hardhat-viem/src/internal/tasks.ts @@ -164,6 +164,12 @@ declare module "hardhat/types/artifacts" { .map((name) => `${name}: never;`) .join("\n ")} } + + interface ContractTypesMap { + ${Array.from(duplicateContractNames) + .map((name) => `${name}: never;`) + .join("\n ")} + } } `; } @@ -260,6 +266,7 @@ function generateArtifactsDefinition( return `${AUTOGENERATED_FILE_PREFACE} import "hardhat/types/artifacts"; +import type { GetContractReturnType } from "@nomicfoundation/hardhat-viem/types"; ${contractTypeData .map((ctd) => `import { ${ctd.typeName} } from "./${ctd.contractName}";`) @@ -274,6 +281,15 @@ declare module "hardhat/types/artifacts" { .map((ctd) => `["${ctd.fqn}"]: ${ctd.typeName};`) .join("\n ")} } + + interface ContractTypesMap { + ${contractTypeData + .map((ctd) => `["${ctd.contractName}"]: GetContractReturnType<${ctd.typeName}["abi"]>;`) + .join("\n ")} + ${contractTypeData + .map((ctd) => `["${ctd.fqn}"]: GetContractReturnType<${ctd.typeName}["abi"]>;`) + .join("\n ")} + } } `; } From 7625d6fd250da8853021bd5e93b9a163c999aca2 Mon Sep 17 00:00:00 2001 From: Beepidibop <63800471+beepidibop@users.noreply.github.com> Date: Tue, 11 Jun 2024 11:16:03 -0600 Subject: [PATCH 02/44] update snapshots for adding ContractTypesMap --- .../type-generation/snapshots/artifacts.d.ts | 4 ++++ .../snapshots/contracts/A.sol/artifacts.d.ts | 8 ++++++++ .../snapshots/contracts/C.sol/artifacts.d.ts | 8 ++++++++ 3 files changed, 20 insertions(+) diff --git a/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/artifacts.d.ts b/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/artifacts.d.ts index eeda088124..c01f03bcd3 100644 --- a/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/artifacts.d.ts +++ b/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/artifacts.d.ts @@ -9,4 +9,8 @@ declare module "hardhat/types/artifacts" { interface ArtifactsMap { B: never; } + + interface ContractTypesMap { + B: never; + } } diff --git a/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/A.sol/artifacts.d.ts b/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/A.sol/artifacts.d.ts index 18aea5c6b7..270ec057ef 100644 --- a/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/A.sol/artifacts.d.ts +++ b/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/A.sol/artifacts.d.ts @@ -4,6 +4,7 @@ // eslint-disable import "hardhat/types/artifacts"; +import type { GetContractReturnType } from "@nomicfoundation/hardhat-viem/types"; import { A$Type } from "./A"; import { B$Type } from "./B"; @@ -15,4 +16,11 @@ declare module "hardhat/types/artifacts" { ["contracts/A.sol:A"]: A$Type; ["contracts/A.sol:B"]: B$Type; } + + interface ContractTypesMap { + ["A"]: GetContractReturnType; + ["B"]: GetContractReturnType; + ["contracts/A.sol:A"]: GetContractReturnType; + ["contracts/A.sol:B"]: GetContractReturnType; + } } diff --git a/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/C.sol/artifacts.d.ts b/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/C.sol/artifacts.d.ts index 4994bfede7..1171b90f27 100644 --- a/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/C.sol/artifacts.d.ts +++ b/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/C.sol/artifacts.d.ts @@ -4,6 +4,7 @@ // eslint-disable import "hardhat/types/artifacts"; +import type { GetContractReturnType } from "@nomicfoundation/hardhat-viem/types"; import { B$Type } from "./B"; import { C$Type } from "./C"; @@ -15,4 +16,11 @@ declare module "hardhat/types/artifacts" { ["contracts/C.sol:B"]: B$Type; ["contracts/C.sol:C"]: C$Type; } + + interface ContractTypesMap { + ["B"]: GetContractReturnType; + ["C"]: GetContractReturnType; + ["contracts/C.sol:B"]: GetContractReturnType; + ["contracts/C.sol:C"]: GetContractReturnType; + } } From 6d235b14c725b94f6bef70b9b6fff44deb1fecd4 Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Mon, 17 Jun 2024 11:39:20 +0200 Subject: [PATCH 03/44] Remove leftover `_eventAdapter` from `EdrProviderWrapper` Seems to be a leftover from #4747 and it looks to be unused now as we create a new instance of `EdrProviderEventAdapter` explicitly in `create()` and move it into lambda. Feel free to disregard if that's not true and/or we want to keep it. --- .../src/internal/hardhat-network/provider/provider.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts index 023abf35af..4c7c80dc20 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts @@ -182,7 +182,6 @@ export class EdrProviderWrapper private readonly _node: { _vm: MinimalEthereumJsVm; }, - private readonly _eventAdapter: EdrProviderEventAdapter, private readonly _vmTraceDecoder: VmTraceDecoder, private readonly _rawTraceCallbacks: RawTraceCallbacks, // The common configuration for EthereumJS VM is not used by EDR, but tests expect it as part of the provider. @@ -323,7 +322,6 @@ export class EdrProviderWrapper const wrapper = new EdrProviderWrapper( provider, minimalEthereumJsNode, - eventAdapter, vmTraceDecoder, rawTraceCallbacks, common, From 4e26e746ae52e0117c66cce69a971967b9bd6561 Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Tue, 18 Jun 2024 15:07:26 +0200 Subject: [PATCH 04/44] Refresh hardhat-core/scripts/console-library-generators.ts It was not type-checked previously and thus missed some renames and dependencies' updates. --- ...erator.js => console-library-generator.ts} | 26 +++++++++---------- .../hardhat-network/stack-traces/logger.ts | 2 +- packages/hardhat-core/tsconfig.json | 2 +- 3 files changed, 14 insertions(+), 16 deletions(-) rename packages/hardhat-core/scripts/{console-library-generator.js => console-library-generator.ts} (90%) diff --git a/packages/hardhat-core/scripts/console-library-generator.js b/packages/hardhat-core/scripts/console-library-generator.ts similarity index 90% rename from packages/hardhat-core/scripts/console-library-generator.js rename to packages/hardhat-core/scripts/console-library-generator.ts index 38cde9f8f9..6fa9a1e54b 100644 --- a/packages/hardhat-core/scripts/console-library-generator.js +++ b/packages/hardhat-core/scripts/console-library-generator.ts @@ -1,7 +1,7 @@ -const eutil = require("@nomicfoundation/ethereumjs-util"); -const fs = require("fs"); +import fs from "fs"; +import { bytesToInt } from "@nomicfoundation/ethereumjs-util"; -const { keccak256 } = require("../internal/util/keccak"); +import { keccak256 } from "../src/internal/util/keccak"; const functionPrefix = " function"; const functionBody = @@ -12,7 +12,7 @@ const functionSuffix = "));" + "\n }" + "\n" + "\n"; let logger = "// ------------------------------------\n" + "// This code was autogenerated using\n" + - "// scripts/console-library-generator.js\n" + + "// scripts/console-library-generator.ts\n" + "// ------------------------------------\n\n"; const singleTypes = [ @@ -85,9 +85,7 @@ logger += "export const ConsoleLogs = {\n"; // Add the empty log() first -const sigInt = eutil.bufferToInt( - keccak256(Buffer.from("log" + "()")).slice(0, 4) -); +const sigInt = bytesToInt(keccak256(Buffer.from("log" + "()")).slice(0, 4)); logger += " " + sigInt + ": [],\n"; for (let i = 0; i < singleTypes.length; i++) { @@ -98,7 +96,7 @@ for (let i = 0; i < singleTypes.length; i++) { const nameSuffix = typeAliasedInt.charAt(0).toUpperCase() + typeAliasedInt.slice(1); - const sigInt = eutil.bufferToInt( + const sigInt = bytesToInt( keccak256(Buffer.from("log" + "(" + type + ")")).slice(0, 4) ); logger += @@ -109,7 +107,7 @@ for (let i = 0; i < singleTypes.length; i++) { type.slice(1) + "Ty],\n"; - const sigIntAliasedInt = eutil.bufferToInt( + const sigIntAliasedInt = bytesToInt( keccak256(Buffer.from("log" + "(" + typeAliasedInt + ")")).slice(0, 4) ); if (sigIntAliasedInt !== sigInt) { @@ -137,9 +135,9 @@ for (let i = 0; i < singleTypes.length; i++) { } const maxNumberOfParameters = 4; -const numberOfPermutations = {}; -const dividers = {}; -const paramsNames = {}; +const numberOfPermutations: Record = {}; +const dividers: Record = {}; +const paramsNames: Record = {}; for (let i = 0; i < maxNumberOfParameters; i++) { dividers[i] = Math.pow(maxNumberOfParameters, i); @@ -188,12 +186,12 @@ for (let i = 0; i < maxNumberOfParameters; i++) { functionSuffix; if (sigParams.length !== 1) { - const sigInt = eutil.bufferToInt( + const sigInt = bytesToInt( keccak256(Buffer.from("log(" + sigParams.join(",") + ")")).slice(0, 4) ); logger += " " + sigInt + ": [" + constParams.join(", ") + "],\n"; - const sigIntAliasedInt = eutil.bufferToInt( + const sigIntAliasedInt = bytesToInt( keccak256( Buffer.from("log(" + sigParamsAliasedInt.join(",") + ")") ).slice(0, 4) diff --git a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/logger.ts b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/logger.ts index ad3edc0b4f..f315706920 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/logger.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/logger.ts @@ -1,6 +1,6 @@ // ------------------------------------ // This code was autogenerated using -// scripts/console-library-generator.js +// scripts/console-library-generator.ts // ------------------------------------ export const Int256Ty = "Int256"; diff --git a/packages/hardhat-core/tsconfig.json b/packages/hardhat-core/tsconfig.json index 8e923e7462..d85ee1d3b7 100644 --- a/packages/hardhat-core/tsconfig.json +++ b/packages/hardhat-core/tsconfig.json @@ -5,7 +5,7 @@ "rootDirs": ["./test"], "composite": true }, - "include": ["./test/**/*.ts"], + "include": ["./test/**/*.ts", "scripts"], "exclude": [ "./test/**/hardhat.config.ts", "./node_modules", From 80ff5bbd1c180c9047841da26adeec29162eb249 Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Tue, 18 Jun 2024 15:23:23 +0200 Subject: [PATCH 05/44] Explicitly use the constant rather than state in ConsoleLogger --- .../scripts/console-library-generator.ts | 5 ++--- .../stack-traces/consoleLogger.ts | 18 +++++------------- .../hardhat-network/stack-traces/logger.ts | 5 ++--- 3 files changed, 9 insertions(+), 19 deletions(-) diff --git a/packages/hardhat-core/scripts/console-library-generator.ts b/packages/hardhat-core/scripts/console-library-generator.ts index 6fa9a1e54b..85db1d0a36 100644 --- a/packages/hardhat-core/scripts/console-library-generator.ts +++ b/packages/hardhat-core/scripts/console-library-generator.ts @@ -80,9 +80,8 @@ library console { `; logger += - "\n// In order to optimize map lookup\n" + - "// we'll store 4byte signature as int\n" + - "export const ConsoleLogs = {\n"; + "\n/** Maps from a 4-byte function selector to a signature (argument types) */\n" + + "export const CONSOLE_LOG_SIGNATURES: Record = {\n"; // Add the empty log() first const sigInt = bytesToInt(keccak256(Buffer.from("log" + "()")).slice(0, 4)); diff --git a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/consoleLogger.ts b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/consoleLogger.ts index 5732150980..20e793c4de 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/consoleLogger.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/consoleLogger.ts @@ -42,10 +42,10 @@ import { Bytes8Ty, Bytes9Ty, BytesTy, - ConsoleLogs, Int256Ty, StringTy, Uint256Ty, + CONSOLE_LOG_SIGNATURES, } from "./logger"; import { EvmMessageTrace, @@ -67,14 +67,6 @@ export type ConsoleLogEntry = string | ConsoleLogArray; export type ConsoleLogs = ConsoleLogEntry[]; export class ConsoleLogger { - private readonly _consoleLogs: { - [key: number]: string[]; - } = {}; - - constructor() { - this._consoleLogs = ConsoleLogs; - } - public getLogMessages(maybeDecodedMessageTrace: MessageTrace): string[] { return this.getExecutionLogs(maybeDecodedMessageTrace).map( consoleLogToString @@ -132,15 +124,15 @@ export class ConsoleLogger { } private _maybeConsoleLog(calldata: Buffer): ConsoleLogs | undefined { - const sig = bytesToInt(calldata.slice(0, 4)); + const selector = bytesToInt(calldata.slice(0, 4)); const parameters = calldata.slice(4); - const types = this._consoleLogs[sig]; - if (types === undefined) { + const argTypes = CONSOLE_LOG_SIGNATURES[selector]; + if (argTypes === undefined) { return; } - const consoleLogs = this._decode(parameters, types); + const consoleLogs = this._decode(parameters, argTypes); this._replaceNumberFormatSpecifiers(consoleLogs); diff --git a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/logger.ts b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/logger.ts index f315706920..1c26f4b4eb 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/logger.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/logger.ts @@ -42,9 +42,8 @@ export const Bytes30Ty = "Bytes30"; export const Bytes31Ty = "Bytes31"; export const Bytes32Ty = "Bytes32"; -// In order to optimize map lookup -// we'll store 4byte signature as int -export const ConsoleLogs = { +/** Maps from a 4-byte function selector to a signature (argument types) */ +export const CONSOLE_LOG_SIGNATURES: Record = { 1368866505: [], 760966329: [Int256Ty], 1309416733: [Int256Ty], From 3e913bd0870a4164b6c78e8cf9d48fba9a93379f Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Tue, 18 Jun 2024 15:29:52 +0200 Subject: [PATCH 06/44] Remove dead code from ConsoleLogger --- .../stack-traces/consoleLogger.ts | 55 +------------------ 1 file changed, 1 insertion(+), 54 deletions(-) diff --git a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/consoleLogger.ts b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/consoleLogger.ts index 20e793c4de..af40ed159f 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/consoleLogger.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/consoleLogger.ts @@ -47,66 +47,13 @@ import { Uint256Ty, CONSOLE_LOG_SIGNATURES, } from "./logger"; -import { - EvmMessageTrace, - isCallTrace, - isEvmStep, - isPrecompileTrace, - MessageTrace, -} from "./message-trace"; -const CONSOLE_ADDRESS = "0x000000000000000000636F6e736F6c652e6c6f67"; // toHex("console.log") const REGISTER_SIZE = 32; -// eslint-disable-next-line @typescript-eslint/no-empty-interface -interface ConsoleLogArray extends Array {} - -export type ConsoleLogEntry = string | ConsoleLogArray; - -// eslint-disable-next-line @typescript-eslint/no-redeclare +export type ConsoleLogEntry = string | ConsoleLogEntry[]; export type ConsoleLogs = ConsoleLogEntry[]; export class ConsoleLogger { - public getLogMessages(maybeDecodedMessageTrace: MessageTrace): string[] { - return this.getExecutionLogs(maybeDecodedMessageTrace).map( - consoleLogToString - ); - } - - public getExecutionLogs( - maybeDecodedMessageTrace: MessageTrace - ): ConsoleLogs[] { - if (isPrecompileTrace(maybeDecodedMessageTrace)) { - return []; - } - - const logs: ConsoleLogs[] = []; - this._collectExecutionLogs(maybeDecodedMessageTrace, logs); - return logs; - } - - private _collectExecutionLogs(trace: EvmMessageTrace, logs: ConsoleLogs) { - for (const messageTrace of trace.steps) { - if (isEvmStep(messageTrace) || isPrecompileTrace(messageTrace)) { - continue; - } - - if ( - isCallTrace(messageTrace) && - bufferToHex(messageTrace.address) === CONSOLE_ADDRESS.toLowerCase() - ) { - const log = this._maybeConsoleLog(Buffer.from(messageTrace.calldata)); - if (log !== undefined) { - logs.push(log); - } - - continue; - } - - this._collectExecutionLogs(messageTrace, logs); - } - } - /** * Temporary code to print console.sol messages that come from EDR */ From cfd088485df9ecb45a3c54e5d904e78b8e0ffc6b Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Wed, 19 Jun 2024 12:57:43 +0200 Subject: [PATCH 07/44] Be more strict about types in consoleLogger.ts and make it a static class This makes it clearer what the exact logic is and if additional state is used, which will be helpful when porting this code to Rust as we don't want to rely on an external console.log decoding logic in JS. --- .../hardhat-network/provider/provider.ts | 5 +- .../stack-traces/consoleLogger.ts | 57 +++++++++---------- .../hardhat-network/stack-traces/test.ts | 10 ++-- 3 files changed, 34 insertions(+), 38 deletions(-) diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts index 023abf35af..b5034615f4 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts @@ -289,10 +289,7 @@ export class EdrProviderWrapper }, { enable: loggerConfig.enabled, - decodeConsoleLogInputsCallback: (inputs: Buffer[]) => { - const consoleLogger = new ConsoleLogger(); - return consoleLogger.getDecodedLogs(inputs); - }, + decodeConsoleLogInputsCallback: ConsoleLogger.getDecodedLogs, getContractAndFunctionNameCallback: ( code: Buffer, calldata?: Buffer diff --git a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/consoleLogger.ts b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/consoleLogger.ts index af40ed159f..5938493780 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/consoleLogger.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/consoleLogger.ts @@ -50,27 +50,41 @@ import { const REGISTER_SIZE = 32; -export type ConsoleLogEntry = string | ConsoleLogEntry[]; -export type ConsoleLogs = ConsoleLogEntry[]; +/** The decoded string representation of the arguments supplied to console.log */ +export type ConsoleLogArgs = string[]; +export type ConsoleLogs = ConsoleLogArgs[]; export class ConsoleLogger { /** * Temporary code to print console.sol messages that come from EDR */ - public getDecodedLogs(messages: Buffer[]): string[] { + public static getDecodedLogs(messages: Buffer[]): string[] { const logs: string[] = []; for (const message of messages) { - const log = this._maybeConsoleLog(message); + const log = ConsoleLogger._maybeConsoleLog(message); if (log !== undefined) { - logs.push(consoleLogToString(log)); + logs.push(ConsoleLogger.format(log)); } } return logs; } - private _maybeConsoleLog(calldata: Buffer): ConsoleLogs | undefined { + /** + * Returns a formatted string using the first argument as a `printf`-like + * format string which can contain zero or more format specifiers. + * + * If there are more arguments passed than the number of specifiers, the + * extra arguments are concatenated to the returned string, separated by spaces. + */ + public static format(args: ConsoleLogArgs = []): string { + return util.format(...args); + } + + private static _maybeConsoleLog( + calldata: Buffer + ): ConsoleLogArgs | undefined { const selector = bytesToInt(calldata.slice(0, 4)); const parameters = calldata.slice(4); @@ -79,15 +93,10 @@ export class ConsoleLogger { return; } - const consoleLogs = this._decode(parameters, argTypes); - - this._replaceNumberFormatSpecifiers(consoleLogs); - - return consoleLogs; - } + const decodedArgs = ConsoleLogger._decode(parameters, argTypes); - private _replaceNumberFormatSpecifiers(consoleLogs: ConsoleLogs) { /** + * The first argument is interpreted as the format string, which may need adjusting. * Replace the occurrences of %d and %i with %s. This is necessary because if the arguments passed are numbers, * they could be too large to be formatted as a Number or an Integer, so it is safer to use a String. * %d and %i are replaced only if there is an odd number of % before the d or i. @@ -99,15 +108,18 @@ export class ConsoleLogger { * (? 0 && typeof consoleLogs[0] === "string") { - consoleLogs[0] = consoleLogs[0].replace( + if (decodedArgs.length > 0) { + decodedArgs[0] = decodedArgs[0].replace( /((? { const position: number = i * 32; switch (types[i]) { @@ -221,16 +233,3 @@ export class ConsoleLogger { }); } } - -export function consoleLogToString(log: ConsoleLogs): string { - if (log === undefined) { - return ""; - } - - // special case for console.log() - if (log.length === 0) { - return ""; - } - - return util.format(log[0], ...log.slice(1)); -} diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test.ts b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test.ts index e7b422b17b..d9cecfbb94 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test.ts @@ -9,7 +9,7 @@ import { EdrProviderWrapper } from "../../../../src/internal/hardhat-network/pro import { ReturnData } from "../../../../src/internal/hardhat-network/provider/return-data"; import { ConsoleLogs, - consoleLogToString, + ConsoleLogger, } from "../../../../src/internal/hardhat-network/stack-traces/consoleLogger"; import { printMessageTrace, @@ -95,7 +95,7 @@ interface DeploymentTransaction { }; stackTrace?: StackFrameDescription[]; // No stack trace === the tx MUST be successful imports?: string[]; // Imports needed for successful compilation - consoleLogs?: ConsoleLogs[]; + consoleLogs?: ConsoleLogs; gas?: number; } @@ -110,7 +110,7 @@ interface CallTransaction { // The second one is with function and parms function?: string; // Default: no data params?: Array; // Default: no param - consoleLogs?: ConsoleLogs[]; + consoleLogs?: ConsoleLogs; gas?: number; } @@ -455,7 +455,7 @@ function compareStackTraces( assert.lengthOf(trace, description.length); } -function compareConsoleLogs(logs: string[], expectedLogs?: ConsoleLogs[]) { +function compareConsoleLogs(logs: string[], expectedLogs?: ConsoleLogs) { if (expectedLogs === undefined) { return; } @@ -464,7 +464,7 @@ function compareConsoleLogs(logs: string[], expectedLogs?: ConsoleLogs[]) { for (let i = 0; i < logs.length; i++) { const actual = logs[i]; - const expected = consoleLogToString(expectedLogs[i]); + const expected = ConsoleLogger.format(expectedLogs[i]); assert.equal(actual, expected); } From 6d18a5182787215d44ee0a1ef2b3b64ce575e502 Mon Sep 17 00:00:00 2001 From: Aaron Zhi-Ren Shey <44917034+aaronzshey@users.noreply.github.com> Date: Mon, 24 Jun 2024 21:47:50 -0700 Subject: [PATCH 08/44] Update package.json --- packages/hardhat-core/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/hardhat-core/package.json b/packages/hardhat-core/package.json index ec50d00a2f..c9354ab74b 100644 --- a/packages/hardhat-core/package.json +++ b/packages/hardhat-core/package.json @@ -136,7 +136,7 @@ "raw-body": "^2.4.1", "resolve": "1.17.0", "semver": "^6.3.0", - "solc": "0.7.3", + "solc": "0.8.26", "source-map-support": "^0.5.13", "stacktrace-parser": "^0.1.10", "tsort": "0.0.1", From 18f8e9b72ec4b653c6d25a905099b477cc27d6bb Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Wed, 19 Jun 2024 23:06:03 +0200 Subject: [PATCH 09/44] refactor: Streamline VMTracer construction in EDR stack trace tests --- .../hardhat-network/provider/provider.ts | 50 +++++++------------ .../hardhat-network/stack-traces/vm-tracer.ts | 6 +-- .../hardhat-network/stack-traces/execution.ts | 28 ++++------- .../hardhat-network/stack-traces/test.ts | 11 ++-- 4 files changed, 36 insertions(+), 59 deletions(-) diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts index 023abf35af..5ffdfc5fb9 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts @@ -12,12 +12,9 @@ import type { import type { EdrContext, Provider as EdrProviderT, - ExecutionResult, RawTrace, Response, SubscriptionEvent, - TracingMessage, - TracingStep, } from "@nomicfoundation/edr"; import { Common } from "@nomicfoundation/ethereumjs-common"; import chalk from "chalk"; @@ -152,12 +149,6 @@ export function getNodeConfig( }; } -export interface RawTraceCallbacks { - onStep?: (messageTrace: TracingStep) => Promise; - onBeforeMessage?: (messageTrace: TracingMessage) => Promise; - onAfterMessage?: (messageTrace: ExecutionResult) => Promise; -} - class EdrProviderEventAdapter extends EventEmitter {} type CallOverrideCallback = ( @@ -184,7 +175,7 @@ export class EdrProviderWrapper }, private readonly _eventAdapter: EdrProviderEventAdapter, private readonly _vmTraceDecoder: VmTraceDecoder, - private readonly _rawTraceCallbacks: RawTraceCallbacks, + private readonly _vmTracer: VMTracer | undefined, // The common configuration for EthereumJS VM is not used by EDR, but tests expect it as part of the provider. private readonly _common: Common, tracingConfig?: TracingConfig @@ -199,8 +190,8 @@ export class EdrProviderWrapper public static async create( config: HardhatNetworkProviderConfig, loggerConfig: LoggerConfig, - rawTraceCallbacks: RawTraceCallbacks, - tracingConfig?: TracingConfig + tracingConfig?: TracingConfig, + vmTracer?: VMTracer ): Promise { const { Provider } = requireNapiRsModule( "@nomicfoundation/edr" @@ -325,7 +316,7 @@ export class EdrProviderWrapper minimalEthereumJsNode, eventAdapter, vmTraceDecoder, - rawTraceCallbacks, + vmTracer, common, tracingConfig ); @@ -371,9 +362,7 @@ export class EdrProviderWrapper const needsTraces = this._node._vm.evm.events.eventNames().length > 0 || this._node._vm.events.eventNames().length > 0 || - this._rawTraceCallbacks.onStep !== undefined || - this._rawTraceCallbacks.onAfterMessage !== undefined || - this._rawTraceCallbacks.onBeforeMessage !== undefined; + this._vmTracer !== undefined; if (needsTraces) { const rawTraces = responseObject.traces; @@ -394,9 +383,8 @@ export class EdrProviderWrapper edrTracingStepToMinimalInterpreterStep(traceItem) ); } - if (this._rawTraceCallbacks.onStep !== undefined) { - await this._rawTraceCallbacks.onStep(traceItem); - } + + this._vmTracer?.addStep(traceItem); } // afterMessage event else if ("executionResult" in traceItem) { @@ -406,11 +394,8 @@ export class EdrProviderWrapper edrTracingMessageResultToMinimalEVMResult(traceItem) ); } - if (this._rawTraceCallbacks.onAfterMessage !== undefined) { - await this._rawTraceCallbacks.onAfterMessage( - traceItem.executionResult - ); - } + + this._vmTracer?.addAfterMessage(traceItem.executionResult); } // beforeMessage event else { @@ -420,9 +405,8 @@ export class EdrProviderWrapper edrTracingMessageToMinimalMessage(traceItem) ); } - if (this._rawTraceCallbacks.onBeforeMessage !== undefined) { - await this._rawTraceCallbacks.onBeforeMessage(traceItem); - } + + this._vmTracer?.addBeforeMessage(traceItem); } } @@ -484,6 +468,11 @@ export class EdrProviderWrapper } } + /** Used for internal stack traces integration tests. Only defined there. */ + public vmTracer(): VMTracer | undefined { + return this._vmTracer; + } + // temporarily added to make smock work with HH+EDR private _setCallOverrideCallback(callback: CallOverrideCallback) { this._callOverrideCallback = callback; @@ -588,11 +577,11 @@ export class EdrProviderWrapper const trace = rawTrace.trace(); for (const traceItem of trace) { if ("pc" in traceItem) { - await vmTracer.addStep(traceItem); + vmTracer.addStep(traceItem); } else if ("executionResult" in traceItem) { - await vmTracer.addAfterMessage(traceItem.executionResult); + vmTracer.addAfterMessage(traceItem.executionResult); } else { - await vmTracer.addBeforeMessage(traceItem); + vmTracer.addBeforeMessage(traceItem); } } @@ -634,7 +623,6 @@ export async function createHardhatNetworkProvider( return EdrProviderWrapper.create( hardhatNetworkProviderConfig, loggerConfig, - {}, await makeTracingConfig(artifacts) ); } diff --git a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/vm-tracer.ts b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/vm-tracer.ts index c01df0cb75..0a258a76a8 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/vm-tracer.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/vm-tracer.ts @@ -54,7 +54,7 @@ export class VMTracer { return this._throwErrors || this._lastError === undefined; } - public async addBeforeMessage(message: TracingMessage) { + public addBeforeMessage(message: TracingMessage) { if (!this._shouldKeepTracing()) { return; } @@ -151,7 +151,7 @@ export class VMTracer { } } - public async addStep(step: TracingStep) { + public addStep(step: TracingStep) { if (!this._shouldKeepTracing()) { return; } @@ -177,7 +177,7 @@ export class VMTracer { } } - public async addAfterMessage(result: ExecutionResult, haltOverride?: Exit) { + public addAfterMessage(result: ExecutionResult, haltOverride?: Exit) { if (!this._shouldKeepTracing()) { return; } diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/execution.ts b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/execution.ts index 980d0c47e3..24b191565c 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/execution.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/execution.ts @@ -1,3 +1,5 @@ +import { assert } from "chai"; + import { bigIntToHex, bytesToHex, @@ -29,7 +31,7 @@ const senderAddress = bytesToHex(privateToAddress(toBuffer(senderPrivateKey))); export async function instantiateProvider( loggerConfig: LoggerConfig, tracingConfig: TracingConfig -): Promise<[EdrProviderWrapper, VMTracer]> { +): Promise { const config = { hardfork: "shanghai", chainId: 1, @@ -55,26 +57,14 @@ export async function instantiateProvider( enableTransientStorage: false, }; - const vmTracer = new VMTracer(false); - const provider = await EdrProviderWrapper.create( config, loggerConfig, - { - onStep: async (step) => { - await vmTracer.addStep(step); - }, - onAfterMessage: async (message) => { - await vmTracer.addAfterMessage(message); - }, - onBeforeMessage: async (message) => { - await vmTracer.addBeforeMessage(message); - }, - }, - tracingConfig + tracingConfig, + new VMTracer(false) ); - return [provider, vmTracer]; + return provider; } export function encodeConstructorParams( @@ -116,9 +106,13 @@ export interface TxData { export async function traceTransaction( provider: EdrProviderWrapper, - vmTracer: VMTracer, txData: TxData ): Promise { + const vmTracer = provider.vmTracer(); + if (vmTracer === undefined) { + assert.fail("VMTracer should always be initialized in stack-traces"); + } + try { await provider.request({ method: "eth_sendTransaction", diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test.ts b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test.ts index e7b422b17b..c02555a250 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test.ts @@ -27,7 +27,6 @@ import { } from "../../../../src/internal/hardhat-network/stack-traces/solidity-stack-trace"; import { SolidityTracer } from "../../../../src/internal/hardhat-network/stack-traces/solidityTracer"; import { VmTraceDecoder } from "../../../../src/internal/hardhat-network/stack-traces/vm-trace-decoder"; -import { VMTracer } from "../../../../src/internal/hardhat-network/stack-traces/vm-tracer"; import { BuildInfo, CompilerInput, @@ -498,7 +497,7 @@ async function runTest( const logger = new FakeModulesLogger(); const solidityTracer = new SolidityTracer(); - const [provider, vmTracer] = await instantiateProvider( + const provider = await instantiateProvider( { enabled: false, printLineFn: logger.printLineFn(), @@ -517,7 +516,6 @@ async function runTest( txIndex, tx, provider, - vmTracer, compilerOutput, txIndexToContract ); @@ -541,7 +539,6 @@ async function runTest( txIndex, tx, provider, - vmTracer, compilerOutput, contract! ); @@ -650,7 +647,6 @@ async function runDeploymentTransactionTest( txIndex: number, tx: DeploymentTransaction, provider: EdrProviderWrapper, - vmTracer: VMTracer, compilerOutput: CompilerOutput, txIndexToContract: Map ): Promise { @@ -682,7 +678,7 @@ async function runDeploymentTransactionTest( const data = Buffer.concat([deploymentBytecode, params]); - const trace = await traceTransaction(provider, vmTracer, { + const trace = await traceTransaction(provider, { value: tx.value !== undefined ? BigInt(tx.value) : undefined, data, gas: tx.gas !== undefined ? BigInt(tx.gas) : undefined, @@ -695,7 +691,6 @@ async function runCallTransactionTest( txIndex: number, tx: CallTransaction, provider: EdrProviderWrapper, - vmTracer: VMTracer, compilerOutput: CompilerOutput, contract: DeployedContract ): Promise { @@ -716,7 +711,7 @@ async function runCallTransactionTest( data = Buffer.from([]); } - const trace = await traceTransaction(provider, vmTracer, { + const trace = await traceTransaction(provider, { to: contract.address, value: tx.value !== undefined ? BigInt(tx.value) : undefined, data, From 95af341d74eb3d7f6c6a8967cf5737abd210cd6c Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Wed, 19 Jun 2024 23:28:13 +0200 Subject: [PATCH 10/44] refactor: Prefer injection over arg at construct time This gives a more granular access and doesn't require the callers to necessarily be concerned with details they might not be interested in. --- .../hardhat-network/provider/provider.ts | 18 +++++++++++------- .../hardhat-network/stack-traces/vm-tracer.ts | 4 ---- .../hardhat-network/stack-traces/execution.ts | 13 ++++--------- 3 files changed, 15 insertions(+), 20 deletions(-) diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts index 5ffdfc5fb9..e4c20559e5 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts @@ -167,6 +167,9 @@ export class EdrProviderWrapper // temporarily added to make smock work with HH+EDR private _callOverrideCallback?: CallOverrideCallback; + /** Used for internal stack trace tests. */ + private _vmTracer?: VMTracer; + private constructor( private readonly _provider: EdrProviderT, // we add this for backwards-compatibility with plugins like solidity-coverage @@ -175,7 +178,6 @@ export class EdrProviderWrapper }, private readonly _eventAdapter: EdrProviderEventAdapter, private readonly _vmTraceDecoder: VmTraceDecoder, - private readonly _vmTracer: VMTracer | undefined, // The common configuration for EthereumJS VM is not used by EDR, but tests expect it as part of the provider. private readonly _common: Common, tracingConfig?: TracingConfig @@ -190,8 +192,7 @@ export class EdrProviderWrapper public static async create( config: HardhatNetworkProviderConfig, loggerConfig: LoggerConfig, - tracingConfig?: TracingConfig, - vmTracer?: VMTracer + tracingConfig?: TracingConfig ): Promise { const { Provider } = requireNapiRsModule( "@nomicfoundation/edr" @@ -316,7 +317,6 @@ export class EdrProviderWrapper minimalEthereumJsNode, eventAdapter, vmTraceDecoder, - vmTracer, common, tracingConfig ); @@ -468,9 +468,13 @@ export class EdrProviderWrapper } } - /** Used for internal stack traces integration tests. Only defined there. */ - public vmTracer(): VMTracer | undefined { - return this._vmTracer; + /** + * Injects a `VMTracer` that observes EVM throughout requests. + * + * Used for internal stack traces integration tests. + */ + public injectVmTracer(vmTracer?: VMTracer) { + this._vmTracer = vmTracer; } // temporarily added to make smock work with HH+EDR diff --git a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/vm-tracer.ts b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/vm-tracer.ts index 0a258a76a8..0f2e0d8573 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/vm-tracer.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/vm-tracer.ts @@ -46,10 +46,6 @@ export class VMTracer { return this._lastError; } - public clearLastError() { - this._lastError = undefined; - } - private _shouldKeepTracing() { return this._throwErrors || this._lastError === undefined; } diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/execution.ts b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/execution.ts index 24b191565c..61b4ed958d 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/execution.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/execution.ts @@ -1,5 +1,3 @@ -import { assert } from "chai"; - import { bigIntToHex, bytesToHex, @@ -60,8 +58,7 @@ export async function instantiateProvider( const provider = await EdrProviderWrapper.create( config, loggerConfig, - tracingConfig, - new VMTracer(false) + tracingConfig ); return provider; @@ -108,10 +105,8 @@ export async function traceTransaction( provider: EdrProviderWrapper, txData: TxData ): Promise { - const vmTracer = provider.vmTracer(); - if (vmTracer === undefined) { - assert.fail("VMTracer should always be initialized in stack-traces"); - } + const vmTracer = new VMTracer(false); + provider.injectVmTracer(vmTracer); try { await provider.request({ @@ -136,6 +131,6 @@ export async function traceTransaction( } return trace; } finally { - vmTracer.clearLastError(); + provider.injectVmTracer(undefined); } } From 2e03e7baa8595a89b5485784cfbf7b8c6f6d3cf4 Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Fri, 21 Jun 2024 12:26:43 +0200 Subject: [PATCH 11/44] refactor: Remove dead code in VMTracer --- .../hardhat-network/provider/provider.ts | 2 +- .../hardhat-network/stack-traces/vm-tracer.ts | 31 +++++++------------ .../hardhat-network/stack-traces/execution.ts | 2 +- 3 files changed, 13 insertions(+), 22 deletions(-) diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts index e4c20559e5..4377eacda4 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts @@ -576,7 +576,7 @@ export class EdrProviderWrapper private async _rawTraceToSolidityStackTrace( rawTrace: RawTrace ): Promise { - const vmTracer = new VMTracer(false); + const vmTracer = new VMTracer(); const trace = rawTrace.trace(); for (const traceItem of trace) { diff --git a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/vm-tracer.ts b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/vm-tracer.ts index 0f2e0d8573..520573ab34 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/vm-tracer.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/vm-tracer.ts @@ -26,6 +26,10 @@ import { const DUMMY_RETURN_DATA = Buffer.from([]); const DUMMY_GAS_USED = 0n; +/** + * Consumes the incoming VM trace events, until an error occurs, to keep track + * of the last top level message trace/error. + */ export class VMTracer { public tracingSteps: TracingStep[] = []; @@ -33,7 +37,7 @@ export class VMTracer { private _lastError: Error | undefined; private _maxPrecompileNumber; - constructor(private readonly _throwErrors = true) { + constructor() { // TODO: temporarily hardcoded to remove the need of using ethereumjs' common and evm here this._maxPrecompileNumber = 10; } @@ -47,7 +51,7 @@ export class VMTracer { } private _shouldKeepTracing() { - return this._throwErrors || this._lastError === undefined; + return this._lastError === undefined; } public addBeforeMessage(message: TracingMessage) { @@ -139,11 +143,7 @@ export class VMTracer { this._messageTraces.push(trace); } catch (error) { - if (this._throwErrors) { - throw error; - } else { - this._lastError = error as Error; - } + this._lastError = error as Error; } } @@ -165,15 +165,11 @@ export class VMTracer { trace.steps.push({ pc: Number(step.pc) }); } catch (error) { - if (this._throwErrors) { - throw error; - } else { - this._lastError = error as Error; - } + this._lastError = error as Error; } } - public addAfterMessage(result: ExecutionResult, haltOverride?: Exit) { + public addAfterMessage(result: ExecutionResult) { if (!this._shouldKeepTracing()) { return; } @@ -193,8 +189,7 @@ export class VMTracer { ).address; } } else if (isHaltResult(executionResult)) { - trace.exit = - haltOverride ?? Exit.fromEdrExceptionalHalt(executionResult.reason); + trace.exit = Exit.fromEdrExceptionalHalt(executionResult.reason); trace.returnData = Buffer.from([]); } else { @@ -207,11 +202,7 @@ export class VMTracer { this._messageTraces.pop(); } } catch (error) { - if (this._throwErrors) { - throw error; - } else { - this._lastError = error as Error; - } + this._lastError = error as Error; } } } diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/execution.ts b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/execution.ts index 61b4ed958d..ba3f16e5ba 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/execution.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/execution.ts @@ -105,7 +105,7 @@ export async function traceTransaction( provider: EdrProviderWrapper, txData: TxData ): Promise { - const vmTracer = new VMTracer(false); + const vmTracer = new VMTracer(); provider.injectVmTracer(vmTracer); try { From 8a10233d6ec4ed59968191c61a50619c2c9caab7 Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Fri, 21 Jun 2024 16:13:00 +0200 Subject: [PATCH 12/44] Remove dead code in provider/vm/exit.ts --- .../hardhat-network/provider/vm/exit.ts | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/vm/exit.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/vm/exit.ts index dcc5e11e29..53e1b4545a 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/vm/exit.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/vm/exit.ts @@ -91,25 +91,4 @@ export class Exit { const _exhaustiveCheck: never = this.kind; } - - public getEdrExceptionalHalt(): ExceptionalHalt { - const { ExceptionalHalt } = requireNapiRsModule( - "@nomicfoundation/edr" - ) as typeof import("@nomicfoundation/edr"); - - switch (this.kind) { - case ExitCode.OUT_OF_GAS: - return ExceptionalHalt.OutOfGas; - case ExitCode.INVALID_OPCODE: - return ExceptionalHalt.OpcodeNotFound; - case ExitCode.CODESIZE_EXCEEDS_MAXIMUM: - return ExceptionalHalt.CreateContractSizeLimit; - case ExitCode.CREATE_COLLISION: - return ExceptionalHalt.CreateCollision; - - default: - // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error - throw new Error(`Unmatched exit code: ${this.kind}`); - } - } } From 02bda0340fbe272b5616416bc709da57e7134a7e Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Sat, 22 Jun 2024 00:06:10 +0200 Subject: [PATCH 13/44] refactor: Remove extranous fields in BaseEvmMessageTrace These are already included in `BaseMessageTrace`. --- .../src/internal/hardhat-network/stack-traces/message-trace.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/message-trace.ts b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/message-trace.ts index 0d602407e3..ddfe86ce4d 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/message-trace.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/message-trace.ts @@ -34,8 +34,6 @@ export interface PrecompileMessageTrace extends BaseMessageTrace { export interface BaseEvmMessageTrace extends BaseMessageTrace { code: Uint8Array; - value: bigint; - returnData: Uint8Array; steps: MessageTraceStep[]; bytecode?: Bytecode; // The following is just an optimization: When processing this traces it's useful to know ahead of From b5abb0191dae18740d621cb70f0b3cf51935c4e1 Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Tue, 25 Jun 2024 14:18:05 +0000 Subject: [PATCH 14/44] Change network helpers' tests to Sepolia --- packages/hardhat-network-helpers/test/helpers/reset.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/hardhat-network-helpers/test/helpers/reset.ts b/packages/hardhat-network-helpers/test/helpers/reset.ts index 50eb50781e..c312eea953 100644 --- a/packages/hardhat-network-helpers/test/helpers/reset.ts +++ b/packages/hardhat-network-helpers/test/helpers/reset.ts @@ -24,12 +24,12 @@ describe("resetWithoutFork", function () { const mainnetBlockNumber = await hh.time.latestBlock(); - // fork goerli - await hh.reset(INFURA_URL.replace("mainnet", "goerli")); + // fork sepolia + await hh.reset(INFURA_URL.replace("mainnet", "sepolia")); - const goerliBlockNumber = await hh.time.latestBlock(); + const sepoliaBlockNumber = await hh.time.latestBlock(); - const blockNumberDelta = Math.abs(mainnetBlockNumber - goerliBlockNumber); + const blockNumberDelta = Math.abs(mainnetBlockNumber - sepoliaBlockNumber); // check that there is a significative difference between the latest // block numbers of each chain From cdf016061efb68b1fcd0e5d7baa6abc2718cdeb4 Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Tue, 25 Jun 2024 11:38:45 -0300 Subject: [PATCH 15/44] Create lovely-kiwis-hang.md --- .changeset/lovely-kiwis-hang.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/lovely-kiwis-hang.md diff --git a/.changeset/lovely-kiwis-hang.md b/.changeset/lovely-kiwis-hang.md new file mode 100644 index 0000000000..5e92d5b9f1 --- /dev/null +++ b/.changeset/lovely-kiwis-hang.md @@ -0,0 +1,5 @@ +--- +"hardhat": patch +--- + +Upgrade bundled solcjs From e00b69f130f7edebc4268883dc04ead17764219d Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Tue, 25 Jun 2024 14:41:32 +0000 Subject: [PATCH 16/44] Update lockfile --- pnpm-lock.yaml | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d9251805f8..5853cfd90c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -303,8 +303,8 @@ importers: specifier: ^6.3.0 version: 6.3.1 solc: - specifier: 0.7.3 - version: 0.7.3(debug@4.3.4) + specifier: 0.8.26 + version: 0.8.26(debug@4.3.4) source-map-support: specifier: ^0.5.13 version: 0.5.21 @@ -3532,13 +3532,14 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - commander@3.0.2: - resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==} - commander@6.2.1: resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} engines: {node: '>= 6'} + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} @@ -6214,9 +6215,9 @@ packages: resolution: {integrity: sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==} hasBin: true - solc@0.7.3: - resolution: {integrity: sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==} - engines: {node: '>=8.0.0'} + solc@0.8.26: + resolution: {integrity: sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==} + engines: {node: '>=10.0.0'} hasBin: true solhint@3.6.2: @@ -9531,10 +9532,10 @@ snapshots: commander@2.20.3: {} - commander@3.0.2: {} - commander@6.2.1: {} + commander@8.3.0: {} + commondir@1.0.1: {} concat-map@0.0.1: {} @@ -12603,15 +12604,13 @@ snapshots: semver: 5.7.2 yargs: 4.8.1 - solc@0.7.3(debug@4.3.4): + solc@0.8.26(debug@4.3.4): dependencies: command-exists: 1.2.9 - commander: 3.0.2 + commander: 8.3.0 follow-redirects: 1.15.6(debug@4.3.4) - fs-extra: 0.30.0 js-sha3: 0.8.0 memorystream: 0.3.1 - require-from-string: 2.0.2 semver: 5.7.2 tmp: 0.0.33 transitivePeerDependencies: From 830a78522cca45e356d4ea44e6f5ab4a2171167d Mon Sep 17 00:00:00 2001 From: Luis Schaab Date: Tue, 25 Jun 2024 13:36:43 -0300 Subject: [PATCH 17/44] Add readme section --- packages/hardhat-viem/README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/hardhat-viem/README.md b/packages/hardhat-viem/README.md index a35c39d1f6..30e8aac08a 100644 --- a/packages/hardhat-viem/README.md +++ b/packages/hardhat-viem/README.md @@ -248,6 +248,18 @@ This allows you to deploy a contract linked to the `ExampleLib` library at the a To deploy a contract, all libraries must be linked. An error will be thrown if any libraries are missing. +#### Using `ContractTypesMap` for easier contract type imports + +To simplify importing contract types in `hardhat-viem`, you can use the `ContractTypesMap`. This map contains the contract types of all contracts in your project, indexed by their names. + +```typescript +import { ContractTypesMap } from "hardhat/types/artifacts"; + +const contract: ContractTypesMap["ContractName"]; +``` + +This reduces the need for multiple imports and makes your code cleaner and easier to manage. + ## Usage There are no additional steps you need to take for this plugin to work. From a8a603821aa46ce0c02ff8fa4b075e309c0c4c7d Mon Sep 17 00:00:00 2001 From: Luis Schaab Date: Tue, 25 Jun 2024 13:36:53 -0300 Subject: [PATCH 18/44] Add changeset --- .changeset/smooth-rabbits-wait.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/smooth-rabbits-wait.md diff --git a/.changeset/smooth-rabbits-wait.md b/.changeset/smooth-rabbits-wait.md new file mode 100644 index 0000000000..e4219e3841 --- /dev/null +++ b/.changeset/smooth-rabbits-wait.md @@ -0,0 +1,5 @@ +--- +"@nomicfoundation/hardhat-viem": patch +--- + +Added `ContractTypesMap` to simplify contract type imports (thanks @beepidibop!) From 890bdee2d92e5eb039a521bf3d037ca3d4987e61 Mon Sep 17 00:00:00 2001 From: Luis Schaab Date: Tue, 25 Jun 2024 13:43:39 -0300 Subject: [PATCH 19/44] Fix lint --- packages/hardhat-viem/src/internal/tasks.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/hardhat-viem/src/internal/tasks.ts b/packages/hardhat-viem/src/internal/tasks.ts index 177b0e026d..a6bb4f2980 100644 --- a/packages/hardhat-viem/src/internal/tasks.ts +++ b/packages/hardhat-viem/src/internal/tasks.ts @@ -167,8 +167,8 @@ declare module "hardhat/types/artifacts" { interface ContractTypesMap { ${Array.from(duplicateContractNames) - .map((name) => `${name}: never;`) - .join("\n ")} + .map((name) => `${name}: never;`) + .join("\n ")} } } `; @@ -284,11 +284,17 @@ declare module "hardhat/types/artifacts" { interface ContractTypesMap { ${contractTypeData - .map((ctd) => `["${ctd.contractName}"]: GetContractReturnType<${ctd.typeName}["abi"]>;`) - .join("\n ")} + .map( + (ctd) => + `["${ctd.contractName}"]: GetContractReturnType<${ctd.typeName}["abi"]>;` + ) + .join("\n ")} ${contractTypeData - .map((ctd) => `["${ctd.fqn}"]: GetContractReturnType<${ctd.typeName}["abi"]>;`) - .join("\n ")} + .map( + (ctd) => + `["${ctd.fqn}"]: GetContractReturnType<${ctd.typeName}["abi"]>;` + ) + .join("\n ")} } } `; From c731d3acee3aca522dba047a0ed12b5c723e89de Mon Sep 17 00:00:00 2001 From: Artem Chystiakov Date: Fri, 28 Jun 2024 14:42:54 +0300 Subject: [PATCH 20/44] update distributed lab plugins --- .../content/hardhat-runner/plugins/plugins.ts | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/docs/src/content/hardhat-runner/plugins/plugins.ts b/docs/src/content/hardhat-runner/plugins/plugins.ts index 941bf51989..38ee9072f2 100644 --- a/docs/src/content/hardhat-runner/plugins/plugins.ts +++ b/docs/src/content/hardhat-runner/plugins/plugins.ts @@ -660,7 +660,7 @@ const communityPlugins: IPlugin[] = [ authorUrl: "https://distributedlab.com/", description: "Hardhat plugin to automate the deployment and verification of contracts", - tags: ["Deployment", "Verification", "Migration"], + tags: ["Deployment", "Verification", "Migration", "Solarity"], }, { name: "hardhat-notifier", @@ -683,7 +683,7 @@ const communityPlugins: IPlugin[] = [ authorUrl: "https://distributedlab.com/", description: "Hardhat plugin to generate smart contract bindings for Golang", - tags: ["Bindings", "Go", "Testing"], + tags: ["Bindings", "Go", "Testing", "Solarity"], }, { name: "hardhat-storage-vault", @@ -729,7 +729,7 @@ const communityPlugins: IPlugin[] = [ authorUrl: "https://distributedlab.com/", description: "Hardhat plugin to generate customizable smart contracts documentation", - tags: ["Documentation", "NatSpec", "Markdown"], + tags: ["Documentation", "NatSpec", "Markdown", "Solarity"], }, { name: "hardhat-contract-clarity", @@ -843,7 +843,7 @@ const communityPlugins: IPlugin[] = [ author: "Distributed Lab", authorUrl: "https://distributedlab.com/", description: "Hardhat plugin to deeply compare smart contracts", - tags: ["Storage Layout", "Bytecode", "Diff", "Compare"], + tags: ["Storage Layout", "Bytecode", "Diff", "Compare", "Solarity"], }, { name: "hardhat-logger", @@ -974,6 +974,20 @@ const communityPlugins: IPlugin[] = [ "Hardhat plugin for verifying smart contracts deployed on the EVM chains including X Layer", tags: ["OKX Explorer", "Verification", "X Layer"], }, + { + name: "@solarity/hardhat-zkit", + author: "Distributed Lab", + authorUrl: "https://distributedlab.com/", + description: "The ultimate environment for building with Circom", + tags: ["Circom", "zk", "SnarkJS", "environment", "Solarity"], + }, + { + name: "@solarity/hardhat-habits", + author: "Distributed Lab", + authorUrl: "https://distributedlab.com/", + description: "Hardhat plugin to get interfaceid", + tags: ["ABI", "interfaceid", "Solarity"], + }, ]; const officialPlugins: IPlugin[] = [ From 2fe2cff7863bd69c22e2b7669fdf0a88f5c3d77c Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Fri, 28 Jun 2024 23:21:39 +0200 Subject: [PATCH 21/44] Rename injectVmTracer to setVmTracer --- .../src/internal/hardhat-network/provider/provider.ts | 4 ++-- .../test/internal/hardhat-network/stack-traces/execution.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts index 4377eacda4..4f1197ec3e 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts @@ -469,11 +469,11 @@ export class EdrProviderWrapper } /** - * Injects a `VMTracer` that observes EVM throughout requests. + * Sets a `VMTracer` that observes EVM throughout requests. * * Used for internal stack traces integration tests. */ - public injectVmTracer(vmTracer?: VMTracer) { + public setVmTracer(vmTracer?: VMTracer) { this._vmTracer = vmTracer; } diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/execution.ts b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/execution.ts index ba3f16e5ba..daa95a57d3 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/execution.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/execution.ts @@ -106,7 +106,7 @@ export async function traceTransaction( txData: TxData ): Promise { const vmTracer = new VMTracer(); - provider.injectVmTracer(vmTracer); + provider.setVmTracer(vmTracer); try { await provider.request({ @@ -131,6 +131,6 @@ export async function traceTransaction( } return trace; } finally { - provider.injectVmTracer(undefined); + provider.setVmTracer(undefined); } } From 1685112d49ac54ace5673ae80cac99399738386b Mon Sep 17 00:00:00 2001 From: Franco Victorio Date: Mon, 1 Jul 2024 18:39:22 +0200 Subject: [PATCH 22/44] Bump EDR to 0.4.1 --- packages/hardhat-core/package.json | 2 +- pnpm-lock.yaml | 66 +++++++++++++++--------------- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/packages/hardhat-core/package.json b/packages/hardhat-core/package.json index c9354ab74b..b6b5cb3f70 100644 --- a/packages/hardhat-core/package.json +++ b/packages/hardhat-core/package.json @@ -102,7 +102,7 @@ "dependencies": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/edr": "^0.4.0", + "@nomicfoundation/edr": "^0.4.1", "@nomicfoundation/ethereumjs-common": "4.0.4", "@nomicfoundation/ethereumjs-tx": "5.0.4", "@nomicfoundation/ethereumjs-util": "9.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5853cfd90c..ba958af25a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -201,8 +201,8 @@ importers: specifier: ^4.0.0 version: 4.0.1 '@nomicfoundation/edr': - specifier: ^0.4.0 - version: 0.4.0 + specifier: ^0.4.1 + version: 0.4.1 '@nomicfoundation/ethereumjs-common': specifier: 4.0.4 version: 4.0.4 @@ -2332,36 +2332,36 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nomicfoundation/edr-darwin-arm64@0.4.0': - resolution: {integrity: sha512-7+rraFk9tCqvfemv9Ita5vTlSBAeO/S5aDKOgGRgYt0JEKZlrX161nDW6UfzMPxWl9GOLEDUzCEaYuNmXseUlg==} + '@nomicfoundation/edr-darwin-arm64@0.4.1': + resolution: {integrity: sha512-XuiUUnWAVNw7JYv7nRqDWfpBm21HOxCRBQ8lQnRnmiets9Ss2X5Ul9mvBheIPh/D0wBzwJ8TRtsSrorpwE79cA==} engines: {node: '>= 18'} - '@nomicfoundation/edr-darwin-x64@0.4.0': - resolution: {integrity: sha512-+Hrc0mP9L6vhICJSfyGo/2taOToy1AIzVZawO3lU8Lf7oDQXfhQ4UkZnkWAs9SVu1eUwHUGGGE0qB8644piYgg==} + '@nomicfoundation/edr-darwin-x64@0.4.1': + resolution: {integrity: sha512-N1MfJqEX5ixaXlyyrHnaYxzwIT27Nc/jUgLI7ts4/9kRvPTvyZRYmXS1ciKhmUFr/WvFckTCix2RJbZoGGtX7g==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-arm64-gnu@0.4.0': - resolution: {integrity: sha512-4HUDMchNClQrVRfVTqBeSX92hM/3khCgpZkXP52qrnJPqgbdCxosOehlQYZ65wu0b/kaaZSyvACgvCLSQ5oSzQ==} + '@nomicfoundation/edr-linux-arm64-gnu@0.4.1': + resolution: {integrity: sha512-bSPOfmcFjJwDgWOV5kgZHeqg2OWu1cINrHSGjig0aVHehjcoX4Sgayrj6fyAxcOV5NQKA6WcyTFll6NrCxzWRA==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-arm64-musl@0.4.0': - resolution: {integrity: sha512-D4J935ZRL8xfnP3zIFlCI9jXInJ0loDUkCTLeCEbOf2uuDumWDghKNQlF1itUS+EHaR1pFVBbuwqq8hVK0dASg==} + '@nomicfoundation/edr-linux-arm64-musl@0.4.1': + resolution: {integrity: sha512-F/+DgOdeBFQDrk+SX4aFffJFBgJfd75ZtE2mjcWNAh/qWiS7NfUxdQX/5OvNo/H6EY4a+3bZH6Bgzqg4mEWvMw==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-x64-gnu@0.4.0': - resolution: {integrity: sha512-6x7HPy+uN5Cb9N77e2XMmT6+QSJ+7mRbHnhkGJ8jm4cZvWuj2Io7npOaeHQ3YHK+TiQpTnlbkjoOIpEwpY3XZA==} + '@nomicfoundation/edr-linux-x64-gnu@0.4.1': + resolution: {integrity: sha512-POHhTWczIXCPhzKtY0Vt/l+VCqqCx5gNR5ErwSrNnLz/arfQobZFAU+nc61BX3Jch82TW8b3AbfGI73Kh7gO0w==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-x64-musl@0.4.0': - resolution: {integrity: sha512-3HFIJSXgyubOiaN4MWGXx2xhTnhwlJk0PiSYNf9+L/fjBtcRkb2nM910ZJHTvqCb6OT98cUnaKuAYdXIW2amgw==} + '@nomicfoundation/edr-linux-x64-musl@0.4.1': + resolution: {integrity: sha512-uu8oNp4Ozg3H1x1We0FF+rwXfFiAvsOm5GQ+OBx9YYOXnfDPWqguQfGIkhrti9GD0iYhfQ/WOG5wvp0IzzgGSg==} engines: {node: '>= 18'} - '@nomicfoundation/edr-win32-x64-msvc@0.4.0': - resolution: {integrity: sha512-CP4GsllEfXEz+lidcGYxKe5rDJ60TM5/blB5z/04ELVvw6/CK9eLcYeku7HV0jvV7VE6dADYKSdQyUkvd0El+A==} + '@nomicfoundation/edr-win32-x64-msvc@0.4.1': + resolution: {integrity: sha512-PaZHFw455z89ZiKYNTnKu+/TiVZVRI+mRJsbRTe2N0VlYfUBS1o2gdXBM12oP1t198HR7xQwEPPAslTFxGBqHA==} engines: {node: '>= 18'} - '@nomicfoundation/edr@0.4.0': - resolution: {integrity: sha512-T96DMSogO8TCdbKKctvxfsDljbhFOUKWc9fHJhSeUh71EEho2qR4951LKQF7t7UWEzguVYh/idQr5L/E3QeaMw==} + '@nomicfoundation/edr@0.4.1': + resolution: {integrity: sha512-NgrMo2rI9r28uidumvd+K2/AJLdxtXsUlJr3hj/pM6S1FCd/HiWaLeLa/cjCVPcE2u1rYAa3W6UFxLCB7S5Dhw==} engines: {node: '>= 18'} '@nomicfoundation/ethereumjs-block@5.0.4': @@ -8150,29 +8150,29 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@nomicfoundation/edr-darwin-arm64@0.4.0': {} + '@nomicfoundation/edr-darwin-arm64@0.4.1': {} - '@nomicfoundation/edr-darwin-x64@0.4.0': {} + '@nomicfoundation/edr-darwin-x64@0.4.1': {} - '@nomicfoundation/edr-linux-arm64-gnu@0.4.0': {} + '@nomicfoundation/edr-linux-arm64-gnu@0.4.1': {} - '@nomicfoundation/edr-linux-arm64-musl@0.4.0': {} + '@nomicfoundation/edr-linux-arm64-musl@0.4.1': {} - '@nomicfoundation/edr-linux-x64-gnu@0.4.0': {} + '@nomicfoundation/edr-linux-x64-gnu@0.4.1': {} - '@nomicfoundation/edr-linux-x64-musl@0.4.0': {} + '@nomicfoundation/edr-linux-x64-musl@0.4.1': {} - '@nomicfoundation/edr-win32-x64-msvc@0.4.0': {} + '@nomicfoundation/edr-win32-x64-msvc@0.4.1': {} - '@nomicfoundation/edr@0.4.0': + '@nomicfoundation/edr@0.4.1': dependencies: - '@nomicfoundation/edr-darwin-arm64': 0.4.0 - '@nomicfoundation/edr-darwin-x64': 0.4.0 - '@nomicfoundation/edr-linux-arm64-gnu': 0.4.0 - '@nomicfoundation/edr-linux-arm64-musl': 0.4.0 - '@nomicfoundation/edr-linux-x64-gnu': 0.4.0 - '@nomicfoundation/edr-linux-x64-musl': 0.4.0 - '@nomicfoundation/edr-win32-x64-msvc': 0.4.0 + '@nomicfoundation/edr-darwin-arm64': 0.4.1 + '@nomicfoundation/edr-darwin-x64': 0.4.1 + '@nomicfoundation/edr-linux-arm64-gnu': 0.4.1 + '@nomicfoundation/edr-linux-arm64-musl': 0.4.1 + '@nomicfoundation/edr-linux-x64-gnu': 0.4.1 + '@nomicfoundation/edr-linux-x64-musl': 0.4.1 + '@nomicfoundation/edr-win32-x64-msvc': 0.4.1 '@nomicfoundation/ethereumjs-block@5.0.4': dependencies: From 9fadc22c498e37de8b7743c08d23f519e04b6fe3 Mon Sep 17 00:00:00 2001 From: Franco Victorio Date: Mon, 1 Jul 2024 18:41:22 +0200 Subject: [PATCH 23/44] Create tall-turkeys-cheat.md --- .changeset/tall-turkeys-cheat.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/tall-turkeys-cheat.md diff --git a/.changeset/tall-turkeys-cheat.md b/.changeset/tall-turkeys-cheat.md new file mode 100644 index 0000000000..1825e74e27 --- /dev/null +++ b/.changeset/tall-turkeys-cheat.md @@ -0,0 +1,5 @@ +--- +"hardhat": patch +--- + +Bump EDR to [v0.4.1](https://github.com/NomicFoundation/edr/releases/tag/%40nomicfoundation%2Fedr%400.4.1). From 411fef632efe130dc55d651708faad7aad3cc021 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 1 Jul 2024 16:43:34 -0300 Subject: [PATCH 24/44] Version Packages (#5404) Co-authored-by: github-actions[bot] --- .changeset/lovely-kiwis-hang.md | 5 ----- .changeset/shiny-wasps-invite.md | 5 ----- .changeset/smooth-rabbits-wait.md | 5 ----- .changeset/tall-turkeys-cheat.md | 5 ----- .changeset/unlucky-tips-jam.md | 5 ----- packages/hardhat-core/CHANGELOG.md | 9 +++++++++ packages/hardhat-core/package.json | 2 +- packages/hardhat-viem/CHANGELOG.md | 11 +++++++++++ packages/hardhat-viem/package.json | 2 +- 9 files changed, 22 insertions(+), 27 deletions(-) delete mode 100644 .changeset/lovely-kiwis-hang.md delete mode 100644 .changeset/shiny-wasps-invite.md delete mode 100644 .changeset/smooth-rabbits-wait.md delete mode 100644 .changeset/tall-turkeys-cheat.md delete mode 100644 .changeset/unlucky-tips-jam.md diff --git a/.changeset/lovely-kiwis-hang.md b/.changeset/lovely-kiwis-hang.md deleted file mode 100644 index 5e92d5b9f1..0000000000 --- a/.changeset/lovely-kiwis-hang.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hardhat": patch ---- - -Upgrade bundled solcjs diff --git a/.changeset/shiny-wasps-invite.md b/.changeset/shiny-wasps-invite.md deleted file mode 100644 index 396118e098..0000000000 --- a/.changeset/shiny-wasps-invite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hardhat": patch ---- - -Add support for Node v22 diff --git a/.changeset/smooth-rabbits-wait.md b/.changeset/smooth-rabbits-wait.md deleted file mode 100644 index e4219e3841..0000000000 --- a/.changeset/smooth-rabbits-wait.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@nomicfoundation/hardhat-viem": patch ---- - -Added `ContractTypesMap` to simplify contract type imports (thanks @beepidibop!) diff --git a/.changeset/tall-turkeys-cheat.md b/.changeset/tall-turkeys-cheat.md deleted file mode 100644 index 1825e74e27..0000000000 --- a/.changeset/tall-turkeys-cheat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hardhat": patch ---- - -Bump EDR to [v0.4.1](https://github.com/NomicFoundation/edr/releases/tag/%40nomicfoundation%2Fedr%400.4.1). diff --git a/.changeset/unlucky-tips-jam.md b/.changeset/unlucky-tips-jam.md deleted file mode 100644 index ac4ab73190..0000000000 --- a/.changeset/unlucky-tips-jam.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hardhat": patch ---- - -Added hardfork histories for Optimim and Arbitrum chains diff --git a/packages/hardhat-core/CHANGELOG.md b/packages/hardhat-core/CHANGELOG.md index 70bf94f57c..8c6d015169 100644 --- a/packages/hardhat-core/CHANGELOG.md +++ b/packages/hardhat-core/CHANGELOG.md @@ -1,5 +1,14 @@ # hardhat +## 2.22.6 + +### Patch Changes + +- cdf0160: Upgrade bundled solcjs +- 3c66da2: Add support for Node v22 +- 9fadc22: Bump EDR to [v0.4.1](https://github.com/NomicFoundation/edr/releases/tag/%40nomicfoundation%2Fedr%400.4.1). +- 095faa4: Added hardfork histories for Optimim and Arbitrum chains + ## 2.22.5 ### Patch Changes diff --git a/packages/hardhat-core/package.json b/packages/hardhat-core/package.json index b6b5cb3f70..778985d06d 100644 --- a/packages/hardhat-core/package.json +++ b/packages/hardhat-core/package.json @@ -1,6 +1,6 @@ { "name": "hardhat", - "version": "2.22.5", + "version": "2.22.6", "author": "Nomic Labs LLC", "license": "MIT", "homepage": "https://hardhat.org", diff --git a/packages/hardhat-viem/CHANGELOG.md b/packages/hardhat-viem/CHANGELOG.md index 3cc872bc91..2f0709086b 100644 --- a/packages/hardhat-viem/CHANGELOG.md +++ b/packages/hardhat-viem/CHANGELOG.md @@ -1,5 +1,16 @@ # @nomicfoundation/hardhat-viem +## 2.0.3 + +### Patch Changes + +- a8a6038: Added `ContractTypesMap` to simplify contract type imports (thanks @beepidibop!) +- Updated dependencies [cdf0160] +- Updated dependencies [3c66da2] +- Updated dependencies [9fadc22] +- Updated dependencies [095faa4] + - hardhat@2.22.6 + ## 2.0.2 ### Patch Changes diff --git a/packages/hardhat-viem/package.json b/packages/hardhat-viem/package.json index 037527daf7..a147a404d0 100644 --- a/packages/hardhat-viem/package.json +++ b/packages/hardhat-viem/package.json @@ -1,6 +1,6 @@ { "name": "@nomicfoundation/hardhat-viem", - "version": "2.0.2", + "version": "2.0.3", "description": "Hardhat plugin for viem", "homepage": "https://github.com/nomicfoundation/hardhat/tree/main/packages/hardhat-viem", "repository": "github:nomicfoundation/hardhat", From 61c2c0cf3ddeb7acbf064571f225a64fa45e3f04 Mon Sep 17 00:00:00 2001 From: Franco Victorio Date: Tue, 2 Jul 2024 12:06:06 +0200 Subject: [PATCH 25/44] Avoid unconditional reverts in stack traces tests --- .../call-message/multiple-modifiers-require/c.sol | 7 +++++-- .../call-message/multiple-modifiers-require/test.json | 2 +- .../create-message/multiple-modifiers-require/c.sol | 7 +++++-- .../create-message/multiple-modifiers-require/test.json | 2 +- .../within-receive/between-statements/c.sol | 5 ++++- .../within-receive/between-statements/test.json | 2 +- .../within-receive/no-other-statements/c.sol | 5 ++++- .../within-receive/no-other-statements/test.json | 2 +- .../within-receive/statement-after/c.sol | 5 ++++- .../within-receive/statement-after/test.json | 2 +- .../within-receive/statement-before/c.sol | 5 ++++- .../within-receive/statement-before/test.json | 2 +- 12 files changed, 32 insertions(+), 14 deletions(-) diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/modifiers/call-message/multiple-modifiers-require/c.sol b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/modifiers/call-message/multiple-modifiers-require/c.sol index 6282f797af..a9f4bb8309 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/modifiers/call-message/multiple-modifiers-require/c.sol +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/modifiers/call-message/multiple-modifiers-require/c.sol @@ -7,8 +7,11 @@ contract C { _; } - function test(bool b) m1(b) m2(b) public { - revert(); + function test(bool b, bool doRevert) m1(b) m2(b) public { + // always true, used to prevent optimizations + if (doRevert) { + revert(); + } } modifier m1(bool b) { diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/modifiers/call-message/multiple-modifiers-require/test.json b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/modifiers/call-message/multiple-modifiers-require/test.json index 2d9b4e2762..d8abf12a2e 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/modifiers/call-message/multiple-modifiers-require/test.json +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/modifiers/call-message/multiple-modifiers-require/test.json @@ -6,7 +6,7 @@ }, { "to": 0, - "params": [false], + "params": [false, true], "function": "test", "stackTrace": [ { diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/modifiers/create-message/multiple-modifiers-require/c.sol b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/modifiers/create-message/multiple-modifiers-require/c.sol index a45d7f6b03..105a451f4e 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/modifiers/create-message/multiple-modifiers-require/c.sol +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/modifiers/create-message/multiple-modifiers-require/c.sol @@ -7,8 +7,11 @@ contract C { _; } - constructor(bool b) m1(b) m2(b) public { - revert(); + constructor(bool b, bool doRevert) m1(b) m2(b) public { + // always true, used to prevent optimizations + if (doRevert) { + revert(); + } } modifier m1(bool b) { diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/modifiers/create-message/multiple-modifiers-require/test.json b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/modifiers/create-message/multiple-modifiers-require/test.json index 36009d9509..774b5eb3cf 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/modifiers/create-message/multiple-modifiers-require/test.json +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/modifiers/create-message/multiple-modifiers-require/test.json @@ -3,7 +3,7 @@ { "file": "c.sol", "contract": "C", - "params": [false], + "params": [false, true], "stackTrace": [ { "type": "CALLSTACK_ENTRY", diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/between-statements/c.sol b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/between-statements/c.sol index ce3b1307cc..fedaa38a60 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/between-statements/c.sol +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/between-statements/c.sol @@ -7,7 +7,10 @@ contract C { receive() external payable { i += 1; - revert(); + // always true, used to prevent optimizations + if (msg.value == 0) { + revert(); + } j += 2; } diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/between-statements/test.json b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/between-statements/test.json index 821a712d08..3516625820 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/between-statements/test.json +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/between-statements/test.json @@ -14,7 +14,7 @@ "contract": "C", "file": "c.sol", "function": "", - "line": 10 + "line": 12 } } ] diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/no-other-statements/c.sol b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/no-other-statements/c.sol index a80dba7887..b6f9265376 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/no-other-statements/c.sol +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/no-other-statements/c.sol @@ -5,7 +5,10 @@ contract C { receive() external payable { - revert(); + // always true, used to prevent optimizations + if (msg.value == 0) { + revert(); + } } } diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/no-other-statements/test.json b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/no-other-statements/test.json index f0122a5fa3..821a712d08 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/no-other-statements/test.json +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/no-other-statements/test.json @@ -14,7 +14,7 @@ "contract": "C", "file": "c.sol", "function": "", - "line": 8 + "line": 10 } } ] diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/statement-after/c.sol b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/statement-after/c.sol index 7fff363cce..c98367efae 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/statement-after/c.sol +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/statement-after/c.sol @@ -7,7 +7,10 @@ contract C { receive() external payable { - revert(); + // always true, used to prevent optimizations + if (msg.value == 0) { + revert(); + } i += 1; } diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/statement-after/test.json b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/statement-after/test.json index 821a712d08..3516625820 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/statement-after/test.json +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/statement-after/test.json @@ -14,7 +14,7 @@ "contract": "C", "file": "c.sol", "function": "", - "line": 10 + "line": 12 } } ] diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/statement-before/c.sol b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/statement-before/c.sol index 6a24f9a97d..53c4715798 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/statement-before/c.sol +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/statement-before/c.sol @@ -7,7 +7,10 @@ contract C { receive() external payable { i += 1; - revert(); + // always true, used to prevent optimizations + if (msg.value == 0) { + revert(); + } } } diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/statement-before/test.json b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/statement-before/test.json index 821a712d08..3516625820 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/statement-before/test.json +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/revert-without-message/revert-without-message/within-receive/statement-before/test.json @@ -14,7 +14,7 @@ "contract": "C", "file": "c.sol", "function": "", - "line": 10 + "line": 12 } } ] From 1f9f8e053b55b69afdbb1c02848551393f4b3401 Mon Sep 17 00:00:00 2001 From: Marko Arambasic <131957563+kiriyaga-txfusion@users.noreply.github.com> Date: Tue, 2 Jul 2024 21:34:20 +0200 Subject: [PATCH 26/44] fix: support for vyper version 0.4.0 with the new output identifiers (#5469) * fix: support for vyper version 0.4.0 with the new output identifiers * Create wet-cars-sin.md --------- Co-authored-by: Marko Arambasic Co-authored-by: Patricio Palladino --- .changeset/wet-cars-sin.md | 5 ++++ packages/hardhat-vyper/src/constants.ts | 1 + packages/hardhat-vyper/src/index.ts | 23 ++++++++++++++++--- .../contracts/A.vy | 8 +++++++ .../contracts/B.vy | 8 +++++++ .../hardhat.config.js | 15 ++++++++++++ packages/hardhat-vyper/test/tests.ts | 12 ++++++++++ 7 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 .changeset/wet-cars-sin.md create mode 100644 packages/hardhat-vyper/test/fixture-projects/compilation-with-vyper-output-breakable-version/contracts/A.vy create mode 100644 packages/hardhat-vyper/test/fixture-projects/compilation-with-vyper-output-breakable-version/contracts/B.vy create mode 100644 packages/hardhat-vyper/test/fixture-projects/compilation-with-vyper-output-breakable-version/hardhat.config.js diff --git a/.changeset/wet-cars-sin.md b/.changeset/wet-cars-sin.md new file mode 100644 index 0000000000..c71e44c9f0 --- /dev/null +++ b/.changeset/wet-cars-sin.md @@ -0,0 +1,5 @@ +--- +"@nomiclabs/hardhat-vyper": patch +--- + +Support Vyper 0.4.0's new output identifiers (Thanks, @kiriyaga-txfusion!) diff --git a/packages/hardhat-vyper/src/constants.ts b/packages/hardhat-vyper/src/constants.ts index a6093d25c8..f7b9dfffcc 100644 --- a/packages/hardhat-vyper/src/constants.ts +++ b/packages/hardhat-vyper/src/constants.ts @@ -3,3 +3,4 @@ export const ARTIFACT_FORMAT_VERSION = "hh-vyper-artifact-1"; export const DEBUG_NAMESPACE = "hardhat:plugin:vyper"; export const CACHE_FORMAT_VERSION = "hh-vy-cache-1"; export const VYPER_FILES_CACHE_FILENAME = "vyper-files-cache.json"; +export const OUTPUT_BREAKABLE_VYPER_VERSION = "0.4.0"; diff --git a/packages/hardhat-vyper/src/index.ts b/packages/hardhat-vyper/src/index.ts index e55c129cda..002fef7a36 100644 --- a/packages/hardhat-vyper/src/index.ts +++ b/packages/hardhat-vyper/src/index.ts @@ -23,7 +23,10 @@ import { TASK_COMPILE_VYPER_LOG_DOWNLOAD_COMPILER_END, TASK_COMPILE_VYPER_LOG_COMPILATION_RESULT, } from "./task-names"; -import { DEFAULT_VYPER_VERSION } from "./constants"; +import { + DEFAULT_VYPER_VERSION, + OUTPUT_BREAKABLE_VYPER_VERSION, +} from "./constants"; import { Compiler } from "./compiler"; import { CompilerDownloader } from "./downloader"; import { @@ -344,10 +347,24 @@ ${list}` } ); - for (const [sourceName, output] of Object.entries(contracts)) { + const { localPathToSourceName } = await import( + "hardhat/utils/source-names" + ); + + for (const [contractSourceIdentifier, output] of Object.entries( + contracts + )) { + const sourceName = semver.gte( + vyperVersion, + OUTPUT_BREAKABLE_VYPER_VERSION + ) + ? await localPathToSourceName( + config.paths.root, + contractSourceIdentifier + ) + : contractSourceIdentifier; const artifact = getArtifactFromVyperOutput(sourceName, output); await artifacts.saveArtifactAndDebugFile(artifact); - const file = files.find((f) => f.sourceName === sourceName); assertPluginInvariant( file !== undefined, diff --git a/packages/hardhat-vyper/test/fixture-projects/compilation-with-vyper-output-breakable-version/contracts/A.vy b/packages/hardhat-vyper/test/fixture-projects/compilation-with-vyper-output-breakable-version/contracts/A.vy new file mode 100644 index 0000000000..365dbc66db --- /dev/null +++ b/packages/hardhat-vyper/test/fixture-projects/compilation-with-vyper-output-breakable-version/contracts/A.vy @@ -0,0 +1,8 @@ +# pragma version ~=0.4.0 + +IMMUTABLE_1: public(immutable(String[4])) + +@deploy +@payable +def __init__(): + IMMUTABLE_1 = "A" \ No newline at end of file diff --git a/packages/hardhat-vyper/test/fixture-projects/compilation-with-vyper-output-breakable-version/contracts/B.vy b/packages/hardhat-vyper/test/fixture-projects/compilation-with-vyper-output-breakable-version/contracts/B.vy new file mode 100644 index 0000000000..835f229d0a --- /dev/null +++ b/packages/hardhat-vyper/test/fixture-projects/compilation-with-vyper-output-breakable-version/contracts/B.vy @@ -0,0 +1,8 @@ +# pragma version ~=0.4.0 + +IMMUTABLE_1: public(immutable(String[4])) + +@deploy +@payable +def __init__(): + IMMUTABLE_1 = "B" diff --git a/packages/hardhat-vyper/test/fixture-projects/compilation-with-vyper-output-breakable-version/hardhat.config.js b/packages/hardhat-vyper/test/fixture-projects/compilation-with-vyper-output-breakable-version/hardhat.config.js new file mode 100644 index 0000000000..77ced97a60 --- /dev/null +++ b/packages/hardhat-vyper/test/fixture-projects/compilation-with-vyper-output-breakable-version/hardhat.config.js @@ -0,0 +1,15 @@ +require("../../../src/index"); + +module.exports = { + vyper: { + compilers: [ + { + version: "0.4.0", + settings: { + evmVersion: "paris", + optimize: "gas", + }, + }, + ], + }, +}; diff --git a/packages/hardhat-vyper/test/tests.ts b/packages/hardhat-vyper/test/tests.ts index 82b916ab19..13116203a5 100644 --- a/packages/hardhat-vyper/test/tests.ts +++ b/packages/hardhat-vyper/test/tests.ts @@ -305,4 +305,16 @@ describe("Vyper plugin", function () { ); }); }); + + describe("compile project with different ouput identifiers returned from the vyper compiler", function () { + useFixtureProject("compilation-with-vyper-output-breakable-version"); + useEnvironment(); + + it("Should successfully compile the contracts for versions >= 0.4.0", async function () { + await this.env.run(TASK_COMPILE); + + assert.equal(this.env.artifacts.readArtifactSync("A").contractName, "A"); + assert.equal(this.env.artifacts.readArtifactSync("B").contractName, "B"); + }); + }); }); From 377d187e88b3de515ab8a44c76ef91353fb3b569 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 2 Jul 2024 19:34:48 +0000 Subject: [PATCH 27/44] Version Packages --- .changeset/wet-cars-sin.md | 5 ----- packages/hardhat-vyper/CHANGELOG.md | 6 ++++++ packages/hardhat-vyper/package.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 .changeset/wet-cars-sin.md diff --git a/.changeset/wet-cars-sin.md b/.changeset/wet-cars-sin.md deleted file mode 100644 index c71e44c9f0..0000000000 --- a/.changeset/wet-cars-sin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@nomiclabs/hardhat-vyper": patch ---- - -Support Vyper 0.4.0's new output identifiers (Thanks, @kiriyaga-txfusion!) diff --git a/packages/hardhat-vyper/CHANGELOG.md b/packages/hardhat-vyper/CHANGELOG.md index 65d28467ab..adf3b85d7c 100644 --- a/packages/hardhat-vyper/CHANGELOG.md +++ b/packages/hardhat-vyper/CHANGELOG.md @@ -1,5 +1,11 @@ # @nomiclabs/hardhat-vyper +## 3.0.7 + +### Patch Changes + +- 1f9f8e0: Support Vyper 0.4.0's new output identifiers (Thanks, @kiriyaga-txfusion!) + ## 3.0.6 ### Patch Changes diff --git a/packages/hardhat-vyper/package.json b/packages/hardhat-vyper/package.json index dddca23653..ebb6d83849 100644 --- a/packages/hardhat-vyper/package.json +++ b/packages/hardhat-vyper/package.json @@ -1,6 +1,6 @@ { "name": "@nomiclabs/hardhat-vyper", - "version": "3.0.6", + "version": "3.0.7", "description": "Hardhat plugin to develop smart contracts in Vyper", "repository": "github:nomiclabs/hardhat", "homepage": "https://github.com/nomiclabs/hardhat/tree/main/packages/hardhat-vyper", From 978fcb16d799666288b02e3b8a4bc1388e34a70b Mon Sep 17 00:00:00 2001 From: Yanke G Date: Wed, 3 Jul 2024 16:44:33 +0800 Subject: [PATCH 28/44] Update plugins.ts Add @yankeguo/hardhat-trezor --- docs/src/content/hardhat-runner/plugins/plugins.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/src/content/hardhat-runner/plugins/plugins.ts b/docs/src/content/hardhat-runner/plugins/plugins.ts index 38ee9072f2..ef37dc9040 100644 --- a/docs/src/content/hardhat-runner/plugins/plugins.ts +++ b/docs/src/content/hardhat-runner/plugins/plugins.ts @@ -988,6 +988,13 @@ const communityPlugins: IPlugin[] = [ description: "Hardhat plugin to get interfaceid", tags: ["ABI", "interfaceid", "Solarity"], }, + { + name: "@yankeguo/hardhat-trezor", + author: "Yanke G.", + authorUrl: "https://yankeguo.com", + description: "Hardhat plugin for the Trezor hardware wallet", + tags: ["Trezor", "Wallet"], + }, ]; const officialPlugins: IPlugin[] = [ From 93ef7872cd1a424d9a0f4f71efc662fbc3a78adc Mon Sep 17 00:00:00 2001 From: Franco Victorio Date: Wed, 3 Jul 2024 11:46:05 +0200 Subject: [PATCH 29/44] Add debug logs for provider creation --- .../src/internal/hardhat-network/provider/provider.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts index 6496053570..0df36f90a1 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts @@ -619,11 +619,17 @@ export async function createHardhatNetworkProvider( loggerConfig: LoggerConfig, artifacts?: Artifacts ): Promise { - return EdrProviderWrapper.create( + log("Making tracing config"); + const tracingConfig = await makeTracingConfig(artifacts); + log("Creating EDR provider"); + const provider = EdrProviderWrapper.create( hardhatNetworkProviderConfig, loggerConfig, - await makeTracingConfig(artifacts) + tracingConfig ); + log("EDR provider created"); + + return provider; } async function makeTracingConfig( From f6ddc92e46c3031367c4cb7c549964169ccfb9c3 Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Wed, 3 Jul 2024 11:34:10 -0300 Subject: [PATCH 30/44] Create fuzzy-mangos-behave.md --- .changeset/fuzzy-mangos-behave.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/fuzzy-mangos-behave.md diff --git a/.changeset/fuzzy-mangos-behave.md b/.changeset/fuzzy-mangos-behave.md new file mode 100644 index 0000000000..ea406edfdc --- /dev/null +++ b/.changeset/fuzzy-mangos-behave.md @@ -0,0 +1,5 @@ +--- +"hardhat": patch +--- + +Add `debug` logs to Hardhat Network initialization process. From 73e7be56fabcea751993d167f6995a290f155de5 Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Wed, 3 Jul 2024 19:52:44 +0000 Subject: [PATCH 31/44] Upgrade pnpm/action-setup to v4 --- .github/workflows/LATEST_DEPENDENCY_VERSIONS.yml | 2 +- .github/workflows/check-docs-site.yml | 2 +- .github/workflows/comment-on-linter-error.yml | 2 +- .github/workflows/e2e-tests.yml | 2 +- .github/workflows/hardhat-chai-matchers-ci.yml | 6 +++--- .github/workflows/hardhat-core-ci.yml | 6 +++--- .github/workflows/hardhat-ethers-ci.yml | 6 +++--- .github/workflows/hardhat-foundry-ci.yml | 6 +++--- .github/workflows/hardhat-ledger-ci.yml | 6 +++--- .github/workflows/hardhat-network-helpers-ci.yml | 6 +++--- .../workflows/hardhat-network-tracing-all-solc-versions.yml | 2 +- .github/workflows/hardhat-shorthand-ci.yml | 6 +++--- .github/workflows/hardhat-solhint-ci.yml | 6 +++--- .github/workflows/hardhat-solpp-ci.yml | 4 ++-- .github/workflows/hardhat-toolbox-ci.yml | 6 +++--- .github/workflows/hardhat-truffle4-ci.yml | 6 +++--- .github/workflows/hardhat-truffle5-ci.yml | 6 +++--- .github/workflows/hardhat-verify-ci.yml | 6 +++--- .github/workflows/hardhat-viem-ci.yml | 6 +++--- .github/workflows/hardhat-vyper-ci.yml | 2 +- .github/workflows/hardhat-web3-ci.yml | 6 +++--- .github/workflows/hardhat-web3-legacy-ci.yml | 6 +++--- .github/workflows/hardhat-web3-v4-ci.yml | 6 +++--- .github/workflows/lint.yml | 2 +- .github/workflows/pre-release.yml | 4 ++-- .github/workflows/release.yml | 2 +- .github/workflows/test-slow-imports-rule.yml | 2 +- 27 files changed, 61 insertions(+), 61 deletions(-) diff --git a/.github/workflows/LATEST_DEPENDENCY_VERSIONS.yml b/.github/workflows/LATEST_DEPENDENCY_VERSIONS.yml index 6098f1a400..f5e4b8a397 100644 --- a/.github/workflows/LATEST_DEPENDENCY_VERSIONS.yml +++ b/.github/workflows/LATEST_DEPENDENCY_VERSIONS.yml @@ -14,7 +14,7 @@ jobs: runs-on: ${{ matrix.system }} steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/check-docs-site.yml b/.github/workflows/check-docs-site.yml index ba2933b459..3f4af679cb 100644 --- a/.github/workflows/check-docs-site.yml +++ b/.github/workflows/check-docs-site.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/comment-on-linter-error.yml b/.github/workflows/comment-on-linter-error.yml index a1d4c21456..79a8036e0d 100644 --- a/.github/workflows/comment-on-linter-error.yml +++ b/.github/workflows/comment-on-linter-error.yml @@ -20,7 +20,7 @@ jobs: uses: actions/checkout@v4 with: ref: "refs/pull/${{ github.event.number }}/merge" - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index b9b6eb3393..08f1e47d12 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -29,7 +29,7 @@ jobs: IS_WINDOWS: ${{ matrix.os == 'windows-latest' }} steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/hardhat-chai-matchers-ci.yml b/.github/workflows/hardhat-chai-matchers-ci.yml index 2a783516e2..8a8c3383e4 100644 --- a/.github/workflows/hardhat-chai-matchers-ci.yml +++ b/.github/workflows/hardhat-chai-matchers-ci.yml @@ -30,7 +30,7 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -51,7 +51,7 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -75,7 +75,7 @@ jobs: node: [18, 20, 22] steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/hardhat-core-ci.yml b/.github/workflows/hardhat-core-ci.yml index 9b836e88f5..a3394316b2 100644 --- a/.github/workflows/hardhat-core-ci.yml +++ b/.github/workflows/hardhat-core-ci.yml @@ -41,7 +41,7 @@ jobs: steps: - uses: actions/checkout@v3 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - name: Install Node @@ -83,7 +83,7 @@ jobs: steps: - uses: actions/checkout@v3 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - name: Install Node @@ -123,7 +123,7 @@ jobs: node: [18, 20] steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/hardhat-ethers-ci.yml b/.github/workflows/hardhat-ethers-ci.yml index e9b999d10b..ed6bc1a7bb 100644 --- a/.github/workflows/hardhat-ethers-ci.yml +++ b/.github/workflows/hardhat-ethers-ci.yml @@ -32,7 +32,7 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -51,7 +51,7 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -73,7 +73,7 @@ jobs: node: [18, 20, 22] steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/hardhat-foundry-ci.yml b/.github/workflows/hardhat-foundry-ci.yml index cb0b3f5554..7d5eb8c5c9 100644 --- a/.github/workflows/hardhat-foundry-ci.yml +++ b/.github/workflows/hardhat-foundry-ci.yml @@ -30,7 +30,7 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -51,7 +51,7 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -75,7 +75,7 @@ jobs: node: [18, 20, 22] steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/hardhat-ledger-ci.yml b/.github/workflows/hardhat-ledger-ci.yml index 5a50289774..095739e069 100644 --- a/.github/workflows/hardhat-ledger-ci.yml +++ b/.github/workflows/hardhat-ledger-ci.yml @@ -33,7 +33,7 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -52,7 +52,7 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -74,7 +74,7 @@ jobs: node: [18, 20, 22] steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/hardhat-network-helpers-ci.yml b/.github/workflows/hardhat-network-helpers-ci.yml index f6ab28d0d9..cf565d7f56 100644 --- a/.github/workflows/hardhat-network-helpers-ci.yml +++ b/.github/workflows/hardhat-network-helpers-ci.yml @@ -32,7 +32,7 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -53,7 +53,7 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -77,7 +77,7 @@ jobs: node: [18, 20, 22] steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/hardhat-network-tracing-all-solc-versions.yml b/.github/workflows/hardhat-network-tracing-all-solc-versions.yml index a68eb6484f..1dde30263f 100644 --- a/.github/workflows/hardhat-network-tracing-all-solc-versions.yml +++ b/.github/workflows/hardhat-network-tracing-all-solc-versions.yml @@ -22,7 +22,7 @@ jobs: node: [18, 20, 22] steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/hardhat-shorthand-ci.yml b/.github/workflows/hardhat-shorthand-ci.yml index 275a39ac72..7801a82cbe 100644 --- a/.github/workflows/hardhat-shorthand-ci.yml +++ b/.github/workflows/hardhat-shorthand-ci.yml @@ -32,7 +32,7 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -51,7 +51,7 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -73,7 +73,7 @@ jobs: node: [18, 20, 22] steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/hardhat-solhint-ci.yml b/.github/workflows/hardhat-solhint-ci.yml index 336356bdbe..ec06a1a480 100644 --- a/.github/workflows/hardhat-solhint-ci.yml +++ b/.github/workflows/hardhat-solhint-ci.yml @@ -32,7 +32,7 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -51,7 +51,7 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -73,7 +73,7 @@ jobs: node: [18, 20, 22] steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/hardhat-solpp-ci.yml b/.github/workflows/hardhat-solpp-ci.yml index 9ee4ab6c4e..2709a47215 100644 --- a/.github/workflows/hardhat-solpp-ci.yml +++ b/.github/workflows/hardhat-solpp-ci.yml @@ -32,7 +32,7 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -54,7 +54,7 @@ jobs: node: [18, 20, 22] steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/hardhat-toolbox-ci.yml b/.github/workflows/hardhat-toolbox-ci.yml index 33cea7c827..83e9613128 100644 --- a/.github/workflows/hardhat-toolbox-ci.yml +++ b/.github/workflows/hardhat-toolbox-ci.yml @@ -40,7 +40,7 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -59,7 +59,7 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -81,7 +81,7 @@ jobs: node: [18, 20, 22] steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/hardhat-truffle4-ci.yml b/.github/workflows/hardhat-truffle4-ci.yml index 538c569bb2..f813ca4ccd 100644 --- a/.github/workflows/hardhat-truffle4-ci.yml +++ b/.github/workflows/hardhat-truffle4-ci.yml @@ -34,7 +34,7 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -53,7 +53,7 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -75,7 +75,7 @@ jobs: node: [18, 20, 22] steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/hardhat-truffle5-ci.yml b/.github/workflows/hardhat-truffle5-ci.yml index 771bd4f742..90cc0974ea 100644 --- a/.github/workflows/hardhat-truffle5-ci.yml +++ b/.github/workflows/hardhat-truffle5-ci.yml @@ -34,7 +34,7 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -53,7 +53,7 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -75,7 +75,7 @@ jobs: node: [18, 20, 22] steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/hardhat-verify-ci.yml b/.github/workflows/hardhat-verify-ci.yml index 99dfe9457c..e20471d196 100644 --- a/.github/workflows/hardhat-verify-ci.yml +++ b/.github/workflows/hardhat-verify-ci.yml @@ -32,7 +32,7 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -51,7 +51,7 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -73,7 +73,7 @@ jobs: node: [18, 20, 22] steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/hardhat-viem-ci.yml b/.github/workflows/hardhat-viem-ci.yml index e2e22219e6..8ec4a4083a 100644 --- a/.github/workflows/hardhat-viem-ci.yml +++ b/.github/workflows/hardhat-viem-ci.yml @@ -32,7 +32,7 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -51,7 +51,7 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -73,7 +73,7 @@ jobs: node: [18, 20, 22] steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/hardhat-vyper-ci.yml b/.github/workflows/hardhat-vyper-ci.yml index ef47cfc6e5..1c4f5d3f2b 100644 --- a/.github/workflows/hardhat-vyper-ci.yml +++ b/.github/workflows/hardhat-vyper-ci.yml @@ -35,7 +35,7 @@ jobs: node: [18, 20, 22] steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/hardhat-web3-ci.yml b/.github/workflows/hardhat-web3-ci.yml index 83c13d80d1..afc7e4e024 100644 --- a/.github/workflows/hardhat-web3-ci.yml +++ b/.github/workflows/hardhat-web3-ci.yml @@ -32,7 +32,7 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -51,7 +51,7 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -73,7 +73,7 @@ jobs: node: [18, 20, 22] steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/hardhat-web3-legacy-ci.yml b/.github/workflows/hardhat-web3-legacy-ci.yml index b81feac35e..18e7e54903 100644 --- a/.github/workflows/hardhat-web3-legacy-ci.yml +++ b/.github/workflows/hardhat-web3-legacy-ci.yml @@ -32,7 +32,7 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -51,7 +51,7 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -73,7 +73,7 @@ jobs: node: [18, 20, 22] steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/hardhat-web3-v4-ci.yml b/.github/workflows/hardhat-web3-v4-ci.yml index e2ca7fd887..746413aa6e 100644 --- a/.github/workflows/hardhat-web3-v4-ci.yml +++ b/.github/workflows/hardhat-web3-v4-ci.yml @@ -32,7 +32,7 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -51,7 +51,7 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -73,7 +73,7 @@ jobs: node: [18, 20, 22] steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 19877ba53b..760e0495f0 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index d534a52b5f..1db35d8a33 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 @@ -52,7 +52,7 @@ jobs: working-directory: packages/hardhat-core steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1c91ece727..8d49ad9b64 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,7 +20,7 @@ jobs: fetch-depth: 0 - name: Setup pnpm - uses: pnpm/action-setup@v2 + uses: pnpm/action-setup@v4 with: version: 9 diff --git a/.github/workflows/test-slow-imports-rule.yml b/.github/workflows/test-slow-imports-rule.yml index dcdddb3634..6f6d2a3847 100644 --- a/.github/workflows/test-slow-imports-rule.yml +++ b/.github/workflows/test-slow-imports-rule.yml @@ -22,7 +22,7 @@ jobs: runs-on: "ubuntu-latest" steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 + - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 From 7435364f06e07f82f12fc7d2cb15ac5b03ad7cc0 Mon Sep 17 00:00:00 2001 From: 3commascapital <90629478+3commascapital@users.noreply.github.com> Date: Tue, 9 Jul 2024 15:33:49 -0500 Subject: [PATCH 32/44] Adds logic for forcing through verification when is verified check fails in backend --- .../hardhat-verify/src/internal/tasks/etherscan.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/hardhat-verify/src/internal/tasks/etherscan.ts b/packages/hardhat-verify/src/internal/tasks/etherscan.ts index e238896ebf..f3b93e5589 100644 --- a/packages/hardhat-verify/src/internal/tasks/etherscan.ts +++ b/packages/hardhat-verify/src/internal/tasks/etherscan.ts @@ -27,6 +27,7 @@ import { UnexpectedNumberOfFilesError, VerificationAPIUnexpectedMessageError, ContractAlreadyVerifiedError, + NetworkRequestError, } from "../errors"; import { Etherscan } from "../etherscan"; import { Bytecode } from "../solc/bytecode"; @@ -102,7 +103,15 @@ subtask(TASK_VERIFY_ETHERSCAN) chainConfig ); - const isVerified = await etherscan.isVerified(address); + let isVerified = false + try { + isVerified = await etherscan.isVerified(address); + } catch (err) { + if (!force || err instanceof NetworkRequestError) { + throw err + } + // https://github.com/blockscout/blockscout/issues/9001 + } if (!force && isVerified) { const contractURL = etherscan.getContractUrl(address); console.log(`The contract ${address} has already been verified on the block explorer. If you're trying to verify a partially verified contract, please use the --force flag. From 88e57fa3870aff726d8d6d536c03155f685acf63 Mon Sep 17 00:00:00 2001 From: push <90629478+3commascapital@users.noreply.github.com> Date: Tue, 9 Jul 2024 16:02:38 -0500 Subject: [PATCH 33/44] Adds changeset --- .changeset/fuzzy-eyes-collect.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/fuzzy-eyes-collect.md diff --git a/.changeset/fuzzy-eyes-collect.md b/.changeset/fuzzy-eyes-collect.md new file mode 100644 index 0000000000..deb79573b6 --- /dev/null +++ b/.changeset/fuzzy-eyes-collect.md @@ -0,0 +1,5 @@ +--- +"@nomicfoundation/hardhat-verify": patch +--- + +Makes force flag comprehensive enough to cover failing optional calls From 3084ec6cdf0665f5be2c9c191421732ab937ee4e Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Tue, 9 Jul 2024 19:06:37 -0300 Subject: [PATCH 34/44] Update .changeset/fuzzy-eyes-collect.md --- .changeset/fuzzy-eyes-collect.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/fuzzy-eyes-collect.md b/.changeset/fuzzy-eyes-collect.md index deb79573b6..dc057aca7f 100644 --- a/.changeset/fuzzy-eyes-collect.md +++ b/.changeset/fuzzy-eyes-collect.md @@ -2,4 +2,4 @@ "@nomicfoundation/hardhat-verify": patch --- -Makes force flag comprehensive enough to cover failing optional calls +Make the `--force` flag override the check of any existing verification, even in the presence of errors. From 2f8ec7b9d8b15c1868b82d971138804c22ab614a Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Tue, 9 Jul 2024 22:07:33 +0000 Subject: [PATCH 35/44] Fix linter errors --- packages/hardhat-verify/src/internal/tasks/etherscan.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/hardhat-verify/src/internal/tasks/etherscan.ts b/packages/hardhat-verify/src/internal/tasks/etherscan.ts index f3b93e5589..1154f8abf7 100644 --- a/packages/hardhat-verify/src/internal/tasks/etherscan.ts +++ b/packages/hardhat-verify/src/internal/tasks/etherscan.ts @@ -103,12 +103,12 @@ subtask(TASK_VERIFY_ETHERSCAN) chainConfig ); - let isVerified = false + let isVerified = false; try { isVerified = await etherscan.isVerified(address); } catch (err) { if (!force || err instanceof NetworkRequestError) { - throw err + throw err; } // https://github.com/blockscout/blockscout/issues/9001 } From ca8428806f601d30e81c5f79940feb11dff1c1e0 Mon Sep 17 00:00:00 2001 From: Franco Victorio Date: Thu, 11 Jul 2024 14:35:03 +0200 Subject: [PATCH 36/44] Bump EDR to 0.4.2 --- packages/hardhat-core/package.json | 2 +- pnpm-lock.yaml | 66 +++++++++++++++--------------- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/packages/hardhat-core/package.json b/packages/hardhat-core/package.json index 778985d06d..8b28d53a3d 100644 --- a/packages/hardhat-core/package.json +++ b/packages/hardhat-core/package.json @@ -102,7 +102,7 @@ "dependencies": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/edr": "^0.4.1", + "@nomicfoundation/edr": "^0.4.2", "@nomicfoundation/ethereumjs-common": "4.0.4", "@nomicfoundation/ethereumjs-tx": "5.0.4", "@nomicfoundation/ethereumjs-util": "9.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ba958af25a..82ae35fd59 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -201,8 +201,8 @@ importers: specifier: ^4.0.0 version: 4.0.1 '@nomicfoundation/edr': - specifier: ^0.4.1 - version: 0.4.1 + specifier: ^0.4.2 + version: 0.4.2 '@nomicfoundation/ethereumjs-common': specifier: 4.0.4 version: 4.0.4 @@ -2332,36 +2332,36 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nomicfoundation/edr-darwin-arm64@0.4.1': - resolution: {integrity: sha512-XuiUUnWAVNw7JYv7nRqDWfpBm21HOxCRBQ8lQnRnmiets9Ss2X5Ul9mvBheIPh/D0wBzwJ8TRtsSrorpwE79cA==} + '@nomicfoundation/edr-darwin-arm64@0.4.2': + resolution: {integrity: sha512-S+hhepupfqpBvMa9M1PVS08sVjGXsLnjyAsjhrrsjsNuTHVLhKzhkguvBD5g4If5skrwgOaVqpag4wnQbd15kQ==} engines: {node: '>= 18'} - '@nomicfoundation/edr-darwin-x64@0.4.1': - resolution: {integrity: sha512-N1MfJqEX5ixaXlyyrHnaYxzwIT27Nc/jUgLI7ts4/9kRvPTvyZRYmXS1ciKhmUFr/WvFckTCix2RJbZoGGtX7g==} + '@nomicfoundation/edr-darwin-x64@0.4.2': + resolution: {integrity: sha512-/zM94AUrXz6CmcsecRNHJ50jABDUFafmGc4iBmkfX/mTp4tVZj7XTyIogrQIt0FnTaeb4CgZoLap2+8tW/Uldg==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-arm64-gnu@0.4.1': - resolution: {integrity: sha512-bSPOfmcFjJwDgWOV5kgZHeqg2OWu1cINrHSGjig0aVHehjcoX4Sgayrj6fyAxcOV5NQKA6WcyTFll6NrCxzWRA==} + '@nomicfoundation/edr-linux-arm64-gnu@0.4.2': + resolution: {integrity: sha512-TV3Pr2tFvvmCfPCi9PaCGLtqn+oLaPKfL2NWpnoCeFFdzDQXi2L930yP1oUPY5RXd78NLdVHMkEkbhb2b6Wuvg==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-arm64-musl@0.4.1': - resolution: {integrity: sha512-F/+DgOdeBFQDrk+SX4aFffJFBgJfd75ZtE2mjcWNAh/qWiS7NfUxdQX/5OvNo/H6EY4a+3bZH6Bgzqg4mEWvMw==} + '@nomicfoundation/edr-linux-arm64-musl@0.4.2': + resolution: {integrity: sha512-PALwrLBk1M9rolXyhSX8xdhe5jL0qf/PgiCIF7W7lUyVKrI/I0oiU0EHDk/Xw7yi2UJg4WRyhhZoHYa0g4g8Qg==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-x64-gnu@0.4.1': - resolution: {integrity: sha512-POHhTWczIXCPhzKtY0Vt/l+VCqqCx5gNR5ErwSrNnLz/arfQobZFAU+nc61BX3Jch82TW8b3AbfGI73Kh7gO0w==} + '@nomicfoundation/edr-linux-x64-gnu@0.4.2': + resolution: {integrity: sha512-5svkftypDjAZ1LxV1onojlaqPRxrTEjJLkrUwLL+Fao5ZMe7aTnk5QQ1Jv76gW6WYZnMXNgjPhRcnw3oSNrqFA==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-x64-musl@0.4.1': - resolution: {integrity: sha512-uu8oNp4Ozg3H1x1We0FF+rwXfFiAvsOm5GQ+OBx9YYOXnfDPWqguQfGIkhrti9GD0iYhfQ/WOG5wvp0IzzgGSg==} + '@nomicfoundation/edr-linux-x64-musl@0.4.2': + resolution: {integrity: sha512-qiMlXQTggdH9zfOB4Eil4rQ95z8s7QdLJcOfz5Aym12qJNkCyF9hi4cc4dDCWA0CdI3x3oLbuf8qb81SF8R45w==} engines: {node: '>= 18'} - '@nomicfoundation/edr-win32-x64-msvc@0.4.1': - resolution: {integrity: sha512-PaZHFw455z89ZiKYNTnKu+/TiVZVRI+mRJsbRTe2N0VlYfUBS1o2gdXBM12oP1t198HR7xQwEPPAslTFxGBqHA==} + '@nomicfoundation/edr-win32-x64-msvc@0.4.2': + resolution: {integrity: sha512-hDkAb0iaMmGYwBY/rA1oCX8VpsezfQcHPEPIEGXEcWC3WbnOgIZo0Qkpu/g0OMtFOJSQlWLXvKZuV7blhnrQag==} engines: {node: '>= 18'} - '@nomicfoundation/edr@0.4.1': - resolution: {integrity: sha512-NgrMo2rI9r28uidumvd+K2/AJLdxtXsUlJr3hj/pM6S1FCd/HiWaLeLa/cjCVPcE2u1rYAa3W6UFxLCB7S5Dhw==} + '@nomicfoundation/edr@0.4.2': + resolution: {integrity: sha512-U7v0HuZHfrsl/5FpUzuB2FYA0+FUglHHwiO6NhvLtNYKMZcPzdS6iUriMp/7GWs0SVxW3bAht9GinZPxdhVwWg==} engines: {node: '>= 18'} '@nomicfoundation/ethereumjs-block@5.0.4': @@ -8150,29 +8150,29 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@nomicfoundation/edr-darwin-arm64@0.4.1': {} + '@nomicfoundation/edr-darwin-arm64@0.4.2': {} - '@nomicfoundation/edr-darwin-x64@0.4.1': {} + '@nomicfoundation/edr-darwin-x64@0.4.2': {} - '@nomicfoundation/edr-linux-arm64-gnu@0.4.1': {} + '@nomicfoundation/edr-linux-arm64-gnu@0.4.2': {} - '@nomicfoundation/edr-linux-arm64-musl@0.4.1': {} + '@nomicfoundation/edr-linux-arm64-musl@0.4.2': {} - '@nomicfoundation/edr-linux-x64-gnu@0.4.1': {} + '@nomicfoundation/edr-linux-x64-gnu@0.4.2': {} - '@nomicfoundation/edr-linux-x64-musl@0.4.1': {} + '@nomicfoundation/edr-linux-x64-musl@0.4.2': {} - '@nomicfoundation/edr-win32-x64-msvc@0.4.1': {} + '@nomicfoundation/edr-win32-x64-msvc@0.4.2': {} - '@nomicfoundation/edr@0.4.1': + '@nomicfoundation/edr@0.4.2': dependencies: - '@nomicfoundation/edr-darwin-arm64': 0.4.1 - '@nomicfoundation/edr-darwin-x64': 0.4.1 - '@nomicfoundation/edr-linux-arm64-gnu': 0.4.1 - '@nomicfoundation/edr-linux-arm64-musl': 0.4.1 - '@nomicfoundation/edr-linux-x64-gnu': 0.4.1 - '@nomicfoundation/edr-linux-x64-musl': 0.4.1 - '@nomicfoundation/edr-win32-x64-msvc': 0.4.1 + '@nomicfoundation/edr-darwin-arm64': 0.4.2 + '@nomicfoundation/edr-darwin-x64': 0.4.2 + '@nomicfoundation/edr-linux-arm64-gnu': 0.4.2 + '@nomicfoundation/edr-linux-arm64-musl': 0.4.2 + '@nomicfoundation/edr-linux-x64-gnu': 0.4.2 + '@nomicfoundation/edr-linux-x64-musl': 0.4.2 + '@nomicfoundation/edr-win32-x64-msvc': 0.4.2 '@nomicfoundation/ethereumjs-block@5.0.4': dependencies: From 2609e900cfebf71ba8680adaaaa303751eac72aa Mon Sep 17 00:00:00 2001 From: Franco Victorio Date: Thu, 11 Jul 2024 14:36:06 +0200 Subject: [PATCH 37/44] Create grumpy-dragons-shop.md --- .changeset/grumpy-dragons-shop.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/grumpy-dragons-shop.md diff --git a/.changeset/grumpy-dragons-shop.md b/.changeset/grumpy-dragons-shop.md new file mode 100644 index 0000000000..b9d778100c --- /dev/null +++ b/.changeset/grumpy-dragons-shop.md @@ -0,0 +1,5 @@ +--- +"hardhat": patch +--- + +Bump EDR to [v0.4.2](https://github.com/NomicFoundation/edr/releases/tag/%40nomicfoundation%2Fedr%400.4.2). From f944cd54eb65d78f6ce54248fb5c573aadc7281c Mon Sep 17 00:00:00 2001 From: Wodann Date: Thu, 18 Jul 2024 10:46:19 -0500 Subject: [PATCH 38/44] Upgrade to EDR v0.5 and add `enableRip7212` option (#5512) Co-authored-by: Franco Victorio --- .changeset/great-crabs-hug.md | 5 ++ .changeset/modern-points-cover.md | 5 ++ .../hardhat-network/docs/reference/index.md | 4 ++ packages/hardhat-core/package.json | 2 +- .../internal/core/providers/construction.ts | 1 + .../hardhat-network/provider/provider.ts | 2 + .../hardhat-network/provider/vm/exit.ts | 1 + packages/hardhat-core/src/types/config.ts | 2 + .../hardhat-network/helpers/useProvider.ts | 1 + .../hardhat-network/stack-traces/execution.ts | 1 + pnpm-lock.yaml | 66 +++++++++---------- 11 files changed, 56 insertions(+), 34 deletions(-) create mode 100644 .changeset/great-crabs-hug.md create mode 100644 .changeset/modern-points-cover.md diff --git a/.changeset/great-crabs-hug.md b/.changeset/great-crabs-hug.md new file mode 100644 index 0000000000..3b4d56eb12 --- /dev/null +++ b/.changeset/great-crabs-hug.md @@ -0,0 +1,5 @@ +--- +"hardhat": patch +--- + +Added an `enableRip7212` optional flag to the Hardhat Network config that enables [RIP-7212 (Precompile for secp256r1 Curve Support)](https://github.com/ethereum/RIPs/blob/master/RIPS/rip-7212.md). diff --git a/.changeset/modern-points-cover.md b/.changeset/modern-points-cover.md new file mode 100644 index 0000000000..740a900c37 --- /dev/null +++ b/.changeset/modern-points-cover.md @@ -0,0 +1,5 @@ +--- +"hardhat": patch +--- + +Bumped EDR to [v0.5.0](https://github.com/NomicFoundation/edr/releases/tag/%40nomicfoundation%2Fedr%400.5.0). diff --git a/docs/src/content/hardhat-network/docs/reference/index.md b/docs/src/content/hardhat-network/docs/reference/index.md index b0d2e621b0..2078eef9c2 100644 --- a/docs/src/content/hardhat-network/docs/reference/index.md +++ b/docs/src/content/hardhat-network/docs/reference/index.md @@ -122,6 +122,10 @@ The `baseFeePerGas` of the first block. Note that when forking a remote network, The address used as coinbase in new blocks. Default value: `"0xc014ba5ec014ba5ec014ba5ec014ba5ec014ba5e"`. +#### `enableRip7212` + +A flag indicating whether to enable [RIP-7212 (Precompile for secp256r1 Curve Support)](https://github.com/ethereum/RIPs/blob/master/RIPS/rip-7212.md). Default value: `false`. + ### Mining modes You can configure the mining behavior under your Hardhat Network settings: diff --git a/packages/hardhat-core/package.json b/packages/hardhat-core/package.json index 8b28d53a3d..92fabe7c15 100644 --- a/packages/hardhat-core/package.json +++ b/packages/hardhat-core/package.json @@ -102,7 +102,7 @@ "dependencies": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/edr": "^0.4.2", + "@nomicfoundation/edr": "^0.5.0", "@nomicfoundation/ethereumjs-common": "4.0.4", "@nomicfoundation/ethereumjs-tx": "5.0.4", "@nomicfoundation/ethereumjs-util": "9.0.4", diff --git a/packages/hardhat-core/src/internal/core/providers/construction.ts b/packages/hardhat-core/src/internal/core/providers/construction.ts index e7302ba37a..59ac2c3439 100644 --- a/packages/hardhat-core/src/internal/core/providers/construction.ts +++ b/packages/hardhat-core/src/internal/core/providers/construction.ts @@ -114,6 +114,7 @@ export async function createProvider( paths !== undefined ? getForkCacheDirPath(paths) : undefined, enableTransientStorage: hardhatNetConfig.enableTransientStorage ?? false, + enableRip7212: hardhatNetConfig.enableRip7212 ?? false, }, { enabled: hardhatNetConfig.loggingEnabled, diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts index 0df36f90a1..939ca6b3b7 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts @@ -120,6 +120,7 @@ interface HardhatNetworkProviderConfig { forkConfig?: ForkConfig; forkCachePath?: string; enableTransientStorage: boolean; + enableRip7212: boolean; } export function getNodeConfig( @@ -255,6 +256,7 @@ export class EdrProviderWrapper }), cacheDir: config.forkCachePath, coinbase: Buffer.from(coinbase.slice(2), "hex"), + enableRip7212: config.enableRip7212, fork, hardfork: ethereumsjsHardforkToEdrSpecId(hardforkName), genesisAccounts: config.genesisAccounts.map((account) => { diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/vm/exit.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/vm/exit.ts index 53e1b4545a..c9fcc7cbea 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/vm/exit.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/vm/exit.ts @@ -24,6 +24,7 @@ export class Exit { case SuccessReason.Stop: case SuccessReason.Return: case SuccessReason.SelfDestruct: + case SuccessReason.EofReturnContract: return new Exit(ExitCode.SUCCESS); } diff --git a/packages/hardhat-core/src/types/config.ts b/packages/hardhat-core/src/types/config.ts index 3f53d4b3a1..027a3a5f06 100644 --- a/packages/hardhat-core/src/types/config.ts +++ b/packages/hardhat-core/src/types/config.ts @@ -58,6 +58,7 @@ export interface HardhatNetworkUserConfig { coinbase?: string; chains?: HardhatNetworkChainsUserConfig; enableTransientStorage?: boolean; + enableRip7212?: boolean; } export type HardhatNetworkAccountsUserConfig = @@ -155,6 +156,7 @@ export interface HardhatNetworkConfig { chains: HardhatNetworkChainsConfig; allowBlocksWithSameTimestamp?: boolean; enableTransientStorage?: boolean; + enableRip7212?: boolean; } export type HardhatNetworkAccountsConfig = diff --git a/packages/hardhat-core/test/internal/hardhat-network/helpers/useProvider.ts b/packages/hardhat-core/test/internal/hardhat-network/helpers/useProvider.ts index 0326f82062..5cff6fb3c1 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/helpers/useProvider.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/helpers/useProvider.ts @@ -101,6 +101,7 @@ export function useProvider({ coinbase, allowBlocksWithSameTimestamp, enableTransientStorage: false, + enableRip7212: false, }, { enabled: loggerEnabled, diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/execution.ts b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/execution.ts index daa95a57d3..e5f04af8c2 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/execution.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/execution.ts @@ -53,6 +53,7 @@ export async function instantiateProvider( coinbase: "0x0000000000000000000000000000000000000000", initialBaseFeePerGas: 0, enableTransientStorage: false, + enableRip7212: false, }; const provider = await EdrProviderWrapper.create( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 82ae35fd59..6f19284bb4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -201,8 +201,8 @@ importers: specifier: ^4.0.0 version: 4.0.1 '@nomicfoundation/edr': - specifier: ^0.4.2 - version: 0.4.2 + specifier: ^0.5.0 + version: 0.5.0 '@nomicfoundation/ethereumjs-common': specifier: 4.0.4 version: 4.0.4 @@ -2332,36 +2332,36 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nomicfoundation/edr-darwin-arm64@0.4.2': - resolution: {integrity: sha512-S+hhepupfqpBvMa9M1PVS08sVjGXsLnjyAsjhrrsjsNuTHVLhKzhkguvBD5g4If5skrwgOaVqpag4wnQbd15kQ==} + '@nomicfoundation/edr-darwin-arm64@0.5.0': + resolution: {integrity: sha512-G6OX/PESdfU4ZOyJ4MDh4eevW0wt2mduuxA+thXtTcStOiQTtPuV205h4kLOR5wRB1Zz6Zy0LedTMax7TzOtGw==} engines: {node: '>= 18'} - '@nomicfoundation/edr-darwin-x64@0.4.2': - resolution: {integrity: sha512-/zM94AUrXz6CmcsecRNHJ50jABDUFafmGc4iBmkfX/mTp4tVZj7XTyIogrQIt0FnTaeb4CgZoLap2+8tW/Uldg==} + '@nomicfoundation/edr-darwin-x64@0.5.0': + resolution: {integrity: sha512-fI7uHfHqPtdPZjkFUTpotc/F5gGv41ws+jSZy9+2AR9RDMOAIXMEArOx9rGLBcevWu8SFnyH/l/77kG/5FXbDw==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-arm64-gnu@0.4.2': - resolution: {integrity: sha512-TV3Pr2tFvvmCfPCi9PaCGLtqn+oLaPKfL2NWpnoCeFFdzDQXi2L930yP1oUPY5RXd78NLdVHMkEkbhb2b6Wuvg==} + '@nomicfoundation/edr-linux-arm64-gnu@0.5.0': + resolution: {integrity: sha512-eMC3sWPkBZILg2/YB4Xv6IR0nggCLt5hS8K8jjHeGEeUs9pf8poBF2Oy+G4lSu0YLLjexGzHypz9/P+pIuxZHw==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-arm64-musl@0.4.2': - resolution: {integrity: sha512-PALwrLBk1M9rolXyhSX8xdhe5jL0qf/PgiCIF7W7lUyVKrI/I0oiU0EHDk/Xw7yi2UJg4WRyhhZoHYa0g4g8Qg==} + '@nomicfoundation/edr-linux-arm64-musl@0.5.0': + resolution: {integrity: sha512-yPK0tKjYRxe5ktggFr8aBHH0DCI9uafuaD8QuzyrQAfSf/m/ebTdgthROdbYp6eRk5mJyfAQT/45fM3tnlYsWw==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-x64-gnu@0.4.2': - resolution: {integrity: sha512-5svkftypDjAZ1LxV1onojlaqPRxrTEjJLkrUwLL+Fao5ZMe7aTnk5QQ1Jv76gW6WYZnMXNgjPhRcnw3oSNrqFA==} + '@nomicfoundation/edr-linux-x64-gnu@0.5.0': + resolution: {integrity: sha512-Hds8CRYi4DEyuErjcwUNSvNpMzmOYUihW4qYCoKgSBUVS5saX1PyPYvFYuYpeU5J8/T2iMk6yAPVLCxtKbgnKg==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-x64-musl@0.4.2': - resolution: {integrity: sha512-qiMlXQTggdH9zfOB4Eil4rQ95z8s7QdLJcOfz5Aym12qJNkCyF9hi4cc4dDCWA0CdI3x3oLbuf8qb81SF8R45w==} + '@nomicfoundation/edr-linux-x64-musl@0.5.0': + resolution: {integrity: sha512-1hXMDSzdyh5ojwO3ZSRbt7t5KKYycGUlFdC3lgJRZ7gStB8xjb7RA3hZn2csn9OydS950Ne4nh+puNq91iXApw==} engines: {node: '>= 18'} - '@nomicfoundation/edr-win32-x64-msvc@0.4.2': - resolution: {integrity: sha512-hDkAb0iaMmGYwBY/rA1oCX8VpsezfQcHPEPIEGXEcWC3WbnOgIZo0Qkpu/g0OMtFOJSQlWLXvKZuV7blhnrQag==} + '@nomicfoundation/edr-win32-x64-msvc@0.5.0': + resolution: {integrity: sha512-CFagD423400xXkRmACIR13FoocN48qi4ogRnuFQIvBDtEE3aMEajfFj4bycmQQDqnqChsZy/jwD4OxbX6oaNJw==} engines: {node: '>= 18'} - '@nomicfoundation/edr@0.4.2': - resolution: {integrity: sha512-U7v0HuZHfrsl/5FpUzuB2FYA0+FUglHHwiO6NhvLtNYKMZcPzdS6iUriMp/7GWs0SVxW3bAht9GinZPxdhVwWg==} + '@nomicfoundation/edr@0.5.0': + resolution: {integrity: sha512-nAUyjGhxntXje/1AkDX9POfH+pqUxdi4XHzIhaf/dJYs7fgAFxL3STBK1OYcA3LR7vtiylLHMz7wxjqLzlLGKg==} engines: {node: '>= 18'} '@nomicfoundation/ethereumjs-block@5.0.4': @@ -8150,29 +8150,29 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@nomicfoundation/edr-darwin-arm64@0.4.2': {} + '@nomicfoundation/edr-darwin-arm64@0.5.0': {} - '@nomicfoundation/edr-darwin-x64@0.4.2': {} + '@nomicfoundation/edr-darwin-x64@0.5.0': {} - '@nomicfoundation/edr-linux-arm64-gnu@0.4.2': {} + '@nomicfoundation/edr-linux-arm64-gnu@0.5.0': {} - '@nomicfoundation/edr-linux-arm64-musl@0.4.2': {} + '@nomicfoundation/edr-linux-arm64-musl@0.5.0': {} - '@nomicfoundation/edr-linux-x64-gnu@0.4.2': {} + '@nomicfoundation/edr-linux-x64-gnu@0.5.0': {} - '@nomicfoundation/edr-linux-x64-musl@0.4.2': {} + '@nomicfoundation/edr-linux-x64-musl@0.5.0': {} - '@nomicfoundation/edr-win32-x64-msvc@0.4.2': {} + '@nomicfoundation/edr-win32-x64-msvc@0.5.0': {} - '@nomicfoundation/edr@0.4.2': + '@nomicfoundation/edr@0.5.0': dependencies: - '@nomicfoundation/edr-darwin-arm64': 0.4.2 - '@nomicfoundation/edr-darwin-x64': 0.4.2 - '@nomicfoundation/edr-linux-arm64-gnu': 0.4.2 - '@nomicfoundation/edr-linux-arm64-musl': 0.4.2 - '@nomicfoundation/edr-linux-x64-gnu': 0.4.2 - '@nomicfoundation/edr-linux-x64-musl': 0.4.2 - '@nomicfoundation/edr-win32-x64-msvc': 0.4.2 + '@nomicfoundation/edr-darwin-arm64': 0.5.0 + '@nomicfoundation/edr-darwin-x64': 0.5.0 + '@nomicfoundation/edr-linux-arm64-gnu': 0.5.0 + '@nomicfoundation/edr-linux-arm64-musl': 0.5.0 + '@nomicfoundation/edr-linux-x64-gnu': 0.5.0 + '@nomicfoundation/edr-linux-x64-musl': 0.5.0 + '@nomicfoundation/edr-win32-x64-msvc': 0.5.0 '@nomicfoundation/ethereumjs-block@5.0.4': dependencies: From a2ce98eb88cfb76479becf4e7ea5301053b478ea Mon Sep 17 00:00:00 2001 From: Franco Victorio Date: Fri, 19 Jul 2024 10:24:06 +0200 Subject: [PATCH 39/44] Fix numbered list in docs --- .../ignition/docs/advanced/migrating.md | 84 +++++++++---------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/docs/src/content/ignition/docs/advanced/migrating.md b/docs/src/content/ignition/docs/advanced/migrating.md index be6a950714..4dd71a5943 100644 --- a/docs/src/content/ignition/docs/advanced/migrating.md +++ b/docs/src/content/ignition/docs/advanced/migrating.md @@ -8,73 +8,73 @@ To get started, we’ll uninstall the `hardhat-deploy` plugin and install the Ha 1. Remove the `hardhat-deploy` packages from your project: -::::tabsgroup{options="npm,yarn"} + ::::tabsgroup{options="npm,yarn"} -:::tab{value="npm"} + :::tab{value="npm"} -```sh -npm uninstall hardhat-deploy hardhat-deploy-ethers -``` + ```sh + npm uninstall hardhat-deploy hardhat-deploy-ethers + ``` -::: + ::: -:::tab{value=yarn} + :::tab{value=yarn} -```sh -yarn remove hardhat-deploy hardhat-deploy-ethers -``` + ```sh + yarn remove hardhat-deploy hardhat-deploy-ethers + ``` -::: + ::: -:::: + :::: 2. Install the Hardhat Ignition package and `hardhat-network-helpers` to provide additional testing support as a replacement for `hardhat-deploy` functionality like EVM snapshots: -::::tabsgroup{options="npm,yarn"} + ::::tabsgroup{options="npm,yarn"} -:::tab{value="npm"} + :::tab{value="npm"} -```sh -npm install --save-dev @nomicfoundation/hardhat-ignition-ethers @nomicfoundation/hardhat-network-helpers -``` + ```sh + npm install --save-dev @nomicfoundation/hardhat-ignition-ethers @nomicfoundation/hardhat-network-helpers + ``` -::: + ::: -:::tab{value=yarn} + :::tab{value=yarn} -```sh -yarn add --dev @nomicfoundation/hardhat-ignition-ethers @nomicfoundation/hardhat-network-helpers -``` + ```sh + yarn add --dev @nomicfoundation/hardhat-ignition-ethers @nomicfoundation/hardhat-network-helpers + ``` -::: + ::: -:::: + :::: 3. Update the project’s `hardhat.config` file to remove `hardhat-deploy` and `hardhat-deploy-ethers` and instead import Hardhat Ignition: -::::tabsgroup{options="typescript,javascript"} + ::::tabsgroup{options="typescript,javascript"} -:::tab{value="typescript"} + :::tab{value="typescript"} -```git -- import "hardhat-deploy"; -- import "hardhat-deploy-ethers"; -+ import "@nomicfoundation/hardhat-ignition-ethers"; -``` + ```git + - import "hardhat-deploy"; + - import "hardhat-deploy-ethers"; + + import "@nomicfoundation/hardhat-ignition-ethers"; + ``` -::: + ::: -:::tab{value=javascript} + :::tab{value=javascript} -```git -- require("hardhat-deploy"); -- require("hardhat-deploy-ethers"); -+ require("@nomicfoundation/hardhat-ignition-ethers"); -``` + ```git + - require("hardhat-deploy"); + - require("hardhat-deploy-ethers"); + + require("@nomicfoundation/hardhat-ignition-ethers"); + ``` -::: + ::: -:::: + :::: ## Convert deployment scripts to Ignition Modules @@ -152,7 +152,7 @@ import { buildModule } from "@nomicfoundation/hardhat-ignition/modules"; For instance, you can deploy contracts via `m.contract()`. */ export default buildModule("TokenModule", (m) => { - /* + /* Instead of named accounts, you get access to the configured accounts through the `getAccount()` method. */ @@ -193,7 +193,7 @@ const { buildModule } = require("@nomicfoundation/hardhat-ignition/modules"); For instance, you can deploy contracts via `m.contract()`. */ module.exports = buildModule("TokenModule", (m) => { - /* + /* Instead of named accounts, you get access to the configured accounts through the `getAccount()` method. */ From 0bd8972d39ed4b11dc6b8eca21cb1973fd931036 Mon Sep 17 00:00:00 2001 From: Franco Victorio Date: Fri, 19 Jul 2024 10:33:26 +0200 Subject: [PATCH 40/44] Run prettier --- .../ignition/docs/advanced/migrating.md | 80 +++++++++---------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/docs/src/content/ignition/docs/advanced/migrating.md b/docs/src/content/ignition/docs/advanced/migrating.md index 4dd71a5943..cd501500bc 100644 --- a/docs/src/content/ignition/docs/advanced/migrating.md +++ b/docs/src/content/ignition/docs/advanced/migrating.md @@ -8,73 +8,73 @@ To get started, we’ll uninstall the `hardhat-deploy` plugin and install the Ha 1. Remove the `hardhat-deploy` packages from your project: - ::::tabsgroup{options="npm,yarn"} + ::::tabsgroup{options="npm,yarn"} - :::tab{value="npm"} + :::tab{value="npm"} - ```sh - npm uninstall hardhat-deploy hardhat-deploy-ethers - ``` + ```sh + npm uninstall hardhat-deploy hardhat-deploy-ethers + ``` - ::: + ::: - :::tab{value=yarn} + :::tab{value=yarn} - ```sh - yarn remove hardhat-deploy hardhat-deploy-ethers - ``` + ```sh + yarn remove hardhat-deploy hardhat-deploy-ethers + ``` - ::: + ::: - :::: + :::: 2. Install the Hardhat Ignition package and `hardhat-network-helpers` to provide additional testing support as a replacement for `hardhat-deploy` functionality like EVM snapshots: - ::::tabsgroup{options="npm,yarn"} + ::::tabsgroup{options="npm,yarn"} - :::tab{value="npm"} + :::tab{value="npm"} - ```sh - npm install --save-dev @nomicfoundation/hardhat-ignition-ethers @nomicfoundation/hardhat-network-helpers - ``` + ```sh + npm install --save-dev @nomicfoundation/hardhat-ignition-ethers @nomicfoundation/hardhat-network-helpers + ``` - ::: + ::: - :::tab{value=yarn} + :::tab{value=yarn} - ```sh - yarn add --dev @nomicfoundation/hardhat-ignition-ethers @nomicfoundation/hardhat-network-helpers - ``` + ```sh + yarn add --dev @nomicfoundation/hardhat-ignition-ethers @nomicfoundation/hardhat-network-helpers + ``` - ::: + ::: - :::: + :::: 3. Update the project’s `hardhat.config` file to remove `hardhat-deploy` and `hardhat-deploy-ethers` and instead import Hardhat Ignition: - ::::tabsgroup{options="typescript,javascript"} + ::::tabsgroup{options="typescript,javascript"} - :::tab{value="typescript"} + :::tab{value="typescript"} - ```git - - import "hardhat-deploy"; - - import "hardhat-deploy-ethers"; - + import "@nomicfoundation/hardhat-ignition-ethers"; - ``` + ```git + - import "hardhat-deploy"; + - import "hardhat-deploy-ethers"; + + import "@nomicfoundation/hardhat-ignition-ethers"; + ``` - ::: + ::: - :::tab{value=javascript} + :::tab{value=javascript} - ```git - - require("hardhat-deploy"); - - require("hardhat-deploy-ethers"); - + require("@nomicfoundation/hardhat-ignition-ethers"); - ``` + ```git + - require("hardhat-deploy"); + - require("hardhat-deploy-ethers"); + + require("@nomicfoundation/hardhat-ignition-ethers"); + ``` - ::: + ::: - :::: + :::: ## Convert deployment scripts to Ignition Modules From ca1e0ab5f15c06fd5225a60d8e721a0fc6d5cc19 Mon Sep 17 00:00:00 2001 From: Franco Victorio Date: Fri, 19 Jul 2024 10:33:53 +0200 Subject: [PATCH 41/44] Fix closing backtick --- docs/src/content/ignition/docs/advanced/migrating.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/content/ignition/docs/advanced/migrating.md b/docs/src/content/ignition/docs/advanced/migrating.md index cd501500bc..fccb8cf57f 100644 --- a/docs/src/content/ignition/docs/advanced/migrating.md +++ b/docs/src/content/ignition/docs/advanced/migrating.md @@ -78,7 +78,7 @@ To get started, we’ll uninstall the `hardhat-deploy` plugin and install the Ha ## Convert deployment scripts to Ignition Modules -`hardhat-deploy` represents contract deployments as JavaScript or TypeScript files under the `./deploy/` folder. Hardhat Ignition follows a similar pattern with deployments encapsulated as modules; these are JS/TS files stored under the `./ignition/modules directory`. Each `hardhat-deploy` deploy file will be converted or merged into a Hardhat Ignition module. +`hardhat-deploy` represents contract deployments as JavaScript or TypeScript files under the `./deploy/` folder. Hardhat Ignition follows a similar pattern with deployments encapsulated as modules; these are JS/TS files stored under the `./ignition/modules` directory. Each `hardhat-deploy` deploy file will be converted or merged into a Hardhat Ignition module. Let’s first create the required folder structure under the root of your project: From fbcfb9c18d19aeaee3c113408b588ff3d0b813cc Mon Sep 17 00:00:00 2001 From: Franco Victorio Date: Fri, 19 Jul 2024 10:43:39 +0200 Subject: [PATCH 42/44] Add empty lines in solidity snippet --- docs/src/content/ignition/docs/advanced/migrating.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/src/content/ignition/docs/advanced/migrating.md b/docs/src/content/ignition/docs/advanced/migrating.md index fccb8cf57f..aee7e336dd 100644 --- a/docs/src/content/ignition/docs/advanced/migrating.md +++ b/docs/src/content/ignition/docs/advanced/migrating.md @@ -97,13 +97,16 @@ contract Token { uint256 public totalSupply = 1000000; address public owner; mapping(address => uint256) balances; + constructor(address _owner) { balances[_owner] = totalSupply; owner = _owner; } + function balanceOf(address account) external view returns (uint256) { return balances[account]; } + function transfer(address to, uint256 amount) external { require(balances[msg.sender] >= amount, "Not enough tokens"); balances[msg.sender] -= amount; From f652fc169f63523338ea3393120ebc8adb36e775 Mon Sep 17 00:00:00 2001 From: Franco Victorio Date: Fri, 19 Jul 2024 10:43:56 +0200 Subject: [PATCH 43/44] Use consistent format for multiline comments --- .../ignition/docs/advanced/migrating.md | 58 +++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/docs/src/content/ignition/docs/advanced/migrating.md b/docs/src/content/ignition/docs/advanced/migrating.md index aee7e336dd..7e801c9470 100644 --- a/docs/src/content/ignition/docs/advanced/migrating.md +++ b/docs/src/content/ignition/docs/advanced/migrating.md @@ -126,9 +126,9 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const { deployments, getNamedAccounts } = hre; const { deploy } = deployments; /* - The deploy function uses the hardhat-deploy named accounts feature - to set the deployment's `from` and `args` parameters. - */ + The deploy function uses the hardhat-deploy named accounts feature + to set the deployment's `from` and `args` parameters. + */ const { deployer, tokenOwner } = await getNamedAccounts(); await deploy("Token", { from: deployer, @@ -156,28 +156,28 @@ import { buildModule } from "@nomicfoundation/hardhat-ignition/modules"; */ export default buildModule("TokenModule", (m) => { /* - Instead of named accounts, you get access to the configured accounts - through the `getAccount()` method. - */ + Instead of named accounts, you get access to the configured accounts + through the `getAccount()` method. + */ const deployer = m.getAccount(0); const tokenOwner = m.getAccount(1); /* - Deploy `Token` by calling `contract()` with the constructor arguments - as the second argument. The account to use for the deployment transaction - is set through `from` in the third argument, which is an options object. - */ + Deploy `Token` by calling `contract()` with the constructor arguments + as the second argument. The account to use for the deployment transaction + is set through `from` in the third argument, which is an options object. + */ const token = m.contract("Token", [tokenOwner], { from: deployer, }); /* - The call to `m.contract()` returns a future that can be used in other `m.contract()` - calls (e.g. as a constructor argument, where the future will resolve to the - deployed address), but it can also be returned from the module. Contract - futures that are returned from the module can be leveraged in Hardhat tests - and scripts, as will be shown later. - */ + The call to `m.contract()` returns a future that can be used in other `m.contract()` + calls (e.g. as a constructor argument, where the future will resolve to the + deployed address), but it can also be returned from the module. Contract + futures that are returned from the module can be leveraged in Hardhat tests + and scripts, as will be shown later. + */ return { token }; }); ``` @@ -197,28 +197,28 @@ const { buildModule } = require("@nomicfoundation/hardhat-ignition/modules"); */ module.exports = buildModule("TokenModule", (m) => { /* - Instead of named accounts, you get access to the configured accounts - through the `getAccount()` method. - */ + Instead of named accounts, you get access to the configured accounts + through the `getAccount()` method. + */ const deployer = m.getAccount(0); const tokenOwner = m.getAccount(1); /* - Deploy `Token` by calling `contract()` with the constructor arguments - as the second argument. The account to use for the deployment transaction - is set through `from` in the third argument, which is an options object. - */ + Deploy `Token` by calling `contract()` with the constructor arguments + as the second argument. The account to use for the deployment transaction + is set through `from` in the third argument, which is an options object. + */ const token = m.contract("Token", [tokenOwner], { from: deployer, }); /* - The call to `m.contract()` returns a future that can be used in other `m.contract()` - calls (e.g. as a constructor argument, where the future will resolve to the - deployed address), but it can also be returned from the module. Contract - futures that are returned from the module can be leveraged in Hardhat tests - and scripts, as will be shown later. - */ + The call to `m.contract()` returns a future that can be used in other `m.contract()` + calls (e.g. as a constructor argument, where the future will resolve to the + deployed address), but it can also be returned from the module. Contract + futures that are returned from the module can be leveraged in Hardhat tests + and scripts, as will be shown later. + */ return { token }; }); ``` From 6c943bb1dfdf84c1250f9e1f9b0add8e9e04649b Mon Sep 17 00:00:00 2001 From: Nick Barry Date: Mon, 22 Jul 2024 14:27:17 +0000 Subject: [PATCH 44/44] fix message for HH206 (#5538) --- .changeset/rude-suits-add.md | 5 +++++ packages/hardhat-core/src/internal/core/errors-list.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/rude-suits-add.md diff --git a/.changeset/rude-suits-add.md b/.changeset/rude-suits-add.md new file mode 100644 index 0000000000..40ac03a18b --- /dev/null +++ b/.changeset/rude-suits-add.md @@ -0,0 +1,5 @@ +--- +"hardhat": patch +--- + +Fix message for error HH206 diff --git a/packages/hardhat-core/src/internal/core/errors-list.ts b/packages/hardhat-core/src/internal/core/errors-list.ts index 45f5195087..2deacda8a7 100644 --- a/packages/hardhat-core/src/internal/core/errors-list.ts +++ b/packages/hardhat-core/src/internal/core/errors-list.ts @@ -552,7 +552,7 @@ Please use \`runSuper.isDefined\` to make sure that you can call it.`, DEFAULT_VALUE_WRONG_TYPE: { number: 206, message: - "Default value for param %paramName% of task %taskName% doesn't match the default one, try specifying it.", + "Default value for param %paramName% of task %taskName% doesn't match its expected type.", title: "Default value has incorrect type", description: `One of your tasks has a parameter whose default value doesn't match the expected type.