BIP85

The BIP85 specification allows you to deterministically derive new BIP39 mnemonics from an exi

BIP85

The BIP85 specification allows you to deterministically derive new BIP39 mnemonics from an existing mnemonic. This is useful for creating separate wallets or accounts while maintaining a single backup.

Deriving a Mnemonic

To derive a BIP85 mnemonic, you need a software signer initialized with a mnemonic (hardware wallet-based signers are not supported at the moment). The derived mnemonic is obtained with Signer::derive_bip85_mnemonic(), which takes an index (0-based) and a word_count (12 or 24).

// Load mnemonic
let mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about";

// Create signer
let is_mainnet = false;
let signer = SwSigner::new(mnemonic, is_mainnet)?;

// Derive menmonics
let derived_0_12 = signer.derive_bip85_mnemonic(0, 12)?;
let derived_0_24 = signer.derive_bip85_mnemonic(0, 24)?;
let derived_1_12 = signer.derive_bip85_mnemonic(1, 12)?;
# Load mnemonic
test_mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"
mnemonic = Mnemonic(test_mnemonic)

# Create signer
network = Network.testnet()
signer = Signer(mnemonic, network)

# Derive mnemonics
derived_0_12 = signer.derive_bip85_mnemonic(0, 12)
derived_0_24 = signer.derive_bip85_mnemonic(0, 24)
derived_1_12 = signer.derive_bip85_mnemonic(1, 12)
// Load mnemonic
const mnemonic = new lwk.Mnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about");

// Create signer
const network = lwk.Network.testnet();
const signer = new lwk.Signer(mnemonic, network);
console.log("Signer created");

// Derive menmonics
const derived_0_12 = await signer.derive_bip85_mnemonic(0, 12);
const derived_0_24 = await signer.derive_bip85_mnemonic(0, 24);
const derived_1_12 = await signer.derive_bip85_mnemonic(1, 12);
	// Load mnemonic
	testMnemonic := "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"
	mnemonic, err := lwk.NewMnemonic(testMnemonic)
	if err != nil {
		log.Fatal(err)
	}

	// Create signer
	network := lwk.NetworkTestnet()
	signer, err := lwk.NewSigner(mnemonic, network)
	if err != nil {
		log.Fatal(err)
	}

	// Derive mnemonics
	derived0_12, err := signer.DeriveBip85Mnemonic(uint32(0), uint32(12))
	if err != nil {
		log.Fatal(err)
	}

	derived0_24, err := signer.DeriveBip85Mnemonic(uint32(0), uint32(24))
	if err != nil {
		log.Fatal(err)
	}

	derived1_12, err := signer.DeriveBip85Mnemonic(uint32(1), uint32(12))
	if err != nil {
		log.Fatal(err)
	}

Next: CLI


Did this page help you?

The Liquid Network is a Bitcoin layer-2 enabling the issuance of security tokens and other digital assets.

© 2023 Liquid Network
All rights reserved.

Feedback and Content Requests

We'd be happy to hear your suggestions on how we can improve this site.

BuildOnL2 Community

The official BuildOnL2 community lives
at community.liquid.net. Join us and build the future of Bitcoin on Liquid.

Telegram

Community-driven telegram group where
most of the Liquid developers hang out.
Go to t.me/liquid_devel to join.