Skip to content

BTC #2:HD Wallet

BIP32/39/44 标准由比特币社区首先提出,后来被以太坊和其他链广泛采用。同一套助记词在不同链上生成不同地址,靠的就是 coin_type 的区分。


多链派生路径对比

graph TB
    SEED["🌱 同一组助记词<br/>abandon ability able ..."]
    SEED --> M["m<br/>主密钥"]

    M --> BTC["m/44'/0'/0'/0/0<br/>🟠 Bitcoin"]
    M --> ETH["m/44'/60'/0'/0/0<br/>🔷 Ethereum"]
    M --> SOL["m/44'/501'/0'/0'<br/>🟣 Solana"]
    M --> SUI["m/44'/784'/0'/0'/0'<br/>🔵 SUI"]

    BTC --> BTCA["1A1zP1eP5QGefi2D..."]
    ETH --> ETHA["0x742d35Cc6634C0..."]
    SOL --> SOLA["7Np41oeYqPefeN..."]
    SUI --> SUIA["0x6af2c2..."]

各链的派生路径差异

coin_type标准路径备注
Bitcoin0m/44'/0'/0'/0/0BIP44 原始标准
Ethereum60m/44'/60'/0'/0/0EIP-2334
Solana501m/44'/501'/0'/0'全部强化派生
SUI784m/44'/784'/0'/0'/0'全部强化派生

注意 Solana 和 SUI 的路径中所有层级都是强化派生(带 '),而 BTC 和 ETH 的最后两层(change 和 index)是普通派生。

比特币 HD 钱包的特殊之处

找零地址(Change Address)

比特币使用 UTXO 模型,一笔交易的找零需要发送到新地址。BIP44 中 change=1 的分支专门用于找零地址:

graph LR
    subgraph "外部地址 (change=0)"
        E0["m/.../0/0 收款"]
        E1["m/.../0/1 收款"]
        E2["m/.../0/2 收款"]
    end

    subgraph "找零地址 (change=1)"
        C0["m/.../1/0 找零"]
        C1["m/.../1/1 找零"]
    end

扩展公钥(xpub)

比特币钱包支持导出扩展公钥,允许在不知道私钥的情况下生成新的接收地址。这在"只读钱包"和"商户收款"场景下非常有用。

学习资源