mt logoMyToken
实时持仓
$195,970,391,743.71 +0%
24H爆仓
$152,362,736.89 -0.43%
恐慌指数:
0%
ETH Gas
币种
交易所

一文系统地理解比特币地址相关的知识体系

收藏
分享

原文作者:付少庆,SatoshiLab,万物岛 BTC 工作室

1. 准备知识

在完全理解各种数字货币钱包地址之前,我们需要一些基础知识。主要包括非对称加密的公私钥知识,哈希算法,常见的编码知识,以及地址产生的基础原理。比特币的钱包地址都是根据 BIP 协议设计出来的,大部分非比特币钱包的地址也是根据 BIP 相关协议来设计的。我们在梳理比特币地址相关知识点的时候,也会辅助介绍相关的其他类型钱包地址。

1.1. 非对称加密知识与公私钥

非对称加密是现代密码学的基石,由惠特菲尔德·迪菲(Whitfield Diffie)和马丁·赫尔曼(Martin Hellman)在 1976 年首次提出。其核心特点是使用一对数学上相关的密钥:一个公开的公钥和一个保密的私钥。主要特点在于加密和解密过程由不同的密钥完成:用公钥加密的信息,只能由对应的私钥解密;反之,用私钥签名的信息,可由对应的公钥验证其真实性。这完美解决了对称加密中的密钥分发难题,实现了无需提前共享秘密的安全通信。

在当前数字货币领域,最常用的非对称加密算法是椭圆曲线数字签名算法(ECDSA),特别是比特币等货币使用的 secp 256 k 1 曲线,因其在相同安全强度下比传统 RSA 算法密钥更短、效率更高。在比特币的 Taproot 技术之后,在加密货币领域也开始使用 Schnorr 数字签名算法,与 ECDSA 相比,Schnorr 具有更多的优点。

公钥与私钥的算法原理与作用(本文主要针对数字货币领域来描述)

在数字货币中,私钥是一个随机生成的巨大随机数,是资产控制权的唯一凭证。公钥则由私钥通过单向的椭圆曲线乘法计算得出(即极易从私钥推导出公钥,但几乎不可能从公钥反向推导出私钥)。钱包地址通常又是公钥的哈希值。

其作用如下:

私钥:用于生成交易签名,以证明您拥有花费相应资金的权力。必须绝对保密。

公钥:用于验证交易签名的有效性,确保签名确实由对应的私钥生成。同时,它用于生成公开的收款地址,可以安全地分享给任何人。

简而言之,私钥用于签名,公钥用于验证和生成地址,二者结合确保了资产所有权转移的安全性和可靠性。

在比特币中,公钥分为普通公钥(uncompressed),压缩公钥(compressed)。普通公钥是未压缩的公钥,以 04 开头表示,65 字节长度。压缩的公钥以 02(偶数)或 03(奇数)开头表示,33 字节长度。

样例如下:

public key (uncompressed): 04 b 4632 d 08485 ff 1 df 2 db 55 b 9 dafd 23347 d 1 c 47 a 457072 a 1 e 87 be 26896549 a 87378 ec 38 ff 91 d 43 e 8 c 2092 ebda 601780485263 da 089465619 e 0358 a 5 c 1 be 7 ac 91 f 4

public key (compressed):

02 b 4632 d 08485 ff 1 df 2 db 55 b 9 dafd 23347 d 1 c 47 a 457072 a 1 e 87 be 26896549 a 8737

传统的未压缩公钥示意图

压缩公钥示意图

在与数字货币相关的公私钥知识中,还有一个常见名词 WIF(Wallet Import)Private Key,其编码格式 Encoding 示意图如下:Format

具体数据样例如下:

1.2. 比特币中常用的哈希算法

除了公私钥知识,还需要了解哈希算法或者叫做散列算法.

单向哈希函数(one-way hash function)有一个输入和一个输出,其中输入称为消息(message),输出称为哈希值(hash value)。单向哈希函数可以根据消息的内容计算出哈希值,而哈希值就可以用来检查消息的完整性。哈希函数可以将任意长度的信息输出成定长的输出值。

1. 我们介绍常用的 SHA-256 和 RIPEMD-160。

SHA-256 全称是安全哈希算法 256 位,它能够接收任何大小的输入数据,然后通过一系列复杂的数学计算,生成一个固定长度(256 位,即 32 字节)的、看起来像一串随机乱码的字符串。这个字符串通常用 64 个十六进制数字(0-9, A-F)来表示。

例如,输入 hello world,经过 SHA-256 计算后会得到:

b 94 d 27 b 9934 d 3 e 08 a 52 e 52 d 7 da 7 dabfac 484 efe 37 a 5380 ee 9088 f 7 ace 2 efcde 9

RIPEMD-160 的全称是 RACE 原始完整性校验消息摘要-160 位。一个专门生成更短数字指纹的生成器。它和 SHA-256 类似,也是一个单向哈希函数。它接收输入,并产生一个固定长度(160 位,即 20 字节)的输出,通常用 40 个十六进制数字表示。

例如,输入 hello world,经过 RIPEMD-160 计算后会得到:

d 7 d 56920283 f 17 ab 4 d 7 e 10 d 4 a 5 d 6 df 50 e 594 a 9 c 3

2. 在比特币中常见的哈希算法有

HASH 256 (双 SHA-256 最常用)

HASH 160 (SHA-256 + RIPEMD-160)

SHA-256 (单 SHA-256)

HMAC-SHA 512(HMAC with SHA-512)

3. 使用场景

(1)比特币挖矿使用的是 HASH 256,即双,也就是区块头中的哈希值是 HASH 256。SHA-256

(2)交易标识-TXID 使用的是 HASH 256。

(3)交易中的 merkle root 使用的是 HASH 256

(4)公钥哈希使用的是 HASH 160,即单次 SHA 256+单次 RIPE-160。

(5)扩展密钥使用的是 HMAC(SHA-512)

(6)签名交易中使用的是 HASH 256。

1.3. 常见编码知识 Base 64、Base 58、Bench 32

在比特币的钱包地址中需要了解几种编码知识,它们分别是 Base 64、Base 58、Bench 32.

1. Base 64 编码(不在比特币中使用,但作为早期常见编码,一起介绍)

设计目标:在仅支持文本的媒介(如电子邮件、HTML、XML)中安全、可靠地传输二进制数据,确保数据在传输过程中不被修改(因为某些字符在协议中有特殊含义,如换行符)。

原理:

l 将每 3 个字节(24 位)的二进制数据划分为 4 组,每组 6 位。

l 每个 6 位的值(0-63)对应一个可打印字符。因为 2^6 = 64,所以有 64 个字符。

l 如果输入数据不是 3 的倍数,会用=字符进行填充。

字符集:

(共 64 个字符)A-Z, a-z, 0-9, +, /

主要特性:

l 高编码效率:每个字符承载 6 比特信息,是三种编码中效率最高的。

l 通用性强:被广泛用于 MIME 电子邮件、数据 URL(如网页中的 data:image/png;base 64,...)、存储加密密钥和证书等。

l 包含非字母数字字符:使用+和/,这些字符在命令行或 URL 中可能需要转义。

l 无校验功能:标准 Base 64 编码本身不提供错误检测功能。

2. Base 58 编码

设计目标:为人工处理而优化,避免视觉上的歧义,方便用户手动输入和校对。主要应用于比特币的原始地址格式。

