aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/metamask-controller.js
diff options
context:
space:
mode:
authorkumavis <aaron@kumavis.me>2017-01-13 18:00:11 +0800
committerkumavis <aaron@kumavis.me>2017-01-13 18:00:11 +0800
commit29e83d71a82bfdbeadc9fbecfa97d73ef11fecfb (patch)
treeab5dc7ae04109c0b78a33db14637e71a267c6635 /app/scripts/metamask-controller.js
parentcc5e9aca4fa2a1e78c49be680405d93ac918bccf (diff)
downloadtangerine-wallet-browser-29e83d71a82bfdbeadc9fbecfa97d73ef11fecfb.tar
tangerine-wallet-browser-29e83d71a82bfdbeadc9fbecfa97d73ef11fecfb.tar.gz
tangerine-wallet-browser-29e83d71a82bfdbeadc9fbecfa97d73ef11fecfb.tar.bz2
tangerine-wallet-browser-29e83d71a82bfdbeadc9fbecfa97d73ef11fecfb.tar.lz
tangerine-wallet-browser-29e83d71a82bfdbeadc9fbecfa97d73ef11fecfb.tar.xz
tangerine-wallet-browser-29e83d71a82bfdbeadc9fbecfa97d73ef11fecfb.tar.zst
tangerine-wallet-browser-29e83d71a82bfdbeadc9fbecfa97d73ef11fecfb.zip
background - handle tx finalization in controllers instead of provider-engine
Diffstat (limited to 'app/scripts/metamask-controller.js')
-rw-r--r--app/scripts/metamask-controller.js55
1 files changed, 21 insertions, 34 deletions
diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js
index 1fc97e81d..67c35dd67 100644
--- a/app/scripts/metamask-controller.js
+++ b/app/scripts/metamask-controller.js
@@ -45,6 +45,7 @@ module.exports = class MetamaskController extends EventEmitter {
getSelectedAccount: this.configManager.getSelectedAccount.bind(this.configManager),
getGasMultiplier: this.configManager.getGasMultiplier.bind(this.configManager),
getNetwork: this.getStateNetwork.bind(this),
+ signTransaction: this.keyringController.signTransaction.bind(this.keyringController),
provider: this.provider,
blockTracker: this.provider,
})
@@ -188,26 +189,7 @@ module.exports = class MetamaskController extends EventEmitter {
cb(null, result)
},
// tx signing
- approveTransaction: this.newUnsignedTransaction.bind(this),
- 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)
- })
- },
-
+ processTransaction: (txParams, cb) => this.newUnapprovedTransaction(txParams, cb),
// msg signing
approveMessage: this.newUnsignedMessage.bind(this),
signMessage: (...args) => {
@@ -256,24 +238,29 @@ module.exports = class MetamaskController extends EventEmitter {
return publicConfigStore
}
- newUnsignedTransaction (txParams, onTxDoneCb) {
- const txManager = this.txManager
- const err = this.enforceTxValidations(txParams)
- if (err) return onTxDoneCb(err)
- txManager.addUnapprovedTransaction(txParams, onTxDoneCb, (err, txData) => {
- if (err) return onTxDoneCb(err)
+ newUnapprovedTransaction (txParams, cb) {
+ this.txManager.addUnapprovedTransaction(txParams, (err, txMeta) => {
+ if (err) return cb(err)
this.sendUpdate()
- this.opts.showUnapprovedTx(txParams, txData, onTxDoneCb)
+ this.opts.showUnapprovedTx(txMeta)
+ // listen for tx completion (success, fail)
+ this.txManager.once(`${txMeta.id}:submitted`, successHandler)
+ this.txManager.once(`${txMeta.id}:rejected`, failHandler)
+ function successHandler(rawTx) {
+ removeHandlers()
+ cb(null, rawTx)
+ }
+ function failHandler() {
+ removeHandlers()
+ cb(new Error('User denied message signature.'))
+ }
+ function removeHandlers() {
+ this.txManager.removeListener(`${txMeta.id}:submitted`, successHandler)
+ this.txManager.removeListener(`${txMeta.id}:rejected`, failHandler)
+ }
})
}
- enforceTxValidations (txParams) {
- if (('value' in txParams) && txParams.value.indexOf('-') === 0) {
- const msg = `Invalid transaction value of ${txParams.value} not a positive number.`
- return new Error(msg)
- }
- }
-
newUnsignedMessage (msgParams, cb) {
var state = this.keyringController.getState()
if (!state.isUnlocked) {