rm data from create
This commit is contained in:
parent
9d226effe9
commit
605727fa2d
|
@ -22,6 +22,7 @@ client.export(function(err, x) {
|
||||||
var filename = program.config + '.svg';
|
var filename = program.config + '.svg';
|
||||||
var qr_svg = qr.image(x, { type: 'svg' });
|
var qr_svg = qr.image(x, { type: 'svg' });
|
||||||
qr_svg.pipe(require('fs').createWriteStream(filename));
|
qr_svg.pipe(require('fs').createWriteStream(filename));
|
||||||
|
console.log('Wallet Critical Data: exported to ' + filename);
|
||||||
} else {
|
} else {
|
||||||
console.log('Wallet Critical Data:\n', x);
|
console.log('Wallet Critical Data:\n', x);
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,8 @@ var ServerCompromisedError = require('./servercompromisederror')
|
||||||
|
|
||||||
var BASE_URL = 'http://localhost:3001/copay/api';
|
var BASE_URL = 'http://localhost:3001/copay/api';
|
||||||
|
|
||||||
|
var WALLET_CRITICAL_DATA = ['copayerId', 'xPrivKey', 'm', 'walletPrivKey', 'publicKeyRing'];
|
||||||
|
|
||||||
function _createProposalOpts(opts, signingKey) {
|
function _createProposalOpts(opts, signingKey) {
|
||||||
var msg = opts.toAddress + '|' + opts.amount + '|' + opts.message;
|
var msg = opts.toAddress + '|' + opts.amount + '|' + opts.message;
|
||||||
opts.proposalSignature = WalletUtils.signMessage(msg, signingKey);
|
opts.proposalSignature = WalletUtils.signMessage(msg, signingKey);
|
||||||
|
@ -104,7 +106,12 @@ API.prototype._loadAndCheck = function(cb) {
|
||||||
};
|
};
|
||||||
|
|
||||||
API.prototype._doRequest = function(method, url, args, data, cb) {
|
API.prototype._doRequest = function(method, url, args, data, cb) {
|
||||||
var reqSignature = _signRequest(method, url, args, data.signingPrivKey);
|
var reqSignature;
|
||||||
|
data = data || {};
|
||||||
|
|
||||||
|
if (data.signingPrivKey)
|
||||||
|
reqSignature = _signRequest(method, url, args, data.signingPrivKey);
|
||||||
|
|
||||||
var absUrl = _getUrl(url);
|
var absUrl = _getUrl(url);
|
||||||
var args = {
|
var args = {
|
||||||
headers: {
|
headers: {
|
||||||
|
@ -142,8 +149,6 @@ API.prototype._doGetRequest = function(url, data, cb) {
|
||||||
return this._doRequest('get', url, {}, data, cb);
|
return this._doRequest('get', url, {}, data, cb);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
API.prototype.createWallet = function(walletName, copayerName, m, n, network, cb) {
|
API.prototype.createWallet = function(walletName, copayerName, m, n, network, cb) {
|
||||||
var self = this;
|
var self = this;
|
||||||
network = network || 'livenet';
|
network = network || 'livenet';
|
||||||
|
@ -154,62 +159,46 @@ API.prototype.createWallet = function(walletName, copayerName, m, n, network, cb
|
||||||
if (data)
|
if (data)
|
||||||
return cb('Storage already contains a wallet');
|
return cb('Storage already contains a wallet');
|
||||||
|
|
||||||
// Generate wallet key pair to verify copayers
|
var walletPrivKey = new Bitcore.PrivateKey();
|
||||||
var privKey = new Bitcore.PrivateKey(null, network);
|
|
||||||
var pubKey = privKey.toPublicKey();
|
|
||||||
|
|
||||||
data = {
|
|
||||||
m: m,
|
|
||||||
n: n,
|
|
||||||
walletPrivKey: privKey.toWIF(),
|
|
||||||
network: network,
|
|
||||||
};
|
|
||||||
|
|
||||||
var args = {
|
var args = {
|
||||||
name: walletName,
|
name: walletName,
|
||||||
m: m,
|
m: m,
|
||||||
n: n,
|
n: n,
|
||||||
pubKey: pubKey.toString(),
|
pubKey: walletPrivKey.toPublicKey().toString(),
|
||||||
network: network,
|
network: network,
|
||||||
};
|
};
|
||||||
var url = '/v1/wallets/';
|
var url = '/v1/wallets/';
|
||||||
|
self._doPostRequest(url, args, {}, function(err, body) {
|
||||||
self._doPostRequest(url, args, data, function(err, body) {
|
|
||||||
if (err) return cb(err);
|
if (err) return cb(err);
|
||||||
|
|
||||||
var walletId = body.walletId;
|
var walletId = body.walletId;
|
||||||
var secret = walletId + ':' + privKey.toString() + ':' + (network == 'testnet' ? 'T' : 'L');
|
var secret = walletId + ':' + walletPrivKey.toWIF() + ':' + (network == 'testnet' ? 'T' : 'L');
|
||||||
var ret;
|
var ret;
|
||||||
|
|
||||||
if (n > 1)
|
if (n > 1)
|
||||||
ret = data.secret = secret;
|
ret = secret;
|
||||||
|
|
||||||
self.storage.save(data, function(err) {
|
|
||||||
if (err) return cb(err);
|
|
||||||
self._joinWallet(data, secret, copayerName, function(err) {
|
|
||||||
return cb(err, ret);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
self._joinWallet(secret, copayerName, function(err) {
|
||||||
|
return cb(err, ret);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
API.prototype._joinWallet = function(data, secret, copayerName, cb) {
|
API.prototype._joinWallet = function(secret, copayerName, cb) {
|
||||||
var self = this;
|
var self = this;
|
||||||
data = data || {};
|
|
||||||
|
|
||||||
var secretSplit = secret.split(':');
|
var secretSplit = secret.split(':');
|
||||||
var walletId = secretSplit[0];
|
var walletId = secretSplit[0];
|
||||||
|
|
||||||
var walletPrivKey = Bitcore.PrivateKey.fromString(secretSplit[1]);
|
var walletPrivKey = Bitcore.PrivateKey.fromString(secretSplit[1]);
|
||||||
var network = secretSplit[2] == 'T' ? 'testnet' : 'livenet';
|
var network = secretSplit[2] == 'T' ? 'testnet' : 'livenet';
|
||||||
data.xPrivKey = _createXPrivKey(network);
|
var xPrivKey = _createXPrivKey(network);
|
||||||
|
|
||||||
var xPubKey = new Bitcore.HDPublicKey(data.xPrivKey);
|
var xPubKey = new Bitcore.HDPublicKey(xPrivKey);
|
||||||
var xPubKeySignature = WalletUtils.signMessage(xPubKey.toString(), walletPrivKey);
|
var xPubKeySignature = WalletUtils.signMessage(xPubKey.toString(), walletPrivKey);
|
||||||
|
|
||||||
var signingPrivKey = (new Bitcore.HDPrivateKey(data.xPrivKey)).derive('m/1/0').privateKey;
|
var signingPrivKey = (new Bitcore.HDPrivateKey(xPrivKey)).derive('m/1/0').privateKey;
|
||||||
var args = {
|
var args = {
|
||||||
walletId: walletId,
|
walletId: walletId,
|
||||||
name: copayerName,
|
name: copayerName,
|
||||||
|
@ -218,15 +207,17 @@ API.prototype._joinWallet = function(data, secret, copayerName, cb) {
|
||||||
};
|
};
|
||||||
var url = '/v1/wallets/' + walletId + '/copayers';
|
var url = '/v1/wallets/' + walletId + '/copayers';
|
||||||
|
|
||||||
this._doPostRequest(url, args, data, function(err, body) {
|
this._doPostRequest(url, args, {}, function(err, body) {
|
||||||
var wallet = body.wallet;
|
var wallet = body.wallet;
|
||||||
data.copayerId = body.copayerId;
|
var data = {
|
||||||
data.walletPrivKey = walletPrivKey.toWIF();
|
copayerId: body.copayerId,
|
||||||
data.signingPrivKey = signingPrivKey.toWIF();
|
walletPrivKey: walletPrivKey.toWIF(),
|
||||||
data.m = wallet.m;
|
signingPrivKey: signingPrivKey.toWIF(),
|
||||||
data.n = wallet.n;
|
m: wallet.m,
|
||||||
data.publicKeyRing = wallet.publicKeyRing;
|
n: wallet.n,
|
||||||
data.network = wallet.network,
|
publicKeyRing: wallet.publicKeyRing,
|
||||||
|
network: wallet.network,
|
||||||
|
};
|
||||||
self.storage.save(data, cb);
|
self.storage.save(data, cb);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -238,7 +229,7 @@ API.prototype.joinWallet = function(secret, copayerName, cb) {
|
||||||
if (data)
|
if (data)
|
||||||
return cb('Storage already contains a wallet');
|
return cb('Storage already contains a wallet');
|
||||||
|
|
||||||
self._joinWallet(data, secret, copayerName, cb);
|
self._joinWallet(secret, copayerName, cb);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -313,11 +304,27 @@ API.prototype.export = function(cb) {
|
||||||
|
|
||||||
this._loadAndCheck(function(err, data) {
|
this._loadAndCheck(function(err, data) {
|
||||||
if (err) return cb(err);
|
if (err) return cb(err);
|
||||||
var x = _.pick(data, ['publicKeyRing', 'xPrivKey', 'copayerId', 'm'])
|
var x = _.pick(data, WALLET_CRITICAL_DATA)
|
||||||
return cb(null, JSON.stringify(x));
|
return cb(null, JSON.stringify(_.values(x)));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
API.prototype.import = function(str, cb) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
var inData = JSON.parse(str);
|
||||||
|
var data = {},
|
||||||
|
i = 0;
|
||||||
|
|
||||||
|
_.each(WALLET_CRITICAL_DATA, function(k) {
|
||||||
|
data[k] = inData[i++];
|
||||||
|
});
|
||||||
|
|
||||||
|
if (err) return cb(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
API.prototype.getTxProposals = function(opts, cb) {
|
API.prototype.getTxProposals = function(opts, cb) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue