Merge pull request #1149 from maraoz/lazy/xpubkey

lazy calc for xpubkey in HDPrivateKey
This commit is contained in:
Esteban Ordano 2015-03-20 16:19:14 -03:00
commit 56f3e9a7da
2 changed files with 33 additions and 6 deletions

View File

@ -365,6 +365,15 @@ HDPrivateKey.fromSeed = function(hexa, network) {
});
};
HDPrivateKey.prototype._calcHDPublicKey = function() {
if (!this._hdPublicKey) {
var HDPublicKey = require('./hdpublickey');
this._hdPublicKey = new HDPublicKey(this);
}
};
/**
* Receives a object with buffers in all the properties and populates the
* internal structure
@ -423,14 +432,24 @@ HDPrivateKey.prototype._buildFromBuffers = function(arg) {
fingerPrint: fingerPrint
});
var HDPublicKey = require('./hdpublickey');
var hdPublicKey = new HDPublicKey(this);
this._hdPublicKey = null;
JSUtil.defineImmutable(this, {
hdPublicKey: hdPublicKey,
xpubkey: hdPublicKey.xpubkey
Object.defineProperty(this, 'hdPublicKey', {
configurable: false,
enumerable: true,
get: function() {
this._calcHDPublicKey();
return this._hdPublicKey;
}
});
Object.defineProperty(this, 'xpubkey', {
configurable: false,
enumerable: true,
get: function() {
this._calcHDPublicKey();
return this._hdPublicKey.xpubkey;
}
});
return this;
};

View File

@ -100,6 +100,14 @@ describe('HDPrivate key interface', function() {
testnetKey.publicKey.network.should.equal(Networks.testnet);
livenetKey.publicKey.network.should.equal(Networks.livenet);
});
it('cache for xpubkey works', function() {
var privateKey = new HDPrivateKey(xprivkey);
should.not.exist(privateKey._hdPublicKey);
privateKey.xpubkey.should.equal(privateKey.xpubkey);
should.exist(privateKey._hdPublicKey);
});
});
it('inspect() displays correctly', function() {