Layer2 的一种通用分析框架


#1

Layer2 的一种通用分析框架

一般来讲,Layer1 特指一种可在大范围内,尤其特指全球范围内达成业务一致性(或称“共识”)的区块链网络系统。而相应地,Layer2 则是基于 Layer1 之上,在相对更小范围达成一致性的网络系统。典型的 Layer1 系统包括以太坊、比特币以及 Nervos CKB 等,典型的 Layer2 协议有状态通道、Plasma等。

对于 Layer2 来说,Layer1 承担了两个角色,首先是资产的来源,其次是仲裁的法官。Layer1 的用户基于对 Layer2 的有限信任将部分资产转移到 Layer2 上享受高速、低成本的服务,并在异常发生时利用 Layer1 对争议进行仲裁。其中,我们将区块链上的资产定义为代币、NFT 以及其他可明确所有权的数据或状态信息。

2018年以来,Layer2 技术的前沿技术发展迅速,各种 Layer2 方案不断涌现。本文尝试给出一种通用框架,对 Layer2 方案在不同功能点的取舍进行分析,以方便用户在不同的应用场合有针对性地选择。

Layer2 业务流程的生命周期

典型的 Layer2 业务流程包括五个主要步骤:规则设置、进入、状态迁移、退出以及挑战与应答。

规则设置

在规则设置阶段,参与 Layer2 业务的各方会就状态迁移规则、挑战应答规则进行设置。该步骤通常表现为在 Layer1 部署一个智能合约,或者交易多方互换数字签名。其本质在于各方提供一个不可否认的承诺(commitment),以便在挑战与应答阶段对争议进行判定。

早期的状态通道技术通常要求预先在 Layer1 上部署一个判定合约对规则和状态进行约束。近期以 Counterfactual 为代表的虚拟合约方式则仅要求参与者对规则进行链外签名认可,当用户对交易结果产生争议时再将其部署到 Layer1 上。这种方式大幅降低了通道建立的成本,但 Plasma 类的 Layer2 协议仍然需要在 Layer1 上部署规则合约以便定期接收 Layer2 对状态的 commitment。

进入

用户的资产从 Layer1 进入到 Layer2 需要用户触发 Layer1 的资产锁定动作,以确定其不会被两层网络双花。锁定后的资产将产生资产锁定证明,该证明在 Layer2 上被验证后即实现了资产的进入。假设 Layer1 具备足够的可用性和安全性,那么资产锁定证明的生成和内容的可靠性是无需置疑的。所以本操作的关键在于 Layer1 上的资产锁定证明如何在 Layer2 达成共识

对于支付通道/状态通道等点对点交易的 Layer2 协议来说,共识仅限于交易双方或有限几方之内(由多跳连接的更多参与方本质上也是两方共识的组合),参与者愿意执行进一步业务即证明对对方的资产锁定证明达成了共识。

对于 Plasma 等多对多交易的 Layer2 协议来说,除非所有的参与方都对某个资产锁定证明进行签名并通知所有人,否则无法确认所有人对该动作达成共识。此时,退而求其次,可由 Layer2 的 Operator 对该资产锁定证明进行签名,来宣布该动作在 Layer2 达成了共识。显然,存在某些情况一些参与方对该行为并不认可,他们可以执行退出动作离开这个共识区,或者把 Operator 的签名提交到 Layer1 上进行仲裁。同时,也存在 Operator 有意或无意地忽略了用户的资产锁定证明,并没有对其签名、在 Layer2 上广播的情况,此时用户也应该可以执行退出动作。最终留下来的参与者表明其对锁定证明无异议,即对此达成了与 Layer1 安全性一致的共识。

状态迁移

Layer2 用户的每一笔交易都应该使得 Layer2 的总状态发生正确迁移。这一步骤涉及三个关键行为:每笔交易的发生是否达成了共识,每笔交易的结果是否达成了共识,该共识的达成是否受到 Layer1 的监督。

与进入阶段类似,参与方对共识的接受与否取决于自己与所有其他参与方的认可或自己与 Operator 的认可。点对点交易的 Layer2 只需要获得对方的签名,并确认该签名符合设置阶段的业务规则即可。而多对多交易的 Layer2 则必须由 Operator 提交共识结果,并且将共识结果的摘要提交到 Layer1 作为 commitment 以便该行为接受 Layer1 监督和仲裁。

