change Wallet to PublicKeyRing
This commit is contained in:
parent
88d8ad285c
commit
d33cf4a751
3 changed files with 184 additions and 294 deletions
140
test/test.publickeyring.js
Normal file
140
test/test.publickeyring.js
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
'use strict';
|
||||
|
||||
var chai = chai || require('chai');
|
||||
var should = chai.should();
|
||||
var bitcore = bitcore || require('../node_modules/bitcore');
|
||||
var Address = bitcore.Address;
|
||||
var buffertools = bitcore.buffertools;
|
||||
var copay = copay || {};
|
||||
var fakeStorage = require('./FakeStorage');
|
||||
var PublicKeyRing = copay.PublicKeyRing || require('soop').load('../js/models/PublicKeyRing', {Storage: fakeStorage});
|
||||
|
||||
var aMasterPubKey = 'tprv8ZgxMBicQKsPdSVTiWXEqCCzqRaRr9EAQdn5UVMpT9UHX67Dh1FmzEMbavPumpAicsUm2XvC6NTdcWB89yN5DUWx5HQ7z3KByUg7Ht74VRZ';
|
||||
|
||||
|
||||
var config = {
|
||||
network:'livenet',
|
||||
};
|
||||
|
||||
var createW = function (network, bytes) {
|
||||
|
||||
var config = {
|
||||
network: network || 'livenet',
|
||||
};
|
||||
if (bytes) config.bytes = bytes;
|
||||
|
||||
var w = new PublicKeyRing(config);
|
||||
should.exist(w);
|
||||
|
||||
var copayers = [];
|
||||
for(var i=0; i<4; i++) {
|
||||
delete config['bytes'];
|
||||
var c = new PublicKeyRing(config);
|
||||
w.haveAllRequiredPubKeys().should.equal(false);
|
||||
|
||||
w.addCopayerExtendedPubKey(c.getMasterExtendedPubKey());
|
||||
copayers.push(c);
|
||||
}
|
||||
|
||||
return {w:w, copayers: copayers};
|
||||
};
|
||||
|
||||
describe('PublicKeyRing model', function() {
|
||||
|
||||
it('should create an instance (livenet)', function () {
|
||||
var w = new PublicKeyRing({
|
||||
network: config.network
|
||||
});
|
||||
should.exist(w);
|
||||
w.network.name.should.equal('livenet');
|
||||
});
|
||||
it('should create an instance (testnet)', function () {
|
||||
var w2 = new PublicKeyRing();
|
||||
should.exist(w2);
|
||||
w2.network.name.should.equal('testnet');
|
||||
});
|
||||
|
||||
it('should create an master pub key', function () {
|
||||
var w2 = new PublicKeyRing(config);
|
||||
should.exist(w2);
|
||||
should.exist(w2.getMasterExtendedPubKey());
|
||||
});
|
||||
|
||||
it('should fail to generate shared pub keys wo extended key', function () {
|
||||
var w2 = new PublicKeyRing(config);
|
||||
should.exist(w2);
|
||||
|
||||
w2.registeredCopayers().should.equal(1);
|
||||
w2.haveAllRequiredPubKeys().should.equal(false);
|
||||
|
||||
w2.getAddress.bind(false).should.throw();
|
||||
});
|
||||
|
||||
it('should add and check when adding shared pub keys', function () {
|
||||
var k = createW();
|
||||
var w = k.w;
|
||||
var copayers = k.copayers;
|
||||
|
||||
w.haveAllRequiredPubKeys().should.equal(true);
|
||||
w.addCopayerExtendedPubKey.bind(w.getMasterExtendedPubKey()).should.throw();
|
||||
w.addCopayerExtendedPubKey.bind(copayers[0].getMasterExtendedPubKey()).should.throw();
|
||||
w.addCopayerExtendedPubKey.bind((new PublicKeyRing(config)).getMasterExtendedPubKey()).should.throw();
|
||||
});
|
||||
|
||||
it('show be able to store and retrieve', function () {
|
||||
var k = createW();
|
||||
var w = k.w;
|
||||
var copayers = k.copayers;
|
||||
|
||||
w.store().should.equal(true);
|
||||
var ID = w.id;
|
||||
delete w['id'];
|
||||
w.store.bind().should.throw();
|
||||
|
||||
var w2 = PublicKeyRing.read(ID);
|
||||
w2.haveAllRequiredPubKeys().should.equal(true);
|
||||
w2.addCopayerExtendedPubKey.bind(w.getMasterExtendedPubKey()).should.throw();
|
||||
w2.addCopayerExtendedPubKey.bind(copayers[0].getMasterExtendedPubKey()).should.throw();
|
||||
w2.addCopayerExtendedPubKey.bind((new PublicKeyRing(config)).getMasterExtendedPubKey()).should.throw();
|
||||
|
||||
});
|
||||
|
||||
|
||||
it('should generate some p2sh addresses', function () {
|
||||
var k = createW();
|
||||
var w = k.w;
|
||||
|
||||
for(var isChange=0; isChange<2; isChange++) {
|
||||
for(var i=0; i<5; i++) {
|
||||
var addr = w.generateAddress(isChange);
|
||||
var a = new Address(addr);
|
||||
a.isValid().should.equal(true);
|
||||
a.isScript().should.equal(true);
|
||||
a.network().name.should.equal('livenet');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
it('should return PublicKeyRing addresses', function () {
|
||||
var k = createW();
|
||||
var w = k.w;
|
||||
|
||||
|
||||
var a = w.getAddresses();
|
||||
a.length.should.equal(0);
|
||||
|
||||
for(var isChange=0; isChange<2; isChange++)
|
||||
for(var i=0; i<6; i++)
|
||||
w.generateAddress(isChange);
|
||||
|
||||
var as = w.getAddresses();
|
||||
as.length.should.equal(12);
|
||||
for(var i in as) {
|
||||
var a = new Address(as[i]);
|
||||
a.isValid().should.equal(true);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
|
@ -1,196 +0,0 @@
|
|||
'use strict';
|
||||
|
||||
var chai = chai || require('chai');
|
||||
var should = chai.should();
|
||||
var bitcore = bitcore || require('../node_modules/bitcore');
|
||||
var Address = bitcore.Address;
|
||||
var buffertools = bitcore.buffertools;
|
||||
var cosign = cosign || {};
|
||||
var fakeStorage = require('./FakeStorage');
|
||||
var Wallet = cosign.Wallet || require('soop').load('../js/models/Wallet', {Storage: fakeStorage});
|
||||
|
||||
var aMasterPrivKey = 'tprv8ZgxMBicQKsPdSVTiWXEqCCzqRaRr9EAQdn5UVMpT9UHX67Dh1FmzEMbavPumpAicsUm2XvC6NTdcWB89yN5DUWx5HQ7z3KByUg7Ht74VRZ';
|
||||
|
||||
|
||||
var config = {
|
||||
network:'livenet',
|
||||
};
|
||||
|
||||
var createW = function (network, bytes) {
|
||||
|
||||
var config = {
|
||||
network: network || 'livenet',
|
||||
};
|
||||
if (bytes) config.bytes = bytes;
|
||||
|
||||
var w = new Wallet(config);
|
||||
should.exist(w);
|
||||
|
||||
var cosigners = [];
|
||||
for(var i=0; i<4; i++) {
|
||||
delete config['bytes'];
|
||||
var c = new Wallet(config);
|
||||
w.haveAllRequiredPubKeys().should.equal(false);
|
||||
|
||||
w.addCosignerExtendedPubKey(c.getMasterExtendedPubKey());
|
||||
cosigners.push(c);
|
||||
}
|
||||
return {w:w, cosigners: cosigners};
|
||||
};
|
||||
|
||||
describe('Wallet model', function() {
|
||||
|
||||
it('should create an instance (livenet)', function () {
|
||||
var w = new Wallet({
|
||||
network: config.network
|
||||
});
|
||||
should.exist(w);
|
||||
w.network.name.should.equal('livenet');
|
||||
});
|
||||
it('should create an instance (testnet)', function () {
|
||||
var w2 = new Wallet();
|
||||
should.exist(w2);
|
||||
w2.network.name.should.equal('testnet');
|
||||
});
|
||||
|
||||
it('should throw master priv key', function () {
|
||||
var w2 = new Wallet(config);
|
||||
should.exist(w2);
|
||||
|
||||
w2.getMasterExtendedPrivKey.bind().should.throw();
|
||||
});
|
||||
|
||||
|
||||
it('should create an master priv key', function () {
|
||||
var w2 = new Wallet(config);
|
||||
should.exist(w2);
|
||||
should.exist(w2.getMasterExtendedPrivKey());
|
||||
});
|
||||
|
||||
|
||||
it('should create an master pub key', function () {
|
||||
var w2 = new Wallet(config);
|
||||
should.exist(w2);
|
||||
should.exist(w2.getMasterExtendedPubKey());
|
||||
});
|
||||
|
||||
it('should fail to generate shared pub keys wo extended key', function () {
|
||||
var w2 = new Wallet(config);
|
||||
should.exist(w2);
|
||||
|
||||
w2.registeredCosigners().should.equal(1);
|
||||
w2.haveAllRequiredPubKeys().should.equal(false);
|
||||
|
||||
w2.getAddress.bind(false).should.throw();
|
||||
});
|
||||
|
||||
it('should add and check when adding shared pub keys', function () {
|
||||
var k = createW();
|
||||
var w = k.w;
|
||||
var cosigners = k.cosigners;
|
||||
|
||||
w.haveAllRequiredPubKeys().should.equal(true);
|
||||
w.addCosignerExtendedPubKey.bind(w.getMasterExtendedPubKey()).should.throw();
|
||||
w.addCosignerExtendedPubKey.bind(cosigners[0].getMasterExtendedPubKey()).should.throw();
|
||||
w.addCosignerExtendedPubKey.bind((new Wallet(config)).getMasterExtendedPubKey()).should.throw();
|
||||
});
|
||||
|
||||
it('show be able to store and retrieve', function () {
|
||||
var k = createW();
|
||||
var w = k.w;
|
||||
var cosigners = k.cosigners;
|
||||
|
||||
w.store().should.equal(true);
|
||||
var ID = w.id;
|
||||
delete w['id'];
|
||||
w.store.bind().should.throw();
|
||||
|
||||
var w2 = Wallet.read(ID);
|
||||
w2.haveAllRequiredPubKeys().should.equal(true);
|
||||
w2.addCosignerExtendedPubKey.bind(w.getMasterExtendedPubKey()).should.throw();
|
||||
w2.addCosignerExtendedPubKey.bind(cosigners[0].getMasterExtendedPubKey()).should.throw();
|
||||
w2.addCosignerExtendedPubKey.bind((new Wallet(config)).getMasterExtendedPubKey()).should.throw();
|
||||
|
||||
});
|
||||
|
||||
|
||||
it('should create some p2sh addresses', function () {
|
||||
var k = createW();
|
||||
var w = k.w;
|
||||
|
||||
for(var isChange=0; isChange<2; isChange++) {
|
||||
for(var i=0; i<5; i++) {
|
||||
var addr = w.createAddress(isChange);
|
||||
var a = new Address(addr);
|
||||
a.isValid().should.equal(true);
|
||||
a.isScript().should.equal(true);
|
||||
a.network().name.should.equal('livenet');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
it('should return wallet addresses', function () {
|
||||
var k = createW();
|
||||
var w = k.w;
|
||||
|
||||
|
||||
var a = w.getAddresses();
|
||||
a.length.should.equal(0);
|
||||
|
||||
for(var isChange=0; isChange<2; isChange++)
|
||||
for(var i=0; i<6; i++)
|
||||
w.createAddress(isChange);
|
||||
|
||||
var as = w.getAddresses();
|
||||
as.length.should.equal(12);
|
||||
for(var i in as) {
|
||||
var a = new Address(as[i]);
|
||||
a.isValid().should.equal(true);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
it('should create a TX', function () {
|
||||
var k = createW('testnet', aMasterPrivKey);
|
||||
var w = k.w;
|
||||
var as=[], j=0;
|
||||
for(var isChange=0; isChange<2; isChange++)
|
||||
for(var i=0; i<6; i++)
|
||||
as[j++] = w.createAddress(isChange);
|
||||
|
||||
var utxos = [
|
||||
{
|
||||
address: as[0],
|
||||
txid: "2ac165fa7a3a2b535d106a0041c7568d03b531e58aeccdd3199d7289ab12cfc1",
|
||||
scriptPubKey: "76a9146ce4e1163eb18939b1440c42844d5f0261c0338288ac",
|
||||
vout: 1,
|
||||
amount: 1,
|
||||
confirmations: 3
|
||||
},
|
||||
{
|
||||
address: as[1],
|
||||
txid: "2ac165fa7a3a2b535d106a0041c7568d03b531e58aeccdd3199d7289ab12cfc1",
|
||||
scriptPubKey: "76a9146ce4e1163eb18939b1440c42844d5f0261c0338288ac",
|
||||
vout: 1,
|
||||
amount: 1.01,
|
||||
confirmations: 7
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
var outs=[{
|
||||
address: 'mfwSGKeLEGdd1YwsZ1TkoEeKNk8TTWqXLC',
|
||||
amount: 1.5,
|
||||
}];
|
||||
var ret = w.createTx(utxos, outs, '2Mu1GwdF9X1LLxXNxtfNChi5ngBMJxi2csv');
|
||||
var tx=ret.tx;
|
||||
should.exist(tx);
|
||||
tx.ins.length.should.equal(2);
|
||||
tx.outs.length.should.equal(2);
|
||||
buffertools.toHex(tx.serialize()).should.equal('0100000002c1cf12ab89729d19d3cdec8ae531b5038d56c741006a105d532b3a7afa65c12a0100000000ffffffffc1cf12ab89729d19d3cdec8ae531b5038d56c741006a105d532b3a7afa65c12a0100000000ffffffff0280d1f008000000001976a91404a154d56e5455dc87f15e293b8872f31d03a12c88acb00b0a030000000017a914134ce4e4ea92b6cb0008803cafe25f197ff1dcb98700000000');
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue