以太坊Layer 2 扩容,V神为什么偏爱ZK rollup ?


来源 | 巴比特资讯

注:原文作者为以太坊创始人Vitalik Buterin。

很多区块链应用最具价值的特征之一就是信任最小化(trustlessness):应用能够以预期的方式继续运行,而无需依赖特定参与者以特定的方式进行操作(即使他们的兴趣可能改变,并促使他们在未来以某种不同的意外方式行事)。区块链应用从来都不是完全无需信任的,但有些应用要比其它应用更接近于无需信任。如果我们朝着信任最小化的方向发展,那我们要能够比较不同程度的信任。

首先,我对信任的简单定义是:信任是对他人行为的任何假设的运用。如果在新冠大流行之前,你走在街上而没有确保与陌生人保持两米的距离,他们也不会突然掏出刀子来捅你,这是一种信任:双方都相信人们很少会完全精神错乱,相信管理法律体系的人会继续提供强有力的措施来反对这种行为。当你运行由他人编写的一段代码时,你可以相信他们诚实地编写了这段代码(无论是出于正派观念还是出于维护名誉的经济利益),或者至少是有足够的人检查该代码,并发现到漏洞。不亲自去种植自己的食物,也是一种信任的体现:你要相信足够多的人会意识到种植食物符合他们的利益,以便将其出售给你。你可以信任不同规模的人群,并且有不同种类的信任。

为了分析区块链协议,我倾向于将信任分成四个维度:

  1. 你需要多少人按照你的期望行事?

  2. 有多少人?

  3. 这些人的行为需要什么样的动机?他们是否需要利他主义,还是只是寻求利润?他们需要协调吗?

  4. 如果违反这些假设,系统的失败程度会有多严重?

现在,让我们专注于前两个,我们可以画一张图:

图中的颜色越绿,就代表越好。让我们更详细地探讨信任类别:

  1. 1 of 1:只有一名参与者,并且系统仅当该参与者按照你的期望行事时才能正常工作。这是传统的“中心化”模型,而这也是我们希望去尝试替换的。

  2. N of N:“反乌托邦”世界,你需要依靠一大堆参与者,并且所有参与者都需要按照预期的方式工作,才能使所有工作正常进行,而如果其中任何一个失败,便意味着没有后备人员。

  3. N/2 of N :这就是区块链的工作方式,如果大多数矿工(或PoS验证者)是诚实的,那么区块链便会工作。注意,N越大,N的N / 2就变得越有价值。与拥有广泛分布的矿工/验证者的区块链相比,具有少量矿工/验证者主导网络的区块链就没有那么有趣。也就是说,我们甚至希望提高这种安全级别,以抵御潜在的51%攻击。

  4. 1 of N: 参与者有很多,只要其中至少有一个按照你的期望运作,则系统就会正常工作。任何基于欺诈证明的系统都属于这一类,可信设置也是如此,尽管在这种情况下,N通常更小。请注意,你确实希望N尽可能地大!

  5. Few of N:参与者有很多,而只要他们当中至少有一小部分固定数量的参与者按照你的期望运作,则系统就会正常工作。数据可用性检查就属于这一类。

  6. 0 of N:系统始终会按预期工作,其不依赖任何外部参与者。通过自行检查来验证区块就属于此类。

除了"0 of N"之外的所有类别模型,实际上都可以被视为“信任”,但它们彼此之间有很大的不同。信任一个特定的人(或组织)将按预期工作,与信任任何地方的某个人按你期望的那样大不相同。可以说,"1 of N"要比"N/2 of N"或者 "1 of 1"更接近于"0 of N"。而“1-of-N”的模型可能会让人感觉像是“1 of 1”模型,因为这好像你是在信任一个单一的参与者,但两者的实际情况却大不相同:在“1-of-N”模型中。如果你正在与之合作的参与者消失了或者变坏了,你可以切换到另一个参与者,而在"1 of 1"模型系统中,遇到这种情况就意味着系统完蛋了。

特别要注意的是,即使是你正在运行的软件的正确性,也通常取决于一个"few of N"信任模型,以确保如果代码中存在错误,就会有人找到它们并给予修正。

另一个重要的区别是:如果你的信任假设被破坏了,系统将会如何失败?在区块链中,两种最常见的失效类型分别是活性(liveness)失败安全性失败。所谓活性失败是指你暂时无法做你想做的事情(例如提取币、获得区块中包含的一笔交易、从区块链读取信息)。而安全性失败是指系统要主动防止的某些活动发生了(例如,区块链中包含无效区块)。