原理:

l 源自 Base 64,但移除了容易混淆的字符。

l 将数据视为一个大的整数,然后连续除以 58,将余数映射到字符集。

l 前导零(0 x 00)字节会被编码为字符'1'。

字符集:

123456789 ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

(移除了 0(零), O(大写 o), I(大写 i), l(小写 L), +, /,共 58 个字符)

主要特性:

l 人性化:字符集去除了易混淆字符,极大减少了抄写和输入错误。

l 纯字母数字:生成的字符串非常“干净”,不含任何符号,易于在任何环境中复制粘贴。

l 效率稍低:每个字符承载约 5.857 比特信息,效率略低于 Base 64。

l 常与校验和结合:在比特币中实际使用的是 Base 58 Check,它在编码前添加了版本前缀和 4 字节的校验和,可以有效检测输入错误。

应用:比特币旧式地址(P 2 PKH,以 1 开头)、比特币私钥(WIF 格式)、其他加密货币如 Litecoin 的地址。

3. Bech 32 编码

设计目标:为比特币 SegWit(隔离见证)地址设计,具有更强的错误检测和纠正能力,并且对大小写不敏感,支持高效的大写字母转换。

相关的 BIP 协议为:

BIP-173 Base 32 address format for native v 0-16 witness output

BIP-350 Bech 32 m format for v 1+ witness addresses

Bech 32 m 是 Bech 32 的 V 1 版本,有微小的关于 checksum 算法的调整。

原理:

l 基于 BCH(Bose–Chaudhuri–Hocquenghem)码构造,这是一种可以检测并纠正多个错误的纠错码。

l 结构为:HRP(人类可读部分,如 bc 1)+分隔符(1)+数据部分(Base 32 编码)+校验和。

l 使用一个经过优化的 32 字符子集。

字符集:(所有字母都是小写,但编码是大小写不敏感的)qpzry 9 x 8 gf 2 tvdw 0 s 3 jn 54 khce 6 mua 7 l

主要特性:

l 强大的错误检测:能检测到绝大多数的错误组合,并能自动纠正少数错误。这比 Base 58 Check 只能“检测”而不能“纠正”更先进。

l 大小写不敏感:无论你用大写还是小写输入,地址都是有效的,用户体验更好。

l 紧凑高效:数据部分使用 Base 32(每个字符 5 比特),对于 SegWit 数据来说编码更紧凑。

l 人类可读部分(HRP):地址开头的 bc 1(比特币主网)或 tb 1(比特币测试网)明确了网络类型,不易搞混。

l 成本更高:编码和解码的计算复杂度高于 Base 58。

应用:比特币原生 SegWit 地址(P 2 WPKH,以 bc 1 q...开头)、Taproot 地址(P 2 TR,以 bc 1 p...开头)。

如果读者需要进一步详细了解相关内容,推荐查阅如下网址,里面有详细的 Encode 和 Decode,Checksum 示意图和步骤讲解。

https://learnmeabitcoin.com/technical/keys/bech 32/

总结与如何选择

通用数据传输:选择 Base 64。它是网络标准,几乎所有编程语言都有现成库,效率最高。

面向用户的标识符(如旧系统):选择 Base 58 Check。它生成的字符串易于阅读和手动输入,能有效防止视觉错误。

现代加密货币地址(尤其是比特币):强烈推荐使用 Bech 32(即 bc 1 开头的地址)。它提供了最高的安全性和用户体验,转账手续费也可能更低(因为 SegWit 技术的原理,witness 字段按照原有区域的四分之一计算)。它是未来的发展方向。

1.4. 数字货币地址产生的基础原理

数字货币的地址是根据公私钥的密码学机制产生一对公私钥来完成的,然后通过一些算法和标准,将公钥推导成数字货币的地址。也经常会通过某些机制产生一组私钥和一组对应的公钥。

其中私钥的产生可以参考如下的示意图。

推导出私钥后,就能够得到私钥对应的公钥。然后根据算法计算钱包的地址。我们以最常见的比特币地址生成的过程演示如下:

演示图中是最常见的地址算法生成原理图,后面还有一些不同的比特币地址类型,在原理图中会有一些差异,会在后面的第三节中详细讲解每种地址类型。

2. 比特币地址的相关协议

有了生成比特币地址相关的算法与编码,还需要一些具体的协议标准,这样主要来自于 BIP 协议和 SLIP 协议。这两个单词的缩写和含义如下:

BIP:Bitcoin Improvement Proposal 比特币改进提案

SLIP:SatoshiLabs Improvement Proposals 中本聪实验室改进提案

2.1. 三个核心协议(BIP-32、39、44)与相关协议

1. BIP-32 (Hierarchical Deterministic Wallets) -分层确定性钱包

的主要作用:从一个主种子(Master Seed)派生出海量的密钥对(私钥和公钥)。在这之前,钱包是一堆毫无关联的私钥集合,备份极其麻烦。BIP-32 允许你只需要备份一个主种子(通常由 BIP-39 的助记词生成),就可以恢复整个钱包树状结构中的所有地址和资金。这极大地简化了备份和恢复流程。BIP-32

BIP-32 协议里面定义了具体的公私钥衍生算法:Child key derivation (CKD) functions

Private parent key → private child key

Public parent key → public child key

Private parent key → public child key

Public parent key → private child key

BIP-32 的分层确定性钱包的原理如下图所示:

2. BIP-39 (Mnemonic code for generating deterministic keys) -助记词

BIP-39 的主要作用:将 BIP-32 中的随机数主种子(一长串 0 和 1)转换成一串易于人类书写、备份和记忆的英文单词(通常是 12 或 24 个单词),协议中也说明可以使用英文句子(但很少有这种实现案例)。这就是你现在创建钱包时看到的助记词短语。它大大改善了用户体验和备份的可靠性。

https://github.com/Roasbeef/bips/blob/bip-tap/bip-0039/bip-0039-wordlists.md

BIP 的官方提供了如下几种语言的助记词词库:English、Japanese、Korean、Spanish、Chinese (Simplified)、Chinese (Traditional)、French、Italian、Czech、Portuguese

3. BIP-44 (Multi-Account Hierarchy for Deterministic Wallets) -多币种和多账户层次结构

BIP 44 是基于 BIP-32 中描述的算法和 BIP-43 中描述的目的方案定义了确定性钱包的逻辑层次结构。为 BIP-32 的密钥树定义了一个标准化的结构。它规定了一个清晰的路径格式,例如:m/purpose'/coin_type'/account'/change/address_index。这套标准使得同一个 HD 钱包种子可以用于管理多个不同的加密货币(如比特币、莱特币、以太坊),并在每种货币下管理多个账户,每个账户下又区分收款地址和找零地址。它确保了不同钱包提供商之间的兼容性。它允许处理多个代币、多个账户、每个账户的外部和内部链以及每条链的数百万个地址。

标准格式:m / purpose' / coin_type' / account' / change / address_index

m:主密钥(master)

purpose':固定为 44',表示遵循 BIP 44 标准(强化派生)。

coin_type':币种类型,例如比特币是 0',以太坊是 60'(强化派生)。

account':账户索引,允许用户在一个钱包内创建多个账户(强化派生)。

change:找零链。0 用于外部链(External Chain)(接收地址),1 用于内部链(Internal Chain)(找零地址)。

