mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2024-12-22 03:30:35 +00:00
Rewrite Pruning Implementation To Handle EIP 7045 (#13762)
* make it very big * use new pruning implementation * handle pre deneb * revert cache change * less verbose * gaz * Update beacon-chain/operations/attestations/prune_expired.go Co-authored-by: Potuz <potuz@prysmaticlabs.com> * gofmt * be safer --------- Co-authored-by: Potuz <potuz@prysmaticlabs.com>
This commit is contained in:
parent
34593d34d4
commit
fda4589251
@ -49,6 +49,7 @@ go_test(
|
|||||||
"//beacon-chain/operations/attestations/kv:go_default_library",
|
"//beacon-chain/operations/attestations/kv:go_default_library",
|
||||||
"//config/fieldparams:go_default_library",
|
"//config/fieldparams:go_default_library",
|
||||||
"//config/params:go_default_library",
|
"//config/params:go_default_library",
|
||||||
|
"//consensus-types/primitives:go_default_library",
|
||||||
"//crypto/bls:go_default_library",
|
"//crypto/bls:go_default_library",
|
||||||
"//proto/prysm/v1alpha1:go_default_library",
|
"//proto/prysm/v1alpha1:go_default_library",
|
||||||
"//proto/prysm/v1alpha1/attestation/aggregation/attestations:go_default_library",
|
"//proto/prysm/v1alpha1/attestation/aggregation/attestations:go_default_library",
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
"github.com/prysmaticlabs/prysm/v5/config/params"
|
"github.com/prysmaticlabs/prysm/v5/config/params"
|
||||||
"github.com/prysmaticlabs/prysm/v5/consensus-types/primitives"
|
"github.com/prysmaticlabs/prysm/v5/consensus-types/primitives"
|
||||||
prysmTime "github.com/prysmaticlabs/prysm/v5/time"
|
prysmTime "github.com/prysmaticlabs/prysm/v5/time"
|
||||||
|
"github.com/prysmaticlabs/prysm/v5/time/slots"
|
||||||
)
|
)
|
||||||
|
|
||||||
// pruneAttsPool prunes attestations pool on every slot interval.
|
// pruneAttsPool prunes attestations pool on every slot interval.
|
||||||
@ -66,7 +67,18 @@ func (s *Service) pruneExpiredAtts() {
|
|||||||
|
|
||||||
// Return true if the input slot has been expired.
|
// Return true if the input slot has been expired.
|
||||||
// Expired is defined as one epoch behind than current time.
|
// Expired is defined as one epoch behind than current time.
|
||||||
func (s *Service) expired(slot primitives.Slot) bool {
|
func (s *Service) expired(providedSlot primitives.Slot) bool {
|
||||||
|
providedEpoch := slots.ToEpoch(providedSlot)
|
||||||
|
currSlot := slots.CurrentSlot(s.genesisTime)
|
||||||
|
currEpoch := slots.ToEpoch(currSlot)
|
||||||
|
if currEpoch < params.BeaconConfig().DenebForkEpoch {
|
||||||
|
return s.expiredPreDeneb(providedSlot)
|
||||||
|
}
|
||||||
|
return providedEpoch+1 < currEpoch
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handles expiration of attestations before deneb.
|
||||||
|
func (s *Service) expiredPreDeneb(slot primitives.Slot) bool {
|
||||||
expirationSlot := slot + params.BeaconConfig().SlotsPerEpoch
|
expirationSlot := slot + params.BeaconConfig().SlotsPerEpoch
|
||||||
expirationTime := s.genesisTime + uint64(expirationSlot.Mul(params.BeaconConfig().SecondsPerSlot))
|
expirationTime := s.genesisTime + uint64(expirationSlot.Mul(params.BeaconConfig().SecondsPerSlot))
|
||||||
currentTime := uint64(prysmTime.Now().Unix())
|
currentTime := uint64(prysmTime.Now().Unix())
|
||||||
|
@ -9,6 +9,7 @@ import (
|
|||||||
"github.com/prysmaticlabs/prysm/v5/async"
|
"github.com/prysmaticlabs/prysm/v5/async"
|
||||||
fieldparams "github.com/prysmaticlabs/prysm/v5/config/fieldparams"
|
fieldparams "github.com/prysmaticlabs/prysm/v5/config/fieldparams"
|
||||||
"github.com/prysmaticlabs/prysm/v5/config/params"
|
"github.com/prysmaticlabs/prysm/v5/config/params"
|
||||||
|
"github.com/prysmaticlabs/prysm/v5/consensus-types/primitives"
|
||||||
ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1"
|
ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1"
|
||||||
"github.com/prysmaticlabs/prysm/v5/testing/assert"
|
"github.com/prysmaticlabs/prysm/v5/testing/assert"
|
||||||
"github.com/prysmaticlabs/prysm/v5/testing/require"
|
"github.com/prysmaticlabs/prysm/v5/testing/require"
|
||||||
@ -127,3 +128,22 @@ func TestPruneExpired_Expired(t *testing.T) {
|
|||||||
assert.Equal(t, true, s.expired(0), "Should be expired")
|
assert.Equal(t, true, s.expired(0), "Should be expired")
|
||||||
assert.Equal(t, false, s.expired(1), "Should not be expired")
|
assert.Equal(t, false, s.expired(1), "Should not be expired")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPruneExpired_ExpiredDeneb(t *testing.T) {
|
||||||
|
params.SetupTestConfigCleanup(t)
|
||||||
|
cfg := params.BeaconConfig()
|
||||||
|
cfg.DenebForkEpoch = 3
|
||||||
|
params.OverrideBeaconConfig(cfg)
|
||||||
|
|
||||||
|
s, err := NewService(context.Background(), &Config{Pool: NewPool()})
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// Rewind back 4 epochs + 10 slots worth of time.
|
||||||
|
s.genesisTime = uint64(prysmTime.Now().Unix()) - (4*uint64(params.BeaconConfig().SlotsPerEpoch.Mul(params.BeaconConfig().SecondsPerSlot)) + 10)
|
||||||
|
secondEpochStart := primitives.Slot(2 * uint64(params.BeaconConfig().SlotsPerEpoch))
|
||||||
|
thirdEpochStart := primitives.Slot(3 * uint64(params.BeaconConfig().SlotsPerEpoch))
|
||||||
|
|
||||||
|
assert.Equal(t, true, s.expired(secondEpochStart), "Should be expired")
|
||||||
|
assert.Equal(t, false, s.expired(thirdEpochStart), "Should not be expired")
|
||||||
|
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user