Welcome to our guide on how to set up the Ethereum blockchain indexer project, eth-indexer. This project helps you crawl blocks and transactions from the Ethereum blockchain and store the state differences per block in a MySQL database. Let’s dive into the world of decentralized finance and learn how to efficiently index Ethereum data!
Getting Started with eth-indexer
The eth-indexer project consists of three main components:
- geth: A modified version of Geth to get state differences per block.
- idx-database: MySQL database to store all indexed data.
- indexer: The tool that crawls data from Geth and pushes it to the database.
Prerequisites
Before we get started, make sure you have Docker and Docker Compose installed on your machine. These tools are essential for running the project efficiently.
Before Building
Before you build the project, you need to set up the following environment variables:
- MYSQL_DATA_PATH: Path to store MySQL data.
- GETH_DATA_PATH: Path to store Geth data.
To set this up easily, you can create a .env
file in the same folder as your docker-compose.yml
.
Example of .env file:
MYSQL_DATA_PATH=~indexer-datamysql
GETH_DATA_PATH=~indexer-datageth
Configurations and Flags
eth-indexer supports two types of configuration inputs:
- Static configuration using YAML files.
- Dynamic flags provided through the command line.
You may define your configurations in config.yml
or pass flags directly from the command line. When both are used, the command line flags will take precedence over the static configuration.
How to Build the Project
Follow these steps to build the eth-indexer:
- Clone the repository:
- Change the directory to eth-indexer:
- Set the environment variables for MYSQL_DATA_PATH and GETH_DATA_PATH.
- Build the Docker containers:
git clone git@github.com:getamiseth-indexer.git
cd eth-indexer
docker-compose build
Usage Instructions
To use Docker Compose for testing and development, ensure that you create the necessary directories outside the eth-indexer directory:
mkdir -p ~indexer-datamysql ~indexer-datageth
Next, create the database schema:
MYSQL_DATA_PATH=$HOME/indexer-datamysql docker-compose up idx-database idx-migration
Once the migration finishes (indicated by exiting code 0), start the indexer:
MYSQL_DATA_PATH=$HOME/indexer-datamysql GETH_DATA_PATH=$HOME/indexer-datageth docker-compose up
After a few minutes, you should see indexing messages, confirming that data is being inserted successfully!
Example Queries
Upon successful indexing, you can retrieve data from MySQL. Here’s an example of how to query specific information:
package main
import (
"context"
"fmt"
"github.com/ethereum/go-ethereum/common"
"github.com/getamis/eth-indexer/model"
"github.com/getamis/eth-indexer/store/account"
"github.com/getamis/eth-indexer/store/sql"
)
func main() {
db, _ := sql.New(mysql, sql.DriverOption(
sql.Database(ethdb),
sql.Connector(sql.DefaultProtocol, 127.0.0.1, 3306),
sql.UserInfo(root, my-secret-pw),
))
addr := common.HexToAddress("0x756f45e3fa69347a9a973a725e3c98bc4db0b5a0")
store := account.NewWithDB(db)
account, err := store.FindAccount(context.Background(), model.ETHAddress, addr)
if err != nil {
fmt.Printf("Failed to find account: %v\n", err)
} else {
fmt.Printf("Find account, block_number: %v, balance: %v\n", account.Balance, account.BlockNumber)
}
}
This simple program will help you find an account’s balance by looking it up in the indexed database.
Troubleshooting
If you encounter issues while setting up or running eth-indexer, consider the following troubleshooting tips:
- Ensure Docker and Docker Compose are correctly installed.
- Check that your environment variables are correctly set in the .env file.
- Confirm that your MySQL server is running and accessible.
- If you encounter database connection issues, verify the MySQL credentials used in the connection string.
For more insights, updates, or to collaborate on AI development projects, stay connected with fxis.ai.
Contributing to eth-indexer
You can contribute in multiple ways:
- Find and report bugs by creating an issue in the GitHub issue tracker.
- Fix bugs and send a pull request.
- Propose new features and discuss them with the community.
Conclusion
At fxis.ai, we believe that such advancements are crucial for the future of AI, as they enable more comprehensive and effective solutions. Our team is continually exploring new methodologies to push the envelope in artificial intelligence, ensuring that our clients benefit from the latest technological innovations.