1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-22 18:00:18 +01:00

Asynced keyrings and started on controller

This commit is contained in:
Dan Finlay 2016-11-22 23:16:36 -08:00
parent ec8b0148f0
commit 2efab79f5b
3 changed files with 47 additions and 32 deletions

View File

@ -121,10 +121,13 @@ module.exports = class KeyringController extends EventEmitter {
this.password = password
const keyring = this.restoreKeyring(serialized)
this.keyrings.push(keyring)
this.configManager.setSelectedAccount(keyring.getAccounts()[0])
return this.persistAllKeyrings()
keyring.getAccounts()
.then((accounts) => {
this.configManager.setSelectedAccount(accounts[0])
return this.persistAllKeyrings()
})
}
return
return Promise.resolve()
})
}
@ -165,13 +168,18 @@ module.exports = class KeyringController extends EventEmitter {
placeSeedWords (cb) {
const firstKeyring = this.keyrings[0]
const seedWords = firstKeyring.serialize().mnemonic
this.configManager.setSeedWords(seedWords)
firstKeyring.serialize()
.then((serialized) => {
if (cb) {
cb()
}
this.emit('update')
const seedWords = serialized.mnemonic
this.configManager.setSeedWords(seedWords)
if (cb) {
cb()
}
this.emit('update')
})
}
submitPassword (password, cb) {
@ -259,13 +267,19 @@ module.exports = class KeyringController extends EventEmitter {
}
persistAllKeyrings () {
const serialized = this.keyrings.map((keyring) => {
return {
type: keyring.type,
data: keyring.serialize(),
}
Promise.all(this.keyrings.map((keyring) => {
return Promise.all([keyring.type, keyring.serialize()])
.then((serializedKeyringArray) => {
// Label the output values on each serialized Keyring:
return {
type: serializedKeyringArray[0],
data: serializedKeyringArray[1],
}
})
}))
.then((serializedKeyrings) => {
return this.encryptor.encrypt(this.password, serializedKeyrings)
})
return this.encryptor.encrypt(this.password, serialized)
.then((encryptedString) => {
this.configManager.setVault(encryptedString)
return true

View File

@ -21,10 +21,10 @@ class HdKeyring extends EventEmitter {
}
serialize () {
return {
return Promise.resolve({
mnemonic: this.mnemonic,
numberOfAccounts: this.wallets.length,
}
})
}
deserialize (opts = {}) {
@ -40,6 +40,8 @@ class HdKeyring extends EventEmitter {
if ('numberOfAccounts' in opts) {
this.addAccounts(opts.numberOfAccounts)
}
return Promise.resolve()
}
addAccounts (numberOfAccounts = 1) {
@ -55,11 +57,12 @@ class HdKeyring extends EventEmitter {
newWallets.push(wallet)
this.wallets.push(wallet)
}
return newWallets.map(w => w.getAddress().toString('hex'))
const hexWallets = newWallets.map(w => w.getAddress().toString('hex'))
return Promise.resolve(hexWallets)
}
getAccounts () {
return this.wallets.map(w => w.getAddress().toString('hex'))
return Promise.resolve(this.wallets.map(w => w.getAddress().toString('hex')))
}
// tx is an instance of the ethereumjs-transaction class.
@ -67,7 +70,7 @@ class HdKeyring extends EventEmitter {
const wallet = this._getWalletForAccount(address)
var privKey = wallet.getPrivateKey()
tx.sign(privKey)
return tx
return Promise.resolve(tx)
}
// For eth_sign, we need to sign transactions:
@ -77,12 +80,12 @@ class HdKeyring extends EventEmitter {
var privKey = wallet.getPrivateKey()
var msgSig = ethUtil.ecsign(new Buffer(message, 'hex'), privKey)
var rawMsgSig = ethUtil.bufferToHex(sigUtil.concatSig(msgSig.v, msgSig.r, msgSig.s))
return rawMsgSig
return Promise.resolve(rawMsgSig)
}
exportAccount (address) {
const wallet = this._getWalletForAccount(address)
return wallet.getPrivateKey().toString('hex')
return Promise.resolve(wallet.getPrivateKey().toString('hex'))
}

View File

@ -8,10 +8,6 @@ class SimpleKeyring extends EventEmitter {
/* PUBLIC METHODS */
static type () {
return type
}
constructor (opts) {
super()
this.type = type
@ -20,7 +16,7 @@ class SimpleKeyring extends EventEmitter {
}
serialize () {
return this.wallets.map(w => w.getPrivateKey().toString('hex'))
return Promise.resolve(this.wallets.map(w => w.getPrivateKey().toString('hex')))
}
deserialize (wallets = []) {
@ -29,6 +25,7 @@ class SimpleKeyring extends EventEmitter {
const wallet = Wallet.fromPrivateKey(b)
return wallet
})
return Promise.resolve()
}
addAccounts (n = 1) {
@ -37,11 +34,12 @@ class SimpleKeyring extends EventEmitter {
newWallets.push(Wallet.generate())
}
this.wallets = this.wallets.concat(newWallets)
return newWallets.map(w => w.getAddress().toString('hex'))
const hexWallets = newWallets.map(w => w.getAddress().toString('hex'))
return Promise.resolve(hexWallets)
}
getAccounts () {
return this.wallets.map(w => w.getAddress().toString('hex'))
return Promise.resolve(this.wallets.map(w => w.getAddress().toString('hex')))
}
// tx is an instance of the ethereumjs-transaction class.
@ -49,7 +47,7 @@ class SimpleKeyring extends EventEmitter {
const wallet = this._getWalletForAccount(address)
var privKey = wallet.getPrivateKey()
tx.sign(privKey)
return tx
return Promise.resolve(tx)
}
// For eth_sign, we need to sign transactions:
@ -59,12 +57,12 @@ class SimpleKeyring extends EventEmitter {
var privKey = wallet.getPrivateKey()
var msgSig = ethUtil.ecsign(new Buffer(message, 'hex'), privKey)
var rawMsgSig = ethUtil.bufferToHex(sigUtil.concatSig(msgSig.v, msgSig.r, msgSig.s))
return rawMsgSig
return Promise.resolve(rawMsgSig)
}
exportAccount (address) {
const wallet = this._getWalletForAccount(address)
return wallet.getPrivateKey().toString('hex')
return Promise.resolve(wallet.getPrivateKey().toString('hex'))
}