// Keep track of transactions which return errors so they can be removed
var(
remove=set.New()
tcount=0
ignoredTransactors=set.New()
)
constpct=int64(90)
// calculate the minimal gas price the miner accepts when sorting out transactions.
minprice:=gasprice(self.gasPrice,pct)
for_,tx:=rangetransactions{
// We can skip err. It has already been validated in the tx pool
from,_:=tx.From()
// check if it falls within margin
iftx.GasPrice().Cmp(minprice)<0{
// ignore the transaction and transactor. We ignore the transactor
// because nonce will fail after ignoring this transaction so there's
// no point
ignoredTransactors.Add(from)
glog.V(logger.Info).Infof("transaction(%x) below gas price (<%d%% ask price). All sequential txs from this address(%x) will fail\n",tx.Hash().Bytes()[:4],pct,from[:4])
continue
}
// Move on to the next transaction when the transactor is in ignored transactions set
// This may occur when a transaction hits the gas limit. When a gas limit is hit and
// the transaction is processed (that could potentially be included in the block) it
// will throw a nonce error because the previous transaction hasn't been processed.
// Therefor we need to ignore any transaction after the ignored one.
// We can skip err. It has already been validated in the tx pool
from,_:=tx.From()
// check if it falls within margin
iftx.GasPrice().Cmp(self.gasPrice)<0{
// ignore the transaction and transactor. We ignore the transactor
// because nonce will fail after ignoring this transaction so there's
// no point
current.lowGasTransactors.Add(from)
glog.V(logger.Info).Infof("transaction(%x) below gas price (tx=%v ask=%v). All sequential txs from this address(%x) will be ignored\n",tx.Hash().Bytes()[:4],common.CurrencyToString(tx.GasPrice()),common.CurrencyToString(self.gasPrice),from[:4])
}
// Continue with the next transaction if the transaction sender is included in
// the low gas tx set. This will also remove the tx and all sequential transaction
// from this transactor
ifcurrent.lowGasTransactors.Has(from){
// add tx to the low gas set. This will be removed at the end of the run
// owned accounts are ignored
if!current.ownedAccounts.Has(from){
current.lowGasTxs=append(current.lowGasTxs,tx)
}
continue
}
// Move on to the next transaction when the transactor is in ignored transactions set
// This may occur when a transaction hits the gas limit. When a gas limit is hit and
// the transaction is processed (that could potentially be included in the block) it
// will throw a nonce error because the previous transaction hasn't been processed.
// Therefor we need to ignore any transaction after the ignored one.