diff --git a/public/views/backup.html b/public/views/backup.html index e31ba08bf..940c5b806 100644 --- a/public/views/backup.html +++ b/public/views/backup.html @@ -54,7 +54,7 @@
-
+ -
-
- Your wallet seed: +
+
+ Your Wallet Seed
-
-
- - {{word}} - +
+
+
+ {{word}} 
+
+
-
- +
+
+ WARNING: This seed was created with a passphrase. To recover this wallet both the mnemonic and passphrase are needed.
+
- - - - -
-
+
+
+
Once you have copy your wallet seed, it is recommended to delete it from this device.
-
diff --git a/src/css/main.css b/src/css/main.css index 585990545..3d9573158 100644 --- a/src/css/main.css +++ b/src/css/main.css @@ -374,6 +374,7 @@ ul.manage li { .m15 {margin: 15px;} .m15h {margin: 0 15px;} .p10t {padding-top: 10px;} +.p10h {padding-right: 10px; padding-left: 10px;} .p0r {padding-right: 0;} .p70r {padding-right: 70px;} .p70l {padding-left: 70px;} diff --git a/src/js/controllers/backup.js b/src/js/controllers/backup.js index adb576f71..eef4c5057 100644 --- a/src/js/controllers/backup.js +++ b/src/js/controllers/backup.js @@ -27,7 +27,7 @@ angular.module('copayApp.controllers').controller('wordsController', var words = fc.getMnemonic(); if (words) - this.mnemonicWords = words.split(' '); + this.mnemonicWords = words.split(/[\u3000\s]+/); this.mnemonicHasPassphrase = fc.mnemonicHasPassphrase(); }); diff --git a/src/js/controllers/import.js b/src/js/controllers/import.js index 7d95c1d60..1965f5ce3 100644 --- a/src/js/controllers/import.js +++ b/src/js/controllers/import.js @@ -159,18 +159,13 @@ angular.module('copayApp.controllers').controller('importController', if (!words) { this.error = gettext('Please enter the seed words'); - } else if (words.indexOf(' ') == -1 && words.indexOf('prv') == 1 && words.length > 108) { + } else if (words.indexOf('xprv') == 0 || words.indexOf('tprv') == 0) { return _importExtendedPrivateKey(words) } else { - var wordList = words.split(/ /).filter(function(v) { - return v.length > 0; - }); + var wordList = words.split(/[\u3000\s]+/); - // m/ allows to enter a custom derivation - if ((wordList.length % 3) != 0 && wordList[0].indexOf('m/') != 0) + if ((wordList.length % 3) != 0) this.error = gettext('Wrong number of seed words:') + wordList.length; - else - words = wordList.join(' '); } if (this.error) { diff --git a/src/js/services/profileService.js b/src/js/services/profileService.js index 5e2ab7df7..7471601b6 100644 --- a/src/js/services/profileService.js +++ b/src/js/services/profileService.js @@ -170,15 +170,9 @@ angular.module('copayApp.services') var walletClient = bwcService.getClient(); var network = opts.networkName || 'livenet'; - if (opts.mnemonic && opts.mnemonic.indexOf('m/') == 0) { - var xPrivKey = root._preDerivation(opts.mnemonic, network); - if (!xPrivKey) - return bwsError.cb('Bad derivation', gettext('Could not import'), cb); - opts.mnemonic = null; - opts.extendedPrivateKey = xPrivKey; - } if (opts.mnemonic) { try { + opts.mnemonic = root._normalizeMnemonic(opts.mnemonic); walletClient.seedFromMnemonic(opts.mnemonic, opts.passphrase, network); } catch (ex) { $log.info(ex); @@ -327,10 +321,11 @@ angular.module('copayApp.services') var walletId = walletClient.credentials.walletId; // check if exist - if (lodash.find(root.profile.credentials, { + var w = lodash.find(root.profile.credentials, { 'walletId': walletId - })) { - return cb(gettext('Wallet already exists')); + }); + if (w) { + return cb(gettext('Wallet already in Copay' + ": ") + w.walletName ); } root.profile.credentials.push(JSON.parse(walletClient.export())); @@ -371,31 +366,19 @@ angular.module('copayApp.services') }; - root._preDerivation = function(words, network) { - var wordList = words.split(/ /).filter(function(v) { - return v.length > 0; - }); - var path = wordList.shift(); - var walletClient = bwcService.getClient(); - $log.info('preDerivation:', path); - walletClient.seedFromMnemonic(wordList.join(' '), null, network); - var k = new bitcore.HDPrivateKey(walletClient.credentials.xPrivKey); - var k2 = k.derive(path); - return k2.toString(); + root._normalizeMnemonic = function(words) { + var isJA = words.indexOf('\u3000') > -1; + var wordList = words.split(/[\u3000\s]+/); + + return wordList.join(isJA ? '\u3000' : ' '); }; root.importMnemonic = function(words, opts, cb) { var walletClient = bwcService.getClient(); - if (words.indexOf('m/') == 0) { - var xPrivKey = root._preDerivation(words, opts.networkName); - if (!xPrivKey) - return bwsError.cb('Bad derivation', gettext('Could not import'), cb); - return root.importExtendedPrivateKey(xPrivKey, cb); - } - $log.debug('Importing Wallet Mnemonic'); + words = root._normalizeMnemonic(words); walletClient.importFromMnemonic(words, { network: opts.networkName, passphrase: opts.passphrase,