From 08843fa1763723edec3f01b98dc2edbd9946d65d Mon Sep 17 00:00:00 2001 From: MestryOmkar Date: Mon, 10 Dec 2018 11:12:07 +0530 Subject: [PATCH] set min gas price for tx --- core/tx_pool.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/core/tx_pool.go b/core/tx_pool.go index 63dbf3ac9e..496f881787 100644 --- a/core/tx_pool.go +++ b/core/tx_pool.go @@ -81,7 +81,11 @@ var ( ErrZeroGasPrice = errors.New("zero gas price") + ErrUnderMinGasPrice = errors.New("under min gas price") + ErrDuplicateSpecialTransaction = errors.New("duplicate a special transaction") + + ErrMinDeploySMC = errors.New("smart contract creation cost is under allowance") ) var ( @@ -587,7 +591,7 @@ func (pool *TxPool) validateTx(tx *types.Transaction, local bool) error { } // Drop non-local transactions under our own minimal accepted gas price local = local || pool.locals.contains(from) // account may be local even if the transaction arrived from the network - if !local && tx.To() != nil && pool.gasPrice.Cmp(tx.GasPrice()) > 0 { + if !local && pool.gasPrice.Cmp(tx.GasPrice()) > 0 { if !tx.IsSpecialTransaction() || (pool.IsMasterNode != nil && !pool.IsMasterNode(from)) { return ErrUnderpriced } @@ -619,6 +623,16 @@ func (pool *TxPool) validateTx(tx *types.Transaction, local bool) error { if tx.GasPrice().Cmp(new(big.Int).SetInt64(0)) == 0 { return ErrZeroGasPrice } + + // under min gas price + if tx.GasPrice().Cmp(new(big.Int).SetInt64(common.MinGasPrice)) < 0 { + return ErrUnderMinGasPrice + } + } + + minGasDeploySMC := new(big.Int).Mul(new(big.Int).SetUint64(10), new(big.Int).SetUint64(params.Ether)) + if tx.To() == nil && (tx.Cost().Cmp(minGasDeploySMC) < 0 || tx.GasPrice().Cmp(new(big.Int).SetUint64(10000*params.Shannon)) < 0) { + return ErrMinDeploySMC } return nil @@ -1229,4 +1243,4 @@ func (as *accountSet) containsTx(tx *types.Transaction) bool { // add inserts a new address into the set to track. func (as *accountSet) add(addr common.Address) { as.accounts[addr] = struct{}{} -} +} \ No newline at end of file