From 26fd016b63c4f3a15436d08dff9e94f72d2b4041 Mon Sep 17 00:00:00 2001 From: Kevin Serrano Date: Wed, 24 May 2017 16:17:03 -0700 Subject: [PATCH 1/3] Add new blockGasLimit property to txMeta object. --- app/scripts/lib/tx-utils.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/app/scripts/lib/tx-utils.js b/app/scripts/lib/tx-utils.js index 76b311653..8cf304d0b 100644 --- a/app/scripts/lib/tx-utils.js +++ b/app/scripts/lib/tx-utils.js @@ -21,19 +21,30 @@ module.exports = class txProviderUtils { this.query.getBlockByNumber('latest', true, (err, block) => { if (err) return cb(err) async.waterfall([ + self.setBlockGasLimit.bind(self, txMeta, block.gasLimit), self.estimateTxGas.bind(self, txMeta, block.gasLimit), self.setTxGas.bind(self, txMeta, block.gasLimit), ], cb) }) } + setBlockGasLimit (txMeta, blockGasLimitHex, cb) { + const blockGasLimitBN = hexToBn(blockGasLimitHex) + const saferGasLimitBN = blockGasLimitBN.muln(0.95) + txMeta.blockGasLimit = bnToHex(saferGasLimitBN) + cb() + return + } + estimateTxGas (txMeta, blockGasLimitHex, cb) { const txParams = txMeta.txParams // check if gasLimit is already specified txMeta.gasLimitSpecified = Boolean(txParams.gas) // if not, fallback to block gasLimit if (!txMeta.gasLimitSpecified) { - txParams.gas = blockGasLimitHex + const blockGasLimitBN = hexToBn(blockGasLimitHex) + const saferGasLimitBN = blockGasLimitBN.muln(0.95) + txParams.gas = bnToHex(saferGasLimitBN) } // run tx, see if it will OOG this.query.estimateGas(txParams, cb) From 51b5e2f6e74a91198816afee8ddaf468ab7ab583 Mon Sep 17 00:00:00 2001 From: Kevin Serrano Date: Wed, 24 May 2017 16:18:37 -0700 Subject: [PATCH 2/3] Add max gas limit to UI --- ui/app/components/pending-tx.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ui/app/components/pending-tx.js b/ui/app/components/pending-tx.js index d66d98dd5..b46f715bc 100644 --- a/ui/app/components/pending-tx.js +++ b/ui/app/components/pending-tx.js @@ -47,6 +47,7 @@ PendingTx.prototype.render = function () { // Gas const gas = txParams.gas const gasBn = hexToBn(gas) + const safeGasLimit = parseInt(txMeta.blockGasLimit) // Gas Price const gasPrice = txParams.gasPrice || MIN_GAS_PRICE_BN.toString(16) @@ -159,6 +160,7 @@ PendingTx.prototype.render = function () { scale: 0, // The hard lower limit for gas. min: MIN_GAS_LIMIT_BN.toString(10), + max: safeGasLimit, suffix: 'UNITS', style: { position: 'relative', From b95f2158bb3094f6a47236c2e0e4e0ae9b87bb91 Mon Sep 17 00:00:00 2001 From: Kevin Serrano Date: Wed, 24 May 2017 16:23:31 -0700 Subject: [PATCH 3/3] bump changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index aea0df1fa..caa87b697 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - Now when switching networks the extension does not restart - Cleanup decimal bugs in our gas inputs. - Fix bug where submit button was enabled for invalid gas inputs. +- Now enforce 95% of block's gasLimit to protect users. ## 3.7.0 2017-5-23