|
|
|
@ -276,7 +276,7 @@ func (self *ProtocolManager) handleMsg(p *peer) error { |
|
|
|
|
return errResp(ErrDecode, "block validation %v: %v", msg, err) |
|
|
|
|
} |
|
|
|
|
hash := request.Block.Hash() |
|
|
|
|
// Add the block hash as a known hash to the peer. This will later be used to detirmine
|
|
|
|
|
// Add the block hash as a known hash to the peer. This will later be used to determine
|
|
|
|
|
// who should receive this.
|
|
|
|
|
p.blockHashes.Add(hash) |
|
|
|
|
|
|
|
|
@ -296,7 +296,6 @@ func (self *ProtocolManager) handleMsg(p *peer) error { |
|
|
|
|
if self.chainman.HasBlock(hash) { |
|
|
|
|
break |
|
|
|
|
} |
|
|
|
|
/* XXX unsure about this */ |
|
|
|
|
if self.chainman.Td().Cmp(request.TD) > 0 && new(big.Int).Add(request.Block.Number(), big.NewInt(7)).Cmp(self.chainman.CurrentBlock().Number()) < 0 { |
|
|
|
|
glog.V(logger.Debug).Infof("[%s] dropped block %v due to low TD %v\n", p.id, request.Block.Number(), request.TD) |
|
|
|
|
break |
|
|
|
@ -305,14 +304,12 @@ func (self *ProtocolManager) handleMsg(p *peer) error { |
|
|
|
|
// Attempt to insert the newly received by checking if the parent exists.
|
|
|
|
|
// if the parent exists we process the block and propagate to our peers
|
|
|
|
|
// if the parent does not exists we delegate to the downloader.
|
|
|
|
|
// NOTE we can reduce chatter by dropping blocks with Td < currentTd
|
|
|
|
|
if self.chainman.HasBlock(request.Block.ParentHash()) { |
|
|
|
|
if err := self.chainman.InsertChain(types.Blocks{request.Block}); err != nil { |
|
|
|
|
// handle error
|
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
self.BroadcastBlock(hash, request.Block) |
|
|
|
|
//fmt.Println(request.Block.Hash().Hex(), "our calculated TD =", request.Block.Td, "their TD =", request.TD)
|
|
|
|
|
} else { |
|
|
|
|
// adding blocks is synchronous
|
|
|
|
|
go func() { |
|
|
|
@ -322,7 +319,6 @@ func (self *ProtocolManager) handleMsg(p *peer) error { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
self.BroadcastBlock(hash, request.Block) |
|
|
|
|
//fmt.Println(request.Block.Hash().Hex(), "our calculated TD =", request.Block.Td, "their TD =", request.TD)
|
|
|
|
|
}() |
|
|
|
|
} |
|
|
|
|
default: |
|
|
|
|