mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-20 10:52:25 +00:00
core: address comments
This commit is contained in:
parent
88a6dc8493
commit
9d7a4dbb14
1 changed files with 21 additions and 21 deletions
|
|
@ -622,7 +622,7 @@ func (bc *BlockChain) rewindHashHead(root common.Hash) (*types.Header, uint64) {
|
||||||
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
|
||||||
headBlock = bc.CurrentBlock() // Head block of the chain
|
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
|
||||||
|
|
@ -642,8 +642,8 @@ func (bc *BlockChain) rewindHashHead(root common.Hash) (*types.Header, uint64) {
|
||||||
// which is still acceptable.
|
// which is still acceptable.
|
||||||
if pivot != nil {
|
if pivot != nil {
|
||||||
limit = *pivot
|
limit = *pivot
|
||||||
} else if headBlock.Number.Uint64() > params.FullImmutabilityThreshold {
|
} else if head.Number.Uint64() > params.FullImmutabilityThreshold {
|
||||||
limit = headBlock.Number.Uint64() - params.FullImmutabilityThreshold
|
limit = head.Number.Uint64() - params.FullImmutabilityThreshold
|
||||||
}
|
}
|
||||||
for {
|
for {
|
||||||
logger := log.Trace
|
logger := log.Trace
|
||||||
|
|
@ -651,45 +651,45 @@ func (bc *BlockChain) rewindHashHead(root common.Hash) (*types.Header, uint64) {
|
||||||
logged = time.Now()
|
logged = time.Now()
|
||||||
logger = log.Info
|
logger = log.Info
|
||||||
}
|
}
|
||||||
logger("Block state missing, rewinding further", "number", headBlock.Number, "hash", headBlock.Hash(), "elapsed", common.PrettyDuration(time.Since(start)))
|
logger("Block state missing, rewinding further", "number", head.Number, "hash", head.Hash(), "elapsed", common.PrettyDuration(time.Since(start)))
|
||||||
|
|
||||||
// If a root threshold was requested but not yet crossed, check
|
// If a root threshold was requested but not yet crossed, check
|
||||||
if !beyondRoot && headBlock.Root == root {
|
if !beyondRoot && head.Root == root {
|
||||||
beyondRoot, rootNumber = true, headBlock.Number.Uint64()
|
beyondRoot, rootNumber = true, head.Number.Uint64()
|
||||||
}
|
}
|
||||||
// If the associated state is not reachable, continue searching
|
// If the associated state is not reachable, continue searching
|
||||||
// backwards until an available state is found.
|
// backwards until an available state is found.
|
||||||
if !bc.HasState(headBlock.Root) {
|
if !bc.HasState(head.Root) {
|
||||||
// If search limit is reached, return the genesis block as
|
// If search limit is reached, return the genesis block as
|
||||||
// the new chain head.
|
// the new chain head.
|
||||||
if headBlock.Number.Uint64() < limit {
|
if head.Number.Uint64() < limit {
|
||||||
log.Info("Rewinding limit is reached, aiming genesis", "number", headBlock.Number, "hash", headBlock.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 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(headBlock.ParentHash, headBlock.Number.Uint64()-1)
|
parent := bc.GetHeader(head.ParentHash, head.Number.Uint64()-1)
|
||||||
if parent == nil {
|
if parent == nil {
|
||||||
log.Error("Missing block in the middle, aiming genesis", "number", headBlock.Number.Uint64()-1, "hash", headBlock.ParentHash)
|
log.Error("Missing block in the middle, resetting to genesis", "number", head.Number.Uint64()-1, "hash", head.ParentHash)
|
||||||
return bc.genesisBlock.Header(), rootNumber
|
return bc.genesisBlock.Header(), rootNumber
|
||||||
}
|
}
|
||||||
headBlock = parent
|
head = parent
|
||||||
|
|
||||||
// If the genesis block is reached, stop searching.
|
// If the genesis block is reached, stop searching.
|
||||||
if headBlock.Number.Uint64() == 0 {
|
if head.Number.Uint64() == 0 {
|
||||||
log.Info("Genesis block is reached", "number", headBlock.Number, "hash", headBlock.Hash())
|
log.Info("Genesis block reached", "number", head.Number, "hash", head.Hash())
|
||||||
return headBlock, rootNumber
|
return head, rootNumber
|
||||||
}
|
}
|
||||||
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 has already
|
||||||
// been crossed. If not, continue rewinding.
|
// been crossed. If not, continue rewinding.
|
||||||
if beyondRoot || headBlock.Number.Uint64() == 0 {
|
if beyondRoot || head.Number.Uint64() == 0 {
|
||||||
log.Debug("Rewound to block with state", "number", headBlock.Number, "hash", headBlock.Hash())
|
log.Info("Rewound to block with state", "number", head.Number, "hash", head.Hash())
|
||||||
return headBlock, rootNumber
|
return head, rootNumber
|
||||||
}
|
}
|
||||||
log.Debug("Skipping block with threshold state", "number", headBlock.Number, "hash", headBlock.Hash(), "root", headBlock.Root)
|
log.Debug("Skipping block with threshold state", "number", head.Number, "hash", head.Hash(), "root", head.Root)
|
||||||
headBlock = bc.GetHeader(headBlock.ParentHash, headBlock.Number.Uint64()-1) // Keep rewinding
|
head = bc.GetHeader(head.ParentHash, head.Number.Uint64()-1) // Keep rewinding
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -733,7 +733,7 @@ func (bc *BlockChain) rewindPathHead(root common.Hash) (*types.Header, uint64) {
|
||||||
// state before or at the pivot block, prevent endless rewinding
|
// state before or at the pivot block, prevent endless rewinding
|
||||||
// towards the genesis just in case.
|
// towards the genesis just in case.
|
||||||
if pivot != nil && *pivot >= headBlock.Number.Uint64() {
|
if pivot != nil && *pivot >= headBlock.Number.Uint64() {
|
||||||
log.Info("Pivot block is reached, aiming genesis", "number", headBlock.Number, "hash", headBlock.Hash())
|
log.Info("Pivot block reached, resetting to genesis", "number", headBlock.Number, "hash", headBlock.Hash())
|
||||||
return bc.genesisBlock.Header(), rootNumber
|
return bc.genesisBlock.Header(), rootNumber
|
||||||
}
|
}
|
||||||
headBlock = bc.GetHeader(headBlock.ParentHash, headBlock.Number.Uint64()-1) // Keep rewinding
|
headBlock = bc.GetHeader(headBlock.ParentHash, headBlock.Number.Uint64()-1) // Keep rewinding
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue