From 409dd9c421238f1c4b75138fec56b276e5a00c8d Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Thu, 7 Nov 2024 16:34:30 +0000 Subject: [PATCH 1/9] Replace the script to match the other template --- .../scripts/deploy-counter-contract.ts | 8 ---- .../mocha-ethers/scripts/send-op-tx.ts | 48 +++++++++++++++++++ 2 files changed, 48 insertions(+), 8 deletions(-) delete mode 100644 v-next/hardhat/templates/mocha-ethers/scripts/deploy-counter-contract.ts create mode 100644 v-next/hardhat/templates/mocha-ethers/scripts/send-op-tx.ts diff --git a/v-next/hardhat/templates/mocha-ethers/scripts/deploy-counter-contract.ts b/v-next/hardhat/templates/mocha-ethers/scripts/deploy-counter-contract.ts deleted file mode 100644 index 78a41d707a..0000000000 --- a/v-next/hardhat/templates/mocha-ethers/scripts/deploy-counter-contract.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { network } from "@ignored/hardhat-vnext"; - -console.log("Deploying a contract into a local fork of Optimism"); -const { ethers } = await network.connect("edrOp", "optimism"); - -const counter = await ethers.deployContract("Counter"); - -console.log("Counter contract address:", await counter.getAddress()); diff --git a/v-next/hardhat/templates/mocha-ethers/scripts/send-op-tx.ts b/v-next/hardhat/templates/mocha-ethers/scripts/send-op-tx.ts new file mode 100644 index 0000000000..b4c28d8357 --- /dev/null +++ b/v-next/hardhat/templates/mocha-ethers/scripts/send-op-tx.ts @@ -0,0 +1,48 @@ +import { network } from "@ignored/hardhat-vnext"; + +// We connect to the default network (which can be controlled with `--network`), +// and use the `optimism` chain type. +const { ethers, networkConfig, networkName } = await network.connect( + undefined, + "optimism", +); + +console.log("Sending transaction using network", networkName); + +if (networkConfig.type === "edr") { + console.log("Using an EDR network simulating Optimism, forking it"); + console.log( + "Note: The forking initialization is not optimized yet, and the example RPC is slower than usual.", + ); +} else { + console.log("Using an HTTP connection to Optimism"); +} + +const [sender] = await ethers.getSigners(); + +console.log("Sender:", await sender.address); + +console.log( + "Sender balance:", + await ethers.provider.getBalance(sender.address), +); + +console.log("Sending 1 wei from", sender.address, "to itself"); + +console.log("Sending L2 transaction"); +const tx = await sender.sendTransaction({ + to: sender.address, + value: 1n, +}); + +const receipt = (await tx.wait())!; + +console.log( + `Transaction included in block ${receipt.blockHash} (#${receipt.blockNumber})`, +); + +if (networkName === "opSepolia") { + console.log( + `You can check your transaction on https://sepolia-optimism.etherscan.io/tx/${receipt.hash}`, + ); +} From 3af24cef2294481f9b7e65857ce4b24a93093d9c Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Thu, 7 Nov 2024 16:34:46 +0000 Subject: [PATCH 2/9] Replace the contracts to match the other template --- .../templates/mocha-ethers/contracts/Counter.sol | 3 +++ .../templates/mocha-ethers/contracts/Counter.t.sol | 8 +++++--- .../templates/mocha-ethers/contracts/Lock.sol | 4 ++++ .../mocha-ethers/contracts/TestWithForgeStd.t.sol | 12 ++++++------ 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/v-next/hardhat/templates/mocha-ethers/contracts/Counter.sol b/v-next/hardhat/templates/mocha-ethers/contracts/Counter.sol index a8cb120628..7d0c7cb623 100644 --- a/v-next/hardhat/templates/mocha-ethers/contracts/Counter.sol +++ b/v-next/hardhat/templates/mocha-ethers/contracts/Counter.sol @@ -1,6 +1,9 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.24; +// This is a simple smart contract used to demonstrate +// a Solidity test in `Counter.t.sol`. + contract Counter { uint public x; diff --git a/v-next/hardhat/templates/mocha-ethers/contracts/Counter.t.sol b/v-next/hardhat/templates/mocha-ethers/contracts/Counter.t.sol index 1db65cb7a7..c857d6fd25 100644 --- a/v-next/hardhat/templates/mocha-ethers/contracts/Counter.t.sol +++ b/v-next/hardhat/templates/mocha-ethers/contracts/Counter.t.sol @@ -3,6 +3,9 @@ pragma solidity ^0.8.24; import "./Counter.sol"; +// Solidity tests are compatible with foundry, so they +// use the same syntax and offer the same functionality. + contract CounterTest { Counter counter; @@ -10,15 +13,14 @@ contract CounterTest { counter = new Counter(); } - function testInitialValue() public view { + function test_InitialValue() public view { require(counter.x() == 0, "Initial value should be 0"); } - function testFuzzInc(uint8 x) public { + function testFuzz_Inc(uint8 x) public { for (uint8 i = 0; i < x; i++) { counter.inc(); } - require(counter.x() == x, "Value after calling inc x times should be x"); } } diff --git a/v-next/hardhat/templates/mocha-ethers/contracts/Lock.sol b/v-next/hardhat/templates/mocha-ethers/contracts/Lock.sol index b23f275d60..6bfb38471b 100644 --- a/v-next/hardhat/templates/mocha-ethers/contracts/Lock.sol +++ b/v-next/hardhat/templates/mocha-ethers/contracts/Lock.sol @@ -1,6 +1,10 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.24; +// This is the same example of Hardhat 2. We use it here to +// demostrate the TypeScript test cabapbilities and compatibility +// with Hardhat 2. + // Uncomment this line to use console.log // import "hardhat/console.sol"; diff --git a/v-next/hardhat/templates/mocha-ethers/contracts/TestWithForgeStd.t.sol b/v-next/hardhat/templates/mocha-ethers/contracts/TestWithForgeStd.t.sol index 469c6e0c11..5ddeba8cde 100644 --- a/v-next/hardhat/templates/mocha-ethers/contracts/TestWithForgeStd.t.sol +++ b/v-next/hardhat/templates/mocha-ethers/contracts/TestWithForgeStd.t.sol @@ -4,20 +4,20 @@ pragma solidity ^0.8.24; import "forge-std/Test.sol"; contract TestContract is Test { - ErrorsTest test; + BrokenContract test; function setUp() public { - test = new ErrorsTest(); + test = new BrokenContract(); } - function testExpectArithmetic() public { + function test_ExpectArithmeticError() public { vm.expectRevert(stdError.arithmeticError); - test.arithmeticError(10); + test.forceArithmeticError(10); } } -contract ErrorsTest { - function arithmeticError(uint256 a) public pure returns (uint256) { +contract BrokenContract { + function forceArithmeticError(uint256 a) public pure returns (uint256) { return a - 100; } } From 05c93f551eadeb77233e97906eaf6783e6fbdddf Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Thu, 7 Nov 2024 16:35:06 +0000 Subject: [PATCH 3/9] Replace the tsconfig to match the other template --- v-next/hardhat/templates/mocha-ethers/tsconfig.json | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/v-next/hardhat/templates/mocha-ethers/tsconfig.json b/v-next/hardhat/templates/mocha-ethers/tsconfig.json index a2bee759bb..9b1380cc99 100644 --- a/v-next/hardhat/templates/mocha-ethers/tsconfig.json +++ b/v-next/hardhat/templates/mocha-ethers/tsconfig.json @@ -1,17 +1,13 @@ -/* Imported https://github.com/tsconfig/bases/blob/be6b3bb160889347b8614e8d18e1e88c40f8ecc9/bases/node20.json */ +/* Based on https://github.com/tsconfig/bases/blob/501da2bcd640cf95c95805783e1012b992338f28/bases/node22.json */ { - "$schema": "https://json.schemastore.org/tsconfig", - "display": "Node 20", - "_version": "20.1.0", - "compilerOptions": { "lib": ["es2023"], "module": "node16", "target": "es2022", - "strict": true, "esModuleInterop": true, "skipLibCheck": true, - "moduleResolution": "node16" + "moduleResolution": "node16", + "outDir": "dist" } } From d741b1ebcb520313bd917dc864523a2533a12052 Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Thu, 7 Nov 2024 16:35:49 +0000 Subject: [PATCH 4/9] Replace most of the config with the other template's --- .../templates/mocha-ethers/hardhat.config.ts | 91 +++++++++++++++++-- 1 file changed, 84 insertions(+), 7 deletions(-) diff --git a/v-next/hardhat/templates/mocha-ethers/hardhat.config.ts b/v-next/hardhat/templates/mocha-ethers/hardhat.config.ts index a9cff3f3e6..f6a96f0f0e 100644 --- a/v-next/hardhat/templates/mocha-ethers/hardhat.config.ts +++ b/v-next/hardhat/templates/mocha-ethers/hardhat.config.ts @@ -1,4 +1,7 @@ -import { HardhatUserConfig } from "@ignored/hardhat-vnext/config"; +import { + configVariable, + HardhatUserConfig, +} from "@ignored/hardhat-vnext/config"; import HardhatMochaTestRunner from "@ignored/hardhat-vnext-mocha-test-runner"; import HardhatEthers from "@ignored/hardhat-vnext-ethers"; @@ -6,6 +9,13 @@ import HardhatNetworkHelpers from "@ignored/hardhat-vnext-network-helpers"; import HardhatKeystore from "@ignored/hardhat-vnext-keystore"; const config: HardhatUserConfig = { + /* + * In Hardhat 3, plugins are defined as part of the Hardhat config instead of + * being based on the side-effect of imports. + * + * Note: A `hardhat-toolbox` like plugin for Hardhat 3 hasn't been defined yet, + * so this list is larger than what you would normally have. + */ plugins: [ HardhatMochaTestRunner, HardhatEthers, @@ -13,20 +23,87 @@ const config: HardhatUserConfig = { HardhatKeystore, ], solidity: { - version: "0.8.24", + /* + * Hardhat 3 supports different build profiles, allowing you to configure + * different versions of `solc` and its settings for various use cases. + * + * Note: Using profiles is optional, and any Hardhat 2 `solidity` config + * is still valid in Hardhat 3. + */ + profiles: { + /* + * The default profile is used when no profile is defined or specified + * in the CLI or by the tasks you are running. + */ + default: { + version: "0.8.24", + }, + /* + * The production profile is meant to be used for deployments, providing + * more control over settings for production builds and taking some extra + * steps to simplify the process of verifying your contracts. + */ + production: { + version: "0.8.24", + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + }, + /* + * Hardhat 3 natively supports remappings and makes extensive use of them + * internally to fully support npm resolution rules (i.e., it supports + * transitive dependencies, multiple versions of the same package, + * monorepos, etc.). + */ remappings: [ - // This is necessary because most people import forge-std/Test.sol, and not forge-std/src/Test.sol. - // This will improve in the future to remove the need for a named version. + /* + * This remapping is added to the example because most people import + * forge-std/Test.sol, not forge-std/src/Test.sol. + * + * Note: The config currently leaks internal IDs, but this will be fixed + * in the future. + */ "forge-std/=npm/forge-std@1.9.4/src/", ], }, + /* + * The `networks` configuration is mostly compatible with Hardhat 2. + * The key differences right now are: + * + * - You must set a `type` for each network, which is either `http` or `edr`, + * allowing you to have multiple simulated networks. + * + * - You can set a `chainType` for each network, which is either `generic`, + * `l1`, or `optimism`. This has two uses. It ensures that you always + * connect to the network with the right Chain Type. And, on `edr` + * networks, it makes sure that the simulated chain behaves exactly like the + * real one. More information about this can be found in the test files. + * + * - Some config fields, like `forkConfig`, are different from Hardhat 2 and + * will be fixed in the near future. + * + * - The `accounts` field of `http` networks can also receive Configuration + * Variables, which are values that only get loaded when needed. This allows + * Hardhat to still run despite some of its config not being available + * (e.g., a missing private key or API key). More info about this can be + * found in the "Sending a Transaction to Optimism Sepolia" of the README. + */ networks: { - edrOp: { + opSepolia: { + type: "http", + chainType: "optimism", + url: "https://sepolia.optimism.io/", + accounts: [configVariable("OPTIMISM_SEPOLIA_PRIVATE_KEY")], + }, + edrOpSepolia: { type: "edr", - chainId: 10, chainType: "optimism", forkConfig: { - jsonRpcUrl: "https://mainnet.optimism.io", + jsonRpcUrl: "https://sepolia.optimism.io", }, }, }, From 11147b3b5496a012486e5878315b5a30bed8726d Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Thu, 7 Nov 2024 16:36:20 +0000 Subject: [PATCH 5/9] Add more doc to the ts test and remove some TODOs --- .../templates/mocha-ethers/test/Lock.ts | 25 +++++++++++++------ .../templates/mocha-ethers/test/setup.ts | 2 +- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/v-next/hardhat/templates/mocha-ethers/test/Lock.ts b/v-next/hardhat/templates/mocha-ethers/test/Lock.ts index 34bd737b12..59811632ff 100644 --- a/v-next/hardhat/templates/mocha-ethers/test/Lock.ts +++ b/v-next/hardhat/templates/mocha-ethers/test/Lock.ts @@ -1,12 +1,26 @@ import { network } from "@ignored/hardhat-vnext"; import { expect } from "chai"; +// We haven't ported `hardhat-chai-matchers` yet, so we use a simple `chai` +// setup script, and `expect` without any Ethereum-specific functionality. import "./setup.js"; import { HardhatEthers } from "@ignored/hardhat-vnext-ethers/types"; import { NetworkHelpers } from "@ignored/hardhat-vnext-network-helpers/types"; describe("Lock", function () { + /* + * In Hardhat 3, there isn't a single global connection to a network. Instead, + * you have a `network` object that allows you to connect to different + * networks. + * + * You can create multiple network connections using `network.connect`. + * It takes two optional parameters and returns a `NetworkConnection` object. + * + * For a better understanding of how this works, and the new features it + * brings, we recommend taking a look at the other example project, which + * uses `node:test` and `viem`. + */ let networkHelpers: NetworkHelpers; let ethers: HardhatEthers; @@ -69,8 +83,6 @@ describe("Lock", function () { const latestTime = await networkHelpers.time.latest(); const Lock = await ethers.getContractFactory("Lock"); - // TODO: bring back the original test assertion `hardhat-chai-matchers` - // is available with `revertedWith`. await expect( Lock.deploy(latestTime, { value: 1 }), ).to.eventually.be.rejectedWith("Unlock time should be in the future"); @@ -115,11 +127,10 @@ describe("Lock", function () { }); describe("Events", function () { - // TODO: bring back the original test once `hardhat-chai-matchers` - // is available for asserting on events. it("Should emit an event on withdrawals", async function () { - const { lock, unlockTime, lockedAmount } = - await networkHelpers.loadFixture(deployOneYearLockFixture); + const { lock, unlockTime } = await networkHelpers.loadFixture( + deployOneYearLockFixture, + ); await networkHelpers.time.increaseTo(unlockTime); @@ -136,8 +147,6 @@ describe("Lock", function () { }); describe("Transfers", function () { - // TODO: bring back the original Transfers test once - // `hardhat-chai-matchers` has been ported. it("Should transfer the funds out of the timelock", async function () { const { lock, unlockTime } = await networkHelpers.loadFixture( deployOneYearLockFixture, diff --git a/v-next/hardhat/templates/mocha-ethers/test/setup.ts b/v-next/hardhat/templates/mocha-ethers/test/setup.ts index 589f61ec0a..ca0be29530 100644 --- a/v-next/hardhat/templates/mocha-ethers/test/setup.ts +++ b/v-next/hardhat/templates/mocha-ethers/test/setup.ts @@ -1,4 +1,4 @@ -// This file contains some setup code that won't be required in the future. +// This file contains some chai setup code which won't be required in the future import * as chai from "chai"; import chaiAsPromised from "chai-as-promised"; chai.use(chaiAsPromised); From 879518c1261286855757b208a81311334f70ce08 Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Thu, 7 Nov 2024 16:36:58 +0000 Subject: [PATCH 6/9] Update the README --- .../hardhat/templates/mocha-ethers/README.md | 76 ++++++++++++++----- 1 file changed, 59 insertions(+), 17 deletions(-) diff --git a/v-next/hardhat/templates/mocha-ethers/README.md b/v-next/hardhat/templates/mocha-ethers/README.md index 623ab5c10d..4729722037 100644 --- a/v-next/hardhat/templates/mocha-ethers/README.md +++ b/v-next/hardhat/templates/mocha-ethers/README.md @@ -1,34 +1,76 @@ -# A TypeScript Hardhat project using Mocha and Ethers +# Hardhat 3 Alpha: `mocha` and `ethers` example project -> WARNING: This demonstration project is still in development. It is part of the Hardhat v3 upgrade. It is not for production use. +> **WARNING**: This demonstration project is still in development. It is part of the Hardhat 3 upgrade and is not intended for production use. -> NOTE: There are several plugins from the Hardhat toolbox that have not been ported to Hardhat v3 yet. In testing terms, the biggest ommision is `hardhat-chai-matchers`. +Welcome to the Hardhat 3 alpha testing effort! This project showcases some of the changes and new features coming in Hardhat 3. -This project demonstrates basic Hardhat usecases within a TypeScript project. It comes with: +To learn more about the Hardhat 3 alpha, please visit the [Hardhat 3 alpha: Docs Hub](https://www.notion.so/nomicfoundation/Hardhat-3-alpha-Docs-Hub-131578cdeaf580e89e8dca57b0d036c3). -- a minimal Hardhat configuration file -- JS/TS integration tests -- Solidity Tests -- A script demonstrating how to deploy a contract to an in-memory Hardhat node simulating Base (an Optimism l2 chain) +## Project Overview -## Usage +This example project includes: + +- A simple Hardhat configuration file +- TypeScript integration tests using `mocha` and ethers.js +- Foundry-compatible Solidity tests, including the usage of `forge-std` +- Examples demonstrating how to connect to different types of networks, including simulating an Optimism network +- A script that deploys a contract to Optimism Sepolia using Hardhat's new keystore capabilities + +## Navigating the Project + +To get the most out of this example project, we recommend exploring the files in the following order: -### Testing +1. Read the `hardhat.config.ts` file, which contains the project configuration and explains multiple changes. +2. Review the "Running Tests" section and explore the files in the `contracts/` and `test/` directories. +3. Read the "Sending a Transaction to Optimism Sepolia" section, follow the instructions, and examine the `scripts/send-op-tx.ts` file. + +Each file includes inline explanations of its purpose and highlights the changes and new features introduced in Hardhat 3. + +## Usage -For integration testing it uses the Mocha test runner and the Ethers.js library for interacting with Ethereum nodes. +### Running Tests -Try running the following commands to see Hardhat's testing in action: +To run all the tests in the project, execute the following command: ```shell -# Run the both the mocha integration test suite -# and the Solidity Test suite npx hardhat3 test ``` -### Multi-chain support +You can also selectively run the Solidity or `mocha` tests: -To deploy a contract to an in-memory Hardhat node simulating Base (an Optimism l2 chain), run: +```shell +npx hardhat3 test solidity +npx hardhat3 test mocha +``` + +### Sending a Transaction to Optimism Sepolia + +This project includes an example script that sends a simple transaction to Optimism Sepolia. You can run the script using either the actual Optimism Sepolia network or a simulated version that behaves exactly like the real network. + +To run the script with EDR in Optimism mode: ```shell -npx hardhat3 run scripts/deploy-counter-contract.ts +npx hardhat3 run scripts/send-op-tx.ts --network edrOpSepolia ``` + +To run the script with Optimism Sepolia, you need an account with funds to send the transaction. The provided Hardhat configuration includes a Configuration Variable called `OPTIMISM_SEPOLIA_PRIVATE_KEY`, which you can use to set the private key of the account you want to use. + +You can set the `OPTIMISM_SEPOLIA_PRIVATE_KEY` variable using the `hardhat-keystore` plugin or by setting it as an environment variable. + +> **WARNING**: The private key is currently stored unencrypted. Full encryption will be included before the beta release. + +To set the `OPTIMISM_SEPOLIA_PRIVATE_KEY` config variable using `hardhat-keystore`: + +```shell +npx hardhat3 keystore set OPTIMISM_SEPOLIA_PRIVATE_KEY +``` + +After setting the variable, you can run the script with the Optimism Sepolia network: + +```shell +npx hardhat3 run scripts/send-op-tx.ts --network opSepolia +``` + +--- + +Feel free to explore the project and provide feedback on your experience with Hardhat 3 alpha! From d42bd1136224f3fcd072eb4848c04c4aeee686c7 Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Thu, 7 Nov 2024 16:55:03 +0000 Subject: [PATCH 7/9] Fix README warnings --- v-next/hardhat/templates/mocha-ethers/README.md | 2 +- v-next/hardhat/templates/node-test-runner-viem/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/v-next/hardhat/templates/mocha-ethers/README.md b/v-next/hardhat/templates/mocha-ethers/README.md index 4729722037..247cae0ab8 100644 --- a/v-next/hardhat/templates/mocha-ethers/README.md +++ b/v-next/hardhat/templates/mocha-ethers/README.md @@ -1,6 +1,6 @@ # Hardhat 3 Alpha: `mocha` and `ethers` example project -> **WARNING**: This demonstration project is still in development. It is part of the Hardhat 3 upgrade and is not intended for production use. +> **WARNING**: This example project uses Hardhat 3, which is still in development. Hardhat 3 is not yet intended for production use. Welcome to the Hardhat 3 alpha testing effort! This project showcases some of the changes and new features coming in Hardhat 3. diff --git a/v-next/hardhat/templates/node-test-runner-viem/README.md b/v-next/hardhat/templates/node-test-runner-viem/README.md index 9a514d086d..069e56065c 100644 --- a/v-next/hardhat/templates/node-test-runner-viem/README.md +++ b/v-next/hardhat/templates/node-test-runner-viem/README.md @@ -1,6 +1,6 @@ # Hardhat 3 Alpha: `node:test` and `viem` example project -> **WARNING**: This demonstration project is still in development. It is part of the Hardhat 3 upgrade and is not intended for production use. +> **WARNING**: This example project uses Hardhat 3, which is still in development. Hardhat 3 is not yet intended for production use. Welcome to the Hardhat 3 alpha testing effort! This project showcases some of the changes and new features coming in Hardhat 3. From 73ab176b09e1657f38f21701a0cadc77dd521028 Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Thu, 7 Nov 2024 16:55:57 +0000 Subject: [PATCH 8/9] Small wording improvements --- v-next/hardhat/templates/mocha-ethers/README.md | 2 +- v-next/hardhat/templates/node-test-runner-viem/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/v-next/hardhat/templates/mocha-ethers/README.md b/v-next/hardhat/templates/mocha-ethers/README.md index 247cae0ab8..f3b0a32961 100644 --- a/v-next/hardhat/templates/mocha-ethers/README.md +++ b/v-next/hardhat/templates/mocha-ethers/README.md @@ -2,7 +2,7 @@ > **WARNING**: This example project uses Hardhat 3, which is still in development. Hardhat 3 is not yet intended for production use. -Welcome to the Hardhat 3 alpha testing effort! This project showcases some of the changes and new features coming in Hardhat 3. +Welcome to the Hardhat 3 alpha version! This project showcases some of the changes and new features coming in Hardhat 3. To learn more about the Hardhat 3 alpha, please visit the [Hardhat 3 alpha: Docs Hub](https://www.notion.so/nomicfoundation/Hardhat-3-alpha-Docs-Hub-131578cdeaf580e89e8dca57b0d036c3). diff --git a/v-next/hardhat/templates/node-test-runner-viem/README.md b/v-next/hardhat/templates/node-test-runner-viem/README.md index 069e56065c..cf99fa8b18 100644 --- a/v-next/hardhat/templates/node-test-runner-viem/README.md +++ b/v-next/hardhat/templates/node-test-runner-viem/README.md @@ -2,7 +2,7 @@ > **WARNING**: This example project uses Hardhat 3, which is still in development. Hardhat 3 is not yet intended for production use. -Welcome to the Hardhat 3 alpha testing effort! This project showcases some of the changes and new features coming in Hardhat 3. +Welcome to the Hardhat 3 alpha version! This project showcases some of the changes and new features coming in Hardhat 3. To learn more about the Hardhat 3 alpha, please visit the [Hardhat 3 alpha: Docs Hub](https://www.notion.so/nomicfoundation/Hardhat-3-alpha-Docs-Hub-131578cdeaf580e89e8dca57b0d036c3). From 0d8c5b673a94c09bac586e9305286b4b2784b640 Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Thu, 7 Nov 2024 16:56:57 +0000 Subject: [PATCH 9/9] Small wording improvements --- v-next/hardhat/templates/mocha-ethers/README.md | 2 +- v-next/hardhat/templates/node-test-runner-viem/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/v-next/hardhat/templates/mocha-ethers/README.md b/v-next/hardhat/templates/mocha-ethers/README.md index f3b0a32961..039c5071a9 100644 --- a/v-next/hardhat/templates/mocha-ethers/README.md +++ b/v-next/hardhat/templates/mocha-ethers/README.md @@ -4,7 +4,7 @@ Welcome to the Hardhat 3 alpha version! This project showcases some of the changes and new features coming in Hardhat 3. -To learn more about the Hardhat 3 alpha, please visit the [Hardhat 3 alpha: Docs Hub](https://www.notion.so/nomicfoundation/Hardhat-3-alpha-Docs-Hub-131578cdeaf580e89e8dca57b0d036c3). +To learn more about the Hardhat 3 alpha, please visit [its Docs Hub](https://www.notion.so/nomicfoundation/Hardhat-3-alpha-Docs-Hub-131578cdeaf580e89e8dca57b0d036c3). ## Project Overview diff --git a/v-next/hardhat/templates/node-test-runner-viem/README.md b/v-next/hardhat/templates/node-test-runner-viem/README.md index cf99fa8b18..289f281233 100644 --- a/v-next/hardhat/templates/node-test-runner-viem/README.md +++ b/v-next/hardhat/templates/node-test-runner-viem/README.md @@ -4,7 +4,7 @@ Welcome to the Hardhat 3 alpha version! This project showcases some of the changes and new features coming in Hardhat 3. -To learn more about the Hardhat 3 alpha, please visit the [Hardhat 3 alpha: Docs Hub](https://www.notion.so/nomicfoundation/Hardhat-3-alpha-Docs-Hub-131578cdeaf580e89e8dca57b0d036c3). +To learn more about the Hardhat 3 alpha, please visit [its Docs Hub](https://www.notion.so/nomicfoundation/Hardhat-3-alpha-Docs-Hub-131578cdeaf580e89e8dca57b0d036c3). ## Project Overview