该步骤的几个关键点在于,参与方应能够对影响到自己资产的状态迁移进行检验;参与方应能够验证 Operator 提交到 Layer1 的 commitment 与自己获得的状态迁移信息的一致性,并可获得足够的数据生成证明并提交到 Layer1 进行质疑;当参与方交易被 Operator 过滤时,它的资产应可以安全地退出。其中前两个点都涉及 Layer2 的数据可用性问题,后一个点涉及 Layer2 的服务可用性问题。一旦服务或数据不可用,用户可以随时退出;在数据和服务可用前提下,Operator 的作恶行为可以由 Layer1 约束。

退出

Layer2 的退出机制非常复杂,类型也非常多。但其本质都是退出人将资产状态及其证明提交到 Layer1 上,通过预定规则和已经由 Layer1 认可的状态 commitment 的验证解锁资产。退出流程依赖于已经达成共识的规则和状态 commitment,并受后续挑战与应答阶段的约束,其本身的要点在于退出次序和退出的即时性

对于需要引入 Operator 为 Layer2 共识结果以及 Layer2 锚定到 Layer1 的 commitment 进行背书的协议来说,总是存在某些情况无法证明 Operator 给出的共识结果是错误的。因此需要一个公正的退出次序能够保障诚实用户优先退出。然而,恰恰是因为我们无法证明某人“诚实”才引入了退出的次序问题,所以这里指的诚实用户优先退出指的是所有的诚实用户都必须时刻关注 Operator 的行为,并在其行为失序时立刻发起退出,然后按照这些用户退出状态所在的时点的先后次序进行依次退出。

用户提交的退出动作涉及的资产可能与其他用户的资产有关,Layer1 往往无法确定用户提交的退出动作是否是对应资产的最终状态,这就需要等待其他用户对该动作的挑战。挑战的流程决定了退出动作的即时性。理论上,如果 Layer1 可以确定该动作就是对应资产的最终状态,该资产就可以即时退出。例如要求 Operator 在 Layer1 上抵押不小于当前用户所有资金余额的资金,并在每次向 Layer1 提交状态空间 commitment 时都向每一个用户发送一个当前余额的证明。那么用户就可以在最新的 commitment 上提交一个即时的、无需等待挑战的退出请求。

挑战与应答

挑战与应答发生在 Layer1,利用了它作为 Layer2 仲裁者的角色。对应的挑战内容为所有在 Layer1 上发生的与 Layer2 有关的交易,包括 Layer2 共识状态的 commitment 以及用户对退出状态的主张。

对共识状态 commitment 的挑战意味着挑战者不认同 Operator 提交到 Layer1 的共识结果,这种不认同或者源自于挑战者获得了不同的状态结果,或者来自于挑战者无法获得足够的数据以得到对应的状态结果。针对第一种情况,挑战者可以提交新的 commitment,并给出足够的证据证明其正确性。针对第二种情况,挑战者可以提交一个数据申请,要求 Operator 披露完整数据。

但由于数据可用性,或者 Operator 签署冲突的共识结果等问题,上述挑战可能无法得到符合诚实用户利益的结果。此时,应允许用户选择最近一个用户认可的状态点进行挑战。如果 1) 用户由于自己疏忽导致超过了最后一个自己认可的状态点的退出提交时间;或者 2) 预定义的设置规则并不允许用户对 Operator 提交的共识 commitment 信息进行挑战,那么用户将蒙受损失。前者正是 Plasma 方案遇到的用户体验批评,后者则是多签跨链方案遇到的安全诟病。

结论

本框架从 Layer2 交易业务流程出发,分析了局域共识的 Layer2 与全局共识的 Layer1 之间进行资产转移的必要步骤。指出确保 Layer2 的安全性要求第一 Layer2 要能够达成共识,第二 Layer2 的共识结果必须由 Layer1 接受。

对于点对点交易的 Layer2 协议来说,达成共识只需要双方交换对共识的签名即可。对于多对多交易的 Layer2 协议来说,达成共识不得不引入 Operator 的角色,并由 Operator 将共识结果的摘要提交到 Layer1 备查。我们还应该发现,Layer2 Operator 的数量对该流程并无本质影响,因此 Layer2 并不关心运营方是中心化节点还是分布式节点。此外,由于 Layer2 的共识范围总是小于 Layer1,因此不论 Layer2 采取哪种共识形式(包括何种激励形式),其共识结果都不能由 Layer1 无条件接受。因此 Layer2 的共识达成方式也不是 Layer2 安全性的决定性因素

