fix: remove naturally finality

This commit is contained in:
NathanBSC 2023-05-25 14:18:01 +08:00 committed by NathanBSC
parent 1036dc70be
commit 3d8753cae6
3 changed files with 9 additions and 26 deletions

@ -1740,19 +1740,13 @@ func (p *Parlia) GetJustifiedNumberAndHash(chain consensus.ChainHeaderReader, he
}
// GetFinalizedHeader returns highest finalized block header.
// It will find vote finalized block within NaturallyFinalizedDist blocks firstly,
// If the vote finalized block not found, return its naturally finalized block.
func (p *Parlia) GetFinalizedHeader(chain consensus.ChainHeaderReader, header *types.Header) *types.Header {
backward := uint64(types.NaturallyFinalizedDist)
if chain == nil || header == nil {
return nil
}
if !chain.Config().IsPlato(header.Number) {
return chain.GetHeaderByNumber(0)
}
if header.Number.Uint64() < backward {
backward = header.Number.Uint64()
}
snap, err := p.snapshot(chain, header.Number.Uint64(), header.Hash(), nil)
if err != nil {
@ -1761,20 +1755,10 @@ func (p *Parlia) GetFinalizedHeader(chain consensus.ChainHeaderReader, header *t
return nil
}
for snap.Attestation != nil && snap.Attestation.SourceNumber >= header.Number.Uint64()-backward {
if snap.Attestation.TargetNumber == snap.Attestation.SourceNumber+1 {
return chain.GetHeaderByHash(snap.Attestation.SourceHash)
}
snap, err = p.snapshot(chain, snap.Attestation.SourceNumber, snap.Attestation.SourceHash, nil)
if err != nil {
log.Error("Unexpected error when getting snapshot",
"error", err, "blockNumber", snap.Attestation.SourceNumber, "blockHash", snap.Attestation.SourceHash)
return nil
}
if snap.Attestation != nil {
return chain.GetHeader(snap.Attestation.SourceHash, snap.Attestation.SourceNumber)
}
return FindAncientHeader(header, backward, chain, nil)
return nil
}
// =========================== utility function ==========================

@ -46,7 +46,7 @@ type Snapshot struct {
Validators map[common.Address]*ValidatorInfo `json:"validators"` // Set of authorized validators at this moment
Recents map[uint64]common.Address `json:"recents"` // Set of recent validators for spam protections
RecentForkHashes map[uint64]string `json:"recent_fork_hashes"` // Set of recent forkHash
Attestation *types.VoteData `json:"attestation:omitempty"` // Attestation for fast finality
Attestation *types.VoteData `json:"attestation:omitempty"` // Attestation for fast finality, but `Source` used as `Finalized`
}
type ValidatorInfo struct {
@ -199,11 +199,11 @@ func (s *Snapshot) updateAttestation(header *types.Header, chainConfig *params.C
}
// Update attestation
s.Attestation = &types.VoteData{
SourceNumber: attestation.Data.SourceNumber,
SourceHash: attestation.Data.SourceHash,
TargetNumber: attestation.Data.TargetNumber,
TargetHash: attestation.Data.TargetHash,
if s.Attestation != nil && attestation.Data.SourceNumber+1 != attestation.Data.TargetNumber {
s.Attestation.TargetNumber = attestation.Data.TargetNumber
s.Attestation.TargetHash = attestation.Data.TargetHash
} else {
s.Attestation = attestation.Data
}
}

@ -14,7 +14,6 @@ const (
BLSSignatureLength = 96
MaxAttestationExtraLength = 256
NaturallyFinalizedDist = 21 // The distance to naturally finalized a block
)
type BLSPublicKey [BLSPublicKeyLength]byte