diff --git a/app/data/compose/docker-compose-reth.yml b/app/data/compose/docker-compose-reth.yml new file mode 100644 index 00000000..a3973717 --- /dev/null +++ b/app/data/compose/docker-compose-reth.yml @@ -0,0 +1,35 @@ +version: "3.8" + +services: + reth: + restart: unless-stopped + hostname: reth + image: cerc/reth:local + entrypoint: ["sh", "/docker-entrypoint-scripts.d/start-reth.sh"] + volumes: + - ../config/reth/start-reth.sh:/docker-entrypoint-scripts.d/start-reth.sh + - reth_data:/root/.local/share/reth + - shared_data:/root/.shared_data + ports: + - "8545:8545" # http rpc + - "8546:8546" # ws rpc + - "30303:30303" # network listening port + - "30303:30303/udp" + - "8551" # consensus auth + + lighthouse: + restart: unless-stopped + hostname: lighthouse + image: cerc/lighthouse:local + entrypoint: ["sh", "/docker-entrypoint-scripts.d/start-lighthouse.sh"] + volumes: + - ../config/reth/start-lighthouse.sh:/docker-entrypoint-scripts.d/start-lighthouse.sh + - lighthouse_data:/root/.lighthouse/mainnet + - shared_data:/root/.shared_data + ports: + - "8001" + +volumes: + reth_data: + lighthouse_data: + shared_data: \ No newline at end of file diff --git a/app/data/config/reth/start-lighthouse.sh b/app/data/config/reth/start-lighthouse.sh new file mode 100644 index 00000000..908bb702 --- /dev/null +++ b/app/data/config/reth/start-lighthouse.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +# Wait for reth container to create jwt auth token +while [ ! -f /root/.shared_data/jwt.hex ]; do + echo "Jwt auth token not found, sleeping for 5s..." + sleep 5 +done + +echo "Jwt token found. Starting Lighthouse..." +export RUST_LOG=info +lighthouse bn \ + --network mainnet \ + --execution-endpoint http://reth:8551 \ + --execution-jwt /root/.shared_data/jwt.hex \ + --checkpoint-sync-url https://mainnet.checkpoint.sigp.io \ + --disable-deposit-contract-sync diff --git a/app/data/config/reth/start-reth.sh b/app/data/config/reth/start-reth.sh new file mode 100644 index 00000000..b42d77d2 --- /dev/null +++ b/app/data/config/reth/start-reth.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# generate jwt token for reth/lighthouse authentication +echo "Installing OpenSSL..." +apt update +apt install openssl +echo "Generating jwt token for lighthouse auth..." +openssl rand -hex 32 | tr -d "\n" | tee /root/.shared_data/jwt.hex + +# start reth +echo "Starting Reth..." +export RUST_LOG=info +reth node \ + --authrpc.jwtsecret /root/.shared_data/jwt.hex \ + --authrpc.addr 0.0.0.0 \ + --authrpc.port 8551 \ + --http \ + --http.addr 0.0.0.0 \ + --http.corsdomain * \ + --http.api eth,web3,net,rpc \ + --ws \ + --ws.addr 0.0.0.0 \ + --ws.origins * \ + --ws.api eth,web3,net,rpc diff --git a/app/data/container-build/cerc-reth/build.sh b/app/data/container-build/cerc-reth/build.sh new file mode 100755 index 00000000..f286c23d --- /dev/null +++ b/app/data/container-build/cerc-reth/build.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +# Build cerc/go-opera +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + +docker build -t cerc/reth:local ${build_command_args} ${CERC_REPO_BASE_DIR}/reth diff --git a/app/data/container-image-list.txt b/app/data/container-image-list.txt index 3e4877c0..43781f8a 100644 --- a/app/data/container-image-list.txt +++ b/app/data/container-image-list.txt @@ -43,3 +43,4 @@ cerc/watcher-gelato cerc/lotus cerc/go-opera cerc/lasso +cerc/reth diff --git a/app/data/pod-list.txt b/app/data/pod-list.txt index 90777a0e..97a7f369 100644 --- a/app/data/pod-list.txt +++ b/app/data/pod-list.txt @@ -29,3 +29,4 @@ watcher-gelato fixturenet-lotus mainnet-go-opera lasso +reth diff --git a/app/data/repository-list.txt b/app/data/repository-list.txt index 7c7bc1d4..a9a85342 100644 --- a/app/data/repository-list.txt +++ b/app/data/repository-list.txt @@ -36,3 +36,4 @@ github.com/filecoin-project/lotus git.vdb.to/cerc-io/test-project github.com/Fantom-foundation/go-opera github.com/cerc-io/lasso +github.com/paradigmxyz/reth diff --git a/app/data/stacks/reth/README.md b/app/data/stacks/reth/README.md new file mode 100644 index 00000000..8dcaa1c5 --- /dev/null +++ b/app/data/stacks/reth/README.md @@ -0,0 +1,65 @@ +# Reth +Deploy a Reth API node alongside Lighthouse. + +## Clone required repositories + +``` +$ laconic-so --stack reth setup-repositories +``` + +## Build the Reth stack containers + +``` +$ laconic-so --stack reth build-containers +``` + +## Deploy the stack + +``` +$ laconic-so --stack reth deploy up +``` + +## Check logs + +``` +$ laconic-so --stack reth deploy logs +``` + +Verify that your node is syncing. You should see entries similar to this from the Lighthouse container: + +``` +laconic-200e8f8ff7891515d777cd0f719078e3-lighthouse-1 | Jun 23 20:59:01.226 INFO New block received root: 0x9cd4a2dd9333cf802c2963c2f029deb0f94e511d2481fa0724ae8752e4c49b15, slot: 6727493 +``` +and entries similar to this from the Reth container: +``` +laconic-200e8f8ff7891515d777cd0f719078e3-reth-1 | 2023-06-23T20:59:11.557389Z INFO reth::node::events: Stage committed progress pipeline_stages=1/13 stage=Headers block=0 checkpoint=4.9% eta=1h 3m 57s +``` + +## Test the API + +Reth's http api is accessible on port `8545` and the websocket api is accessible on port `8546`. +``` +$ curl --request POST \ + --url http://localhost:8545/ \ + --header 'Content-Type: application/json' \ + --data '{ + "jsonrpc": "2.0", + "method": "eth_blockNumber", + "params": [], + "id": 0 + }' + +# Response +{"jsonrpc":"2.0","result":"0x0","id":0} +``` + +## Clean up + +Stop all services running in the background: + +```bash +$ laconic-so --stack reth deploy down +``` +To also delete the docker data volumes: +```bash +$ laconic-so --stack reth deploy down --delete-volumes diff --git a/app/data/stacks/reth/stack.yml b/app/data/stacks/reth/stack.yml new file mode 100644 index 00000000..7d2278db --- /dev/null +++ b/app/data/stacks/reth/stack.yml @@ -0,0 +1,10 @@ +version: "1.1" +name: reth +decription: "Reth node" +repos: + - github.com/paradigmxyz/reth +containers: + - cerc/reth + - cerc/lighthouse +pods: + - reth