mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Merge pull request #1824 from MetaMask/tx-cont-fix
TransactionController & NetworkController fixes
This commit is contained in:
commit
0c73d6d852
@ -28,9 +28,9 @@ module.exports = class NetworkController extends EventEmitter {
|
||||
this._provider = provider
|
||||
}
|
||||
|
||||
initializeProvider (opts) {
|
||||
initializeProvider (opts, providerContructor = MetaMaskProvider) {
|
||||
this.providerInit = opts
|
||||
this._provider = MetaMaskProvider(opts)
|
||||
this._provider = providerContructor(opts)
|
||||
this._proxy = new Proxy(this._provider, {
|
||||
get: (obj, name) => {
|
||||
if (name === 'on') return this._on.bind(this)
|
||||
@ -38,6 +38,7 @@ module.exports = class NetworkController extends EventEmitter {
|
||||
},
|
||||
set: (obj, name, value) => {
|
||||
this._provider[name] = value
|
||||
return value
|
||||
},
|
||||
})
|
||||
this.provider.on('block', this._logBlock.bind(this))
|
||||
|
@ -458,7 +458,7 @@ module.exports = class TransactionController extends EventEmitter {
|
||||
}))
|
||||
}
|
||||
|
||||
async _resubmitTx (txMeta, cb) {
|
||||
async _resubmitTx (txMeta) {
|
||||
const address = txMeta.txParams.from
|
||||
const balance = this.ethStore.getState().accounts[address].balance
|
||||
if (!('retryCount' in txMeta)) txMeta.retryCount = 0
|
||||
@ -467,17 +467,17 @@ module.exports = class TransactionController extends EventEmitter {
|
||||
if (!this.txProviderUtils.sufficientBalance(txMeta.txParams, balance)) {
|
||||
const message = 'Insufficient balance.'
|
||||
this.setTxStatusFailed(txMeta.id, { message })
|
||||
cb()
|
||||
return log.error(message)
|
||||
log.error(message)
|
||||
return
|
||||
}
|
||||
|
||||
// Only auto-submit already-signed txs:
|
||||
if (!('rawTx' in txMeta)) return cb()
|
||||
if (!('rawTx' in txMeta)) return
|
||||
|
||||
// Increment a try counter.
|
||||
txMeta.retryCount++
|
||||
const rawTx = txMeta.rawTx
|
||||
return await this.txProviderUtils.publishTransaction(rawTx, cb)
|
||||
return await this.txProviderUtils.publishTransaction(rawTx)
|
||||
}
|
||||
|
||||
// checks the network for signed txs and
|
||||
|
@ -3,6 +3,9 @@ const NetworkController = require('../../app/scripts/controllers/network')
|
||||
|
||||
describe('# Network Controller', function () {
|
||||
let networkController
|
||||
const networkControllerProviderInit = {
|
||||
getAccounts: () => {},
|
||||
}
|
||||
|
||||
beforeEach(function () {
|
||||
networkController = new NetworkController({
|
||||
@ -10,26 +13,13 @@ describe('# Network Controller', function () {
|
||||
type: 'rinkeby',
|
||||
},
|
||||
})
|
||||
// stub out provider
|
||||
networkController._provider = new Proxy({}, {
|
||||
get: (obj, name) => {
|
||||
return () => {}
|
||||
},
|
||||
})
|
||||
networkController.providerInit = {
|
||||
getAccounts: () => {},
|
||||
}
|
||||
|
||||
networkController.ethQuery = new Proxy({}, {
|
||||
get: (obj, name) => {
|
||||
return () => {}
|
||||
},
|
||||
})
|
||||
networkController.initializeProvider(networkControllerProviderInit, dummyProviderConstructor)
|
||||
})
|
||||
describe('network', function () {
|
||||
describe('#provider', function () {
|
||||
it('provider should be updatable without reassignment', function () {
|
||||
networkController.initializeProvider(networkController.providerInit)
|
||||
networkController.initializeProvider(networkControllerProviderInit, dummyProviderConstructor)
|
||||
const provider = networkController.provider
|
||||
networkController._provider = {test: true}
|
||||
assert.ok(provider.test)
|
||||
@ -75,3 +65,19 @@ describe('# Network Controller', function () {
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
function dummyProviderConstructor() {
|
||||
return {
|
||||
// provider
|
||||
sendAsync: noop,
|
||||
// block tracker
|
||||
start: noop,
|
||||
stop: noop,
|
||||
on: noop,
|
||||
addListener: noop,
|
||||
once: noop,
|
||||
removeAllListeners: noop,
|
||||
}
|
||||
}
|
||||
|
||||
function noop() {}
|
@ -343,13 +343,17 @@ describe('Transaction Controller', function () {
|
||||
// Adding the fake tx:
|
||||
txController.addTx(clone(txMeta))
|
||||
|
||||
txController._resubmitTx(txMeta, function (err) {
|
||||
assert.ifError(err, 'should not throw an error')
|
||||
txController._resubmitTx(txMeta)
|
||||
.then(() => {
|
||||
const updatedMeta = txController.getTx(txMeta.id)
|
||||
assert.notEqual(updatedMeta.status, txMeta.status, 'status changed.')
|
||||
assert.equal(updatedMeta.status, 'failed', 'tx set to failed.')
|
||||
done()
|
||||
})
|
||||
.catch((err) => {
|
||||
assert.ifError(err, 'should not throw an error')
|
||||
done()
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
Loading…
Reference in New Issue
Block a user