From c6d196c0c289758e8311ee03cc82ced1c3118047 Mon Sep 17 00:00:00 2001 From: muscle_boy Date: Thu, 23 Aug 2018 14:39:07 +0800 Subject: [PATCH] Dev wallet sa (#1268) * the transaction output amout prohibit set zero * add network access control api * format import code style * refactor * code refactor * bug fix * the struct node_info add json field * estimate gas support multi-sign * add testcase of estimate gas * add testcase * bug fix * add test case * test case refactor * list-tx,list-address,list-utxo support partition * list-addresses list-tx list-utxo support pagging * refactor pagging * fix save asset * fix save external assets * remove blank * remove useless context * remove redudant web address config * fix bug * remove useless ctx * add spv message struct * remove redundant * refactor message struct * refactor message struct * add filter load message handler * add debug log * bug fix spv * bug fix * bug fix * refactor * refactor * add merkle proof * add merkle flags test case * add multiset * bug fix and refactor * bug fix * remove redundant code * bug fix * bug fix * format code * refactor merkle tree * refactor * refactor * fix bug for make test * bug fix * move merkle tree to bc level * NewMinedBlockMessage not broadcast to the spv node * refactor * refactor * refactor * merkle tree bug fix * merkle tree bug fix * limit the size of filter address * bug fix * refactor --- netsync/handle.go | 12 +++++------- netsync/peer.go | 16 ++++++++++++++-- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/netsync/handle.go b/netsync/handle.go index 40e0085b..1747a0e0 100644 --- a/netsync/handle.go +++ b/netsync/handle.go @@ -24,7 +24,9 @@ import ( ) const ( - maxTxChanSize = 10000 + maxTxChanSize = 10000 + maxFilterAddressSize = 50 + maxFilterAddressCount = 1000 ) // Chain is the interface for Bytom core @@ -167,7 +169,7 @@ func (sm *SyncManager) handleBlocksMsg(peer *peer, msg *BlocksMessage) { } func (sm *SyncManager) handleFilterAddMsg(peer *peer, msg *FilterAddMessage) { - peer.filterAdds.Add(hex.EncodeToString(msg.Address)) + peer.addFilterAddress(msg.Address) } func (sm *SyncManager) handleFilterClearMsg(peer *peer) { @@ -175,10 +177,6 @@ func (sm *SyncManager) handleFilterClearMsg(peer *peer) { } func (sm *SyncManager) handleFilterLoadMsg(peer *peer, msg *FilterLoadMessage) { - if len(msg.Addresses) == 0 { - log.Info("the addresses is empty from filter load message") - return - } peer.addFilterAddresses(msg.Addresses) } @@ -253,7 +251,7 @@ func (sm *SyncManager) handleGetHeadersMsg(peer *peer, msg *GetHeadersMessage) { func (sm *SyncManager) handleGetMerkleBlockMsg(peer *peer, msg *GetMerkleBlockMessage) { var err error - var block *types.Block + var block *types.Block if msg.Height != 0 { block, err = sm.chain.GetBlockByHeight(msg.Height) } else { diff --git a/netsync/peer.go b/netsync/peer.go index 8a7a1c2d..42dbeeef 100644 --- a/netsync/peer.go +++ b/netsync/peer.go @@ -87,15 +87,27 @@ func (p *peer) addBanScore(persistent, transient uint64, reason string) bool { 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) } } -- 2.11.0