Merge pull request #27 from xnova/master
Additional testnet fixes with HDWallet [WIP]
This commit is contained in:
commit
a4ba59e9ba
2 changed files with 23 additions and 4 deletions
|
@ -13,7 +13,8 @@ var HDWallet = module.exports = function(seed, network) {
|
|||
|
||||
var I = Crypto.HMAC(Crypto.SHA512, seed, 'Bitcoin seed', { asBytes: true })
|
||||
this.chaincode = I.slice(32)
|
||||
this.priv = new ECKey(I.slice(0, 32).concat([1]), true)
|
||||
this.keyVersion = network == 'Bitcoin' ? Address.address_types.prod : Address.address_types.testnet
|
||||
this.priv = new ECKey(I.slice(0, 32).concat([1]), true, this.keyVersion)
|
||||
this.pub = this.priv.getPub()
|
||||
this.network = network || 'Bitcoin'
|
||||
this.index = 0
|
||||
|
@ -106,10 +107,10 @@ HDWallet.fromBytes = function(input) {
|
|||
// 33 bytes: the public key or private key data (0x02 + X or 0x03 + X for
|
||||
// public keys, 0x00 + k for private keys)
|
||||
if (type == 'private') {
|
||||
hd.priv = new ECKey(input.slice(46, 78).concat([1]), true)
|
||||
hd.priv = new ECKey(input.slice(46, 78).concat([1]), true, this.keyVersion)
|
||||
hd.pub = hd.priv.getPub()
|
||||
} else {
|
||||
hd.pub = new ECPubKey(input.slice(45, 78), true)
|
||||
hd.pub = new ECPubKey(input.slice(45, 78), true, this.keyVersion)
|
||||
}
|
||||
|
||||
return hd
|
||||
|
@ -213,10 +214,11 @@ HDWallet.prototype.derive = function(i) {
|
|||
// ki = IL + kpar (mod n).
|
||||
hd.priv = this.priv.add(new ECKey(IL.concat([1])))
|
||||
hd.priv.compressed = true
|
||||
hd.priv.version = this.keyVersion
|
||||
hd.pub = hd.priv.getPub()
|
||||
} else {
|
||||
// Ki = (IL + kpar)*G = IL*G + Kpar
|
||||
hd.pub = this.pub.add(new ECKey(IL.concat([1])).getPub())
|
||||
hd.pub = this.pub.add(new ECKey(IL.concat([1]), true, this.keyVersion).getPub())
|
||||
}
|
||||
|
||||
// ci = IR.
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
var Wallet = require('../src/wallet.js')
|
||||
var Address = require('../src/address.js')
|
||||
var assert = require('assert')
|
||||
|
||||
describe('Wallet', function() {
|
||||
|
@ -33,4 +34,20 @@ describe('Wallet', function() {
|
|||
assert.equal(wallet.derivationMethod, 'public')
|
||||
})
|
||||
})
|
||||
|
||||
describe('networkType', function() {
|
||||
it('ensures that a mainnet Wallet has mainnet child keys (pub and priv)', function() {
|
||||
var w = Wallet("foobar", {network: "Bitcoin"})
|
||||
assert(w.getMasterKey().priv.version == Address.address_types['prod'])
|
||||
w.generateAddress()
|
||||
assert(w.getPrivateKey(0).priv.version == Address.address_types['prod'])
|
||||
})
|
||||
|
||||
it('ensures that a testnet Wallet has testnet child keys (pub and priv)', function() {
|
||||
var w = Wallet("foobar", {network: "BitcoinTest"})
|
||||
assert(w.getMasterKey().priv.version == Address.address_types['testnet'])
|
||||
w.generateAddress()
|
||||
assert(w.getPrivateKey(0).priv.version == Address.address_types['testnet'])
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
Loading…
Reference in a new issue