https://github.com/coinspace/bip32-utils
https://github.com/coinspace/bip32-utils
Last synced: 3 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/coinspace/bip32-utils
- Owner: CoinSpace
- License: mit
- Created: 2020-12-03T10:31:35.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2020-12-08T09:04:40.000Z (over 5 years ago)
- Last Synced: 2025-07-06T03:52:51.896Z (11 months ago)
- Language: JavaScript
- Size: 183 KB
- Stars: 0
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# bip32-utils
[](https://github.com/feross/standard)
A set of utilities for working with BIP32.
Compatible with bitcoinjs-lib `^2.0.0` and `^3.0.0`.
## Example
#### BIP32 Account
``` javascript
var bitcoin = require('bitcoinjs-lib')
var bip32utils = require('bip32-utils')
// ...
var m = bitcoin.HDNode.fromSeedHex(seedHex)
var i = m.deriveHardened(0)
var external = i.derive(0)
var internal = i.derive(1)
var account = new bip32utils.Account([
new bip32utils.Chain(external.neutered()),
new bip32utils.Chain(internal.neutered())
])
console.log(account.getChainAddress(0))
// => 1QEj2WQD9vxTzsGEvnmLpvzeLVrpzyKkGt
account.nextChainAddress(0)
console.log(account.getChainAddress(1))
// => 1DAi282VN7Ack9o5BqWYkiEsS8Vgx1rLn
console.log(account.nextChainAddress(1))
// => 1CXKM323V3kkrHmZQYPUTftGh9VrAWuAYX
console.log(account.derive('1QEj2WQD9vxTzsGEvnmLpvzeLVrpzyKkGt'))
// => xpub6A5Fz4JZg4kd8pLTTaMBKsvVgzRBrvai6ChoxWNTtYQ3UDVG1VyAWQqi6SNqkpsfsx9F8pRqwtKUbU4j4gqpuN2gpgQs4DiJxsJQvTjdzfA
// NOTE: passing in the parent nodes allows for private key escalation (see xprv vs xpub)
console.log(account.derive('1QEj2WQD9vxTzsGEvnmLpvzeLVrpzyKkGt', [external, internal]))
// => xprv9vodQPEygdPGUWeKUVNd6M2N533PvEYP21tYxznauyhrYBBCmdKxRJzmnsTsSNqfTJPrDF98GbLCm6xRnjceZ238Qkf5GQGHk79CrFqtG4d
```
#### BIP32 Chains
``` javascript
var bitcoin = require('bitcoinjs-lib')
var bip32utils = require('bip32-utils')
// ...
var hdNode = bitcoin.HDNode.fromSeedHex(seedHex)
var chain = new bip32utils.Chain(hdNode)
for (var k = 0; k < 10; ++k) chain.next()
var address = chain.get()
console.log(chain.find(address))
// => 9
console.log(chain.pop())
// => address
```
#### BIP32 Discovery (manual)
``` javascript
var bip32utils = require('bip32-utils')
var bitcoin = require('bitcoinjs-lib')
var Blockchain = require('cb-blockr')
// ...
var blockchain = new Blockchain('testnet')
var hdNode = bitcoin.HDNode.fromSeedHex(seedHex)
var chain = bip32utils.Chain(hdNode)
var GAP_LIMIT = 20
var GAP_LIMIT_MAX = 20
bip32utils.discovery(chain, GAP_LIMIT, GAP_LIMIT_MAX, function(addresses, callback) {
blockchain.addresses.summary(addresses, function(err, results) {
if (err) return callback(err)
var areUsed = results.reduce(function(obj, result) {
obj[result] = result.totalReceived > 0
return obj
}, {})
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')
// throw away ALL unused addresses AFTER the last unused address
var unused = checked - used
for (var i = 1; i < unused; ++i) chain.pop()
// remember used !== total, chain may have started at a k-index > 0
console.log('Total number of addresses (after prune): ', chain.addresses.length)
})
```
## LICENSE [MIT](LICENSE)