core: reduce max allowed queued txs per address

Transactions in the queue are now capped to a maximum of 200
transactions. This number is completely arbitrary.
This commit is contained in:
obscuren 2015-06-15 12:16:29 +02:00
parent 6d817e16c1
commit 21fa29111b
2 changed files with 30 additions and 0 deletions

View File

@ -1,6 +1,7 @@
package common package common
import ( import (
"fmt"
"math/big" "math/big"
"math/rand" "math/rand"
"reflect" "reflect"
@ -95,3 +96,13 @@ func (a *Address) Set(other Address) {
a[i] = v a[i] = v
} }
} }
// PP Pretty Prints a byte slice in the following format:
// hex(value[:4])...(hex[len(value)-4:])
func PP(value []byte) string {
if len(value) <= 8 {
return Bytes2Hex(value)
}
return fmt.Sprintf("%x...%x", value[:4], value[len(value)-4])
}

View File

@ -28,6 +28,10 @@ var (
ErrNegativeValue = errors.New("Negative value") ErrNegativeValue = errors.New("Negative value")
) )
const (
maxQueued = 200 // max limit of queued txs per address
)
type stateFn func() *state.StateDB type stateFn func() *state.StateDB
// TxPool contains all currently known transactions. Transactions // TxPool contains all currently known transactions. Transactions
@ -224,6 +228,21 @@ func (self *TxPool) queueTx(hash common.Hash, tx *types.Transaction) {
self.queue[from] = make(map[common.Hash]*types.Transaction) self.queue[from] = make(map[common.Hash]*types.Transaction)
} }
self.queue[from][hash] = tx self.queue[from][hash] = tx
if len(self.queue[from]) > maxQueued {
var (
worstHash common.Hash
worstNonce uint64
)
for hash, tx := range self.queue[from] {
if tx.Nonce() > worstNonce {
worstNonce = tx.Nonce()
worstHash = hash
}
}
glog.V(logger.Debug).Infof("Queued tx limit exceeded for %x. Removed worst nonce tx: %x\n", common.PP(from[:]), common.PP(worstHash[:]))
delete(self.queue[from], worstHash)
}
} }
// addTx will add a transaction to the pending (processable queue) list of transactions // addTx will add a transaction to the pending (processable queue) list of transactions