Skip to content

Commit 64fac01

Browse files
authored
Merge pull request #352 from attestantio/fulu
Add Fulu support
2 parents e93dab4 + a5a7441 commit 64fac01

File tree

7 files changed

+83
-12
lines changed

7 files changed

+83
-12
lines changed

go.mod

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ go 1.23.0
55
toolchain go1.23.2
66

77
require (
8-
github.com/attestantio/go-block-relay v0.4.4
9-
github.com/attestantio/go-builder-client v0.6.4
10-
github.com/attestantio/go-eth2-client v0.26.0
8+
github.com/attestantio/go-block-relay v0.5.0
9+
github.com/attestantio/go-builder-client v0.7.1
10+
github.com/attestantio/go-eth2-client v0.27.0
1111
github.com/aws/aws-sdk-go v1.55.6
1212
github.com/holiman/uint256 v1.3.2
1313
github.com/mitchellh/go-homedir v1.1.0
@@ -100,6 +100,7 @@ require (
100100
github.com/prometheus/common v0.63.0 // indirect
101101
github.com/prometheus/procfs v0.16.0 // indirect
102102
github.com/r3labs/sse/v2 v2.10.0 // indirect
103+
github.com/rogpeppe/go-internal v1.14.1 // indirect
103104
github.com/sagikazarmark/locafero v0.7.0 // indirect
104105
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
105106
github.com/shibukawa/configdir v0.0.0-20170330084843-e180dbdc8da0 // indirect

go.sum

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,14 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
7474
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
7575
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
7676
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
77-
github.com/attestantio/go-block-relay v0.4.4 h1:GhU8KdwOGA3squVCzFQ5H9G+63/ggmWuKS5M8hTME58=
78-
github.com/attestantio/go-block-relay v0.4.4/go.mod h1:S6OLyaLiLnxI8VRwJLJnDkTn2VdBZ/fSbePBjEfQlFM=
79-
github.com/attestantio/go-builder-client v0.6.4 h1:D0gBdQO4vJLhoFLxdR2TbGdfsWBQZ5YDZBNdU2Ap3uk=
80-
github.com/attestantio/go-builder-client v0.6.4/go.mod h1:f8wi3HzuPxfJoi2PirpJK3yZhte4SavDgKJbRrKoB1Q=
81-
github.com/attestantio/go-eth2-client v0.26.0 h1:oDWKvIUJfvr1EBi/w9L6mawYZHOCymjHkml7fZplT20=
82-
github.com/attestantio/go-eth2-client v0.26.0/go.mod h1:fvULSL9WtNskkOB4i+Yyr6BKpNHXvmpGZj9969fCrfY=
77+
github.com/attestantio/go-block-relay v0.5.0 h1:AOyc6oL5XnShLOTHwLHEpOQ8/Zo0MIfgTs9QwNIMP1w=
78+
github.com/attestantio/go-block-relay v0.5.0/go.mod h1:rVB4n9b0b/k2QN/Mj6DXjlIuUxqVzd4FHgD0Vzq7WDg=
79+
github.com/attestantio/go-builder-client v0.7.0 h1:Kxf5eTKQlU4syv3Uzt8v3vKKm7im1W4CjRAZiPYoqTQ=
80+
github.com/attestantio/go-builder-client v0.7.0/go.mod h1:wGZ0U3QX8/F4lWwieJpqCPgXIl8gbfBxm8iViznrTFQ=
81+
github.com/attestantio/go-builder-client v0.7.1 h1:wKzmfuizxBE6q00Gguk71fHkcudwOcxn/W4uvll36Fo=
82+
github.com/attestantio/go-builder-client v0.7.1/go.mod h1:wGZ0U3QX8/F4lWwieJpqCPgXIl8gbfBxm8iViznrTFQ=
83+
github.com/attestantio/go-eth2-client v0.27.0 h1:zOXtDVnMNRwX6GjpJYgXUNsXckEx76pGRDi76i7xhSI=
84+
github.com/attestantio/go-eth2-client v0.27.0/go.mod h1:fvULSL9WtNskkOB4i+Yyr6BKpNHXvmpGZj9969fCrfY=
8385
github.com/aws/aws-sdk-go v1.44.81/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
8486
github.com/aws/aws-sdk-go v1.55.6 h1:cSg4pvZ3m8dgYcgqB97MrcdjUmZ1BeMYKUxMMB89IPk=
8587
github.com/aws/aws-sdk-go v1.55.6/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
@@ -362,8 +364,8 @@ github.com/r3labs/sse/v2 v2.10.0 h1:hFEkLLFY4LDifoHdiCN/LlGBAdVJYsANaLqNYa1l/v0=
362364
github.com/r3labs/sse/v2 v2.10.0/go.mod h1:Igau6Whc+F17QUgML1fYe1VPZzTV6EMCnYktEmkNJ7I=
363365
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
364366
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
365-
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
366-
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
367+
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
368+
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
367369
github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
368370
github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
369371
github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U=

main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ import (
115115
)
116116

117117
// ReleaseVersion is the release version for the code.
118-
var ReleaseVersion = "1.11.1"
118+
var ReleaseVersion = "1.12.0-beta.1"
119119

120120
func main() {
121121
exitCode := main2()

services/attestationaggregator/standard/service.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,20 @@ func createVersionedAggregateAndProof(duty *attestationaggregator.Duty, aggregat
294294
Electra: aggregateAndProof,
295295
}
296296
return versionedAggregateAndProof, nil
297+
case spec.DataVersionFulu:
298+
if aggregateAttestation.Fulu == nil {
299+
return nil, errors.New("no fulu attestation")
300+
}
301+
aggregateAndProof := &electra.AggregateAndProof{
302+
AggregatorIndex: duty.ValidatorIndex,
303+
Aggregate: aggregateAttestation.Fulu,
304+
SelectionProof: duty.SlotSignature,
305+
}
306+
versionedAggregateAndProof := &spec.VersionedAggregateAndProof{
307+
Version: aggregateAttestation.Version,
308+
Fulu: aggregateAndProof,
309+
}
310+
return versionedAggregateAndProof, nil
297311
default:
298312
return &spec.VersionedAggregateAndProof{}, errors.New("unknown version")
299313
}
@@ -379,6 +393,19 @@ func createVersionedSignedAggregateAndProof(aggregateAndProof *spec.VersionedAgg
379393
Electra: signedAggregateAndProof,
380394
}
381395
return signedVersionedAggregateAndProof, nil
396+
case spec.DataVersionFulu:
397+
if aggregateAndProof.Fulu == nil {
398+
return nil, errors.New("no fulu aggregate and proof")
399+
}
400+
signedAggregateAndProof := &electra.SignedAggregateAndProof{
401+
Message: aggregateAndProof.Fulu,
402+
Signature: sig,
403+
}
404+
signedVersionedAggregateAndProof := &spec.VersionedSignedAggregateAndProof{
405+
Version: aggregateAndProof.Version,
406+
Fulu: signedAggregateAndProof,
407+
}
408+
return signedVersionedAggregateAndProof, nil
382409
default:
383410
return &spec.VersionedSignedAggregateAndProof{}, errors.New("unknown version")
384411
}

services/beaconblockproposer/standard/propose.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
apiv1capella "github.com/attestantio/go-eth2-client/api/v1/capella"
3131
apiv1deneb "github.com/attestantio/go-eth2-client/api/v1/deneb"
3232
apiv1electra "github.com/attestantio/go-eth2-client/api/v1/electra"
33+
apiv1fulu "github.com/attestantio/go-eth2-client/api/v1/fulu"
3334
"github.com/attestantio/go-eth2-client/spec"
3435
"github.com/attestantio/go-eth2-client/spec/altair"
3536
"github.com/attestantio/go-eth2-client/spec/bellatrix"
@@ -229,6 +230,9 @@ func (*Service) confirmProposalData(_ context.Context,
229230
return nil
230231
}
231232

233+
// skipcq: GO-R1005
234+
// Complexity is due to handling all Ethereum protocol versions.
235+
// Each version requires specific signing logic for blinded/unblinded proposals.
232236
func (s *Service) signProposalData(ctx context.Context,
233237
proposal *api.VersionedProposal,
234238
duty *beaconblockproposer.Duty,
@@ -336,6 +340,22 @@ func (s *Service) signProposalData(ctx context.Context,
336340
Blobs: proposal.Electra.Blobs,
337341
}
338342
}
343+
case spec.DataVersionFulu:
344+
if proposal.Blinded {
345+
signedProposal.FuluBlinded = &apiv1electra.SignedBlindedBeaconBlock{
346+
Message: proposal.FuluBlinded,
347+
Signature: sig,
348+
}
349+
} else {
350+
signedProposal.Fulu = &apiv1fulu.SignedBlockContents{
351+
SignedBlock: &electra.SignedBeaconBlock{
352+
Message: proposal.Fulu.Block,
353+
Signature: sig,
354+
},
355+
KZGProofs: proposal.Fulu.KZGProofs,
356+
Blobs: proposal.Fulu.Blobs,
357+
}
358+
}
339359
default:
340360
return nil, errors.New("unhandled proposal version")
341361
}
@@ -369,6 +389,9 @@ func (s *Service) auctionBlock(ctx context.Context,
369389
return auctionResults, nil
370390
}
371391

