mirror of https://github.com/BTCPrivate/copay.git
commit
068f8cad52
|
@ -13,8 +13,8 @@ function PrivateKey(opts) {
|
|||
this.network = opts.networkName === 'testnet' ?
|
||||
networks.testnet : networks.livenet;
|
||||
var init = opts.extendedPrivateKeyString || this.network.name;
|
||||
this.bip = opts.HK || new HK(init);
|
||||
this.privateKeyCache = opts.privateKeyCache || {};
|
||||
this.bip = new HK(init);
|
||||
this.privateKeyCache = {};
|
||||
this.publicHex = this.deriveBIP45Branch().eckey.public.toString('hex');
|
||||
};
|
||||
|
||||
|
@ -54,15 +54,24 @@ PrivateKey.prototype.deriveBIP45Branch = function() {
|
|||
return this.bip45Branch;
|
||||
}
|
||||
|
||||
|
||||
PrivateKey.trim = function(data) {
|
||||
var opts = {};
|
||||
['networkName', 'extendedPrivateKeyString'].forEach(function(k){
|
||||
opts[k] = data[k];
|
||||
});
|
||||
|
||||
return opts;
|
||||
};
|
||||
|
||||
PrivateKey.fromObj = function(obj) {
|
||||
return new PrivateKey(obj);
|
||||
return new PrivateKey(PrivateKey.trim(obj));
|
||||
};
|
||||
|
||||
PrivateKey.prototype.toObj = function() {
|
||||
return {
|
||||
extendedPrivateKeyString: this.getExtendedPrivateKeyString(),
|
||||
networkName: this.network.name,
|
||||
privateKeyCache: this.privateKeyCache
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -21,31 +21,42 @@ function PublicKeyRing(opts) {
|
|||
this.requiredCopayers = opts.requiredCopayers || 3;
|
||||
this.totalCopayers = opts.totalCopayers || 5;
|
||||
|
||||
this.copayersHK = opts.copayersHK || [];
|
||||
this.copayersHK = [];
|
||||
|
||||
this.indexes = opts.indexes ? HDParams.fromList(opts.indexes) : HDParams.init(this.totalCopayers);
|
||||
|
||||
this.publicKeysCache = opts.publicKeysCache || {};
|
||||
this.publicKeysCache = {};
|
||||
this.nicknameFor = opts.nicknameFor || {};
|
||||
this.copayerIds = [];
|
||||
this.copayersBackup = opts.copayersBackup || [];
|
||||
this.addressToPath = {};
|
||||
}
|
||||
|
||||
|
||||
PublicKeyRing.trim = function(data) {
|
||||
var opts = {};
|
||||
['walletId', 'networkName', 'requiredCopayers', 'totalCopayers','indexes','nicknameFor','copayersBackup', 'copayersExtPubKeys' ].forEach(function(k){
|
||||
opts[k] = data[k];
|
||||
});
|
||||
|
||||
return opts;
|
||||
};
|
||||
|
||||
PublicKeyRing.fromObj = function(data) {
|
||||
if (data instanceof PublicKeyRing) {
|
||||
throw new Error('bad data format: Did you use .toObj()?');
|
||||
}
|
||||
|
||||
var opts = PublicKeyRing.trim(data);
|
||||
|
||||
// Support old indexes schema
|
||||
if (!Array.isArray(data.indexes)) {
|
||||
data.indexes = HDParams.update(data.indexes, data.totalCopayers);
|
||||
if (!Array.isArray(opts.indexes)) {
|
||||
opts.indexes = HDParams.update(opts.indexes, opts.totalCopayers);
|
||||
}
|
||||
|
||||
var ret = new PublicKeyRing(data);
|
||||
var ret = new PublicKeyRing(opts);
|
||||
|
||||
for (var k in data.copayersExtPubKeys) {
|
||||
ret.addCopayer(data.copayersExtPubKeys[k]);
|
||||
for (var k in opts.copayersExtPubKeys) {
|
||||
ret.addCopayer(opts.copayersExtPubKeys[k]);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@ -64,7 +75,6 @@ PublicKeyRing.prototype.toObj = function() {
|
|||
return b.extendedPublicKeyString();
|
||||
}),
|
||||
nicknameFor: this.nicknameFor,
|
||||
publicKeysCache: this.publicKeysCache
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -366,8 +376,10 @@ PublicKeyRing.prototype._checkInPKR = function(inPKR, ignoreId) {
|
|||
|
||||
PublicKeyRing.prototype._mergePubkeys = function(inPKR) {
|
||||
var self = this;
|
||||
|
||||
var hasChanged = false;
|
||||
var l = self.copayersHK.length;
|
||||
|
||||
if (self.isComplete())
|
||||
return;
|
||||
|
||||
|
@ -422,7 +434,7 @@ PublicKeyRing.prototype.merge = function(inPKR, ignoreId) {
|
|||
var hasChanged = false;
|
||||
hasChanged |= this.mergeIndexes(inPKR.indexes);
|
||||
hasChanged |= this._mergePubkeys(inPKR);
|
||||
hasChanged |= this.mergeBackups(inPKR.copayersBackup);
|
||||
hasChanged |= this._mergeBackups(inPKR.copayersBackup);
|
||||
|
||||
return !!hasChanged;
|
||||
};
|
||||
|
@ -439,7 +451,7 @@ PublicKeyRing.prototype.mergeIndexes = function(indexes) {
|
|||
return !!hasChanged
|
||||
}
|
||||
|
||||
PublicKeyRing.prototype.mergeBackups = function(backups) {
|
||||
PublicKeyRing.prototype._mergeBackups = function(backups) {
|
||||
var self = this;
|
||||
var hasChanged = false;
|
||||
|
||||
|
|
|
@ -618,7 +618,6 @@ Wallet.prototype.sendWalletId = function(recipients) {
|
|||
Wallet.prototype.sendPublicKeyRing = function(recipients) {
|
||||
this.log('### SENDING publicKeyRing TO:', recipients || 'All', this.publicKeyRing.toObj());
|
||||
var publicKeyRing = this.publicKeyRing.toObj();
|
||||
delete publicKeyRing.publicKeysCache; // exclude publicKeysCache from network obj
|
||||
|
||||
this.send(recipients, {
|
||||
type: 'publicKeyRing',
|
||||
|
|
|
@ -228,12 +228,12 @@ describe('PublicKeyRing model', function() {
|
|||
var hasChanged;
|
||||
|
||||
w.copayersBackup = ["a", "b"];
|
||||
hasChanged = w.mergeBackups(["b", "c"]);
|
||||
hasChanged = w._mergeBackups(["b", "c"]);
|
||||
w.copayersBackup.length.should.equal(3);
|
||||
hasChanged.should.equal(true);
|
||||
|
||||
w.copayersBackup = ["a", "b", "c"];
|
||||
hasChanged = w.mergeBackups(["b", "c"]);
|
||||
hasChanged = w._mergeBackups(["b", "c"]);
|
||||
w.copayersBackup.length.should.equal(3);
|
||||
hasChanged.should.equal(false);
|
||||
});
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -26,11 +26,9 @@ describe('Performance tests', function() {
|
|||
generated.push(k);
|
||||
}
|
||||
var delta1 = new Date().getTime() - start1;
|
||||
var backup = k1.toObj();
|
||||
var k2 = PrivateKey.fromObj(backup);
|
||||
var start2 = new Date().getTime();
|
||||
for (var i = 0; i < generateN; i++) {
|
||||
var k = JSON.stringify(k2.get(i, false).storeObj());
|
||||
var k = JSON.stringify(k1.get(i, false).storeObj());
|
||||
generated[i].should.equal(k);
|
||||
}
|
||||
var delta2 = new Date().getTime() - start2;
|
||||
|
@ -62,11 +60,9 @@ describe('Performance tests', function() {
|
|||
generated.push(pubKeys);
|
||||
}
|
||||
var delta1 = new Date().getTime() - start1;
|
||||
var backup = pkr1.toObj();
|
||||
var pkr2 = PublicKeyRing.fromObj(backup);
|
||||
var start2 = new Date().getTime();
|
||||
for (var i = 0; i < generateN; i++) {
|
||||
var pubKeys = JSON.stringify(pkr2.getPubKeys(i, false));
|
||||
var pubKeys = JSON.stringify(pkr1.getPubKeys(i, false));
|
||||
generated[i].should.equal(pubKeys);
|
||||
}
|
||||
var delta2 = new Date().getTime() - start2;
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<div class="row" ng-show="isSetupWalletPage">
|
||||
<div ng-if="totalCopayers > 1">
|
||||
<label for="Name">Your name</label>
|
||||
<input id="Name" type="text" placeholder="Name" class="form-control" ng-model="myNickname">
|
||||
<input id="Name" type="text" placeholder="Name" class="form-control" ng-model="$parent.myNickname">
|
||||
</div>
|
||||
<div>
|
||||
<label for="walletPassword">Your Wallet Password <small data-options="disable_for_touch:true" class="has-tip text-gray" tooltip="doesn't need to be shared" >Required</small>
|
||||
|
@ -68,7 +68,7 @@
|
|||
width="50px">
|
||||
</div>
|
||||
</div>
|
||||
<p class="comment">(*) The limits are imposed by the bitcoin network.</p>
|
||||
<p class="comment" ng-show="totalCopayers>1">(*) The limits are imposed by the bitcoin network.</p>
|
||||
<div class="text-right">
|
||||
<a ng-show="!isSetupWalletPage" class="back-button m20r" href="#!/">« Back</a>
|
||||
<a ng-show="isSetupWalletPage" class="back-button m20r"
|
||||
|
|
Loading…
Reference in New Issue