中年|有关区块链验证的哲学


中年|有关区块链验证的哲学
本文插图

外汇天眼APP讯 : 观区块链最强大的一个特质就是我们能独立验证其执行中的每一个部分 。 即使大部分区块链矿工(或者权益证明中的验证者)被攻击 , 如果该攻击者企图让无效区块上链 , 网络也会拒绝 。 哪怕是没有实时验证区块的用户 , (在变故发生时)也能够收到正在验证区块的用户的警告(这个过程有可能实现自动化) , 进而自行验证发现攻击者的链无效 , 自动拒绝接收这条链 , 然后与其他节点协调一致接收另一条遵循规则的链 。
但在实践中 , 我们到底需要多少验证者?一百个独立验证的节点?一千个?我们是否需要让世界上每个普通人都运行软件来检查所有交易?回答这些问题是我们的挑战 , 尤其是 , 如果我们还想构建出比单一链的中本聪工作量证明更有优势的共识机制的区块链 , 解决这些问题就格外重要 。
为什么要验证
- 51% 攻击者尝试让网络接受一个无效区块 , 而我们希望网络不会接受无效链!-

用户对区块链进行验证主要有两个好处 。 首先 , 这可以在最大程度上让节点参与到决定合法链(也就是被整个社区接受的、具备合法性的链)的过程中 。 通常来说 , 合法链被定义为 “有最多矿工或验证者支持的有效区块链” , 比如比特币中的 “最长有效链” 。 无效链根据定义就会被拒绝 , 如果有多条有效链竞争 , 则获得最多矿工或验证者支持的链获胜 。 因此如果你运行一个验证所有区块有效性的节点 , 你将能检测到哪些链有效哪些无效 , 从而将最大程度地提高检测出合法链的机会 。
但用户对区块链进行验证其实还有一个更深层的益处 。 假如一个强大的参与者企图让网络接受某个对协议的变更(比如改变发行量) , 并且有多数矿工支持 , 在没有其他人对区块链进行验证的情况下 , 这个攻击很容易就实现了 。 并且 , 所有客户端都会 默认 接受这条新链 。 等到所有人回过神来意识到这件事时 , 只能靠 反对者 通过协调来拒绝这条新链链 。 但如果普通用户也参与验证 , 那么情况就完全不同了 , 企图变更协议的攻击者需要说服验证用户主动下载他们的软件补丁以变更协议 。
【中年|有关区块链验证的哲学】
如果有足够多的用户参与验证 , 那么当有人尝试对协议进行有争议的更改时 , 默认情况就不会是成功 , 而是造成混乱 。 天然混乱也会对网络产生破坏 , 需要协议层面外的社会协调来解决 , 但这也在攻击者面前放置了更大的障碍 , 让他们无法自信自己可以一击成功然后一走了之 , 也就大大降低了他们发动攻击的意愿 。 如果多数用户参与直接或间接的验证 , 并且攻击者只有多数矿工的支持 , 那么这次攻击天然会失败 , 这也是对所有人最好的结果 。
定义的视角 vs 协作的视角
要注意的是 , 上述推理的逻辑跟我们经常听到的另一种推理是很不一样的:他们说 , 只要是改变协议规则的链 “从定义上来说” 就不会是合法链 , 而且重要的不是有多少用户愿意接收新的规则集合 , 而是你永远可以留在使用自己喜欢的旧规则的链上 。
看一看这个从 “定义的视角” 来讨论这件事的例子 , 来自 Gavin Andresen:
我想为比特币提出一个全面的技术上的定义:

“比特币” 是一个交易分类账 , 以区块链的形式记载带有合法签名、花费此前未花费资金的交易 。 这条链由创世块开始 , 其哈希为 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f , 它按照预定的时间表、在积累了最多 double-SHA256 工作量证明的链上发行 2100 万枚比特币 。
来自 Wasabi 钱包的另一个定义 , 从解释全节点的价值来说 , 这个定义更直接了当:
在运行比特币全节点时 , 你可以定义自己所认同的确切的货币规则 。 没有人能强加于你 。 因此 , 任何追求金融自由的自治个体都应该运行全节点 。 在确定了自己的规则后 , 全节点软件就能在比特币点对点网络中找到符合我们规则的节点 。 这些节点根据它们的规则 , 向我们发送它们判定有效的交易 , 我们再根据自己的规则进行验证 。 如果我们收到一个不符合规则的交易 , 我们大可以将其标记为无效交易 , 并且断开跟无效交易来源节点的连接 。


推荐阅读