mirror of https://github.com/BTCPrivate/copay.git
Add some test and refactor getCosigner
This commit is contained in:
parent
680b0b553e
commit
7562c3f9e7
|
@ -177,22 +177,16 @@ PublicKeyRing.prototype.getRedeemScript = function(index, isChange, cosigner) {
|
|||
|
||||
// TODO this could be cached
|
||||
PublicKeyRing.prototype.getAddress = function(index, isChange, id) {
|
||||
var cosigner = typeof id === 'string' ? this.getCosigner(id) : id;
|
||||
|
||||
var cosigner = this.getCosigner(id);
|
||||
var script = this.getRedeemScript(index, isChange, cosigner);
|
||||
var address = Address.fromScript(script, this.network.name);
|
||||
this.addressToPath[address.toString()] = Structure.FullBranch(index, isChange, cosigner);
|
||||
return address;
|
||||
};
|
||||
|
||||
PublicKeyRing.prototype.getSharedIndex = function() {
|
||||
return this.getIndex(Structure.SHARED_INDEX);
|
||||
};
|
||||
|
||||
// Overloaded to receive a PubkeyString or a consigner index
|
||||
PublicKeyRing.prototype.getIndex = function(id) {
|
||||
var cosigner = typeof id === 'string' ? this.getCosigner(id) : id;
|
||||
|
||||
var cosigner = this.getCosigner(id);
|
||||
var index = this.indexes.filter(function(i) { return i.cosigner == cosigner });
|
||||
if (index.length != 1) throw new Error('no index for cosigner');
|
||||
return index[0];
|
||||
|
@ -214,10 +208,9 @@ PublicKeyRing.prototype.getScriptPubKeyHex = function(index, isChange, pubkey) {
|
|||
//generate a new address, update index.
|
||||
PublicKeyRing.prototype.generateAddress = function(isChange, pubkey) {
|
||||
isChange = !!isChange;
|
||||
var cosigner = this.getCosigner(pubkey);
|
||||
var addrIndex = this.getIndex(cosigner);
|
||||
var addrIndex = this.getIndex(pubkey);
|
||||
var index = isChange ? addrIndex.getChangeIndex() : addrIndex.getReceiveIndex();
|
||||
var ret = this.getAddress(index, isChange, cosigner);
|
||||
var ret = this.getAddress(index, isChange, addrIndex.cosigner);
|
||||
addrIndex.increment(isChange);
|
||||
return ret;
|
||||
};
|
||||
|
@ -229,7 +222,9 @@ PublicKeyRing.prototype.getAddresses = function(opts) {
|
|||
};
|
||||
|
||||
PublicKeyRing.prototype.getCosigner = function(pubKey) {
|
||||
preconditions.checkArgument(pubKey);
|
||||
if (typeof pubKey == 'undefined') return Structure.SHARED_INDEX;
|
||||
if (typeof pubKey == 'number') return pubKey;
|
||||
|
||||
var sorted = this.copayersHK.map(function(h, i){
|
||||
return h.eckey.public.toString('hex');
|
||||
}).sort(function(h1, h2){ return h1.localeCompare(h2); });
|
||||
|
|
|
@ -47,6 +47,18 @@ describe('AddressIndex model', function() {
|
|||
cosigners.indexOf(2).should.equal(-1);
|
||||
});
|
||||
|
||||
it('should serialize to object list and back', function() {
|
||||
var is = AddressIndex.init(3);
|
||||
should.exist(is);
|
||||
is.length.should.equal(4);
|
||||
|
||||
var list = AddressIndex.serialize(is);
|
||||
list.length.should.equal(4);
|
||||
|
||||
var is2 = AddressIndex.fromList(list);
|
||||
is2.length.should.equal(4);
|
||||
});
|
||||
|
||||
it('show be able to store and read', function() {
|
||||
var i = createAI();
|
||||
var changeN = 2;
|
||||
|
|
|
@ -343,14 +343,14 @@ describe('Wallet model', function() {
|
|||
var w = createW();
|
||||
var aiObj = {
|
||||
indexes: [{
|
||||
cosigner: Structure.SHARED_INDEX,
|
||||
cosigner: 0,
|
||||
changeIndex: 3,
|
||||
receiveIndex: 2
|
||||
}]
|
||||
};
|
||||
w._handleIndexes('senderID', aiObj, true);
|
||||
w.publicKeyRing.getSharedIndex().getReceiveIndex(2);
|
||||
w.publicKeyRing.getSharedIndex().getChangeIndex(3);
|
||||
w.publicKeyRing.getIndex(0).getReceiveIndex(2);
|
||||
w.publicKeyRing.getIndex(0).getChangeIndex(3);
|
||||
});
|
||||
|
||||
it('handle network pubKeyRings correctly', function() {
|
||||
|
@ -367,7 +367,7 @@ describe('Wallet model', function() {
|
|||
requiredCopayers: w.requiredCopayers,
|
||||
totalCopayers: w.totalCopayers,
|
||||
indexes: [{
|
||||
cosigner: Structure.SHARED_INDEX,
|
||||
cosigner: 0,
|
||||
changeIndex: 2,
|
||||
receiveIndex: 3
|
||||
}],
|
||||
|
@ -377,8 +377,8 @@ describe('Wallet model', function() {
|
|||
w._handlePublicKeyRing('senderID', {
|
||||
publicKeyRing: pkrObj
|
||||
}, true);
|
||||
w.publicKeyRing.getSharedIndex().getReceiveIndex(2);
|
||||
w.publicKeyRing.getSharedIndex().getChangeIndex(3);
|
||||
w.publicKeyRing.getIndex(0).getReceiveIndex(2);
|
||||
w.publicKeyRing.getIndex(0).getChangeIndex(3);
|
||||
for (var i = 0; i < w.requiredCopayers; i++) {
|
||||
w.publicKeyRing.toObj().copayersExtPubKeys[i].should.equal(cepk[i]);
|
||||
}
|
||||
|
|
|
@ -69,6 +69,35 @@ describe('Unit: Testing Filters', function() {
|
|||
}));
|
||||
});
|
||||
|
||||
describe('removeEmpty addresses', function() {
|
||||
it('should work with empty lists', inject(function($filter) {
|
||||
var removeEmpty = $filter('removeEmpty');
|
||||
expect(removeEmpty([]).length).to.equal(0);
|
||||
}));
|
||||
|
||||
it('should filter empty addresses from other copayers', inject(function($filter) {
|
||||
var removeEmpty = $filter('removeEmpty');
|
||||
var addresses = [{
|
||||
owned: true,
|
||||
balance: 0
|
||||
}, {
|
||||
owned: false,
|
||||
balance: 0
|
||||
}, {
|
||||
owned: true,
|
||||
balance: 0
|
||||
}, {
|
||||
owned: false,
|
||||
balance: 0
|
||||
}];
|
||||
expect(removeEmpty(addresses).length).to.equal(2);
|
||||
addresses[1].owned = true;
|
||||
expect(removeEmpty(addresses).length).to.equal(3);
|
||||
addresses[3].balance = 10;
|
||||
expect(removeEmpty(addresses).length).to.equal(4);
|
||||
}));
|
||||
});
|
||||
|
||||
describe('noFractionNumber bits', function() {
|
||||
beforeEach(function() {
|
||||
config.unitToSatoshi = 100;
|
||||
|
|
Loading…
Reference in New Issue