Local Network and Forking
Test environments.
Local Network and Forking is a free Web3 & DApp Development Fundamentals lesson on CoddyKit — lesson 4 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Web3 & DApp Development Fundamentals learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
The Hardhat Network
Hardhat ships with a built-in local Ethereum network designed for development. It runs in-memory, mines blocks instantly, and gives you funded test accounts.
- No real ETH or gas costs.
- Deterministic accounts you can reuse.
- Rich error messages and stack traces.
Starting a Local Node
Run a standalone JSON-RPC server so wallets and front-ends can connect:
npx hardhat nodeThis prints 20 funded accounts with their private keys and listens on http://127.0.0.1:8545.
npx hardhat nodeThe localhost Network
To target the running node, define a localhost network in your config:
module.exports = {
solidity: "0.8.24",
networks: {
localhost: { url: "http://127.0.0.1:8545" },
},
};Then deploy with npx hardhat run scripts/deploy.js --network localhost.
module.exports = {
solidity: "0.8.24",
networks: {
localhost: { url: "http://127.0.0.1:8545" },
},
};In-Process vs Standalone
There are two ways to use the Hardhat Network:
- In-process — a fresh network spun up automatically when you run
testorrunwithout--network. State is discarded after. - Standalone — started with
npx hardhat nodeand kept alive for external connections.
What Is Forking
Forking creates a local copy of a real network (like Ethereum mainnet) at a given block. You get all the on-chain state — deployed contracts, balances, token data — but can experiment freely.
This is perfect for testing against live protocols such as Uniswap or Aave without spending real funds.
Configuring a Fork
Enable forking by pointing the Hardhat network at an archive RPC URL:
module.exports = {
networks: {
hardhat: {
forking: {
url: "https://mainnet.example-rpc.io/KEY",
},
},
},
};You typically need an archive node provider for full historical state.
module.exports = {
networks: {
hardhat: {
forking: {
url: "https://mainnet.example-rpc.io/KEY",
},
},
},
};Pinning a Block Number
For reproducible tests, pin the fork to a specific block:
forking: {
url: "https://mainnet.example-rpc.io/KEY",
blockNumber: 19000000,
}Pinning keeps state stable and lets Hardhat cache responses, so tests run faster and never drift as the chain advances.
forking: {
url: "https://mainnet.example-rpc.io/KEY",
blockNumber: 19000000,
}Impersonating Accounts
On a fork you can act as any address — even one you do not own — to test flows like a whale moving tokens:
await hre.network.provider.request({
method: "hardhat_impersonateAccount",
params: ["0xWhaleAddress"],
});
const whale = await hre.ethers.getSigner("0xWhaleAddress");await hre.network.provider.request({
method: "hardhat_impersonateAccount",
params: ["0xWhaleAddress"],
});
const whale = await hre.ethers.getSigner("0xWhaleAddress");Time and Block Manipulation
The local network exposes special RPC methods to control time and blocks, useful for testing vesting or auctions:
// Advance time by 1 day
await hre.network.provider.send("evm_increaseTime", [86400]);
// Mine a new block
await hre.network.provider.send("evm_mine");// Advance time by 1 day
await hre.network.provider.send("evm_increaseTime", [86400]);
// Mine a new block
await hre.network.provider.send("evm_mine");Resetting State
You can reset the fork back to a clean snapshot between tests:
await hre.network.provider.request({
method: "hardhat_reset",
params: [],
});This restores the original forked state without restarting the process, keeping test runs isolated.
await hre.network.provider.request({
method: "hardhat_reset",
params: [],
});Snapshots and Reverts
Beyond a full reset, you can take lightweight snapshots and revert to them, which is how test fixtures work under the hood:
const id = await hre.network.provider.send("evm_snapshot");
// ... run some transactions ...
await hre.network.provider.send("evm_revert", [id]);Each snapshot id can be reverted to once.
const id = await hre.network.provider.send("evm_snapshot");
// ... run some transactions ...
await hre.network.provider.send("evm_revert", [id]);Quick Check
Test your understanding of local networks and forking.
Recap
You learned to run and fork local networks.
npx hardhat nodestarts a standalone JSON-RPC node with funded accounts.- The in-process network is used automatically for tests and discarded after.
- Forking copies live mainnet state locally for safe experimentation.
- Pin
blockNumberfor reproducibility and caching. - Special RPC methods impersonate accounts, advance time, mine blocks, and reset state.
Frequently asked questions
Is the “Local Network and Forking” lesson free?
Yes — the full text of “Local Network and Forking” is free to read here on the web, and the Web3 & DApp Development Fundamentals course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Web3 & DApp Development Fundamentals course, upgrade to CoddyKit PRO.
What will I learn in “Local Network and Forking”?
Test environments. You practise Web3 & DApp Development Fundamentals with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Web3 & DApp Development Fundamentals?
No prior experience is required. Web3 & DApp Development Fundamentals on CoddyKit is structured for beginners through advanced learners; this is — lesson 4 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “Local Network and Forking” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Web3 & DApp Development Fundamentals lesson?
Yes. Every Web3 & DApp Development Fundamentals lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- Hardhat Setup
- Compiling Contracts
- Scripts and Tasks
- Local Network and Forking