Skip to content

Commit 334aebf

Browse files
committed
feat(epbs): prysm CL support in the ePBS sim + client-agnostic service discovery
Adds configs/epbs/gloas-epbs-prysm.yaml (prysm beacon-chain + validator images, --enable-builder, supernode) and makes run-epbs-sim.sh discover the CL/VC services dynamically (cl-1-* / vc-1-*) instead of hardcoding lodestar, so the loop runs for any client. Prysm exposes the same keymanager builder_config endpoint, so cb-km apply reuses unchanged.
1 parent 5262922 commit 334aebf

2 files changed

Lines changed: 58 additions & 4 deletions

File tree

‎configs/epbs/gloas-epbs-prysm.yaml‎

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# ePBS (gloas) devnet against a PRYSM CL/VC build (PR #17397, VC -> gloas builder API).
2+
# Same loop as gloas-epbs.yaml (VC -> keymanager builder_config -> commit-boost ->
3+
# buildoor) but with prysm instead of lodestar. Prysm exposes the same keymanager
4+
# POST /eth/v1/validator/{pubkey}/builder_config endpoint (validator/rpc
5+
# handlers_validator_config.go SetBuilderConfig), so `cb-km apply` reuses unchanged.
6+
# Prysm uses SEPARATE beacon-chain + validator images and needs --enable-builder on
7+
# the VC. Build from the PR branch with BOTH --config=release AND --config=minimal
8+
# (prysm's preset is COMPILE-TIME; a mainnet-built binary can't load a minimal genesis):
9+
# git clone --branch builder-rest-vc https://github.com/OffchainLabs/prysm
10+
# bazelisk build //cmd/beacon-chain:oci_image_tarball //cmd/validator:oci_image_tarball \
11+
# --platforms=@io_bazel_rules_go//go/toolchain:linux_amd64_cgo --config=release --config=minimal
12+
# docker load -i bazel-bin/cmd/{beacon-chain,validator}/oci_image_tarball/tarball.tar
13+
# Then RE-TAG to a local-only name (the sim runs --image-download always, which would
14+
# otherwise pull the PUBLIC gcr.io/offchainlabs/prysm over your local build):
15+
# docker tag gcr.io/offchainlabs/prysm/beacon-chain:latest local/prysm-beacon-chain:epbs
16+
# docker tag gcr.io/offchainlabs/prysm/validator:latest local/prysm-validator:epbs
17+
participants:
18+
- el_type: geth
19+
el_image: ethpandaops/geth:glamsterdam-devnet-8
20+
cl_type: prysm
21+
cl_image: local/prysm-beacon-chain:epbs
22+
vc_image: local/prysm-validator:epbs
23+
cl_log_level: debug
24+
vc_log_level: debug
25+
vc_extra_params:
26+
- --enable-builder
27+
# PeerDAS/Fulu requires a supernode (or a node with 128+ validators).
28+
supernode: true
29+
keymanager_enabled: true
30+
validator_count: 64
31+
mev_type: buildoor
32+
buildoor_params:
33+
image: ethpandaops/buildoor@sha256:501764a3c43e6289fa1b85df9e7489f1d2de24e1efe0a65c4d316bd340166991
34+
builder_api: true
35+
epbs_builder: true
36+
lifecycle: true
37+
extra_args:
38+
- --log-level=debug
39+
network_params:
40+
preset: minimal
41+
seconds_per_slot: 6
42+
gloas_fork_epoch: 0
43+
attestation_due_bps_gloas: 2500
44+
withdrawal_type: "0x01"
45+
validator_balance: 32
46+
builder_count: 1
47+
builder_balance: 100
48+
deploy_eip8282_contracts: true
49+
global_log_level: info

‎scripts/run-epbs-sim.sh‎

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ cb_logs() {
156156
# for the same reason as cb_logs: the rejection line lives in the full history,
157157
# not the 200-line tail (the tail hiding it was the sole cause of the earlier
158158
# "floor unexercised" flake).
159-
bn_logs() { kurtosis service logs -a "$ENCLAVE" cl-1-lodestar-geth 2>&1 || true; }
159+
bn_logs() { kurtosis service logs -a "$ENCLAVE" "$BN_SVC" 2>&1 || true; }
160160

161161
# ---- keymanager helpers (used out-of-enclave, exactly like cb-km) -----------
162162
# Authenticated GET/POST of a validator's builder_config, against the same
@@ -494,9 +494,14 @@ log "launching gloas devnet ($ARGS_FILE)"
494494
kurtosis run "$EP_PACKAGE" --enclave "$ENCLAVE" --args-file "$ARGS_FILE" --image-download always
495495

496496
NET="kt-${ENCLAVE}"
497-
BN="$(kurtosis port print "$ENCLAVE" cl-1-lodestar-geth http)"
498-
VC_KM="$(kurtosis port print "$ENCLAVE" vc-1-geth-lodestar http-validator)"
499-
[[ -n "$BN" && -n "$VC_KM" ]] || die "could not discover BN / VC keymanager ports"
497+
# Discover the CL/VC service names (client-agnostic: cl-1-<cl>-<el>, vc-1-<el>-<cl>),
498+
# so the loop works for lodestar, prysm, etc. without hardcoding the client.
499+
BN_SVC="$(kurtosis enclave inspect "$ENCLAVE" 2>/dev/null | grep -oE 'cl-1-[a-z0-9-]+' | head -1)"
500+
VC_SVC="$(kurtosis enclave inspect "$ENCLAVE" 2>/dev/null | grep -oE 'vc-1-[a-z0-9-]+' | head -1)"
501+
[[ -n "$BN_SVC" && -n "$VC_SVC" ]] || die "could not discover cl-1-* / vc-1-* services in $ENCLAVE"
502+
BN="$(kurtosis port print "$ENCLAVE" "$BN_SVC" http)"
503+
VC_KM="$(kurtosis port print "$ENCLAVE" "$VC_SVC" http-validator)"
504+
[[ -n "$BN" && -n "$VC_KM" ]] || die "could not discover BN / VC keymanager ports ($BN_SVC / $VC_SVC)"
500505
echo "BN=$BN VC-km=$VC_KM net=$NET"
501506

502507
# ---- 2. wait for the beacon node + gloas activation -------------------------

0 commit comments

Comments
 (0)