1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

Autofill gasPrice for retry attempts with either the recommended gasprice or a %10 bump (#5786)

* transactions - autofill gasPrice for retry attempts with either the recomened gasprice or a %10 bump

* lint
This commit is contained in:
Frankie 2018-11-26 09:29:14 -10:00 committed by GitHub
parent 97c1e6bcc1
commit 8198ec9ae1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 1 deletions

View File

@ -229,7 +229,16 @@ class TransactionController extends EventEmitter {
async retryTransaction (originalTxId) { async retryTransaction (originalTxId) {
const originalTxMeta = this.txStateManager.getTx(originalTxId) const originalTxMeta = this.txStateManager.getTx(originalTxId)
const { txParams } = originalTxMeta
const lastGasPrice = originalTxMeta.txParams.gasPrice const lastGasPrice = originalTxMeta.txParams.gasPrice
const suggestedGasPriceBN = new ethUtil.BN(ethUtil.stripHexPrefix(this.getGasPrice()), 16)
const lastGasPriceBN = new ethUtil.BN(ethUtil.stripHexPrefix(lastGasPrice), 16)
// essentially lastGasPrice * 1.1 but
// dont trust decimals so a round about way of doing that
const lastGasPriceBNBumped = lastGasPriceBN.mul(new ethUtil.BN(110, 10)).div(new ethUtil.BN(100, 10))
// transactions that are being retried require a >=%10 bump or the clients will throw an error
txParams.gasPrice = suggestedGasPriceBN.gt(lastGasPriceBNBumped) ? `0x${suggestedGasPriceBN.toString(16)}` : `0x${lastGasPriceBNBumped.toString(16)}`
const txMeta = this.txStateManager.generateTxMeta({ const txMeta = this.txStateManager.generateTxMeta({
txParams: originalTxMeta.txParams, txParams: originalTxMeta.txParams,
lastGasPrice, lastGasPrice,

View File

@ -28,6 +28,7 @@ describe('Transaction Controller', function () {
blockTrackerStub.getLatestBlock = noop blockTrackerStub.getLatestBlock = noop
txController = new TransactionController({ txController = new TransactionController({
provider, provider,
getGasPrice: function () { return '0xee6b2800' },
networkStore: new ObservableStore(currentNetworkId), networkStore: new ObservableStore(currentNetworkId),
txHistoryLimit: 10, txHistoryLimit: 10,
blockTracker: blockTrackerStub, blockTracker: blockTrackerStub,
@ -415,8 +416,9 @@ describe('Transaction Controller', function () {
}) })
describe('#retryTransaction', function () { describe('#retryTransaction', function () {
it('should create a new txMeta with the same txParams as the original one', function (done) { it('should create a new txMeta with the same txParams as the original one but with a higher gasPrice', function (done) {
const txParams = { const txParams = {
gasPrice: '0xee6b2800',
nonce: '0x00', nonce: '0x00',
from: '0xB09d8505E1F4EF1CeA089D47094f5DD3464083d4', from: '0xB09d8505E1F4EF1CeA089D47094f5DD3464083d4',
to: '0xB09d8505E1F4EF1CeA089D47094f5DD3464083d4', to: '0xB09d8505E1F4EF1CeA089D47094f5DD3464083d4',
@ -427,6 +429,7 @@ describe('Transaction Controller', function () {
]) ])
txController.retryTransaction(1) txController.retryTransaction(1)
.then((txMeta) => { .then((txMeta) => {
assert.equal(txMeta.txParams.gasPrice, '0x10642ac00', 'gasPrice should have a %10 gasPrice bump')
assert.equal(txMeta.txParams.nonce, txParams.nonce, 'nonce should be the same') assert.equal(txMeta.txParams.nonce, txParams.nonce, 'nonce should be the same')
assert.equal(txMeta.txParams.from, txParams.from, 'from should be the same') assert.equal(txMeta.txParams.from, txParams.from, 'from should be the same')
assert.equal(txMeta.txParams.to, txParams.to, 'to should be the same') assert.equal(txMeta.txParams.to, txParams.to, 'to should be the same')