Merge pull request #1494 from MetaMask/1472-gasceiling

Add Max GasLimit Ceiling
feature/default_network_editable
Dan Finlay 8 years ago committed by GitHub
commit 764806d211
  1. 1
      CHANGELOG.md
  2. 13
      app/scripts/lib/tx-utils.js
  3. 2
      ui/app/components/pending-tx.js

@ -5,6 +5,7 @@
- Now when switching networks the extension does not restart - Now when switching networks the extension does not restart
- Cleanup decimal bugs in our gas inputs. - Cleanup decimal bugs in our gas inputs.
- Fix bug where submit button was enabled for invalid 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 ## 3.7.0 2017-5-23

@ -21,19 +21,30 @@ module.exports = class txProviderUtils {
this.query.getBlockByNumber('latest', true, (err, block) => { this.query.getBlockByNumber('latest', true, (err, block) => {
if (err) return cb(err) if (err) return cb(err)
async.waterfall([ async.waterfall([
self.setBlockGasLimit.bind(self, txMeta, block.gasLimit),
self.estimateTxGas.bind(self, txMeta, block.gasLimit), self.estimateTxGas.bind(self, txMeta, block.gasLimit),
self.setTxGas.bind(self, txMeta, block.gasLimit), self.setTxGas.bind(self, txMeta, block.gasLimit),
], cb) ], 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) { estimateTxGas (txMeta, blockGasLimitHex, cb) {
const txParams = txMeta.txParams const txParams = txMeta.txParams
// check if gasLimit is already specified // check if gasLimit is already specified
txMeta.gasLimitSpecified = Boolean(txParams.gas) txMeta.gasLimitSpecified = Boolean(txParams.gas)
// if not, fallback to block gasLimit // if not, fallback to block gasLimit
if (!txMeta.gasLimitSpecified) { 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 // run tx, see if it will OOG
this.query.estimateGas(txParams, cb) this.query.estimateGas(txParams, cb)

@ -47,6 +47,7 @@ PendingTx.prototype.render = function () {
// Gas // Gas
const gas = txParams.gas const gas = txParams.gas
const gasBn = hexToBn(gas) const gasBn = hexToBn(gas)
const safeGasLimit = parseInt(txMeta.blockGasLimit)
// Gas Price // Gas Price
const gasPrice = txParams.gasPrice || MIN_GAS_PRICE_BN.toString(16) const gasPrice = txParams.gasPrice || MIN_GAS_PRICE_BN.toString(16)
@ -159,6 +160,7 @@ PendingTx.prototype.render = function () {
scale: 0, scale: 0,
// The hard lower limit for gas. // The hard lower limit for gas.
min: MIN_GAS_LIMIT_BN.toString(10), min: MIN_GAS_LIMIT_BN.toString(10),
max: safeGasLimit,
suffix: 'UNITS', suffix: 'UNITS',
style: { style: {
position: 'relative', position: 'relative',

Loading…
Cancel
Save