@ -2,7 +2,6 @@ package core
import (
"bytes"
"errors"
"fmt"
"math/big"
"sync"
@ -217,44 +216,21 @@ func (sm *BlockProcessor) ProcessWithParent(block, parent *types.Block) (td *big
return
}
// Calculate the new total difficulty and sync back to the db
if td , ok : = sm . CalculateTD ( block ) ; ok {
// Calculate the td for this block
td = CalculateTD ( block , parent )
// Sync the current block's state to the database and cancelling out the deferred Undo
state . Sync ( )
// Set the block hashes for the current messages
state . Manifest ( ) . SetHash ( block . Hash ( ) )
messages := state . Manifest ( ) . Messages
messages = state . Manifest ( ) . Messages
// Reset the manifest XXX We need this?
state . Manifest ( ) . Reset ( )
// Remove transactions from the pool
sm . txpool . RemoveSet ( block . Transactions ( ) )
chainlogger . Infof ( "processed block #%d (%x...)\n" , header . Number , block . Hash ( ) [ 0 : 4 ] )
sm . txpool . RemoveSet ( block . Transactions ( ) )
return td , messages , nil
} else {
return nil , nil , errors . New ( "total diff failed" )
}
}
func ( sm * BlockProcessor ) CalculateTD ( block * types . Block ) ( * big . Int , bool ) {
uncleDiff := new ( big . Int )
for _ , uncle := range block . Uncles ( ) {
uncleDiff = uncleDiff . Add ( uncleDiff , uncle . Difficulty )
}
// TD(genesis_block) = 0 and TD(B) = TD(B.parent) + sum(u.difficulty for u in B.uncles) + B.difficulty
td := new ( big . Int )
td = td . Add ( sm . bc . Td ( ) , uncleDiff )
td = td . Add ( td , block . Header ( ) . Difficulty )
// The new TD will only be accepted if the new difficulty is
// is greater than the previous.
if td . Cmp ( sm . bc . Td ( ) ) > 0 {
return td , true
}
return nil , false
}
// Validates the current block. Returns an error if the block was invalid,