Marketplace has launched, further enabling blockchain developers! Learn more

How to Fork Ethereum Blockchain with Ganache.

September 23, 2022

Overview

Forking and running a local simulated Ethereum environment is essential if you want to work with DeFi or do Ethereum development in general. In this guide, we’ll cover how to fork Ethereum Blockchain with Ganache

What is Ganache?

Ganache is an Ethereum developer tool that allows you to simulate a blockchain environment locally and test deployed smart contracts. You can use Ganache across the entire development cycle; enabling you to develop, deploy, and test your dApps in a safe and deterministic environment. 

Smart contracts, once deployed on a blockchain, cannot be changed, so it becomes critical to thoroughly test and debug smart contracts before deploying them on the blockchain. Therefore it is essential to have a local blockchain environment that can free the developers from transaction costs and delays. Ganache is specifically designed for this. It is a local in-memory blockchain for development and testing purposes that simulate the real Ethereum network with some accounts funded with test Ether. 

Why Fork Ethereum blockchain?

A fork in software development means making a copy of something separate from the original thing. Forking the Ethereum blockchain means copying the Ethereum blockchain’s state at a certain block and making a copy of it to make your changes moving forward. This allows working with the Ethereum network without altering the actual Ethereum mainnet. The primary reason to do this is to work with existing smart contracts on the blockchain without recreating them. For example, if you want to work with a particular DeFi protocol, you can find that protocol’s smart contract and fork the network for that block. This will allow you to test your project with the smart contract without making real transactions.

Booting our Ethereum node

We could use pretty much any Ethereum client, such as Geth or OpenEthereum (fka Parity for our purposes today. Since that is a bit too involved for forking a block, we'll just grab a free endpoint from QuickNode to make this easy. We’ll need a mainnet endpoint to get data from the chain as we are trying to make a simulated mainnet locally. After you've created your free ethereum endpoint, copy your HTTP Provider endpoint:

 
Screenshot of Quicknode Ethereum endpoint
 

You'll need this later, so copy it and save it.

Installing Ganache CLI

We’ll use Ganache CLI to fork the Mainnet; Ganache CLI uses ethereumjs to simulate full client behavior making development on Ethereum faster, easier, and safer. 

You can download Ganache CLI using npm (Node Package Manager),

installing ganache cli

Copy
$ npm install -g ganache-cli

Or yarn package manager.

installing ganache cli

Copy
$ yarn global add ganache-cli

The most common issue at this step is an internal failure with `node-gyp`. You can follow node-gyp installation instructions here.

Note: You will need to have your python version match one of the compatible versions listed in the instructions above if you encounter the node-gyp issue. 

Another common issue is a stale cache; clear your npm cache by simply typing the below into your terminal:

installing ganache cli

Copy
$ npm cache clean

If everything goes right, Ganache CLI will be installed on your system.

Fork Ethereum Mainnet using Ganache

To fork the mainnet, open your terminal/cmd and copy-paste the following:

fork ethereum mainnet using ganache

Copy
$ ganache-cli --fork <ADD_YOUR_QUICKNODE_URL_HERE>

Replace ADD_YOUR_QUICKNODE_URL_HERE with the QuickNode HTTP URL we got earlier and run the command; you must see something similar to this.


It will fork the mainnet at the blockchain’s latest block, 12200647, in the above example. You can query the forked chain by pinging localhost:8545.

You can fork at a specific block in the blockchain by mentioning the block number along with ‘@’ after your node URL.

fork ethereum mainnet using ganache

Copy
$ ganache-cli --fork <ADD_YOUR_QUICKNODE_URL_HERE>@<block_number>

Let’s say we want to do some development on the xDai chain which resides on the Ethereum blockchain network and uses xDai for gas. We can search for Dai on etherscan, and by going to the holder’s section, we can view the biggest Dai holders copy an address and run the following. 

fork ethereum mainnet using ganache

Copy
$ ganache-cli --fork <ADD_YOUR_QUICKNODE_URL_HERE> -u <address of token holder>

Here ganache will fork the Ethereum blockchain and unlock (-u) the above account for the local ganache environment. Using ganache-cli we can impersonate a particular account address which is usually locked for use. We can also make transactions on the simulated blockchain from that account address.

Note: The tokens you get to use are not real tokens and are meant to be used for development and testing purposes.

Note: You’ll need a node with an archive add-on to access the blocks older than 64 blocks from the latest block.

Querying the forked chain

Now, let’s get some information from the forked chain; we’ll make an eth_getBlockByNumber call that will return information about the block at which we forked the chain. We’ll need to convert the block number from decimal to hexadecimal and add a 0x prefix. 

querying the forked chain

Copy
$ curl --data '{"method":"eth_getBlockByNumber","params":["0xBA29D2",false],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545

We’ll get an output something like this.


The above output has data about the block like the transactions, gas used in the block, timestamp, miner’s address, etc. Here’s the complete output.

Conclusion

Now that you have a local blockchain environment yourself, you can interact with the deployed contracts and build something extraordinary. Refer to Ganache CLI Readme for more Ganache features.

Subscribe to our newsletter for more articles and guides on Ethereum. If you have any feedback, feel free to reach out to us via Twitter. You can always chat with us on our Discord community server, featuring some of the coolest developers you’ll ever meet :)

Related articles 16

Pending and Queued Transactions Explained
Published: Mar 18, 2022
Updated: Sep 23, 2022

The Ethereum network processes over one million transactions a day. These transactions originate from users wanting to transfer Ether or interact with smart contracts. In this guide, we will...

Continue reading
What is Ethereum?
Published: Sep 23, 2022
Updated: Sep 26, 2022

Ethereum is a decentralized and open-sourced blockchain network that allows anyone in the world to participate and interact with it. In this guide, you will learn what Ethereum is, how it...

Continue reading
What are Ethereum Transactions?
Published: Mar 28, 2022
Updated: Sep 23, 2022

Transactions in Ethereum are cryptographically signed data messages that contain a set of instructions. These instructions can interpret to sending Ether from one Ethereum account to another...

Continue reading
How To Fork Ethereum Mainnet with Hardhat
Published: Jul 13, 2021
Updated: Sep 23, 2022

Forking the chain at an older block of the blockchain is helpful if you want to simulate the blockchain’s state at that block; Hardhat has this functionality built in. In this guide, let’s go...

Continue reading
How to Send an EIP-1559 Transaction
Published: Dec 3, 2021
Updated: Sep 23, 2022

While Ethereum has been trying to scale, it has encountered some gas price issues. Many layer 2 solutions and sidechains sprang into existence to solve this problem, but Ethereum is the main...

Continue reading