Skip to content

Commit 92cf0bc

Browse files
authored
Use forkchoice dependent root helper (#15137)
1 parent 9a79f49 commit 92cf0bc

File tree

3 files changed

+28
-30
lines changed

3 files changed

+28
-30
lines changed

beacon-chain/blockchain/head.go

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"github.com/pkg/errors"
99
"github.com/prysmaticlabs/prysm/v5/beacon-chain/core/feed"
1010
statefeed "github.com/prysmaticlabs/prysm/v5/beacon-chain/core/feed/state"
11-
"github.com/prysmaticlabs/prysm/v5/beacon-chain/core/helpers"
1211
"github.com/prysmaticlabs/prysm/v5/beacon-chain/forkchoice"
1312
"github.com/prysmaticlabs/prysm/v5/beacon-chain/state"
1413
"github.com/prysmaticlabs/prysm/v5/config/features"
@@ -328,34 +327,22 @@ func (s *Service) notifyNewHeadEvent(
328327
newHeadStateRoot,
329328
newHeadRoot []byte,
330329
) error {
331-
previousDutyDependentRoot := s.originBlockRoot[:]
332-
currentDutyDependentRoot := s.originBlockRoot[:]
333-
334-
var previousDutyEpoch primitives.Epoch
335-
currentDutyEpoch := slots.ToEpoch(newHeadSlot)
336-
if currentDutyEpoch > 0 {
337-
previousDutyEpoch = currentDutyEpoch.Sub(1)
338-
}
339-
currentDutySlot, err := slots.EpochStart(currentDutyEpoch)
340-
if err != nil {
341-
return errors.Wrap(err, "could not get duty slot")
342-
}
343-
previousDutySlot, err := slots.EpochStart(previousDutyEpoch)
330+
currEpoch := slots.ToEpoch(newHeadSlot)
331+
currentDutyDependentRoot, err := s.DependentRoot(currEpoch)
344332
if err != nil {
345-
return errors.Wrap(err, "could not get duty slot")
333+
return errors.Wrap(err, "could not get duty dependent root")
346334
}
347-
if currentDutySlot > 0 {
348-
currentDutyDependentRoot, err = helpers.BlockRootAtSlot(newHeadState, currentDutySlot-1)
349-
if err != nil {
350-
return errors.Wrap(err, "could not get duty dependent root")
351-
}
335+
if currentDutyDependentRoot == [32]byte{} {
336+
currentDutyDependentRoot = s.originBlockRoot
352337
}
353-
if previousDutySlot > 0 {
354-
previousDutyDependentRoot, err = helpers.BlockRootAtSlot(newHeadState, previousDutySlot-1)
338+
previousDutyDependentRoot := currentDutyDependentRoot
339+
if currEpoch > 0 {
340+
previousDutyDependentRoot, err = s.DependentRoot(currEpoch.Sub(1))
355341
if err != nil {
356342
return errors.Wrap(err, "could not get duty dependent root")
357343
}
358344
}
345+
359346
isOptimistic, err := s.IsOptimistic(ctx)
360347
if err != nil {
361348
return errors.Wrap(err, "could not check if node is optimistically synced")
@@ -367,8 +354,8 @@ func (s *Service) notifyNewHeadEvent(
367354
Block: newHeadRoot,
368355
State: newHeadStateRoot,
369356
EpochTransition: slots.IsEpochStart(newHeadSlot),
370-
PreviousDutyDependentRoot: previousDutyDependentRoot,
371-
CurrentDutyDependentRoot: currentDutyDependentRoot,
357+
PreviousDutyDependentRoot: previousDutyDependentRoot[:],
358+
CurrentDutyDependentRoot: currentDutyDependentRoot[:],
372359
ExecutionOptimistic: isOptimistic,
373360
},
374361
})

beacon-chain/blockchain/head_test.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
mock "github.com/prysmaticlabs/prysm/v5/beacon-chain/blockchain/testing"
1111
testDB "github.com/prysmaticlabs/prysm/v5/beacon-chain/db/testing"
12+
doublylinkedtree "github.com/prysmaticlabs/prysm/v5/beacon-chain/forkchoice/doubly-linked-tree"
1213
forkchoicetypes "github.com/prysmaticlabs/prysm/v5/beacon-chain/forkchoice/types"
1314
"github.com/prysmaticlabs/prysm/v5/beacon-chain/operations/blstoexec"
1415
"github.com/prysmaticlabs/prysm/v5/config/params"
@@ -156,14 +157,17 @@ func Test_notifyNewHeadEvent(t *testing.T) {
156157
notifier := &mock.MockStateNotifier{RecordEvents: true}
157158
srv := &Service{
158159
cfg: &config{
159-
StateNotifier: notifier,
160+
StateNotifier: notifier,
161+
ForkChoiceStore: doublylinkedtree.New(),
160162
},
161163
originBlockRoot: [32]byte{1},
162164
}
165+
st, blk, err := prepareForkchoiceState(context.Background(), 0, [32]byte{}, [32]byte{}, [32]byte{}, &ethpb.Checkpoint{}, &ethpb.Checkpoint{})
166+
require.NoError(t, err)
167+
require.NoError(t, srv.cfg.ForkChoiceStore.InsertNode(context.Background(), st, blk))
163168
newHeadStateRoot := [32]byte{2}
164169
newHeadRoot := [32]byte{3}
165-
err := srv.notifyNewHeadEvent(context.Background(), 1, bState, newHeadStateRoot[:], newHeadRoot[:])
166-
require.NoError(t, err)
170+
require.NoError(t, srv.notifyNewHeadEvent(context.Background(), 1, bState, newHeadStateRoot[:], newHeadRoot[:]))
167171
events := notifier.ReceivedEvents()
168172
require.Equal(t, 1, len(events))
169173

@@ -185,10 +189,14 @@ func Test_notifyNewHeadEvent(t *testing.T) {
185189
genesisRoot := [32]byte{1}
186190
srv := &Service{
187191
cfg: &config{
188-
StateNotifier: notifier,
192+
StateNotifier: notifier,
193+
ForkChoiceStore: doublylinkedtree.New(),
189194
},
190195
originBlockRoot: genesisRoot,
191196
}
197+
st, blk, err := prepareForkchoiceState(context.Background(), 0, [32]byte{}, [32]byte{}, [32]byte{}, &ethpb.Checkpoint{}, &ethpb.Checkpoint{})
198+
require.NoError(t, err)
199+
require.NoError(t, srv.cfg.ForkChoiceStore.InsertNode(context.Background(), st, blk))
192200
epoch1Start, err := slots.EpochStart(1)
193201
require.NoError(t, err)
194202
epoch2Start, err := slots.EpochStart(1)
@@ -209,8 +217,8 @@ func Test_notifyNewHeadEvent(t *testing.T) {
209217
Block: newHeadRoot[:],
210218
State: newHeadStateRoot[:],
211219
EpochTransition: true,
212-
PreviousDutyDependentRoot: genesisRoot[:],
213-
CurrentDutyDependentRoot: make([]byte, 32),
220+
PreviousDutyDependentRoot: make([]byte, 32),
221+
CurrentDutyDependentRoot: srv.originBlockRoot[:],
214222
}
215223
require.DeepSSZEqual(t, wanted, eventHead)
216224
})
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
### Ignored
2+
3+
- Use forkchoice dependent root helper in new head event feed.

0 commit comments

Comments
 (0)