From 922e79d34d24f03677a7d9c7642a6db8de15fc86 Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Tue, 17 Feb 2015 15:48:28 -0300 Subject: [PATCH] import working --- bit-wallet/bit | 1 + lib/client/api.js | 45 +++++++++++++++++++++++++++++++-------------- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/bit-wallet/bit b/bit-wallet/bit index 523fc84..30febfe 100755 --- a/bit-wallet/bit +++ b/bit-wallet/bit @@ -16,6 +16,7 @@ program .command('broadcast ', 'broadcast a transaction proposal to the Bitcoin network') .command('rm ', 'remove a transaction proposal') .command('export', 'export wallet critical data') + .command('import', 'import wallet critical data') .parse(process.argv); diff --git a/lib/client/api.js b/lib/client/api.js index 950f159..83a6427 100644 --- a/lib/client/api.js +++ b/lib/client/api.js @@ -211,12 +211,15 @@ API.prototype._joinWallet = function(secret, copayerName, cb) { var wallet = body.wallet; var data = { copayerId: body.copayerId, - walletPrivKey: walletPrivKey.toWIF(), - signingPrivKey: signingPrivKey.toWIF(), - m: wallet.m, - n: wallet.n, + publicKeyRing: wallet.publicKeyRing, network: wallet.network, + m: wallet.m, + n: wallet.n, + + xPrivKey: xPrivKey, + walletPrivKey: walletPrivKey.toWIF(), + signingPrivKey: signingPrivKey.toWIF(), }; self.storage.save(data, cb); }); @@ -304,8 +307,11 @@ API.prototype.export = function(cb) { this._loadAndCheck(function(err, data) { if (err) return cb(err); - var x = _.pick(data, WALLET_CRITICAL_DATA) - return cb(null, JSON.stringify(_.values(x))); + var v = []; + _.each(WALLET_CRITICAL_DATA, function(k) { + v.push(data[k]); + }); + return cb(null, JSON.stringify(v)); }); } @@ -313,16 +319,27 @@ API.prototype.export = function(cb) { API.prototype.import = function(str, cb) { var self = this; - var inData = JSON.parse(str); - var data = {}, - i = 0; + this.storage.load(function(err, data) { + if (data) + return cb('Storage already contains a wallet'); - _.each(WALLET_CRITICAL_DATA, function(k) { - data[k] = inData[i++]; + data = {}; + + var inData = JSON.parse(str); + var i = 0; + + _.each(WALLET_CRITICAL_DATA, function(k) { + data[k] = inData[i++]; + if (!data[k]) + return cb('Invalid wallet data'); + }); + + data.m = data.publicKeyRing.length; + data.signingPrivKey = (new Bitcore.HDPrivateKey(data.xPrivKey)).derive('m/1/0').privateKey.toWIF(); + data.network = data.xPrivKey.substr(0,4) === 'tprv' ? 'testnet' : 'livenet'; + self.storage.save(data, cb); }); - - if (err) return cb(err); -} +}; API.prototype.getTxProposals = function(opts, cb) {