bip32-utils
A set of utilities for working with BIP32.
Compatible with bitcoinjs-lib ^2.0.0
and ^3.0.0
.
Example
BIP32 Account
let bitcoin = require('bitcoinjs-lib')
let bip32utils = require('bip32-utils')
let m = bitcoin.HDNode.fromSeedHex(seedHex)
let i = m.deriveHardened(0)
let external = i.derive(0)
let internal = i.derive(1)
let account = new bip32utils.Account([
new bip32utils.Chain(external.neutered()),
new bip32utils.Chain(internal.neutered())
])
console.log(account.getChainAddress(0))
account.nextChainAddress(0)
console.log(account.getChainAddress(1))
console.log(account.nextChainAddress(1))
console.log(account.derive('1QEj2WQD9vxTzsGEvnmLpvzeLVrpzyKkGt'))
console.log(account.derive('1QEj2WQD9vxTzsGEvnmLpvzeLVrpzyKkGt', [external, internal]))
BIP32 Chains
let bitcoin = require('bitcoinjs-lib')
let bip32utils = require('bip32-utils')
let hdNode = bitcoin.HDNode.fromSeedHex(seedHex)
let chain = new bip32utils.Chain(hdNode)
for (let k = 0; k < 10; ++k) chain.next()
let address = chain.get()
console.log(chain.find(address))
console.log(chain.pop())
BIP32 Discovery (manual)
let bip32utils = require('bip32-utils')
let bitcoin = require('bitcoinjs-lib')
let Blockchain = require('cb-blockr')
let blockchain = new Blockchain('testnet')
let hdNode = bitcoin.HDNode.fromSeedHex(seedHex)
let chain = bip32utils.Chain(hdNode)
let GAP_LIMIT = 20
bip32utils.discovery(chain, GAP_LIMIT, function(addresses, callback) {
blockchain.addresses.summary(addresses, function(err, results) {
if (err) return callback(err)
let areUsed = results.map(function(result) {
return result.totalReceived > 0
})
callback(undefined, areUsed)
})
}, function(err, used, checked) {
if (err) throw err
console.log('Discovered at most ' + used + ' used addresses')
console.log('Checked ' + checked + ' addresses')
console.log('With at least ' + (checked - used) + ' unused addresses')
let unused = checked - used
for (let i = 1; i < unused; ++i) chain.pop()
console.log('Total number of addresses (after prune): ', chain.addresses.length)
})
LICENSE MIT