diff --git a/go.mod b/go.mod index 90a2212a..a0cfc9cc 100644 --- a/go.mod +++ b/go.mod @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 diff --git a/go.sum b/go.sum index 3f06fe96..7292b563 100644 --- a/go.sum +++ b/go.sum @@ -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= @@ -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= @@ -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= @@ -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= @@ -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= diff --git a/pkg/clients/clients.go b/pkg/clients/clients.go index fabc5147..ab565b39 100644 --- a/pkg/clients/clients.go +++ b/pkg/clients/clients.go @@ -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" ) @@ -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) } diff --git a/pkg/clients/consensus/block.go b/pkg/clients/consensus/block.go index 8550fa0d..068026e8 100644 --- a/pkg/clients/consensus/block.go +++ b/pkg/clients/consensus/block.go @@ -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" ) @@ -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 } @@ -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() } @@ -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 } diff --git a/pkg/clients/consensus/block_utils.go b/pkg/clients/consensus/block_utils.go index dab4aab1..5700380a 100644 --- a/pkg/clients/consensus/block_utils.go +++ b/pkg/clients/consensus/block_utils.go @@ -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 { @@ -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 diff --git a/pkg/clients/consensus/clientlogic.go b/pkg/clients/consensus/clientlogic.go index a960a677..e17354f3 100644 --- a/pkg/clients/consensus/clientlogic.go +++ b/pkg/clients/consensus/clientlogic.go @@ -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" ) @@ -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() @@ -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() diff --git a/pkg/clients/consensus/rpc/beaconapi.go b/pkg/clients/consensus/rpc/beaconapi.go index c490605a..d85289e4 100644 --- a/pkg/clients/consensus/rpc/beaconapi.go +++ b/pkg/clients/consensus/rpc/beaconapi.go @@ -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" @@ -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") diff --git a/pkg/tasks/check_consensus_block_proposals/task.go b/pkg/tasks/check_consensus_block_proposals/task.go index e884e6f4..5f810e9a 100644 --- a/pkg/tasks/check_consensus_block_proposals/task.go +++ b/pkg/tasks/check_consensus_block_proposals/task.go @@ -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 diff --git a/pkg/tasks/generate_deposits/task.go b/pkg/tasks/generate_deposits/task.go index d57691e4..bd6aa185 100644 --- a/pkg/tasks/generate_deposits/task.go +++ b/pkg/tasks/generate_deposits/task.go @@ -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++ + } } } }