1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-23 18:41:38 +01:00
metamask-extension/app/scripts/lib/tx-gas-utils.js
Daijiro Wachi 43b1cb9100 Fix lint warnings
Fixed warnings:
```md
app/scripts/controllers/computed-balances.js
+ 35:27  warning  Missing space before function parentheses            space-before-function-paren
+ 41:14  warning  'address' is never reassigned. Use 'const' instead   prefer-const
+ 61:9   warning  'updater' is never reassigned. Use 'const' instead   prefer-const
+ 68:11  warning  'newState' is never reassigned. Use 'const' instead  prefer-const

app/scripts/controllers/network.js
+ 104:29  warning  Missing space before function parentheses  space-before-function-paren

app/scripts/lib/createLoggerMiddleware.js
+ 4:32  warning  Missing space before function parentheses      space-before-function-paren
+ 15:2   warning  Newline required at end of file but not found  eol-last

app/scripts/lib/createOriginMiddleware.js
+ 4:32  warning  Missing space before function parentheses      space-before-function-paren
+ 9:2   warning  Newline required at end of file but not found  eol-last

app/scripts/lib/createProviderMiddleware.js
+ 5:34  warning  Missing space before function parentheses      space-before-function-paren
+ 13:2   warning  Newline required at end of file but not found  eol-last

app/scripts/lib/events-proxy.js
+ 1:50  warning  Missing space before function parentheses      space-before-function-paren
+ 31:2   warning  Newline required at end of file but not found  eol-last

app/scripts/lib/nodeify.js
+ 2:22  warning  Missing space before function parentheses  space-before-function-paren
+ 2:24  warning  Missing space before opening brace         space-before-blocks
+ 5:18  warning  Missing space before function parentheses  space-before-function-paren
+ 5:20  warning  Missing space before opening brace         space-before-blocks

app/scripts/lib/pending-balance-calculator.js
+ 16:19  warning  Missing space before function parentheses  space-before-function-paren

app/scripts/lib/pending-tx-tracker.js
+ 85:11  warning  '||' should be placed at the end of the line  operator-linebreak
+ 87:11  warning  '||' should be placed at the end of the line  operator-linebreak
+ 88:11  warning  '||' should be placed at the end of the line  operator-linebreak
+ 90:11  warning  '||' should be placed at the end of the line  operator-linebreak
+ 91:11  warning  '||' should be placed at the end of the line  operator-linebreak

app/scripts/lib/port-stream.js
+ 3:22  warning  Missing space before function parentheses  space-before-function-paren
+ 3:24  warning  Missing space before opening brace         space-before-blocks

app/scripts/lib/tx-gas-utils.js
+ 84:2  warning  Newline required at end of file but not found  eol-last

app/scripts/lib/tx-state-history-helper.js
+ 12:37  warning  Missing space before function parentheses      space-before-function-paren
+ 23:30  warning  Missing space before function parentheses      space-before-function-paren
+ 30:23  warning  Missing space before function parentheses      space-before-function-paren
+ 35:28  warning  Missing space before function parentheses      space-before-function-paren
+ 41:2   warning  Newline required at end of file but not found  eol-last

app/scripts/lib/tx-state-manager.js
+ 94:13  warning  'value' is never reassigned. Use 'const' instead  prefer-const

ui/app/reducers.js
+ 45:7  warning  'state' is never reassigned. Use 'const' instead        prefer-const
+ 53:7  warning  'stateString' is never reassigned. Use 'const' instead  prefer-const

ui/lib/tx-helper.js
+ 27:2  warning  Newline required at end of file but not found  eol-last

ui/app/components/account-dropdowns.js
+ 163:1  warning  More than 2 blank lines not allowed  no-multiple-empty-lines

ui/app/components/menu-droppo.js
+ 22:7  warning  'style' is never reassigned. Use 'const' instead  prefer-const

ui/app/components/shapeshift-form.js
+ 135:11  warning  '&&' should be placed at the end of the line  operator-linebreak

ui/app/components/typed-message-renderer.js
+ 35:25  warning  Missing space before function parentheses      space-before-function-paren
+ 42:2   warning  Newline required at end of file but not found  eol-last

mascara/server/index.js
+ 11:42  warning  Use path.join() or path.resolve() instead of + to create paths  no-path-concat
+ 12:36  warning  Use path.join() or path.resolve() instead of + to create paths  no-path-concat
+ 13:33  warning  Use path.join() or path.resolve() instead of + to create paths  no-path-concat
+ 14:40  warning  Use path.join() or path.resolve() instead of + to create paths  no-path-concat
+ 20:29  warning  Use path.join() or path.resolve() instead of + to create paths  no-path-concat
+ 21:29  warning  Use path.join() or path.resolve() instead of + to create paths  no-path-concat
+ 26:40  warning  Use path.join() or path.resolve() instead of + to create paths  no-path-concat
```
2017-10-21 21:06:39 +02:00

