术语表 /交易与手续费
交易 ID
又称 Txid、交易哈希、交易编号。
- 交易 ID 是什么?
- 交易 ID 是比特币交易的64位十六进制指纹,由对该交易连续两次进行 SHA-256哈希运算得出,所有人都以它来指代这笔付款。
没有人分配这个标识符:它由交易自身的内容生成,因此哪怕改动一聪,得到的标识符也会完全不同。该值长度为32字节,以64个十六进制字符显示,并且所有区块浏览器都按字节反序显示。它是让您和交易所客服能够查看同一笔付款的唯一字符串。
运作方式
推导交易 ID 只需两步,且不涉及任何机密。先将交易序列化为原始字节形式,再对其做两次 SHA-256运算,得到的32字节就是标识符。任何拿到原始字节的人都能算出相同的结果,因此标识符无法被预留、申请或伪造。
显示顺序是最先让人困惑的地方。比特币在内部以一个方向进行哈希运算,却以相反的方向输出,所以您在浏览器中看到的字节与文件中的字节顺序相反。开发者工具显示出一串看起来反过来的字符,并不意味着出了问题。
SegWit 把标识符一分为二。自 BIP141 于2017年8月24日在区块481,824激活以来,交易 ID 是基于不含见证数据的交易计算得出的,而第二个标识符 wtxid 则涵盖包括签名在内的全部内容。原因在于可延展性:此前,任何转发交易的人都可以重新编码签名,从而改变标识符,而资金的去向丝毫不变。Mt. Gox 曾在2014年2月将其丢失的币归咎于可延展性,但 Decker 和 Wattenhofer 的一项研究测量了实际发生的攻击,发现在该交易所停止提币之前,只有386 BTC 可归因于可延展性,而该交易所丢失的币多达数十万枚。
区块所承诺的也正是这个标识符。区块中的每个交易 ID 都被哈希进区块头所存储的默克尔根,因此矿工事后无法悄悄地用一笔付款替换另一笔。
购买比特币时为何重要
交易 ID 是在两家公司之间的空档中唯一留存下来的凭证。当从 Coinbase 或 Bitstamp 发起的提币迟迟未到账时,在您提供它之前,客服工单不会有任何进展;而一旦拿到它,您就不再需要工单:将该字符串粘贴到任意区块浏览器中,即可亲自查看输出、手续费和确认数。这也是判断延迟出在交易所的队列还是网络上的最快办法。
反过来的情形才是危险的。交易 ID 只能证明一笔付款存在,不能证明它是发给您的,不能证明它会被确认,也不能证明付款方就是其自称的身份。点对点交易市场上的卖家经常会看到一张区块浏览器页面的截图,便在核实该交易中是否有任何输出支付给自己控制的地址之前就交出了货物。请依次核对地址、金额和确认数。
未确认的标识符也可能消失。完整的 replace-by-fee 是现代 Bitcoin Core 的默认转发策略,因此付款方可以广播同一笔付款的另一个竞争版本,而该版本具有不同的标识符。Bitcoin Core 还会丢弃保留超过336小时(即14天)的交易。区块浏览器显示"transaction not found"通常意味着发生了这两种情况之一,而不是您的币已经消失。
解读创世区块的交易 ID
比特币中最早的交易 ID 是 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b,即2009年1月3日所挖出区块中的唯一一笔交易。由于该区块只包含这一笔交易,别无其他,该区块的默克尔根与它是同一个字符串,这是说明这种承诺如何运作的最清晰的例子。
这笔交易向一个公钥支付50 BTC,而 Bitcoin Core 从未将该输出加入其未花费集合,因此这个标识符所指向的资金永远无法移动。它的 coinbase 字段中还带有报纸标题 "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks"。
这种依赖是单向的。只要改动该标题中的一个字母,交易 ID 和默克尔根就都会面目全非,这就是标识符是指纹而不是标签的原因。您无法自行挑选标识符,也无法在不生成新交易的情况下编辑一笔交易。
交易 ID vs 比特币地址
地址是目的地,交易 ID 则是一次事件的记录。地址可以提前提供并重复使用;标识符只有在交易构建之后才存在。向交易 ID 发送比特币是不可能的,钱包会拒绝这种尝试,因为该字符串无法通过地址校验和验证。冒充客服的骗子会利用这种混淆,先索要“您的交易 ID”,再提供他们自己的地址。
交易 ID vs 输出点
交易 ID 指向整笔交易,而一笔交易在一次交易所批量处理中可能向300个不同的人付款。输出点则指向其中的某一个输出,写法为标识符、冒号和输出索引。币控制界面、硬件钱包的确认界面和 PSBT 文件都以输出点为单位运作,因此仅凭标识符不足以说明您指的是哪一枚币。