术语表 /交易与手续费
比特币交易
又称交易、链上交易。
- 比特币交易是什么?
- 比特币交易是一条经签名的指令,它会销毁部分现有的币并在其位置创建新的币,这是价值在网络上转移的唯一方式。
比特币中没有任何东西保存余额。账本是一组未花费输出的集合,一笔付款会消耗完整的输出并生成替代输出,剩余的部分则作为手续费归矿工所有。有史以来的第一笔交易在区块170中于2009年1月12日把10个比特币从 Satoshi Nakamoto 转给了 Hal Finney,并且和此后的每一笔交易一样,无法撤回。
运作方式
比特币交易是一种简短的二进制结构,由六个部分组成,钱包会在广播之前把它们全部组装好。
版本占4字节。版本1是最初的版本;版本2的出现,是因为 BIP68 为相对时间锁赋予了序列号新的含义,现代钱包默认使用该版本。接下来是输入,每个输入指向一个此前创建的输出,并附带花费该输出的权利证明。然后是输出,每个输出包含以聪计的金额,以及一个说明下一步由谁可以花费它的锁定脚本。SegWit 交易会增加一个存放签名的见证部分,该部分位于决定交易 ID 的内容之外。最后是锁定时间,占4字节,通常设为当前区块高度,使交易无法被放入更早的区块。
这一结构中任何位置都没有手续费字段。手续费是算术结果:输入总价值减去输出总价值,凡是您没有分配给任何输出的部分,都会交给挖出该区块的人。因此,找零计算有误的钱包缺陷会让真实的资金白白流失,所有钱包也都会构造一个回到自身的找零输出,而不是留下一个零头。
签名把整笔交易绑定在一起。在默认的 SIGHASH_ALL 规则下,每个签名都对所有输入和所有输出作出承诺,因此哪怕改动某个输出的一聪,交易上的所有签名都会失效。这就是已广播的交易在内容上不可更改的原因,尽管它尚未被确认。
交易大小按虚拟字节而非原始字节计量,因为 SegWit 把见证数据折算为其权重的四分之一,而区块受400万权重单位的上限约束。一笔一个输入、两个输出的原生 SegWit 支出约为141虚拟字节。
购买比特币时为何重要
在交易所里,有两件完全不同的事都被称为“发送比特币”,其中只有一件是交易。
在同一平台内的账户之间转移币,只是更新一次数据库。它是即时的,通常免费,并且不会在区块链上留下痕迹,因为并没有产生交易。提币到您自己控制的地址,则会构造一笔真实的交易,支付真实的手续费,等待真实的区块,并且只有这种方式的结果是您拥有比特币,而不是拥有对一家公司的债权。
一旦提币,会产生三个实际后果。
您无法取消它。 手续费替换(Replace-by-fee)允许发送方在交易未确认时提高手续费,但只有构造该交易的钱包才能这样做,交易所不会代您操作。请在批准之前核对地址,而不是事后。
您收到的每一笔入账,都会变成日后花费时需要付费的一枚币。 十次小额购买会留下十个输出,而日后需要花掉这十个输出的付款,其成本是一个大额输出的数倍。减少提币次数、增大单次提币金额,是比特币中成本最低的习惯,采用它不需要任何花费。
您的交易所收取的手续费是一个政策数字,而不是网络手续费。 它事先设定,很少跟随内存池变化,因此在网络空闲的日子您可能要付出数倍于真实成本的费用,在繁忙的日子则会低得多。本站的交易所评测记录了各家平台如何处理提币,允许您自行选择手续费率的平台更值得优先考虑。
逐字段解读一笔真实的提币
假设您购买了0.05 BTC 并提币。区块浏览器上显示的内容很可能让您困惑,因为这笔交易并不只属于您一个人。
大型交易所会批量处理提币。一笔提币交易可能花费热钱包中的3个输入,总价值为2.41 BTC,并创建42个输出,其中一个是您的0.05 BTC,另一个是回到交易所的找零。按每个输入约68虚拟字节、每个输出约31字节、开销约11字节计算,这笔交易接近1,517虚拟字节。在手续费率为6 sat/vB 时,矿工收到约9,102聪,折合该批次中每位客户约217聪。如果单独发送,您的提币约为141虚拟字节,成本约为846聪。
因此,区块浏览器显示的是一笔转移的比特币远多于您提取数量的交易,收款方有数十个您从未听说过的对象。这并无异常。请按金额和地址找到您自己的输出,记下交易 ID,其余部分不必理会。
比特币交易 vs txid
交易是对象本身,txid 是它的指纹。该 ID 是对不含见证数据的序列化交易进行双重 SHA-256哈希得到的值,写作64个十六进制字符,其作用是无需重复整笔交易即可引用它。客服会索要 txid,区块区块区块浏览器按它建立索引,后续交易也指向它。它不是收据:txid 只能证明存在一笔内容与之完全一致的交易,并不能说明是谁发送的,也不能说明为何发送。
比特币交易 vs PSBT
PSBT 是尚未完成的交易。该格式由 BIP174 定义,包含输入和输出,以及签名方所需的额外信息,例如每个被花费输入的价值和脚本,它在设备之间传递,而不是在网络上传播。物理隔离和多重签名的配置都依赖它:离线签名方读取 PSBT,添加自己的签名后再交回。只有每个输入都签名完毕,该文件才会被定稿为网络可接受的交易,在此之前没有任何东西被发送出去。