最近,在比特币社区的核心和无限派别之间出现了一个小小的争执,这个争论可能代表了第五十次同一主题的争论,但这仍然很有趣,因为它突出了一个非常微妙的关于区块链的哲学观点工作。
ViaBTC是一个支持Unlimited的采矿池, 推文称 “hashpower is law”,这是Unlimited这个常见的谈话要点,它认为矿工在比特币治理中有着非常重要的作用,因为矿工是比特币成功的一大类非流动性金融激励用户。 格雷格麦克斯韦(来自核心方面) 回答说 :“比特币的安全性恰恰是因为哈希权力不是法律”。
核心观点是矿工在比特币系统中的作用有限,为了确保交易的顺序,他们不应该有权决定其他任何事情,包括块大小限制和其他块有效性规则。 这些约束由用户运行的完整节点实施 - 如果矿工根据不同于用户节点执行的规则的一组规则开始生产块,则用户的节点将简单地拒绝块,而不管10%或60 %或99%的哈希功率在他们后面。 对此,无限通常会回复一些类似于“如果90%的哈希功率落后于增加阻塞限制的新链条,并且具有10%哈希功率的旧链现在在五个月内减慢10倍,直到重新调整困难,您是否真的不更新你的客户来接受新的连锁?“
许多人经常反对将公共区块链用于涉及真实世界资产或具有交易对手风险的任何应用程序。 批评不是全面的,就是说在公共区块链上实施这样的用例没有意义,或者说部分地说,虽然在公共链上存储数据可能有优势,但业务逻辑应该在链中执行。
通常使用的观点是,在这些应用程序中,信任点已经存在 - 有人拥有支持上链许可资产的物理资产,并且某人总是可以选择逃离资产或被迫冻结他们通过政府或银行进行管理,因此在区块链上管理这些资产的数字化表示就像是在窗户打开时为自己的房子支付钢筋门。 相反,这些系统应该使用私有链,甚至是传统的基于服务器的解决方案,可能会增加一些密码技术来提高可审计性,从而节省将所有内容放在区块链上的低效率和成本。
上述论点都以纯粹的形式存在缺陷,并且以类似的方式存在缺陷。 尽管从理论上讲 ,矿工们可以将99%的哈希权转换为新规则的链条(举例来说,这是一个没有争议的不好的例子,假设他们正在增加区块奖励),甚至可以产生一个旧链,使其永久无用,并且从理论上讲,资产支持货币的集中管理者可以停止兑现一个数字代币,制作一个与旧代币具有相同余额的新数字代币,除非一个特定账户的余额减少到零,并开始尊重新的令牌,实际上这些事情都很难做到 。
在第一种情况下,用户必须意识到现有链条出了问题,同意他们应该去矿工现在挖掘的新链条,并下载接受新规则的软件。 在第二种情况下,依赖于原始数字令牌的所有客户端和应用程序都将中断,用户将需要更新其客户端以切换到新的数字令牌,以及无法查看外部世界并看到他们的智能合约需要更新将完全打破。 在这一切的中间,交换机的对手可以创造一个恐惧 - 不确定性 - 怀疑运动,试图说服人们,他们可能不应该更新他们的客户,或者更新他们的客户到第三套规则(例如改变工作证明),这使得执行交换更加困难。
因此,我们可以说,在这两种情况下,即使理论上存在集权或准中央集权的当事人,可能会迫使从A州过渡到B州,但B州对用户不利,但优于集中的当事人,这样做需要突破了一个严峻的协调问题 。 协调问题在社会中无处不在,而且往往是一件坏事 - 如果英语摆脱了高度复杂和不规则的拼写系统并且做了拼音系统,或者如果美国改用公制,或者如果我们能够在发生经济衰退的情况下立即降低所有价格和工资百分之十 ,实际上这需要所有人同时同意转换,而这通常非常困难。
然而,在区块链应用中,我们正在做一些不同的事情: 我们利用协调问题来利用协调问题 ,利用协调问题产生的摩擦作为防止集中行动者渎职的壁垒。 我们可以构建具有属性X的系统,并且我们可以保证他们将高度保留属性X,因为将规则从X更改为非X需要大量的人同意更新他们的软件。 。 即使有演员可以推动变革,但这样做会很难。 这是您从客户端验证区块链共识规则中获得的安全性。
请注意,这种安全性主要依赖于用户的分散。 即使世界上只有一个矿工,矿工开采的加密货币与PayPal类似的中央系统仍然存在差异。 在后一种情况下,运营商可以选择任意改变规则,冻结人们的钱,提供不良服务,抬高费用或做大量其他事情,协调问题对运营商有利,因为这样的系统具有大量的网络效应,所以很多用户必须同时同意切换到更好的系统。 在前一种情况下,客户端验证意味着矿工可能希望参与的许多恶作剧尝试被默认拒绝,并且协调问题现在对用户有利。
请注意,上述论点本身并不意味着矿工成为协调和决定区块大小的主要参与者(或以太坊的情况下,气体限制)是一个坏主意。 很可能出现这样的情况: 在区块规模/天然气限制的具体情况下 ,“协调一致的矿工采取统一激励措施的政府”是决定这一特定政策参数的最佳方法,可能是因为矿工滥用权力的风险低于任何具体选择的硬限制在限制设定十年后对市场条件极不适当的风险。 然而,说矿政府是决定一个政策参数的最佳方法并且毫无道理地说, 对于其他参数 (例如,区块奖励),我们希望依靠客户端验证来确保矿工受到限制。 这是工程分散式指令的本质:它是关于策略性地使用协调问题来确保系统继续满足某些期望的特性。
上面的论点也并不意味着即使对于需要信任的服务,也尽量将所有内容放在区块链上总是最优的。 通过在区块链上运行更多业务逻辑,通常至少可以获得一些收益,但它们往往远小于效率或隐私的损失。 这很好, 区块链不是每个任务的最佳工具。 但是,上面的论点暗示,如果你正在构建一个基于区块链的应用程序,其中包含许多不必要的集中式组件,那么你可以通过给予用户一种通过访问你的应用程序的方式在信任最小化方面取得更多的进步一个普通的区块链客户端(例如在以太坊的情况下,这可能是Mist,Parity,Metamask或Status),而不是让他们使用您亲自控制的Web界面。
从理论上讲,如果每个用户运行一个独立的“理想完整节点”,即用户端验证的好处得到了优化,该节点接受遵循所有人在创建系统时同意的协议规则的所有块,并拒绝所有执行不。 然而,实际上,这涉及到要求每个用户处理网络中每个人运行的每一笔交易,这显然是站不住脚的,特别是要记住智能手机用户在发展中国家的快速增长。
这里有两种方法。 首先,我们可以认识到,虽然从上述观点来看,每个人都运行一个完整的节点是最佳的,但它当然不是必需的 。 可以说,任何以满负荷运行的大型区块链都已经达到了“普通人”花费1/5的硬盘空间来运行整个节点是没有意义的地步,因此剩下的用户就是爱好者和商家。 只要其中有相当多的人来自不同的背景,那么让这些用户串通起来的协调问题仍然是非常困难的。
其次,我们可以依靠强大的轻客户端技术 。
区块链系统通常有两个级别的“轻客户端”。 第一个较弱的轻客户简单地说服用户,在一定程度的经济保证下,他们处于大多数网络支持的链条上。 这可以比验证整个链更便宜,因为所有客户需要做的就是验证工作方案验证随机数或证明利益方案验证签署的证书,该证书声明“状态的根哈希值是我所说的是,或者你可以将这个证书发布到主链中以删除我的大笔金钱“。 一旦轻客户端验证了根散列,他们就可以使用Merkle树来验证他们可能想要验证的任何特定数据。
![](http://vitalik.ca/files/ethblockchain_oneblock.png)
看,这是一棵梅克尔树!
第二级是“接近完全验证”的轻客户端。 这种客户不只是试图跟随大多数人关注的链条, 相反,它也试图只遵循遵循所有规则的链条。 这是通过一系列策略来完成的; 最简单的解释是,轻客户可以与专业节点一起工作(向Gavin Wood提供名为“渔民”的信用),其目的是寻找无效的区块并产生“欺诈证据”,短消息基本上说“看! 这个块在这里有一个缺陷!“。 轻客户然后可以验证块的特定部分,并检查它是否实际上是无效的。
如果一个块被发现是无效的,它将被丢弃; 如果轻客户在几分钟内没有听到任何给定块的欺诈证据,则认为该块可能是合法的。 在处理问题不是数据不好 ,而是缺少数据的情况下, 复杂性会更复杂一些 ,但总的来说,可能非常接近捕捉矿工或验证者违反规则的所有可能方式的协议。
请注意,为了轻量级客户端能够高效地验证一组应用程序规则,这些规则必须在共识内部执行 - 也就是说,它们必须是协议的一部分或协议内部执行的机制的一部分(像一个聪明的合同)。 这是支持将区块链用于数据存储和业务逻辑执行的关键论据,而不仅仅是数据存储。
这些轻客户端技术并不完美,因为他们确实依赖于网络连接的假设以及网络中其他轻客户和渔民的数量。 但是,对于100%的验证者来说,100%的工作时间并不重要。 相反,我们所需要的只是创造一种情况,即任何由敌对卡特尔矿工/验证人在未经用户同意的情况下推动无效块的任何尝试都会导致很多人头痛,并最终要求每个人都更新他们的软件想要继续与无效链同步。 只要满足这一点,我们就通过协调摩擦达到了安全的目标。
https://vitalik.ca/general/2017/05/08/coordination_problems.html