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 | 标准路径 | 备注 |
|---|---|---|---|
| Bitcoin | 0 | m/44'/0'/0'/0/0 | BIP44 原始标准 |
| Ethereum | 60 | m/44'/60'/0'/0/0 | EIP-2334 |
| Solana | 501 | m/44'/501'/0'/0' | 全部强化派生 |
| SUI | 784 | m/44'/784'/0'/0'/0' | 全部强化派生 |
注意 Solana 和 SUI 的路径中所有层级都是强化派生(带 '),而 BTC 和 ETH 的最后两层(change 和 index)是普通派生。
比特币使用 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
比特币钱包支持导出扩展公钥,允许在不知道私钥的情况下生成新的接收地址。这在"只读钱包"和"商户收款"场景下非常有用。