aboutsummaryrefslogtreecommitdiffstats
path: root/ethchain/block_chain.go
diff options
context:
space:
mode:
Diffstat (limited to 'ethchain/block_chain.go')
-rw-r--r--ethchain/block_chain.go22
1 files changed, 14 insertions, 8 deletions
diff --git a/ethchain/block_chain.go b/ethchain/block_chain.go
index 8c03eec38..a8d9793d6 100644
--- a/ethchain/block_chain.go
+++ b/ethchain/block_chain.go
@@ -163,14 +163,20 @@ func (bc *BlockChain) FindCanonicalChain(blocks []*Block, commonBlockHash []byte
}
func (bc *BlockChain) ResetTillBlockHash(hash []byte) error {
lastBlock := bc.CurrentBlock
- returnTo := bc.GetBlock(hash)
-
- // TODO: REFACTOR TO FUNCTION, Used multiple times
- bc.CurrentBlock = returnTo
- bc.LastBlockHash = returnTo.Hash()
- info := bc.BlockInfo(returnTo)
- bc.LastBlockNumber = info.Number
- // END TODO
+ var returnTo *Block
+ // Reset to Genesis if that's all the origin there is.
+ if bytes.Compare(hash, bc.genesisBlock.Hash()) == 0 {
+ returnTo = bc.genesisBlock
+ bc.CurrentBlock = bc.genesisBlock
+ bc.LastBlockHash = bc.genesisBlock.Hash()
+ bc.LastBlockNumber = 1
+ } else {
+ returnTo = bc.GetBlock(hash)
+ bc.CurrentBlock = returnTo
+ bc.LastBlockHash = returnTo.Hash()
+ info := bc.BlockInfo(returnTo)
+ bc.LastBlockNumber = info.Number
+ }
bc.Ethereum.StateManager().PrepareDefault(returnTo)