术语表 /地址与密钥
比特币地址
又称地址、收款地址。
- 比特币地址是什么?
- 比特币地址是一串简短的编码字符串,用于告知发送方的钱包应对这些比特币设置何种锁定条件,从而使日后只有您的密钥才能花费它们。
地址不是账户,也不持有余额;它是一种编码脚本的目标格式。比特币常用的地址有四种,从以1开头的传统(legacy)字符串,到以 bc1p 开头的 Taproot 字符串,后者自2021年11月14日起在区块709,632处可以花费。您的钱包给出哪一种地址,会改变您花费时支付的手续费,也会改变您保有的隐私。
运作方式
每笔支付都会生成一个输出,每个输出都带有一段脚本,规定未来的花费者必须提供什么。地址就是这段脚本的一种形式,人们可以通过聊天窗口或二维码来传递。您的钱包取得一个由您掌控的密钥,算出将币锁定到该密钥的脚本,再把结果连同校验和一起编码,因此输错一个字符会产生错误提示,而不会悄无声息地把钱发往无人之处。
目前流通的编码有两种。以1或3开头的字符串使用 Base58Check,这是一种较旧的格式,末尾附有较短的校验和,字母表经过挑选以避开外形相近的字符。以 bc1 开头的字符串使用 BIP-173中的 bech32,Taproot 则使用 BIP-350中的 bech32m。两种 bech32 变体最多可检测出四个错误字符,并能指出错误所在位置,二者也都不区分大小写,因此钱包可以把它们渲染成更小、扫描更可靠的二维码。
余额并不存储在地址上。余额是钱包能够找到的、锁定在其可推导出的地址上的未花费输出之和。现代钱包可以从一个种子推导出数以千计的此类地址,这就是接收页面每次打开都会提供一个新地址的原因。
购买比特币时为何重要
多数人第一次用到的地址,就是粘贴到交易所提币表单里的那一个,而这一步最容易出错。
请从钱包中复制地址,并在钱包自己的屏幕上而不是浏览器中确认。剪贴板恶意软件会把复制的地址替换成攻击者的地址,除非您逐个比对字符,否则这种替换是看不出来的。硬件钱包的显示屏在这里起防护作用:它显示设备实际推导出的地址,电脑无法编辑屏幕上出现的内容。
每当目标地址是新的,请先发送一笔小额测试,然后再发送其余部分。多数交易所对每笔交易收取固定的比特币提币手续费,因此把一次提币拆成两次,就要付两次手续费。对大额转账来说,这是廉价的保险;对小额转账来说,它可能花掉比它所保护的更多的钱。
平台支持时,请优先使用 bech32。花费一个原生 SegWit 输入约需68 vbytes,而花费一个传统输入约需148 vbytes,因此在20 sat/vB 时,同样的花费约需1,360聪,而不是2,960聪。这一差额要等到币被转出时才支付,所以在提币时做出的选择,几个月后仍然有影响。有些平台支持滞后:如果提币表单拒绝 bc1p 字符串,说明该平台尚未添加对 Taproot 的支持,此时可改用 bc1q 地址。
然后,每个地址只使用一次。交易所、链上分析公司以及您支付过的每一个人,都能看到涉及某个地址的每笔交易,因此重复使用同一个地址,会把您的多次购买永久地关联在一起。
您实际会遇到的四种地址类型
四种地址格式几乎涵盖了如今所有的支付,每一种都能说明生成它的钱包的一些情况。
- 1...(P2PKH,传统)。 Base58Check,自2009年首个版本起使用。各处都能接受,也是花费成本最高的类型。
- 3...(P2SH)。 Base58Check。最初为多重签名而创建,如今多为封装的 SegWit 地址,交易所所说的"SegWit compatible"通常就是指这种。
- bc1q...(P2WPKH,原生 SegWit)。 Bech32,42个字符,自 SegWit 于2017年8月24日在区块481,824处激活起可用。是目前多数钱包的默认选项。
- bc1p...(P2TR,Taproot)。 Bech32m,62个字符,自区块709,632起生效。在复杂花费条件下成本最低,也是 Schnorr 签名以及看起来像普通单密钥支付的多重签名所采用的格式。
看前缀是一种快速的合理性检查:1和3属于旧时代,bc1q 是见证版本0,bc1p 是见证版本1。测试网络改用 tb1,因此任何以 tb 开头的地址都无法用于真实的币。
比特币地址 vs 公钥
比特币地址不是公钥,尽管二者有关联。公钥是 secp256k1 曲线上由您的私钥推导出的一个点,而地址是一段经过编码的脚本,对较旧的类型而言,这段脚本包含的是公钥的哈希,而不是公钥本身。实际的后果是,公开一个地址不会泄露其背后密钥的任何信息,对于传统输出和见证版本0的 SegWit 输出,密钥在您第一次花费之前一直是隐藏的。Taproot 改变了这一细节:bc1p 地址直接嵌入一个32字节的密钥。
比特币地址 vs 钱包
比特币地址只是单个目标;钱包则是软件加上背后数以千计地址所对应的秘密。用助记词恢复钱包,会重新生成它曾经产生过的每一个地址,因此没有人会逐个备份地址。丢失一个地址并无大碍,因为币仍处在钱包还能找到的输出之中。丢失种子则意味着失去一切,包括停放在那些您仍能在区块浏览器上看到的地址里的币。