mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-20 10:52:25 +00:00
core: fix broken tests
This commit is contained in:
parent
ad7ac99e70
commit
48bbb38c34
1 changed files with 14 additions and 16 deletions
|
|
@ -617,12 +617,11 @@ func (bc *BlockChain) SetSafe(header *types.Header) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// rewindPathHead implements the logic of rewindHead in the context of hash scheme.
|
// rewindPathHead implements the logic of rewindHead in the context of hash scheme.
|
||||||
func (bc *BlockChain) rewindHashHead(root common.Hash) (*types.Header, uint64) {
|
func (bc *BlockChain) rewindHashHead(head *types.Header, root common.Hash) (*types.Header, uint64) {
|
||||||
var (
|
var (
|
||||||
limit uint64 // The oldest block that will be searched for this rewinding
|
limit uint64 // The oldest block that will be searched for this rewinding
|
||||||
beyondRoot = root == common.Hash{} // Flag whether we're beyond the requested root (no root, always true)
|
beyondRoot = root == common.Hash{} // Flag whether we're beyond the requested root (no root, always true)
|
||||||
pivot = rawdb.ReadLastPivotNumber(bc.db) // Associated block number of pivot point state
|
pivot = rawdb.ReadLastPivotNumber(bc.db) // Associated block number of pivot point state
|
||||||
head = bc.CurrentBlock() // Head block of the chain
|
|
||||||
rootNumber uint64 // Associated block number of requested root
|
rootNumber uint64 // Associated block number of requested root
|
||||||
|
|
||||||
start = time.Now() // Timestamp the rewinding is restarted
|
start = time.Now() // Timestamp the rewinding is restarted
|
||||||
|
|
@ -657,15 +656,15 @@ func (bc *BlockChain) rewindHashHead(root common.Hash) (*types.Header, uint64) {
|
||||||
if !beyondRoot && head.Root == root {
|
if !beyondRoot && head.Root == root {
|
||||||
beyondRoot, rootNumber = true, head.Number.Uint64()
|
beyondRoot, rootNumber = true, head.Number.Uint64()
|
||||||
}
|
}
|
||||||
// If the associated state is not reachable, continue searching
|
// If search limit is reached, return the genesis block as the
|
||||||
// backwards until an available state is found.
|
// new chain head.
|
||||||
if !bc.HasState(head.Root) {
|
if head.Number.Uint64() < limit {
|
||||||
// If search limit is reached, return the genesis block as
|
|
||||||
// the new chain head.
|
|
||||||
if head.Number.Uint64() <= limit {
|
|
||||||
log.Info("Rewinding limit reached, resetting to genesis", "number", head.Number, "hash", head.Hash(), "limit", limit)
|
log.Info("Rewinding limit reached, resetting to genesis", "number", head.Number, "hash", head.Hash(), "limit", limit)
|
||||||
return bc.genesisBlock.Header(), rootNumber
|
return bc.genesisBlock.Header(), rootNumber
|
||||||
}
|
}
|
||||||
|
// If the associated state is not reachable, continue searching
|
||||||
|
// backwards until an available state is found.
|
||||||
|
if !bc.HasState(head.Root) {
|
||||||
// If the chain is gapped in the middle, return the genesis
|
// If the chain is gapped in the middle, return the genesis
|
||||||
// block as the new chain head.
|
// block as the new chain head.
|
||||||
parent := bc.GetHeader(head.ParentHash, head.Number.Uint64()-1)
|
parent := bc.GetHeader(head.ParentHash, head.Number.Uint64()-1)
|
||||||
|
|
@ -682,8 +681,8 @@ func (bc *BlockChain) rewindHashHead(root common.Hash) (*types.Header, uint64) {
|
||||||
}
|
}
|
||||||
continue // keep rewinding
|
continue // keep rewinding
|
||||||
}
|
}
|
||||||
// Once the available state is found, ensure that the requested root has already
|
// Once the available state is found, ensure that the requested root
|
||||||
// been crossed. If not, continue rewinding.
|
// has already been crossed. If not, continue rewinding.
|
||||||
if beyondRoot || head.Number.Uint64() == 0 {
|
if beyondRoot || head.Number.Uint64() == 0 {
|
||||||
log.Info("Rewound to block with state", "number", head.Number, "hash", head.Hash())
|
log.Info("Rewound to block with state", "number", head.Number, "hash", head.Hash())
|
||||||
return head, rootNumber
|
return head, rootNumber
|
||||||
|
|
@ -694,9 +693,8 @@ func (bc *BlockChain) rewindHashHead(root common.Hash) (*types.Header, uint64) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// rewindPathHead implements the logic of rewindHead in the context of path scheme.
|
// rewindPathHead implements the logic of rewindHead in the context of path scheme.
|
||||||
func (bc *BlockChain) rewindPathHead(root common.Hash) (*types.Header, uint64) {
|
func (bc *BlockChain) rewindPathHead(head *types.Header, root common.Hash) (*types.Header, uint64) {
|
||||||
var (
|
var (
|
||||||
head = bc.CurrentBlock() // Head block of the chain
|
|
||||||
pivot = rawdb.ReadLastPivotNumber(bc.db) // Associated block number of pivot block
|
pivot = rawdb.ReadLastPivotNumber(bc.db) // Associated block number of pivot block
|
||||||
rootNumber uint64 // Associated block number of requested root
|
rootNumber uint64 // Associated block number of requested root
|
||||||
|
|
||||||
|
|
@ -777,11 +775,11 @@ func (bc *BlockChain) rewindPathHead(root common.Hash) (*types.Header, uint64) {
|
||||||
// representing the state corresponding to snapshot disk layer, is deemed impassable,
|
// representing the state corresponding to snapshot disk layer, is deemed impassable,
|
||||||
// then block number zero is returned, indicating that snapshot recovery is disabled
|
// then block number zero is returned, indicating that snapshot recovery is disabled
|
||||||
// and the whole snapshot should be auto-generated in case of head mismatch.
|
// and the whole snapshot should be auto-generated in case of head mismatch.
|
||||||
func (bc *BlockChain) rewindHead(root common.Hash) (*types.Header, uint64) {
|
func (bc *BlockChain) rewindHead(head *types.Header, root common.Hash) (*types.Header, uint64) {
|
||||||
if bc.triedb.Scheme() == rawdb.PathScheme {
|
if bc.triedb.Scheme() == rawdb.PathScheme {
|
||||||
return bc.rewindPathHead(root)
|
return bc.rewindPathHead(head, root)
|
||||||
}
|
}
|
||||||
return bc.rewindHashHead(root)
|
return bc.rewindHashHead(head, root)
|
||||||
}
|
}
|
||||||
|
|
||||||
// setHeadBeyondRoot rewinds the local chain to a new head with the extra condition
|
// setHeadBeyondRoot rewinds the local chain to a new head with the extra condition
|
||||||
|
|
@ -816,7 +814,7 @@ func (bc *BlockChain) setHeadBeyondRoot(head uint64, time uint64, root common.Ha
|
||||||
// chain reparation mechanism without deleting any data!
|
// chain reparation mechanism without deleting any data!
|
||||||
if currentBlock := bc.CurrentBlock(); currentBlock != nil && header.Number.Uint64() <= currentBlock.Number.Uint64() {
|
if currentBlock := bc.CurrentBlock(); currentBlock != nil && header.Number.Uint64() <= currentBlock.Number.Uint64() {
|
||||||
var newHeadBlock *types.Header
|
var newHeadBlock *types.Header
|
||||||
newHeadBlock, rootNumber = bc.rewindHead(root)
|
newHeadBlock, rootNumber = bc.rewindHead(header, root)
|
||||||
rawdb.WriteHeadBlockHash(db, newHeadBlock.Hash())
|
rawdb.WriteHeadBlockHash(db, newHeadBlock.Hash())
|
||||||
|
|
||||||
// Degrade the chain markers if they are explicitly reverted.
|
// Degrade the chain markers if they are explicitly reverted.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue