比特币的交易手续费是一个很巧妙的设计,同时也是一个比较让人迷惑的知识点。比如,查看一条交易,会看到手续费并不对应一个具体的 output 。到底手续费的额度是谁来定的,收取手续费的操作步骤是怎样的,手续费的提高会不会影响比特币用于做日常小额支付呢?本文一一来揭晓。
手续费的是在自由市场中形成的
比特币是一个去中心化的系统,手续费的具体数额不是通过中央权威来规定的,而是在市场中自由竞争而形成的。
手续费是供需关系博弈的结果。使用比特币转账的用户越多,矿工就会越忙,如果交易手续费设置的过低,交易就会被矿工忽略。当然同一时刻,用户设置的交易手续费也可以不相同,着急转账的人可以把手续费设置的高一点,这样矿工会优先处理。而手续费设置的低一点也不一定就会转账失败,因为矿工不忙的时候就会考虑这些交易了。https://bitcoinfees.earn.com/ 上可以看到不同的手续费和转账速度之间的大致对应关系。
手续费是自由权利的体现。比特币是个公开的网络,每笔交易都是用户的一个自我表达。比如,我发了一笔交易,有人认为这是垃圾交易,那么谁去仲裁呢?如果有一个中央权威去仲裁,那么权力猛兽就会诞生。而通过手续费可以达成自由并且防止资源滥用。
简单来说一句话,手续费是市场来定的。
为何手续费不是 output ?
稍微深入到技术细节一些,到 http://blockchain.com 中查看一个交易,会发现交易的 output 中是没有手续费这一项的。那么手续费是如何最终到达矿工手里的呢?
交易手续费是交易的 input 减去 output 。尽管用户在用钱包构建交易,或者区块浏览器中查看一个交易的详情的时候,可以看到手续费这一项的,但是底层的交易数据本身中是不包含手续费的。设置手续费的方式就是保证交易的 input 之和,要比 output 之和大。
交易中没有手续费这一项是有原因的。简单来说,交易构建的时候,手续费是不知道最终会转账给谁的比特币地址的,所以不可能直接在交易中出现一个关于手续费的 output 。交易首先被用户构建出来,然后广播到网上。然后矿工挖矿竞争出块。生成区块后,才知道手续费要转给谁。收取手续费的方式是这样的,出块矿工会在自己的区块中构建coinbase交易,其中,矿工会累加本区块内所有交易的手续费,然后把这笔钱作为 output 指向自己的地址。注意,coinbase 交易的 output 的输出中除了手续费,还包含出块奖励,这两项内容构成了比特币的激励。
这就是为何交易本身中不包含手续费的原因了,有意思吧?
手续费和小额支付
作为电子现金系统,比特币的愿景之一是实现日常小额支付。但是如果手续费变高,买一杯咖啡需要支付10美元手续费,那这个愿景还能实现吗?
先说手续费为何最近两年逐步变高了。使用比特币转账的人变多了,但是比特币依然是十分钟生产一个区块,同时区块容量又是有限的,所以手续费也就水涨船高。另外,随着币价的上涨,很多人参与挖矿,导致挖矿成本也提升了。挖矿成本上升,加上出块奖励逐步减少,不可否认,手续费会有持续上升的压力。
但是采用第二层方案,依然可以实现超低手续费的。通过闪电网络这样的第二层方案,把用户生成的无数的小额交易压缩成一个交易后再交给作为第一层的比特币网络去执行,这样就能让用户享受超低手续费,同时也不用等待网络确认时间。
总之,手续费的确会提高,但是通过第二层方案,比特币依然可以服务小额支付场景。
总结
关于交易手续费,咱们就聊到这里,来总结一下。首先,手续费不是由某个权威设置的,而是在市场博弈中形成的。另外,手续费是由用户在构建交易的时候指定的,但是交易底层数据中是不包含手续费这一项的,输入减去输出就是手续费,手续费是在矿工构建的 coinbase 交易中转给矿工的。最后,由于第二层解决方案的存在,手续费的提高不会阻碍比特币服务小额支付场景。