# 钱包相关
# 私钥是怎么来的
# 助记词 (Mnemonic Phrase)
TIP
生成随机熵,由 BIP39 标准生成,一串 12/15/18/21/24 个英文单词。 助记词本质上是一个种子(seed)的可读化表示。 助记词 → 通过 PBKDF2 算法 → 得到一个 512 位的 种子。
# 种子 (Seed)
TIP
由助记词通过 PBKDF2 算法生成,是一个 512 位的随机数。是后续生成私钥、公钥、地址的根基。
# 私钥 (Private Key 32字节随机数)
TIP
私钥就是一个非常大的随机数(通常是 256 位的整数, 即256 位 = 32 字节 = 64 个十六进制字符) - 通过 BIP32/BIP44(分层确定性钱包规范,HD Wallet)从种子推导出来。 - 可以生成一颗完整的 密钥树(无限个私钥)。
# 公钥
TIP
公钥点 = 私钥 × G(G是 secp256k1 椭圆曲线的生成点)。 这里的乘法不是普通乘法,而是 椭圆曲线上的点乘(scalar multiplication,标量乘法),私钥 × G 的意思是:把生成点 G 在曲线上“加自己”很多次。 举例:
- 3 × G = G + G + G
- 7 × G = G + G + G + G + G + G + G
椭圆曲线的点加运算有特殊规则(和普通加法不同),保证结果依然在曲线上。因为私钥是一个很大的数(256 位),相当于要做很多次加法,但计算机能用快速算法高效完成。 计算结果就是一个 公钥点 (X, Y),它唯一对应于私钥。也就是说:公钥点 = 私钥 × G。
得到的公钥可以是:
- 未压缩公钥:65字节,0x04 + X坐标 + Y坐标
- 压缩公钥:33字节,0x02/0x03 + X坐标
公钥在数学上很难反推回私钥(因为这是 椭圆曲线离散对数问题,几乎不可解),所以私钥相对安全。
# 地址
以太坊(EVM)
- 取 未压缩公钥(去掉 0x04 前缀)。
- 对公钥做 Keccak-256 哈希。
- 取最后 20 字节,得到以太坊地址。
- 例:0x + keccak256(pubkey)[12:](从 哈希结果的第 12 个字节开始(索引 12),取 20 字节)
比特币(BTC)
- 取 压缩公钥。
- 做 SHA-256 哈希 → 再做 RIPEMD-160 哈希,得到 pubKeyHash。
- 加上前缀(主网 P2PKH 是 0x00)。
- 做 双 SHA-256,取前4字节作为校验码。
- 拼接后用 Base58Check 编码 → 得到比特币地址。 - 例:1xxx... 开头(P2PKH),或 bc1...(P2WPKH,需 segwit 处理)。
这样就得到最终用户常见的钱包地址。
# BTC的多个地址类型
# 比特币地址类型总结
比特币目前常见的地址类型有以下几种:
P2PKH (Pay-to-PubKey-Hash)
- 格式:以
1
开头 - 示例:
1BoatSLRHtKNngkdXEeobR76b53LETtpyT
- 特点:
- 最早期的地址格式
- 占用区块空间较大
- 安全但效率低
P2SH (Pay-to-Script-Hash)
- 格式:以
3
开头 - 示例:
3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy
- 特点:
- 支持多重签名(multisig)
- 脚本灵活性更强
- 被 SegWit P2SH 包裹时可减少手续费
Bech32 (SegWit 原生地址)
- 格式:以
bc1
开头 - 示例:
bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq
- 特点:
- 更低的手续费
- 更高效的交易数据存储
- 不区分大小写,输入错误更容易检测
- 类型:
P2WPKH
(单签名,类似 P2PKH 的 SegWit 版本)P2WSH
(脚本哈希版本)
Taproot (Bech32m 地址, BIP-350)
- 格式:以
bc1p
开头 - 示例:
bc1p5cyxnuxmeuwuvkwfem96l4acj6r0w4u9t6n7s0
- 特点:
- 支持 Schnorr 签名
- 更高效、更隐私
- 是比特币未来的发展方向
# BTC地址类型对比
传统地址
- P2PKH (
1...
) - P2SH (
3...
)
- P2PKH (
隔离见证 (SegWit)
- P2WPKH / P2WSH (
bc1q...
)
- P2WPKH / P2WSH (
Taproot
- P2TR (
bc1p...
)
- P2TR (
# 小结
TIP
- 如果只是接收比特币,任何地址都可以
- 如果要降低手续费、支持新特性,建议使用
bc1
开头的地址 - 未来推荐使用 Taproot (
bc1p...
) 地址
# MPC钱包
MPC
MPC钱包(Multi-Party Computation Wallet)是一种分布式钱包,它将私钥分发到多个参与者手中,只有当足够多的参与者同意时,才能进行交易。
当你要签名交易时,各个份额在链下用 MPC 协议“协作计算”,生成签名。 整个过程中,完整的私钥从来不会出现在任何地方。 好处:
- 安全性提升,无法通过盗取单点私钥来窃取资产。
- 无需在链上额外部署合约。
- 相比链上多签,MPC钱包签名在链下完成,更省 Gas。
劣势:
- MPC钱包需要依赖 MPC 服务提供商,存在一定信任问题(中心化)。
- MPC钱包的实现较为复杂,需要专业的技术团队进行开发和维护。
- 链上只看到一个签名,外界无法确认是否多人参与。
适用场景: 更适合个人或机构想要提高安全性和体验的场景,比如交易所、托管机构、C 端钱包。
# 多签钱包
多签
多签钱包(Multi-Signature Wallet)是一种需要多个私钥才能进行交易的特殊钱包。每个参与者都持有一整把私钥,各自单独签名,最终在链上收集多个签名。
需要在不同的链上部署多签合约,当交易需要签名时,必须由足够多的参与者参与签名,交易最终经过多签合约验证后才能完成。 好处:
- 多个完整私钥独立保管,安全性高。
- 无需依赖 MPC 服务提供商,去中心化程度高。
- 外界可以确认交易是否经过多签,提高透明度。
劣势:
- 需要在链上部署合约,增加 Gas 费用。
- 签名不消耗Gas,最终交易上链验证时消耗更多Gas。
适用场景: 适合强调治理透明的场景(DAO、基金会金库),因为链上能直接看到多个签名。
# 什么是 ECDSA/EdDSA
ECDSA
和 EdDSA
都是 数字签名算法,用来保证交易的合法性。
# ECDSA
ECDSA
ECDSA
是基于椭圆曲线的数字签名算法。目前以太坊、比特币、BSC、Polygon 等主流公链都用它。
# EdDSA
EdDSA
EdDSA
是一种基于 爱德华曲线的数字签名算法。它具有更好的安全性、性能和可扩展性,被广泛应用于密码学和区块链领域。Solana、Aptos、Near 等公链使用它。
# 支持ECDSA/EdDSA的链是什么意思?
TIP
支持ECDSA/EdDSA
的链,指的是这条区块链在底层共识层面,原生支持这种签名算法,即:
- 用户的钱包地址 = 由该签名算法的公钥推导而来。
- 交易要想被节点接受,必须用该算法生成的签名。