Skip to content

Commit fe2f535

Browse files
committed
feat: add blob indexer
1 parent 10151e1 commit fe2f535

7 files changed

Lines changed: 178 additions & 1 deletion

File tree

β€Ž.env.devnetβ€Ž

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,42 @@ TX_SAFE_ABORT_NONCE_TOO_LOW_COUNT=
244244
# Timeout for sending transactions. If 0 it is disabled.
245245
TX_SEND_TIMEOUT=
246246

247+
############################### BLOB INDEXER #####################################
248+
# Database Configuration
249+
BLOB_INDEXER_DATABASE_URL=mysql://root:password@mysql:3306/blobindexer
250+
251+
# Beacon API Configuration
252+
# Use a public beacon node endpoint or your own local beacon node
253+
BLOB_INDEXER_BEACON_URL=http://host.docker.internal:33001
254+
255+
# Exposed port
256+
BLOB_INDEXER_PORT=9000
257+
258+
# HTTP Server Configuration
259+
BLOB_INDEXER_HTTP_BIND=0.0.0.0:9000
260+
261+
# Indexer Performance Configuration
262+
BLOB_INDEXER_POLL_INTERVAL=6s
263+
BLOB_INDEXER_HTTP_TIMEOUT=20s
264+
BLOB_INDEXER_MAX_CONCURRENCY=4
265+
BLOB_INDEXER_BACKFILL_BATCH=32
266+
267+
# Reorg and Finality Configuration
268+
BLOB_INDEXER_REORG_LOOKBACK=128
269+
BLOB_INDEXER_FINALITY_CONFIRMATIONS=64
270+
271+
# Logging Configuration
272+
BLOB_INDEXER_LOG_FORMAT=pretty
273+
RUST_LOG=info
274+
275+
# Optional: Watch specific contract addresses for blob transactions
276+
# Comma-separated list of 0x-prefixed addresses
277+
# BLOB_INDEXER_WATCH_ADDRESSES=0x328F1b56a6128E5F5Efb2d1C9E1b8C2776539363
278+
279+
# Optional: Start indexing from a specific slot (useful for bootstrapping)
280+
# If not set, will start from the latest finalized slot
281+
# BLOB_INDEXER_START_SLOT=8000000
282+
247283
############################### RELAYER #####################################
248284
# Database
249285
MYSQL_USER=admin

β€Ž.env.hoodiβ€Ž

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,42 @@ TX_SAFE_ABORT_NONCE_TOO_LOW_COUNT=
183183
# Timeout for sending transactions. If 0 it is disabled.
184184
TX_SEND_TIMEOUT=
185185

186+
############################### BLOB INDEXER #####################################
187+
# Database Configuration
188+
BLOB_INDEXER_DATABASE_URL=mysql://root:password@mysql:3306/blobindexer
189+
190+
# Beacon API Configuration
191+
# Use a public beacon node endpoint or your own local beacon node
192+
BLOB_INDEXER_BEACON_URL=http://host.docker.internal:33001
193+
194+
# Exposed port
195+
BLOB_INDEXER_PORT=9000
196+
197+
# HTTP Server Configuration
198+
BLOB_INDEXER_HTTP_BIND=0.0.0.0:9000
199+
200+
# Indexer Performance Configuration
201+
BLOB_INDEXER_POLL_INTERVAL=6s
202+
BLOB_INDEXER_HTTP_TIMEOUT=20s
203+
BLOB_INDEXER_MAX_CONCURRENCY=4
204+
BLOB_INDEXER_BACKFILL_BATCH=32
205+
206+
# Reorg and Finality Configuration
207+
BLOB_INDEXER_REORG_LOOKBACK=128
208+
BLOB_INDEXER_FINALITY_CONFIRMATIONS=64
209+
210+
# Logging Configuration
211+
BLOB_INDEXER_LOG_FORMAT=pretty
212+
RUST_LOG=info
213+
214+
# Optional: Watch specific contract addresses for blob transactions
215+
# Comma-separated list of 0x-prefixed addresses
216+
# BLOB_INDEXER_WATCH_ADDRESSES=0x328F1b56a6128E5F5Efb2d1C9E1b8C2776539363
217+
218+
# Optional: Start indexing from a specific slot (useful for bootstrapping)
219+
# If not set, will start from the latest finalized slot
220+
# BLOB_INDEXER_START_SLOT=8000000
221+
186222
############################### RELAYER #####################################
187223
# Database
188224
MYSQL_USER=admin

β€Ž.env.stagingβ€Ž

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,42 @@ TX_SAFE_ABORT_NONCE_TOO_LOW_COUNT=
183183
# Timeout for sending transactions. If 0 it is disabled.
184184
TX_SEND_TIMEOUT=
185185

