当前位置:首页 > 比特币新闻 > 正文

构建一个更好的比特币费用市场

来源: 互联网时间:2016-05-09 23:00:00

bitcoin-fee-market-header

在过去的一年里,我们已看到了比特币的费用市场正以迅猛的速度发展着。因为交易量的持续增长,比特币交易对区块空间的需求也在增长,目前其交易供应限制,仍为平均每10分钟提供1兆字节(MB),而本文将重点讨论比特币交易费用的历史及现状。

事实上,区块空间高度竞争的压力已退化了用户的体验,从而迫使比特币钱包作出调整,确保他们的用户能够即时地确认他们的交易。

然而,距离运行一个最佳的费用市场,我们还是有很长的路要走。

交易费的历史

在最初的几年里,比特币的交易费是可选的,它们被认为是赋予矿工们的一种馈赠。

p1

图:Bitcoin Core的费用设置

对于每一笔交易,钱包都支付了相同的费用, 其默认的费用是由钱包的开发者设置的。

Bitcoin Core的默认费用在过去的几年里,因为比特币的汇率上升而改变多次,从0.01 BTC0.0005 BTC,又改成了0.0001 BTC。此外,还有一些“优先交易”,能让用户发送交易而无需缴纳费用,比如其输入(inputs)是足够久的,并且金额是足够高的,虽然矿工们已逐步废除这一规则。

在过去的几年里,我们了解到硬编码的静态交易费用,会因为以下这几个原因而变得可怕:

  1. 从矿工的角度来看,他们只有1 MB的区块空间,但他们想要插入尽可能多的交易,那样就可以收集到更多的费用。例如,一笔200字节但费用为0.0001 BTC的交易,其优先度要高于一笔1000字节交易费为0.0001 BTC的交易,因为同样的空间,前者能够收取的费用将是后者的五倍之多。
  2. 从用户的角度来看,如果你总是设置一个静态的费用,你可能最终会创建出一个大数据体积的交易(由于花费太多低价值的输入),并且是以非常低的费用率进行的交易,那么它们可能永远都得不到确认。
  3. 静态费用钱包无法适应快速变化的市场条件,导致用户在广播交易时要么是超额支付,要么就是支付费率不足。前者并不会让交易变得更快确认,而后者却会导致很长的确认时间,因为矿工们倾向于更有利可图的交易。

在2010年11月份发布的Bitcoin 0.3.15版本客户端包括了一个改变,其开始根据交易数据量来计算费用,但并不是每一个钱包都去效仿这种做法,很多用户仍继续盲目地将每一笔交易都设定为相同的费用。在开始,这并不是什么问题,但当比特币区块空间开始变得拥堵的时候,情况就发生了转变,因为矿工们将确认成功传达给他们的任何有效交易。

自2015年以来,比特币区块变得越来越拥堵,很显然最好的做法就是使用动态算法的费用,因为它可以对网络上不断出现的变化作出应对。

Bitcoin Core开始使用动态费用,是在0.10版本客户端发布(2015年二月份)之后,从那以后,Alex Morcos一直在稳步改善着动态费用算法。Core客户端的费用估算算法是相当复杂的,你可以在这里查看它的代码和它的英文说明。

费用市场的崛起

p2sh.info的开发者 Antoine Le Calvez提供了一个动态与静态的比特币交易费历史分析。

以下是过去两年的分析结果:

p2

去年秋天,因为网络遭遇压力测试以及攻击,我们可以看到动态费用的使用呈跳跃式增长。

然而,我怀疑这并不是普通用户切换到了动态费用钱包造成的,而是攻击者自身故意设置高于多数静态交易费所导致的。

在攻击过程中,一些较为聪明的用户调整了自己的硬编码费用,但这些交易只占了总体交易中的很小一部分。我们还可以看到在2016年三月份,动态费用的使用再次迎来了一次跃升,这很可能是因为Blockchain的新钱包在一个月前部署了动态费用功能。

Rusty Russell在2015年十月份时,对动态费用市场进行了一次很棒的分析,其研究表明使用动态计算费用的交易变多了,并且每笔交易的平均价值正在增加,因为那些小额的支付正在脱离区块链(即off-chain)。

p3

AJ Towns在Rusty的博文后面进行了更深入的分析,他指出了比特币历史当中八个不同的费用市场阶段:

p4

Towns继续在第二篇博文中发表了他的研究结果,并得出了新兴费用市场对用户所产生的几大影响结论。

它们分别是:

  1. 大量的钱包使用了动态计算费用,以每字节计算费用。
  2. 很多钱包仍然没有动态地计算费用,甚至没有以每字节计算费用。
  3. 随着采用动态费用钱包的比例增长,市场驱动的费用将进一步增长。
  4. 支付过高的市场费率并不会让你的交易确认变得更快。
  5. 因动态费用而引起的钱包事件已经发生了两起,很快第三次费用事件将会到来。
  6. 自动计算费用的钱包,其支付的费率将大大低于那些未自动计算的钱包。

我一直在通过Statoshi跟踪 Bitcoin Core的费用估算,从下面你可以看到,在过去的六个月里,因为区块空间争夺的持续增长,其交易费用已增长为原来的三倍。

p5

Calvez还提供了所有公开可用的费用估算API,以及它们的历史估算数据的仪表板:

p6

有趣的是,似乎21、 BitGo和 Blocktrail的费用估算应对不断改变的市场条件,它们的响应是最快的,而BitPay、 Blockchain和 BlockCypher 这三家公司所提供的费用估算,它们的波动性则较小。

然而,如果我推荐大家广泛去使用动态计算费用,而没有指出其所涉及的危险的话,那我就是失职的。

俗话说,每一个解决方案都会带来新的问题,而动态交易费也不会例外。

动态的难度

动态费用估算永远都不会是完美的,因为它是一种预测未来的一种尝试。

丹麦物理学家尼尔斯·玻尔(Niels Bohr )曾经打趣说:“预测是非常困难的,尤其是有关未来”。如果动态费用估算法无法正确预测出未来的市场费用状态,那用户就会陷入一个“费用陷阱”,正如OpenBazaar的Washington Sanchez博士所指出的那样。

如果你广播了一笔交易,其费用与当前市场条件完全符合,上述费用陷阱现象就会发生,在这之后,很多其他高交易费的交易会被其他用户广播,这会使得你的交易被放到了矿工优先级队列的后面。问题是,因为没有费用替代法(Replace By Fee),你就无法更新你的“竞价”,以满足新的市场条件。

费用估算算法中的漏洞,也会导致对费用市场造成破坏。例如,最近有人错误地创造了一笔交易费用高达300BTC的交易。对于这位不幸的用户而言,这是糟糕的,他可能因为某些糟糕的编码软件,搞混了“费用”与“交易值”,但它也会有连锁反应:

Snip20160509_9

这只是一个猜测,但现在看来,BlockCypher的“1至2区块目标”所使用的费用估算算法,是基于过去两天区块的加权移动平均费用。其结果是,当这300BTC 的费用被处理掉时,最近的平均费用以及他们的估算峰值飙升了800% 。

这并不意味着我是在攻击BlockCypher,我们已经看到了很多钱包都有着交易费用的问题。甚至连Bitcoin Core也没能幸免,最近,我观察到Bitcoin Core 0.12.0客户端的费用估算也出现了一次意想不到的峰值:

p7

我注意到,在2月27日当日,Statoshi.info的“两区块目标”费用估算,从44聪每字节激增到了112聪每字节,但其并没有明显的原因。而我其他的比特币节点,却没有报告相同的峰值。

一些担忧

虽然比特币开发者们面临着大量的挑战,我们也应该认识到费用市场作为一个整体的影响。

我担心着几个潜在的情景,可以会推动费用率比所需的发展要更快:

  1. 糟糕的编码动态费用算法可能会创建一个反馈循环,当交易持续充斥整个网络,对mempool 的积压没有回应的话,会导致费用率无限制地上升。如果大多数的交易都是由人手动发起的,他们意识到了费用的变化,并决定是否应对这些变化,那么其就不会产生大的问题。然而,如果很多交易都是自动产生,而没有任何的人工决策,这些交易都是由算法来创建的,其对费用支付没有进行任何合理性检查的话,市场可能会因此失控,直到编写这些算法的工程师们意识到了问题,并对其进行更改修复,问题才会得到控制。
  2. 失望的用户(或懒惰的开发人员)仍会依赖于硬编码的费用,可能他们会保持手动更新他们的钱包设置,直到他们的交易开始确认,这可能会导致显著高费率支付,但最终迫使其他静态费用的用户去做同样的事情,这样他们才能保持竞争力。动态费用用户也因此被迫向上拉动。我已观察到这种情况在发生,但还没有到显著影响动态费用的程度。

最近有一个发展并没有引起太多的关注,尽管它具有潜力影响费用市场,它就是二级矿工费用市场。

这可能需要特殊的客户奖励计划,例如BTCC的BlockPriority(区块优先)服务,或者也可以采取私有预付费区块空间购买的形式。

引用BTCC的新闻稿:

“BlockPriority优先处理所有BTCC客户的交易,其中包括“0”手续费交易。”

这不应该归结为Bitcoin Core的费用估算算法的问题,但从经济学角度上说,它可能是说得通的,矿池出售预付费的区块空间合同,因为这给他们带来了一种新的可预测的收入来源。

然而,我对矿池们的警告是:如果它成为你所挖交易显著的一部分,你将无法隐藏这些活动。有很多钱包工程师会检测这类行为(就比如我),如果出现了什么问题,我们就会公开这些交易。我猜测,如果个人矿工发现该矿池已开采较低费用的交易,而没有分享私有区块空间合同的利润,被发现参与这种行为的矿池就不会那么幸运。

这可能会导致算力持有者们,会将他们的算力转移至他们所认为的更有利可图的矿池。

隔离验证(Segregated Witness)对费用市场也可能会产生影响。它会提供一个75%的费用折扣,试图重新平衡未使用交易输出(UTXO)的创建与消耗的成本。

向前迈进

仍然有很多钱包和比特币服务并没有实施动态费用。你知道你是属于哪一类,你的无所作为还有可能会导致你的一些用户遭受不佳的体验。如果你还没有实现动态的费用,那么你每次广播出去的交易就会成为以下两类中的其一:

  1. 你花费了冤枉钱,却没法让交易得到更快的确认。
  2.  你支付的费用过少,你的交易被卡住了,导致糟糕的用户体验。

广播一笔硬编码费用的交易,而其恰巧迎合当前市场的条件,这是极不可能发生的。

钱包开发人员应增加安全机制,例如微观层面的检查阈值,以及宏观层面的断路措施,以此防止用户自砸双脚。

钱包所设置的最低费用阈值,应高于最低中继费用。在今天,通过观察进入区块的最低费用交易,我们可以清楚地看到,如果你支付的费用低于5聪每字节,你将为此等待很长的时间。

p8

在此,我鼓励所有的比特币钱包,让它们的的费用估算通过公共API进行访问。我认为费用估算算法本身将成为竞争点,通常它们都是保持闭源的状态,但如果是公开的话,那么我们就可以更容易地观察到异常活动。也许甚至会有人创建一个费用估算的“比特币平均值”聚合器。

当我们都在讨论交易费用时,比特币用户应该停止说他们在交易中支付了“X美分”或“Y bit(比特币单位)”的交易费用,因为这种类型的说法并没有谈到交易大小的规模,这是一种荒谬的说法。我们应该使用规范的费用率进行讨论,最好是以聪每字节计价。显然“20聪每字节”的说法,相比于“20,000聪每千字节”的说法,更容易编写和跟踪。

比特币费用市场发展至今,它是一路颠簸的。

起初,其费用是由开发者手动设置的,然后演变为用户手动设置,现在,我们正处在一个更为混乱且具有潜在危险性的点,其中开发者们在这一新兴市场的经济转向中,扮演了一个更为积极的角色。

免责声明:

1.本文内容综合整理自互联网,观点仅代表作者本人,不代表本站立场。

2.资讯内容不构成投资建议,投资者应独立决策并自行承担风险。