Skip to content

Commit 08fb16f

Browse files
committed
Fulu changes.
1 parent 903ecc8 commit 08fb16f

7 files changed

Lines changed: 122 additions & 1 deletion

File tree

cmd/block/analyze/process.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,13 @@ func (c *command) analyzeSyncCommittees(_ context.Context, block *spec.Versioned
528528
c.analysis.SyncCommitee.Value = c.analysis.SyncCommitee.Score * float64(c.analysis.SyncCommitee.Contributions)
529529
c.analysis.Value += c.analysis.SyncCommitee.Value
530530
return nil
531+
case spec.DataVersionFulu:
532+
c.analysis.SyncCommitee.Contributions = int(block.Fulu.Message.Body.SyncAggregate.SyncCommitteeBits.Count())
533+
c.analysis.SyncCommitee.PossibleContributions = int(block.Fulu.Message.Body.SyncAggregate.SyncCommitteeBits.Len())
534+
c.analysis.SyncCommitee.Score = float64(c.syncRewardWeight) / float64(c.weightDenominator)
535+
c.analysis.SyncCommitee.Value = c.analysis.SyncCommitee.Score * float64(c.analysis.SyncCommitee.Contributions)
536+
c.analysis.Value += c.analysis.SyncCommitee.Value
537+
return nil
531538
default:
532539
return fmt.Errorf("unsupported block version %d", block.Version)
533540
}

cmd/block/info/process.go

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ func process(ctx context.Context, data *dataIn) (*dataOut, error) {
9090
err = processDenebBlock(ctx, data, block)
9191
case spec.DataVersionElectra:
9292
err = processElectraBlock(ctx, data, block)
93+
case spec.DataVersionFulu:
94+
err = processFuluBlock(ctx, data, block)
9395
default:
9496
return nil, errors.New("unknown block version")
9597
}
@@ -215,6 +217,35 @@ func processElectraBlock(ctx context.Context,
215217
return nil
216218
}
217219

