Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Next Next commit
upgrade to caravan from (deprecated) unchained-bitcoin, add taproot t…
…ests
  • Loading branch information
turkycat committed Mar 4, 2025
commit 5ac16759552642e2b4558c0eca3a2e9f5dd6e9bf
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