以下是一些区块链Layer 2协议的信任模型示例。其中“小N”指的是Layer 2系统本身的参与者集合,而“大N”是指区块链的参与者,并且我假设Layer 2协议的社区总是比主链本身要小。我还将“活性失败”一词的使用,限制在币被卡住很长时间的情况下。而不再能够使用该系统,但能够几乎立刻取出并不算是活性失败。

  1. 通道(包括状态通道和闪电网络):活性信任属于“1 of 1”模型(你的对手方可暂时冻结你的资金,不过如果你若是把币分散到多个交易对手,则可以减轻这种风险),安全性信任属于“N/2 of 大N”模型(区块链51%攻击可以窃取你的币);

  2. Plasma(假设使用中心化运营商):活性信任属于“1 of 1”模型(运营商可以暂时冻结你的资金),安全性信任属于“N/2 of 大N”模型(区块链51%攻击);

  3. Plasma(假设使用半去中心化运营商,例如采用DPOS):活性信任属于“N/2 of 小N”模型,安全性信任属于“N/2 of 大N”模型;

  4. Optimistic rollup:活性信任属于“1 of 1”或“N/2 of 小N”模型(取决于运营商类型),安全性信任属于“N/2 of 大N”模型;

  5. ZK rollup:活性信任属于“1 of 小N”模型(如果运营商未能纳入你的交易,你可以提币,如果运营商没能立即纳入你的提款,他们就无法产生更多的批次,你可以借助rollup系统的任何全节点自行提款),ZK rollup没有安全性失败风险;

  6. ZK rollup(带轻提取增强功能):无活性失败风险,无安全性失败风险;

最后,还有一个关于激励的问题:你所信任的参与者,是否要非常利他主义才能按预期行事,或者只需要略微无私,还是足够理性?寻找欺诈证明“默认”有点利他主义,尽管它的利他主义程度取决于计算的复杂性(参见《验证者的困境》一文,在公众号发送“验证”即可阅读本文),并且有多种方法可以修改游戏使其具有理性。

如果我们添加一种服务微支付方式,则协助他人退出ZK rollup总是合理的,因此,几乎没有理由去担心无法退出rollup系统的情况。同时,如果我们作为一个社区同意不接受51%攻击链,则这些攻击链在历史上要恢复得区块太多,或者审查区块的时间太长,则其他系统的更大风险就可得到缓解。

结论:当有人说一个系统“依赖于信任”,请更详细地询问他们的意思!他们是指的“1 of 1”,“1 of N”,还是“N/2 of N”?他们是要求这些参与者是利他主义者还是理性主义者?如果是利他主义,那会涉及一笔微不足道的开支,还是一笔巨大的开支?如果这个假设被违背了,你是需要等待几个小时或几天,还是你的资金会永远被卡住?根据答案的不同,你对是否要使用该系统的答案,可能会大不相同。


热门文章

编程学习 ·

Java工具类-BASE64加解密

1 引入apache commons-codec依赖<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.10</version> </dependency>2 使用Base64.encodeBase64加密public static String base64Enc…
编程学习 ·

c++ string操作

c++ string操作 #include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std;void test01() {///*string& operator=(const char* s)* string& operator=(const string &s)* string& operato…
编程学习 ·

如何快速把图片中的任务删掉?

(1)打开PS编辑软件,Ctrl + O打开新的图片,图片如下(2)Shift + L选择套索工具(3)使用套索工具在任务周边绕一圈(5)鼠标右键,选择填充,100%透明,确定(Enter)(6)Ctrl + D完成如下图 演示到此结束!
编程学习 ·

MySQL基础(十二):锁机制

文章目录一、锁的概述1、什么是锁?2、锁的分类二、MySQL中的三种锁1、表锁(偏读)(1)表锁的特点(2)表加读锁、写锁的语法(3)读锁特性实验(4)写锁特性实验(3)结论2、行锁(偏写)(1) 由于行锁支持事务,复习老知识(2)建表sql(3)行锁加读锁、写锁语法(4)读锁…
编程学习 ·

C#判断端口是否被占用

