mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2024-11-26 19:42:23 +00:00
mempool: don't create new big.Int in tryAddSendersFee() if possible
Do a little less allocations.
This commit is contained in:
parent
fc7ea6217d
commit
83fc38ae3a
1 changed files with 18 additions and 12 deletions
|
@ -117,25 +117,30 @@ func (mp *Pool) tryAddSendersFee(tx *transaction.Transaction, feer Feer, needChe
|
||||||
senderFee.feeSum = big.NewInt(0)
|
senderFee.feeSum = big.NewInt(0)
|
||||||
mp.fees[tx.Sender()] = senderFee
|
mp.fees[tx.Sender()] = senderFee
|
||||||
}
|
}
|
||||||
if needCheck && checkBalance(tx, senderFee) != nil {
|
if needCheck {
|
||||||
return false
|
newFeeSum, err := checkBalance(tx, senderFee)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
senderFee.feeSum.Set(newFeeSum)
|
||||||
|
} else {
|
||||||
|
senderFee.feeSum.Add(senderFee.feeSum, big.NewInt(tx.SystemFee+tx.NetworkFee))
|
||||||
}
|
}
|
||||||
senderFee.feeSum.Add(senderFee.feeSum, big.NewInt(tx.SystemFee+tx.NetworkFee))
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// checkBalance returns nil in case when sender has enough GAS to pay for the
|
// checkBalance returns new cumulative fee balance for account or an error in
|
||||||
// transaction
|
// case sender doesn't have enough GAS to pay for the transaction.
|
||||||
func checkBalance(tx *transaction.Transaction, balance utilityBalanceAndFees) error {
|
func checkBalance(tx *transaction.Transaction, balance utilityBalanceAndFees) (*big.Int, error) {
|
||||||
txFee := big.NewInt(tx.SystemFee + tx.NetworkFee)
|
txFee := big.NewInt(tx.SystemFee + tx.NetworkFee)
|
||||||
if balance.balance.Cmp(txFee) < 0 {
|
if balance.balance.Cmp(txFee) < 0 {
|
||||||
return ErrInsufficientFunds
|
return nil, ErrInsufficientFunds
|
||||||
}
|
}
|
||||||
needFee := txFee.Add(txFee, balance.feeSum)
|
txFee.Add(txFee, balance.feeSum)
|
||||||
if balance.balance.Cmp(needFee) < 0 {
|
if balance.balance.Cmp(txFee) < 0 {
|
||||||
return ErrConflict
|
return nil, ErrConflict
|
||||||
}
|
}
|
||||||
return nil
|
return txFee, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add tries to add given transaction to the Pool.
|
// Add tries to add given transaction to the Pool.
|
||||||
|
@ -299,7 +304,8 @@ func (mp *Pool) checkTxConflicts(tx *transaction.Transaction, fee Feer) error {
|
||||||
senderFee.balance = fee.GetUtilityTokenBalance(tx.Sender())
|
senderFee.balance = fee.GetUtilityTokenBalance(tx.Sender())
|
||||||
senderFee.feeSum = big.NewInt(0)
|
senderFee.feeSum = big.NewInt(0)
|
||||||
}
|
}
|
||||||
return checkBalance(tx, senderFee)
|
_, err := checkBalance(tx, senderFee)
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verify checks if a Sender of tx is able to pay for it (and all the other
|
// Verify checks if a Sender of tx is able to pay for it (and all the other
|
||||||
|
|
Loading…
Reference in a new issue