发表时间:2020年6月11日
信息来源:https://coingeek.com/the-fallacy-of-proof-of-work-as-an-information-value-signal/
在过去的几个月里,有很多关于如何使用工作量证明(Proof of Work)来体现文章、电子邮件及其他通讯内容重要程度的讨论。他们的观点是,如果有人肯为工作量证明付费,那么他们一定认为一条信息是重要的,因此你也应当相信。
这整个想法源于这样一种信念,即工作量证明是矿工所支付的一种“代价高昂的信号” ,目的是证明他们优于其他矿工。既然这些矿工可以在算力上投入这么多钱,这一定意味着他们的节点比其他节点更强大更高效,对吧?
然而,我认为实际上却恰恰相反。在本文中,我将会论述原因。
大多数人对算力的误解是:任何人都可以拥有算力,无论他们是否控制着一个节点,而且这些算力所有者能够与他们认为最能代表自身利益的任何节点连接或断开。在市场上,这些算力运营商是市场上的自由代理人,哪些节点带来的收入最多,他们就为哪些节点工作。
**换句话说,算力并非昂贵的信号,而是奖励。**节点运营商之所以会创建和展示一系列昂贵的信号,是为了鼓励大多数自由代理人尽可能使用它们的挖矿区块模板。
为了深入研究,让我们从运营算力的自由代理人的角度来思考问题。我们具有价格公道的能源和存储机器的物理位置,因此我们建立了一个小型系统。假设有5000台ASIC矿机。由于我们并不想运行节点,所以当下的最好选择是连接到其他人的节点。
于是问题来了:哪个节点是最佳节点?
为了最大化我们投资的潜在回报,我们必须选择那些能将我们在挖矿中的工作量最大化的节点。各式各样的节点都希望能够引起我们的关注,但是我们需要了解关注节点的哪些性能特征可以指导我们找到最佳的节点。
让我们来看看几个可能的答案……
涌入脑海的第一想法通常是“找到最多区块的节点”。不过,很容易我们就会证明事实并非如此。找到最多区块的节点可能是最佳节点,但它也有可能是一个糟糕的节点:其运营商通过在直接控制的算力上花费大量资金,来掩盖其糟糕的性能。在这种情况下,可能毫无效率或策略地对节点进行操作,就像斗智斗勇中的钝器一样应用算力。在这样的节点下,我们的工作量是在让其发挥弱点,这可能会让我们遭受损失,因为这些节点不能适当地传播自身的区块。
所以如果最佳节点不是找到最多区块的节点,那么最佳节点可能是:
很多关于哈希算法应用中波状模式的讨论,预计区块奖励将出现转变,从区块补贴转向以交易费作为主要收入来源。那么,说“赢得最富有区块的节点”也是最明智地应用其算力的节点,难道不对吗?我认为并非如此。但是,请首先让我来定义一下“最富产的区块”。
随着费用市场成为主要的收入来源,节点必须寻找盈利性好的区块。记住要达到平均10分钟一个区块链,对于每个需要1分钟所产生的区块,就必然存在另外一个需要19分钟才能产生的区块。接下来我们思考在发现第一个区块之后的1分钟内该节点的区块模板的状态。既然交易验证的速度应保持合理不变的在10分钟的时间框架内(尽管它将在24小时甚至每周或季节性的基础上波动),那么如果区块模板里现在只有1分钟内产生的交易,那么这个本应19分钟生成的区块里只包含了1/19的交易费。此处的重点是,找到1分钟区块和19分钟区块实际上所需要的工作量证明是同样多的。
对于使用算力作为钝器的节点运营商而言,这是它们一直所忽略的。它们整天运行算力却不考虑费用,因为其唯一的目标就是赢得最多的区块。这一策略在今天仍然奏效,因为区块补贴是区块奖励的绝大部分。但随着时间的推移,运营商必须进化,否则这种使用钝器策略的节点将会发现自己毫无用武之地,白白耗费能源,输给那些给更快、更轻、更有策略的对手。
未来,节点将把它们每次迭代的区块模板发布到池中。算力运营商将从这个池中挑选区块头,核查区块难度对应的奖励,评估该区块是否对他们具备足够的挖矿盈利性。这里的关键在于每台矿机都在不同的情况下运行,购置和安装成本均不同;它们进行哈希运算所消耗的单位能源量也不同,而能源成本也有差异,有的能源价格甚至会在很短的时间(小于5分钟)内出现波动。
还有更多内容值得探讨,但这里仅需要考虑这个简单例子。通过这种方法,每一个算力运营商需要自己评估最新的区块模板对他们来说是否具有盈利性,从而决定是否进行挖矿。方程式很简单:每个区块已包含了奖励和难度值,这意味着每个哈希值(hash)的奖励是对于难度的回报;如果这个奖励大于每个哈希值的瞬时成本,那么这个区块模板就具有盈利性。这时就打开机器!很简单对吧?
然而,这还不是全部答案。
虽然赢得了最富产的区块的节点可能使其算力伙伴盈利,但这不是节点自身决定了其区块的收益性,而是在任何时点下算力运营商都选择了该节点提供的使单位算力最具盈利性的区块模板。因此我预计在未来,算力运营商会从许多竞争节点处接收区块模板,并将基于一系列要素评估每一个节点,这些要素包括区块可盈利性、每股支付、节点连通性等,并基于瞬时评估结果将矿机切换至最佳节点上。
此时有人可能驳斥说,赢得最富产区块的节点也有可能是一个网络连接性不佳的节点,但仅仅因其所有者专注于低成本运营,并且聚合了他人不想打包的交易,才获得了富产区块。此外,当这个节点成功地收集了大量的低费率交易时,节点会提供让人难以忽视的高区块奖励,这可能会聚集大量算力,即使这个连接性不佳的节点会具有很高的孤块率。较高的孤块率会使节点偏向于生产更大、更具盈利性的区块,但也会让精明的算力运营商意识到,挖中等收益的区块具有潜在的风险。
由于算力运营商创建了能够反映出他们在网络中动态行为动机的一系列工具,他们才是真正决定哪些区块模板具有盈利性从而在该模版上进行哈希计算的一方,这意味着能否生产出最富产的区块,或许并不是衡量网络中最佳节点的一个合理标准。
以上讨论将引出我认为什么才能真正代表“最佳节点”,并为想要在该领域长期竞争的节点运营商提供发展建议。
孤块是比特币网络中区块产生过程中的一种自然结果,当两个或多个节点在同一时间或几乎同一时间发现相互竞争的区块解决方案时,孤块就会出现。
当这种情况发生时,就会出现所谓的“孤块竞赛”,即竞争节点之间的竞争,让节点中的区块在网络上传播,并让自己的区块优先被更多的其他节点验证。如果网络的大多数节点判定该区块是它们“首先看到”区块,该区块将有最大机会让链上的下一个区块建立在它之上(即该区块被接受,加入主链),这是成为工作量证明的最长链不可篡改的一部分的首要条件。
尽可能避免输掉孤块竞赛的最佳办法是尽可能避免参与孤块竞赛。这需要通过双重战略实现:
1. 与自己竞争——尽可能减少发现新区块所耗费的能源
2. 在与其他人的区块竞争时尽可能少地耗费能源
为了确保在寻找与自己已发现的区块相竞争的区块时能够尽可能少地耗费能源,节点必须让自己的区块能够被更多可能的节点看到并验证。为此,节点运营商必须与网络中其他节点具备极佳的连接性。这并不仅仅意味着需要具有高速和低延迟的肥管道,尽管它们确实是部分解决方案。
节点必须确保其它更多节点知道自己区块中的所有交易。对于其它节点尚不知道的交易,这些节点在请求交易、获取响应和执行验证时将出现延迟。
如果该节点有着其它节点所没有的数百甚至数千个交易,那么这将对该节点赢区块的能力造成灾难性的影响。因为每当该节点发现新区块时,其它节点处理这些区块都会出现长时间的延迟。这意味着节点应该选择其他节点将验证的交易,并拒绝其他节点未验证的交易,以及拒绝会给已被网络中大多数节点接受的区块增加延迟的交易。
关于这种情况的真实案例,请看Mempool对WeatherSV的交易试验。最初,Mempool挖出0.2聪/字节的天气交易,并在网络上传播这些交易,但是其他所有节点都忽略这些交易,这导致每次Mempool发现一个区块时,新区块在网络中的验证都出现了很大延迟。
一开始情况非常糟糕,Mempool之前是占全网10%份额的矿工,通常每天能产生12至17个块,然而在试验的最初24小时内却没能产生任何区块。几次尝试后,Mempool改变了策略,限制每区块最多包含4 MB的WeatherSV交易。终于网络中其它节点开始接受和传播0.25 聪/字节的交易,WeatherSV只是支付了额外费用来消除低费用交易给Mempool带来的问题。
在节点自己发现新区块后,若想减少竞争区块出现的可能性,那么节点需要确保自己能够尽快让尽可能多的节点了解自己所构建区块的内容和结构,使这些节点的区块验证速度越快更好。虽然这不是很多(或任何)节点都做的事情,但流式区块模板是即将上线的Teranode系统里在规划中的一个功能,我认为这个功能将可以向网络产生出一些显著的代价高昂信号。
节点不仅可以直接告知其它节点它们的区块中含有哪些交易,还可以告知交易在Merkle tree中的顺序。这意味着,当找到解决难题的随机数时,其他节点已经知道了99.9%验证区块时所需的信息,这时只需要处理剩下0.1%的信息即可。相较于不使用该机制的节点,以及除了区块头外还必须传播区块里所有交易排列顺序(还要传播所有其他矿工没有的交易)、然后等待其它节点构建出区块以确认区块有效性的节点,使用流式区块模板互相连接节点将会更具优势。
试想一下,某个节点挖出了一个包含10亿个交易的区块,而其他节点由于没有模板,需要大约20秒来验证该区块。在这30秒期间,一旦接收者已经知道了另一个节点的区块模板,这时来自另一个节点的区块就可以介入并先声夺人,抢先被验证。这意味着每当这个节点发现一个新区块时,都有5%的机会成为孤块。假设这个节点掌握着10%的网络算力,那么相当于它每天都要损失一个区块给那些能够明确告知其它节点挖矿模版的节点。
最终,为了尽可能快地知道其它已被发现的区块,节点还必须尽量获知其他节点的区块模板。当节点把自己的区块模板推送给其它有效节点时,保留同伴节点最多模版信息的节点就能够在短时间内完成对任何区块的验证,同时也让它们及时更新不包含任何刚生成的有效区块内交易的区块模版,确保算力代理人的算力尽量不会浪费在已失效的区块模板上。
所以,你会发现:在节点依赖交易费收益而且区块非常大的情况下,工作量证明实际上并不是节点所展现的“代价高昂的信号”。 事实上,节点获得奖励是因为连接性好且对网络中其他节点的信息掌握得最好。生产出最多区块的节点有可能只是因为它们投资了足够多的算力,但是它们却可能在与连接性更好的节点进行孤块竞赛时多次失败。
同样的道理,生产区块数量较少但获取了丰厚交易费的节点,也可能是网络连接性不佳的节点,而且它还无法通过增加对自身算力的投入来掩盖这一事实。但这些节点仍能赢得区块,因为他们的策略是尽可能扩大费用池,赢得大量交易的打包权。
我认为只有基础设施和连接性最佳的节点,以及在任何时刻都了解其竞争对手正在做什么的节点才可以被称为“最佳节点”——失去的区块最少,因此它们的算力供应商在损失最小的情况下获取了最大收益。由于算力供应商是决定哪些区块有利可图的一方,甚至早于那些寻求巨大回报的节点。将出于低风险的考量,他们将自然地更少参与那些奖励巨大的区块,更多地参与回报合理、但只有很小概率会在孤块竞赛中失利的区块。
因此,节点的连通性和实时计算其它节点活动的能力成为了它们展示出的“代价昂贵的信号”。一个健康节点能够收获的奖励是算力,而选择能够持续发出“代价高昂的信号”的节点的算力运营商,他们会获得最小化的工作量证明损耗。
流式区块模板将是非常密集且昂贵的,运行起来价格不菲。举例来说,如果一个节点与其它10个节点共享信息,而每个区块中平均有10亿个交易,那么该节点需要对其索引每个节点都建立一个64GB大小的Merkle tree,并进行持续地更新和管理。
流式区块模板可能是比特币中需要解决的最有趣的和具有挑战性的计算问题之一,但能够掌握这个技术的节点运营商将会因更少的工作量损耗而获得回报,并由于其所展示出的代价昂贵信号,将吸引更多的算力。
是的,但是这和其它工作量证明的应用有什么关系?
我想说,这与其他工作量证明的应用有很大关系,因为看起来这些应用在设计之时,并没有完全理解比特币区块竞争中代价昂贵的信号是什么。
这些应用全部基于这样的误解:即工作量证明是一种昂贵的信号,而不是展示昂贵信号所得到的奖励。并且还把这种误解进一步带到其他工作量证明的应用中。
工作量证明在构建区块的过程中起作用,因为它是累进的。每一个添加到最长有效链的区块都表明,构建它的节点认为前一个区块是它在前一个解决方案中看到的首个有效扩展。这意味着节点认同前一个区块在数学意义上是正确、合法的,并且自身的工作量证明也符合当时的网络要求。
虽然当区块补贴占主导时,网络还是由算力竞争来定义。但随着网络竞争向大区块过渡,激励措施将转变为建设更快的网络和建设存储和计算系统,以实现网络所需的实时系统。这些就是“代价高昂的信号”。
工作量证明是节点从外部获取的奖励,但其运用模式是动态且残酷的。如果节点由于连接性不佳而使自己的区块成为孤块,那么它将很快失去算力。如果节点的区块由于错误编译或非法交易而被拒绝,那么它也将会更快失去算力。这些不良后果促使节点应该对自己的算力供应商以诚相待,并努力向他们证明自己是网络中最有价值的节点。
对随机信息应用工作量证明一点也不复杂。但在信息战中,它是一种钝器,因为了解用户偏好和稳固关系才是当务之急。我为什么要在意一条排名很高的信息,难道就因为有人花了1万美元打造了一个很大的数值?这个数值能给我带来什么呢?能向我保证什么呢?
工作量证明的积累保障了比特币区块链的安全,使得攻击该链非常困难。它之所以有效,是因为它用于验证单一数据结构——区块链本身。如果我把它应用到一张图片或其它网络内容上,我到底在传递什么信号?如果你向我展示一个已经应用了工作量证明的网络内容,我为什么要关心它?工作量证明既不建立在其他工作的基础上,也无法让其它事项在它的基础上建立,那么此处工作量证明的目的到底是什么?对此我可能是一名逆向思维者,但据我所知,工作量证明只是让矿工们赚了一大笔钱,这些矿工让人们相信它很重要,同时又给外界一个迷惑的指向,让人们觉得有人愿意花最多的钱来获得关注。
我不在意有人在这上面浪费钱,但这一切对我的回报在哪里?当我看到信息时,我希望它能根据我的喜好进行排名,基于我想看到什么和我的关注点。我不关心那些神奇的数字,我也不知道它们能给我的生活带来什么价值。如果你想引起我的注意,请给我一些有用的信息,不要给我你花钱买来的神奇数字。
Bitcoin SV是唯一遵循着中本聪于2008年发表的白皮书《比特币:点对点的电子现金系统》中协议的区块链。