因此, 不论是哪种类型的 Layer2 协议,其共识结果要想获得 Layer1 的接受都需要经历挑战-应答过程。 而挑战-应答流程则受到 Layer1 带宽、退出次序以及高费用的限制,对大部分用户来说是非常高的门槛。但这并不意味着用户资产退出的即时性无法得到保障,可以通过 Operator 对用户在 Layer2 持有的资产在 Layer1 上进行 100% 资产抵押来实现用户退出的实时性。

从用户体验的角度来说,挑战-应答流程是一个灾难,每个用户都必须时刻关注最新的状态变更。将挑战-应答流程委托给代理方并不能提高安全性,因为它把风险转嫁到代理方的可信性上了。一个折中的方案是结合点对点交易和多对多交易的 Layer2 的特点,让 Operator 给出足够的资产抵押,并对用户在 Layer2 上的状态迁移给出资产退出保障。这样,一旦用户选择退出,可以立即退出,无需经历挑战-应答流程。还有一种方法就是用户舍弃转移到 Layer2 的资产的安全性,对 Operator 给与信任,由 Operator 完成所有的状态迁移与资产退出证明工作。相信这两种协议会是未来 Layer2 发展的重点。


Nervos 双周报#7:Dev Meetup 正式更名为 Crypto Wednesday 啦!
CKB 精华帖传送门
#2

对于需要引入 Operator 为 Layer2 共识结果以及 Layer2 锚定到 Layer1 的 commitment 进行背书的协议来说,总是存在某些情况无法证明 Operator 给出的共识结果是错误的。

我认同这个结论,但不知道怎么跟别人解释为什么这个结论成立。是否有简单的推理流程,来推导出这个结论呢?

And 这其实取决于 commitment 的内容,如果 commitment 是 zero-knowledge proof,则这个结论可能是不成立的,参考 https://ethresear.ch/t/on-chain-scaling-to-potentially-500-tx-sec-through-mass-tx-validation/3477


#3

你说的是对的,这句话应该改成:“除非该 commitment 以某种形式包含了 Layer2 所有参与者的认可(例如数字签名)或者这些认可的证明,否则总是存在某些情况无法证明 Operator 给出的共识结果是错误的。”

分两个方面讨论,一方面是这样的 commitment 可以证明所有 Layer2 参与者都认可了某个共识结果,那等价于 Layer1 可以确认 Layer2 上确实达成了共识(这部分我会在原文做补充);另一方面是 Layer1 无法得到这样的证明,只能假设 Operator 给出的共识是正确的,而如果 Operator 不愿意披露自己得到这个共识结果的过程,自然无法给出其错误的证据。


#4

首先结论我不是很认同。文章首先给出了 Layer 2 的模型,全生命周期包含 5 个流程,然后在该模型下得出挑战-应答是 Layer 2 必须的过程,这属于循环论证。更具体地说,文章中连用的三个“因此”我觉得都有些问题:

首先,“共识结果被无条件接受” 具体是什么含义?是指 Layer2 的共识结果作为消息被广播到 Layer1 的网络时,这样的结果在 Layer2 已经被完全确认了(如果被完全确认,Layer1 有足够的理由立即接收这样的结果而不用等待任何来自 Layer2 的其他消息)是吗?如果是这样的定义,那么 “Layer2 的共识范围小于 Layer1 的 共识范围 -> Layer2 的共识结果在被广播到 Layer1 时还没有在 Layer2 的网络上被完全确认” 这条因果链显然是不成立的。

这个“因此”我也没看懂。即使

成立,后面的推论我觉得也过于绝对,共识结果是否被无条件接收不是判断一条链或者一个共识系统是否安全的条件,它确实是衡量安全性某一方面(事实上是一致性)的一个指标,但是它不能代表“安全性”。所以文章的结论

我觉得表述可能不是很恰当。

然后是第三个“因此”:

想要论证挑战-应答过程是必须的,需要在一个不包含挑战-应答过程的模型中论证其必要性。虽然目前生成自己是 Layer2 协议的项目都有这一过程,但是还有些协议(例如 Thunder Core)虽然并不声称自己是 Layer2 协议,但是实际上就是用到了 Layer2 协议。这些协议并没有挑战-应答的过程,虽然在活性无法保证的时候会有一段类似于挑战-应答过程的节点同步过程,但是把它叫做挑战-应答并不合适。但是这并不是说挑战-应答的出现和这种类似于挑战-应答过程的过程的出现之间没有联系,他们在更底层(Layer1 和 Layer2 网络之间的活性和一致性问题)的模型中有着紧密的联系。

