mirror of
https://github.com/simplex-chat/simplexmq.git
synced 2026-06-05 23:41:31 +00:00
47 lines
1.9 KiB
Markdown
47 lines
1.9 KiB
Markdown
# Ethereum stack for SMP names role
|
|
|
|
Reth (execution) + Nimbus (consensus) on Holesky testnet by default.
|
|
|
|
## Quickstart
|
|
|
|
```sh
|
|
cd scripts/docker/reth-nimbus
|
|
docker compose up -d
|
|
docker compose logs -f reth nimbus
|
|
```
|
|
|
|
Sync takes a few hours on Holesky, ~1 day on mainnet. When synced:
|
|
|
|
```sh
|
|
curl -s -X POST http://127.0.0.1:8545 \
|
|
-H 'Content-Type: application/json' \
|
|
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
|
|
```
|
|
|
|
Point smp-server: `[NAMES] ethereum_endpoint: http://127.0.0.1:8545`.
|
|
|
|
## How the trust bootstrap works
|
|
|
|
- **Reth** holds Ethereum state and runs the EVM. It does not decide which fork is canonical.
|
|
- **Nimbus** follows the beacon chain and tells Reth which payloads to execute.
|
|
- Nimbus needs **one trusted starting point** to break the chicken-and-egg of peer-claims. `--trusted-node-url` fetches that checkpoint once from a public beacon API; from that point on every block is verified locally against the validator set.
|
|
- The default `TRUSTED_NODE_URL` is publicnode.com (no API key, no rate limits). Replace with any beacon API you trust — only consulted once on first sync.
|
|
|
|
## Switching to mainnet
|
|
|
|
Edit `.env`:
|
|
|
|
```
|
|
NETWORK=mainnet
|
|
TRUSTED_NODE_URL=https://ethereum-beacon-api.publicnode.com
|
|
```
|
|
|
|
Then `docker compose down -v && docker compose up -d` (the `-v` wipes state so Nimbus re-bootstraps against the new network). Reth on mainnet needs ~260 GB pruned NVMe.
|
|
|
|
## Notes
|
|
|
|
- Reth's RPC is bound to `127.0.0.1:8545` only. For remote access (multiple smp-server hosts → one Reth), put Caddy + Let's Encrypt + Basic auth in front — see `plans/20260522_01_smp_public_namespaces.md` §"Operator deployment".
|
|
- Ports 30303/9000 are p2p — open on your firewall for sync.
|
|
- `jwt.hex` is generated on first run by the `jwt-init` service and shared between Reth and Nimbus via the `jwt` volume.
|
|
- To wipe state and re-sync: `docker compose down -v`.
|