# 信任的模式

By [0xluck](https://paragraph.com/@0xluck) · 2021-11-12

---

对于许多区块链应用来说，免信任性都是最重要的特征之一。所谓的免信任性，就是应用的正常工作不以特定参与者按特定方式行事为前提，即使他们将来会在利益的驱使下做出意料之外的举动（也不能使应用的工作状况脱离预期）。区块链应用永远不可能实现完全免信任，但是有一些应用在免信任程度上远远高于另一些项目。如果我们想要朝着信任最小化迈出坚实的步伐，就得先辨别出信任程度的高低。

首先，我个人对信任的定义很简单：信任就是对其他人行为的假设。在疫情爆发前，你不会因为害怕别人突然捅你一刀而与刻意跟他人保持两米的距离。这就是一种信任：一方面是信任他人不会暴走，另一方面是信任法律制度对违法犯罪行为的约束力。当你运行其他人写的一段代码时，你相信他们是诚实的（不管是从人品的角度，还是从经济利益的角度），至少有足够多的人对这段代码进行过审计，知道里面没有 bug 。不自己种菜也是一种信任：相信会有足够多的人为了赚钱而生产粮食。你可以信任不同群体，信任的类型也多种多样。

为了分析区块链协议，我会将信任拆解成四个维度：

你需要多少人如你预期的那样行事？总参与人数有多少？需要这些人出于什么动机如你预期的那样行事？需要他们是利他主义者，还是唯利是图者？是否需要避免他们之间产生协同？如果这些假设被打破了，对系统的破坏有多大？现在，先让我们聚焦于前两个问题。通过下图，我们可以更加直观地看出：

![](https://storage.googleapis.com/papyrus_images/3356e504c6ac101313eb337e399186599f3491039800792252f2215f5dd5ba80.png)

绿色越深表示越健康。让我们详细分析以下几种情况：

1 : 1：整个系统只有一个参与者。如果这名参与者确实如你预期的那样行事，系统就会正常运行。这就是传统的 “中心化” 模型，也是我们所要超越的模型。 N : N：“反乌托邦” 世界。系统中的所有参与者都要如你预期的那样行事，系统才能正常运行，如果有任意参与者失败，那也没有备份方案。 N/2 : N：这是区块链的运作方式 —— 如果大部分矿工（或 PoS 验证者）是诚实的，区块链就能正常运作。要注意的是，N 越大，N/2 就越有价值。相比只由少量矿工/验证者控制的区块链，矿工/验证者广泛分布的网络有趣得多。尽管如此，我们依然想要获得更高的安全性，因为还有 51% 攻击的问题存在。 1 : N：在众多参与者中，只要有一名参与者如你预期的那样行事，整个系统就能正常运行。任何基于欺诈证明的系统都属于这一类。可信设置也是如此，不过在可信设置中，N 通常较小。要注意的是，N 越大越好！ 极少数 : N：在众多参与者中，只要有达到固定人数的小部分参与者如你预期的那样行事，整个系统就能正常运行。数据可用性检查（data availability check）就属于这一类。 0 : N：系统无需依赖外部参与者即可正常运行。自我验证区块有效性就属于这一类。 尽管除 “0 : N” 之外的模型都是建立在 “信任” 基础上的，但是这些模型之间存在巨大差异！相信某个特定的人（组织）会如你所预期的那样行事，和相信任何一个人都会如你所预期的那样行事，二者之间有着天壤之别。相比 “N/2 : N” 和 “1 : 1”，“1 : N” 与 “0 : N” 更为接近。或许有人会觉得 “1 : N” 模型与 “1 : 1” 模型很像，因为这两种系统都依赖一名参与者，但实际上它们之间迥然不同：在 “1 : N” 系统中，如果这名参与者消失或作恶，换一名参与者即可；如果是 “1 : 1” 系统，你就只能束手无策。

尤其要注意的是，即使是你正在运行的软件，其正确性通常也取决于 “极少数 : N” 信任模型，以此确保软件代码出现 bug 时，会有人及时发现。在了解这一事实后，你就会发现，努力从 “1 : N” 模型转向 “0 : N” 模型如同为敞开窗户的房子安装防盗门。

另一个重要的区别在于，如果你的信任假设被打破，对系统的破坏有多大？在区块链上，最常见的两种故障类型是活性故障（liveness failure）和安全性故障（safety failure）。活性故障就是你暂时无法进行操作（例如，提币、将交易打包进区块、读取链上数据）。安全性故障就是出现了系统想要预防的情况（例如，无效块被添加到区块链上）。

以下列举了一些区块链 Layer 2 协议所采用的信任模型。我使用 “small N” 来指代 layer 2 系统本身的参与者集合，“big N” 来指代底层区块链的参与者。我的假设是 Layer 2 的社区总是小于其底层区块链的社区。另外，我所谓的 “活性故障” 特指代币长时间卡住的情况。无法使用系统但能即时提款的情况不算作活性故障。

Channel 类（包括状态通道、闪电网络等）：使用 “1 : 1” 信任模型来确保活性（你的交易对手可以暂时冻结你的资金，不过你可以将资金分散到多个通道中，从而减轻负面影响），“N/2 : big N” 模型来确保安全性（攻击者可以通过 51% 攻击来偷走你的资金）。 Plasma（采用中心化运营方）：使用 “1 : 1” 模型来确保活性（运营者可以临时冻结你的资金），“N/2 : big N” 模型来确保安全性（攻击者可以通过 51% 攻击来偷走你的资金）。 Plasma（采用半中心化运营方，如 DPOS）：使用 “N/2 : small N” 模型来确保活性，“N/2 : big N” 模型来确保安全性。 Optimistic rollup：使用 “1 : 1” 或 “N/2 : small N” 模型来确保活性（取决于运营者的类型），“N/2 : big N” 模型来确保安全性。 ZK rollup：使用 “1 ：small N” 模型来确保活性（如果运营者未能打包你的交易，你可以取回你的资金，如果运营者没有立即打包你的取款交易，就无法打包更多交易，你可以在 rollup 系统中任何一个全节点的帮助下自行提款。）；不存在安全性故障风险。 ZK rollup（轻取款增强型）：不存在活性故障风险和安全性故障风险。 最后是关于激励的问题：为了达到预期的效果，你所信任的参与者需要非常利他主义，一般利他主义，还是理性主义？默认情况下，“欺诈证明” 需要参与者是利他主义的，但是程度如何取决于计算的复杂性（详见 “验证者困境” ），而且有很多方法可以修改规则，使之变得理性。

如果我们增加一种方式来支付服务费，那么帮助他人从 ZK rollup 上取款的行为就是理性的，因此没必要担心无法退出 rollup 的问题。与此同时，如果整个社区都同意 不接受通过 51% 攻击创建的区块链（将交易历史回滚到很久之前，或审查很久之前的区块），就可以减轻其它系统的风险。

结论：如果你听到有人说某个系统 “依赖于信任”，一定要问清楚！这个系统是 “1 : 1” 模型、“1 : N” 模型还是 “N/2 : N” 模型？这个系统需要参与者是利他主义还是理性主义？如果是利他主义，参与者需要付出多大代价？如果假设被打破，那么你需要等待多久才能取回自己的资金？几个小时？几天？还是永远无法取回？搞清楚了这些问题，你才能决定要不要使用这个系统。

原文链接:

[https://vitalik.ca/general/2020/08/20/trust.html](https://vitalik.ca/general/2020/08/20/trust.html)

---

*Originally published on [0xluck](https://paragraph.com/@0xluck/v3EIASAZ9xctA0l22kBL)*