220+
func processFuluBlock(ctx context.Context,
221+
data *dataIn,
222+
block *spec.VersionedSignedBeaconBlock,
223+
) error {
224+
var blobSidecars []*deneb.BlobSidecar
225+
kzgCommitments, err := block.BlobKZGCommitments()
226+
if err != nil {
227+
return err
228+
}
229+
if len(kzgCommitments) > 0 {
230+
blobSidecarsResponse, err := results.eth2Client.(eth2client.BlobSidecarsProvider).BlobSidecars(ctx, &api.BlobSidecarsOpts{
231+
Block: data.blockID,
232+
})
233+
if err != nil {
234+
var apiErr *api.Error
235+
if errors.As(err, &apiErr) && apiErr.StatusCode != http.StatusNotFound {
236+
return errors.Wrap(err, "failed to obtain blob sidecars")
237+
}
238+
} else {
239+
blobSidecars = blobSidecarsResponse.Data
240+
}
241+
}
242+
if err := outputFuluBlock(ctx, data.jsonOutput, data.sszOutput, block.Fulu, blobSidecars); err != nil {
243+
return errors.Wrap(err, "failed to output block")
244+
}
245+
246+
return nil
247+
}
248+
218249
func headEventHandler(ctx context.Context, headEvent *apiv1.HeadEvent) {
219250
blockID := fmt.Sprintf("%#x", headEvent.Block[:])
220251
blockResponse, err := results.eth2Client.(eth2client.SignedBeaconBlockProvider).SignedBeaconBlock(ctx, &api.SignedBeaconBlockOpts{
@@ -263,6 +294,46 @@ func headEventHandler(ctx context.Context, headEvent *apiv1.HeadEvent) {
263294
blobSidecars = blobSidecarsResponse.Data
264295
}
265296
err = outputDenebBlock(context.Background(), jsonOutput, sszOutput, block.Deneb, blobSidecars)
297+
case spec.DataVersionElectra:
298+
var blobSidecars []*deneb.BlobSidecar
299+
var kzgCommitments []deneb.KZGCommitment
300+
kzgCommitments, err = block.BlobKZGCommitments()
301+
if err != nil {
302+
fmt.Fprintf(os.Stderr, "Failed to obtain KZG commitments: %v\n", err)
303+
return
304+
}
305+
if len(kzgCommitments) > 0 {
306+
var blobSidecarsResponse *api.Response[[]*deneb.BlobSidecar]
307+
blobSidecarsResponse, err = results.eth2Client.(eth2client.BlobSidecarsProvider).BlobSidecars(ctx, &api.BlobSidecarsOpts{
308+
Block: blockID,
309+
})
310+
if err != nil {
311+
fmt.Fprintf(os.Stderr, "Failed to obtain blob sidecars: %v\n", err)
312+
return
313+
}
314+
blobSidecars = blobSidecarsResponse.Data
315+
}
316+
err = outputElectraBlock(context.Background(), jsonOutput, sszOutput, block.Electra, blobSidecars)
317+
case spec.DataVersionFulu:
318+
var blobSidecars []*deneb.BlobSidecar
319+
var kzgCommitments []deneb.KZGCommitment
320+
kzgCommitments, err = block.BlobKZGCommitments()
321+
if err != nil {
322+
fmt.Fprintf(os.Stderr, "Failed to obtain KZG commitments: %v\n", err)
323+
return
324+
}
325+
if len(kzgCommitments) > 0 {
326+
var blobSidecarsResponse *api.Response[[]*deneb.BlobSidecar]
327+
blobSidecarsResponse, err = results.eth2Client.(eth2client.BlobSidecarsProvider).BlobSidecars(ctx, &api.BlobSidecarsOpts{
328+
Block: blockID,
329+
})
330+
if err != nil {
331+
fmt.Fprintf(os.Stderr, "Failed to obtain blob sidecars: %v\n", err)
332+
return
333+
}
334+
blobSidecars = blobSidecarsResponse.Data
335+
}
336+
err = outputFuluBlock(context.Background(), jsonOutput, sszOutput, block.Fulu, blobSidecars)
266337
default:
267338
err = errors.New("unknown block version")
268339
}
@@ -424,6 +495,35 @@ func outputElectraBlock(ctx context.Context,
424495
return nil
425496
}
426497

498+
func outputFuluBlock(ctx context.Context,
499+
jsonOutput bool,
500+
sszOutput bool,
501+
signedBlock *electra.SignedBeaconBlock,
502+
blobs []*deneb.BlobSidecar,
503+
) error {
504+
switch {
505+
case jsonOutput:
506+
data, err := json.Marshal(signedBlock)
507+
if err != nil {
508+
return errors.Wrap(err, "failed to generate JSON")
509+
}
510+
fmt.Printf("%s\n", string(data))
511+
case sszOutput:
512+
data, err := signedBlock.MarshalSSZ()
513+
if err != nil {
514+
return errors.Wrap(err, "failed to generate SSZ")
515+
}
516+
fmt.Printf("%x\n", data)
517+
default:
518+
data, err := outputElectraBlockText(ctx, results, signedBlock, blobs)
519+
if err != nil {
520+
return errors.Wrap(err, "failed to generate text")
521+
}
522+
fmt.Print(data)
523+
}
524+
return nil
525+
}
526+
427527
func timeToBlockID(ctx context.Context, eth2Client eth2client.Service, input string) (string, error) {
428528
var timestamp time.Time
429529

cmd/chain/eth1votes/process.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ func (c *command) process(ctx context.Context) error {
100100
case spec.DataVersionElectra:
101101
c.incumbent = state.Electra.ETH1Data
102102
c.eth1DataVotes = state.Electra.ETH1DataVotes
103+
case spec.DataVersionFulu:
104+
c.incumbent = state.Fulu.ETH1Data
105+
c.eth1DataVotes = state.Fulu.ETH1DataVotes
103106
default:
104107
return fmt.Errorf("unhandled beacon state version %v", state.Version)
105108
}

cmd/epoch/summary/process.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,8 @@ func (c *command) processBlobs(ctx context.Context) error {
529529
c.summary.Blobs += len(block.Deneb.Message.Body.BlobKZGCommitments)
530530
case spec.DataVersionElectra:
531531
c.summary.Blobs += len(block.Electra.Message.Body.BlobKZGCommitments)
532+
case spec.DataVersionFulu:
533+
c.summary.Blobs += len(block.Fulu.Message.Body.BlobKZGCommitments)
532534
default:
533535
return fmt.Errorf("unhandled block version %v", block.Version)
534536
}

cmd/synccommittee/inclusion/process.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,13 @@ func (c *command) process(ctx context.Context) error {
127127
} else {
128128
c.inclusions = append(c.inclusions, 2)
129129
}
130+
case spec.DataVersionFulu:
131+
aggregate = block.Fulu.Message.Body.SyncAggregate
132+
if aggregate.SyncCommitteeBits.BitAt(c.committeeIndex) {
133+
c.inclusions = append(c.inclusions, 1)
134+
} else {
135+
c.inclusions = append(c.inclusions, 2)
136+
}
130137
default:
131138
return fmt.Errorf("unhandled block version %v", block.Version)
132139
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ go 1.23.0
55
toolchain go1.23.2
66

77
require (
8-
github.com/attestantio/go-eth2-client v0.26.0
8+
github.com/attestantio/go-eth2-client v0.26.1-0.20250721122214-dc2928832acc
99
github.com/ferranbt/fastssz v0.1.4
1010
github.com/gofrs/uuid v4.4.0+incompatible
1111
github.com/google/uuid v1.6.0

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
github.com/attestantio/go-eth2-client v0.26.0 h1:oDWKvIUJfvr1EBi/w9L6mawYZHOCymjHkml7fZplT20=
22
github.com/attestantio/go-eth2-client v0.26.0/go.mod h1:fvULSL9WtNskkOB4i+Yyr6BKpNHXvmpGZj9969fCrfY=
3+
github.com/attestantio/go-eth2-client v0.26.1-0.20250721122214-dc2928832acc h1:rLrx/o7WeRqmE9iXvhyBMDrugOPZRhNBLQD/4XbG6hU=
4+
github.com/attestantio/go-eth2-client v0.26.1-0.20250721122214-dc2928832acc/go.mod h1:fvULSL9WtNskkOB4i+Yyr6BKpNHXvmpGZj9969fCrfY=
35
github.com/aws/aws-sdk-go v1.55.6 h1:cSg4pvZ3m8dgYcgqB97MrcdjUmZ1BeMYKUxMMB89IPk=
46
github.com/aws/aws-sdk-go v1.55.6/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
57
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=

0 commit comments

Comments
 (0)