85 lines
2.7 KiB
JavaScript

const EthQuery = require('ethjs-query')
const {
hexToBn,
BnMultiplyByFraction,
bnToHex,
} = require('./util')
/*
tx-utils are utility methods for Transaction manager
its passed ethquery
and used to do things like calculate gas of a tx.
*/
module.exports = class txProvideUtil {
constructor (provider) {
this.query = new EthQuery(provider)
}
async analyzeGasUsage (txMeta) {
const block = await this.query.getBlockByNumber('latest', true)
let estimatedGasHex
try {
estimatedGasHex = await this.estimateTxGas(txMeta, block.gasLimit)
} catch (err) {
if (err.message.includes('Transaction execution error.')) {
txMeta.simulationFails = true
return txMeta
}
}
this.setTxGas(txMeta, block.gasLimit, estimatedGasHex)
return txMeta
}
async estimateTxGas (txMeta, blockGasLimitHex) {
const txParams = txMeta.txParams
// check if gasLimit is already specified
txMeta.gasLimitSpecified = Boolean(txParams.gas)
// if not, fallback to block gasLimit
if (!txMeta.gasLimitSpecified) {
const blockGasLimitBN = hexToBn(blockGasLimitHex)
const saferGasLimitBN = BnMultiplyByFraction(blockGasLimitBN, 19, 20)
txParams.gas = bnToHex(saferGasLimitBN)
}
// run tx
return await this.query.estimateGas(txParams)
}
setTxGas (txMeta, blockGasLimitHex, estimatedGasHex) {
txMeta.estimatedGas = estimatedGasHex
const txParams = txMeta.txParams
// if gasLimit was specified and doesnt OOG,
// use original specified amount
if (txMeta.gasLimitSpecified) {
txMeta.estimatedGas = txParams.gas
return
}
// if gasLimit not originally specified,
// try adding an additional gas buffer to our estimation for safety
const recommendedGasHex = this.addGasBuffer(txMeta.estimatedGas, blockGasLimitHex)
txParams.gas = recommendedGasHex
return
}
addGasBuffer (initialGasLimitHex, blockGasLimitHex) {
const initialGasLimitBn = hexToBn(initialGasLimitHex)
const blockGasLimitBn = hexToBn(blockGasLimitHex)
const upperGasLimitBn = blockGasLimitBn.muln(0.9)
const bufferedGasLimitBn = initialGasLimitBn.muln(1.5)
// if initialGasLimit is above blockGasLimit, dont modify it
if (initialGasLimitBn.gt(upperGasLimitBn)) return bnToHex(initialGasLimitBn)
// if bufferedGasLimit is below blockGasLimit, use bufferedGasLimit
if (bufferedGasLimitBn.lt(upperGasLimitBn)) return bnToHex(bufferedGasLimitBn)
// otherwise use blockGasLimit
return bnToHex(upperGasLimitBn)
}
async validateTxParams (txParams) {
if (('value' in txParams) && txParams.value.indexOf('-') === 0) {
throw new Error(`Invalid transaction value of ${txParams.value} not a positive number.`)
}
}
}