public static bool PortInUse(int port){bool inUse = false;IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties();IPEndPoint[] ipEndPoints = ipProperties.GetActiveTcpListeners();//IP端口foreach (IPEndPoint endPoint in ipEndPoints){if (…
编程学习 ·

支付宝支付回调,回调日志记录

1、支付报支付回调方法public function aliPayNotify(){try {$app = PayService::alipay();$collect = $app->verify();$collectData = $collect->all();//获取支付宝回调参数$this->writeAliPayLog($collectData, true);if ($collectData[trade_…
编程学习 ·

随笔 弹窗 二维码生成及图片下载

一、qrcode-vue模块该模块是用来动态生成二维码的vue模块插件,<qrcode-vue></qrcode-vue>的底层其实是一个<canvas></canvas>标签。要想使用qrcode.vue插件,需要用vue的脚手架安装这个插件安装指令npm install qrcode --save-dev,在这里我举一个例子…
编程学习 ·

神经网络架构搜索——可微分搜索 (Noisy-DARTS)

神经网络架构搜索——可微分搜索 (Noisy-DARTS)动机FairDARTS: Sigmoid函数替换Softmax函数NoisyDARTS:skip-connection注入噪声方法实现如何加噪声?加入怎样的噪声?实验结果架构参数可视化CIFAR-10实验结果ImageNet实验结果消融实验有噪声 vs. 无噪声无偏噪声 vs. 有偏噪…
编程学习 ·

mysql怎么连接navicat

可能出现下面的问题远程连接发现没有什么问题 在命令行 mysql可以正常使用执行三条指令就可以解决
编程学习 ·

【Docker】 Docker pull的时候指定仓库

1.概述 默认情况下docker pull会从docker hub拉取镜像文件,也可以手动指定一个仓库地址拉取镜像。假如你设置了一个本地仓库地址,那么你只要指定这个地址拉取镜像即可。仓库地址类似一个URL,但是没有协议头http://。 例如从一个镜像地址:myregistry.local:5000,拉取镜像文…
编程学习 ·

剑指Offer(4)--重建二叉树

文章目录题目思路代码 题目 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路首先我们看上面的图片,首…
编程学习 ·

AJAX

原生AJAX ajax概念:在不进行整个页面的更新的情况下,局部更新界面。 局部刷新技术 ajax 和请求数据有关 它的出现开始前后端分离 ajax出现之前 开发人员前端和后端都做 前后端分工 中间由ajax来对接 ajax就是异步的javascript和xml(树形结构文档 xhml—写法和html写法一…
编程学习 ·

对于IIC发送数据的理解

主机发送数据到从机 👀1.数据是从低位开始到高位传输的。 👀2.接受数据是从高位到低位的。 //IIC发送一个字节 void IIC_Send_Byte(u8 txd) { u8 t; SDA_OUT(); IIC_SCL=0;for(t=0;t<8;t++){ IIC_SDA=(txd&0x80)>>…
编程学习 ·

html中的锚点

一、页面内跳转的锚点设置页面内的跳转需要两步:方法一:①:设置一个锚点链接<a href="#miao">去找喵星人</a>;(注意:href属性的属性值最前面要加#)②:在页面中需要的位置设置锚点<a name="miao"></a>;(注意:a标签中要写…
编程学习 ·

Linux添加新硬盘、分区、格式化、自动挂载

Linux添加新硬盘、分区、格式化、自动挂载在为主机添加硬盘前,首先要了解Linux系统下对硬盘和分区的命名方法。1) 在Linux下对SCSI的设备是以sd命名的,第一个ide设备是sda,第二个是sdb,依此类推。一般主板上有两个SCSI接口,一共可以安装四个SCSI设备。主SCSI上的两个设备分…
编程学习 ·

城轨交通系统中智能化管理的作用分析

3D可视化集成系统是根据虚拟现实技术的情景在软件系统中,展现数据信息,把平时的软件业务流程在虚拟场景中完成。计划方案可运用于地铁站、轻轨站、单轨、有轨电车、磁浮等这种轨道交通系统的管理方法上。 轨道交通系统中,地铁已经中国成为大城市标准配置的交通工具,到目前为…
编程学习 ·

提高网站排名的9种内容策略

如果您是一家企业公司的老板,那么您就会知道营销品牌的重要性。成功的市场营销不仅可以留住您的老客户和带来新客户,还可以为公司带来更多的销售和利润。因此,您可能还知道网站或博客上的内容是营销的一个极其重要的方面,并且您可能会不断努力以创建完美的内容。这样做的思…
编程学习 ·

Liunx第二篇 : 安装PHP7.0

先说一下坑吧PHP7.0虽然说性能高的一批,可是安装出现的事不少;我总结了一下我出现的问题: 1.cannot stat ‘php-fpm.conf.default’: No such file or directory 他就是找不到 /usr/local/php/etc 就是没有。。。 2.解压完事后./configure 配置出现一问题 "WARNING: un…