# 钱包相关

# 私钥是怎么来的

# 助记词 (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)

  1. 取 未压缩公钥(去掉 0x04 前缀)。
  2. 对公钥做 Keccak-256 哈希。
  3. 取最后 20 字节,得到以太坊地址。
    • 例:0x + keccak256(pubkey)[12:](从 哈希结果的第 12 个字节开始(索引 12),取 20 字节)

比特币(BTC)

  1. 取 压缩公钥。
  2. 做 SHA-256 哈希 → 再做 RIPEMD-160 哈希,得到 pubKeyHash。
  3. 加上前缀(主网 P2PKH 是 0x00)。
  4. 做 双 SHA-256,取前4字节作为校验码。
  5. 拼接后用 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...)
  • 隔离见证 (SegWit)

    • P2WPKH / P2WSH (bc1q...)
  • Taproot

    • P2TR (bc1p...)

# 小结

TIP

  • 如果只是接收比特币,任何地址都可以
  • 如果要降低手续费、支持新特性,建议使用 bc1 开头的地址
  • 未来推荐使用 Taproot (bc1p...) 地址

# MPC钱包

MPC

MPC钱包(Multi-Party Computation Wallet)是一种分布式钱包,它将私钥分发到多个参与者手中,只有当足够多的参与者同意时,才能进行交易。

当你要签名交易时,各个份额在链下用 MPC 协议“协作计算”,生成签名。 整个过程中,完整的私钥从来不会出现在任何地方。 好处:

  1. 安全性提升,无法通过盗取单点私钥来窃取资产。
  2. 无需在链上额外部署合约。
  3. 相比链上多签,MPC钱包签名在链下完成,更省 Gas。

劣势:

  1. MPC钱包需要依赖 MPC 服务提供商,存在一定信任问题(中心化)。
  2. MPC钱包的实现较为复杂,需要专业的技术团队进行开发和维护。
  3. 链上只看到一个签名,外界无法确认是否多人参与。

适用场景: 更适合个人或机构想要提高安全性和体验的场景,比如交易所、托管机构、C 端钱包。

# 多签钱包

多签

多签钱包(Multi-Signature Wallet)是一种需要多个私钥才能进行交易的特殊钱包。每个参与者都持有一整把私钥,各自单独签名,最终在链上收集多个签名。

需要在不同的链上部署多签合约,当交易需要签名时,必须由足够多的参与者参与签名,交易最终经过多签合约验证后才能完成。 好处:

  1. 多个完整私钥独立保管,安全性高。
  2. 无需依赖 MPC 服务提供商,去中心化程度高。
  3. 外界可以确认交易是否经过多签,提高透明度。

劣势:

  1. 需要在链上部署合约,增加 Gas 费用。
  2. 签名不消耗Gas,最终交易上链验证时消耗更多Gas。

适用场景: 适合强调治理透明的场景(DAO、基金会金库),因为链上能直接看到多个签名。

# 什么是 ECDSA/EdDSA

ECDSAEdDSA 都是 数字签名算法,用来保证交易的合法性。

# ECDSA

ECDSA

ECDSA是基于椭圆曲线的数字签名算法。目前以太坊、比特币、BSC、Polygon 等主流公链都用它。

# EdDSA

EdDSA

EdDSA是一种基于 爱德华曲线的数字签名算法。它具有更好的安全性、性能和可扩展性,被广泛应用于密码学和区块链领域。Solana、Aptos、Near 等公链使用它。

# 支持ECDSA/EdDSA的链是什么意思?

TIP

支持ECDSA/EdDSA的链,指的是这条区块链在底层共识层面,原生支持这种签名算法,即:

  1. 用户的钱包地址 = 由该签名算法的公钥推导而来。
  2. 交易要想被节点接受,必须用该算法生成的签名。