Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Commit b12fc2b

Browse files
authored
feat: use finalized next sync committee branch (#23)
1 parent 025a934 commit b12fc2b

File tree

2 files changed

+46
-12
lines changed

2 files changed

+46
-12
lines changed

chains/evm/listener/events/handlers/rotate.go

+15-8
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ import (
1010
apiv1 "github.com/attestantio/go-eth2-client/api/v1"
1111
"github.com/rs/zerolog/log"
1212
evmMessage "github.com/sygmaprotocol/spectre-node/chains/evm/message"
13+
"github.com/sygmaprotocol/spectre-node/chains/evm/prover"
1314
"github.com/sygmaprotocol/sygma-core/relayer/message"
15+
consensus "github.com/umbracle/go-eth-consensus"
1416
)
1517

1618
type SyncCommitteeFetcher interface {
@@ -42,18 +44,23 @@ func NewRotateHandler(msgChan chan []*message.Message, syncCommitteeFetcher Sync
4244
// HandleEvents checks if there is a new sync committee and sends a rotate message
4345
// if there is
4446
func (h *RotateHandler) HandleEvents(checkpoint *apiv1.Finality) error {
45-
sArgs, err := h.prover.StepArgs()
47+
args, err := h.prover.RotateArgs(uint64(checkpoint.Finalized.Epoch))
4648
if err != nil {
4749
return err
4850
}
49-
rArgs, err := h.prover.RotateArgs(uint64(checkpoint.Justified.Epoch))
50-
if err != nil {
51-
return err
51+
sArgs := &prover.StepArgs{
52+
Pubkeys: args.Pubkeys,
53+
Update: &consensus.LightClientFinalityUpdateCapella{
54+
AttestedHeader: args.Update.AttestedHeader,
55+
FinalizedHeader: args.Update.FinalizedHeader,
56+
FinalityBranch: args.Update.FinalityBranch,
57+
SyncAggregate: args.Update.SyncAggregate,
58+
SignatureSlot: args.Update.SignatureSlot,
59+
},
60+
Domain: args.Domain,
61+
Spec: args.Spec,
5262
}
5363

54-
if sArgs.Update.FinalizedHeader.Header.Slot != rArgs.Update.AttestedHeader.Header.Slot {
55-
return nil
56-
}
5764
syncCommittee, err := h.syncCommitteeFetcher.SyncCommittee(context.Background(), &api.SyncCommitteeOpts{
5865
State: "finalized",
5966
})
@@ -66,7 +73,7 @@ func (h *RotateHandler) HandleEvents(checkpoint *apiv1.Finality) error {
6673

6774
log.Info().Uint8("domainID", h.domainID).Msgf("Rotating committee")
6875

69-
rotateProof, err := h.prover.RotateProof(rArgs)
76+
rotateProof, err := h.prover.RotateProof(args)
7077
if err != nil {
7178
return err
7279
}

chains/evm/prover/prover.go

+31-4
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@ type StepArgs struct {
2424
}
2525

2626
type RotateArgs struct {
27-
Spec Spec
28-
Update *consensus.LightClientUpdateCapella
27+
Spec Spec
28+
Update *consensus.LightClientUpdateCapella
29+
Pubkeys [512][48]byte
30+
Domain phase0.Domain
2931
}
3032

3133
type ProverResponse struct {
@@ -134,6 +136,7 @@ func (p *Prover) StepProof(args *StepArgs) (*EvmProof[message.SyncStepInput], er
134136

135137
// RotateProof generates the proof for the sync committee rotation for the period
136138
func (p *Prover) RotateProof(args *RotateArgs) (*EvmProof[message.RotateInput], error) {
139+
args.Update.AttestedHeader = args.Update.FinalizedHeader
137140
syncCommiteeRoot, err := p.pubkeysRoot(args.Update.NextSyncCommittee.PubKeys)
138141
if err != nil {
139142
return nil, err
@@ -216,9 +219,33 @@ func (p *Prover) RotateArgs(epoch uint64) (*RotateArgs, error) {
216219
return nil, fmt.Errorf("missing light client updates")
217220
}
218221
update := updates[0]
222+
223+
finalizedNextSyncCommitteeBranch := make([][32]byte, len(update.NextSyncCommitteeBranch))
224+
blockRoot, err := p.beaconClient.BeaconBlockRoot(context.Background(), &api.BeaconBlockRootOpts{
225+
Block: fmt.Sprint(update.FinalizedHeader.Header.Slot),
226+
})
227+
if err != nil {
228+
return nil, err
229+
}
230+
bootstrap, err := p.lightClient.Bootstrap(blockRoot.Data.String())
231+
if err != nil {
232+
return nil, err
233+
}
234+
235+
copy(finalizedNextSyncCommitteeBranch, bootstrap.CurrentSyncCommitteeBranch)
236+
finalizedNextSyncCommitteeBranch[0] = update.NextSyncCommitteeBranch[0]
237+
update.NextSyncCommitteeBranch = finalizedNextSyncCommitteeBranch
238+
239+
domain, err := p.beaconClient.Domain(context.Background(), SYNC_COMMITTEE_DOMAIN, phase0.Epoch(update.FinalizedHeader.Header.Slot/32))
240+
if err != nil {
241+
return nil, err
242+
}
243+
219244
return &RotateArgs{
220-
Update: update,
221-
Spec: p.spec,
245+
Update: update,
246+
Spec: p.spec,
247+
Pubkeys: bootstrap.CurrentSyncCommittee.PubKeys,
248+
Domain: domain,
222249
}, nil
223250
}
224251

0 commit comments

Comments
 (0)