From 9455dcc150df0030306a38f83b6cea52aacb9a8c Mon Sep 17 00:00:00 2001 From: Jimmy Hu Date: Mon, 25 Feb 2019 18:27:34 +0800 Subject: 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 --- dex/app.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'dex/app.go') 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)) -- cgit v1.2.3