consensus/XDPoS: remove unused parameters in BlockConsensusVersion, close XFN-02 (#1613)

This commit is contained in:
Daniel Liu 2025-10-08 13:19:45 +08:00 committed by benjamin202410
parent c69a536169
commit bcbf9dafda
5 changed files with 88 additions and 47 deletions

View file

@ -957,11 +957,7 @@ func (fb *filterBackend) HeaderByNumber(ctx context.Context, number rpc.BlockNum
return nil, errors.New("only XDPoS v2 supports committed block lookup") return nil, errors.New("only XDPoS v2 supports committed block lookup")
} }
current := fb.bc.CurrentBlock().Header() current := fb.bc.CurrentBlock().Header()
if fb.bc.Config().XDPoS.BlockConsensusVersion( if fb.bc.Config().XDPoS.BlockConsensusVersion(current.Number) == params.ConsensusEngineVersion2 {
current.Number,
current.Extra,
XDPoS.ExtraFieldCheck,
) == params.ConsensusEngineVersion2 {
confirmedHash := fb.bc.Engine().(*XDPoS.XDPoS).EngineV2.GetLatestCommittedBlockInfo().Hash confirmedHash := fb.bc.Engine().(*XDPoS.XDPoS).EngineV2.GetLatestCommittedBlockInfo().Hash
return fb.bc.GetHeaderByHash(confirmedHash), nil return fb.bc.GetHeaderByHash(confirmedHash), nil
} }

54
commits Normal file
View file

