0Pricing
Web3 & DApp Development Fundamentals · Lesson

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 node

This prints 20 funded accounts with their private keys and listens on http://127.0.0.1:8545.

npx hardhat node

The 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 test or run without --network. State is discarded after.
  • Standalone — started with npx hardhat node and 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 node starts 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 blockNumber for 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

  1. Hardhat Setup
  2. Compiling Contracts
  3. Scripts and Tasks
  4. Local Network and Forking
← Back to Web3 & DApp Development Fundamentals