aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/scripts/lib/idStore.js125
1 files changed, 61 insertions, 64 deletions
diff --git a/app/scripts/lib/idStore.js b/app/scripts/lib/idStore.js
index 8b7e3ad3b..26aa02ef7 100644
--- a/app/scripts/lib/idStore.js
+++ b/app/scripts/lib/idStore.js
@@ -3,7 +3,7 @@ const inherits = require('util').inherits
const async = require('async')
const ethUtil = require('ethereumjs-util')
const EthQuery = require('eth-query')
-const KeyStore = require('eth-lightwallet').keystore
+const LightwalletKeyStore = require('eth-lightwallet').keystore
const clone = require('clone')
const extend = require('xtend')
const createId = require('web3-provider-engine/util/random-id')
@@ -50,16 +50,15 @@ IdentityStore.prototype.createNewVault = function (password, entropy, cb) {
if (serializedKeystore) {
this.configManager.setData({})
}
-
this._createIdmgmt(password, null, entropy, (err) => {
if (err) return cb(err)
+ this._loadIdentities()
+ this._didUpdate()
this._autoFaucet()
this.configManager.setShowSeedWords(true)
var seedWords = this._idmgmt.getSeed()
-
-
cb(null, seedWords)
})
}
@@ -76,6 +75,7 @@ IdentityStore.prototype.recoverFromSeed = function (password, seed, cb) {
if (err) return cb(err)
this._loadIdentities()
+ this._didUpdate()
cb(null, this.getState())
})
}
@@ -125,7 +125,7 @@ IdentityStore.prototype.getSelectedAddress = function () {
return configManager.getSelectedAccount()
}
-IdentityStore.prototype.setSelectedAddressSync = function (address) {
+IdentityStore.prototype.setSelectedAddress = function (address, cb) {
const configManager = this.configManager
if (!address) {
var addresses = this._getAddresses()
@@ -133,12 +133,7 @@ IdentityStore.prototype.setSelectedAddressSync = function (address) {
}
configManager.setSelectedAccount(address)
- return address
-}
-
-IdentityStore.prototype.setSelectedAddress = function (address, cb) {
- const resultAddress = this.setSelectedAddressSync(address)
- if (cb) return cb(null, resultAddress)
+ if (cb) return cb(null, address)
}
IdentityStore.prototype.revealAccount = function (cb) {
@@ -148,7 +143,6 @@ IdentityStore.prototype.revealAccount = function (cb) {
keyStore.setDefaultHdDerivationPath(this.hdPathString)
keyStore.generateNewAddress(derivedKey, 1)
-
configManager.setWallet(keyStore.serialize())
this._loadIdentities()
@@ -399,6 +393,7 @@ IdentityStore.prototype._loadIdentities = function () {
var addresses = this._getAddresses()
addresses.forEach((address, i) => {
// // add to ethStore
+ this._ethStore.addAccount(address)
// add to identities
const defaultLabel = 'Wallet ' + (i + 1)
const nickname = configManager.nicknameForWallet(address)
@@ -417,6 +412,7 @@ IdentityStore.prototype.saveAccountLabel = function (account, label, cb) {
configManager.setNicknameForWallet(account, label)
this._loadIdentities()
cb(null, label)
+ this._didUpdate()
}
// mayBeFauceting
@@ -440,76 +436,77 @@ IdentityStore.prototype._mayBeFauceting = function (i) {
//
IdentityStore.prototype.tryPassword = function (password, cb) {
- var serializedKeystore = this.configManager.getWallet()
- var keyStore = KeyStore.deserialize(serializedKeystore)
-
- keyStore.keyFromPassword(password, (err, pwDerivedKey) => {
- if (err) return cb(err)
-
- const isCorrect = keyStore.isDerivedKeyCorrect(pwDerivedKey)
- if (!isCorrect) return cb(new Error('Lightwallet - password incorrect'))
-
- cb()
- })
+ this._createIdmgmt(password, null, null, cb)
}
-IdentityStore.prototype._createIdmgmt = function (password, seedPhrase, entropy, cb) {
- const opts = {
- password,
- hdPathString: this.hdPathString,
- }
-
- if (seedPhrase) {
- opts.seedPhrase = seedPhrase
- }
+IdentityStore.prototype._createIdmgmt = function (password, seed, entropy, cb) {
+ const configManager = this.configManager
- KeyStore.createVault(opts, (err, keyStore) => {
+ var keyStore = null
+ LightwalletKeyStore.deriveKeyFromPassword(password, (err, derivedKey) => {
if (err) return cb(err)
+ var serializedKeystore = configManager.getWallet()
+
+ if (seed) {
+ try {
+ keyStore = this._restoreFromSeed(password, seed, derivedKey)
+ } catch (e) {
+ return cb(e)
+ }
+
+ // returning user, recovering from storage
+ } else if (serializedKeystore) {
+ keyStore = LightwalletKeyStore.deserialize(serializedKeystore)
+ var isCorrect = keyStore.isDerivedKeyCorrect(derivedKey)
+ if (!isCorrect) return cb(new Error('Lightwallet - password incorrect'))
+
+ // first time here
+ } else {
+ keyStore = this._createFirstWallet(entropy, derivedKey)
+ }
this._keyStore = keyStore
-
- keyStore.keyFromPassword(password, (err, derivedKey) => {
- if (err) return cb(err)
-
- this.purgeCache()
-
- keyStore.addHdDerivationPath(this.hdPathString, derivedKey, {curve: 'secp256k1', purpose: 'sign'})
-
- this._createFirstWallet(derivedKey)
-
- this._idmgmt = new IdManagement({
- keyStore: keyStore,
- derivedKey: derivedKey,
- configManager: this.configManager,
- })
-
- this.setSelectedAddressSync()
-
- cb()
+ this._idmgmt = new IdManagement({
+ keyStore: keyStore,
+ derivedKey: derivedKey,
+ hdPathSTring: this.hdPathString,
+ configManager: this.configManager,
})
+
+ cb()
})
}
-IdentityStore.prototype.purgeCache = function () {
- this._getAddresses().forEach((address) => {
- this._ethStore.del(address)
- })
+IdentityStore.prototype._restoreFromSeed = function (password, seed, derivedKey) {
+ const configManager = this.configManager
+ var keyStore = new LightwalletKeyStore(seed, derivedKey, this.hdPathString)
+ keyStore.addHdDerivationPath(this.hdPathString, derivedKey, {curve: 'secp256k1', purpose: 'sign'})
+ keyStore.setDefaultHdDerivationPath(this.hdPathString)
+
+ keyStore.generateNewAddress(derivedKey, 1)
+ configManager.setWallet(keyStore.serialize())
+ if (global.METAMASK_DEBUG) {
+ console.log('restored from seed. saved to keystore')
+ }
+ return keyStore
}
-IdentityStore.prototype._createFirstWallet = function (derivedKey) {
- const keyStore = this._keyStore
+IdentityStore.prototype._createFirstWallet = function (entropy, derivedKey) {
+ const configManager = this.configManager
+ var secretSeed = LightwalletKeyStore.generateRandomSeed(entropy)
+ var keyStore = new LightwalletKeyStore(secretSeed, derivedKey, this.hdPathString)
+ keyStore.addHdDerivationPath(this.hdPathString, derivedKey, {curve: 'secp256k1', purpose: 'sign'})
keyStore.setDefaultHdDerivationPath(this.hdPathString)
+
keyStore.generateNewAddress(derivedKey, 1)
- this.configManager.setWallet(keyStore.serialize())
- var addresses = keyStore.getAddresses()
- this._ethStore.addAccount(ethUtil.addHexPrefix(addresses[0]))
+ configManager.setWallet(keyStore.serialize())
+ console.log('saved to keystore')
+ return keyStore
}
// get addresses and normalize address hexString
IdentityStore.prototype._getAddresses = function () {
- return this._keyStore.getAddresses(this.hdPathString).map((address) => {
- return ethUtil.addHexPrefix(address)
- })
+ return this._keyStore.getAddresses(this.hdPathString).map((address) => { return '0x' + address })
}
IdentityStore.prototype._autoFaucet = function () {