观区块链最强大的一个特质就是我们能独立验证其执行中的每一个部分。即使大部分区块链矿工(或者权益证明中的验证者)被攻击,如果该攻击者企图让无效区块上链,网络也会拒绝。哪怕是没有实时验证区块的用户,(在变故发生时)也能够收到正在验证区块的用户的警告(这个过程有可能实现自动化),进而自行验证发现攻击者的链无效,自动拒绝接收这条链,然后与其他节点协调一致接收另一条遵循规则的链。 但在实践中,我们到底需要多少验证者?一百个独立验证的节点?一千个?我们是否需要让世界上每个普通人都运行软件来检查所有交易?回答这些问题是我们的挑战,尤其是,如果我们还想构建出比单一链的中本聪工作量证明更有优势的共识机制的区块链,解决这些问题就格外重要。 为什么要验证- 51% 攻击者尝试让网络接受一个无效区块,而我们希望网络不会接受无效链!-用户对区块链进行验证主要有两个好处。首先,这可以在最大程度上让节点参与到决定合法链(也就是被整个社区接受的、具备合法性的链)的过程中。通常来说,合法链被定义为 “有最多矿工或验证者支持的有效区块链”,比如比特币中的 “最长有效链”。无效链根据定义就会被拒绝,如果有多条有效链竞争,则获得最多矿工或验证者支持的链获胜。因此如果你运行一个验证所有区块有效性的节点,你将能检测到哪些链有效哪些无效,从而将最大程度地提高检测出合法链的机会。
但用户对区块链进行验证其实还有一个更深层的益处。假如一个强大的参与者企图让网络接受某个对协议的变更(比如改变发行量),并且有多数矿工支持,在没有其他人对区块链进行验证的情况下,这个攻击很容易就实现了。并且,所有客户端都会 默认 接受这条新链。等到所有人回过神来意识到这件事时,只能靠 反对者 通过协调来拒绝这条新链链。但如果普通用户也参与验证,那么情况就完全不同了,企图变更协议的攻击者需要说服验证用户主动下载他们的软件补丁以变更协议。 如果有足够多的用户参与验证,那么当有人尝试对协议进行有争议的更改时,默认情况就不会是成功,而是造成混乱。天然混乱也会对网络产生破坏,需要协议层面外的社会协调来解决,但这也在攻击者面前放置了更大的障碍,让他们无法自信自己可以一击成功然后一走了之,也就大大降低了他们发动攻击的意愿。如果多数用户参与直接或间接的验证,并且攻击者只有多数矿工的支持,那么这次攻击天然会失败,这也是对所有人最好的结果。 定义的视角 vs 协作的视角要注意的是,上述推理的逻辑跟我们经常听到的另一种推理是很不一样的:他们说,只要是改变协议规则的链 “从定义上来说” 就不会是合法链,而且重要的不是有多少用户愿意接收新的规则集合,而是你永远可以留在使用自己喜欢的旧规则的链上。 看一看这个从 “定义的视角” 来讨论这件事的例子,来自 Gavin Andresen:
我想为比特币提出一个全面的技术上的定义: “比特币” 是一个交易分类账,以区块链的形式记载带有合法签名、花费此前未花费资金的交易。这条链由创世块开始,其哈希为 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f,它按照预定的时间表、在积累了最多 double-SHA256 工作量证明的链上发行 2100 万枚比特币。 来自 Wasabi 钱包的另一个定义,从解释全节点的价值来说,这个定义更直接了当:
在运行比特币全节点时,你可以定义自己所认同的确切的货币规则。没有人能强加于你。因此,任何追求金融自由的自治个体都应该运行全节点。在确定了自己的规则后,全节点软件就能在比特币点对点网络中找到符合我们规则的节点。这些节点根据它们的规则,向我们发送它们判定有效的交易,我们再根据自己的规则进行验证。如果我们收到一个不符合规则的交易,我们大可以将其标记为无效交易,并且断开跟无效交易来源节点的连接。 伸张你的货币主权 使用全节点让我们享有定义、验证并执行我们比特币货币规则的权利。 我们要注意一下 “定义” 的视角中的两个核心:
然而,我认为这个 “个人主义” 观点是很有问题的。在解释我的理由前,我们先来想一想我们不愿意看到的情形:绝大多数参与者都接受了一个你不愿意接受的协议。比如,有一天交易费变得非常便宜,为了维护链的安全,几乎所有人都同意更改规则,增发新币。而你固执地跑着老规则下的链,自己一个人从大部队中分叉出去了。从你的角度来说,你的确还拥有在你所认同的规则基础上构建出来的系统中的货币,但那又如何?其他人都不再接受你的货币了。交易所不会接受,网站上可能会显示新货币的价格节节高涨,但这新币指的是拥有多数用户的链上的货币,你的货币会变得一文不值。密码学货币与区块链从根本上来说乃是社会建构。如果没有其他人相信,它们将变得毫无意义。那么我们应该从什么角度来看这个问题呢?这个角度的核心是将区块链看成利用协调问题来实现安全性的例子。通常来说,真实世界的协调问题都很难:虽然对大部分人来说,如果英语改变其高度复杂而不规则的拼写系统,改成语音拼写会更好;虽然如果美国改用公制会更好;虽然在经济衰退的时候我们立即将所有价格和工资一起降低 10% 会更好,然而实际上这需要每个人同时同意这些转变,是非常难达成的。但在区块链的应用上,协调问题反而成了我们的优势。我们利用协调问题造成的不顺畅来阻止核心参与者的渎职行为。我们能够构建具有 X 属性的系统,并且保证这个 X 属性能够被保留下来,因为将规则从 X 属性更改为非 X 属性需要一堆人同意并且同时更新他们的软件。即使有一个参与者可以强制推动更改,他也非常难做到,要比反对者积极协调抵制更改难得多。我们应该注意到持这个观点的特殊后果:运行全节点的目的不仅仅是为了保护自己的利益,在发生争议硬分叉时,运行全节点的用户很安全,而没有全节点则不安全。这在更大程度上可以看成一种群体免疫,验证的人越多,每个人都越安全,而且即使只有一部分人验证,每个人都可以获得较高程度的保护。 (责任编辑:admin1) |