if isOrphan, err := sm.chain.ValidateTx(tx); err != nil && err != core.ErrDustTx && !isOrphan {
sm.peers.addBanScore(peer.ID(), 10, 0, "fail on validate tx transaction")
}
+ sm.peers.markTx(peer.ID(), tx.ID)
+}
+
+func (sm *SyncManager) handleTransactionsMsg(peer *peer, msg *TransactionsMessage) {
+ txs, err := msg.GetTransactions()
+ if err != nil {
+ sm.peers.addBanScore(peer.ID(), 0, 20, "fail on get txs from message")
+ return
+ }
+
+ if len(txs) > txsMsgMaxTxNum {
+ sm.peers.addBanScore(peer.ID(), 20, 0, "exceeded the maximum tx number limit")
+ return
+ }
+
+ for _, tx := range txs {
+ if isOrphan, err := sm.chain.ValidateTx(tx); err != nil && !isOrphan {
+ sm.peers.addBanScore(peer.ID(), 10, 0, "fail on validate tx transaction")
+ return
+ }
+ sm.peers.markTx(peer.ID(), tx.ID)
+ }
}
func (sm *SyncManager) IsListening() bool {
case *TransactionMessage:
sm.handleTransactionMsg(peer, msg)
+ case *TransactionsMessage:
+ sm.handleTransactionsMsg(peer, msg)
+
case *MineBlockMessage:
sm.handleMineBlockMsg(peer, msg)