address_index:地址索引,从 0 开始顺序生成。

示例:第一个比特币账户的第一个接收地址的路径是:m/44'/0'/0'/0/0

单撇号'表示强化派生

4. BIP-43(Purpose Field for Deterministic Wallets)确定性钱包的目的(purpose)字段

因为单独的 BIP-32 协议给实现者提供了过多的自由度,所以此协议专门描述了 purpose 字段,这个协议鼓励不同的方案申请单独的 BIP 号码,并使用相同的 purpose 字段,这样就不会从重叠的 BIP 32 空间生成地址。

在 4.2 节我们会看到不同的 BIP 定义的 purpose 字段。

用途代码 10001-19999 被保留给了 SLIP 协议。

5. SLIP-0044(Registered coin types for BIP-0044)

此协议是定义了 coin_type 的类型,在 SLIP-0044 的常见数字货币类型中可以看到当前主流的 coin_type 类型,多达数千种。可以在链接中查看详细内容:

https://github.com/satoshilabs/slips/blob/master/slip-0044.md

2.2. 地址格式协议与演进协议

1. BIP-11(M-of-N Standard Transactions)M/N 的标准交易

该协议提供了 M/N 签名的标准交易类型,主要是为了提供一种更安全地使用管理比特币资产的方式。

其指令类型我们在 3.3 节中可以看到样例。

其中锁定脚本:m {pubkey}...{pubkey} n OP_CHECKMULTISIG

解锁脚本:OP_0 ...signatures...

但该协议只定义了一种标准交易,并没有定义具体的地址类型,后来这种多签的脚本都被规范为 P 2 SH 的地址类型。

2. BIP-13 (Address Format for pay-to-script-hash) - P 2 SH 地址

BIP-13 的主要作用:定义了以数字 3 开头的地址标准。这种地址不是直接对应一个公钥,而是对应一个脚本的哈希值。最常用于:

多重签名钱包(需要多个签名才能花费资金)。

兼容性隔离见证。

意义:将复杂的脚本条件哈希成一个简短的地址,简化了用户体验,并开启了复杂智能合约的大门。

地址格式的具体定义:

base 58-encode: [one-byte version][20-byte hash][4-byte checksum]

3. BIP-16(Pay to Script Hash)支付到脚本哈希

此协议是定义了支付到脚本哈希的功能,BIP-13 是定义了支付到脚本哈希的地址。可以看到 BIP-16 定义的脚本如下:

锁定脚本:OP_HASH 160 [20-byte-hash-value] OP_EQUAL

解锁脚本:...signatures... {serialized script}

可以在 3.4 节中查看具体样例。

4. BIP-49(Derivation scheme for P 2 WPKH-nested-in-P 2 SH based accounts)基于 P 2 WPKH 嵌套 P 2 SH 账户的派生方案

使用 P 2 WPKH 嵌套 P 2 SH ( BIP 141 )交易时,需要一个通用的派生方案。它允许用户无缝地使用具有相同主种子和/或单个帐户的不同 HD 钱包。因此,用户需要创建专用的隔离见证账户,以确保只有与此 BIP 兼容的钱包才能检测到账户并进行适当处理。

为了从根账户导出公钥,此 BIP 使用与 BIP 44 中定义的相同的账户结构,但仅使用不同的目的值来指示不同的交易序列化方法。

m / purpose' / coin_type' / account' / change / address_index

对于 purpose 路径级别,它使用“49”。其余级别的使用方式按照 BIP 44 中的定义。

为了从上面计算的公钥导出 P 2 SH 地址,使用 BIP 141 中定义的封装:

witness: <signature> <pubkey>

scriptSig: <0<20-byte-key-hash>>

(0 x 160014{20-byte-key-hash})

scriptPubKey: HASH 160 <20-byte-script-hash> EQUAL

(0 xA 914{20-byte-script-hash}87)

5. BIP-84(Derivation scheme for P 2 WPKH based accounts)基于 P 2 WPKH 账户的派生方案

使用 P 2 WPKH 交易时,必须有一个通用的派生方案。它允许用户无缝地使用具有相同主种子和/或单个帐户的不同 HD 钱包。因此,用户需要创建专用的隔离见证账户,以确保只有与此 BIP 兼容的钱包才能检测到账户并进行适当处理。

为了从根账户导出公钥,此 BIP 使用与 BIP 44 和 BIP 49 中定义的相同的账户结构,但仅使用不同的目的值来指示不同的交易序列化方法。

m / purpose' / coin_type' / account' / change / address_index

对于 purpose 级别,它使用 84'。其余级别按照 BIP 44 或 BIP 49 中的定义使用。

为了从上面计算的公钥导出 P 2 WPKH 地址,使用 BIP 141 中定义的封装:

witness: <signature> <pubkey>

scriptSig: (empty)

scriptPubKey: 0<20-byte-key-hash>

(0 x 0014{20-byte-key-hash})

6. BIP-86(Key Derivation for Single Key P 2 TR Outputs)单密钥 P 2 TR 输出的密钥派生

此协议提供了单密钥 P 2 TR(BIP 341)输出作为 Taproot 内部密钥。为了从根账户派生公钥,此 BIP 使用与 BIP 44、49 和 84 中定义的相同的账户结构,但脚本类型的目的值不同。

m / purpose' / coin_type' / account' / change / address_index

对于 purpose 路径级别,它使用 86'。其余级别的使用方式按照 BIP 44、49 和 84 中的定义进行。

7. BIP-173 (Base 32 address format for native v 0-16 witness outputs) -原生隔离见证地址(Bech 32)

BIP-173 的主要作用:定义了一种全新的地址格式,专为原生隔离见证(Native SegWit)交易设计,即通常以 bc 1 q 开头的地址。

优势:

更低的交易费用:原生隔离见证交易的数据量更小,因此手续费更便宜。

防错性更强:使用 Bech 32 编码,能有效防止输入错误(如混淆大小写'O'和数字'0')和检测错误。

支持更大规模的升级:为未来的升级(如 Taproot)铺平了道路。

8. BIP-350 (Addresses for P 2 WPKH and P 2 WSH in Bech 32 m) - Taproot 地址(Bech 32 m)

BIP-350 的主要作用:对 BIP-173 的 Bech 32 格式进行了一次微小但关键的调整,创造了 Bech 32 m 编码,以支持新的 Taproot 支付方式(P 2 TR)。这就是以 bc 1 p 开头的地址。

为什么需要新格式:为了与之前的原生隔离见证(v 0 版本)区分开,因为 Taproot 使用了新的见证版本(v 1)。Bech 32 m 确保了不同版本之间的校验和验证规则不会冲突。

9. BIP-141 (Segregated Witness) -隔离见证本身

BIP-141 的主要作用:虽然 BIP-141 本身是一个核心协议,但它引入了兼容性地址(Nested P 2 SH),即包裹在传统 P 2 SH 脚本中的隔离见证交易。这种地址以 3 开头,看起来和多重签名地址一样。

目的:在生态系统的软件和服务尚未升级支持原生 Bech 32 地址时,为用户提供一种提前享受隔离见证手续费优惠的方式。现在已逐渐被原生 Bech 32 地址取代。

3. 比特币的地址类型与锁定脚本类型

3.1. 支付到公钥哈希 P 2 PK

P 2 PK(Pay To Public Key),支付到公钥。这是最早的一种地址格式,是支付到公钥,这个公钥没有经过地址的运算。当前已经很少使用。

