Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
73be3eb
cl: implement Gloas devnet 8
domiwei Aug 25, 2026
d42060d
.github: use devnet 8 images in Gloas Kurtosis
domiwei Aug 25, 2026
5ad373a
cl: implement Gloas builder beacon APIs
domiwei Aug 25, 2026
1dde80c
cl: align Gloas beacon APIs
domiwei Aug 25, 2026
48307c4
cl: harden Gloas API validation
domiwei Aug 25, 2026
ab2060e
cl: close Gloas API review gaps
domiwei Aug 25, 2026
b247661
cl: serialize Gloas gossip and head events
domiwei Aug 25, 2026
da31cca
cl: roll back failed gossip reservations
domiwei Aug 25, 2026
94fb3ec
cl/beacon: complete Gloas builder API flow
domiwei Aug 25, 2026
206e251
cl/beacon: harden Gloas builder handoff
domiwei Aug 25, 2026
b95b886
cl/beacon: preserve builder handoff lifecycle
domiwei Aug 25, 2026
48be709
cl/beacon: enforce builder bid preferences
domiwei Aug 25, 2026
aaa360f
cl/beacon: cap builder payment valuation
domiwei Aug 25, 2026
0d0864d
cl/beacon: preserve full builder bid value
domiwei Aug 25, 2026
e3ead04
cl/beacon: saturate builder bid selection
domiwei Aug 25, 2026
5c70f63
cl: adapt Gloas tests to state setter errors
domiwei Aug 25, 2026
5b93707
cl, cmd: gate private builder URLs behind flag
domiwei Aug 25, 2026
a57bce6
cl: harden Gloas gossip and beacon APIs
domiwei Aug 26, 2026
7492cfa
cl/beacon: align payload attestation data API
domiwei Aug 26, 2026
2164772
cl: tighten Gloas lifecycle and payload validation
domiwei Aug 26, 2026
f562e88
ci: use minimal Prysm images for Gloas
domiwei Aug 26, 2026
29c6d1e
cl/phase1: isolate event feed progress test
domiwei Aug 26, 2026
efce1a9
cl: fix minimal validator compatibility
domiwei Aug 26, 2026
9eaa21c
cl: fix Gloas event and CI boundaries
domiwei Aug 26, 2026
cd8cbe9
cl/beacon: serve imported blocks before persistence
domiwei Aug 26, 2026
6b8be37
cl/beacon: expose imported headers before persistence
domiwei Aug 26, 2026
279c1c2
cl: address Gloas review findings
domiwei Aug 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions .github/workflows/kurtosis/caplin-minimal-assertoor.io
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,8 @@ participants:
cl_image: test/erigon:current
cl_log_level: "debug"
use_separate_vc: true
vc_type: lighthouse
# Keep lighthouse v7.0.1 here: v8 submits attestations only as Electra
# SingleAttestation, which caplin's pre-Electra pool endpoint rejects on
# this Deneb network (the pinned ethereum-package can't do Electra genesis).
vc_image: sigp/lighthouse:v7.0.1
vc_type: lodestar
vc_image: chainsafe/lodestar:v1.46.0
network_params:
preset: "minimal"
deneb_fork_epoch: 0
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/kurtosis/gloas-caplin-mixed.io
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
participants:
- cl_type: lighthouse
cl_image: ethpandaops/lighthouse:glamsterdam-devnet-7
cl_image: ethpandaops/lighthouse:glamsterdam-devnet-8
el_type: erigon
el_image: test/erigon:current
el_log_level: "debug"
Expand All @@ -10,14 +10,14 @@ participants:
- cl_type: caplin
cl_image: test/erigon:current
cl_log_level: "debug"
cl_extra_params: ["--local-discovery", "--caplin.subscribe-all-topics"]
cl_extra_params: ["--local-discovery", "--caplin.subscribe-all-topics", "--caplin.builder.allow-private-urls"]
el_type: erigon
el_image: test/erigon:current
el_log_level: "debug"
el_extra_params: ["--experimental.bal"]
use_separate_vc: true
vc_type: lighthouse
vc_image: ethpandaops/lighthouse:glamsterdam-devnet-7
vc_image: ethpandaops/lighthouse:glamsterdam-devnet-8
count: 1
global_log_level: 'debug'
network_params:
Expand All @@ -27,7 +27,7 @@ network_params:
fulu_fork_epoch: 0
gloas_fork_epoch: 1
ethereum_genesis_generator_params:
image: ethpandaops/ethereum-genesis-generator:6.1.4
image: ethpandaops/ethereum-genesis-generator:6.2.0
additional_services: [assertoor]
assertoor_params:
run_stability_check: false
Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/kurtosis/gloas-three-cl-mixed.io
Original file line number Diff line number Diff line change
@@ -1,33 +1,33 @@
participants:
- cl_type: lighthouse
cl_image: ethpandaops/lighthouse:glamsterdam-devnet-7
cl_image: ethpandaops/lighthouse:glamsterdam-devnet-8
el_type: erigon
el_image: test/erigon:current
el_log_level: "debug"
el_extra_params: ["--experimental.bal"]
supernode: true
count: 1
- cl_type: prysm
cl_image: ethpandaops/prysm-beacon-chain:glamsterdam-devnet-7-minimal
cl_image: ethpandaops/prysm-beacon-chain:glamsterdam-devnet-8-minimal
el_type: erigon
el_image: test/erigon:current
el_log_level: "debug"
el_extra_params: ["--experimental.bal"]
use_separate_vc: true
vc_type: prysm
vc_image: ethpandaops/prysm-validator:glamsterdam-devnet-7-minimal
vc_image: ethpandaops/prysm-validator:glamsterdam-devnet-8-minimal
count: 1
- cl_type: caplin
cl_image: test/erigon:current
cl_log_level: "debug"
cl_extra_params: ["--local-discovery", "--caplin.subscribe-all-topics"]
cl_extra_params: ["--local-discovery", "--caplin.subscribe-all-topics", "--caplin.builder.allow-private-urls"]
el_type: erigon
el_image: test/erigon:current
el_log_level: "debug"
el_extra_params: ["--experimental.bal"]
use_separate_vc: true
vc_type: lighthouse
vc_image: ethpandaops/lighthouse:glamsterdam-devnet-7
vc_image: ethpandaops/lighthouse:glamsterdam-devnet-8
count: 1
global_log_level: 'debug'
network_params:
Expand All @@ -37,7 +37,7 @@ network_params:
fulu_fork_epoch: 0
gloas_fork_epoch: 1
ethereum_genesis_generator_params:
image: ethpandaops/ethereum-genesis-generator:6.1.4
image: ethpandaops/ethereum-genesis-generator:6.2.0
additional_services: [assertoor]
assertoor_params:
run_stability_check: false
Expand Down
35 changes: 20 additions & 15 deletions .github/workflows/test-kurtosis-assertoor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,8 @@ jobs:
teku=$(yq -e '.participants_matrix.cl[] | select(.cl_type == "teku") | .cl_image' "$reg")
genesis_glamsterdam=$(yq -e '.ethereum_genesis_generator_params.image' "$glamsterdam_io")
spamoor_glamsterdam=$(yq -e '.spamoor_params.image' "$glamsterdam_io")
lighthouse_vc=$(yq -e '.participants[] | select(.vc_type == "lighthouse") | .vc_image' "$caplin_io")
pectra_lighthouse=$(yq -e '.participants_matrix.cl[] | select(.cl_type == "lighthouse") | .cl_image' "$pectra_io")
minimal_vc=$(yq -e '.participants[] | select(.use_separate_vc == true) | .vc_image' "$caplin_io")
# pectra's clients and caplin-minimal's assertoor are warmed under the tag
# another suite pins. Bumping one alone leaves it out of the cache, which
# is a slow path rather than a failure: warn, and hand the tag to the
Expand All @@ -239,8 +240,6 @@ jobs:
}
check_warmed "$pectra_io" \
"$(yq -e '.participants_matrix.cl[] | select(.cl_type == "teku") | .cl_image' "$pectra_io")" "$teku"
check_warmed "$pectra_io" \
"$(yq -e '.participants_matrix.cl[] | select(.cl_type == "lighthouse") | .cl_image' "$pectra_io")" "$lighthouse_vc"
check_warmed "$caplin_io" "$(yq -e '.assertoor_params.image' "$caplin_io")" "$assertoor"
echo "UNCACHED_IMAGES=${uncached# }" >> "$GITHUB_ENV"
{
Expand All @@ -251,13 +250,14 @@ jobs:
echo "TEKU_IMAGE=$teku"
echo "GLAMSTERDAM_GENESIS_GENERATOR_IMAGE=$genesis_glamsterdam"
echo "GLAMSTERDAM_SPAMOOR_IMAGE=$spamoor_glamsterdam"
echo "LIGHTHOUSE_VC_IMAGE=$lighthouse_vc"
echo "PECTRA_LIGHTHOUSE_IMAGE=$pectra_lighthouse"
echo "MINIMAL_VC_IMAGE=$minimal_vc"
} >> "$GITHUB_ENV"
# Every cached tag stays spelled out in the cache key so a glance at the
# Actions cache list shows what a key holds. Only the registry/org prefix
# is dropped, which keeps the key clear of actions/cache's 512-char cap.
key=docker-cl
for image in "$lighthouse" "$lighthouse_vc" "$teku" "$assertoor" \
for image in "$lighthouse" "$pectra_lighthouse" "$minimal_vc" "$teku" "$assertoor" \
"kurtosis:$KURTOSIS_VERSION" "$KURTOSIS_VECTOR_IMAGE" "$KURTOSIS_FLUENTBIT_IMAGE" \
"$KURTOSIS_CURL_JQ_IMAGE" "$KURTOSIS_TRAEFIK_IMAGE" "$KURTOSIS_ALPINE_IMAGE" \
"$ETH2_VAL_TOOLS_IMAGE" "$KURTOSIS_SNOOPER_IMAGE" "$pectra" "$glamsterdam" \
Expand Down Expand Up @@ -290,7 +290,8 @@ jobs:
return 1
}
pull "${LIGHTHOUSE_IMAGE}"
pull "${LIGHTHOUSE_VC_IMAGE}"
pull "${PECTRA_LIGHTHOUSE_IMAGE}"
pull "${MINIMAL_VC_IMAGE}"
pull "${TEKU_IMAGE}"
pull "${ASSERTOOR_IMAGE}"
pull "${ASSERTOOR_PECTRA_IMAGE}"
Expand All @@ -311,7 +312,8 @@ jobs:
pull "${KURTOSIS_SNOOPER_IMAGE}"
pull "${KURTOSIS_PYTHON_IMAGE}"
docker save "${LIGHTHOUSE_IMAGE}" -o /tmp/docker-cache/lighthouse.tar
docker save "${LIGHTHOUSE_VC_IMAGE}" -o /tmp/docker-cache/lighthouse-vc.tar
docker save "${PECTRA_LIGHTHOUSE_IMAGE}" -o /tmp/docker-cache/pectra-lighthouse.tar
docker save "${MINIMAL_VC_IMAGE}" -o /tmp/docker-cache/minimal-vc.tar
docker save "${TEKU_IMAGE}" -o /tmp/docker-cache/teku.tar
docker save "${ASSERTOOR_IMAGE}" -o /tmp/docker-cache/assertoor.tar
docker save "${ASSERTOOR_PECTRA_IMAGE}" -o /tmp/docker-cache/assertoor-pectra.tar
Expand Down Expand Up @@ -481,7 +483,8 @@ jobs:
teku=$(yq -e '.participants_matrix.cl[] | select(.cl_type == "teku") | .cl_image' "$reg")
genesis_glamsterdam=$(yq -e '.ethereum_genesis_generator_params.image' "$glamsterdam_io")
spamoor_glamsterdam=$(yq -e '.spamoor_params.image' "$glamsterdam_io")
lighthouse_vc=$(yq -e '.participants[] | select(.vc_type == "lighthouse") | .vc_image' "$caplin_io")
pectra_lighthouse=$(yq -e '.participants_matrix.cl[] | select(.cl_type == "lighthouse") | .cl_image' "$pectra_io")
minimal_vc=$(yq -e '.participants[] | select(.use_separate_vc == true) | .vc_image' "$caplin_io")
# pectra's clients and caplin-minimal's assertoor are warmed under the tag
# another suite pins. Bumping one alone leaves it out of the cache, which
# is a slow path rather than a failure: warn, and hand the tag to the
Expand All @@ -495,8 +498,6 @@ jobs:
}
check_warmed "$pectra_io" \
"$(yq -e '.participants_matrix.cl[] | select(.cl_type == "teku") | .cl_image' "$pectra_io")" "$teku"
check_warmed "$pectra_io" \
"$(yq -e '.participants_matrix.cl[] | select(.cl_type == "lighthouse") | .cl_image' "$pectra_io")" "$lighthouse_vc"
check_warmed "$caplin_io" "$(yq -e '.assertoor_params.image' "$caplin_io")" "$assertoor"
echo "UNCACHED_IMAGES=${uncached# }" >> "$GITHUB_ENV"
{
Expand All @@ -507,13 +508,14 @@ jobs:
echo "TEKU_IMAGE=$teku"
echo "GLAMSTERDAM_GENESIS_GENERATOR_IMAGE=$genesis_glamsterdam"
echo "GLAMSTERDAM_SPAMOOR_IMAGE=$spamoor_glamsterdam"
echo "LIGHTHOUSE_VC_IMAGE=$lighthouse_vc"
echo "PECTRA_LIGHTHOUSE_IMAGE=$pectra_lighthouse"
echo "MINIMAL_VC_IMAGE=$minimal_vc"
} >> "$GITHUB_ENV"
# Every cached tag stays spelled out in the cache key so a glance at the
# Actions cache list shows what a key holds. Only the registry/org prefix
# is dropped, which keeps the key clear of actions/cache's 512-char cap.
key=docker-cl
for image in "$lighthouse" "$lighthouse_vc" "$teku" "$assertoor" \
for image in "$lighthouse" "$pectra_lighthouse" "$minimal_vc" "$teku" "$assertoor" \
"kurtosis:$KURTOSIS_VERSION" "$KURTOSIS_VECTOR_IMAGE" "$KURTOSIS_FLUENTBIT_IMAGE" \
"$KURTOSIS_CURL_JQ_IMAGE" "$KURTOSIS_TRAEFIK_IMAGE" "$KURTOSIS_ALPINE_IMAGE" \
"$ETH2_VAL_TOOLS_IMAGE" "$KURTOSIS_SNOOPER_IMAGE" "$pectra" "$glamsterdam" \
Expand All @@ -536,7 +538,8 @@ jobs:
if: steps.cache-cl-images.outputs.cache-hit == 'true'
run: |
docker load -i /tmp/docker-cache/lighthouse.tar
docker load -i /tmp/docker-cache/lighthouse-vc.tar
docker load -i /tmp/docker-cache/pectra-lighthouse.tar
docker load -i /tmp/docker-cache/minimal-vc.tar
docker load -i /tmp/docker-cache/teku.tar
docker load -i /tmp/docker-cache/assertoor.tar
docker load -i /tmp/docker-cache/assertoor-pectra.tar
Expand Down Expand Up @@ -570,7 +573,8 @@ jobs:
return 1
}
pull "${LIGHTHOUSE_IMAGE}"
pull "${LIGHTHOUSE_VC_IMAGE}"
pull "${PECTRA_LIGHTHOUSE_IMAGE}"
pull "${MINIMAL_VC_IMAGE}"
pull "${TEKU_IMAGE}"
pull "${ASSERTOOR_IMAGE}"
pull "${ASSERTOOR_PECTRA_IMAGE}"
Expand All @@ -591,7 +595,8 @@ jobs:
pull "${KURTOSIS_SNOOPER_IMAGE}"
pull "${KURTOSIS_PYTHON_IMAGE}"
docker save "${LIGHTHOUSE_IMAGE}" -o /tmp/docker-cache/lighthouse.tar
docker save "${LIGHTHOUSE_VC_IMAGE}" -o /tmp/docker-cache/lighthouse-vc.tar
docker save "${PECTRA_LIGHTHOUSE_IMAGE}" -o /tmp/docker-cache/pectra-lighthouse.tar
docker save "${MINIMAL_VC_IMAGE}" -o /tmp/docker-cache/minimal-vc.tar
docker save "${TEKU_IMAGE}" -o /tmp/docker-cache/teku.tar
docker save "${ASSERTOOR_IMAGE}" -o /tmp/docker-cache/assertoor.tar
docker save "${ASSERTOOR_PECTRA_IMAGE}" -o /tmp/docker-cache/assertoor-pectra.tar
Expand Down
2 changes: 1 addition & 1 deletion cl/abstract/beacon_state.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ type BeaconStateExtension interface {
BaseReward(index uint64) (uint64, error)
SyncRewards() (proposerReward, participantReward uint64, err error)
CommitteeCount(epoch uint64) uint64
GetAttestationParticipationFlagIndicies(data *solid.AttestationData, inclusionDelay uint64, skipAssert bool) ([]uint8, error)
GetAttestationParticipationFlagIndicies(data *solid.AttestationData, inclusionDelay, parentSlot uint64, skipAssert bool) ([]uint8, error)
GetBeaconCommitee(slot, committeeIndex uint64) ([]uint64, error)
ComputeNextSyncCommittee() (*solid.SyncCommittee, error)
GetAttestingIndicies(attestation *solid.Attestation, checkBitsLength bool) ([]uint64, error)
Expand Down
12 changes: 6 additions & 6 deletions cl/abstract/mock_services/beacon_state_mock.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions cl/beacon/beaconevents/event_notifier.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
package beaconevents

import "sync"

type EventEmitter struct {
stateFeed *stateFeed // block state feed
operationFeed *operationFeed // block operation feed
headEventMu sync.Mutex
}

func (e *EventEmitter) WithHeadEventLock(fn func()) {
e.headEventMu.Lock()
defer e.headEventMu.Unlock()
fn()
}

func NewEventEmitter() *EventEmitter {
Expand Down
Loading
Loading