mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-09 15:37:56 -05:00
save light client updates (diff) (#14683)
* update diff * deps * add tests for `SaveLightClientUpdate` * cleanup imports * lint * changelog * fix incorrect arithmetic * check for lightclient feature flag * fix tests * fix `saveLightClientBootstrap` and `saveLightClientUpdate` * replace and with or * move feature check to `postBlockProcess` --------- Co-authored-by: Radosław Kapka <rkapka@wp.pl>
This commit is contained in:
@@ -14,9 +14,8 @@ import (
|
||||
"github.com/prysmaticlabs/prysm/v5/consensus-types/primitives"
|
||||
"github.com/prysmaticlabs/prysm/v5/encoding/ssz"
|
||||
v11 "github.com/prysmaticlabs/prysm/v5/proto/engine/v1"
|
||||
ethpbv1 "github.com/prysmaticlabs/prysm/v5/proto/eth/v1"
|
||||
ethpbv2 "github.com/prysmaticlabs/prysm/v5/proto/eth/v2"
|
||||
ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1"
|
||||
pb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1"
|
||||
"github.com/prysmaticlabs/prysm/v5/runtime/version"
|
||||
"github.com/prysmaticlabs/prysm/v5/testing/require"
|
||||
)
|
||||
@@ -47,14 +46,14 @@ func (l *TestLightClient) SetupTestCapella(blinded bool) *TestLightClient {
|
||||
|
||||
finalizedBlock, err := blocks.NewSignedBeaconBlock(NewBeaconBlockCapella())
|
||||
require.NoError(l.T, err)
|
||||
finalizedBlock.SetSlot(1)
|
||||
finalizedBlock.SetSlot(primitives.Slot(params.BeaconConfig().CapellaForkEpoch * primitives.Epoch(params.BeaconConfig().SlotsPerEpoch)))
|
||||
finalizedHeader, err := finalizedBlock.Header()
|
||||
require.NoError(l.T, err)
|
||||
finalizedRoot, err := finalizedHeader.Header.HashTreeRoot()
|
||||
require.NoError(l.T, err)
|
||||
|
||||
require.NoError(l.T, attestedState.SetFinalizedCheckpoint(ðpb.Checkpoint{
|
||||
Epoch: params.BeaconConfig().CapellaForkEpoch - 10,
|
||||
Epoch: params.BeaconConfig().CapellaForkEpoch,
|
||||
Root: finalizedRoot[:],
|
||||
}))
|
||||
|
||||
@@ -262,25 +261,33 @@ func (l *TestLightClient) SetupTestCapellaFinalizedBlockAltair(blinded bool) *Te
|
||||
func (l *TestLightClient) SetupTestAltair() *TestLightClient {
|
||||
ctx := context.Background()
|
||||
|
||||
slot := primitives.Slot(params.BeaconConfig().AltairForkEpoch * primitives.Epoch(params.BeaconConfig().SlotsPerEpoch)).Add(1)
|
||||
slot := primitives.Slot(uint64(params.BeaconConfig().AltairForkEpoch) * uint64(params.BeaconConfig().SlotsPerEpoch)).Add(1)
|
||||
|
||||
attestedState, err := NewBeaconStateAltair()
|
||||
require.NoError(l.T, err)
|
||||
err = attestedState.SetSlot(slot)
|
||||
require.NoError(l.T, err)
|
||||
|
||||
finalizedBlock, err := blocks.NewSignedBeaconBlock(NewBeaconBlockAltair())
|
||||
finalizedState, err := NewBeaconStateAltair()
|
||||
require.NoError(l.T, err)
|
||||
finalizedBlock.SetSlot(1)
|
||||
finalizedHeader, err := finalizedBlock.Header()
|
||||
err = finalizedState.SetSlot(1)
|
||||
require.NoError(l.T, err)
|
||||
finalizedStateRoot, err := finalizedState.HashTreeRoot(ctx)
|
||||
require.NoError(l.T, err)
|
||||
SignedFinalizedBlock, err := blocks.NewSignedBeaconBlock(NewBeaconBlockAltair())
|
||||
require.NoError(l.T, err)
|
||||
SignedFinalizedBlock.SetSlot(1)
|
||||
SignedFinalizedBlock.SetStateRoot(finalizedStateRoot[:])
|
||||
finalizedHeader, err := SignedFinalizedBlock.Header()
|
||||
require.NoError(l.T, err)
|
||||
finalizedRoot, err := finalizedHeader.Header.HashTreeRoot()
|
||||
require.NoError(l.T, err)
|
||||
|
||||
require.NoError(l.T, attestedState.SetFinalizedCheckpoint(ðpb.Checkpoint{
|
||||
finalizedCheckpoint := ðpb.Checkpoint{
|
||||
Epoch: params.BeaconConfig().AltairForkEpoch - 10,
|
||||
Root: finalizedRoot[:],
|
||||
}))
|
||||
}
|
||||
require.NoError(l.T, attestedState.SetFinalizedCheckpoint(finalizedCheckpoint))
|
||||
|
||||
parent := NewBeaconBlockAltair()
|
||||
parent.Block.Slot = slot
|
||||
@@ -338,7 +345,7 @@ func (l *TestLightClient) SetupTestAltair() *TestLightClient {
|
||||
l.AttestedState = attestedState
|
||||
l.Block = signedBlock
|
||||
l.Ctx = ctx
|
||||
l.FinalizedBlock = finalizedBlock
|
||||
l.FinalizedBlock = SignedFinalizedBlock
|
||||
l.AttestedBlock = signedParent
|
||||
|
||||
return l
|
||||
@@ -441,14 +448,14 @@ func (l *TestLightClient) SetupTestDeneb(blinded bool) *TestLightClient {
|
||||
|
||||
finalizedBlock, err := blocks.NewSignedBeaconBlock(NewBeaconBlockDeneb())
|
||||
require.NoError(l.T, err)
|
||||
finalizedBlock.SetSlot(1)
|
||||
finalizedBlock.SetSlot(primitives.Slot(params.BeaconConfig().DenebForkEpoch * primitives.Epoch(params.BeaconConfig().SlotsPerEpoch)))
|
||||
finalizedHeader, err := finalizedBlock.Header()
|
||||
require.NoError(l.T, err)
|
||||
finalizedRoot, err := finalizedHeader.Header.HashTreeRoot()
|
||||
require.NoError(l.T, err)
|
||||
|
||||
require.NoError(l.T, attestedState.SetFinalizedCheckpoint(ðpb.Checkpoint{
|
||||
Epoch: params.BeaconConfig().DenebForkEpoch - 10,
|
||||
Epoch: params.BeaconConfig().DenebForkEpoch,
|
||||
Root: finalizedRoot[:],
|
||||
}))
|
||||
|
||||
@@ -665,14 +672,14 @@ func (l *TestLightClient) SetupTestDenebFinalizedBlockCapella(blinded bool) *Tes
|
||||
|
||||
finalizedBlock, err := blocks.NewSignedBeaconBlock(NewBeaconBlockCapella())
|
||||
require.NoError(l.T, err)
|
||||
finalizedBlock.SetSlot(1)
|
||||
finalizedBlock.SetSlot(primitives.Slot(params.BeaconConfig().DenebForkEpoch * primitives.Epoch(params.BeaconConfig().SlotsPerEpoch)).Sub(15))
|
||||
finalizedHeader, err := finalizedBlock.Header()
|
||||
require.NoError(l.T, err)
|
||||
finalizedRoot, err := finalizedHeader.Header.HashTreeRoot()
|
||||
require.NoError(l.T, err)
|
||||
|
||||
require.NoError(l.T, attestedState.SetFinalizedCheckpoint(ðpb.Checkpoint{
|
||||
Epoch: params.BeaconConfig().CapellaForkEpoch - 10,
|
||||
Epoch: params.BeaconConfig().DenebForkEpoch - 1,
|
||||
Root: finalizedRoot[:],
|
||||
}))
|
||||
|
||||
@@ -765,9 +772,8 @@ func (l *TestLightClient) SetupTestDenebFinalizedBlockCapella(blinded bool) *Tes
|
||||
return l
|
||||
}
|
||||
|
||||
func (l *TestLightClient) CheckAttestedHeader(container *ethpbv2.LightClientHeaderContainer) {
|
||||
updateAttestedHeaderBeacon, err := container.GetBeacon()
|
||||
require.NoError(l.T, err)
|
||||
func (l *TestLightClient) CheckAttestedHeader(header interfaces.LightClientHeader) {
|
||||
updateAttestedHeaderBeacon := header.Beacon()
|
||||
testAttestedHeader, err := l.AttestedBlock.Header()
|
||||
require.NoError(l.T, err)
|
||||
require.Equal(l.T, l.AttestedBlock.Block().Slot(), updateAttestedHeaderBeacon.Slot, "Attested block slot is not equal")
|
||||
@@ -820,16 +826,16 @@ func (l *TestLightClient) CheckAttestedHeader(container *ethpbv2.LightClientHead
|
||||
WithdrawalsRoot: withdrawalsRoot,
|
||||
}
|
||||
|
||||
updateAttestedHeaderExecution, err := container.GetExecutionHeaderCapella()
|
||||
updateAttestedHeaderExecution, err := header.Execution()
|
||||
require.NoError(l.T, err)
|
||||
require.DeepSSZEqual(l.T, execution, updateAttestedHeaderExecution, "Attested Block Execution is not equal")
|
||||
require.DeepSSZEqual(l.T, execution, updateAttestedHeaderExecution.Proto(), "Attested Block Execution is not equal")
|
||||
|
||||
executionPayloadProof, err := blocks.PayloadProof(l.Ctx, l.AttestedBlock.Block())
|
||||
require.NoError(l.T, err)
|
||||
updateAttestedHeaderExecutionBranch, err := container.GetExecutionBranch()
|
||||
updateAttestedHeaderExecutionBranch, err := header.ExecutionBranch()
|
||||
require.NoError(l.T, err)
|
||||
for i, leaf := range updateAttestedHeaderExecutionBranch {
|
||||
require.DeepSSZEqual(l.T, executionPayloadProof[i], leaf, "Leaf is not equal")
|
||||
require.DeepSSZEqual(l.T, executionPayloadProof[i], leaf[:], "Leaf is not equal")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -874,21 +880,21 @@ func (l *TestLightClient) CheckAttestedHeader(container *ethpbv2.LightClientHead
|
||||
WithdrawalsRoot: withdrawalsRoot,
|
||||
}
|
||||
|
||||
updateAttestedHeaderExecution, err := container.GetExecutionHeaderDeneb()
|
||||
updateAttestedHeaderExecution, err := header.Execution()
|
||||
require.NoError(l.T, err)
|
||||
require.DeepSSZEqual(l.T, execution, updateAttestedHeaderExecution, "Attested Block Execution is not equal")
|
||||
require.DeepSSZEqual(l.T, execution, updateAttestedHeaderExecution.Proto(), "Attested Block Execution is not equal")
|
||||
|
||||
executionPayloadProof, err := blocks.PayloadProof(l.Ctx, l.AttestedBlock.Block())
|
||||
require.NoError(l.T, err)
|
||||
updateAttestedHeaderExecutionBranch, err := container.GetExecutionBranch()
|
||||
updateAttestedHeaderExecutionBranch, err := header.ExecutionBranch()
|
||||
require.NoError(l.T, err)
|
||||
for i, leaf := range updateAttestedHeaderExecutionBranch {
|
||||
require.DeepSSZEqual(l.T, executionPayloadProof[i], leaf, "Leaf is not equal")
|
||||
require.DeepSSZEqual(l.T, executionPayloadProof[i], leaf[:], "Leaf is not equal")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (l *TestLightClient) CheckSyncAggregate(sa *ethpbv1.SyncAggregate) {
|
||||
func (l *TestLightClient) CheckSyncAggregate(sa *pb.SyncAggregate) {
|
||||
syncAggregate, err := l.Block.Block().Body().SyncAggregate()
|
||||
require.NoError(l.T, err)
|
||||
require.DeepSSZEqual(l.T, syncAggregate.SyncCommitteeBits, sa.SyncCommitteeBits, "SyncAggregate bits is not equal")
|
||||
|
||||
Reference in New Issue
Block a user