为了对比学习,我们将其原理和样例数据总结到文档中:

(1)原理示意图

(2)样例数据

为了创建一个 P 2 PK 可以花费的脚本,样例数据如下:

在 output 中的锁定脚本

OP_PUSHBYTES_65

049464205950188 c 29 d 377 eebca 6535 e 0 f 3699 ce 4069 ecd 77 ffebfbd 0 bcf 95 e 3 c 134 cb 7 d 2742 d 800 a 12 df 41413 a 09 ef 87 a 80516353 a 2 f 0 a 280547 bb 5512 dc 03 da 8

OP_CHECKSIG

在 input 中的解锁脚本

OP_PUSHBYTES_72

3045022100 c 219 a 522 e 65 ca 8500 ebe 05 a 70 d 5 a 49 d 840 ccc 15 f 2 afa 4 ee 9 df 783 f 06 b 2 a 322310220489 a 46 c 37 feb 33 f 52 c 586 da 25 c 70113 b 8 eea 41216440 eb 84771 cb 67 a 67 fdb 68 c 01

可以查看如下更详细的演示链接:

https://learnmeabitcoin.com/explorer/tx/1 db 6251 a 9 afce 7025 a 2061 a 19 e 63 c 700 dffc 3 bec 368 bd 1883 decfac 353357 a 9 d#output-1

在一些浏览器中,支付到公钥,还是会被显示成支付到公钥的哈希值,也就是 1 开头的比特币地址。

这种地址格式是 1 开头的长地址,例如:

13 QECtNiFPXijbMZmcgaTom 3 pCXwHvDYTUWGtRxZN 7 fY 24 u 4 fG 5 iiqXaQz 3 TvuQydLrkz 9 L 4 YhcYn 3 khC 44 yQwaZme 6 uoXQ

形成的过程

public key (uncompressed) =

04283338 ffd 784 c 198147 f 99 aed 2 cc 16709 c 90 b 1522 e 3 b 3637 b 312 a 6 f 9130 e 0 eda 7081 e 373 a 96 d 36 be 319710 cd 5 c 134 aaffba 81 ff 08650 d 7 de 8 af 332 fe 4 d 8 cde 20

prefix + public key + checksum=

0004283338 ffd 784 c 198147 f 99 aed 2 cc 16709 c 90 b 1522 e 3 b 3637 b 312 a 6 f 9130 e 0 eda 7081 e 373 a 96 d 36 be 319710 cd 5 c 134 aaffba 81 ff 08650 d 7 de 8 af 332 fe 4 d 8 cde 2067 da 00 eb

base 58 address =

13 QECtNiFPXijbMZmcgaTom 3 pCXwHvDYTUWGtRxZN 7 fY 24 u 4 fG 5 iiqXaQz 3 TvuQydLrkz 9 L 4 YhcYn 3 khC 44 yQwaZme 6 uoXQ

3.2. 支付到公钥哈希 P2PKH

P 2 PKH(Pay To Public Key Hash),支付到公钥哈希。P 2 PKH 是比较常用的交易方式。

(1)原理示意图

(2)样例数据

output 中的锁定脚本

OP_DUP

OP_HASH 160

OP_PUSHBYTES_20

55 ae 51684 c 43435 da 751 ac 8 d 2173 b 2652 eb 64105

OP_EQUALVERIFY

OP_CHECKSIG

input 中的解锁脚本

OP_PUSHBYTES_72

3045022100 c 233 c 3 a 8 a 510 e 03 ad 18 b 0 a 24694 ef 00 c 78101 bfd 5 ac 075 b 8 c 1037952 ce 26 e 91 e 02205 aa 5 f 8 f 88 f 29 bb 4 ad 5808 ebc 12 abfd 26 bd 791256 f 367 b 04 c 6 d 955 f 01 f 28 a 772401

OP_PUSHBYTES_33

03 f 0609 c 81 a 45 f 8 cab 67 fc 2 d 050 c 21 b 1 acd 3 d 37 c 7 acfd 54041 be 6601 ab 4 cef 4 f 31

执行脚本的示意图

可以查看如下更详细的演示链接:

https://learnmeabitcoin.com/explorer/tx/40 e 331 b 67 c 0 fe 7750 bb 3 b 1943 b 378 bf 702 dce 86124 dc 12 fa 5980 f 975 db 7 ec 930#input-0

P 2 PKH 的地址形成示意图

这种地址格式是 1 开头的地址,例如:1 JBSCVF 6 VM 6 QjFZyTnbpLjoCJTQEqVbepG

形成的过程

public key (uncompressed) =

04283338 ffd 784 c 198147 f 99 aed 2 cc 16709 c 90 b 1522 e 3 b 3637 b 312 a 6 f 9130 e 0 eda 7081 e 373 a 96 d 36 be 319710 cd 5 c 134 aaffba 81 ff 08650 d 7 de 8 af 332 fe 4 d 8 cde 20

hash 160(public key) = bc 73550 c 1612 ee 81155 d 29254217 cbd 60084 a 6 d 1

prefix+hash 160(publickey)+checksum =

00 bc 73550 c 1612 ee 81155 d 29254217 cbd 60084 a 6 d 1691 c 58 b 9

base 58 address = 1 JBSCVF 6 VM 6 QjFZyTnbpLjoCJTQEqVbepG

从理论上,一个未压缩的 130 字符的公钥,经过 Hash 160 压缩为 40 字符的哈希值,就会有产生哈希碰撞的可能性,也就是地址会有重复的可能性(概率很小)。这样不可怕吗?为什么使用公钥的哈希作为地址,可以进一步延展阅读:

https://bitcoin.stackexchange.com/questions/3600/why-are-bitcoin-addresses-hashes-of-public-keys

3.3. 支付到多签 P 2 MS

P 2 MS(Pay To Multisig),支付到多签。相关的原理解释需要参考 BIP 11:M-of-N Standard Transactions

(1)原理示意图

对于上面的示意图,使用 2/3 多签示意如下:

(2)样例数据

output 中的锁定脚本

OP_2

OP_PUSHBYTES_65

04 d 81 fd 577272 bbe 73308 c 93009 eec 5 dc 9 fc 319 fc 1 ee 2 e 7066 e 17220 a 5 d 47 a 18314578 be 2 faea 34 b 9 f 1 f 8 ca 078 f 8621 acd 4 bc 22897 b 03 daa 422 b 9 bf 56646 b 342 a 2

OP_PUSHBYTES_65

04 ec 3 afff 0 b 2 b 66 e 8152 e 9018 fe 3 be 3 fc 92 b 30 bf 886 b 3487 a 525997 d 00 fd 9 da 2 d 012 dce 5 d 5275854 adc 3106572 a 5 d 1 e 12 d 4211 b 228429 f 5 a 7 b 2 f 7 ba 92 eb 0475 bb 1

OP_PUSHBYTES_65

04 b 49 b 496684 b 02855 bc 32 f 5 daefa 2 e 2 e 406 db 4418 f 3 b 86 bca 5195600951 c 7 d 918 cdbe 5 e 6 d 3736 ec 2 abf 2 dd 7610995 c 3086976 b 2 c 0 c 7 b 4 e 459 d 10 b 34 a 316 d 5 a 5 e 7

OP_3

OP_CHECKMULTISIG