186+
############################### BLOB INDEXER #####################################
187+
# Database Configuration
188+
BLOB_INDEXER_DATABASE_URL=mysql://root:password@mysql:3306/blobindexer
189+
190+
# Beacon API Configuration
191+
# Use a public beacon node endpoint or your own local beacon node
192+
BLOB_INDEXER_BEACON_URL=http://host.docker.internal:33001
193+
194+
# Exposed port
195+
BLOB_INDEXER_PORT=9000
196+
197+
# HTTP Server Configuration
198+
BLOB_INDEXER_HTTP_BIND=0.0.0.0:9000
199+
200+
# Indexer Performance Configuration
201+
BLOB_INDEXER_POLL_INTERVAL=6s
202+
BLOB_INDEXER_HTTP_TIMEOUT=20s
203+
BLOB_INDEXER_MAX_CONCURRENCY=4
204+
BLOB_INDEXER_BACKFILL_BATCH=32
205+
206+
# Reorg and Finality Configuration
207+
BLOB_INDEXER_REORG_LOOKBACK=128
208+
BLOB_INDEXER_FINALITY_CONFIRMATIONS=64
209+
210+
# Logging Configuration
211+
BLOB_INDEXER_LOG_FORMAT=pretty
212+
RUST_LOG=info
213+
214+
# Optional: Watch specific contract addresses for blob transactions
215+
# Comma-separated list of 0x-prefixed addresses
216+
# BLOB_INDEXER_WATCH_ADDRESSES=0x328F1b56a6128E5F5Efb2d1C9E1b8C2776539363
217+
218+
# Optional: Start indexing from a specific slot (useful for bootstrapping)
219+
# If not set, will start from the latest finalized slot
220+
# BLOB_INDEXER_START_SLOT=8000000
221+
186222
############################### RELAYER #####################################
187223
# Database
188224
MYSQL_USER=admin

β€Ždocker-compose.ymlβ€Ž

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,56 @@ services:
225225
profiles:
226226
- prover
227227

228+
# MySQL Database for storing blob data
229+
mysql:
230+
image: mysql:8.4
231+
container_name: l2-taiko-blob-indexer-mysql
232+
restart: unless-stopped
233+
environment:
234+
MYSQL_ROOT_PASSWORD: password
235+
MYSQL_DATABASE: blobindexer
236+
ports:
237+
- 3307:3306
238+
command:
239+
- --character-set-server=utf8mb4
240+
- --collation-server=utf8mb4_unicode_ci
241+
- --max-connections=1000
242+
- --innodb-buffer-pool-size=1G
243+
volumes:
244+
- ./blobindexer-mysql:/var/lib/mysql
245+
healthcheck:
246+
test: ["CMD", "mysqladmin", "ping", "-ppassword"]
247+
interval: 5s
248+
timeout: 3s
249+
retries: 20
250+
networks:
251+
- surge
252+
profiles:
253+
- blobindexer
254+
255+
# Blob Indexer Service
256+
blobindexer:
257+
image: nethermind/surge-blob-indexer:sha-b978642
258+
container_name: l2-taiko-blob-indexer
259+
restart: unless-stopped
260+
depends_on:
261+
mysql:
262+
condition: service_healthy
263+
env_file:
264+
- .env
265+
ports:
266+
- ${BLOB_INDEXER_PORT}:${BLOB_INDEXER_PORT}
267+
networks:
268+
- surge
269+
healthcheck:
270+
test: ["CMD", "curl", "-f", "http://localhost:${BLOB_INDEXER_PORT}/healthz"]
271+
interval: 30s
272+
timeout: 10s
273+
retries: 3
274+
start_period: 60s
275+
profiles:
276+
- blobindexer
277+
228278
tx-spammer:
229279
image: ethpandaops/spamoor:master
230280
container_name: l2-tx-spammer

β€Žscript/start-driver.shβ€Ž

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ ARGS="${ARGS} \
1414
--l2.ws ws://l2-nethermind-execution-client:"${L2_WS_PORT}" \
1515
--l1.beacon ${L1_BEACON_HTTP} \
1616
--l2.auth http://l2-nethermind-execution-client:${L2_ENGINE_API_PORT} \
17+
--blob.server http://l2-taiko-blob-indexer:${BLOB_INDEXER_PORT} \
1718
--taikoInbox ${TAIKO_INBOX} \
1819
--taikoAnchor ${TAIKO_ANCHOR} \
1920
--jwtSecret /tmp/jwt/jwtsecret \

β€Žsurge-remover.shβ€Ž

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ remove_db() {
5050
echo
5151

5252
# Remove DB
53+
rm -rf ./blobindexer-mysql
5354
rm -rf ./execution-data
5455
rm -rf ./blockscout-postgres-data
5556
rm -rf ./mysql-data
@@ -106,7 +107,7 @@ remove_network() {
106107
remove_l2_stack
107108
remove_relayers
108109
remove_db
109-
remove_configs
110+
# remove_configs
110111
# remove_env_file
111112
remove_network
112113

β€Žsurge-stack-deployer.shβ€Ž

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,20 @@ start_l2_stack() {
235235
fi
236236
}
237237

238+
start_blob_indexer() {
239+
echo
240+
echo "╔══════════════════════════════════════════════════════════════╗"
241+
echo "β•‘ Starting Blob Indexer... β•‘"
242+
echo "β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•"
243+
echo
244+
docker compose --profile blobindexer up -d --remove-orphans
245+
echo
246+
echo "╔══════════════════════════════════════════════════════════════╗"
247+
echo " βœ… Blob Indexer started successfully "
248+
echo "β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•"
249+
echo
250+
}
251+
238252
deploy_l2() {
239253
# Check if deployment is already completed
240254
if [ -f "deployment/setup_l2.json" ]; then
@@ -467,6 +481,9 @@ EOF
467481
}
468482

469483
deploy_surge_stack() {
484+
# Start Blob Indexer
485+
start_blob_indexer
486+
470487
# Start L2 Stack
471488
start_l2_stack
472489

0 commit comments

Comments
Β (0)