27 / 736ADDR

比特币地址

收款信息,不是银行账户

别人想付给你比特币时,你会提供钱包中的一个地址。怎样安全地使用它?为什么下次收款时地址变了?地址本身又能说明哪些收款人信息?

比特币地址是一项收款信息。它告诉付款方的钱包应该怎样构造付款,使收款人以后能在满足相应条件时花费这笔钱。你可以把地址交给付款人;它既不是秘密密钥,也不是钱包备份。

Alice 要付钱给 Bob。Bob 在钱包中打开“收款”,核对显示的地址,再以文字或二维码发给她。Alice 用自己的钱包读取地址,发送前检查收款人和金额。她不必理解地址中每个字符的含义,这些由应用处理。钱包根据地址生成将来花费这笔钱必须满足的条件,通常是用正确的私钥签名。交易会把这个条件写成名为 scriptPubKey 的脚本,记录的是金额和脚本,而不是平时看到的地址文字。因此,地址是传递付款信息的便捷方式,并不是装着币的容器。 [1] [3]

长地址最好直接复制或扫描二维码,不要手动输入。但检查不能到此为止:恶意软件可能替换剪贴板里的地址。请将完整地址与通过可靠渠道从收款人处取得的信息逐一核对;使用 Hardware Wallet 时,还要查看设备自己的屏幕。仅核对开头和结尾并不够,欺诈地址也可能模仿这些部分。地址包含校验和,用来帮助发现输入错误,但它无法判断一个格式正确的地址是否属于你想付款的人。钱包还必须支持对应的格式和网络。小额测试付款可能有帮助,却不能替代下一次转账时的地址检查。向错误但有效的地址发出的付款一旦确认,协议没有简单的撤销功能。 [2] [7] [8] [18]

Bob 下次打开“收款”时,可能会看到另一个地址。这不代表他的钱消失了。新地址有助于保护隐私:知道某个公开地址的人,可以在区块链上追踪付给它的钱,但不应因此自动看到钱包的全部收入。重复使用同一个地址会让这种关联更容易。不过,新地址也不能保证匿名,后续交易还可能暴露其他联系。地址可以分享给付款人,但不宜毫无顾虑地到处公开。一个地址也不等于一个人:资金可能由多人共同管理,也可能由服务商代客户管理。 [1] [14]

钱包管理密钥,找出自己能够花费的款项,再显示它们的总额。因此,一个钱包的余额可能来自很多地址。常见的 HD Wallet 会从共同的起点生成一系列密钥,所以新地址不等于新建钱包。付款时,应用还可能把未用完的余款退回自己的 Change Address,也就是找零地址。但仅有地址不足以恢复钱包,备份必须能恢复必要的密钥及其使用规则。许多钱包通过 Seed Phrase,也就是一组恢复词,来实现这一点;复杂设置可能还需要其他信息。付款人从来不需要你的恢复词或私钥。 [10] [14]

二维码只是信息的表示方式。它可以包含一个地址,也可以包含以 bitcoin: 开头的付款请求,附带金额、收款人标签或消息。BIP21 曾定义这一机制,BIP321 对其作了扩展。确认前要看清钱包实际读入了什么。Lightning Network 的请求,例如供单次支付使用的 invoice,或用于反复请求新 invoice 的 offer,采用另一套付款流程;Lightning Address 则方便用户获取这类付款请求。有些请求会提供多种付款方式。同样,消息的数字签名也不会自动证明身份:BIP322 能证明某个脚本的条件可以得到满足,却不能单凭这一点证明法律身份,或表示签名者同意任意一张账单。 [15] [16] [17]

Base58Check 将版本字节与称为 payload 的数据拼接,附加 SHA256(SHA256(version || payload)) 的前四个字节,再用 Base58 字母表编码。主网中,0x00 代表 P2PKH,0x05 代表 P2SH,因此地址通常以 1 或 3 开头。测试网络使用其他版本。字母表排除了容易混淆的 0、O、I 和 l。这个 32 位校验和能发现许多输入错误,却不能认证收款人的身份。 [2] [3]

原生 SegWit 的编码包含主网前缀 bc 或测试网前缀 tb、分隔符 1、witness 版本,以及按 5 位分组的数据,最后是 6 个校验和字符。BIP173 引入了 Bech32;发现它在某些插入和删除情形下的弱点后,BIP350 为版本 0 保留 Bech32,并为版本 1–16 指定 Bech32m。字母可以全部小写或全部大写,但不能混用。编码上限为 90 个字符。即使编码有效,也可能属于错误的网络或不受支持的版本。 [7] [8]