input 中的解锁脚本

OP_0

OP_PUSHBYTES_72

3045022100 af 204 ef 91 b 8 dba 5884 df 50 f 87219 ccef 22014 c 21 dd 05 aa 44470 d 4 ed 800 b 7 f 6 e 40220428 fe 058684 db 1 bb 2 bfb 6061 bff 67048592 c 574 effc 217 f 0 d 150 daedcf 36787601

OP_PUSHBYTES_72

3045022100 e 8547 aa 2 c 2 a 2761 a 5 a 28806 d 3 ae 0 d 1 bbf 0 aeff 782 f 9081 dfea 67 b 86 cacb 321340220771 a 166929469 c 34959 daf 726 a 2 ac 0 c 253 f 9 aff 391 e 58 a 3 c 7 cb 46 d 8 b 7 e 0 fdc 4801

执行脚本的示意图

可以查看如下更详细的演示链接:

https://learnmeabitcoin.com/technical/script/p 2 ms/

P 2 MS(支付到多签)实际上没有地址格式,最常用的方式是将 P 2 MS 支付脚本被包裹在 P 2 SH 或 P 2 WSH 脚本中,因此其地址参考其他两种类似的地址。与直接使用 P 2 MS 相比,具有如下优势:

因为 P 2 MS 没有地址格式。因此,如果你希望对你的比特币进行直接锁定,你需要自行构建并发送原始锁定脚本。更糟糕的是,这样可能无法为你创建此交易,因为大多数钱包只允许你在进行交易时使用地址(而非原始脚本)。这样的情况,使得只有专业的人员使用特定工具或开发工具来构造能花费这种 UTXO 的 input,对普通人具有较高的门槛。

P 2 MS 限制最多使用 3 个公钥。由于包含所有公钥,P 2 MS 的锁定脚本会变得非常庞大(导致手续费也很高),因此限制为 3 个(以防止 UTXO 集中存储过多数据)。但是,使用 P 2 SH,你可以使用最多 15 个公钥进行多重签名锁定。

因此,如果用户愿意,仍然可以使用 P 2 MS,但使用 P 2 SH 实现相同功能会更方便。

3.4. 支付到脚本哈希 P 2 SH

P 2 SH(Pay To Script Hash)支付到脚本哈希。可以支付到脚本哈希后,比特币的交易表现的能力得到了很大的增强。

(1)原理示意图

(2)样例数据

output 中的锁定脚本

OP_HASH 160

OP_PUSHBYTES_20

748284390 f 9 e 263 a 4 b 766 a 75 d 0633 c 50426 eb 875

OP_EQUAL

input 中的解锁脚本

OP_0

OP_PUSHBYTES_71

3044022100 d 0 ed 946330182916 da 16 a 6149 cd 313 a 4 b 1 a 7 b 41591 ee 52 fb 3 e 79 d 64 e 36139 d 66021 f 6 ccf 173040 ef 24 cb 45 c 4 db 3 e 9 c 771 c 938 a 1 ba 2 cf 8 d 2404416 f 70886 e 360 af 401

OP_PUSHBYTES_71

5121022 afc 20 bf 379 bc 96 a 2 f 4 e 9 e 63 ffceb 8652 b 2 b 6 a 097 f 63 fbee 6 ecec 2 a 49 a 48010 e 2103 a 767 c 7221 e 9 f 15 f 870 f 1 ad 9311 f 5 ab 937 d 79 fcaeee 15 bb 2 c 722 bca 515581 b 4 c 052 ae

执行脚本的示意图

可以查看如下更详细的演示链接:

https://learnmeabitcoin.com/technical/script/p 2 sh/

地址原理

Encode the hash 160 of a public key or script to a legacy address.

这种地址格式是 3 开头的地址(测试网是 2 开头地址),例如:

3 Nfmmt 78 SUwQTZtr 4 p 9 qty 5 Wgaykt 6 PhoS

形成的过程:

将用户的公钥或脚本进行 Hash 160 编码,得到结果:

hash 160(public key or Script) = d 5 ed 76 bbb 243 d 456240014178 ba 5 fbb 37 ada 36 bc

base 58 address = prefix(05)+hash 160(public key or Script)+checksum(32 e 485 ca)= 3 MCAKgGRPTMjYP 3 cD 1 vTeD 7 aQZJPVECAC 1

P 2 SH 的几个明显优点是:

l 更容易使用复杂的解锁脚本(也为后续的 Taproot 中使用 MAST 树提供了基础);

l 更便宜的手续费(其实是将成本转移到了花费者的身上,花费输出的人需要使用更多的解锁字节);

lP 2 SH 提供更强的隐私性;

l 因为 output 中的字节减少,整个 UTXO 的集合更小。因为单个 UTXO 的尺寸更小,更多的 UTXO 可以放到内存中。

注意:在 P 2 SH 中,赎回脚本的最大长度是 520 个字节。这也就是 P 2 SH 脚本如果是 P 2 MS,那么最多是 15 个公钥(压缩公钥是 33 字节,15 个压缩公钥是 33*15=495 字节,是小于 520 字节的最大值)。

3.5. 支付到包裹的见证公钥哈希 P 2 SH-P 2 WPKH

2 SHP 2 WPKH wrapped in a P 2 SH,将支付到见证公钥哈希 P 包裹到支付到脚本哈希 P 2 SH 方式中。P-P 2 WPKH()2 WPKH

(1)原理示意图

(2)样例数据

output 中的锁定脚本

OP_HASH 160

OP_PUSHBYTES_20

6 d 3 ed 4 cf 55 dc 6752 a 12 d 3091 d 436 ef 8 f 0 f 982 ff 8

OP_EQUAL

input 中的解锁脚本

OP_PUSHBYTES_22

001402 c 8147 af 586 cace 7589672191 bb 1 c 790 e 9 e 9 a 72

执行脚本的示意图

(3)这种支付形成地址的示意图如下:

可以查看如下更详细的演示链接:

https://learnmeabitcoin.com/technical/script/p 2 sh-p 2 wpkh/

这种地址格式是 3 开头的地址,例如:3 Beer 3 irc 1 vgs 76 ENA 4 coqsEQpGZeM 5 CTd

3.6. 支付到包裹的见证脚本哈希 P 2 SH-P 2 WSH

P 2 SH-P 2 WSH(P 2 WSH wrapped in a P 2 SH),将支付到见证脚本哈希 PS 包裹到支付到脚本哈希 P 2 SH 方式中。

(1)原理示意图

(2)样例数据

output 中的锁定脚本

OP_HASH 160

OP_PUSHBYTES_20

257014 cec 2 f 75 c 19367 b 2 a 6 a 0 e 08 b 9 f 304108 e 3 b

OP_EQUAL

input 中的解锁脚本

OP_PUSHBYTES_34

0020973 cfd 44 e 60501 c 38320 ab 1105 fb 3 ee 3916 d 2952702 e 3 c 8 cb 4 cbb 7056 aa 6 b 47 f

执行脚本的示意图

(3)这种支付形成地址的示意图如下:

可以查看如下更详细的演示链接:

https://learnmeabitcoin.com/technical/script/p 2 sh-p 2 wsh/

这种地址格式是 3 开头的地址,例如:3 NUPJunPTWu 5 ivNHoi 375 bsTiN 7 P 2 MpZC 2

3.7. 支付到见证公钥哈希 P 2 WPKH

