Impersonating Accounts With Hardhat

Through the improvement or evaluate of good contracts, it might be obligatory to judge your good contracts in opposition to pre-existing good contracts akin to decentralized exchanges or flash loans with out the price of spending actual ether. On this article, you’ll learn to fork the mainnet and impersonate an account utilizing Hardhat.

Picture by Fares Hamouche on Unsplash

What’s Hardhat?
Hardhat is an Ethereum improvement setting for professionals, it comes with instruments akin to Hardhat runner, community, and VSCode extension that make improvement versatile, extensible, and quick.

Why Impersonate Account?
– It permits manipulating the signer even if you happen to don’t have entry to its non-public key.
– It permits testing a contract with entry controls, handle is all wanted to impersonate it.
– It permits testing mainnet good contracts with out utilizing actual ethers.


  1. Set up node and npm

We will probably be utilizing a hardhat venture, you’ll be able to be at liberty to skip this if you have already got.

  1. Create folder venture: Open your terminal and enter the command beneath.

mkdir mainnet-fork-tutorial
cd mainnet-fork-tutorial

2. Provoke npm within the venture: Initialize npm within the created venture.

npm init -y

3. Set up hardhat

npm set up –save-dev hardhat

4. In the identical listing the place you put in Hardhat run:

npx hardhat

Choose create a JavaScript venture together with your keyboard and hit enter, to create a recent hardhat venture; this would possibly take time relying in your web connection.

5. Set up dotenv: we will probably be utilizing dotenv to retailer setting variables.

npm i dotenv

We’d like an distant process name (RPC) node, Hardhat recommends we make use Alchemy as a result of they provide Full archive nodes; that are a kind of node that accommodates all of the details about a blockchain from the genesis or authentic block.

  1. Create an alchemy account: Create your free alchemy account at and ensure your electronic mail.

2. Create an app: In your alchemy dashboard, click on on + CREATE APP button. This brings a popup to create a brand new app. Fill within the title and outline within the type and click on CREATE APP button. Instance:
Identify: mainnet-fork
Description: Description of what your app does so you’ll be able to maintain monitor.
Chain: Ethereum (default choice)
Community: Mainnet (default choice)

3. View key: As soon as your new app is created, the pop disappears. The app appeared below the Private Apps desk. Find the newly created app within the desk and click on on the view key button. Copy the API KEY.


Open the newly created mainnet-fork-tutorial venture together with your favourite editor.

  1. Create .env file: create a .env file within the root of mainnet-fork-tutorial venture.


2. Edit hardhat.config.js: Edit hardhat.config.js we will probably be including a brand new community known as hardhat in module.exports object.


module.exports = {
solidity: “0.8.17”,
networks: {
hardhat: {
forking: {
url: course of.env.MAINNET_RPC_URL,
chainId: 1,

You too can pin the block quantity:

networks: {
hardhat: {
forking: {
url: course of.env.MAINNET_RPC_URL,
blockNumber: 14390000

3. Run Community: In your terminal, enter the command beneath to begin hardhat node.

npx hardhat nodeCongratulations you simply forked mainnet

Hardhat Community lets you assume the identification of any handle, enabling you to provoke transactions from that account with out requiring entry to its non-public key. We’ll impersonate vitalik’s handle and ship ethers on his behalf.

  1. Create a transaction.js file within the root of your venture.
  2. In your transaction.js, add the code beneath.

const { ethers, community } = require(“hardhat”);

async perform ship() {
const vitalik_address = “0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B”;
const addressTo = “0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266”;

// impersonating vitalik’s account
await community.supplier.request({
methodology: “hardhat_impersonateAccount”,
params: [vitalik_address],

// make vitalik the signer
const signer = await ethers.getSigner(vitalik_address);

“Vitalik account earlier than transaction”,
ethers.utils.formatEther(await signer.getBalance())

// create transaction
const tx = {
to: addressTo,
worth: ethers.utils.parseEther(“0.01”),

const recieptTx = await signer.sendTransaction(tx);

await recieptTx.wait();

console.log(`Transaction profitable with hash: ${recieptTx.hash}`);
“Vitalik account after transaction”,
ethers.utils.formatEther(await signer.getBalance())

.then(() => course of.exit(0))
.catch((error) => {
course of.exit(1);

3. Run transaction.js within the terminal

node transaction.jsnode transaction.js

Be aware: After the whole transaction, the balances of the account concerned are reset again to their default.

Impersonating an account can transcend sending ether to a different account, one can work together with good contracts, dAPPs, and many others.


Fork Ethereum Mainnet Domestically with Hardhat | Name Contract Strategies on Wrapped Ether and CurveFi

Forking different networks | Ethereum improvement setting for professionals by Nomic Basis

The best way to Fork Ethereum Mainnet

w to buying and selling? Strive crypto buying and selling bots or copy buying and selling on greatest crypto exchanges—-721b17443fd5—4

You May Also Like

Leave a Reply

Your email address will not be published. Required fields are marked *