跳转到正文
buybitcoinsmart

术语表 /开发者参考

标签

标签是什么?
比特币 URI 中的标签用于标明收款的个人或商家,在钱包中则是您为地址或交易添加的私人备注。

规定于 BIP-21。

标签是比特币支付中唯一纯粹为人而存在的部分。您在标签中输入的任何内容都不会写入区块链,助记词也无法将其找回:Bitcoin Core 在2018年10月发布的版本0.17.0中用标签取代了原有的账户系统,标签只保存在钱包文件中。一旦丢失,您在报税时就会失去自己的交易记录。

运作方式

“标签”一词涵盖两种不同的东西,分清它们可以避免许多混淆。

第一种是由 BIP21 定义的 label 参数。它以百分号编码的 UTF-8形式包含在支付 URI 中,因此 label=Coffee%20Shop 会在您的确认界面上显示为 Coffee Shop。它是构建该 URI 的人提供的提示性文字。没有任何签名覆盖它,没有任何钱包会校验它,构造钓鱼链接的攻击者可以像诚实的商家一样随意设定它。

第二种是您自己写下的备注。Bitcoin Core 通过 setlabel、getaddressesbylabel 和 listlabels 提供这一功能,这套 API 在0.17.0中随账户功能被弃用而出现,并在0.18.0移除账户相关调用后完成了对账户的取代。Sparrow、Electrum 和大多数手机钱包都设有类似的字段。

钱包端的标签是存放在密钥旁边的元数据,而不在密钥之内。将助记词恢复到全新的软件中,所有币都会回来,但不会保留任何来源记录。BIP329 正是为解决其中的可移植性问题而存在:它定义了一种 JSON Lines 导出格式,每行一条记录,每条记录包含类型(tx、addr、pubkey、input、output 或 xpub)、引用和标签文本。多款桌面钱包和手机钱包可以读写该格式,因此您更换软件时标签可以随之迁移。

在哪里会遇到它

在三种情形下,标签至关重要,而这些情形与支付记录是否整齐无关。

第一种是币控制。决定花费哪些未花费输出、保持哪些输出彼此分开,前提是您能区分它们,而标签正是用来记录这枚币来自经过验证的交易所提币,那枚币则来自点对点交易。若将它们合并在一笔交易中,两段历史就会被永久关联。没有人能凭记忆做到避免合并。

第二种是税务记录。某枚币的成本基础保存在您自己的备注中,因为自托管转账不带价格。一个为充币添加了标签并写明法币金额的钱包,就是您已经拥有的一份电子表格;而一个满是未标注 UTXO 的钱包,每年都要花一个下午来重建记录。

第三种是钓鱼攻击,方向则正好相反。URI 标签是由攻击者控制的文本。在支付界面上看到熟悉的公司名称,仅仅意味着有人把这个名称输入了一个字符串,仅此而已。

实用习惯:在交易发生时就添加标签,那时您还清楚这笔交易是什么;每次备份时,请将标签与钱包描述符一并导出。助记词加描述符再加标签文件,才是完整的恢复。仅有助记词只能找回资金,却丢失了来龙去脉。

标签 vs PP memo

BIP70 支付协议中的 memo 是随已签名消息一同传送的商家文本,因此钱包至少可以将其与证书持有人关联起来。BIP21 标签则以明文传送,没有任何东西为其背书。这一差异正是支持该支付协议的全部理由,但它并没有挽救该协议:BIP70 已在2020年6月发布的版本0.20.0中从 Bitcoin Core 移除,未签名的标签成为人们实际使用的格式。

请勿混淆

常见问题

我的助记词能备份我的标签吗?

不能。助记词只能恢复密钥和币。标签保存在钱包文件或应用数据库中,因此全新恢复时标签会消失,除非您已单独导出,而 BIP329 标签格式正是为此设计的。

我可以相信支付界面上显示的名称吗?

不能仅凭它。BIP21 URI 中的标签是创建链接的人选定的纯文本,背后没有任何签名,因此钓鱼页面可以显示任何它想用的公司名称。请改为核实收款地址。

接着阅读

相关术语

开发者参考中的更多术语

阅读本页英文版