return false
}
-func (p *peer) addFilterAddresses(addresses [][]byte) {
+func (p *peer) addFilterAddress(address []byte) {
p.mtx.Lock()
defer p.mtx.Unlock()
+ if p.filterAdds.Size() >= maxFilterAddressCount {
+ log.Warn("the count of filter addresses is greater than limit")
+ return
+ }
+ if len(address) > maxFilterAddressSize {
+ log.Warn("the size of filter address is greater than limit")
+ return
+ }
+ p.filterAdds.Add(hex.EncodeToString(address))
+}
+
+func (p *peer) addFilterAddresses(addresses [][]byte) {
if !p.filterAdds.IsEmpty() {
p.filterAdds.Clear()
}
for _, address := range addresses {
- p.filterAdds.Add(hex.EncodeToString(address))
+ p.addFilterAddress(address)
}
}
if err := msg.setTxInfo(txHashes, txFlags, relatedTxs); err != nil {
return false, nil
}
-
+
statusHashes := types.GetStatusMerkleTreeProof(txStatuses.VerifyStatus, txFlags)
if err := msg.setStatusInfo(statusHashes, relatedStatuses); err != nil {
return false, nil
}
func (ps *peerSet) broadcastNewStatus(bestBlock, genesisBlock *types.Block) error {
+ bestBlockHash := bestBlock.Hash()
+ peers := ps.peersWithoutBlock(&bestBlockHash)
+
genesisHash := genesisBlock.Hash()
msg := NewStatusResponseMessage(&bestBlock.BlockHeader, &genesisHash)
- for _, peer := range ps.peers {
+ for _, peer := range peers {
if ok := peer.TrySend(BlockchainChannel, struct{ BlockchainMessage }{msg}); !ok {
ps.removePeer(peer.ID())
continue