P 2 WPHK(Pay To Witness Public Key Hash)支付到见证公钥哈希。这种是用于隔离见证地址的支付。

(1)原理示意图

(2)样例数据

output 中的锁定脚本

OP_0

OP_PUSHBYTES_20

841 b 80 d 2 cc 75 f 5345 c 482 af 96294 d 04 fdd 66 b 2 b 7

input 中的解锁脚本(Witness 区数据)

3044022042 e 5 e 3 ed 2 a 41214 ae 864634 b 6 fde 33 ca 2 ff 312 f 3 d 89 d 6 aa 3 e 14 c 026 d 50 d 8 ed 3202206 c 38 dcd 0432 a 0724490356 fbf 599 cdae 40 e 334 c 3667 a 9253 f 8 f 4 cc 57 cf 3 c 448001

03 f 465315805 ed 271 eb 972 e 43 d 84 d 2 a 9 e 19494 d 10151 d 9 f 6 adb 32 b 8534 bfd 764 ab

执行脚本的示意图

可以查看如下更详细的演示链接:

https://learnmeabitcoin.com/technical/script/p 2 wpkh/

地址形成示意图

使用前缀 OP_0 来区分隔离见证的第一个版本(后面的 Taproot 地址使用 OP_1 来区分),后面是 20 个字节的公钥哈希,最后使用 Bech 32 地址编码格式。

这种地址格式是 bc 1 q 开头的地址,例如:

bc 1 qar 0 srrr 7 xfkvy 5 l 643 lydnw 9 re 59 gtzzwf 5 mdq

注释:P 2 WPKH 只接受压缩公钥

3.8. 支付到见证脚本哈希 P 2 WSH

P 2 WSH(Pay To Witness Script Hash),支付到见证脚本哈希。

(1)原理示意图

(2)样例数据

output 中的锁定脚本

OP_0

OP_PUSHBYTES_32

65 f 91 a 53 cb 7120057 db 3 d 378 bd 0 f 7 d 944167 d 43 a 7 dcbff 15 d 6 afc 4823 f 1 d 3 ed 3

input 中的解锁脚本

00

30440220415899 bbee 08 e 42376 d 06 e 8 f 86 c 92 b 4987613 c 2816352 fe 09 cd 1479 fd 639 f 18 c 02200 db 57 f 508 f 69 e 266 d 76 c 23891708158 bda 18690 c 165 a 41 b 0 aa 88303 b 97609 f 7801

304402203973 de 2303 e 8787767090 dd 25 c 8 a 4 dc 97 ce 1 aa 7 eb 4 c 0962 f 13952 ed 4 e 856 ff 8 e 02203 f 1 bb 425 def 789 eea 8 be 46407 d 10 b 3 c 8730407176 aef 4 dc 2 c 29865 eb 5 e 5542 bf 01

522103848 e 308569 b 644372 a 5 eb 26665 f 1 a 8 c 34 ca 393 c 130 b 376 db 2 fae 75 c 43500013 c 2103 cec 1 ee 615 c 17 e 06 d 4 f 4 b 0 a 08617 dffb 8 e 568936 bdff 18 fb 057832 a 58 ad 4 d 1 b 752103 eed 7 ae 80 c 34 d 70 f 5 ba 93 f 93965 f 69 f 3 c 691 da 0 f 4607 f 242 f 4 fd 6 c 7 a 48789233 e 53 ae

执行脚本的示意图

可以查看如下更详细的演示链接:

https://learnmeabitcoin.com/technical/script/p 2 wsh/

地址形成示意图

使用前缀 OP_0 来区分隔离见证的第一个版本(后面的 Taproot 地址使用 OP_1 来区分),后面是 32 个字节的脚本哈希,最后使用 Bech 32 地址编码格式。

这种地址格式是 bc 1 q 开头的地址,例如:

bc 1 qmc 7 d 40 nxddfklulxq 55 f 2 jhupauaystdlxnj 69 asztedz 8 uz 6 e 3 q 9 lj 223

3.9. 支付到 Taproot 地址 P 2 TR

P 2 TR(Pay To Taproot),支付到 Taproot 地址。这种类型的支付有两种情况一种是 Key Path Spend,另一种是 Script Path Spend,详细内容见下面的说明。

(1)原理示意图

(2)样例数据 1 -Key Path Spend

output 中的锁定脚本

OP_1

OP_PUSHBYTES_32

0 f 0 c 8 db 753 acbd 17343 a 39 c 2 f 3 f 4 e 35 e 4 be 6 da 749 f 9 e 35137 ab 220 e 7 b 238 a 667

input 中的解锁脚本

b 693 a 0797 b 24 bae 12 ed 0516 a 2 f 5 ba 765618 dca 89 b 75 e 498 ba 5 b 745 b 71644362298 a 45 ca 39230 d 10 a 02 ee 6290 a 91 cebf 9839600 f 7 e 35158 a 447 ea 182 ea 0 e 022 ae 01

Key Path Spend 执行脚本的示意图

(3)样例数据 2-3 Script Path Spend

output 中的锁定脚本

OP_1

OP_PUSHBYTES_32

0 f 0 c 8 db 753 acbd 17343 a 39 c 2 f 3 f 4 e 35 e 4 be 6 da 749 f 9 e 35137 ab 220 e 7 b 238 a 667

input 中的解锁脚本

01769105 cbcbdcaaee 5 e 58 cd 201 ba 3152477 fda 31410 df 8 b 91 b 4 aee 2 c 4864 c 7700615 efb 425 e 002 f 146 a 39 ca 0 a 4 f 2924566762 d 9213 bd 33 f 825 fad 83977 fba 7 f 01

206 d 4 ddc 0 e 47 d 2 e 8 f 82 cbe 2 fc 2 d 0 d 749 e 7 bd 3338112 cecdc 76 d 8 f 831 ae 6620 dbe 0 ac

c 0924 c 163 b 385 af 7093440184 af 6 fd 6244936 d 1288 cbb 41 cc 3812286 d 3 f 83 a 3329

执行脚本的示意图

可以查看如下更详细的讲解链接:https://learnmeabitcoin.com/technical/script/p 2 tr/

使用前缀 OP_1 来区分隔离见证的第二个版本(前面的 SegWit 地址使用 OP_0 来区分),后面是 20 个字节的公钥哈希,最后使用 Bech 32 地址编码格式。

这种地址格式是 bc 1 p 开头的地址,例如:

bc 1 ppsxtf 9 y 28 tx 36 e 6 nlra 79 m 270 vuagzknt 97 w 6 ga 4 ah 5 g 7 ggxpu 8 s 6 z 8 ftw

4. 比特币交易中的派生路径地址与隐私保护

4.1. 比特币的交易变化历史

比特币的地址变化还和几次比特币的交易变化历史有较大的关系。主要是比特币的两次隔离见证产生的变化。

1. 白皮书中定义的交易(简单交易模型)

早期最基本的比特币交易,允许有多个输入和最多两个输出。其中一个输出的数值是给自己的找零,另外一个输出是给外部的转账。(备注:总输入与总输出之间的差额是手续费)

早期的地址是 P 2 PK,P 2 PKH,P 2 MS,P 2 SH 几种地址类型。

2. 隔离见证第一版(SegWit)中的交易

