Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
8 changes: 3 additions & 5 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ require (
github.com/donovanhide/eventsource v0.0.0-20210830082556-c59027999da0
github.com/ethereum/go-ethereum v1.17.3-0.20260421080339-499762852cf2
github.com/ethpandaops/ethwallclock v0.4.0
github.com/ethpandaops/go-eth2-client v0.1.1
github.com/ethpandaops/go-eth2-client v0.1.2
github.com/ethpandaops/spamoor v1.1.18-0.20260428200401-f2423b8e80fb
github.com/glebarez/go-sqlite v1.22.0
github.com/golang-jwt/jwt/v5 v5.3.1
Expand Down Expand Up @@ -57,7 +57,6 @@ require (
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/emicklei/dot v1.6.4 // indirect
github.com/ethereum/c-kzg-4844/v2 v2.1.6 // indirect
github.com/fatih/color v1.16.0 // indirect
github.com/ferranbt/fastssz v0.1.4 // indirect
github.com/fjl/geas v0.3.1 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
Expand All @@ -68,7 +67,7 @@ require (
github.com/go-openapi/jsonreference v0.21.0 // indirect
github.com/go-openapi/spec v0.21.0 // indirect
github.com/go-openapi/swag v0.23.1 // indirect
github.com/goccy/go-yaml v1.11.3 // indirect
github.com/goccy/go-yaml v1.19.2 // indirect
github.com/gorilla/websocket v1.5.3 // indirect
github.com/huandu/go-clone v1.7.2 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
Expand All @@ -84,7 +83,7 @@ require (
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/ncruces/go-strftime v1.0.0 // indirect
github.com/pk910/dynamic-ssz v1.3.1 // indirect
github.com/pk910/dynamic-ssz v1.3.2-0.20260505131440-111bcb265c8f // indirect
github.com/pk910/hashtree-bindings v0.1.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/prometheus/client_model v0.6.2 // indirect
Expand Down Expand Up @@ -115,7 +114,6 @@ require (
golang.org/x/sys v0.43.0 // indirect
golang.org/x/time v0.15.0 // indirect
golang.org/x/tools v0.44.0 // indirect
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
google.golang.org/protobuf v1.36.11 // indirect
gopkg.in/cenkalti/backoff.v1 v1.1.0 // indirect
modernc.org/libc v1.72.1 // indirect
Expand Down
24 changes: 6 additions & 18 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,10 @@ github.com/ethereum/go-ethereum v1.17.3-0.20260421080339-499762852cf2 h1:PPbNu5N
github.com/ethereum/go-ethereum v1.17.3-0.20260421080339-499762852cf2/go.mod h1:KHcRXfGOUfUmKg51IhQ0IowiqZ6PqZf08CMtk0g5K1o=
github.com/ethpandaops/ethwallclock v0.4.0 h1:+sgnhf4pk6hLPukP076VxkiLloE4L0Yk1yat+ZyHh1g=
github.com/ethpandaops/ethwallclock v0.4.0/go.mod h1:y0Cu+mhGLlem19vnAV2x0hpFS5KZ7oOi2SWYayv9l24=
github.com/ethpandaops/go-eth2-client v0.1.1 h1:+uaGtPiyjp8sb2K9cjeZpbHrRCu6yjHtlx4J8+bbA8U=
github.com/ethpandaops/go-eth2-client v0.1.1/go.mod h1:qoj9ZVKydI99IuIyWt4EvGq4rGgMYfOy6q8zTtwYdy4=
github.com/ethpandaops/go-eth2-client v0.1.2 h1:nJr0YBmqHtbVeLeWEDyXwjCEO0AFt1Z0lIciMYlowfU=
github.com/ethpandaops/go-eth2-client v0.1.2/go.mod h1:U3KdR8QSq8vqs9LWSGAF4ETHJpcB62E1DFf0gVMgWv0=
github.com/ethpandaops/spamoor v1.1.18-0.20260428200401-f2423b8e80fb h1:YwA+7Y6rYlVwHVWMJovW43qPW8vPbazJKqDHjUiawEM=
github.com/ethpandaops/spamoor v1.1.18-0.20260428200401-f2423b8e80fb/go.mod h1:AGTwB+kRoBFF6gMn9mKDzA6Ai0qV5qfaNY6rIIvtNOU=
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
github.com/ferranbt/fastssz v0.1.4 h1:OCDB+dYDEQDvAgtAGnTSidK1Pe2tW3nFV40XyMkTeDY=
github.com/ferranbt/fastssz v0.1.4/go.mod h1:Ea3+oeoRGGLGm5shYAeDgu6PGUlcvQhE2fILyD9+tGg=
github.com/fjl/geas v0.3.1 h1:FLiv/vqgq+Qkq8Acc3bAmNq77oi1AATz3eFJlanmIjw=
Expand Down Expand Up @@ -109,17 +107,11 @@ github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9Z
github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk=
github.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU=
github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo=
github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
github.com/goccy/go-yaml v1.11.3 h1:B3W9IdWbvrUu2OYQGwvU1nZtvMQJPBKgBUuweJjLj6I=
github.com/goccy/go-yaml v1.11.3/go.mod h1:wKnAMd44+9JAAnGQpWVEgBzGt3YuTaQ4uXoHvE4m7WU=
github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM=
github.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA=
github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E=
github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
Expand Down Expand Up @@ -208,8 +200,6 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/leanovate/gopter v0.2.11 h1:vRjThO1EKPb/1NsDXuDrzldR28RLkBflWYcU9CvzWu4=
github.com/leanovate/gopter v0.2.11/go.mod h1:aK3tzZP/C+p1m3SPRE4SYZFGP7jjkuSI4f7Xvpt0S9c=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/lib/pq v1.12.3 h1:tTWxr2YLKwIvK90ZXEw8GP7UFHtcbTtty8zsI+YjrfQ=
github.com/lib/pq v1.12.3/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA=
Expand Down Expand Up @@ -251,8 +241,8 @@ github.com/pion/transport/v2 v2.2.1 h1:7qYnCBlpgSJNYMbLCKuSY9KbQdBFoETvPNETv0y4N
github.com/pion/transport/v2 v2.2.1/go.mod h1:cXXWavvCnFF6McHTft3DWS9iic2Mftcz1Aq29pGcU5g=
github.com/pion/transport/v3 v3.0.1 h1:gDTlPJwROfSfz6QfSi0ZmeCSkFcnWWiiR9ES0ouANiM=
github.com/pion/transport/v3 v3.0.1/go.mod h1:UY7kiITrlMv7/IKgd5eTUcaahZx5oUN3l9SzK5f5xE0=
github.com/pk910/dynamic-ssz v1.3.1 h1:S/no7kRA5FSORmfybG4Cs49CjPgP94fePKPxt8uKkdI=
github.com/pk910/dynamic-ssz v1.3.1/go.mod h1:ARK5qDyrJ/MHpaZHGJYvCKElvaMYTE9pXOQbvPDeE0U=
github.com/pk910/dynamic-ssz v1.3.2-0.20260505131440-111bcb265c8f h1:k1Dn2h+msg+T0c25hoiJ739ckCNt1dqKErLylois7ss=
github.com/pk910/dynamic-ssz v1.3.2-0.20260505131440-111bcb265c8f/go.mod h1:ARK5qDyrJ/MHpaZHGJYvCKElvaMYTE9pXOQbvPDeE0U=
github.com/pk910/hashtree-bindings v0.1.0 h1:w7NyRWFi2OaYEFvo9ADcE/QU6PMuVLl3hBgx92KiH9c=
github.com/pk910/hashtree-bindings v0.1.0/go.mod h1:zrWt88783JmhBfcgni6kkIMYRdXTZi/FL//OyI5T/l4=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
Expand Down Expand Up @@ -408,8 +398,6 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c=
golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/cenkalti/backoff.v1 v1.1.0 h1:Arh75ttbsvlpVA7WtVpH4u9h6Zl46xuptxqLxPiSo4Y=
Expand Down
18 changes: 15 additions & 3 deletions pkg/clients/clients.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"github.com/ethpandaops/assertoor/pkg/clients/execution"
"github.com/ethpandaops/assertoor/pkg/events"
"github.com/ethpandaops/go-eth2-client/spec"
"github.com/ethpandaops/go-eth2-client/spec/gloas"
"github.com/sirupsen/logrus"
)

Expand Down Expand Up @@ -171,12 +172,23 @@ func (pool *ClientPool) notifyELBlockFromBeaconBlock(poolClient *PoolClient, blo

func (pool *ClientPool) notifyELBlockFromPayload(poolClient *PoolClient, block *consensus.Block) {
payload := block.GetPayload()
if payload == nil || payload.Message == nil || payload.Message.Payload == nil {
if payload == nil {
return
}

hash := common.Hash(payload.Message.Payload.BlockHash)
number := payload.Message.Payload.BlockNumber
var payloadData *gloas.SignedExecutionPayloadEnvelope

switch payload.Version {
case spec.DataVersionGloas, spec.DataVersionHeze:
payloadData = payload.Gloas
}

if payloadData == nil {
return
}

hash := common.Hash(payloadData.Message.Payload.BlockHash)
number := payloadData.Message.Payload.BlockNumber

poolClient.ExecutionClient.NotifyNewBlock(hash, number)
}
Expand Down
9 changes: 4 additions & 5 deletions pkg/clients/consensus/block.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"time"

"github.com/ethpandaops/go-eth2-client/spec"
"github.com/ethpandaops/go-eth2-client/spec/gloas"
"github.com/ethpandaops/go-eth2-client/spec/phase0"
)

Expand All @@ -22,7 +21,7 @@ type Block struct {
block *spec.VersionedSignedBeaconBlock
payloadMutex sync.Mutex
payloadChan chan bool
payload *gloas.SignedExecutionPayloadEnvelope
payload *spec.VersionedSignedExecutionPayloadEnvelope
seenMutex sync.RWMutex
seenMap map[uint16]*Client
}
Expand Down Expand Up @@ -154,12 +153,12 @@ func (block *Block) EnsureBlock(loadBlock func() (*spec.VersionedSignedBeaconBlo
}

// GetPayload returns the execution payload envelope if available.
func (block *Block) GetPayload() *gloas.SignedExecutionPayloadEnvelope {
func (block *Block) GetPayload() *spec.VersionedSignedExecutionPayloadEnvelope {
return block.payload
}

// AwaitPayload waits for the execution payload envelope to become available.
func (block *Block) AwaitPayload(ctx context.Context, timeout time.Duration) *gloas.SignedExecutionPayloadEnvelope {
func (block *Block) AwaitPayload(ctx context.Context, timeout time.Duration) *spec.VersionedSignedExecutionPayloadEnvelope {
if ctx == nil {
ctx = context.Background()
}
Expand All @@ -174,7 +173,7 @@ func (block *Block) AwaitPayload(ctx context.Context, timeout time.Duration) *gl
}

// EnsurePayload loads and sets the execution payload envelope if not already set.
func (block *Block) EnsurePayload(loadPayload func() (*gloas.SignedExecutionPayloadEnvelope, error)) (bool, error) {
func (block *Block) EnsurePayload(loadPayload func() (*spec.VersionedSignedExecutionPayloadEnvelope, error)) (bool, error) {
if block.payload != nil {
return false, nil
}
Expand Down
2 changes: 0 additions & 2 deletions pkg/clients/consensus/block_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (
)

func GetExecutionExtraData(v *spec.VersionedSignedBeaconBlock) ([]byte, error) {
//nolint:exhaustive // ignore
switch v.Version {
case spec.DataVersionBellatrix:
if v.Bellatrix == nil || v.Bellatrix.Message == nil || v.Bellatrix.Message.Body == nil || v.Bellatrix.Message.Body.ExecutionPayload == nil {
Expand Down Expand Up @@ -57,7 +56,6 @@ func GetPayloadExtraData(payload *gloas.SignedExecutionPayloadEnvelope) ([]byte,
}

func GetBlockBody(v *spec.VersionedSignedBeaconBlock) any {
//nolint:exhaustive // ignore
switch v.Version {
case spec.DataVersionPhase0:
return v.Phase0
Expand Down
5 changes: 2 additions & 3 deletions pkg/clients/consensus/clientlogic.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import (
"github.com/ethpandaops/assertoor/pkg/clients/consensus/rpc"
v1 "github.com/ethpandaops/go-eth2-client/api/v1"
"github.com/ethpandaops/go-eth2-client/spec"
"github.com/ethpandaops/go-eth2-client/spec/gloas"
"github.com/ethpandaops/go-eth2-client/spec/phase0"
)

Expand Down Expand Up @@ -236,7 +235,7 @@ func (client *Client) processPayloadEvent(evt *v1.ExecutionPayloadAvailableEvent
return nil
}

loaded, err := cachedBlock.EnsurePayload(func() (*gloas.SignedExecutionPayloadEnvelope, error) {
loaded, err := cachedBlock.EnsurePayload(func() (*spec.VersionedSignedExecutionPayloadEnvelope, error) {
ctx, cancel := context.WithTimeout(client.clientCtx, 10*time.Second)
defer cancel()

Expand Down Expand Up @@ -361,7 +360,7 @@ func (client *Client) processBlock(root phase0.Root, slot phase0.Slot, header *p
}

func (client *Client) loadBlockPayload(cachedBlock *Block) {
loaded, err := cachedBlock.EnsurePayload(func() (*gloas.SignedExecutionPayloadEnvelope, error) {
loaded, err := cachedBlock.EnsurePayload(func() (*spec.VersionedSignedExecutionPayloadEnvelope, error) {
ctx, cancel := context.WithTimeout(client.clientCtx, 10*time.Second)
defer cancel()

Expand Down
3 changes: 1 addition & 2 deletions pkg/clients/consensus/rpc/beaconapi.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import (
"github.com/ethpandaops/go-eth2-client/http"
"github.com/ethpandaops/go-eth2-client/spec"
"github.com/ethpandaops/go-eth2-client/spec/capella"
"github.com/ethpandaops/go-eth2-client/spec/gloas"
"github.com/ethpandaops/go-eth2-client/spec/phase0"
"github.com/rs/zerolog"
"github.com/sirupsen/logrus"
Expand Down Expand Up @@ -339,7 +338,7 @@ func (bc *BeaconClient) GetBlockHeaderBySlot(ctx context.Context, slot phase0.Sl
return result.Data, nil
}

func (bc *BeaconClient) GetExecutionPayloadByBlockroot(ctx context.Context, blockroot phase0.Root) (*gloas.SignedExecutionPayloadEnvelope, error) {
func (bc *BeaconClient) GetExecutionPayloadByBlockroot(ctx context.Context, blockroot phase0.Root) (*spec.VersionedSignedExecutionPayloadEnvelope, error) {
provider, isProvider := bc.clientSvc.(eth2client.ExecutionPayloadProvider)
if !isProvider {
return nil, fmt.Errorf("get execution payload not supported")
Expand Down
6 changes: 4 additions & 2 deletions pkg/tasks/check_consensus_block_proposals/task.go
Original file line number Diff line number Diff line change
Expand Up @@ -253,11 +253,13 @@ func (t *Task) checkBlock(ctx context.Context, block *consensus.Block) bool {

isGloas := blockData.Version >= spec.DataVersionGloas
if isGloas && t.needsPayload() {
payload = block.AwaitPayload(ctx, t.getPayloadTimeout())
if payload == nil {
payloadEnvelope := block.AwaitPayload(ctx, t.getPayloadTimeout())
if payloadEnvelope == nil {
t.logger.Warnf("could not fetch payload for gloas block %v [0x%x]", block.Slot, block.Root)
return false
}

payload = payloadEnvelope.Gloas
}

// check validator name
Expand Down
16 changes: 10 additions & 6 deletions pkg/tasks/generate_deposits/task.go
Original file line number Diff line number Diff line change
Expand Up @@ -386,13 +386,17 @@ func (t *Task) awaitInclusion(ctx context.Context, blockSubscription *consensus.
if blockData.Version >= spec.DataVersionGloas {
// GLOAS: execution requests are in the separate payload envelope
payload := block.AwaitPayload(ctx, 2*time.Second)
if payload != nil && payload.Message != nil && payload.Message.ExecutionRequests != nil {
for _, depositReq := range payload.Message.ExecutionRequests.Deposits {
pubkeyStr := depositReq.Pubkey.String()
if pendingPubkeys[pubkeyStr] {
delete(pendingPubkeys, pubkeyStr)

includedCount++
if payload != nil {
payloadData := payload.Gloas
if payloadData != nil && payloadData.Message.ExecutionRequests != nil {
for _, depositReq := range payloadData.Message.ExecutionRequests.Deposits {
pubkeyStr := depositReq.Pubkey.String()
if pendingPubkeys[pubkeyStr] {
delete(pendingPubkeys, pubkeyStr)

includedCount++
}
}
}
}
Expand Down
Loading