392+
// skipcq: GO-R1005
393+
// Complexity is due to handling all Ethereum protocol versions.
394+
// Each version requires specific logic to convert blinded to unblinded blocks.
372395
func (s *Service) unblindProposal(ctx context.Context,
373396
proposal *api.VersionedSignedProposal,
374397
providers []builderclient.UnblindedProposalProvider,
@@ -398,6 +421,7 @@ func (s *Service) unblindProposal(ctx context.Context,
398421
Capella: proposal.CapellaBlinded,
399422
Deneb: proposal.DenebBlinded,
400423
Electra: proposal.ElectraBlinded,
424+
Fulu: proposal.FuluBlinded,
401425
},
402426
})
403427

@@ -457,6 +481,9 @@ func (s *Service) unblindProposal(ctx context.Context,
457481
case spec.DataVersionElectra:
458482
proposal.ElectraBlinded = nil
459483
proposal.Electra = signedBlock.Electra
484+
case spec.DataVersionFulu:
485+
proposal.FuluBlinded = nil
486+
proposal.Fulu = signedBlock.Fulu
460487
default:
461488
return fmt.Errorf("unsupported version %v", proposal.Version)
462489
}

services/blockrelay/standard/unblindblock.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ func (s *Service) UnblindBlock(ctx context.Context,
5454
proposal.DenebBlinded = block.Deneb
5555
case spec.DataVersionElectra:
5656
proposal.ElectraBlinded = block.Electra
57+
case spec.DataVersionFulu:
58+
proposal.FuluBlinded = block.Fulu
5759
default:
5860
return nil, fmt.Errorf("unsupported block version %v", block.Version)
5961
}
@@ -158,6 +160,7 @@ func (s *Service) unblindProposal(ctx context.Context,
158160
Capella: proposal.CapellaBlinded,
159161
Deneb: proposal.DenebBlinded,
160162
Electra: proposal.ElectraBlinded,
163+
Fulu: proposal.FuluBlinded,
161164
},
162165
})
163166