隔离见证(Segregated Witness,简称 SegWit)是比特币区块链网络的协议升级方案,作为 Bitcoin Core 客户端的核心更新提案,由开发者 Pieter Wiulle 于 2015 年 12 月提出,通过分离交易数据与签名数据实现扩容。该方案保持与传统比特币网络的兼容性,避免了硬分叉。

其核心机制将区块容量上限从 1 兆字节扩展至 4 兆字节(统计中的实际扩容约 2-2.1 兆字节),通过将数字签名存储于附加见证区块释放主链空间。该技术解决了交易延展性问题,改进交易标识生成方式防止双重支付攻击,并为闪电网络等第二层协议奠定基础 。作为被业内大多数企业采用的主流客户端标准,Bitcoin Core 的此次升级需全网 95%算力支持,但实际支持率长期维持 32%-33.8%。反对意见集中于技术效用争议及第三方介入可能削弱比特币去中心化特性。2017 年 8 月 24 日该协议在比特币主网激活。

中的地址是 P 2 WPKH,P 2 WSH,P 2 SH-P 2 WPKH,P 2 SH-P 2 WPSH 几种地址类型。

3. 隔离见证第二版(Taproot)中的交易

Taproot 技术在 2020 年 1 月份提出,2021 年 11 月,Taproot 以软分叉的形式正式生效。此次升级由 BIP 340、BIP 341 和 BIP 342 组合。其中 BIP 340 引入了可以同时验证多个交易的 Schnorr 签名,取代了椭圆曲线数字签名算法(ECDSA),再一次扩大了网络容量并加快了批量交易的处理速度,为部署复杂的智能合约提供了可能性;BIP 341 实现了默克尔化抽象语法树(MAST)来优化区块链上的交易数据存储;BIP 342(Tapscript)采用比特币的脚本编码语言扩充的比特币原生脚步能力的不足。

Taproot 中的地址是 P 2 TR 一种地址类型。

4.2. 常见的已知派生路径定义

我们先了解比特币的常见派生路径,然后再看其他链的常见派生路径。

1. 常见的比特币派生路径

BIP 中定义的派生路径标准格式:m / purpose' / coin_type' / account' / change / address_index

比特币最常见的几种派生路径,它们的主要区别在于 purpose 字段,对应了不同的地址类型。

(1)BIP 44 - Legacy (原始)地址(1...)

路径:m/44'/0'/0'/0/0

目的:最早的 HD 钱包标准,用于生成以 1 开头的 P 2 PKH 地址。

特点:

兼容性最好,所有钱包和交易所都支持。

交易手续费最高,因为其交易数据体积较大。

使用场景:现在主要用于从非常老的钱包中恢复资金,或向不支持新地址类型的古老平台充值。

(2)BIP 49 - Nested SegWit (嵌套隔离见证)地址(3...)

路径:m/49'/0'/0'/0/0

目的:用于生成以 3 开头的 P 2 SH-P 2 WPKH 地址。

特点:

通过将 SegWit 地址包装在 P 2 SH 脚本中来实现。

手续费比 Legacy 低,但比 Native SegWit 高。

兼容性很好,几乎所有的钱包和交易所都支持接收和发送到 3 开头的地址。

使用场景:在 SegWit 推广初期,作为向 Native SegWit 过渡的兼容方案。现在仍然被广泛支持。

(3)BIP 84 - Native SegWit (原生隔离见证)地址(bc 1 q...)

路径:m/84'/0'/0'/0/0

目的:用于生成以 bc 1 q 开头的 P 2 WPKH 地址。

特点:

手续费最低,因为其交易数据体积最小,是最高效的格式。

安全性最佳,完全受益于隔离见证的技术优势。

兼容性:目前绝大多数现代钱包、节点和交易所都已支持。但一些非常老旧的系统可能无法识别。

使用场景:当前的首选和推荐标准,用于节省手续费并享受最新的技术特性。

(4)BIP 86 - Taproot (P 2 TR)地址(bc 1 p...)

路径:m/86'/0'/0'/0/0

目的:用于生成以 bc 1 p 开头的 P 2 TR 地址。这是比特币的最新一次重大升级。

特点:

隐私性更好,使简单支付和复杂脚本交易在链上看起来几乎没有区别。

效率更高,为复杂的智能合约(如闪电网络、DLCs)提供了更好的可扩展性和更低的费用。

签名算法(Schnorr Signatures)更高效,支持密钥聚合。

使用场景:代表比特币的未来发展方向,适合希望使用最新技术、追求更低费用和更好隐私的用户和应用。

(5)RGB 技术中用到的派生路径

如果根据 RGB-0044 协议,符合 BIP-44 协议标准和 SLIP-44 协议中队 coin 的定义,purpose 使用的是 84,RGB 的官方派生路径如下:m_type/84’

此外作者还查阅到 RGB 官方网站中,根据 LNPBP-46: LN derivations 中的描述,使用了 m/9735'/的衍生路径,具体的相关内容如下:

注:具体以哪个为标准,还需要进一步的研究相关应用和 RGB 协议文档。

(6)其他重要路径

BIP 32 根路径:m/0' (或有时用 m/0)。一些老旧的实现或非标准钱包可能会直接使用这个路径,但极不推荐,因为它不符合多币种多账户的标准。

多签名钱包路径:对于多签钱包,每个协作者通常会使用自己的标准路径(如 m/48'/0'/0'/2')来派生用于多签的公钥。这通常由协调多签的钱包软件(如 Electrum, Specter)来管理,普通用户无需手动处理。

测试网路径:只需将上述路径中的 coin_type 从 0'改为 1'即可。例如,测试网 Native SegWit 路径为:m/84'/1'/0'/0/0。

2. 以下列出一些主流币种及其常见的派生路径。

(1)以太坊(Ethereum)及 EVM 兼容链(BSC, Polygon, Avalanche C-Chain 等)

以太坊及其众多衍生链共享相同的 coin_type,因为它们使用相同的密码学(secp 256 k 1 曲线)和地址格式。

路径:m/44'/60'/0'/0/0

coin_type: 60'

地址格式: 0 x...

说明:这是 MetaMask、Trust Wallet 等绝大多数钱包使用的默认路径。所有基于 EVM 的链(如 BSC m/44'/60'/0'/0/0, Polygon m/44'/60'/0'/0/0)都使用同一个路径和同一组私钥。你在不同链上的地址看起来会一模一样,但它们是不同链上的独立账户。切换网络时,钱包软件通过 RPC 节点来区分不同的链。

(2)币安币(BNB)信标链

BNB 有其独立的链和地址系统,与 EVM 链不同。

路径:m/44'/714'/0'/0/0

coin_type: 714'

地址格式: bnb 1... (Bech 32)或 tbnb 1... (测试网)

说明:用于币安链(Binance Chain)上的 BNB 资产。

(3)波卡(Polkadot)

路径:m/44'/354'/0'/0/0

coin_type: 354'

地址格式:基于 SS 58 格式,通常以 1 开头。

(4)索拉纳(Solana)

路径:m/44'/501'/0'/0'

coin_type: 501'

说明:注意,Solana 的路径在最后使用了强化派生 0',而不是普通的 0。这是其标准做法。

(5)卡尔达诺(Cardano)

Cardano 的派生路径比较特殊和复杂,它基于自己的 BIP 44-ADA 方案。

路径:m/1852'/1815'/0'/0/0

purpose: 1852' (专门为 Cardano 设计)

