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


伸张你的货币主权
使用全节点让我们享有定义、验证并执行我们比特币货币规则的权利 。
我们要注意一下 “定义” 的视角中的两个核心:
一条链如果不符合你定义下的基本的、没得商量的规则 , 无论多少其他人接受该链 , 从定义上说这条链就不是比特币(或以太坊或者其他)链 。

最重要的是你坚守在符合自己规则的链上 。
然而 , 我认为这个 “个人主义” 观点是很有问题的 。 在解释我的理由前 , 我们先来想一想我们不愿意看到的情形:绝大多数参与者都接受了一个你不愿意接受的协议 。 比如 , 有一天交易费变得非常便宜 , 为了维护链的安全 , 几乎所有人都同意更改规则 , 增发新币 。 而你固执地跑着老规则下的链 , 自己一个人从大部队中分叉出去了 。
从你的角度来说 , 你的确还拥有在你所认同的规则基础上构建出来的系统中的货币 , 但那又如何?其他人都不再接受你的货币了 。 交易所不会接受 , 网站上可能会显示新货币的价格节节高涨 , 但这新币指的是拥有多数用户的链上的货币 , 你的货币会变得一文不值 。 密码学货币与区块链从根本上来说乃是社会建构 。 如果没有其他人相信 , 它们将变得毫无意义 。
那么我们应该从什么角度来看这个问题呢?这个角度的核心是将区块链看成利用协调问题来实现安全性的例子 。

通常来说 , 真实世界的协调问题都很难:虽然对大部分人来说 , 如果英语改变其高度复杂而不规则的拼写系统 , 改成语音拼写会更好;虽然如果美国改用公制会更好;虽然在经济衰退的时候我们立即将所有价格和工资一起降低 10% 会更好 , 然而实际上这需要每个人同时同意这些转变 , 是非常难达成的 。
但在区块链的应用上 , 协调问题反而成了我们的优势 。 我们利用协调问题造成的不顺畅来阻止核心参与者的渎职行为 。 我们能够构建具有 X 属性的系统 , 并且保证这个 X 属性能够被保留下来 , 因为将规则从 X 属性更改为非 X 属性需要一堆人同意并且同时更新他们的软件 。 即使有一个参与者可以强制推动更改 , 他也非常难做到 , 要比反对者积极协调抵 制更改难得多 。
我们应该注意到持这个观点的特殊后果:运行全节点的目的不仅仅是为了保护自己的利益 , 在发生争议硬分叉时 , 运行全节点的用户很安全 , 而没有全节点则不安全 。 这在更大程度上可以看成一种群体免疫 , 验证的人越多 , 每个人都越安全 , 而且即使只有一部分人验证 , 每个人都可以获得较高程度的保护 。
深入讨论 “验证”

我们现在进入下一个话题 , 这个话题对轻客户端与分片之类的话题非常重要:验证的时候我们到底是在做什么?要理解这一点 , 我们需要回到更早的时间点 。 对于一次攻击 , 我有以下的偏好顺序:
默认造成失败 > 默认导致混乱 > 默认取得成功
这里的 “大于号” 意思是前者比后者更优 。 最优的情况是攻击直接失败 , 次优的情况是攻击导致混乱 , 造成大家无法就合法链达成一致 , 而最坏的情况则是攻击成功 。 为什么说造成混乱要大大优于攻击成功?这可以归结为激励机制 , 混乱也会给攻击者带来成本 , 使他们无法确信攻击能成功 , 因此能削减攻击者发起攻击的动力 。 天然导致混乱的环境对攻击者来说 , 意味着他们需要赢得区块链战争(成功发起 51% 攻击)还要 赢得 “舆论战” , 说服整个社区跟进攻击链 。 相较于仅仅发动 51% 攻击就必然成功 , 上述情况将使攻击变得异常困难 , 也没那么有利可图了 。

进行验证的目标就是让攻击从天然取得成功的状态变为天然失败的状态(最优) , 或者变为天然导致混乱的状态(次优) 。 如果你运行一个完全验证所有区块的节点 , 攻击者试图让网络接受一条规则不同的链 , 攻击就会失败 。 如果部分用户运行验证全节点而还有很多人没有 , 攻击则会导致混乱 。 但我们还要思考 , 有没有别的方法可以达到相同的效果呢?


推荐阅读