Crate khodpay_bip44

Crate khodpay_bip44 

Source
Expand description

§BIP-44: Multi-Account Hierarchy for Deterministic Wallets

This crate provides a production-ready Rust implementation of BIP-44, which defines a logical hierarchy for deterministic wallets based on BIP-32.

§Features

  • Multi-Account Support: Manage multiple accounts per cryptocurrency
  • Multi-Coin Support: Support for Bitcoin, Ethereum, Litecoin, and more
  • BIP Standards: Support for BIP-44, BIP-49, BIP-84, and BIP-86
  • Account Caching: Efficient account derivation with caching
  • Builder Pattern: Fluent API for wallet construction
  • Serialization: Optional serde support for persistence
  • Type Safety: Strong typing for paths, chains, and coin types

§Quick Start

use khodpay_bip44::{Wallet, Purpose, CoinType, Language};
use khodpay_bip32::Network;

// Create a wallet from a mnemonic
let mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about";
let mut wallet = Wallet::from_mnemonic(
    mnemonic,
    "",  // password
    Language::English,
    Network::BitcoinMainnet,
)?;

// Get the first Bitcoin account
let account = wallet.get_account(Purpose::BIP44, CoinType::Bitcoin, 0)?;

// Derive receiving addresses
let addr0 = account.derive_external(0)?;
let addr1 = account.derive_external(1)?;

// Derive change addresses
let change0 = account.derive_internal(0)?;

§BIP-44 Path Structure

m / purpose' / coin_type' / account' / change / address_index
  • purpose’: Constant set to 44’ (or 49’, 84’, 86’ for other standards)
  • coin_type’: Cryptocurrency type (0’ for Bitcoin, 60’ for Ethereum, etc.)
  • account’: Account index (allows multiple accounts per coin)
  • change: 0 for external (receiving), 1 for internal (change)
  • address_index: Address index within the chain

§Common Use Cases

§Creating a Multi-Coin Wallet

use khodpay_bip44::{Wallet, Purpose, CoinType, Language};
use khodpay_bip32::Network;

let mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about";
let mut wallet = Wallet::from_english_mnemonic(mnemonic, "", Network::BitcoinMainnet)?;

// Bitcoin account
let btc_account = wallet.get_account(Purpose::BIP44, CoinType::Bitcoin, 0)?;
let btc_addr = btc_account.derive_external(0)?;

// Ethereum account
let eth_account = wallet.get_account(Purpose::BIP44, CoinType::Ethereum, 0)?;
let eth_addr = eth_account.derive_external(0)?;

§Using the Builder Pattern

use khodpay_bip44::{WalletBuilder, Purpose, CoinType, Language};
use khodpay_bip32::Network;

let mut wallet = WalletBuilder::new()
    .mnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about")
    .password("my-secure-password")
    .language(Language::English)
    .network(Network::BitcoinMainnet)
    .build()?;

let account = wallet.get_account(Purpose::BIP44, CoinType::Bitcoin, 0)?;

§Batch Address Generation

use khodpay_bip44::{Wallet, Purpose, CoinType, Chain, Language};
use khodpay_bip32::Network;

let mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about";
let mut wallet = Wallet::from_english_mnemonic(mnemonic, "", Network::BitcoinMainnet)?;
let account = wallet.get_account(Purpose::BIP44, CoinType::Bitcoin, 0)?;

// Generate 20 receiving addresses
let addresses = account.derive_address_range(Chain::External, 0, 20)?;
assert_eq!(addresses.len(), 20);

§Using Path Strings

use khodpay_bip44::{Bip44Path, Purpose, CoinType, Chain};

// Parse a BIP-44 path
let path: Bip44Path = "m/44'/0'/0'/0/0".parse()?;
assert_eq!(path.purpose(), Purpose::BIP44);
assert_eq!(path.coin_type(), CoinType::Bitcoin);
assert_eq!(path.account(), 0);
assert_eq!(path.chain(), Chain::External);
assert_eq!(path.address_index(), 0);

// Convert back to string
assert_eq!(path.to_string(), "m/44'/0'/0'/0/0");

§SegWit and Taproot

use khodpay_bip44::{Wallet, Purpose, CoinType, Language};
use khodpay_bip32::Network;

let mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about";
let mut wallet = Wallet::from_english_mnemonic(mnemonic, "", Network::BitcoinMainnet)?;

// BIP-84: Native SegWit (bc1q...)
let segwit_account = wallet.get_account(Purpose::BIP84, CoinType::Bitcoin, 0)?;

// BIP-86: Taproot (bc1p...)
let taproot_account = wallet.get_account(Purpose::BIP86, CoinType::Bitcoin, 0)?;

§Security Considerations

  • Mnemonic Storage: Never store mnemonics in plain text. Use secure storage.
  • Password Protection: Use strong passwords for additional security (BIP-39 passphrase).
  • Key Material: Private keys should never leave secure memory.
  • Gap Limit: Follow BIP-44 gap limit (20) for address discovery.

§Supported Cryptocurrencies

This crate supports all SLIP-44 registered coin types, including:

  • Bitcoin (BTC) - Coin type 0
  • Ethereum (ETH) - Coin type 60
  • Litecoin (LTC) - Coin type 2
  • Dogecoin (DOGE) - Coin type 3
  • And many more via CoinType::Custom

§Optional Features

  • serde: Enable serialization support for paths and metadata

Structs§

Account
A BIP-44 account wrapping a BIP-32 extended private key with metadata.
AccountMetadata
Serializable account metadata without private keys.
AccountScanResult
Result of scanning both chains of an account.
AccountScanner
Scanner for discovering used accounts and addresses according to BIP-44.
AddressIterator
Iterator for sequential address generation on a chain.
Bip44Path
BIP-44 derivation path.
Bip44PathBuilder
Builder for constructing BIP-44 paths with a fluent API.
ChainScanResult
Result of scanning a single chain (external or internal).
DerivedAddress
A derived address with BIP-44 metadata.
GapLimitChecker
Gap limit checker for BIP-44 address discovery.
MockBlockchain
Mock blockchain backend for testing account discovery.
Wallet
High-level BIP-44 wallet holding the master key.
WalletBuilder
Builder for constructing a Wallet with a fluent API.

Enums§

Chain
Address chain type for BIP-44 derivation.
CoinType
Cryptocurrency coin types according to SLIP-44 registry.
Error
Comprehensive error types for BIP-44 multi-account hierarchy operations.
Language
Supported languages for BIP39 mnemonic phrases.
Purpose
Derivation purpose constants defining different address format standards.

Constants§

DEFAULT_GAP_LIMIT
Default gap limit as specified by BIP-44.

Traits§

AccountDiscovery
Trait for querying blockchain state to discover address usage.

Type Aliases§

Result
Result type alias for BIP-44 operations.