coin_type: 1815' (ADA 的诞生年份)

地址格式: addr 1... (Bech 32)

说明:这是 Daedalus 和 Yoroi 钱包使用的标准路径。

(6)瑞波币(Ripple - XRP)

路径:m/44'/144'/0'/0/0

coin_type: 144'

地址格式: r... (Base 58)

(7)莱特币(Litecoin)

莱特币类似比特币,也有多种地址类型。

Legacy (L...): m/44'/2'/0'/0/0

SegWit (M...): m/49'/2'/0'/0/0

Native SegWit (ltc 1 q...): m/84'/2'/0'/0/0

coin_type: 2'

(8)狗狗币(Dogecoin)

路径:m/44'/3'/0'/0/0

coin_type: 3'

地址格式: D... (Base 58)

(9)波场(Tron)

路径:m/44'/195'/0'/0/0

coin_type: 195'

地址格式: T... (Base 58)

3. 非标准或例外情况

(1)门罗币(Monero)

门罗币不使用 BIP 32/BIP 44 标准。它有自己的分层确定性钱包方案,使用不同的密码学(Ed 25519 曲线)和密钥结构。

它的派生路径看起来像:m/44'/128'/0' (但这不是标准 BIP 32 路径)

重要提示:你不能使用为比特币/以太坊设计的助记词在门罗钱包中直接恢复出资金,反之亦然。恢复门罗币钱包必须使用门罗币自己的助记词和系统。

(2)硬件钱包的“以太坊经典”路径

一些硬件钱包(如 Ledger)为以太坊经典(ETC)设置了独立的路径,以将其与以太坊(ETH)区分开,尽管它们的地址格式相同。

以太坊(ETH): m/44'/60'/0'/0/0

以太坊经典(ETC): m/44'/61'/0'/0/0

4.3. 隐私保护与多地址使用

比特币有一个比较特殊的现象“找零地址变化”,或者说 UTXO 模型的区块链都可以有这种特性。要理解“找零地址变化”,需要理解三个关键知识点:

1. UTXO 模型(未花费交易输出)

这是比特币最核心的账本模型,不同于传统的账户余额模型。

基本原理:比特币网络记录的并不是你的“余额”,而是一张张未花费的“支票”(即 UTXO)。这些支票面额各异,且一旦被花掉就会被销毁,并创造出新的支票。

交易过程:当你支付时,你必须拿出你钱包里的一张或几张“支票”(输入),它们的总面值必须大于或等于你要支付的金额。交易会创建两个新的“支票”:

一张给收款人:面额等于支付金额。

一张给你自己(找零):面额等于(输入总额-支付金额-交易手续费)。

关键结论:找零本质上是一笔支付给你自己的新输出(UTXO)。它和你付给别人的输出在交易结构中没有任何区别。

注释:这里使用支票这个单词,而不使用现金(经常是定额印刷好的)这个单词,是因为支票上的金额是随机的,每张支票的金额都有可能不同,这更符合比特币中 UTXO 的场景描述。很多时候混合使用支票和现金都是表达同一个意思。

2. 隐私保护设计

使用固定的地址会严重损害隐私。

地址复用问题:如果所有 UTXO(包括找零)都回到同一个地址,那么区块链分析机构或人员可以轻易地:

关联你的所有交易:知道这个地址背后的所有资金流动。

估算你的财富:清楚地看到你的总收入。

破坏匿名集:无法将他人的交易与你的交易混合起来。

解决方案:为每一笔交易的找零使用一个全新的地址。这使得外部观察者很难确定一笔交易中哪个输出是支付给商家的,哪个输出是找零返回给自己的。这极大地增加了区块链分析的难度,保护了你的财务隐私。

3. HD 钱包(分层确定性钱包)的技术实现

手动为每次找零管理新地址和私钥是不可行的,HD 钱包自动化了这个过程。

链式结构:HD 钱包从一个种子(助记词)可以生成近乎无限个地址和私钥。

派生路径:如我们之前讨论的,标准路径 m/44'/0'/0'/1/*专门用于找零(change = 1)。

m/44'/0'/0'/0/*: 用于生成接收地址(外部链)。

m/44'/0'/0'/1/*: 用于生成找零地址(内部链)。

工作流程:

你的钱包软件在构造一笔交易时,如果需要找零,它会自动从内部的“找零地址池”(/1/*)中取出作为找零接收地址。 下一个从未使用过的地址

这笔交易被广播并确认后,新的找零 UTXO 就保存在这个新地址下。

当你下次花费资金时,你的钱包会同时扫描接收链和找零链下的所有 UTXO,将它们一起作为可用的“输入”。你无需手动管理,钱包会自动处理好一切。

简单总结:“找零地址变化”是、和三者结合的必然结果。它不是可选项,而是比特币钱包的标准行为。 UTXO 模型隐私保护需求 HD 钱包技术

使用区块链浏览器:找一笔真实的交易(比如你自己钱包里的一笔交易),在 mempool.space 或 blockstream.info 上查看它的详情。尝试分析它的输入和输出,猜猜哪个是支付输出,哪个是找零输出(通常找零输出会指向一个属于发送方的新地址)。

使用测试钱包:在测试网上创建一个新钱包,进行几次发送和接收操作,然后观察你钱包内的地址列表是如何变化的,UTXO 是如何产生和消耗的。

参考文献

1. https://learnmeabitcoin.com/ 网站中关于比特币地址相关的介绍,这是一个非常棒的学习比特币知识的网站。

2. BIP 32:Hierarchical Deterministic Wallets,2012-02-11,https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki

3. BIP 39:Mnemonic code for generating deterministic keys,2013-09-10,https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki

4. BIP 44:Multi-Account Hierarchy for Deterministic Wallets,2014-04-24,https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki

5. BIP 43:Purpose Field for Deterministic Wallets,2014-04-24,https://github.com/bitcoin/bips/blob/master/bip-0043.mediawiki

6. SLIP-0044:Registered coin types for BIP-0044,2014-07-09,https://github.com/satoshilabs/slips/blob/master/slip-0044.md

7. BIP 11:M-of-N Standard Transactions,2011-10-18,https://github.com/bitcoin/bips/blob/master/bip-0011.mediawiki

8. BIP 13:Address Format for pay-to-script-hash,2011-10-18,https://github.com/bitcoin/bips/blob/master/bip-0013.mediawiki

9. BIP 16:Pay to Script Hash,2012-01-03,https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki

10. BIP 49:Derivation scheme for P 2 WPKH-nested-in-P 2 SH based accounts,2016-05-19 https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki

11. BIP 84:Derivation scheme for P 2 WPKH based accounts,2017-12-28,https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki

12. BIP 86:Key Derivation for Single Key P 2 TR Outputs,2021-06-22,https://github.com/bitcoin/bips/blob/master/bip-0086.mediawiki

13. BIP 173:Base 32 address format for native v 0-16 witness outputs,2017-03-20,https://github.com/Roasbeef/bips/blob/bip-tap/bip-0173.mediawiki

14. BIP 350:Addresses for P 2 WPKH and P 2 WSH in Bech 32 m,2020-12-16,https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki

15. BIP 141:Segregated Witness,2020-12-16,https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki

免责声明:本文版权归原作者所有,不代表MyToken(www.mytokencap.com)观点和立场;如有关于内容、版权等问题,请与我们联系。
相关阅读