diff --git a/browser/index.js b/browser/index.js index aa541d51..da08d81d 100644 --- a/browser/index.js +++ b/browser/index.js @@ -177,7 +177,7 @@ function formatWallet(wallet) { html += 'Current Address: ' + wallet.getAddress() + '
'; } - html += 'Extended Private Key: ' + key.xprivkey + '
'; + html += 'Extended Private Key: ' + key.toBase58() + '
'; html += 'Mnemonic: ' + key.mnemonic.phrase + '
'; wallet.getBalance().then(function(balance) { diff --git a/lib/hd/private.js b/lib/hd/private.js index 9de0e4cc..732b6d18 100644 --- a/lib/hd/private.js +++ b/lib/hd/private.js @@ -40,15 +40,12 @@ var SEED_SALT = new Buffer('Bitcoin seed', 'ascii'); * @param {Buffer?} options.chainCode * @param {Buffer?} options.privateKey * @property {Network} network - * @property {Base58String} xprivkey - * @property {Base58String} xpubkey * @property {Mnemonic?} mnemonic * @property {Number} depth * @property {Buffer} parentFingerPrint * @property {Number} childIndex * @property {Buffer} chainCode * @property {Buffer} privateKey - * @property {HDPublicKey} hdPublicKey */ function HDPrivateKey(options) { @@ -69,7 +66,6 @@ function HDPrivateKey(options) { this._xprivkey = null; - this.hdPrivateKey = this; this._hdPublicKey = null; if (options) @@ -124,7 +120,12 @@ HDPrivateKey.fromOptions = function fromOptions(options) { return new HDPrivateKey().fromOptions(options); }; -HDPrivateKey.prototype.__defineGetter__('hdPublicKey', function() { +/** + * Get HD public key. + * @returns {HDPublicKey} + */ + +HDPrivateKey.prototype.toPublic = function toPublic() { var key = this._hdPublicKey; if (!key) { @@ -139,17 +140,27 @@ HDPrivateKey.prototype.__defineGetter__('hdPublicKey', function() { } return key; -}); +}; -HDPrivateKey.prototype.__defineGetter__('xprivkey', function() { +/** + * Get cached base58 xprivkey. + * @returns {Base58String} + */ + +HDPrivateKey.prototype.xprivkey = function xprivkey() { if (!this._xprivkey) this._xprivkey = this.toBase58(); return this._xprivkey; -}); +}; -HDPrivateKey.prototype.__defineGetter__('xpubkey', function() { - return this.hdPublicKey.xpubkey; -}); +/** + * Get cached base58 xpubkey. + * @returns {Base58String} + */ + +HDPrivateKey.prototype.xpubkey = function xpubkey() { + return this.toPublic().xpubkey(); +}; /** * Destroy the key (zeroes chain code, privkey, and pubkey). @@ -755,7 +766,7 @@ HDPrivateKey.fromRaw = function fromRaw(raw) { HDPrivateKey.prototype.toJSON = function toJSON() { return { - xprivkey: this.xprivkey, + xprivkey: this.xprivkey(), mnemonic: this.mnemonic ? this.mnemonic.toJSON() : null }; }; diff --git a/lib/hd/public.js b/lib/hd/public.js index 3a3a64ab..b9d223ee 100644 --- a/lib/hd/public.js +++ b/lib/hd/public.js @@ -36,7 +36,6 @@ var FINGER_PRINT = new Buffer('00000000', 'hex'); * @param {Buffer?} options.chainCode * @param {Buffer?} options.publicKey * @property {Network} network - * @property {Base58String} xpubkey * @property {Number} depth * @property {Buffer} parentFingerPrint * @property {Number} childIndex @@ -59,9 +58,6 @@ function HDPublicKey(options) { this._xpubkey = null; - this.hdPublicKey = this; - this.hdPrivateKey = null; - if (options) this.fromOptions(options); } @@ -107,11 +103,34 @@ HDPublicKey.fromOptions = function fromOptions(options) { return new HDPublicKey().fromOptions(options); }; -HDPublicKey.prototype.__defineGetter__('xpubkey', function() { +/** + * Get HD public key (self). + * @returns {HDPublicKey} + */ + +HDPublicKey.prototype.toPublic = function toPublic() { + return this; +}; + +/** + * Get cached base58 xprivkey (always null here). + * @returns {null} + */ + +HDPublicKey.prototype.xprivkey = function xprivkey() { + return null; +}; + +/** + * Get cached base58 xpubkey. + * @returns {Base58String} + */ + +HDPublicKey.prototype.xpubkey = function() { if (!this._xpubkey) this._xpubkey = this.toBase58(); return this._xpubkey; -}); +}; /** * Destroy the key (zeroes chain code and pubkey). @@ -376,7 +395,7 @@ HDPublicKey.prototype.compare = function compare(key) { HDPublicKey.prototype.toJSON = function toJSON() { return { - xpubkey: this.xpubkey + xpubkey: this.xpubkey() }; }; diff --git a/lib/wallet/account.js b/lib/wallet/account.js index a95bafa0..2ccb949d 100644 --- a/lib/wallet/account.js +++ b/lib/wallet/account.js @@ -814,9 +814,9 @@ Account.prototype.inspect = function inspect() { nestedAddress: this.initialized && this.nested ? this.nested.getAddress() : null, - accountKey: this.accountKey.xpubkey, + accountKey: this.accountKey.toBase58(), keys: this.keys.map(function(key) { - return key.xpubkey; + return key.toBase58(); }) }; }; @@ -852,9 +852,9 @@ Account.prototype.toJSON = function toJSON(minimal) { changeAddress: this.change ? this.change.getAddress('base58') : null, - accountKey: this.accountKey.xpubkey, + accountKey: this.accountKey.toBase58(), keys: this.keys.map(function(key) { - return key.xpubkey; + return key.toBase58(); }) }; }; diff --git a/lib/wallet/wallet.js b/lib/wallet/wallet.js index 6e79190b..18cf1b64 100644 --- a/lib/wallet/wallet.js +++ b/lib/wallet/wallet.js @@ -705,7 +705,7 @@ Wallet.prototype._createAccount = co(function* createAccount(options, passphrase } else { assert(this.master.key); key = this.master.key.deriveAccount44(this.accountDepth); - key = key.hdPublicKey; + key = key.toPublic(); } options = { diff --git a/test/hd-test.js b/test/hd-test.js index e84d40fe..5dc6dde4 100644 --- a/test/hd-test.js +++ b/test/hd-test.js @@ -99,43 +99,43 @@ describe('HD', function() { it('should create master private key', function() { master = bcoin.hd.PrivateKey.fromSeed(new Buffer(seed, 'hex')); - assert.equal(master.xprivkey, master_priv); - assert.equal(master.xpubkey, master_pub); + assert.equal(master.toBase58(), master_priv); + assert.equal(master.toPublic().toBase58(), master_pub); }); it('should derive(0) child from master', function() { child1 = master.derive(0); - assert.equal(child1.xprivkey, child1_priv); - assert.equal(child1.xpubkey, child1_pub); + assert.equal(child1.toBase58(), child1_priv); + assert.equal(child1.toPublic().toBase58(), child1_pub); }); it('should derive(1) child from master public key', function() { - child2 = master.hdPublicKey.derive(1); - assert.equal(child2.xpubkey, child2_pub); + child2 = master.toPublic().derive(1); + assert.equal(child2.toBase58(), child2_pub); }); it('should derive(1) child from master', function() { child3 = master.derive(1); - assert.equal(child3.xprivkey, child3_priv); - assert.equal(child3.xpubkey, child3_pub); + assert.equal(child3.toBase58(), child3_priv); + assert.equal(child3.toPublic().toBase58(), child3_pub); }); it('should derive(2) child from master', function() { child4 = master.derive(2); - assert.equal(child4.xprivkey, child4_priv); - assert.equal(child4.xpubkey, child4_pub); + assert.equal(child4.toBase58(), child4_priv); + assert.equal(child4.toPublic().toBase58(), child4_pub); }); it('should derive(0) child from child(2)', function() { child5 = child4.derive(0); - assert.equal(child5.xprivkey, child5_priv); - assert.equal(child5.xpubkey, child5_pub); + assert.equal(child5.toBase58(), child5_priv); + assert.equal(child5.toPublic().toBase58(), child5_pub); }); it('should derive(1) child from child(2)', function() { child6 = child4.derive(1); - assert.equal(child6.xprivkey, child6_priv); - assert.equal(child6.xpubkey, child6_pub); + assert.equal(child6.toBase58(), child6_priv); + assert.equal(child6.toPublic().toBase58(), child6_pub); }); it('should derive correctly when private key has leading zeros', function() { @@ -147,16 +147,16 @@ describe('HD', function() { }); it('should deserialize master private key', function() { - bcoin.hd.PrivateKey.fromBase58(master.xprivkey); + bcoin.hd.PrivateKey.fromBase58(master.toBase58()); }); it('should deserialize master public key', function() { - bcoin.hd.PublicKey.fromBase58(master.hdPublicKey.xpubkey); + bcoin.hd.PublicKey.fromBase58(master.toPublic().toBase58()); }); it('should deserialize and reserialize', function() { var key = bcoin.hd.fromMnemonic(); - assert.equal(bcoin.hd.fromJSON(key.toJSON()).xprivkey, key.xprivkey); + assert.equal(bcoin.hd.fromJSON(key.toJSON()).toBase58(), key.toBase58()); }); function ub58(data) { @@ -176,8 +176,8 @@ describe('HD', function() { delete vector.m; it('should create from a seed', function() { master = bcoin.hd.PrivateKey.fromSeed(new Buffer(seed, 'hex')); - equal(master.xprivkey, m.prv); - equal(master.xpubkey, m.pub); + equal(master.toBase58(), m.prv); + equal(master.toPublic().toBase58(), m.pub); }); Object.keys(vector).forEach(function(path) { var data = vector[path]; @@ -185,8 +185,8 @@ describe('HD', function() { var xpub = data.pub; it('should derive ' + path + ' from master', function() { var key = master.derive(path); - equal(key.xprivkey, xpriv); - equal(key.xpubkey, xpub); + equal(key.toBase58(), xpriv); + equal(key.toPublic().toBase58(), xpub); }); }); }); diff --git a/test/mnemonic-test.js b/test/mnemonic-test.js index 7112d898..c585b1d7 100644 --- a/test/mnemonic-test.js +++ b/test/mnemonic-test.js @@ -23,7 +23,7 @@ describe('Mnemonic', function() { assert.equal(mnemonic.getPhrase(), phrase); assert.equal(mnemonic.toSeed().toString('hex'), seed.toString('hex')); var key = bcoin.hd.fromMnemonic(mnemonic); - assert.equal(key.xprivkey, xpriv); + assert.equal(key.toBase58(), xpriv); }); }); @@ -42,7 +42,7 @@ describe('Mnemonic', function() { assert.equal(mnemonic.getPhrase(), phrase); assert.equal(mnemonic.toSeed().toString('hex'), seed.toString('hex')); var key = bcoin.hd.fromMnemonic(mnemonic); - assert.equal(key.xprivkey, xpriv); + assert.equal(key.toBase58(), xpriv); }); }); diff --git a/test/wallet-test.js b/test/wallet-test.js index 60acad1c..38480b95 100644 --- a/test/wallet-test.js +++ b/test/wallet-test.js @@ -105,8 +105,8 @@ describe('Wallet', function() { assert(w1 !== w2); assert(w1.master !== w2.master); - assert.equal(w1.master.key.xprivkey, w2.master.key.xprivkey); - assert.equal(w1.account.accountKey.xpubkey, w2.account.accountKey.xpubkey); + assert.equal(w1.master.key.toBase58(), w2.master.key.toBase58()); + assert.equal(w1.account.accountKey.toBase58(), w2.account.accountKey.toBase58()); })); var p2pkh = co(function* p2pkh(witness, bullshitNesting) { @@ -169,7 +169,7 @@ describe('Wallet', function() { n: 2 }); - k = bcoin.hd.fromMnemonic().deriveAccount44(0).hdPublicKey; + k = bcoin.hd.fromMnemonic().deriveAccount44(0).toPublic(); yield w.addSharedKey(k); @@ -872,7 +872,7 @@ describe('Wallet', function() { account = yield w.getAccount('foo'); assert.equal(account.name, 'foo'); assert.equal(account.accountIndex, 1); - assert(account.accountKey.xpubkey === acc.accountKey.xpubkey); + assert(account.accountKey.toBase58() === acc.accountKey.toBase58()); assert(w.account.accountIndex === 0); assert.notEqual(