@ -0,0 +1,54 @@
I found 50 commits containing the keyword "XFN" in the last 200 commits. Here they are with dates: November 2025:
2025-11-12 - 4bb925258 - params: fix type V2 not equal bug, close XFN-45 (#1737)
2025-11-10 - 366c99ece - consensus: use signer pubkey to check for unique signatures, close XFN-03 (#1643)
2025-11-10 - 7aaa541db - consensus: implement DeepCopy() in PoolObj, close XFN-04 (#1723)
2025-11-10 - 44b7ea808 - consensus: add isEpochSwitch check to IsSigner, close XFN-90 (#1654)
2025-11-04 - 13ed19bcf - all: remove XDCx and XDCxlending public API, close XFN-74 XFN-134 (#1675)
2025-11-04 - 8ca35720c - ethclient: fix variable shadowing in FeeHistory(), close XFN-129 (#1720)
2025-11-04 - 5a2495100 - consensus/XDPoS/utils: remove unused errors, close XFN-122 (#1721)
2025-11-04 - 611668c23 - internal/ethapi: improve ChaindbCompact() and ChaindbProperty(), fix XFN-139 (#1722)
2025-11-04 - 851bdc45d - core: skip AddBalance for special-tx, close XFN-67 (#1629)
2025-11-04 - d31910283 - miner: remove NewMinedBlockEvent, close XFN-50 (#1644)
2025-11-04 - 5d25e016d - params: check XDPoS V2 parameters, close XFN-45 (#1638)
2025-11-03 - c3c3d0355 - common: fix gas fee mismatch before TIPTRC21Fee, close XFN-51 (#1636)
2025-11-03 - 815995e9e - miner: fix inconsistent error evaluation, close XFN-60 (#1632)
2025-11-03 - 0677ab40a - miner: fix pop wrong tx from normal txs queue, close XFN-37 (#1623)
2025-11-03 - 45f7597c9 - engine_v2: verify gap number in UpdateMasternodes, close XFN-11 (#1622)
2025-11-03 - 3cab0036e - miner: fix deep copy in copyReceipts, close XFN-49 (#1620)
2025-11-03 - 5732c4b11 - core/txpool: protect cache with mutex, close XFN-65 (#1630)
2025-11-03 - 7fad428a8 - core/types: reuse signtx, close XFN-63 (#1631)
2025-11-03 - 76aa15b7d - miner: fix concurrent map access in Miner.HashRate, close XFN-52 (#1634)
2025-11-03 - f90a12d9f - miner: fix inconsistent time unit, close XFN-59 (#1633)
2025-11-03 - d451580b3 - miner, XDPoS, XDC: close chanels by owner, close XFN-41 (#1641)
2025-11-03 - 5a26279c1 - engine_v2, params: fix unsynchronized reads of V2.CurrentConfig, close XFN-53 (#1642)
2025-11-03 - 96d39a83e - core: fix variable shadowing, close XFN-104 (#1649)
2025-11-03 - 96fbe67bf - core: fix untracked goroutine in procFutureBlocks, close XFN-105 (#1650)
2025-11-03 - 17cd60454 - eth/gasprice: use Sign() to compare with zero, close XFN-93 (#1655)
2025-11-03 - d8af7fa0d - consensus/XDPoS: avoid use len as variable, close XFN-25 (#1656)
2025-11-03 - 4aafff282 - common: improve function ExtractAddressFromBytes, close XFN-15 (#1658)
2025-11-03 - 09b66ea8c - engine_v2: check overflow first, close XFN-20 (#1659)
2025-11-03 - 4acd3b05e - XDPoS/utils: use strconv.ParseInt to convert int64, close XFN-24 (#1660)
2025-11-03 - 717610c0d - core: handle future block more elegantly, close XFN-101 (#1672)
2025-11-03 - aecb6ff7d - engine_v2: reject wrong signature earlier, close XFN-29 (#1661)
2025-11-03 - 0f4d266b9 - internal/ethapi: fix missing proper error propagation, close XFN-118 (#1683)
2025-11-03 - 737bfa45a - internal/ethapi: prealloc map for the txpool api, close XFN-106 (#1685)
2025-11-03 - 165d0f083 - eth: fix wrong judgement condition, close XFN-73 (#1686)
2025-11-03 - 7614a0ad9 - consensus/XDPoS: convert variables to const, close XFN-123 (#1688)
2025-11-03 - fc748cc52 - engine_v2: add comment for type SnapshotV2, close XFN-124 (#1689)
2025-11-03 - d2706538e - XDPoS/engines, core: fix non idiomatic "comma ok" boolean name, close XFN-126 (#1690)
2025-11-03 - 58c066f05 - all: handle err from func rlp.Encode, close XFN-127 (#1692)
2025-11-03 - 426d4a7a9 - core/txpool: fix name shadowing of filter parameter, close XFN-66 (#1694)
2025-11-03 - 11f0c95b7 - core: fix missing nil check, close XFN-114 (#1696)
2025-11-02 - 9d8599030 - all: fix missing nil check, close XFN-114 (#1695)
2025-11-01 - 2fd4030cb - eth/gasprice: ensure cache purging goroutine terminates with subscription, close XFN-89 (#1687)
October 2025:
2025-10-31 - 336d1f9f3 - core: fix too many goroutines in InitSignerInTransactions, close XFN-75 (#1662)
2025-10-31 - a5e68b9c5 - miner: not sleep if locks multiple mutex, close XFN-40 (#1639)
2025-10-31 - 20ec25c0c - engine_v2: fix data race when initial v2 parameters, close XFN-10 (#1617)
2025-10-08 - 0aa7ccb81 - consensus: check gas limit bounds in header, close XFN-07 (#1616)
2025-10-08 - 8c101cd96 - engine_v2: fix potential modulo by zero, close XFN-17 (#1615)
2025-10-08 - 95f0bd2a4 - engine_v2: check minimum timestamp for the first v2 block, close XFN-16 (#1614)
2025-10-08 - 956767a41 - consensus/XDPoS: remove unused parameters in BlockConsensusVersion, close XFN-02 (#1613)
2025-10-08 - 2ad225d6d - engine_v2: fix unsynchronized QC verification Error, close XFN-09 (#1609)
2025-10-08 - c7fb2e875 - consensus, contracts: check input length of ExtractValidatorsFromBytes, close XFN-14 (#1608)
These commits reference various XFN issue numbers (XFN-02 through XFN-139) and primarily focus on bug fixes, improvements to the consensus engine, miner, and core components.

View file

@ -44,7 +44,7 @@ const (
) )
func (x *XDPoS) SigHash(header *types.Header) (hash common.Hash) { func (x *XDPoS) SigHash(header *types.Header) (hash common.Hash) {
switch x.config.BlockConsensusVersion(header.Number, header.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(header.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return x.EngineV2.SignHash(header) return x.EngineV2.SignHash(header)
default: // Default "v1" default: // Default "v1"
@ -148,7 +148,7 @@ func NewFaker(db ethdb.Database, chainConfig *params.ChainConfig) *XDPoS {
// Reset parameters after checkpoint due to config may change // Reset parameters after checkpoint due to config may change
func (x *XDPoS) UpdateParams(header *types.Header) { func (x *XDPoS) UpdateParams(header *types.Header) {
switch x.config.BlockConsensusVersion(header.Number, header.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(header.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
x.EngineV2.UpdateParams(header) x.EngineV2.UpdateParams(header)
return return
@ -158,7 +158,7 @@ func (x *XDPoS) UpdateParams(header *types.Header) {
} }
func (x *XDPoS) Initial(chain consensus.ChainReader, header *types.Header) error { func (x *XDPoS) Initial(chain consensus.ChainReader, header *types.Header) error {
switch x.config.BlockConsensusVersion(header.Number, header.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(header.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return x.EngineV2.Initial(chain, header) return x.EngineV2.Initial(chain, header)
default: // Default "v1" default: // Default "v1"
@ -183,7 +183,7 @@ func (x *XDPoS) APIs(chain consensus.ChainReader) []rpc.API {
// Author implements consensus.Engine, returning the Ethereum address recovered // Author implements consensus.Engine, returning the Ethereum address recovered
// from the signature in the header's extra-data section. // from the signature in the header's extra-data section.
func (x *XDPoS) Author(header *types.Header) (common.Address, error) { func (x *XDPoS) Author(header *types.Header) (common.Address, error) {
switch x.config.BlockConsensusVersion(header.Number, header.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(header.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return x.EngineV2.Author(header) return x.EngineV2.Author(header)
default: // Default "v1" default: // Default "v1"
@ -193,7 +193,7 @@ func (x *XDPoS) Author(header *types.Header) (common.Address, error) {
// VerifyHeader checks whether a header conforms to the consensus rules. // VerifyHeader checks whether a header conforms to the consensus rules.
func (x *XDPoS) VerifyHeader(chain consensus.ChainReader, header *types.Header, fullVerify bool, verifyCheckpoint bool) error { func (x *XDPoS) VerifyHeader(chain consensus.ChainReader, header *types.Header, fullVerify bool, verifyCheckpoint bool) error {
switch x.config.BlockConsensusVersion(header.Number, header.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(header.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return x.EngineV2.VerifyHeader(chain, header, fullVerify) return x.EngineV2.VerifyHeader(chain, header, fullVerify)
default: // Default "v1" default: // Default "v1"
@ -213,7 +213,7 @@ func (x *XDPoS) VerifyHeaders(chain consensus.ChainReader, headers []*types.Head
var v2headers []*types.Header var v2headers []*types.Header
for _, header := range headers { for _, header := range headers {
switch x.config.BlockConsensusVersion(header.Number, header.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(header.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
v2headers = append(v2headers, header) v2headers = append(v2headers, header)
default: // Default "v1" default: // Default "v1"
@ -234,7 +234,7 @@ func (x *XDPoS) VerifyHeaders(chain consensus.ChainReader, headers []*types.Head
// VerifyUncles implements consensus.Engine, always returning an error for any // VerifyUncles implements consensus.Engine, always returning an error for any
// uncles as this consensus mechanism doesn't permit uncles. // uncles as this consensus mechanism doesn't permit uncles.
func (x *XDPoS) VerifyUncles(chain consensus.ChainReader, block *types.Block) error { func (x *XDPoS) VerifyUncles(chain consensus.ChainReader, block *types.Block) error {
switch x.config.BlockConsensusVersion(block.Number(), block.Extra(), ExtraFieldCheck) { switch x.config.BlockConsensusVersion(block.Number()) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return x.EngineV2.VerifyUncles(chain, block) return x.EngineV2.VerifyUncles(chain, block)
default: // Default "v1" default: // Default "v1"
@ -245,7 +245,7 @@ func (x *XDPoS) VerifyUncles(chain consensus.ChainReader, block *types.Block) er
// VerifySeal implements consensus.Engine, checking whether the signature contained // VerifySeal implements consensus.Engine, checking whether the signature contained
// in the header satisfies the consensus protocol requirements. // in the header satisfies the consensus protocol requirements.
func (x *XDPoS) VerifySeal(chain consensus.ChainReader, header *types.Header) error { func (x *XDPoS) VerifySeal(chain consensus.ChainReader, header *types.Header) error {
switch x.config.BlockConsensusVersion(header.Number, header.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(header.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return nil return nil
default: // Default "v1" default: // Default "v1"
@ -256,7 +256,7 @@ func (x *XDPoS) VerifySeal(chain consensus.ChainReader, header *types.Header) er
// Prepare implements consensus.Engine, preparing all the consensus fields of the // Prepare implements consensus.Engine, preparing all the consensus fields of the
// header for running the transactions on top. // header for running the transactions on top.
func (x *XDPoS) Prepare(chain consensus.ChainReader, header *types.Header) error { func (x *XDPoS) Prepare(chain consensus.ChainReader, header *types.Header) error {
switch x.config.BlockConsensusVersion(header.Number, nil, SkipExtraFieldCheck) { switch x.config.BlockConsensusVersion(header.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return x.EngineV2.Prepare(chain, header) return x.EngineV2.Prepare(chain, header)
default: // Default "v1" default: // Default "v1"
@ -267,7 +267,7 @@ func (x *XDPoS) Prepare(chain consensus.ChainReader, header *types.Header) error
// Finalize implements consensus.Engine, ensuring no uncles are set, nor block // Finalize implements consensus.Engine, ensuring no uncles are set, nor block
// rewards given, and returns the final block. // rewards given, and returns the final block.
func (x *XDPoS) Finalize(chain consensus.ChainReader, header *types.Header, state *state.StateDB, parentState *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) { func (x *XDPoS) Finalize(chain consensus.ChainReader, header *types.Header, state *state.StateDB, parentState *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) {
switch x.config.BlockConsensusVersion(header.Number, header.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(header.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return x.EngineV2.Finalize(chain, header, state, parentState, txs, uncles, receipts) return x.EngineV2.Finalize(chain, header, state, parentState, txs, uncles, receipts)
default: // Default "v1" default: // Default "v1"
@ -278,7 +278,7 @@ func (x *XDPoS) Finalize(chain consensus.ChainReader, header *types.Header, stat
// Seal implements consensus.Engine, attempting to create a sealed block using // Seal implements consensus.Engine, attempting to create a sealed block using
// the local signing credentials. // the local signing credentials.
func (x *XDPoS) Seal(chain consensus.ChainReader, block *types.Block, stop <-chan struct{}) (*types.Block, error) { func (x *XDPoS) Seal(chain consensus.ChainReader, block *types.Block, stop <-chan struct{}) (*types.Block, error) {
switch x.config.BlockConsensusVersion(block.Number(), block.Extra(), ExtraFieldCheck) { switch x.config.BlockConsensusVersion(block.Number()) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return x.EngineV2.Seal(chain, block, stop) return x.EngineV2.Seal(chain, block, stop)
default: // Default "v1" default: // Default "v1"
@ -290,7 +290,7 @@ func (x *XDPoS) Seal(chain consensus.ChainReader, block *types.Block, stop <-cha
// that a new block should have based on the previous blocks in the chain and the // that a new block should have based on the previous blocks in the chain and the
// current signer. // current signer.
func (x *XDPoS) CalcDifficulty(chain consensus.ChainReader, time uint64, parent *types.Header) *big.Int { func (x *XDPoS) CalcDifficulty(chain consensus.ChainReader, time uint64, parent *types.Header) *big.Int {
switch x.config.BlockConsensusVersion(parent.Number, parent.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(parent.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return x.EngineV2.CalcDifficulty(chain, time, parent) return x.EngineV2.CalcDifficulty(chain, time, parent)
default: // Default "v1" default: // Default "v1"
@ -299,7 +299,7 @@ func (x *XDPoS) CalcDifficulty(chain consensus.ChainReader, time uint64, parent
} }
func (x *XDPoS) HandleProposedBlock(chain consensus.ChainReader, header *types.Header) error { func (x *XDPoS) HandleProposedBlock(chain consensus.ChainReader, header *types.Header) error {
switch x.config.BlockConsensusVersion(header.Number, header.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(header.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return x.EngineV2.ProposedBlockHandler(chain, header) return x.EngineV2.ProposedBlockHandler(chain, header)
default: // Default "v1" default: // Default "v1"
@ -324,7 +324,7 @@ func (x *XDPoS) GetPeriod() uint64 {
} }
func (x *XDPoS) IsAuthorisedAddress(chain consensus.ChainReader, header *types.Header, address common.Address) bool { func (x *XDPoS) IsAuthorisedAddress(chain consensus.ChainReader, header *types.Header, address common.Address) bool {
switch x.config.BlockConsensusVersion(header.Number, header.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(header.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return x.EngineV2.IsAuthorisedAddress(chain, header, address) return x.EngineV2.IsAuthorisedAddress(chain, header, address)
default: // Default "v1" default: // Default "v1"
@ -333,7 +333,7 @@ func (x *XDPoS) IsAuthorisedAddress(chain consensus.ChainReader, header *types.H
} }
func (x *XDPoS) GetMasternodes(chain consensus.ChainReader, header *types.Header) []common.Address { func (x *XDPoS) GetMasternodes(chain consensus.ChainReader, header *types.Header) []common.Address {
switch x.config.BlockConsensusVersion(header.Number, header.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(header.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return x.EngineV2.GetMasternodes(chain, header) return x.EngineV2.GetMasternodes(chain, header)
default: // Default "v1" default: // Default "v1"
@ -347,7 +347,7 @@ func (x *XDPoS) GetMasternodesByNumber(chain consensus.ChainReader, blockNumber
log.Error("[GetMasternodesByNumber] Unable to find block", "Num", blockNumber) log.Error("[GetMasternodesByNumber] Unable to find block", "Num", blockNumber)
return []common.Address{} return []common.Address{}
} }
switch x.config.BlockConsensusVersion(big.NewInt(int64(blockNumber)), blockHeader.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(big.NewInt(int64(blockNumber))) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return x.EngineV2.GetMasternodes(chain, blockHeader) return x.EngineV2.GetMasternodes(chain, blockHeader)
default: // Default "v1" default: // Default "v1"
@ -356,7 +356,7 @@ func (x *XDPoS) GetMasternodesByNumber(chain consensus.ChainReader, blockNumber
} }
func (x *XDPoS) YourTurn(chain consensus.ChainReader, parent *types.Header, signer common.Address) (bool, error) { func (x *XDPoS) YourTurn(chain consensus.ChainReader, parent *types.Header, signer common.Address) (bool, error) {
switch x.config.BlockConsensusVersion(big.NewInt(parent.Number.Int64()+1), nil, SkipExtraFieldCheck) { switch x.config.BlockConsensusVersion(big.NewInt(parent.Number.Int64() + 1)) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return x.EngineV2.YourTurn(chain, parent, signer) return x.EngineV2.YourTurn(chain, parent, signer)
default: // Default "v1" default: // Default "v1"
@ -365,7 +365,7 @@ func (x *XDPoS) YourTurn(chain consensus.ChainReader, parent *types.Header, sign
} }
func (x *XDPoS) GetValidator(creator common.Address, chain consensus.ChainReader, header *types.Header) (common.Address, error) { func (x *XDPoS) GetValidator(creator common.Address, chain consensus.ChainReader, header *types.Header) (common.Address, error) {
switch x.config.BlockConsensusVersion(header.Number, header.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(header.Number) {
default: // Default "v1", v2 does not need this function default: // Default "v1", v2 does not need this function
return x.EngineV1.GetValidator(creator, chain, header) return x.EngineV1.GetValidator(creator, chain, header)
} }
@ -373,7 +373,7 @@ func (x *XDPoS) GetValidator(creator common.Address, chain consensus.ChainReader
func (x *XDPoS) UpdateMasternodes(chain consensus.ChainReader, header *types.Header, ms []utils.Masternode) error { func (x *XDPoS) UpdateMasternodes(chain consensus.ChainReader, header *types.Header, ms []utils.Masternode) error {
// fmt.Println("UpdateMasternodes") // fmt.Println("UpdateMasternodes")
switch x.config.BlockConsensusVersion(header.Number, header.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(header.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return x.EngineV2.UpdateMasternodes(chain, header, ms) return x.EngineV2.UpdateMasternodes(chain, header, ms)
default: // Default "v1" default: // Default "v1"
@ -382,7 +382,7 @@ func (x *XDPoS) UpdateMasternodes(chain consensus.ChainReader, header *types.Hea
} }
func (x *XDPoS) RecoverSigner(header *types.Header) (common.Address, error) { func (x *XDPoS) RecoverSigner(header *types.Header) (common.Address, error) {
switch x.config.BlockConsensusVersion(header.Number, header.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(header.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return common.Address{}, nil return common.Address{}, nil
default: // Default "v1" default: // Default "v1"
@ -391,7 +391,7 @@ func (x *XDPoS) RecoverSigner(header *types.Header) (common.Address, error) {
} }
func (x *XDPoS) RecoverValidator(header *types.Header) (common.Address, error) { func (x *XDPoS) RecoverValidator(header *types.Header) (common.Address, error) {
switch x.config.BlockConsensusVersion(header.Number, header.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(header.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return common.Address{}, nil return common.Address{}, nil
default: // Default "v1" default: // Default "v1"
@ -401,7 +401,7 @@ func (x *XDPoS) RecoverValidator(header *types.Header) (common.Address, error) {
// Get master nodes over extra data of previous checkpoint block. // Get master nodes over extra data of previous checkpoint block.
func (x *XDPoS) GetMasternodesFromCheckpointHeader(checkpointHeader *types.Header) []common.Address { func (x *XDPoS) GetMasternodesFromCheckpointHeader(checkpointHeader *types.Header) []common.Address {
switch x.config.BlockConsensusVersion(checkpointHeader.Number, checkpointHeader.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(checkpointHeader.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return x.EngineV2.GetMasternodesFromEpochSwitchHeader(checkpointHeader) return x.EngineV2.GetMasternodesFromEpochSwitchHeader(checkpointHeader)
default: // Default "v1" default: // Default "v1"
@ -411,7 +411,7 @@ func (x *XDPoS) GetMasternodesFromCheckpointHeader(checkpointHeader *types.Heade
// Check is epoch switch (checkpoint) block // Check is epoch switch (checkpoint) block
func (x *XDPoS) IsEpochSwitch(header *types.Header) (bool, uint64, error) { func (x *XDPoS) IsEpochSwitch(header *types.Header) (bool, uint64, error) {
switch x.config.BlockConsensusVersion(header.Number, header.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(header.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return x.EngineV2.IsEpochSwitch(header) return x.EngineV2.IsEpochSwitch(header)
default: // Default "v1" default: // Default "v1"
@ -420,8 +420,7 @@ func (x *XDPoS) IsEpochSwitch(header *types.Header) (bool, uint64, error) {
} }
func (x *XDPoS) GetCurrentEpochSwitchBlock(chain consensus.ChainReader, blockNumber *big.Int) (uint64, uint64, error) { func (x *XDPoS) GetCurrentEpochSwitchBlock(chain consensus.ChainReader, blockNumber *big.Int) (uint64, uint64, error) {
header := chain.GetHeaderByNumber(blockNumber.Uint64()) switch x.config.BlockConsensusVersion(blockNumber) {
switch x.config.BlockConsensusVersion(blockNumber, header.Extra, ExtraFieldCheck) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return x.EngineV2.GetCurrentEpochSwitchBlock(chain, blockNumber) return x.EngineV2.GetCurrentEpochSwitchBlock(chain, blockNumber)
default: // Default "v1" default: // Default "v1"
@ -430,7 +429,7 @@ func (x *XDPoS) GetCurrentEpochSwitchBlock(chain consensus.ChainReader, blockNum
} }
func (x *XDPoS) CalculateMissingRounds(chain consensus.ChainReader, header *types.Header) (*utils.PublicApiMissedRoundsMetadata, error) { func (x *XDPoS) CalculateMissingRounds(chain consensus.ChainReader, header *types.Header) (*utils.PublicApiMissedRoundsMetadata, error) {
switch x.config.BlockConsensusVersion(header.Number, header.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(header.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return x.EngineV2.CalculateMissingRounds(chain, header) return x.EngineV2.CalculateMissingRounds(chain, header)
default: // Default "v1" default: // Default "v1"
@ -444,7 +443,7 @@ func (x *XDPoS) GetDb() ethdb.Database {
} }
func (x *XDPoS) GetSnapshot(chain consensus.ChainReader, header *types.Header) (*utils.PublicApiSnapshot, error) { func (x *XDPoS) GetSnapshot(chain consensus.ChainReader, header *types.Header) (*utils.PublicApiSnapshot, error) {
switch x.config.BlockConsensusVersion(header.Number, header.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(header.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
sp, err := x.EngineV2.GetSnapshot(chain, header) sp, err := x.EngineV2.GetSnapshot(chain, header)
if err != nil { if err != nil {
@ -473,7 +472,7 @@ func (x *XDPoS) GetSnapshot(chain consensus.ChainReader, header *types.Header) (
} }
func (x *XDPoS) GetAuthorisedSignersFromSnapshot(chain consensus.ChainReader, header *types.Header) ([]common.Address, error) { func (x *XDPoS) GetAuthorisedSignersFromSnapshot(chain consensus.ChainReader, header *types.Header) ([]common.Address, error) {
switch x.config.BlockConsensusVersion(header.Number, header.Extra, ExtraFieldCheck) { switch x.config.BlockConsensusVersion(header.Number) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
return x.EngineV2.GetSignersFromSnapshot(chain, header) return x.EngineV2.GetSignersFromSnapshot(chain, header)
default: // Default "v1" default: // Default "v1"
@ -482,7 +481,7 @@ func (x *XDPoS) GetAuthorisedSignersFromSnapshot(chain consensus.ChainReader, he
} }
func (x *XDPoS) FindParentBlockToAssign(chain consensus.ChainReader, currentBlock *types.Block) *types.Block { func (x *XDPoS) FindParentBlockToAssign(chain consensus.ChainReader, currentBlock *types.Block) *types.Block {
switch x.config.BlockConsensusVersion(currentBlock.Number(), currentBlock.Extra(), ExtraFieldCheck) { switch x.config.BlockConsensusVersion(currentBlock.Number()) {
case params.ConsensusEngineVersion2: case params.ConsensusEngineVersion2:
block := x.EngineV2.FindParentBlockToAssign(chain) block := x.EngineV2.FindParentBlockToAssign(chain)
if block == nil { if block == nil {
@ -547,8 +546,8 @@ func (x *XDPoS) GetCachedSigningTxs(hash common.Hash) ([]*types.Transaction, boo
} }
func (x *XDPoS) GetEpochSwitchInfoBetween(chain consensus.ChainReader, begin, end *types.Header) ([]*types.EpochSwitchInfo, error) { func (x *XDPoS) GetEpochSwitchInfoBetween(chain consensus.ChainReader, begin, end *types.Header) ([]*types.EpochSwitchInfo, error) {
beginBlockVersion := x.config.BlockConsensusVersion(begin.Number, begin.Extra, ExtraFieldCheck) beginBlockVersion := x.config.BlockConsensusVersion(begin.Number)
endBlockVersion := x.config.BlockConsensusVersion(end.Number, end.Extra, ExtraFieldCheck) endBlockVersion := x.config.BlockConsensusVersion(end.Number)
if beginBlockVersion == params.ConsensusEngineVersion2 && endBlockVersion == params.ConsensusEngineVersion2 { if beginBlockVersion == params.ConsensusEngineVersion2 && endBlockVersion == params.ConsensusEngineVersion2 {
return x.EngineV2.GetEpochSwitchInfoBetween(chain, begin, end) return x.EngineV2.GetEpochSwitchInfoBetween(chain, begin, end)
} }

View file

@ -86,11 +86,7 @@ func (b *EthAPIBackend) HeaderByNumber(ctx context.Context, blockNr rpc.BlockNum
return nil, errors.New("PoW does not support confirmed block lookup") return nil, errors.New("PoW does not support confirmed block lookup")
} }
current := b.eth.blockchain.CurrentBlock().Header() current := b.eth.blockchain.CurrentBlock().Header()
if b.eth.blockchain.Config().XDPoS.BlockConsensusVersion( if b.eth.blockchain.Config().XDPoS.BlockConsensusVersion(current.Number) == params.ConsensusEngineVersion2 {
current.Number,
current.Extra,
XDPoS.ExtraFieldCheck,
) == params.ConsensusEngineVersion2 {
// TO CHECK: why calling config in XDPoS is blocked (not field and method) // TO CHECK: why calling config in XDPoS is blocked (not field and method)
confirmedHash := b.XDPoS.EngineV2.GetLatestCommittedBlockInfo().Hash confirmedHash := b.XDPoS.EngineV2.GetLatestCommittedBlockInfo().Hash
return b.eth.blockchain.GetHeaderByHash(confirmedHash), nil return b.eth.blockchain.GetHeaderByHash(confirmedHash), nil
@ -140,11 +136,7 @@ func (b *EthAPIBackend) BlockByNumber(ctx context.Context, blockNr rpc.BlockNumb
return nil, errors.New("PoW does not support confirmed block lookup") return nil, errors.New("PoW does not support confirmed block lookup")
} }
current := b.eth.blockchain.CurrentBlock().Header() current := b.eth.blockchain.CurrentBlock().Header()
if b.eth.blockchain.Config().XDPoS.BlockConsensusVersion( if b.eth.blockchain.Config().XDPoS.BlockConsensusVersion(current.Number) == params.ConsensusEngineVersion2 {
current.Number,
current.Extra,
XDPoS.ExtraFieldCheck,
) == params.ConsensusEngineVersion2 {
// TO CHECK: why calling config in XDPoS is blocked (not field and method) // TO CHECK: why calling config in XDPoS is blocked (not field and method)
confirmedHash := b.XDPoS.EngineV2.GetLatestCommittedBlockInfo().Hash confirmedHash := b.XDPoS.EngineV2.GetLatestCommittedBlockInfo().Hash
return b.eth.blockchain.GetBlockByHash(confirmedHash), nil return b.eth.blockchain.GetBlockByHash(confirmedHash), nil

View file

@ -513,7 +513,7 @@ func (c *V2Config) Description(name string, indent int) string {
return banner return banner
} }
func (c *XDPoSConfig) BlockConsensusVersion(num *big.Int, extraByte []byte, extraCheck bool) string { func (c *XDPoSConfig) BlockConsensusVersion(num *big.Int) string {
if c.V2 != nil && c.V2.SwitchBlock != nil && num.Cmp(c.V2.SwitchBlock) > 0 { if c.V2 != nil && c.V2.SwitchBlock != nil && num.Cmp(c.V2.SwitchBlock) > 0 {
return ConsensusEngineVersion2 return ConsensusEngineVersion2
} }