Skip to content

Commit

Permalink
Merge pull request #4840 from scsaba/transaction-notifications
Browse files Browse the repository at this point in the history
Transaction notifications
  • Loading branch information
danfinlay committed Jul 20, 2018
2 parents 5db00c7 + c11dea9 commit e094d4a
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 1 deletion.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
- Remove rejected transactions from transaction history
- Add Trezor Support
- Allow to remove accounts (Imported and Hardware Wallets)
- [#4840](https://github.com/MetaMask/metamask-extension/pull/4840): Now shows notifications when transactions are completed.

## 4.8.0 Thur Jun 14 2018

Expand Down
3 changes: 2 additions & 1 deletion app/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,8 @@
"activeTab",
"webRequest",
"*://*.eth/",
"*://*.test/"
"*://*.test/",
"notifications"
],
"web_accessible_resources": [
"inpage.js"
Expand Down
7 changes: 7 additions & 0 deletions app/scripts/metamask-controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,13 @@ module.exports = class MetamaskController extends EventEmitter {
})
this.txController.on('newUnapprovedTx', opts.showUnapprovedTx.bind(opts))

this.txController.on(`tx:status-update`, (txId, status) => {
if (status === 'confirmed' || status === 'failed') {
const txMeta = this.txController.txStateManager.getTx(txId)
this.platform.showTransactionNotification(txMeta)
}
})

// computed balances (accounting for pending transactions)
this.balancesController = new BalancesController({
accountTracker: this.accountTracker,
Expand Down
54 changes: 54 additions & 0 deletions app/scripts/platforms/extension.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const extension = require('extensionizer')
const explorerLink = require('etherscan-link').createExplorerLink

class ExtensionPlatform {

Expand Down Expand Up @@ -34,6 +35,59 @@ class ExtensionPlatform {
cb(e)
}
}

showTransactionNotification (txMeta) {

const status = txMeta.status
if (status === 'confirmed') {
this._showConfirmedTransaction(txMeta)
} else if (status === 'failed') {
this._showFailedTransaction(txMeta)
}
}

_showConfirmedTransaction (txMeta) {

this._subscribeToNotificationClicked()

const url = explorerLink(txMeta.hash, parseInt(txMeta.metamaskNetworkId))
const nonce = parseInt(txMeta.txParams.nonce, 16)

const title = 'Confirmed transaction'
const message = `Transaction ${nonce} confirmed! View on EtherScan`
this._showNotification(title, message, url)
}

_showFailedTransaction (txMeta) {

const nonce = parseInt(txMeta.txParams.nonce, 16)
const title = 'Failed transaction'
const message = `Transaction ${nonce} failed! ${txMeta.err.message}`
this._showNotification(title, message)
}

_showNotification (title, message, url) {
extension.notifications.create(
url,
{
'type': 'basic',
'title': title,
'iconUrl': extension.extension.getURL('../../images/icon-64.png'),
'message': message,
})
}

_subscribeToNotificationClicked () {
if (!extension.notifications.onClicked.hasListener(this._viewOnEtherScan)) {
extension.notifications.onClicked.addListener(this._viewOnEtherScan)
}
}

_viewOnEtherScan (txId) {
if (txId.startsWith('http://')) {
global.metamaskController.platform.openWindow({ url: txId })
}
}
}

module.exports = ExtensionPlatform

0 comments on commit e094d4a

Please sign in to comment.