optimize PrivateKey with cache
This commit is contained in:
parent
f90decca0e
commit
5847d6aff2
8 changed files with 109 additions and 50 deletions
|
|
@ -19,6 +19,7 @@
|
|||
</script>
|
||||
<script src="test.API.js"></script>
|
||||
<script src="test.blockchain.Insight.js"></script>
|
||||
<script src="test.performance.js"></script>
|
||||
<script src="test.PrivateKey.js"></script>
|
||||
<script src="test.PublicKeyRing.js"></script>
|
||||
<script src="test.storage.LocalPlain.js"></script>
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@ describe('PrivateKey model', function() {
|
|||
it('should create an instance', function () {
|
||||
var w = new PrivateKey(config);
|
||||
should.exist(w);
|
||||
should.exist(w.BIP32);
|
||||
should.exist(w.BIP32.derive);
|
||||
should.exist(w.bip);
|
||||
should.exist(w.bip.derive);
|
||||
});
|
||||
|
||||
it('should derive priv keys', function () {
|
||||
|
|
@ -76,15 +76,14 @@ describe('PrivateKey model', function() {
|
|||
var w1 = new PrivateKey(config);
|
||||
var w2 = PrivateKey.fromObj(w1.toObj());
|
||||
|
||||
w2.getBIP32().extendedPrivateKeyString().should.equal(w1.getBIP32().extendedPrivateKeyString());
|
||||
w2.getBIP32().extendedPublicKeyString().should.equal(w1.getBIP32().extendedPublicKeyString());
|
||||
w2.toObj().extendedPrivateKeyString.should.equal(w1.toObj().extendedPrivateKeyString);
|
||||
w2.id.should.equal(w1.id);
|
||||
|
||||
|
||||
w2.getBIP32(1,1).extendedPrivateKeyString().should
|
||||
.equal(w1.getBIP32(1,1).extendedPrivateKeyString());
|
||||
w2.getBIP32(1,0).extendedPrivateKeyString().should
|
||||
.equal(w1.getBIP32(1,0).extendedPrivateKeyString());
|
||||
JSON.stringify(w2.get(1,1).storeObj()).should
|
||||
.equal(JSON.stringify(w1.get(1,1).storeObj()));
|
||||
JSON.stringify(w2.get(1,0).storeObj()).should
|
||||
.equal(JSON.stringify(w1.get(1,0).storeObj()));
|
||||
});
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ var createPKR = function (bip32s) {
|
|||
for(var i=0; i<5; i++) {
|
||||
if (bip32s) {
|
||||
var b=bip32s[i];
|
||||
w.addCopayer(b?b.extendedPublicKeyString():null);
|
||||
w.addCopayer(b?b.getExtendedPublicKeyString():null);
|
||||
}
|
||||
else
|
||||
w.addCopayer();
|
||||
|
|
@ -110,7 +110,7 @@ describe('TxProposals model', function() {
|
|||
networkName: config.networkName,
|
||||
});
|
||||
var start = new Date().getTime();
|
||||
var pkr=createPKR([priv.getBIP32()]);
|
||||
var pkr=createPKR([priv]);
|
||||
var ts = Date.now();
|
||||
var isChange=0;
|
||||
var index=0;
|
||||
|
|
@ -150,7 +150,7 @@ describe('TxProposals model', function() {
|
|||
var ts = Date.now();
|
||||
var isChange=0;
|
||||
var index=0;
|
||||
var pkr = createPKR([priv.getBIP32()]);
|
||||
var pkr = createPKR([priv]);
|
||||
var opts = {remainderOut: { address: pkr.generateAddress(true).toString() }};
|
||||
|
||||
|
||||
|
|
@ -225,7 +225,7 @@ var _dumpChunks = function (scriptSig, label) {
|
|||
var ts = Date.now();
|
||||
var isChange=0;
|
||||
var index=0;
|
||||
var pkr = createPKR([priv.getBIP32(), priv2.getBIP32()]);
|
||||
var pkr = createPKR([priv, priv2]);
|
||||
var opts = {remainderOut: { address: pkr.generateAddress(true).toString() }};
|
||||
|
||||
var w = new TxProposals({
|
||||
|
|
@ -325,7 +325,7 @@ var _dumpChunks = function (scriptSig, label) {
|
|||
var ts = Date.now();
|
||||
var isChange=0;
|
||||
var index=0;
|
||||
var pkr = createPKR([priv.getBIP32(), priv2.getBIP32(), priv3.getBIP32() ]);
|
||||
var pkr = createPKR([priv, priv2, priv3]);
|
||||
var opts = {remainderOut: { address: pkr.generateAddress(true).toString() }};
|
||||
|
||||
var w = new TxProposals({
|
||||
|
|
@ -416,7 +416,7 @@ var _dumpChunks = function (scriptSig, label) {
|
|||
it('#toObj #fromObj roundtrip', function () {
|
||||
|
||||
var priv = new PrivateKey(config);
|
||||
var pkr = createPKR([priv.getBIP32()]);
|
||||
var pkr = createPKR([priv]);
|
||||
var w = new TxProposals({
|
||||
walletId: 'qwerty',
|
||||
networkName: config.networkName,
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ describe('Wallet model', function() {
|
|||
requiredCopayers: c.requiredCopayers,
|
||||
totalCopayers: c.totalCopayers,
|
||||
});
|
||||
c.publicKeyRing.addCopayer(c.privateKey.getBIP32().extendedPublicKeyString());
|
||||
c.publicKeyRing.addCopayer(c.privateKey.getExtendedPublicKeyString());
|
||||
|
||||
c.txProposals = new copay.TxProposals({
|
||||
networkName: c.networkName,
|
||||
|
|
@ -87,16 +87,16 @@ describe('Wallet model', function() {
|
|||
}
|
||||
];
|
||||
|
||||
var createW2 = function (bip32s) {
|
||||
var createW2 = function (privateKeys) {
|
||||
var w = createW();
|
||||
should.exist(w);
|
||||
|
||||
var pkr = w.publicKeyRing;
|
||||
|
||||
for(var i=0; i<4; i++) {
|
||||
if (bip32s) {
|
||||
var b=bip32s[i];
|
||||
pkr.addCopayer(b?b.extendedPublicKeyString():null);
|
||||
if (privateKeys) {
|
||||
var k=privateKeys[i];
|
||||
pkr.addCopayer(k?k.getExtendedPublicKeyString():null);
|
||||
}
|
||||
else
|
||||
pkr.addCopayer();
|
||||
|
|
|
|||
51
test/test.performance.js
Normal file
51
test/test.performance.js
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
'use strict';
|
||||
|
||||
var chai = chai || require('chai');
|
||||
var should = chai.should();
|
||||
|
||||
var WebRTC = require('../js/models/network/WebRTC');
|
||||
var Insight = require('../js/models/blockchain/Insight');
|
||||
var FakeStorage = require('./mocks/FakeStorage');
|
||||
var PrivateKey = require('../js/models/core/PrivateKey');
|
||||
|
||||
var WalletFactory = typeof copay === 'undefined' ? require('soop').load('../js/models/core/WalletFactory',{
|
||||
Network: WebRTC,
|
||||
Blockchain: Insight,
|
||||
Storage: FakeStorage,
|
||||
}) : copay.WalletFactory;
|
||||
|
||||
|
||||
describe('Performance tests', function() {
|
||||
var config = {
|
||||
wallet: {
|
||||
requiredCopayers: 1,
|
||||
totalCopayers: 1,
|
||||
spendUnconfirmed: 1,
|
||||
},
|
||||
networkName: 'testnet',
|
||||
};
|
||||
|
||||
describe('PrivateKey', function() {
|
||||
it('should optimize BIP32 private key gen time with cache', function() {
|
||||
var k1 = new PrivateKey();
|
||||
var generateN = 25;
|
||||
var generated = [];
|
||||
var start1 = new Date().getTime();
|
||||
for (var i=0; i<generateN; i++) {
|
||||
var k = JSON.stringify(k1.get(i, false).storeObj());
|
||||
generated.push(k);
|
||||
}
|
||||
var delta1 = new Date().getTime() - start1;
|
||||
var backup = k1.toObj();
|
||||
var k2 = new PrivateKey(backup);
|
||||
var start2 = new Date().getTime();
|
||||
for (var i=0; i<generateN; i++) {
|
||||
var k = JSON.stringify(k2.get(i, false).storeObj());
|
||||
generated[i].should.equal(k);
|
||||
}
|
||||
var delta2 = new Date().getTime() - start2;
|
||||
delta2.should.be.below(delta1);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue