This work is supported by an Optimism governance grant.
Hildr is an OP Stack rollup client written in Java 21 with GraalVM native.
Follow the spec
To run a hildr-node and op-geth node, at least 4C8G and 100GB of disk is required, as well as the installation of Java version 21 and Go version 1.20.8, must be lower than v1.21.
First, use Docker start an op-geth container in hildr project root directory:
cd ./docker && docker compose -f docker/docker-compose.yml up op-gethThen, once op-geth has been started, start up the hildr-node in hildr project root directory:
./gradlew :hildr-node:build -x test \
&& nohup java --enable-preview \
-cp hildr-node/build/libs/hildr-node-{version}.jar io.optimism.Hildr \
--network optimism-sepolia \
--jwt-secret $JWT_SECRET \
--l1-rpc-url $L1_RPC_URL \
--l1-ws-rpc-url $L1_WS_RPC_URL \
--l1-beacon-url $L1_BEACON_RPC_URL \
--l2-rpc-url $L2_RPC_URL \
--l2-engine-url $L2_AUTH_RPC_URL \
--rpc-port $HILDR_RPC_PORT \ # Choose any available port.
--log-level $LOG_LEVEL \ # can be either: "DEBUG","TRACE","INFO","WARN","ERROR"
--sync-mode full >l2-hildr-node.log 2>&1 &Running a native hildr container on optimism-sepolia network:
docker run -it ghcr.io/optimism-java/hildr:latest-native \
--network optimism-sepolia \
--jwt-secret $JWT_SECRET \
--l1-rpc-url $L1_RPC_URL \
--l1-ws-rpc-url $L1_WS_RPC_URL \
--l1-beacon-url $L1_BEACON_RPC_URL \
--l2-rpc-url $L2_RPC_URL \
--l2-engine-url $L2_AUTH_RPC_URL \
--rpc-port $HILDR_RPC_PORT \
--log-level $LOG_LEVEL \ # can be either: "DEBUG","TRACE","INFO","WARN","ERROR"
--sync-mode fullRunning a java hildr container on optimism-sepolia network:
docker run -it ghcr.io/optimism-java/hildr:latest \
--network optimism-sepolia \
--jwt-secret $JWT_SECRET \
--l1-rpc-url $L1_RPC_URL \
--l1-ws-rpc-url $L1_WS_RPC_URL \
--l2-rpc-url $L2_RPC_URL \
--l2-engine-url $L2_AUTH_RPC_URL \
--rpc-port $HILDR_RPC_PORT \
--log-level $LOG_LEVEL \ # can be either: "DEBUG","TRACE","INFO","WARN","ERROR"
--sync-mode fullInstall op-geth via the Makefile in the workspace root:
git clone [email protected]:optimism-java/hildr.git \
cd hildr && ./gradlew build -x testThis command will generate the hildr-node jar file in hildr/hildr-node/build/libs
You will need three things to run hildr-node:
- An archival L1 node, synced to the settlement layer of the OP Stack chain you want to sync (e.g. reth, geth, besu, nethermind, etc.)
- An Optimism Execution Engine (e.g. op-geth, op-reth, op-erigon, etc.)
- An instance of hildr-node. For this example, we'll start an Optimism Sepolia Node.
Next, you'll need to install a Optimism L2 Execution Engine, which is the equivalent to the Execution Client on the OP Stack. Available options include:
We'll use the reference implementation of the Optimism Execution Engine maintained by OP Labs, the op-geth.
The op-geth can be built from source or pulled from a Docker image available on Google Cloud.
We'll run it by docker image.
There has a .env.default file in the ./docker directory. Copy it as .env and modify the fields value below:
# Set the network value to `devnet` in the configuration.
NETWORK=optimism-sepolia
# The HTTP RPC endpoint of an L1 node. Generate by Alchemy.com
L1_RPC_URL=https://eth-goerli.g.alchemy.com/v2/<Alchemy App Key>
# The WebSocket RPC endpoint of an L1 node. Generate by Alchemy.com
L1_WS_RPC_URL=wss://eth-goerli.g.alchemy.com/v2/<Alchemy App Key>
# JWT secret for the L2 engine API
JWT_SECRET=bf549f5188556ce0951048ef467ec93067bc4ea21acebe46ef675cd4e8e015ff
# The exeuction client Auth RPC port.
EXECUTION_CLIENT_AUTH_RPC_PORT=5551
# The execution client RPC port.
EXECUTION_CLIENT_RPC_PORT=5545
# The execution client WebSocket port.
EXECUTION_CLIENT_WS_PORT=5546
You also can run a hildr-node on devnet
- Install GraalVM latest version
./gradlew buildFor the latest javadocs for the main branch, run ./gradlew javadoc and open
the document under the hildr-node/build/docs/javadoc/index.html in your browser.
./gradlew test
Next copy .env.default to .env
cd docker/
cp .env.default .envIn the .env file, modify the L1_RPC_URL field to contain a valid Ethereum RPC. For the Optimism and Base testnets, this must be a Goerli RPC URL. This RPC can either be from a local node, or a provider such as Alchemy or Infura.
By default, the NETWORK field in .env is optimism-goerli, however base-goerli is also supported.
Start the docker containers
docker compose up -dThe docker setup contains a Grafana dashboard. To view sync progress, you can check the dashboard at http://localhost:3000 with the username hildr and password passw0rd. Alternatively, you can view Hildr's logs by running docker logs hildr-node --follow.
To help hildr grow, follow Contributing to hildr.