OSDN Git Service

Dev wallet sa (#1268)
authormuscle_boy <shenao.78@163.com>
Thu, 23 Aug 2018 06:39:07 +0000 (14:39 +0800)
committerPaladz <yzhu101@uottawa.ca>
Thu, 23 Aug 2018 06:39:07 +0000 (14:39 +0800)
* 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
netsync/peer.go

index 40e0085..1747a0e 100644 (file)
@@ -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 {
index 8a7a1c2..42dbeee 100644 (file)
@@ -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)
        }
 }