Repository navigation
Expand file tree
/
Copy path.env.example
More file actions
189 lines (169 loc) · 9.4 KB
/
Copy path.env.example
File metadata and controls
189 lines (169 loc) · 9.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# =============================================================================
# rbuilder local devnet — environment
# =============================================================================
# Copy to `.env` (the Makefile does this for you): cp .env.example .env
#
# DO NOT QUOTE VALUES - not even ones containing spaces or brackets.
#
# The Makefile does `include .env` followed by `export`. GNU Make's include
# parses this file as a makefile, and it does NOT strip quotes: the quote
# characters stay part of the value and are exported into every recipe's
# environment. Docker Compose gives the process environment precedence over
# .env, so the quoted value is what actually reaches the containers, and
# `make up` then breaks where a plain `docker compose up` would not:
#
# DEVNET_VALIDATOR_MNEMONIC="..." -> configs/genesis/cl/mnemonics.yaml
# already wraps it in quotes, giving `- mnemonic: ""sleep moment ...""`,
# and genesis generation dies with
# "failed to load validators from mnemonics file: yaml: did not find
# expected key", leaving /shared/metadata half-written.
#
# RBUILDER_LIVE_BUILDERS='[...]' -> rendered into rbuilder.toml as a TOML
# string instead of an array:
# "invalid type: string \"[...]\", expected a sequence".
#
# Unquoted values with spaces or brackets are parsed correctly by Make, by
# Compose, and by scripts/lib/envfile.sh. Nothing in this repo shell-sources
# .env any more (all reads go through envfile.sh's env_get), which is what
# the quotes were originally protecting against.
#
# Every variable below ALSO has an inline default inside docker-compose.yml,
# so `docker compose up --build` works even with no .env file present.
#
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# !! EVERY KEY IN THIS FILE IS A PUBLIC, WELL-KNOWN, TEST-ONLY KEY. !!
# !! THEY ARE PUBLISHED IN DOCUMENTATION AND SOURCE REPOSITORIES. !!
# !! NEVER USE ANY OF THEM ON MAINNET OR ANY PUBLIC NETWORK. !!
# !! ANY FUNDS SENT TO THESE ADDRESSES ON A PUBLIC CHAIN WILL BE STOLEN. !!
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# -----------------------------------------------------------------------------
# Pinned software versions (no `latest` tags anywhere)
# -----------------------------------------------------------------------------
# Reth execution client. MUST match the reth version rbuilder is compiled
# against (rbuilder develop pins `tag = "v2.2.0"` in its root Cargo.toml),
# because rbuilder opens reth's MDBX database directly.
RETH_IMAGE=ghcr.io/paradigmxyz/reth:v2.2.0
# Lighthouse consensus client + validator client.
LIGHTHOUSE_IMAGE=sigp/lighthouse:v8.2.1
# Flashbots mev-boost-relay. Docker tag 0.34.5 == git commit b1dc800
# ("Add metric to detect late payload deliveries", 2026-07-24).
# NOTE: the *git* tag `v0.9.1` in that repo is from 2022 and is unrelated to
# the Docker tag numbering; do not use `flashbots/mev-boost-relay:0.9.1`.
MEV_BOOST_RELAY_IMAGE=flashbots/mev-boost-relay:0.34.5
# Flashbots mev-boost (the proposer-side multiplexer).
MEV_BOOST_IMAGE=flashbots/mev-boost:1.12
# Genesis generator (EL genesis.json + CL config.yaml/genesis.ssz + val keys).
GENESIS_GENERATOR_IMAGE=ethpandaops/ethereum-genesis-generator:6.1.5
# Supporting images.
POSTGRES_IMAGE=postgres:16-alpine
REDIS_IMAGE=redis:7.4-alpine
PYTHON_IMAGE=python:3.12-slim-bookworm
PROMETHEUS_IMAGE=prom/prometheus:v3.1.0
# Boost+ rbuilder source pin. The fork starts from the official rbuilder commit
# compatible with Reth v2.2.0 and adds the paper's default algorithm. Keep the
# full commit hash: rbuilder opens Reth's database directly, so an arbitrary
# branch head can introduce an MDBX/static-file format mismatch.
RBUILDER_REPO=https://github.com/hackingdecentralized/rbuilder.git
RBUILDER_COMMIT=db8e5b57f7d3d086131eb9f48502fde85763fae6
# -----------------------------------------------------------------------------
# Chain parameters
# -----------------------------------------------------------------------------
DEVNET_CHAIN_ID=7788
# Slot duration in milliseconds. Default 3s. Must be a whole
# number of seconds (Lighthouse derives SECONDS_PER_SLOT = ms / 1000).
DEVNET_SLOT_DURATION_MS=3000
# Start preparing the execution payload before the next slot. Keep this below
# the slot duration so the request stays inside the current slot.
DEVNET_PREPARE_PAYLOAD_LOOKAHEAD_MS=2000
# Maximum time mev-boost waits for the local relay to return a payload. Keep it
# inside one slot so a failed request cannot consume the next proposal window.
RELAY_TIMEOUT_MS_GETPAYLOAD=2500
# Seconds between MIN_GENESIS_TIME and actual CL genesis. Keep it long enough
# for reth + lighthouse to boot on your machine (20-40s is typical).
DEVNET_GENESIS_DELAY=30
# Genesis validators. 64 gives healthy committees at 32 slots/epoch.
DEVNET_VALIDATOR_COUNT=64
DEVNET_GENESIS_GASLIMIT=36000000
# Highest fork enabled *from genesis*: Electra (CL) / Prague (EL).
# Fulu/Osaka (PeerDAS) and later are pushed to the far-future epoch.
# See README "Fork selection" for why.
DEVNET_FULU_FORK_EPOCH=18446744073709551615
# -----------------------------------------------------------------------------
# TEST-ONLY keys and addresses (see the warning banner above)
# -----------------------------------------------------------------------------
# rbuilder coinbase / builder EOA. This is Anvil/Hardhat account #0
# ("test test test test test test test test test test test junk", m/44'/60'/0'/0/0).
# Address: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
RBUILDER_COINBASE_SECRET_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
RBUILDER_COINBASE_ADDRESS=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
# rbuilder BLS key used to sign bids sent to the relay.
# This is rbuilder's own published `BLSBlockSigner::test_signer()` key.
# pubkey: 0xa1885d66bef164889a2e35845c3b626545d7b0e513efe335e97c3a45e534013fa3bc38c3b7e6143695aecc4872ac52c4
RBUILDER_RELAY_SECRET_KEY=5eae315483f028b5cdd5d1090ff0c7618b18737ea9bf3c35047189db22835c48
RBUILDER_BLS_PUBKEY=0xa1885d66bef164889a2e35845c3b626545d7b0e513efe335e97c3a45e534013fa3bc38c3b7e6143695aecc4872ac52c4
# Relay BLS key (signs the bids the relay serves to the proposer).
# pubkey derived with py_ecc G2ProofOfPossession.SkToPk(sk).
RELAY_SECRET_KEY=0x607a11b45a7219cc61a3d9c5fd08c7eebd602a6a19a977f8d3771d5711a550f2
RELAY_BLS_PUBKEY=0xa55c1285d84ba83a5ad26420cd5ad3091e49c55a813eee651cd467db38a8c8e63192f47955e9376f6b42f6d190571cb5
# Engine API JWT shared by reth and Lighthouse. Fixed so it is reproducible.
DEVNET_JWT_SECRET=0x2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a
# Validator fee recipient. No private key exists for this address on purpose:
# it makes the proposer payout trivially visible in `eth_getBalance`.
VALIDATOR_FEE_RECIPIENT=0x000000000000000000000000000000000000F33D
# 24-word mnemonic used for the genesis validator set (ethpandaops default).
DEVNET_VALIDATOR_MNEMONIC=sleep moment list remain like wall lake industry canvas wonder ecology elite duck salad naive syrup frame brass utility club odor country obey pudding
# -----------------------------------------------------------------------------
# rbuilder runtime configuration
# -----------------------------------------------------------------------------
# Templates are filenames under configs/rbuilder/. Override both when testing a
# custom algorithm so the live and deterministic-replay paths use matching
# builder definitions.
RBUILDER_CONFIG_TEMPLATE=rbuilder.toml.tmpl
RBUILDER_BACKTEST_TEMPLATE=backtest.toml.tmpl
# Which block-building algorithms run live. TOML array syntax.
# ["mgp-ordering"] -> only effective-MEV-gas-price ordering
# ["mp-ordering"] -> only max-absolute-profit ordering
# ["mgp-ordering","mp-ordering"]-> both compete; best bid wins (default)
RBUILDER_LIVE_BUILDERS=["mgp-ordering", "mp-ordering"]
RBUILDER_LOG_LEVEL=info,rbuilder=debug
RBUILDER_EXTRA_DATA=boostplus-devnet
# Keep this many per-block order-flow trace files on disk.
RBUILDER_TRACE_MAX_BLOCKS=2000
# Optional cap on the bid rbuilder will submit (ETH). Empty = no cap.
RBUILDER_MAX_BID_ETH=
# -----------------------------------------------------------------------------
# Workload generator
# -----------------------------------------------------------------------------
TXGEN_ENABLED=true
TXGEN_TPS=6
TXGEN_SEED=42
# Fraction of generated orders (0..1) that are bundles rather than plain txs.
TXGEN_BUNDLE_RATIO=0.35
# Send plain transactions to reth's public mempool as well as to rbuilder.
TXGEN_USE_PUBLIC_MEMPOOL=true
# -----------------------------------------------------------------------------
# Host port bindings (all bound to 127.0.0.1 only)
# -----------------------------------------------------------------------------
PORT_RETH_HTTP=8545
PORT_RETH_WS=8546
PORT_RETH_METRICS=9001
PORT_LIGHTHOUSE_BN_HTTP=5052
PORT_LIGHTHOUSE_BN_METRICS=5054
PORT_LIGHTHOUSE_VC_METRICS=5064
PORT_RELAY_API=9062
PORT_RELAY_WEBSITE=9060
PORT_RELAY_HOUSEKEEPER=9064
PORT_MEV_BOOST=18550
PORT_RBUILDER_RPC=8645
PORT_RBUILDER_TELEMETRY=6060
PORT_RBUILDER_TELEMETRY_REDACTED=6070
PORT_ORDERFLOW_SHIM=8646
PORT_POSTGRES=5432
PORT_REDIS=6379
PORT_PROMETHEUS=9090
# -----------------------------------------------------------------------------
# Relay database credentials (local only, never exposed off-host)
# -----------------------------------------------------------------------------
POSTGRES_USER=relay
POSTGRES_PASSWORD=local-test-only
POSTGRES_DB=relay