比特币的手续费机制

比特范 view 951 2020-4-16 16:55
share to
Scan QR code with WeChat

人们宣传比特币的时候常常会讲:“可以向各种张三李四免费转账。”其实不一定,有时还是需要手续费的。

2013年,一个比特币的价格为20美元。2017年,转一个比特币要花20美元。

手续费的目的一来为激励矿工不辍挖矿,二来以维护比特币网络安全(维稳费?)。早期矿工的挖矿底薪比较高,每个区块50枚BTC,但是创世块之后每出21万个块(每四年),底薪减半。所有2100万枚比特币都被挖出后,由交易费充当挖矿奖励。

关于减半算法的代码,长这样。

CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)

奖励金在2012年当时候从50比特币减半为25比特币,2016年从25比特币减半为12.5b比特币。大概2020年就会再减半为6.25比特币。

那么,怎么确定什么时候需要掏交易费、掏多少合适?

比特币网络规则内置交易费用结构,取决于系统推荐的(标准)客户端。 我们拿比特币核心(bitcoin core)打个比方,看看转帐时,需要过哪几道:

1. 花哪些币?

客户端首先确定用哪些币来完成支付。

好比, Bob给Alice转了2枚比特币;Rose又给Alice转了3枚比特币,那么两次转账金额会单独地趴在Alice的钱包中,直到被花出去。(注意:两笔转账不会“自动合并”为5BTC)。

那么,经过一阵子,钱包中会积累不同金额的比特币,所以才说,得考虑下用哪些做支付。

可用金额叫做交易的“输入”,最终发送金额(包括退回到钱包的找零)称为“输出”。

2. 避免过于零碎的支付

若交易“输出”(包括找零)小于0.01BTC,则收取0.0001BTC的手续费。 “选币”时,算法会尽量避开那些找零金额低于0.01BTC的币。

3. 老币、大额交易优先

若发送的比特币金额过小,或币龄过低,则很有可能被收取费用。 每笔交易都有优先级,由“输入”的年龄、金额和交易输入数量决定。

具体而言就是, 客户端将每一笔输入的金额与该输入在区块中存在的时间相乘,将所有乘法结果相加再除以交易字节大小。

若结果小于0.576,则收取交易费。所以,有一堆零碎且/或很新的“输入”,又不想掏手续费可以这么干,交易里加上一个大额且较老的输入即可。这里边,比较关键的就是这个金额x年龄的平均值。

如果在第3步中某交易本来是收费的,但随着时间流逝,又有新的区块不断产生,那么原先交易中“输入”年龄也随之增长,进一步提升了交易的优先级,因此第3步中产生的费用可能会被免除。

4. “称重”收费(按每千字节收费)

最后,客户端检查交易的字节长度。长度取决于输入和输出的数量,大致可用下列公式计算:

148 * 输入数量 + 34 * 输出数量 + 10

若长度小于10000字节且在第3步中有足够高的优先级,那么这笔交易最终被确认为免费,反之需收费, 费用默认为0.0001BTC/千字节(不足1k的按1k计算)。 可自行在客户端相关设置中更改交易费数额。 低于0.0001BTC的设置不会生效。新费用设置生效后,将覆盖步骤2中的费用,两者不叠加。

接着说几个例子:

1. 过犹不及

说:Alice钱包中趴着两笔“输入”,金额分别为1BTC和2BTC。然后Alice想买杯2.99999BTC的咖啡。这时就不存在选币这一说了,因为有且只有两笔输入,都用上才够咖啡钱,剩下0.00001BTC找零。注意,步骤2提到: 若交易“输出”(包括找零)小于0.01BTC,则收取0.0001BTC的手续费。 说明,咖啡交易将被征收0.0001BTC的手续费。结果就是交易会失败,因为Alice手里的余额不足。

这就有意思了:Alice手上有3BTC,但是没法买2.99999BTC的咖啡。Alice可以把3BTC全部付给商家以避免手续费(假设第3步的费用为0),但有些商家可能会要求支付准确的金额。

2. 人品爆发

说:Alice人品大爆发,在某赔率64000的赌博游戏中,用0.02BTC拨来1280BTC。网站支付奖金时,自己钱包里并没有可丁可卯的1280BTC,于是只能用各种零碎输入(含找零)来各种凑。

最后,这笔凑出来的奖金大小是51203字节。是这样,交易大小超过10000字节,费用增至0.0005BTC/每千字节(其实早期的交易费用就是0.0005,后来变成0.0001的),那么, 这里的手续费就是52*0.0005 = 0.026BTC。 比玩家的本儿还高。

当然,还是比PayPal转便宜。

注: 使用Paypal手续费为 4.4% + 0.3 USD/每笔。

好比,1280刀转账,1280*4.4% + 0.3 = 56.62 刀

注意:最后缴纳的手续费是0.0286BTC,有可能是因为没有使用(推荐)标准客户端来创建交易,然后这个客户端在计算费用时有点小问题。

这是个真事儿,见:Bitcoin Transaction 0a05beb2b1ad62d54a40e624d763cd97f10369b8e0527a3046dd2562cef4652c

3. 机关算尽,不掏钱

有种交易踏在免费的悬崖边上,大小为9999字节,堪称交易费躲闪之王。全部输入中只有一个是1聪(satoshi,即比特币最小单位,0.000 000 01 BTC = 1 satoshi, 以致敬比特币创始人Satoshi Nakamoto);但是有另一个大额输入拉高了优先级,免除交易费用。

必须支付手续费吗?

捎带脚说一句,手续费其实不是强制的。有些矿工并没有很在意这些收费标准,也会把一些没有手续费的交易记录到区块中。使用标准客户端的“原始交易”(raw transactions)界面能创建手续费低于标准费用的交易,而且,还是有可能人品爆发的被矿工打包入块的。

btcfans公众号

Scan QR code with WeChat

Disclaimer:

Previous: 什么是比特币挖矿,比特币是怎么发行的? Next: 比特币的区块机制

Related