diff --git a/src/hdnode.js b/src/hdnode.js index 8c8a41d..560866e 100644 --- a/src/hdnode.js +++ b/src/hdnode.js @@ -143,6 +143,15 @@ HDNode.prototype.getAddress = function() { return this.pubKey.getAddress(this.network) } +HDNode.prototype.neutered = function() { + var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network) + neutered.depth = this.depth + neutered.index = this.index + neutered.parentFingerprint = this.parentFingerprint + + return neutered +} + HDNode.prototype.toBase58 = function(isPrivate) { return base58check.encode(this.toBuffer(isPrivate)) } diff --git a/test/hdnode.js b/test/hdnode.js index 265b5d6..794abe0 100644 --- a/test/hdnode.js +++ b/test/hdnode.js @@ -226,6 +226,21 @@ describe('HDNode', function() { }) }) + describe('neutered', function() { + var f = fixtures.valid[0] + + it('strips all private information', function() { + var hd = HDNode.fromBase58(f.master.base58) + var hdn = hd.neutered() + + assert.equal(hdn.privKey, undefined) + assert.equal(hdn.pubKey.toHex(), hd.pubKey.toHex()) + assert.equal(hdn.chainCode, hd.chainCode) + assert.equal(hdn.depth, hd.depth) + assert.equal(hdn.index, hd.index) + }) + }) + describe('derive', function() { function verifyVector(hd, v, depth) { assert.equal(hd.privKey.toWIF(), v.wif)