aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/scripts/background.js9
-rw-r--r--app/scripts/keyring-controller.js103
-rw-r--r--app/scripts/lib/message-manager.js150
-rw-r--r--app/scripts/metamask-controller.js62
-rw-r--r--app/scripts/transaction-manager.js2
-rw-r--r--package.json2
-rw-r--r--test/unit/actions/tx_test.js6
-rw-r--r--ui/app/account-detail.js6
-rw-r--r--ui/app/accounts/index.js10
-rw-r--r--ui/app/app.js4
-rw-r--r--ui/app/components/transaction-list-item-icon.js8
-rw-r--r--ui/app/components/transaction-list-item.js1
-rw-r--r--ui/app/components/transaction-list.js4
-rw-r--r--ui/app/conf-tx.js10
-rw-r--r--ui/app/css/index.css10
-rw-r--r--ui/app/reducers/app.js18
-rw-r--r--ui/app/reducers/metamask.js14
-rw-r--r--ui/example.js6
-rw-r--r--ui/index.js4
-rw-r--r--ui/lib/tx-helper.js6
20 files changed, 220 insertions, 215 deletions
diff --git a/app/scripts/background.js b/app/scripts/background.js
index da9c4f24b..2e5a992b9 100644
--- a/app/scripts/background.js
+++ b/app/scripts/background.js
@@ -8,7 +8,6 @@ const Migrator = require('./lib/migrator/')
const migrations = require('./migrations/')
const PortStream = require('./lib/port-stream.js')
const notification = require('./lib/notifications.js')
-const messageManager = require('./lib/message-manager')
const MetamaskController = require('./metamask-controller')
const extension = require('./lib/extension')
const firstTimeState = require('./first-time-state')
@@ -112,14 +111,14 @@ function setupController (initState) {
updateBadge()
controller.txManager.on('updateBadge', updateBadge)
+ controller.messageManager.on('updateBadge', updateBadge)
// plugin badge text
function updateBadge () {
var label = ''
var unapprovedTxCount = controller.txManager.unapprovedTxCount
- var unconfMsgs = messageManager.unconfirmedMsgs()
- var unconfMsgLen = Object.keys(unconfMsgs).length
- var count = unapprovedTxCount + unconfMsgLen
+ var unapprovedMsgCount = controller.messageManager.unapprovedMsgCount
+ var count = unapprovedTxCount + unapprovedMsgCount
if (count) {
label = String(count)
}
@@ -145,4 +144,4 @@ extension.runtime.onInstalled.addListener(function (details) {
if ((details.reason === 'install') && (!METAMASK_DEBUG)) {
extension.tabs.create({url: 'https://metamask.io/#how-it-works'})
}
-}) \ No newline at end of file
+})
diff --git a/app/scripts/keyring-controller.js b/app/scripts/keyring-controller.js
index 40cc975f9..5fbd731f3 100644
--- a/app/scripts/keyring-controller.js
+++ b/app/scripts/keyring-controller.js
@@ -5,11 +5,8 @@ const EventEmitter = require('events').EventEmitter
const ObservableStore = require('obs-store')
const filter = require('promise-filter')
const encryptor = require('browser-passworder')
-const createId = require('./lib/random-id')
const normalizeAddress = require('./lib/sig-util').normalize
-const messageManager = require('./lib/message-manager')
function noop () {}
-
// Keyrings:
const SimpleKeyring = require('./keyrings/simple')
const HdKeyring = require('./keyrings/hd')
@@ -18,7 +15,6 @@ const keyringTypes = [
HdKeyring,
]
-
class KeyringController extends EventEmitter {
// PUBLIC METHODS
@@ -38,9 +34,6 @@ class KeyringController extends EventEmitter {
this.keyringTypes = keyringTypes
this.keyrings = []
this.identities = {} // Essentially a name hash
-
- this._unconfMsgCbs = {}
-
this.getNetwork = opts.getNetwork
}
@@ -97,8 +90,6 @@ class KeyringController extends EventEmitter {
conversionRate: this.configManager.getConversionRate(),
conversionDate: this.configManager.getConversionDate(),
// messageManager
- unconfMsgs: messageManager.unconfirmedMsgs(),
- messages: messageManager.getMsgList(),
}
})
}
@@ -159,6 +150,17 @@ class KeyringController extends EventEmitter {
.then(this.fullUpdate.bind(this))
}
+ // ClearSeedWordCache
+ //
+ // returns Promise( @string currentSelectedAccount )
+ //
+ // Removes the current vault's seed words from the UI's state tree,
+ // ensuring they are only ever available in the background process.
+ clearSeedWordCache () {
+ this.configManager.setSeedWords(null)
+ return Promise.resolve(this.configManager.getSelectedAccount())
+ }
+
// Set Locked
// returns Promise( @object state )
//
@@ -209,8 +211,8 @@ class KeyringController extends EventEmitter {
this.keyrings.push(keyring)
return this.setupAccounts(accounts)
})
- .then(() => this.persistAllKeyrings())
- .then(() => this.fullUpdate())
+ .then(() => { return this.password })
+ .then(this.persistAllKeyrings.bind(this))
.then(() => {
return keyring
})
@@ -309,86 +311,19 @@ class KeyringController extends EventEmitter {
return keyring.signTransaction(fromAddress, ethTx)
})
}
- // Add Unconfirmed Message
- // @object msgParams
- // @function cb
- //
- // Does not call back, only emits an `update` event.
- //
- // Adds the given `msgParams` and `cb` to a local cache,
- // for displaying to a user for approval before signing or canceling.
- addUnconfirmedMessage (msgParams, cb) {
- // create txData obj with parameters and meta data
- var time = (new Date()).getTime()
- var msgId = createId()
- var msgData = {
- id: msgId,
- msgParams: msgParams,
- time: time,
- status: 'unconfirmed',
- }
- messageManager.addMsg(msgData)
- console.log('addUnconfirmedMessage:', msgData)
-
- // keep the cb around for after approval (requires user interaction)
- // This cb fires completion to the Dapp's write operation.
- this._unconfMsgCbs[msgId] = cb
-
- // signal update
- this.emit('update')
- return msgId
- }
-
- // Cancel Message
- // @string msgId
- // @function cb (optional)
- //
- // Calls back to cached `unconfMsgCb`.
- // Calls back to `cb` if provided.
- //
- // Forgets any messages matching `msgId`.
- cancelMessage (msgId, cb) {
- var approvalCb = this._unconfMsgCbs[msgId] || noop
-
- // reject tx
- approvalCb(null, false)
- // clean up
- messageManager.rejectMsg(msgId)
- delete this._unconfTxCbs[msgId]
-
- if (cb && typeof cb === 'function') {
- cb()
- }
- }
// Sign Message
// @object msgParams
- // @function cb
//
// returns Promise(@buffer rawSig)
- // calls back @function cb with @buffer rawSig
- // calls back cached Dapp's @function unconfMsgCb.
//
// Attempts to sign the provided @object msgParams.
- signMessage (msgParams, cb) {
- try {
- const msgId = msgParams.metamaskId
- delete msgParams.metamaskId
- const approvalCb = this._unconfMsgCbs[msgId] || noop
-
- const address = normalizeAddress(msgParams.from)
- return this.getKeyringForAccount(address)
- .then((keyring) => {
- return keyring.signMessage(address, msgParams.data)
- }).then((rawSig) => {
- cb(null, rawSig)
- approvalCb(null, true)
- messageManager.confirmMsg(msgId)
- return rawSig
- })
- } catch (e) {
- cb(e)
- }
+ signMessage (msgParams) {
+ const address = normalize(msgParams.from)
+ return this.getKeyringForAccount(address)
+ .then((keyring) => {
+ return keyring.signMessage(address, msgParams.data)
+ })
}
// PRIVATE METHODS
diff --git a/app/scripts/lib/message-manager.js b/app/scripts/lib/message-manager.js
index b609b820e..bc9a9e6c8 100644
--- a/app/scripts/lib/message-manager.js
+++ b/app/scripts/lib/message-manager.js
@@ -1,61 +1,115 @@
-module.exports = new MessageManager()
+const EventEmitter = require('events')
+const ObservableStore = require('obs-store')
+const createId = require('./random-id')
-function MessageManager (opts) {
- this.messages = []
-}
-MessageManager.prototype.getMsgList = function () {
- return this.messages
-}
+module.exports = class MessageManager extends EventEmitter{
+ constructor (opts) {
+ super()
+ this.memStore = new ObservableStore({ messages: [] })
+ }
-MessageManager.prototype.unconfirmedMsgs = function () {
- var messages = this.getMsgList()
- return messages.filter(msg => msg.status === 'unconfirmed')
- .reduce((result, msg) => { result[msg.id] = msg; return result }, {})
-}
+ getState() {
+ return {
+ unapprovedMsgs: this.unapprovedMsgs(),
+ messages: this.getMsgList(),
+ }
+ }
-MessageManager.prototype._saveMsgList = function (msgList) {
- this.messages = msgList
-}
+ getMsgList () {
+ return this.memStore.getState().messages
+ }
-MessageManager.prototype.addMsg = function (msg) {
- var messages = this.getMsgList()
- messages.push(msg)
- this._saveMsgList(messages)
-}
+ get unapprovedMsgCount () {
+ return Object.keys(this.unapprovedMsgs()).length
+ }
-MessageManager.prototype.getMsg = function (msgId) {
- var messages = this.getMsgList()
- var matching = messages.filter(msg => msg.id === msgId)
- return matching.length > 0 ? matching[0] : null
-}
+ unapprovedMsgs () {
+ let messages = this.getMsgList()
+ return messages.filter(msg => msg.status === 'unapproved')
+ .reduce((result, msg) => { result[msg.id] = msg; return result }, {})
+ }
-MessageManager.prototype.confirmMsg = function (msgId) {
- this._setMsgStatus(msgId, 'confirmed')
-}
+ _saveMsgList (msgList) {
+ this.emit('updateBadge')
+ let state = this.memStore.getState()
+ state.messages = msgList
+ this.memStore.putState(state)
+ }
-MessageManager.prototype.rejectMsg = function (msgId) {
- this._setMsgStatus(msgId, 'rejected')
-}
+ addUnapprovedMessage (msgParams) {
+ // create txData obj with parameters and meta data
+ var time = (new Date()).getTime()
+ var msgId = createId()
+ var msgData = {
+ id: msgId,
+ msgParams: msgParams,
+ time: time,
+ status: 'unapproved',
+ }
+ this.addMsg(msgData)
+ console.log('addUnapprovedMessage:', msgData)
-MessageManager.prototype._setMsgStatus = function (msgId, status) {
- var msg = this.getMsg(msgId)
- if (msg) msg.status = status
- this.updateMsg(msg)
-}
+ // keep the cb around for after approval (requires user interaction)
+ // This cb fires completion to the Dapp's write operation.
+
+ // signal update
+ this.emit('update')
+ return msgId
+ }
-MessageManager.prototype.updateMsg = function (msg) {
- var messages = this.getMsgList()
- var found, index
- messages.forEach((otherMsg, i) => {
- if (otherMsg.id === msg.id) {
- found = true
- index = i
+ addMsg (msg) {
+ let messages = this.getMsgList()
+ messages.push(msg)
+ this._saveMsgList(messages)
+ }
+
+ getMsg (msgId) {
+ let messages = this.getMsgList()
+ let matching = messages.filter(msg => msg.id === msgId)
+ return matching.length > 0 ? matching[0] : null
+ }
+
+ brodcastMessage (rawSig, msgId, status) {
+ this.emit(`${msgId}:finished`, {status, rawSig})
+ }
+
+ approveMessage (msgParams) {
+ this.setMessageApproved(msgParams.metamaskId)
+ return this.prepMsgForSigning(msgParams)
+ }
+
+ setMessageApproved (msgId) {
+ this._setMsgStatus(msgId, 'approved')
+ }
+ prepMsgForSigning (msgParams) {
+ delete msgParams.metamaskId
+ return Promise.resolve(msgParams)
+ }
+
+ cancelMessage (msgId) {
+ // reject tx
+ // clean up
+ this.brodcastMessage(null, msgId, 'rejected')
+ this.rejectMsg(msgId)
+ }
+
+ rejectMsg (msgId) {
+ this._setMsgStatus(msgId, 'rejected')
+ }
+
+ _setMsgStatus (msgId, status) {
+ let msg = this.getMsg(msgId)
+ if (msg) msg.status = status
+ this._updateMsg(msg)
+ }
+
+ _updateMsg (msg) {
+ let messages = this.getMsgList()
+ let index = messages.findIndex((message) => message.id === msg.id)
+ if (index !== -1) {
+ messages[index] = msg
}
- })
- if (found) {
- messages[index] = msg
+ this._saveMsgList(messages)
}
- this._saveMsgList(messages)
}
-
diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js
index b9a94b0c9..bab005af2 100644
--- a/app/scripts/metamask-controller.js
+++ b/app/scripts/metamask-controller.js
@@ -12,7 +12,7 @@ const MetaMaskProvider = require('web3-provider-engine/zero.js')
const setupMultiplex = require('./lib/stream-utils.js').setupMultiplex
const KeyringController = require('./keyring-controller')
const NoticeController = require('./notice-controller')
-const messageManager = require('./lib/message-manager')
+const MessageManager = require('./lib/message-manager')
const TxManager = require('./transaction-manager')
const ConfigManager = require('./lib/config-manager')
const extension = require('./lib/extension')
@@ -33,7 +33,7 @@ module.exports = class MetamaskController extends EventEmitter {
// observable state store
this.store = new ObservableStore(initState)
-
+
// config manager
this.configManager = new ConfigManager({
store: this.store,
@@ -48,7 +48,7 @@ module.exports = class MetamaskController extends EventEmitter {
// eth data query tools
this.ethQuery = new EthQuery(this.provider)
this.ethStore = new EthStore(this.provider)
-
+
// key mgmt
this.keyringController = new KeyringController({
initState: initState.KeyringController,
@@ -72,7 +72,7 @@ module.exports = class MetamaskController extends EventEmitter {
provider: this.provider,
blockTracker: this.provider,
})
-
+
// notices
this.noticeController = new NoticeController({
configManager: this.configManager,
@@ -82,7 +82,7 @@ module.exports = class MetamaskController extends EventEmitter {
// this.noticeController.startPolling()
this.getNetwork()
- this.messageManager = messageManager
+ this.messageManager = new MessageManager()
this.publicConfigStore = this.initPublicConfigStore()
this.checkTOSChange()
@@ -98,6 +98,7 @@ module.exports = class MetamaskController extends EventEmitter {
this.ethStore.on('update', this.sendUpdate.bind(this))
this.keyringController.on('update', this.sendUpdate.bind(this))
this.txManager.on('update', this.sendUpdate.bind(this))
+ this.messageManager.on('update', this.sendUpdate.bind(this))
this.keyringController.store.subscribe((state) => {
this.store.updateState({ KeyringController: state })
})
@@ -123,11 +124,7 @@ module.exports = class MetamaskController extends EventEmitter {
// tx signing
processTransaction: (txParams, cb) => this.newUnapprovedTransaction(txParams, cb),
// msg signing
- approveMessage: this.newUnsignedMessage.bind(this),
- signMessage: (...args) => {
- this.keyringController.signMessage(...args)
- this.sendUpdate()
- },
+ processMessage: this.newUnsignedMessage.bind(this),
})
return provider
}
@@ -166,6 +163,7 @@ module.exports = class MetamaskController extends EventEmitter {
this.ethStore.getState(),
this.configManager.getConfig(),
this.txManager.getState(),
+ this.messageManager.getState(),
keyringControllerState,
this.noticeController.getState(),
{
@@ -183,6 +181,7 @@ module.exports = class MetamaskController extends EventEmitter {
getApi () {
const keyringController = this.keyringController
const txManager = this.txManager
+ const messageManager = this.messageManager
const noticeController = this.noticeController
return {
@@ -202,7 +201,7 @@ module.exports = class MetamaskController extends EventEmitter {
buyEth: this.buyEth.bind(this),
// shapeshift
createShapeShiftTx: this.createShapeShiftTx.bind(this),
-
+
// primary HD keyring management
addNewAccount: this.addNewAccount.bind(this),
placeSeedWords: this.placeSeedWords.bind(this),
@@ -224,8 +223,8 @@ module.exports = class MetamaskController extends EventEmitter {
// signing methods
approveTransaction: txManager.approveTransaction.bind(txManager),
cancelTransaction: txManager.cancelTransaction.bind(txManager),
- signMessage: keyringController.signMessage.bind(keyringController),
- cancelMessage: keyringController.cancelMessage.bind(keyringController),
+ signMessage: this.signMessage.bind(this),
+ cancelMessage: messageManager.cancelMessage.bind(messageManager),
// notices
checkNotices: noticeController.updateNoticesList.bind(noticeController),
@@ -370,20 +369,35 @@ module.exports = class MetamaskController extends EventEmitter {
}
newUnsignedMessage (msgParams, cb) {
- var state = this.keyringController.getState()
- if (!state.isUnlocked) {
- this.keyringController.addUnconfirmedMessage(msgParams, cb)
- this.opts.unlockAccountMessage()
- } else {
- this.addUnconfirmedMessage(msgParams, cb)
+ this.keyringController.getState()
+ .then((state) => {
+ let msgId = this.messageManager.addUnapprovedMessage(msgParams)
this.sendUpdate()
- }
+ state.isUnlocked ? this.opts.unlockAccountMessage() : this.opts.showUnconfirmedMessage()
+ this.messageManager.once(`${msgId}:finished`, (data) => {
+ switch (data.status) {
+ case 'approved':
+ return cb(null, data.rawSig)
+ case 'rejected':
+ return cb(new Error('MetaMask Tx Signature: User denied transaction signature.'))
+ default:
+ return cb(new Error(`MetaMask Tx Signature: Unknown problem: ${JSON.stringify(msgParams)}`))
+ }
+ })
+ })
}
- addUnconfirmedMessage (msgParams, cb) {
- const keyringController = this.keyringController
- const msgId = keyringController.addUnconfirmedMessage(msgParams, cb)
- this.opts.showUnconfirmedMessage(msgParams, msgId)
+ signMessage (msgParams, cb) {
+ const msgId = msgParams.metamaskId
+ return this.messageManager.approveMessage(msgParams)
+ .then((cleanMsgParams) => {
+ return this.keyringController.signMessage(cleanMsgParams)
+ })
+ .then((rawSig) => {
+ this.messageManager.brodcastMessage(rawSig, msgId, 'approved')
+ }).then(() => {
+ cb()
+ }).catch((err) => cb(err))
}
diff --git a/app/scripts/transaction-manager.js b/app/scripts/transaction-manager.js
index 6d0121afd..153b8bc28 100644
--- a/app/scripts/transaction-manager.js
+++ b/app/scripts/transaction-manager.js
@@ -28,7 +28,7 @@ module.exports = class TransactionManager extends EventEmitter {
var selectedAccount = this.getSelectedAccount()
return {
transactions: this.getTxList(),
- unconfTxs: this.getUnapprovedTxList(),
+ unapprovedTxs: this.getUnapprovedTxList(),
selectedAccountTxList: this.getFilteredTxList({metamaskNetworkId: this.getNetwork(), from: selectedAccount}),
}
}
diff --git a/package.json b/package.json
index 2a46ab6bd..770318214 100644
--- a/package.json
+++ b/package.json
@@ -102,7 +102,7 @@
"valid-url": "^1.0.9",
"vreme": "^3.0.2",
"web3": "0.17.0-beta",
- "web3-provider-engine": "^8.4.0",
+ "web3-provider-engine": "^8.5.0",
"web3-stream-provider": "^2.0.6",
"xtend": "^4.0.1"
},
diff --git a/test/unit/actions/tx_test.js b/test/unit/actions/tx_test.js
index 1f06b1120..7ded5b1ef 100644
--- a/test/unit/actions/tx_test.js
+++ b/test/unit/actions/tx_test.js
@@ -31,7 +31,7 @@ describe('tx confirmation screen', function() {
},
},
metamask: {
- unconfTxs: {
+ unapprovedTxs: {
'1457634084250832': {
id: 1457634084250832,
status: "unconfirmed",
@@ -119,7 +119,7 @@ describe('tx confirmation screen', function() {
},
},
metamask: {
- unconfTxs: {
+ unapprovedTxs: {
'1457634084250832': {
id: 1457634084250832,
status: "unconfirmed",
@@ -162,7 +162,7 @@ describe('tx confirmation screen', function() {
});
function getUnconfirmedTxCount(state) {
- var txs = state.metamask.unconfTxs
+ var txs = state.metamask.unapprovedTxs
var count = Object.keys(txs).length
return count
}
diff --git a/ui/app/account-detail.js b/ui/app/account-detail.js
index 0bcfbcaab..72a2b23df 100644
--- a/ui/app/account-detail.js
+++ b/ui/app/account-detail.js
@@ -27,7 +27,7 @@ function mapStateToProps (state) {
address: state.metamask.selectedAccount,
accountDetail: state.appState.accountDetail,
network: state.metamask.network,
- unconfMsgs: valuesFor(state.metamask.unconfMsgs),
+ unapprovedMsgs: valuesFor(state.metamask.unapprovedMsgs),
shapeShiftTxList: state.metamask.shapeShiftTxList,
transactions: state.metamask.selectedAccountTxList || [],
}
@@ -246,11 +246,11 @@ AccountDetailScreen.prototype.subview = function () {
}
AccountDetailScreen.prototype.transactionList = function () {
- const {transactions, unconfMsgs, address, network, shapeShiftTxList } = this.props
+ const {transactions, unapprovedMsgs, address, network, shapeShiftTxList } = this.props
return h(TransactionList, {
transactions: transactions.sort((a, b) => b.time - a.time),
network,
- unconfMsgs,
+ unapprovedMsgs,
address,
shapeShiftTxList,
viewPendingTx: (txId) => {
diff --git a/ui/app/accounts/index.js b/ui/app/accounts/index.js
index e6f376735..db380cd39 100644
--- a/ui/app/accounts/index.js
+++ b/ui/app/accounts/index.js
@@ -10,15 +10,15 @@ const AccountListItem = require('./account-list-item')
module.exports = connect(mapStateToProps)(AccountsScreen)
function mapStateToProps (state) {
- const pendingTxs = valuesFor(state.metamask.unconfTxs)
+ const pendingTxs = valuesFor(state.metamask.unapprovedTxs)
.filter(tx => tx.txParams.metamaskNetworkId === state.metamask.network)
- const pendingMsgs = valuesFor(state.metamask.unconfMsgs)
+ const pendingMsgs = valuesFor(state.metamask.unapprovedMsgs)
const pending = pendingTxs.concat(pendingMsgs)
return {
accounts: state.metamask.accounts,
identities: state.metamask.identities,
- unconfTxs: state.metamask.unconfTxs,
+ unapprovedTxs: state.metamask.unapprovedTxs,
selectedAccount: state.metamask.selectedAccount,
scrollToBottom: state.appState.scrollToBottom,
pending,
@@ -35,7 +35,7 @@ AccountsScreen.prototype.render = function () {
const props = this.props
const { keyrings } = props
const identityList = valuesFor(props.identities)
- const unconfTxList = valuesFor(props.unconfTxs)
+ const unapprovedTxList = valuesFor(props.unapprovedTxs)
return (
@@ -107,7 +107,7 @@ AccountsScreen.prototype.render = function () {
h('hr.horizontal-line'),
]),
- unconfTxList.length ? (
+ unapprovedTxList.length ? (
h('.unconftx-link.flex-row.flex-center', {
onClick: this.navigateToConfTx.bind(this),
diff --git a/ui/app/app.js b/ui/app/app.js
index d8dedd397..3bc4897c8 100644
--- a/ui/app/app.js
+++ b/ui/app/app.js
@@ -52,8 +52,8 @@ function mapStateToProps (state) {
activeAddress: state.appState.activeAddress,
transForward: state.appState.transForward,
seedWords: state.metamask.seedWords,
- unconfTxs: state.metamask.unconfTxs,
- unconfMsgs: state.metamask.unconfMsgs,
+ unapprovedTxs: state.metamask.unapprovedTxs,
+ unapprovedMsgs: state.metamask.unapprovedMsgs,
menuOpen: state.appState.menuOpen,
network: state.metamask.network,
provider: state.metamask.provider,
diff --git a/ui/app/components/transaction-list-item-icon.js b/ui/app/components/transaction-list-item-icon.js
index 353401099..90b4ec094 100644
--- a/ui/app/components/transaction-list-item-icon.js
+++ b/ui/app/components/transaction-list-item-icon.js
@@ -15,15 +15,9 @@ TransactionIcon.prototype.render = function () {
const { transaction, txParams, isMsg } = this.props
switch (transaction.status) {
case 'unapproved':
- return h('.unapproved-tx', {
+ return h( !isMsg ? '.unapproved-tx-icon' : 'i.fa.fa-certificate.fa-lg', {
style: {
width: '24px',
- height: '24px',
- background: '#4dffff',
- border: 'solid',
- borderColor: '#AEAEAE',
- borderWidth: '0.5px',
- borderRadius: '13px',
},
})
diff --git a/ui/app/components/transaction-list-item.js b/ui/app/components/transaction-list-item.js
index 95e850264..44d2dc587 100644
--- a/ui/app/components/transaction-list-item.js
+++ b/ui/app/components/transaction-list-item.js
@@ -33,7 +33,6 @@ TransactionListItem.prototype.render = function () {
var isMsg = ('msgParams' in transaction)
var isTx = ('txParams' in transaction)
var isPending = transaction.status === 'unapproved'
-
let txParams
if (isTx) {
txParams = transaction.txParams
diff --git a/ui/app/components/transaction-list.js b/ui/app/components/transaction-list.js
index b055ca9d5..3ae953637 100644
--- a/ui/app/components/transaction-list.js
+++ b/ui/app/components/transaction-list.js
@@ -13,13 +13,13 @@ function TransactionList () {
}
TransactionList.prototype.render = function () {
- const { transactions, network, unconfMsgs } = this.props
+ const { transactions, network, unapprovedMsgs } = this.props
var shapeShiftTxList
if (network === '1') {
shapeShiftTxList = this.props.shapeShiftTxList
}
- const txsToRender = !shapeShiftTxList ? transactions.concat(unconfMsgs) : transactions.concat(unconfMsgs, shapeShiftTxList)
+ const txsToRender = !shapeShiftTxList ? transactions.concat(unapprovedMsgs) : transactions.concat(unapprovedMsgs, shapeShiftTxList)
.sort((a, b) => b.time - a.time)
return (
diff --git a/ui/app/conf-tx.js b/ui/app/conf-tx.js
index 1bd69f7d9..f4fea03e9 100644
--- a/ui/app/conf-tx.js
+++ b/ui/app/conf-tx.js
@@ -20,8 +20,8 @@ function mapStateToProps (state) {
identities: state.metamask.identities,
accounts: state.metamask.accounts,
selectedAccount: state.metamask.selectedAccount,
- unconfTxs: state.metamask.unconfTxs,
- unconfMsgs: state.metamask.unconfMsgs,
+ unapprovedTxs: state.metamask.unapprovedTxs,
+ unapprovedMsgs: state.metamask.unapprovedMsgs,
index: state.appState.currentView.context,
warning: state.appState.warning,
network: state.metamask.network,
@@ -39,10 +39,10 @@ ConfirmTxScreen.prototype.render = function () {
var network = state.network
var provider = state.provider
- var unconfTxs = state.unconfTxs
- var unconfMsgs = state.unconfMsgs
+ var unapprovedTxs = state.unapprovedTxs
+ var unapprovedMsgs = state.unapprovedMsgs
- var unconfTxList = txHelper(unconfTxs, unconfMsgs, network)
+ var unconfTxList = txHelper(unapprovedTxs, unapprovedMsgs, network)
var index = state.index !== undefined && unconfTxList[index] ? state.index : 0
var txData = unconfTxList[index] || {}
var txParams = txData.params || {}
diff --git a/ui/app/css/index.css b/ui/app/css/index.css
index 16e1dbe7e..c3beacef2 100644
--- a/ui/app/css/index.css
+++ b/ui/app/css/index.css
@@ -408,6 +408,16 @@ input.large-input {
.name-label{
}
+
+.unapproved-tx-icon {
+ height: 24px;
+ background: #4dffff;
+ border: solid;
+ borderColor: #AEAEAE;
+ borderWidth: 0.5px;
+ borderRadius: 13px;
+}
+
.edit-text {
height: 100%;
visibility: hidden;
diff --git a/ui/app/reducers/app.js b/ui/app/reducers/app.js
index 6a2c93f78..3b960e4c1 100644
--- a/ui/app/reducers/app.js
+++ b/ui/app/reducers/app.js
@@ -307,11 +307,11 @@ function reduceApp (state, action) {
})
case actions.COMPLETED_TX:
- var unconfTxs = state.metamask.unconfTxs
- var unconfMsgs = state.metamask.unconfMsgs
+ var unapprovedTxs = state.metamask.unapprovedTxs
+ var unapprovedMsgs = state.metamask.unapprovedMsgs
var network = state.metamask.network
- var unconfTxList = txHelper(unconfTxs, unconfMsgs, network)
+ var unconfTxList = txHelper(unapprovedTxs, unapprovedMsgs, network)
.filter(tx => tx !== tx.id)
if (unconfTxList && unconfTxList.length > 0) {
@@ -572,18 +572,18 @@ function reduceApp (state, action) {
}
function hasPendingTxs (state) {
- var unconfTxs = state.metamask.unconfTxs
- var unconfMsgs = state.metamask.unconfMsgs
+ var unapprovedTxs = state.metamask.unapprovedTxs
+ var unapprovedMsgs = state.metamask.unapprovedMsgs
var network = state.metamask.network
- var unconfTxList = txHelper(unconfTxs, unconfMsgs, network)
+ var unconfTxList = txHelper(unapprovedTxs, unapprovedMsgs, network)
return unconfTxList.length > 0
}
function indexForPending (state, txId) {
- var unconfTxs = state.metamask.unconfTxs
- var unconfMsgs = state.metamask.unconfMsgs
+ var unapprovedTxs = state.metamask.unapprovedTxs
+ var unapprovedMsgs = state.metamask.unapprovedMsgs
var network = state.metamask.network
- var unconfTxList = txHelper(unconfTxs, unconfMsgs, network)
+ var unconfTxList = txHelper(unapprovedTxs, unapprovedMsgs, network)
let idx
unconfTxList.forEach((tx, i) => {
if (tx.id === txId) {
diff --git a/ui/app/reducers/metamask.js b/ui/app/reducers/metamask.js
index 8679ab062..5cf249197 100644
--- a/ui/app/reducers/metamask.js
+++ b/ui/app/reducers/metamask.js
@@ -12,7 +12,7 @@ function reduceMetamask (state, action) {
isUnlocked: false,
rpcTarget: 'https://rawtestrpc.metamask.io/',
identities: {},
- unconfTxs: {},
+ unapprovedTxs: {},
currentFiat: 'USD',
conversionRate: 0,
conversionDate: 'N/A',
@@ -76,17 +76,17 @@ function reduceMetamask (state, action) {
case actions.COMPLETED_TX:
var stringId = String(action.id)
newState = extend(metamaskState, {
- unconfTxs: {},
- unconfMsgs: {},
+ unapprovedTxs: {},
+ unapprovedMsgs: {},
})
- for (const id in metamaskState.unconfTxs) {
+ for (const id in metamaskState.unapprovedTxs) {
if (id !== stringId) {
- newState.unconfTxs[id] = metamaskState.unconfTxs[id]
+ newState.unapprovedTxs[id] = metamaskState.unapprovedTxs[id]
}
}
- for (const id in metamaskState.unconfMsgs) {
+ for (const id in metamaskState.unapprovedMsgs) {
if (id !== stringId) {
- newState.unconfMsgs[id] = metamaskState.unconfMsgs[id]
+ newState.unapprovedMsgs[id] = metamaskState.unapprovedMsgs[id]
}
}
return newState
diff --git a/ui/example.js b/ui/example.js
index 888748c48..4627c0e9c 100644
--- a/ui/example.js
+++ b/ui/example.js
@@ -29,7 +29,7 @@ var identities = {
},
}
-var unconfTxs = {}
+var unapprovedTxs = {}
addUnconfTx({
from: '0x222462427bcc9133bb46e88bcbe39cd7ef0e7222',
to: '0x1113462427bcc9133bb46e88bcbe39cd7ef0e111',
@@ -45,7 +45,7 @@ addUnconfTx({
function addUnconfTx (txParams) {
var time = (new Date()).getTime()
var id = createRandomId()
- unconfTxs[id] = {
+ unapprovedTxs[id] = {
id: id,
txParams: txParams,
time: time,
@@ -59,7 +59,7 @@ function getState () {
return {
isUnlocked: isUnlocked,
identities: isUnlocked ? identities : {},
- unconfTxs: isUnlocked ? unconfTxs : {},
+ unapprovedTxs: isUnlocked ? unapprovedTxs : {},
selectedAccount: selectedAccount,
}
}
diff --git a/ui/index.js b/ui/index.js
index dedfd8c8c..8855064f6 100644
--- a/ui/index.js
+++ b/ui/index.js
@@ -32,8 +32,8 @@ function startApp (metamaskState, accountManager, opts) {
})
// if unconfirmed txs, start on txConf page
- var unconfirmedTxsAll = txHelper(metamaskState.unconfTxs, metamaskState.unconfMsgs, metamaskState.network)
- if (unconfirmedTxsAll.length > 0) {
+ var unapprovedTxsAll = txHelper(metamaskState.unapprovedTxs, metamaskState.unapprovedMsgs, metamaskState.network)
+ if (unapprovedTxsAll.length > 0) {
store.dispatch(actions.showConfTxPage())
}
diff --git a/ui/lib/tx-helper.js b/ui/lib/tx-helper.js
index c984bc9af..fa7a94cdc 100644
--- a/ui/lib/tx-helper.js
+++ b/ui/lib/tx-helper.js
@@ -1,8 +1,8 @@
const valuesFor = require('../app/util').valuesFor
-module.exports = function (unconfTxs, unconfMsgs, network) {
- var txValues = network ? valuesFor(unconfTxs).filter(tx => tx.txParams.metamaskNetworkId === network) : valuesFor(unconfTxs)
- var msgValues = valuesFor(unconfMsgs)
+module.exports = function (unapprovedTxs, unapprovedMsgs, network) {
+ var txValues = network ? valuesFor(unapprovedTxs).filter(tx => tx.txParams.metamaskNetworkId === network) : valuesFor(unapprovedTxs)
+ var msgValues = valuesFor(unapprovedMsgs)
var allValues = txValues.concat(msgValues)
return allValues.sort(tx => tx.time)
}