Skip to content

Commit

Permalink
Refactor the reset snapshots
Browse files Browse the repository at this point in the history
  • Loading branch information
blxdyx committed Sep 4, 2024
1 parent 4518ec1 commit ebb74e0
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 23 deletions.
2 changes: 2 additions & 0 deletions consensus/consensus.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ package consensus
import (
"context"
"github.com/erigontech/erigon-lib/kv"
"github.com/erigontech/erigon/consensus/parlia"
"math/big"

"github.com/holiman/uint256"
Expand Down Expand Up @@ -225,6 +226,7 @@ type PoSA interface {
AllowLightProcess(chain ChainReader, currentHeader *types.Header) bool
GetJustifiedNumberAndHash(chain ChainHeaderReader, header *types.Header) (uint64, libcommon.Hash, error)
GetFinalizedHeader(chain ChainHeaderReader, header *types.Header) *types.Header
Snapshot(chain ChainHeaderReader, number uint64, hash libcommon.Hash, parents []*types.Header, verify bool) (*parlia.Snapshot, error)
}

type AsyncEngine interface {
Expand Down
10 changes: 5 additions & 5 deletions consensus/parlia/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ func (api *API) GetSnapshot(number *rpc.BlockNumber) (*Snapshot, error) {
if header == nil {
return nil, errUnknownBlock
}
return api.parlia.snapshot(api.chain, header.Number.Uint64(), header.Hash(), nil, false /* verify */)
return api.parlia.Snapshot(api.chain, header.Number.Uint64(), header.Hash(), nil, false /* verify */)
}

// GetSnapshotAtHash retrieves the state snapshot at a given block.
Expand All @@ -52,7 +52,7 @@ func (api *API) GetSnapshotAtHash(hash libcommon.Hash) (*Snapshot, error) {
if header == nil {
return nil, errUnknownBlock
}
return api.parlia.snapshot(api.chain, header.Number.Uint64(), header.Hash(), nil, false /* verify */)
return api.parlia.Snapshot(api.chain, header.Number.Uint64(), header.Hash(), nil, false /* verify */)
}

// GetValidators retrieves the list of validators at the specified block.
Expand All @@ -68,7 +68,7 @@ func (api *API) GetValidators(number *rpc.BlockNumber) ([]libcommon.Address, err
if header == nil {
return nil, errUnknownBlock
}
snap, err := api.parlia.snapshot(api.chain, header.Number.Uint64(), header.Hash(), nil, false /* verify */)
snap, err := api.parlia.Snapshot(api.chain, header.Number.Uint64(), header.Hash(), nil, false /* verify */)
if err != nil {
return nil, err
}
Expand All @@ -81,7 +81,7 @@ func (api *API) GetValidatorsAtHash(hash libcommon.Hash) ([]libcommon.Address, e
if header == nil {
return nil, errUnknownBlock
}
snap, err := api.parlia.snapshot(api.chain, header.Number.Uint64(), header.Hash(), nil, false /* verify */)
snap, err := api.parlia.Snapshot(api.chain, header.Number.Uint64(), header.Hash(), nil, false /* verify */)
if err != nil {
return nil, err
}
Expand All @@ -100,7 +100,7 @@ func (api *API) GetTurnLength(number *rpc.BlockNumber) (uint8, error) {
if header == nil {
return 0, errUnknownBlock
}
snap, err := api.parlia.snapshot(api.chain, header.Number.Uint64(), header.Hash(), nil, false /* verify */)
snap, err := api.parlia.Snapshot(api.chain, header.Number.Uint64(), header.Hash(), nil, false /* verify */)
if err != nil || snap.TurnLength == 0 {
return 0, err
}
Expand Down
20 changes: 10 additions & 10 deletions consensus/parlia/parlia.go
Original file line number Diff line number Diff line change
Expand Up @@ -467,7 +467,7 @@ func (p *Parlia) verifyVoteAttestation(chain consensus.ChainHeaderReader, header
} else {
parents = nil
}
snap, err := p.snapshot(chain, parent.Number.Uint64()-1, parent.ParentHash, parents, true)
snap, err := p.Snapshot(chain, parent.Number.Uint64()-1, parent.ParentHash, parents, true)
if err != nil {
return err
}
Expand Down Expand Up @@ -637,7 +637,7 @@ func (p *Parlia) verifyCascadingFields(chain consensus.ChainHeaderReader, header
return err
}

snap, err := p.snapshot(chain, number-1, header.ParentHash, parents, true /* verify */)
snap, err := p.Snapshot(chain, number-1, header.ParentHash, parents, true /* verify */)
if err != nil {
return err
}
Expand Down Expand Up @@ -728,7 +728,7 @@ func (p *Parlia) verifySeal(header *types.Header, snap *Snapshot) error {
// !!! be careful
// the block with `number` and `hash` is just the last element of `parents`,
// unlike other interfaces such as verifyCascadingFields, `parents` are real parents
func (p *Parlia) snapshot(chain consensus.ChainHeaderReader, number uint64, hash libcommon.Hash, parents []*types.Header, verify bool) (*Snapshot, error) {
func (p *Parlia) Snapshot(chain consensus.ChainHeaderReader, number uint64, hash libcommon.Hash, parents []*types.Header, verify bool) (*Snapshot, error) {
// Search for a snapshot in memory or on disk for checkpoints
var (
headers []*types.Header
Expand Down Expand Up @@ -970,7 +970,7 @@ func (p *Parlia) finalize(header *types.Header, ibs *state.IntraBlockState, txs
curIndex := userTxs.Len()
// warn if not in majority fork
number := header.Number.Uint64()
snap, err := p.snapshot(chain, number-1, header.ParentHash, nil, false /* verify */)
snap, err := p.Snapshot(chain, number-1, header.ParentHash, nil, false /* verify */)
if err != nil {
return nil, nil, nil, err
}
Expand Down Expand Up @@ -1094,7 +1094,7 @@ func (p *Parlia) distributeFinalityReward(chain consensus.ChainHeaderReader, sta
continue
}

snap, err := p.snapshot(chain, justifiedBlock.Number.Uint64()-1, justifiedBlock.ParentHash, nil, true)
snap, err := p.Snapshot(chain, justifiedBlock.Number.Uint64()-1, justifiedBlock.ParentHash, nil, true)
if err != nil {
return true, err
}
Expand Down Expand Up @@ -1218,7 +1218,7 @@ func (p *Parlia) SealHash(header *types.Header) (hash libcommon.Hash) {
// CalcDifficulty is the difficulty adjustment algorithm. It returns the difficulty
// that a new block should have.
func (p *Parlia) CalcDifficulty(chain consensus.ChainHeaderReader, time, parentTime uint64, parentDifficulty *big.Int, parentNumber uint64, parentHash, parentUncleHash libcommon.Hash, _ uint64) *big.Int {
snap, err := p.snapshot(chain, parentNumber, parentHash, nil, false /* verify */)
snap, err := p.Snapshot(chain, parentNumber, parentHash, nil, false /* verify */)
if err != nil {
return nil
}
Expand Down Expand Up @@ -1281,7 +1281,7 @@ func (p *Parlia) IsSystemContract(to *libcommon.Address) bool {
}

func (p *Parlia) EnoughDistance(chain consensus.ChainReader, header *types.Header) bool {
snap, err := p.snapshot(chain, header.Number.Uint64()-1, header.ParentHash, nil, false /* verify */)
snap, err := p.Snapshot(chain, header.Number.Uint64()-1, header.ParentHash, nil, false /* verify */)
if err != nil {
return true
}
Expand All @@ -1293,7 +1293,7 @@ func (p *Parlia) IsLocalBlock(header *types.Header) bool {
}

func (p *Parlia) AllowLightProcess(chain consensus.ChainReader, currentHeader *types.Header) bool {
snap, err := p.snapshot(chain, currentHeader.Number.Uint64()-1, currentHeader.ParentHash, nil, false /* verify */)
snap, err := p.Snapshot(chain, currentHeader.Number.Uint64()-1, currentHeader.ParentHash, nil, false /* verify */)
if err != nil {
return true
}
Expand Down Expand Up @@ -1558,7 +1558,7 @@ func (p *Parlia) GetJustifiedNumberAndHash(chain consensus.ChainHeaderReader, he
if chain == nil || header == nil {
return 0, libcommon.Hash{}, fmt.Errorf("illegal chain or header")
}
snap, err := p.snapshot(chain, header.Number.Uint64(), header.Hash(), nil, true)
snap, err := p.Snapshot(chain, header.Number.Uint64(), header.Hash(), nil, true)
if err != nil {
p.logger.Error("GetJustifiedNumberAndHash snapshot",
"error", err, "blockNumber", header.Number.Uint64(), "blockHash", header.Hash())
Expand All @@ -1583,7 +1583,7 @@ func (p *Parlia) GetFinalizedHeader(chain consensus.ChainHeaderReader, header *t
return chain.GetHeaderByNumber(0)
}

snap, err := p.snapshot(chain, header.Number.Uint64(), header.Hash(), nil, true)
snap, err := p.Snapshot(chain, header.Number.Uint64(), header.Hash(), nil, true)
if err != nil {
p.logger.Error("GetFinalizedHeader snapshot",
"error", err, "blockNumber", header.Number.Uint64(), "blockHash", header.Hash())
Expand Down
13 changes: 5 additions & 8 deletions eth/stagedsync/stage_snapshots.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import (
"errors"
"fmt"
"github.com/erigontech/erigon/consensus"
"github.com/erigontech/erigon/consensus/parlia"
"io"
"io/fs"
"math/big"
Expand Down Expand Up @@ -385,6 +384,7 @@ func FillDBFromSnapshots(logPrefix string, ctx context.Context, tx kv.RwTx, dirs
// for now easier just store them in db
td := big.NewInt(0)
blockNumBytes := make([]byte, 8)
posa, isPoSa := engine.(consensus.PoSA)
chainReader := &ChainReaderImpl{config: &chainConfig, tx: tx, blockReader: blockReader}
if err := blockReader.HeadersRange(ctx, func(header *types.Header) error {
blockNum, blockHash := header.Number.Uint64(), header.Hash()
Expand Down Expand Up @@ -415,13 +415,10 @@ func FillDBFromSnapshots(logPrefix string, ctx context.Context, tx kv.RwTx, dirs
}
}
}
if engine != nil && engine.Type() == chain.ParliaConsensus {
// consensus may have own database, let's fill it
// different consensuses may have some conditions for validators snapshots
if (blockNum-1)%parlia.CheckpointInterval == 0 {
if err := engine.VerifyHeader(chainReader, header, true /* seal */); err != nil {
return err
}
if isPoSa {
// Fill bsc consensus snapshots may have some conditions for validators snapshots
if _, err := posa.Snapshot(chainReader, header.Number.Uint64(), header.Hash(), nil, true); err != nil {
return err
}
}
select {
Expand Down

0 comments on commit ebb74e0

Please sign in to comment.