aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/metamask-controller.js
diff options
context:
space:
mode:
authorThomas Huang <tmashuang@users.noreply.github.com>2018-12-04 07:16:19 +0800
committerGitHub <noreply@github.com>2018-12-04 07:16:19 +0800
commited9bfdcebd5eed1d749f275f9d388ea0dd8f8275 (patch)
tree786b66ff556bc30a7f6136ba130e889408dcebb4 /app/scripts/metamask-controller.js
parentbe3619cd802536894097d81e7f31d38b0c2b3e9f (diff)
parent35670e926116b19e66931dace838d785adffac09 (diff)
downloadtangerine-wallet-browser-ed9bfdcebd5eed1d749f275f9d388ea0dd8f8275.tar
tangerine-wallet-browser-ed9bfdcebd5eed1d749f275f9d388ea0dd8f8275.tar.gz
tangerine-wallet-browser-ed9bfdcebd5eed1d749f275f9d388ea0dd8f8275.tar.bz2
tangerine-wallet-browser-ed9bfdcebd5eed1d749f275f9d388ea0dd8f8275.tar.lz
tangerine-wallet-browser-ed9bfdcebd5eed1d749f275f9d388ea0dd8f8275.tar.xz
tangerine-wallet-browser-ed9bfdcebd5eed1d749f275f9d388ea0dd8f8275.tar.zst
tangerine-wallet-browser-ed9bfdcebd5eed1d749f275f9d388ea0dd8f8275.zip
Merge pull request #5879 from MetaMask/develop
Version 5.1.0
Diffstat (limited to 'app/scripts/metamask-controller.js')
-rw-r--r--app/scripts/metamask-controller.js34
1 files changed, 25 insertions, 9 deletions
diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js
index f3cd078b8..fe806e47e 100644
--- a/app/scripts/metamask-controller.js
+++ b/app/scripts/metamask-controller.js
@@ -29,6 +29,7 @@ const ShapeShiftController = require('./controllers/shapeshift')
const AddressBookController = require('./controllers/address-book')
const InfuraController = require('./controllers/infura')
const BlacklistController = require('./controllers/blacklist')
+const CachedBalancesController = require('./controllers/cached-balances')
const RecentBlocksController = require('./controllers/recent-blocks')
const MessageManager = require('./lib/message-manager')
const PersonalMessageManager = require('./lib/personal-message-manager')
@@ -50,6 +51,7 @@ const seedPhraseVerifier = require('./lib/seed-phrase-verifier')
const log = require('loglevel')
const TrezorKeyring = require('eth-trezor-keyring')
const LedgerBridgeKeyring = require('eth-ledger-bridge-keyring')
+const HW_WALLETS_KEYRINGS = [TrezorKeyring.type, LedgerBridgeKeyring.type]
const EthQuery = require('eth-query')
const ethUtil = require('ethereumjs-util')
const sigUtil = require('eth-sig-util')
@@ -141,6 +143,12 @@ module.exports = class MetamaskController extends EventEmitter {
}
})
+ this.cachedBalancesController = new CachedBalancesController({
+ accountTracker: this.accountTracker,
+ getNetwork: this.networkController.getNetworkState.bind(this.networkController),
+ initState: initState.CachedBalancesController,
+ })
+
// ensure accountTracker updates balances after network change
this.networkController.on('networkDidChange', () => {
this.accountTracker._updateAccounts()
@@ -240,6 +248,7 @@ module.exports = class MetamaskController extends EventEmitter {
ShapeShiftController: this.shapeshiftController.store,
NetworkController: this.networkController.store,
InfuraController: this.infuraController.store,
+ CachedBalancesController: this.cachedBalancesController.store,
})
this.memStore = new ComposableObservableStore(null, {
@@ -247,6 +256,7 @@ module.exports = class MetamaskController extends EventEmitter {
AccountTracker: this.accountTracker.store,
TxController: this.txController.memStore,
BalancesController: this.balancesController.store,
+ CachedBalancesController: this.cachedBalancesController.store,
TokenRatesController: this.tokenRatesController.store,
MessageManager: this.messageManager.memStore,
PersonalMessageManager: this.personalMessageManager.memStore,
@@ -1025,16 +1035,22 @@ module.exports = class MetamaskController extends EventEmitter {
const cleanMsgParams = await this.typedMessageManager.approveMessage(msgParams)
const address = sigUtil.normalize(cleanMsgParams.from)
const keyring = await this.keyringController.getKeyringForAccount(address)
- const wallet = keyring._getWalletForAccount(address)
- const privKey = ethUtil.toBuffer(wallet.getPrivateKey())
let signature
- switch (version) {
- case 'V1':
- signature = sigUtil.signTypedDataLegacy(privKey, { data: cleanMsgParams.data })
- break
- case 'V3':
- signature = sigUtil.signTypedData(privKey, { data: JSON.parse(cleanMsgParams.data) })
- break
+ // HW Wallet keyrings don't expose private keys
+ // so we need to handle it separately
+ if (!HW_WALLETS_KEYRINGS.includes(keyring.type)) {
+ const wallet = keyring._getWalletForAccount(address)
+ const privKey = ethUtil.toBuffer(wallet.getPrivateKey())
+ switch (version) {
+ case 'V1':
+ signature = sigUtil.signTypedDataLegacy(privKey, { data: cleanMsgParams.data })
+ break
+ case 'V3':
+ signature = sigUtil.signTypedData(privKey, { data: JSON.parse(cleanMsgParams.data) })
+ break
+ }
+ } else {
+ signature = await keyring.signTypedData(address, cleanMsgParams.data)
}
this.typedMessageManager.setMsgStatusSigned(msgId, signature)
return this.getState()