aboutsummaryrefslogtreecommitdiffstats
path: root/dex/app.go
diff options
context:
space:
mode:
authorJimmy Hu <jimmy.hu@dexon.org>2019-02-25 18:27:34 +0800
committerWei-Ning Huang <w@dexon.org>2019-04-09 21:32:57 +0800
commit5832a21db625bfa98a3b7909bb6996dd1fd2e4d3 (patch)
tree73f5de74fa6aa753349f00e11e989533de8a45ef /dex/app.go
parent6e66efc9f69d59a011215f88a0de03508d9c56ab (diff)
downloaddexon-5832a21db625bfa98a3b7909bb6996dd1fd2e4d3.tar
dexon-5832a21db625bfa98a3b7909bb6996dd1fd2e4d3.tar.gz
dexon-5832a21db625bfa98a3b7909bb6996dd1fd2e4d3.tar.bz2
dexon-5832a21db625bfa98a3b7909bb6996dd1fd2e4d3.tar.lz
dexon-5832a21db625bfa98a3b7909bb6996dd1fd2e4d3.tar.xz
dexon-5832a21db625bfa98a3b7909bb6996dd1fd2e4d3.tar.zst
dexon-5832a21db625bfa98a3b7909bb6996dd1fd2e4d3.zip
core: Fixed gas price (#205)
* core/vm: update abi * core/vm: add MinGasPrice to gov * params: Add MinGasPrice to Config * dex: SuggestPrice from Governance * test: add minGasPrice to genesis.json * core: check underpriced tx * dex: verify with gas price
Diffstat (limited to 'dex/app.go')
-rw-r--r--dex/app.go16
1 files changed, 16 insertions, 0 deletions
diff --git a/dex/app.go b/dex/app.go
index d2bd02f0c..ab4e80058 100644
--- a/dex/app.go
+++ b/dex/app.go
@@ -124,6 +124,18 @@ func (d *DexconApp) validateNonce(txs types.Transactions) (map[common.Address]ui
return addressFirstNonce, nil
}
+// validateGasPrice checks if no gas price is lower than minGasPrice defined in
+// governance contract.
+func (d *DexconApp) validateGasPrice(txs types.Transactions, round uint64) bool {
+ minGasPrice := d.gov.MinGasPrice(round)
+ for _, tx := range txs {
+ if minGasPrice.Cmp(tx.GasPrice()) > 0 {
+ return false
+ }
+ }
+ return true
+}
+
// PreparePayload is called when consensus core is preparing payload for block.
func (d *DexconApp) PreparePayload(position coreTypes.Position) (payload []byte, err error) {
// softLimit limits the runtime of inner call to preparePayload.
@@ -410,6 +422,10 @@ func (d *DexconApp) VerifyBlock(block *coreTypes.Block) coreTypes.BlockVerifySta
log.Error("Validate nonce failed", "error", err)
return coreTypes.VerifyInvalidBlock
}
+ if !d.validateGasPrice(transactions, block.Position.Round) {
+ log.Error("Validate gas price failed")
+ return coreTypes.VerifyInvalidBlock
+ }
// Check if nonce is strictly increasing for every address.
chainID := big.NewInt(int64(block.Position.ChainID))