diff --git a/chain/chain_manager.go b/chain/chain_manager.go index 60de377aa7..dd965e85bd 100644 --- a/chain/chain_manager.go +++ b/chain/chain_manager.go @@ -319,10 +319,7 @@ func (self *ChainManager) InsertChain(chain *BlockChain) { } } -func (self *ChainManager) TestChain(chain *BlockChain) (i int, err error) { - var ( - td *big.Int - ) +func (self *ChainManager) TestChain(chain *BlockChain) (td *big.Int, err error) { for e := chain.Front(); e != nil; e = e.Next() { var ( l = e.Value.(*link) @@ -355,9 +352,9 @@ func (self *ChainManager) TestChain(chain *BlockChain) (i int, err error) { } if td.Cmp(self.TD) <= 0 { - err = fmt.Errorf("incoming chain has a lower or equal TD (%v <= %v)", td, self.TD) + err = &TDError{td, self.TD} return } - return i, nil + return } diff --git a/chain/error.go b/chain/error.go index 204b8b8738..71bda8e7b9 100644 --- a/chain/error.go +++ b/chain/error.go @@ -114,3 +114,15 @@ func IsOutOfGasErr(err error) bool { return ok } + +type TDError struct { + a, b *big.Int +} + +func (self *TDError) Error() string { + return fmt.Sprintf("incoming chain has a lower or equal TD (%v <= %v)", self.a, self.b) +} +func IsTDError(e error) bool { + _, ok := err.(*TDError) + return ok +}