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

Merge pull request #967 from MetaMask/fixTxManager

Fix tx manager
This commit is contained in:
Dan Finlay 2017-01-05 11:22:15 -08:00 committed by GitHub
commit 3727cad0c4
4 changed files with 34 additions and 32 deletions

View File

@ -4,6 +4,7 @@
- Remove certain non-essential permissions from certain builds.
- Add a check for when a tx is included in a block.
- Implement replay attack protections allowed by EIP 155.
- Fix bug where sometimes loading account data would fail by querying a future block.
## 2.14.1 2016-12-20

View File

@ -316,20 +316,16 @@ module.exports = class KeyringController extends EventEmitter {
//
// This method signs tx and returns a promise for
// TX Manager to update the state after signing
signTransaction (ethTx, selectedAddress, txId, cb) {
try {
signTransaction (ethTx, selectedAddress, txId) {
const address = normalize(selectedAddress)
return this.getKeyringForAccount(address)
.then((keyring) => {
return keyring.signTransaction(address, ethTx)
}).then((tx) => {
this.emit(`${txId}:signed`, {tx, txId, cb})
return {tx, txId}
})
} catch (e) {
cb(e)
}
}
// Add Unconfirmed Message
// @object msgParams
// @function cb

View File

@ -165,7 +165,6 @@ module.exports = class MetamaskController {
sendUpdate () {
this.getState()
.then((state) => {
this.listeners.forEach((remote) => {
remote.sendUpdate(state)
})
@ -185,10 +184,23 @@ module.exports = class MetamaskController {
},
// tx signing
approveTransaction: this.newUnsignedTransaction.bind(this),
signTransaction: (...args) => {
this.setupSigningListners(...args)
this.txManager.formatTxForSigining(...args)
signTransaction: (txParams, cb) => {
this.txManager.formatTxForSigining(txParams)
.then(({ethTx, address, txId}) => {
return this.keyringController.signTransaction(ethTx, address, txId)
})
.then(({tx, txId}) => {
return this.txManager.resolveSignedTransaction({tx, txId})
})
.then((rawTx) => {
cb(null, rawTx)
this.sendUpdate()
this.txManager.emit(`${txParams.metamaskId}:signingComplete`)
})
.catch((err) => {
console.error(err)
cb(err)
})
},
// msg signing
@ -266,13 +278,6 @@ module.exports = class MetamaskController {
})
}
setupSigningListners (txParams) {
var txId = txParams.metamaskId
// apply event listeners for signing and formating events
this.txManager.once(`${txId}:formatted`, this.keyringController.signTransaction.bind(this.keyringController))
this.keyringController.once(`${txId}:signed`, this.txManager.resolveSignedTransaction.bind(this.txManager))
}
enforceTxValidations (txParams) {
if (('value' in txParams) && txParams.value.indexOf('-') === 0) {
const msg = `Invalid transaction value of ${txParams.value} not a positive number.`
@ -453,7 +458,7 @@ module.exports = class MetamaskController {
return this.state.network
}
markAccountsFound(cb) {
markAccountsFound (cb) {
this.configManager.setLostAccounts([])
this.sendUpdate()
cb(null, this.getState())

View File

@ -128,7 +128,7 @@ module.exports = class TransactionManager extends EventEmitter {
approveTransaction (txId, cb = warn) {
this.setTxStatusSigned(txId)
cb()
this.once(`${txId}:signingComplete`, cb)
}
cancelTransaction (txId, cb = warn) {
@ -137,7 +137,7 @@ module.exports = class TransactionManager extends EventEmitter {
}
// formats txParams so the keyringController can sign it
formatTxForSigining (txParams, cb) {
formatTxForSigining (txParams) {
var address = txParams.from
var metaTx = this.getTx(txParams.metamaskId)
var gasMultiplier = metaTx.gasMultiplier
@ -153,9 +153,8 @@ module.exports = class TransactionManager extends EventEmitter {
txParams.gasLimit = normalize(txParams.gasLimit || txParams.gas)
txParams.nonce = normalize(txParams.nonce)
const ethTx = new Transaction(txParams)
// listener is assigned in metamaskController
this.emit(`${txParams.metamaskId}:formatted`, ethTx, address, txParams.metamaskId, cb)
var txId = txParams.metamaskId
return Promise.resolve({ethTx, address, txId})
}
// receives a signed tx object and updates the tx hash
@ -167,7 +166,8 @@ module.exports = class TransactionManager extends EventEmitter {
metaTx.hash = txHash
this.updateTx(metaTx)
var rawTx = ethUtil.bufferToHex(tx.serialize())
cb(null, rawTx)
return Promise.resolve(rawTx)
}
/*