P2PKH 和 P2WPKH 引用公钥的 20 字节 HASH160。P2SH 使用 redeemScript 的 HASH160,P2WSH 则使用 witnessScript 的 SHA256。因此,SegWit v0 区分 20 字节的 P2WPKH 与 32 字节的 P2WSH。BIP341 中的 P2TR 不同:它的版本 1 程序包含经过调整的 32 字节 x-only 输出公钥 Q,而不是普通收款公钥的哈希。生成 Q 时还可以纳入一棵额外脚本树的根,从而将这个公钥与相应的花费条件以密码学方式绑定。因此,仅凭地址无法读出全部花费方式。 [6] [9]

早期比特币输出经常直接付给公钥。P2PKH 将公钥的公开推迟到花费时。BIP13 和 BIP16 通过 P2SH,使人们可以传递复杂脚本的哈希。BIP141 增加带版本的 witness 程序,BIP173 引入 Bech32,BIP341 与 BIP350 则带来使用 Bech32m 的 Taproot 格式。外观不同,背后对应的验证条件也不同。不要手动替换前缀来“转换”地址,否则可能生成不同甚至无法花费的输出。部分非标准脚本和早期的 pay-to-pubkey 输出没有通常意义上的规范地址。 [4] [5] [6] [7] [8] [9] [3]

BIP32 的 HD Wallet 从共同根节点派生出许多密钥。派生路径区分输出类型:BIP44 用用途值 44' 表示 P2PKH,BIP84 用 84' 表示 P2WPKH,BIP86 用 86' 表示单密钥 P2TR。随后依次是币种(coin type)、账户、收款或找零分支,以及地址索引。仅有 Seed Phrase 未必能确定所有路径、账户和 Multisig 规则。Output Descriptor 还记录密钥来源与脚本结构。恢复的目标是找回真正的资金,而不只是重新显示某个熟悉的地址。 [10] [11] [12] [13] [14]

P2PKH 和 P2WPKH 起初通常只显示公钥哈希,花费时才公开公钥。P2SH 和 P2WSH 会公开所使用的 redeemScript 或 witnessScript。Taproot 的输出已经包含经过调整的公钥。通过 key path 花费时,通常再提供一个 Schnorr Signature;通过 script path 花费时,则公开选中的脚本、control block 和 Merkle 路径,未使用的分支可以继续隐藏。因此,并不是每一种地址都会隐藏公钥。 [6] [9]

要获得更完整的理解,请将本词条与以下词条结合阅读: Private Key, 钱包, Change Address, Bitcoin, SegWit, Taproot. 反向关联还来自: Hash, SHA-256, Cold Storage, Watch-only Wallet.

01Bitcoin 地址是账户号码吗?

不是。地址告诉付款方钱包如何为收款人构造付款。以后花费这笔钱需要满足的条件,会作为 scriptPubKey 写入交易。一个钱包可以管理许多地址,地址本身也不能确定一个人的身份。

02重复使用 Bitcoin 地址安全吗?

从技术上说,只要你仍掌握必要的密钥并能满足相应条件,旧地址就可以继续收款。新地址不会让它失效。但重复使用会把收款记录关联起来,因此下一笔付款应使用钱包提供的新地址。向服务商充值时,请遵循其最新说明。

DOC · 001Bitcoin whitepaper — Transactions and Privacy一手来源 DOC · 002Bitcoin Core — Base58Check implementation一手来源 DOC · 003Bitcoin Core — destination encoders and decoders一手来源 DOC · 004BIP 13 — Address Format for pay-to-script-hash规范 DOC · 005BIP 16 — Pay to Script Hash规范 DOC · 006BIP 141 — Segregated Witness consensus layer规范 DOC · 007BIP 173 — Base32 address format for native v0-16 witness outputs规范 DOC · 008BIP 350 — Bech32m format for witness v1 and later规范 DOC · 009BIP 341 — Taproot validation and output keys规范 DOC · 010BIP 32 — Hierarchical deterministic wallets规范 DOC · 011BIP 44 — Multi-account hierarchy规范 DOC · 012BIP 84 — Derivation for native P2WPKH规范 DOC · 013BIP 86 — Derivation for single-key P2TR规范 DOC · 014Bitcoin Core — Output descriptors文档 DOC · 015BIP 21 — URI scheme规范 DOC · 016BIP 322 — Generic signed message format规范 DOC · 017BIP 321 — URI scheme一手来源 DOC · 018Trezor — verify every address on your device文档
修订日期: 来源优先 · 非投资建议