aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/scripts/lib/idStore.js30
-rw-r--r--package.json7
-rw-r--r--test/index.js57
3 files changed, 70 insertions, 24 deletions
diff --git a/app/scripts/lib/idStore.js b/app/scripts/lib/idStore.js
index c4547b07f..1a3e7e06f 100644
--- a/app/scripts/lib/idStore.js
+++ b/app/scripts/lib/idStore.js
@@ -1,6 +1,7 @@
const EventEmitter = require('events').EventEmitter
const inherits = require('util').inherits
const Transaction = require('ethereumjs-tx')
+const Lightwallet = require('eth-lightwallet')
const LightwalletKeyStore = require('eth-lightwallet').keystore
const LightwalletSigner = require('eth-lightwallet').signing
const async = require('async')
@@ -14,23 +15,24 @@ module.exports = IdentityStore
inherits(IdentityStore, EventEmitter)
function IdentityStore(ethStore) {
- const self = this
- EventEmitter.call(self)
+ EventEmitter.call(this)
// we just use the ethStore to auto-add accounts
- self._ethStore = ethStore
+ this._ethStore = ethStore
// lightwallet key store
- self._keyStore = null
+ this._keyStore = null
// lightwallet wrapper
- self._idmgmt = null
+ this._idmgmt = null
+
+ this.hdPathString = "m/44'/60'/0'/0"
- self._currentState = {
+ this._currentState = {
selectedAddress: null,
identities: {},
unconfTxs: {},
}
// not part of serilized metamask state - only kept in memory
- self._unconfTxCbs = {}
+ this._unconfTxCbs = {}
}
//
@@ -122,7 +124,6 @@ IdentityStore.prototype.addUnconfirmedTransaction = function(txParams, cb){
status: 'unconfirmed',
}
self._currentState.unconfTxs[txId] = txData
- console.log('addUnconfirmedTransaction:', txData)
// keep the cb around for after approval (requires user interaction)
self._unconfTxCbs[txId] = cb
@@ -201,7 +202,7 @@ IdentityStore.prototype._loadIdentities = function(){
const self = this
if (!self._isUnlocked()) throw new Error('not unlocked')
// get addresses and normalize address hexString
- var addresses = self._keyStore.getAddresses().map(function(address){ return '0x'+address })
+ var addresses = self._keyStore.getAddresses(this.hdPathString).map(function(address){ return '0x'+address })
addresses.forEach(function(address){
// // add to ethStore
self._ethStore.addAccount(address)
@@ -257,7 +258,7 @@ IdentityStore.prototype._createIdmgmt = function(password, seed, entropy, cb){
IdentityStore.prototype._restoreFromSeed = function(keyStore, seed, derivedKey) {
keyStore = new LightwalletKeyStore(seed, derivedKey)
- keyStore.generateNewAddress(derivedKey, 3)
+ keyStore.generateNewAddress(derivedKey, 3, hdPathString)
window.localStorage['lightwallet'] = keyStore.serialize()
console.log('restored from seed. saved to keystore localStorage')
}
@@ -268,19 +269,20 @@ IdentityStore.prototype._loadFromLocalStorage = function(serializedKeystore, der
IdentityStore.prototype._createFirstWallet = function(entropy, derivedKey) {
var secretSeed = LightwalletKeyStore.generateRandomSeed(entropy)
- var keyStore = new LightwalletKeyStore(secretSeed, derivedKey)
- keyStore.generateNewAddress(derivedKey, 3)
+ var keyStore = new LightwalletKeyStore(secretSeed, derivedKey, this.hdPathString)
+ keyStore.generateNewAddress(derivedKey, 3, this.hdPathString)
window.localStorage['lightwallet'] = keyStore.serialize()
console.log('saved to keystore localStorage')
return keyStore
}
-function IdManagement( opts = { keyStore: null, derivedKey: null } ) {
+function IdManagement( opts = { keyStore: null, derivedKey: null, hdPathString: null } ) {
this.keyStore = opts.keyStore
this.derivedKey = opts.derivedKey
+ this.hdPathString = opts.hdPathString
this.getAddresses = function(){
- return keyStore.getAddresses().map(function(address){ return '0x'+address })
+ return keyStore.getAddresses(this.hdPathString).map(function(address){ return '0x'+address })
}
this.signTx = function(txParams){
diff --git a/package.json b/package.json
index fec837640..da7686c0a 100644
--- a/package.json
+++ b/package.json
@@ -5,11 +5,11 @@
"private": true,
"scripts": {
"start": "gulp dev",
- "test": "mocha --compilers js:babel-register"
+ "test": "mocha --compilers js:babel-register",
+ "watch": "mocha watch --compilers js:babel-register"
},
"dependencies": {
"async": "^1.5.2",
- "bip39": "^2.2.0",
"clone": "^1.0.2",
"dnode": "^1.2.2",
"end-of-stream": "^1.1.0",
@@ -39,8 +39,11 @@
"gulp-sourcemaps": "^1.6.0",
"gulp-util": "^3.0.7",
"gulp-watch": "^4.3.5",
+ "jsdom": "^8.1.0",
"jshint-stylish": "~0.1.5",
"lodash.assign": "^4.0.6",
+ "mocha": "^2.4.5",
+ "mocha-jsdom": "^1.1.0",
"tape": "^4.5.1",
"vinyl-buffer": "^1.0.0",
"vinyl-source-stream": "^1.1.0",
diff --git a/test/index.js b/test/index.js
index 1ff7b673a..5a8df78b8 100644
--- a/test/index.js
+++ b/test/index.js
@@ -1,11 +1,52 @@
-var assert = require('assert');
-var idStore = require('../app/scripts/lib/idStore')
+var assert = require('assert')
+var IdentityStore = require('../app/scripts/lib/idStore')
+var jsdom = require('mocha-jsdom')
+jsdom()
describe('IdentityStore', function() {
- describe('#_createFirstWallet', function () {
- it('should return the expected keystore', function () {
- assert.equal(1,1)
- });
- });
-});
+ describe('#createNewVault', function () {
+ let idStore
+ let password = 'password123'
+ let entropy = 'entripppppyy duuude'
+ let seedWords
+ let accounts = []
+ let originalKeystore
+
+ before(function(done) {
+ window.localStorage = {} // Hacking localStorage support into JSDom
+
+ idStore = new IdentityStore({
+ addAccount(acct) { accounts.push(acct) },
+ })
+
+ idStore.createNewVault(password, entropy, (err, seeds) => {
+ seedWords = seeds
+ originalKeystore = idStore._idmgmt.keyStore
+ done()
+ })
+ })
+
+ describe('#recoverFromSeed', function() {
+
+ before(function() {
+ window.localStorage = {} // Hacking localStorage support into JSDom
+ accounts = []
+
+ idStore = new IdentityStore({
+ addAccount(acct) { accounts.push(acct) },
+ })
+ })
+
+ it('should return the expected keystore', function () {
+
+ idStore.recoverFromSeed(password, seedWords, (err) => {
+ assert.ifError(err)
+
+ let newKeystore = idStore._idmgmt.keyStore
+ assert.equal(newKeystore, originalKeystore)
+ })
+ })
+ })
+ })
+})