@@ -226,6 +229,9 @@ func assignSignedProposal(proposal *api.VersionedSignedProposal, signedProposal
226229
case spec.DataVersionElectra:
227230
proposal.ElectraBlinded = nil
228231
proposal.Electra = signedProposal.Electra
232+
case spec.DataVersionFulu:
233+
proposal.FuluBlinded = nil
234+
proposal.Fulu = signedProposal.Fulu
229235
default:
230236
return fmt.Errorf("unsupported version %v", proposal.Version)
231237
}

services/cache/standard/events.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,14 @@ func (s *Service) updateFromBlock(block *spec.VersionedSignedBeaconBlock) {
8989
s.log.Trace().Uint64("height", executionPayload.BlockNumber).Stringer("hash", executionPayload.BlockHash).Msg("Updating execution chain head")
9090
s.setExecutionChainHead(executionPayload.BlockHash, executionPayload.BlockNumber)
9191
}
92+
case spec.DataVersionFulu:
93+
// Execution information available.
94+
executionPayload := block.Fulu.Message.Body.ExecutionPayload
95+
if executionPayload != nil && !executionPayload.StateRoot.IsZero() {
96+
s.setBlockGasLimit(executionPayload.BlockNumber, executionPayload.GasLimit)
97+
s.log.Trace().Uint64("height", executionPayload.BlockNumber).Stringer("hash", executionPayload.BlockHash).Msg("Updating execution chain head")
98+
s.setExecutionChainHead(executionPayload.BlockHash, executionPayload.BlockNumber)
99+
}
92100
default:
93101
s.log.Error().Msg("Unhandled block version")
94102
}

0 commit comments

Comments
 (0)