Erigon
Erigon is a client implementation focused on performance and saving disk space, written in Go.
Install and run Erigon if you want to follow the Linea network by maintaining a local copy of the blockchain. However, if you want to interact with the network and use Linea-specific methods and features, you should install Linea Besu instead.
Please note that you must run any execution layer client such as Erigon alongside Linea's consensus layer client, Maru, for the node to function.
Run using Docker​
Erigon support for current Linea is merged upstream in
erigontech/erigon#20298 and is included in the
Erigon v3.5 milestone. Until an official v3.5 or later Docker image is published, build a local
image from the #20298 merge commit and use that image in the compose file.
Prerequisites​
Step 1. Build an Erigon image from the Linea merge commit​
Build the Docker image from the #20298 merge commit:
git clone https://github.com/erigontech/erigon.git
cd erigon
git checkout 34ac22904b0de1b14cf054a7cf2c0d02461215f3
docker build -t erigon-linea:pr-20298 .
After an official Erigon v3.5 or later image is published, you can skip this step and use the
official release image in the compose file instead.
Step 2. Download the Linea node example config​
Use the Linea monorepo's docs/getting-started directory as the example Docker Compose
configuration. The same directory contains the Geth genesis file that Erigon should initialize from.
- Mainnet
- Linea Sepolia
Download or clone the
docs/getting-started/linea-mainnet
directory from the Linea monorepo.
Use the
geth/geth-genesis.json
file as the Erigon genesis file. The Erigon services in the example compose file expect
./genesis.json, so copy the Geth genesis file to that name:
cp geth/geth-genesis.json genesis.json
You can choose from a range of bootnodes for Linea Mainnet. The Docker Compose file uses all bootnodes by default.
The bootnodes page contains a full list of available bootnodes.
Download or clone the
docs/getting-started/linea-sepolia
directory from the Linea monorepo.
Use the
geth/geth-genesis.json
file as the Erigon genesis file. The Erigon services in the example compose file expect
./genesis.json, so copy the Geth genesis file to that name:
cp geth/geth-genesis.json genesis.json
Step 3. Update the Erigon services in Docker Compose​
The monorepo's Docker Compose example includes Erigon services, but it may still reference an older
published Erigon image, for example erigontech/erigon:2.61.0.
Until an official Erigon v3.5 or later image is published, do not use the Erigon image tag already
set in the monorepo compose file. Replace the Erigon image in both erigon-init and erigon-node
with the local image you built in Step 1.
erigon-init:
image: erigon-linea:pr-20298
erigon-node:
image: erigon-linea:pr-20298
Also make sure Erigon initializes the same data directory that the node uses. The compose example
mounts the Erigon volume at /home/erigon/.local/share/erigon/; if erigon-init still has
--datadir=/data, change it to:
erigon-init:
command:
- init
- /genesis.json
- --datadir=/home/erigon/.local/share/erigon
When an official Erigon v3.5 or later image is published, replace erigon-linea:pr-20298 with the
official release image tag.
Step 4. Start the Erigon node​
In a terminal, navigate to the Linea monorepo directory for your network. Start the Erigon services from that compose file:
docker compose up erigon-init erigon-node
The compose file initializes Erigon from the Geth genesis JSON, then starts the Erigon execution client. Keep Maru running alongside your chosen execution client for a full Linea node.
Alternative: Run using the binary distribution​
Until an official Erigon v3.5 or later release is published, use a binary built from the
#20298 merge commit rather than a published
release binary. Ensure you review
Erigon's software prerequisites
before building the Erigon client.
If you're not comfortable with installing the binary distribution, use Docker instead.
Step 1. Build Erigon​
Build Erigon from the #20298 merge commit:
git clone https://github.com/erigontech/erigon.git
cd erigon
git checkout 34ac22904b0de1b14cf054a7cf2c0d02461215f3
make erigon
Use the resulting build/bin/erigon binary in the commands below, or add it to your PATH.
Step 2. Download the genesis file​
Download the genesis file for the relevant network. In the example, we'll download the file to the
directory specified by datadir in Step 4.
- Mainnet
- Linea Sepolia
Download the current Linea Mainnet
geth-genesis.json
file from the Linea monorepo. Save it in your Erigon data directory as genesis.json.
Download the current Linea Sepolia
geth-genesis.json
file from the Linea monorepo. Save it in your Erigon data directory as genesis.json.
Step 3. Define disk space volume (optional)​
Define a volume size appropriate to your expected usage. Erigon full nodes use over 200GB.
Use these figures as a basis to determine the extent to which you want to future-proof your node.
Ensure you mount the Erigon datadir to the custom volume.
If you run out of space, or need to actively maintain how much space is being used, consider pruning.
Blockchain clients can take up a lot of disk space. By defining the amount of disk space you're willing to dedicate to your client (and the block data that it will be syncing), you can ensure that you still have enough room on your disk for whatever else you need.
Select the relevant operating system for the steps on how to create a custom volume.
Ubuntu
- Open Terminal
- Use the
df -hcommand to check the available disk space - Choose a maximum size for the volume. We'll use 100GB for this example.
- Use
fallocateto create a file of the desired size, e.g.fallocate -l 100G myfile.img - Use
mkfs.ext4to format the file as an ext4 filesystem. e.g.mkfs.ext4 myfile.img - Mount the file using
mount, e.g.mount -o loop myfile.img /mnt/myvolume - The contents will now be available in
/mnt/myvolume, up to a maximum of 100GB
MacOS
- Open Terminal
- Use the
df -hcommand to check the available disk space - Choose a maximum size for the volume. We'll use 100GB for this example.
- Use
hdiutilto create a sparse image of the desired size, e.g.hdiutil create -size 100g -type SPARSE -fs HFS+X myfile.dmg - Mount the image using
hdiutil, e.g.hdiutil attach myfile.dmg - The contents will now be available mounted under
/Volumes, up to a maximum of 100GB
Windows
Without Windows Subsystem Linux
- Open Command Prompt as Administrator
- Use the
dircommand to check available disk space on the volume you want to create the disk image - Choose a maximum size for the volume. We'll use 100GB for this example.
- Use the
fsutilcommand to create a sparse file of the desired size, e.g.fsutil file createnew myfile.img 107374182400(for a 100GB file) - Initialize the disk image using
diskpart:diskpartselect vdisk file="myfile.img"create vdisk maximum=100000attach vdiskexit
- Format the volume using
format, e.g.format F: /FS:NTFS /A:64K /Q - The new volume will now be available as drive letter F:, up to the maximum 100GB size
To mount an existing disk image:
- Open Command Prompt as Administrator
- Use
diskpartselect vdisk file="myfile.img"attach vdisk
- The disk image will be mounted and accessible under the assigned drive letter
With Windows Subsystem Linux
- Open WSL
- Use the
df -hcommand to check the available disk space - Choose a maximum size for the volume. We'll use 100GB for this example.
- Use
fallocateto create a file of the desired size, e.g.fallocate -l 100G myfile.img - Use
mkfs.ext4to format the file as an ext4 filesystem. e.g.mkfs.ext4 myfile.img - Mount the file using
mount, e.g.mount -o loop myfile.img /mnt/myvolume - The contents will now be available in
/mnt/myvolume, up to a maximum of 100GB
Step 4. Bootstrap your node​
Bootstrap the node using the following command:
- Mainnet
- Linea Sepolia
erigon --datadir $HOME/erigon-mainnet-data/ init $HOME/erigon-mainnet-data/genesis.json
erigon --datadir $HOME/erigon-sepolia-data/ init $HOME/erigon-sepolia-data/genesis.json
Step 5. Start the Erigon client​
Start the node using the following command:
- Mainnet
- Linea Sepolia
erigon \
--datadir $HOME/erigon-mainnet-data/ \
--networkid 59144 \
--rpc.allow-unprotected-txs \
--txpool.accountqueue 50000 \
--txpool.globalqueue 50000 \
--txpool.globalslots 50000 \
--txpool.pricelimit 1000000 \
--txpool.pricebump 1 \
--txpool.nolocals \
--http --http.addr '127.0.0.1' --http.port 8545 --http.corsdomain '*' --http.api 'web3,eth,txpool,net' --http.vhosts='*' \
--ws \
--bootnodes "enode://069800db9e6e0ec9cadca670994ef1aea2cfd3d88133e63ecadbc1cdbd1a5847b09838ee08d8b5f02a9c32ee13abeb4d4104bb5514e5322c9d7ee19f41ff3e51@3.132.73.210:31002,enode://a8e03a71eab12ec4b47bb6e19169d8e4dc7a58373a2476969bbe463f2dded6003037fa4dd5f71e15027f7fc8d7340956fbbefed67ddd116ac19a7f74da034b61@3.132.73.210:31003,enode://97706526cf79df9d930003644f9156805f6c8bd964fc79e083444f7014ce10c9bdd2c5049e63b58040dca1d4c82ebef970822198cf0714de830cff4111534ff1@18.223.198.165:31004,enode://24e1c654a801975a96b7f54ebd7452ab15777fc635c1db25bdbd4425fdb04e7f4768e9e838a87ab724320a765e41631d5d37758c933ad0e8668693558125c8aa@18.223.198.165:31000,enode://27010891d960f73d272a553f72b6336c6698db3ade98d631f09c764e57674a797be5ebc6829ddbb65ab564f439ebc75215d20aa98b6f351d12ea623e7d139ac3@3.132.73.210:31001,enode://228e1b8a4931e46f383e30721dac21fb8fb4e5e1b32c870e13b25478c82db3dc1cd9e7ceb93d302a766466b55638cc9c5cbfc43aa48fa41ced19baf365951f76@3.1.142.64:31002,enode://c22eb0d40fc3ad5ea710aeddea906567778166bfe18c157955e8c39b23a46c45db18a0fa2ba07f2b64c81178a8c796aec2a29151533920ead06fcdfc6d8d03c6@47.128.192.57:31004,enode://8ce733abe39fd7ae0a278b9893f85c1193c611a3886168690dd843435460f22cc4d61f9e8d0ace7f5905836a665319a31cccdaacdada2acc69972c382ecce7db@3.1.142.64:31003,enode://b7c1b2bed65a855f7a2104aac9a14674dfdf018fdac763415b373b29ce18cdb81d36328ba4e5c9f12629f3a50c3e8f9ee048f22dbdbe93a82813da89c6b81334@51.20.235.126:31004,enode://95270e0550848a72fb141cf27f1c4ea10714edde365b411dc0fa06c81c0f282ce155eb9fa472b6b8bb9ee98395eeaf4c5a7b02a01fe58b37ea98ba152eda4c37@13.50.94.193:31000,enode://72013391755f24f08567b932feeeec4c893c06e0b1fb480890c83bf87fd277ad86a5ab9cb586db9ae9970371a2f8cb0c96f6c9f69045abca0fb801db7f047138@51.20.235.126:31001" \
--prune hrtc \
--metrics \
--verbosity 3
You can choose from a range of bootnodes for Linea Mainnet. The above command uses all bootnodes by default.
The bootnodes page contains a full list of available bootnodes.
erigon \
--datadir $HOME/erigon-sepolia-data \
--networkid 59141 \
--rpc.allow-unprotected-txs \
--txpool.accountqueue 50000 \
--txpool.globalqueue 50000 \
--txpool.globalslots 50000 \
--txpool.pricelimit 1000000 \
--txpool.pricebump 1 \
--txpool.nolocals \
--http --http.addr '127.0.0.1' --http.port 8545 --http.corsdomain '*' --http.api 'web3,eth,txpool,net' --http.vhosts='*' \
--ws \
--bootnodes "enode://6f20afbe4397e51b717a7c1ad3095e79aee48c835eebd9237a3e8a16951ade1fe0e66e981e30ea269849fcb6ba03d838da37f524fabd2a557474194a2e2604fa@18.221.100.27:31002,enode://ce1e0d8e0500cb5c0ac56bdcdafb2d6320c3a2c5125b5ccf12f5dfc9b47ee74acbcafc32559017613136c9c36a0ce74ba4f83b7fb8244f099f3b15708d9d3129@3.23.75.47:31000,enode://1b026a5eb0ae74300f58987d235ef0e3a550df963345cb3574be3b0b54378bd11f14dfd515a8976f2c2d2826090e9507b8ccc24f896a9ffffffcabcfd996a733@3.129.120.128:31001" \
--prune hrtc \
--metrics \
--verbosity 3
The Erigon node will attempt to find peers to begin synchronizing and to download the world state.
Confirm the node is running​
You can call the JSON-RPC API methods to confirm the node is running. For example, call
eth_syncing to return the synchronization status.
For example the starting, current, and highest block, or false if not synchronizing (or if the head of the chain has been reached).
curl localhost:8545 \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'
You should get a result similar to:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"startingBlock": "0x0",
"currentBlock": "0x5d228",
"highestBlock": "0x3cedec"
}
}