allow custom bip32 prefixes, and varying types of addresses returned get hdnode.getAddress

This commit is contained in:
Thomas Kerin 2018-03-04 20:48:55 +01:00
parent 5b0ccb6f68
commit f44e662dbe
5 changed files with 286 additions and 25 deletions

95
test/hdaddress.js Normal file
View file

@ -0,0 +1,95 @@
/* global describe, it */
/* eslint-disable no-new */
var assert = require('assert')
var HDNode = require('../src/hdnode')
var bnetwork = require('../src/networks')
describe('bip44', function () {
it('works without a ScriptFactory', function () {
// mnemonic: abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
var seed = '5eb00bbddcf069084889a8ab9155568165f5c453ccb85e70811aaed6f6da5fc19a5ac40b389cd370d086206dec8aa6c43daea6690f20ad3d8d48b2d2ce9e38e4'
var network = bnetwork.bitcoin
var root = HDNode.fromSeedHex(seed, network)
assert.equal(
root.toBase58(),
'xprv9s21ZrQH143K3GJpoapnV8SFfukcVBSfeCficPSGfubmSFDxo1kuHnLisriDvSnRRuL2Qrg5ggqHKNVpxR86QEC8w35uxmGoggxtQTPvfUu'
)
var account = root.derivePath('44\'/0\'/0\'')
assert.equal(
account.toBase58(),
'xprv9xpXFhFpqdQK3TmytPBqXtGSwS3DLjojFhTGht8gwAAii8py5X6pxeBnQ6ehJiyJ6nDjWGJfZ95WxByFXVkDxHXrqu53WCRGypk2ttuqncb'
)
assert.equal(
'xpub6BosfCnifzxcFwrSzQiqu2DBVTshkCXacvNsWGYJVVhhawA7d4R5WSWGFNbi8Aw6ZRc1brxMyWMzG3DSSSSoekkudhUd9yLb6qx39T9nMdj',
account.neutered().toBase58()
)
var key = account.derivePath('0/0')
assert.equal('1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA', key.getAddress())
})
it('works with a prefix', function () {
// mnemonic: abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
var seed = '5eb00bbddcf069084889a8ab9155568165f5c453ccb85e70811aaed6f6da5fc19a5ac40b389cd370d086206dec8aa6c43daea6690f20ad3d8d48b2d2ce9e38e4'
var network = bnetwork.bitcoin
var root = HDNode.fromSeedHex(seed, network, network.bip32)
var account = root.derivePath('44\'/0\'/0\'')
assert.equal(
account.toBase58(),
'xprv9xpXFhFpqdQK3TmytPBqXtGSwS3DLjojFhTGht8gwAAii8py5X6pxeBnQ6ehJiyJ6nDjWGJfZ95WxByFXVkDxHXrqu53WCRGypk2ttuqncb'
)
assert.equal(
'xpub6BosfCnifzxcFwrSzQiqu2DBVTshkCXacvNsWGYJVVhhawA7d4R5WSWGFNbi8Aw6ZRc1brxMyWMzG3DSSSSoekkudhUd9yLb6qx39T9nMdj',
account.neutered().toBase58()
)
var key = account.derivePath('0/0')
assert.equal('1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA', key.getAddress())
})
})
describe('bip49', function () {
it('serialization and address', function () {
// mnemonic: abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
var seed = '5eb00bbddcf069084889a8ab9155568165f5c453ccb85e70811aaed6f6da5fc19a5ac40b389cd370d086206dec8aa6c43daea6690f20ad3d8d48b2d2ce9e38e4'
var network = bnetwork.bitcoin
var root = HDNode.fromSeedHex(seed, network, network.bip49)
var account = root.derivePath('49\'/0\'/0\'')
assert.equal(
account.toBase58(),
'yprvAHwhK6RbpuS3dgCYHM5jc2ZvEKd7Bi61u9FVhYMpgMSuZS613T1xxQeKTffhrHY79hZ5PsskBjcc6C2V7DrnsMsNaGDaWev3GLRQRgV7hxF'
)
assert.equal(
'ypub6Ww3ibxVfGzLrAH1PNcjyAWenMTbbAosGNB6VvmSEgytSER9azLDWCxoJwW7Ke7icmizBMXrzBx9979FfaHxHcrArf3zbeJJJUZPf663zsP',
account.neutered().toBase58()
)
var key = account.derivePath('0/0')
assert.equal('37VucYSaXLCAsxYyAPfbSi9eh4iEcbShgf', key.getAddress())
})
})
describe('bip84', function () {
it('serialization and address', function () {
// mnemonic: abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
var seed = '5eb00bbddcf069084889a8ab9155568165f5c453ccb85e70811aaed6f6da5fc19a5ac40b389cd370d086206dec8aa6c43daea6690f20ad3d8d48b2d2ce9e38e4'
var network = bnetwork.bitcoin
var root = HDNode.fromSeedHex(seed, network, network.bip84)
var account = root.derivePath('84\'/0\'/0\'')
assert.equal(
account.toBase58(),
'zprvAdG4iTXWBoARxkkzNpNh8r6Qag3irQB8PzEMkAFeTRXxHpbF9z4QgEvBRmfvqWvGp42t42nvgGpNgYSJA9iefm1yYNZKEm7z6qUWCroSQnE'
)
assert.equal(
'zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs',
account.neutered().toBase58()
)
var key = account.derivePath('0/0')
assert.equal('bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu', key.getAddress())
})
})

View file

@ -50,7 +50,6 @@ describe('HDNode', function () {
it('has a default depth/index of 0', function () {
var hd = new HDNode(keyPair, chainCode)
assert.strictEqual(hd.depth, 0)
assert.strictEqual(hd.index, 0)
})
@ -124,12 +123,12 @@ describe('HDNode', function () {
})
describe('getAddress', function () {
it('wraps keyPair.getAddress', setupTest(function () {
this.mock(keyPair).expects('getAddress')
.once().withArgs().returns('foobar')
assert.strictEqual(hd.getAddress(), 'foobar')
}))
// it('wraps keyPair.getAddress', setupTest(function () {
// this.mock(keyPair).expects('getAddress')
// .once().withArgs().returns('foobar')
//
// assert.strictEqual(hd.getAddress(), 'foobar')
// }))
})
describe('getNetwork', function () {