Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)

A small JavaScript library and accompanying tool that derives bitcoin addresses from extended public keys. Built upon
[unchained-bitcoin](https://github.com/unchained-capital/unchained-bitcoin)
[caravan](https://github.com/caravan-bitcoin/caravan)
and [bitcoinjs-lib](https://github.com/bitcoinjs/bitcoinjs-lib).

For more details refer to the individual packages:
Expand All @@ -17,6 +17,7 @@ For more details refer to the individual packages:
- [BIP 44](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) - Multi-Account Hierarchy for Deterministic Wallets
- [BIP 49](https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki) - Derivation scheme for P2WPKH-nested-in-P2SH based accounts
- [BIP 84](https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki) - Derivation scheme for P2WPKH based accounts
- [BIP 86](https://github.com/bitcoin/bips/blob/master/bip-0086.mediawiki) - Key Derivation for Single Key P2TR Outputs

Samourai Wallet wrote a short summary on the differences between [BIP 44, BIP 49, BIP 84](https://samourai.kayako.com/article/65-bip-44-bip-49-and-bip84) and [XPUB's, YPUB's, ZPUB's](https://samourai.kayako.com/article/49-xpub-s-ypub-s-zpub-s). For a detailed explanation on derivation paths refer to [learn me a bitcoin](https://learnmeabitcoin.com/technical/derivation-paths).

Expand Down
2 changes: 1 addition & 1 deletion packages/xpub-lib/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)

A small JavaScript library that derives bitcoin addresses from extended public keys. Built upon
[unchained-bitcoin](https://github.com/unchained-capital/unchained-bitcoin)
[caravan](https://github.com/caravan-bitcoin/caravan)
and [bitcoinjs-lib](https://github.com/bitcoinjs/bitcoinjs-lib).

The library supports derivation from `xpub`s, `zpub`s, and `ypub`s, as well as
Expand Down
5 changes: 3 additions & 2 deletions packages/xpub-lib/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@swan-bitcoin/xpub-lib",
"version": "0.1.5",
"version": "0.2.0",
"description": "A JavaScript library for bitcoin address derivation from extended public keys, built upon bitcoinjs-lib and Unchained's bitcoin utilities. Supports P2PKH, P2SH, and P2WPKH (bech32) addresses as defined in BIP44, BIP49, and BIP84.",
"author": "Pablof7z <pablo@swan.com>",
"license": "MIT",
Expand All @@ -25,14 +25,15 @@
"p2pkh",
"p2sh",
"p2wpkh",
"p2tr",
"bech32"
],
"files": [
"lib/**"
],
"dependencies": {
"bitcoinjs-lib": "^5.2.0",
"unchained-bitcoin": "0.0.15"
"@caravan/bitcoin": "^0.3.1"
},
"scripts": {
"babel-version": "babel --version",
Expand Down
4 changes: 2 additions & 2 deletions packages/xpub-lib/src/conversion.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* @module conversion
*/

import { NETWORKS, convertExtendedPublicKey } from "unchained-bitcoin"
import { Network, convertExtendedPublicKey } from "@caravan/bitcoin"
import { TYPE } from "./types"

/**
Expand All @@ -19,7 +19,7 @@ import { TYPE } from "./types"
* with the failed key and error message
*/
function convertToXPUB(extPubKey, network) {
const targetPrefix = network === NETWORKS.MAINNET ? TYPE.XPUB : TYPE.TPUB
const targetPrefix = network === Network.MAINNET ? TYPE.XPUB : TYPE.TPUB
return convertExtendedPublicKey(extPubKey, targetPrefix)
}

Expand Down
26 changes: 13 additions & 13 deletions packages/xpub-lib/src/conversion.test.js
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
import { NETWORKS } from "unchained-bitcoin"
import { Network } from "@caravan/bitcoin"
import { KEY } from "../test/fixtures"

import { convertToXPUB } from "./conversion"

describe("convertToXPUB", () => {
test("no conversion if none is required", () => {
expect(convertToXPUB(KEY.MAIN.XPUB, NETWORKS.MAINNET)).toBe(KEY.MAIN.XPUB)
expect(convertToXPUB(KEY.TEST.TPUB, NETWORKS.TESTNET)).toBe(KEY.TEST.TPUB)
expect(convertToXPUB(KEY.MAIN.XPUB, Network.MAINNET)).toBe(KEY.MAIN.XPUB)
expect(convertToXPUB(KEY.TEST.TPUB, Network.TESTNET)).toBe(KEY.TEST.TPUB)
})
test("conversion of mainnet keys", () => {
expect(convertToXPUB(KEY.MAIN.YPUB, NETWORKS.MAINNET)).toBe(KEY.MAIN.XPUB)
expect(convertToXPUB(KEY.MAIN.ZPUB, NETWORKS.MAINNET)).toBe(KEY.MAIN.XPUB)
expect(convertToXPUB(KEY.MAIN.YPUB, Network.MAINNET)).toBe(KEY.MAIN.XPUB)
expect(convertToXPUB(KEY.MAIN.ZPUB, Network.MAINNET)).toBe(KEY.MAIN.XPUB)
})
test("conversion of testnet keys", () => {
expect(convertToXPUB(KEY.TEST.UPUB, NETWORKS.TESTNET)).toBe(KEY.TEST.TPUB)
expect(convertToXPUB(KEY.TEST.VPUB, NETWORKS.TESTNET)).toBe(KEY.TEST.TPUB)
expect(convertToXPUB(KEY.TEST.UPUB, Network.TESTNET)).toBe(KEY.TEST.TPUB)
expect(convertToXPUB(KEY.TEST.VPUB, Network.TESTNET)).toBe(KEY.TEST.TPUB)
})
test("conversion of mainnet keys to testnet keys", () => {
expect(convertToXPUB(KEY.MAIN.XPUB, NETWORKS.TESTNET)).toBe(KEY.TEST.TPUB)
expect(convertToXPUB(KEY.MAIN.YPUB, NETWORKS.TESTNET)).toBe(KEY.TEST.TPUB)
expect(convertToXPUB(KEY.MAIN.ZPUB, NETWORKS.TESTNET)).toBe(KEY.TEST.TPUB)
expect(convertToXPUB(KEY.MAIN.XPUB, Network.TESTNET)).toBe(KEY.TEST.TPUB)
expect(convertToXPUB(KEY.MAIN.YPUB, Network.TESTNET)).toBe(KEY.TEST.TPUB)
expect(convertToXPUB(KEY.MAIN.ZPUB, Network.TESTNET)).toBe(KEY.TEST.TPUB)
})
test("conversion of testnet keys to mainnet keys", () => {
expect(convertToXPUB(KEY.TEST.TPUB, NETWORKS.MAINNET)).toBe(KEY.MAIN.XPUB)
expect(convertToXPUB(KEY.TEST.UPUB, NETWORKS.MAINNET)).toBe(KEY.MAIN.XPUB)
expect(convertToXPUB(KEY.TEST.VPUB, NETWORKS.MAINNET)).toBe(KEY.MAIN.XPUB)
expect(convertToXPUB(KEY.TEST.TPUB, Network.MAINNET)).toBe(KEY.MAIN.XPUB)
expect(convertToXPUB(KEY.TEST.UPUB, Network.MAINNET)).toBe(KEY.MAIN.XPUB)
expect(convertToXPUB(KEY.TEST.VPUB, Network.MAINNET)).toBe(KEY.MAIN.XPUB)
})
})
6 changes: 3 additions & 3 deletions packages/xpub-lib/src/derivation.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
*/

import * as bitcoin from "bitcoinjs-lib"
import { deriveChildPublicKey, networkData, NETWORKS } from "unchained-bitcoin"
import { deriveChildPublicKey, networkData, Network } from "@caravan/bitcoin"
import { fullDerivationPath, partialKeyDerivationPath } from "./paths"
import {
isValidExtPubKey,
Expand All @@ -21,9 +21,9 @@ import { Purpose } from "./purpose"
*
* @constant
* @type {string}
* @default NETWORKS.TESTNET
* @default Network.TESTNET
* */
const DEFAULT_NETWORK = NETWORKS.TESTNET
const DEFAULT_NETWORK = Network.TESTNET
/**
* Default purpose to use for address derivation.
*
Expand Down
Loading
Loading