从正面来讲,我不认为这个结论(挑战-应答是 Layer 2 必须的过程)是正确的的原因是,挑战-应答的出现是由于在某一刻,Layer1 和 Layer2 之间无法保持一致性。如果每一时刻 Layer1 和 Layer2 之间都能保持一致性(这当然是可以做到的),挑战-应答当然是不必要的。

实际上这就是个拜占庭共识问题。直接从一致性和活性的角度去分析会更加清晰。


#5

Layer2协议不一定都是挑战和应答机制的,例如StarkPay


#6

我回答核心问题好了。

首先,我给出的 Layer2 的全生命周期中除了挑战应答外,其他的流程应该是无争议的,就是规则设置、进入和状态迁移。这实际上将部分区块链扩容方案排除出了 Layer2 的定义。后续的讨论都是在存在进入、mass transaction、退出这样的框架下的。这时,我们考虑 Layer2 的状态返回 Layer1,就存在“ Layer1无法无条件接受一个来自 Layer2 的共识结果/状态声明”的问题。

具体来说,共识过程可以认为是参与者对其他参与者更可能认可哪个全局状态的确认过程。这种一致认可要么是参与者观察各种 proposal 后得出的主观结论,要么是按照某个指标得到的客观结论。对于第一种情况,显然需要挑战-应答过程在 Layer1 上重现这种主观推导。对于第二种情况,这种指标要么是收集到大多数人的签名,要么由某个 operator 指定一个特定的合法结果。对于前者来说,排除 1v1 的状态通道外,其余超过 3 人的业务会非常不现实。对于后者来说,无法确定这种特定结果已经推送给所有 Layer2 的用户,从而无法确认他们是否认可。这就需要那些没有收到结果推送的用户进行数据可用性的挑战。


#7

StarkPay 没有解决数据可用性问题,应该仍然需要在 Layer1 上提交数据披露挑战。


#8

我记得好像是他们没有给出方案,并没有说要用挑战应答方式去解决藏块。


#9

为什么?还是同样的问题,即使存在进入退出状态转移的过程(这实际上并不是一个很高的要求,大多数公链自己都拥有这些过程),也并不意味着 Layer1 无法无条件接受,只要 Layer2 自己达成确定一致了,这样的结果 Layer1 没有理由拒绝。挑战-应答只是解决这个问题的一种方法,在拥有进入退出机制的情况下,我仍旧可以加一个心跳包,或者使用中继节点的方式解决这个问题。

这一段的讨论,我觉得直接用如何解决共识问题的框架比较好,没有必要分主观还是客观,因为这两种情况其实没有区别:即使“主观观察”也要基于客观的数据;即使是客观的证据,也要节点“主观地”承认。另外,“无法保证所有人知道共识结果”之类的 concern 就是典型的共识问题。解决这个问题的必要步骤可以参考两阶段提交协议以及三阶段提交。


#10

我第二部分是用来回答第一部分为什么的,所以我只回答你第二部分的问题。第二部分描述的不完全是标准的共识问题,而是 Layer1 如何参与(即接受) Layer2 的共识的问题。

你当然可以通过多阶段协议来实现共识,但你不可能把每一轮的动作都提交到 Layer1 上(否则就是一个 Layer1 协议了),只能将其结果提交(注意这里参与共识投票的人必须是全部参与者,而不能仅仅是 operator,否则同样会有我说的无法确认所有人都确认这个共识结果的问题)。当你提交结果的时候,Layer1 必须开放一个同时存在另一个结果的可能性的挑战窗口。


#11

即使 Layer2 把每一轮的动作都提交到 Layer1 上,它还是 Layer2,无法变成 Layer1。难道闪电网络的协议被改成每签署一次状态就立即提交之后就能变成和比特币一个层级的 Layer1 ?虽然这 Layer2 的设计目标之一(增加可扩展性)有些冲突,但是它并不能作为判断一个协议是不是 Layer2 的标准。另外,可扩展性也不是 Layer2 的唯一设计目标,Layer2 也可以只是单纯为了增加更多的功能(图灵完备智能合约,隐私计算等)

如何接受 Layer2 的共识就是一个标准得不能再标准的共识问题了。你说的“标准共识”可能是被描述成拜占庭将军的一类问题,但实际上它只是个帮助大家理解的小例子而已。共识问题主要研究不同节点如何就某一消息达成一致,包括如何让所有人知道消息以及如何让所有人都知道所有人已经知道了消息等等更具体的问题。所以类似于下面这样的问题

我建议直接按照考虑共识问题的思路去考虑,不仅更容易找到难题的核心,也可能会发现更多的解决方案。