1. 首页 > 娱乐生活

Layer 2:公链本就不该追求性能

经历了两年时间,区块链行业从无到有出现了数十个、上百个不同设计的 Layer 2 项目,而大部分人对 Layer 2 的认识仅仅就是「扩容方案」那般可有可无。

为什么公链就是性能那么低?为什么我们觉得分层设计才是未来加密经济的发展方向?到底什么才是 Layer 2 ,现有的方案是什么样的?这些问题,都是我们需要去理解的。

应链捕手(ID:iqklbs)约稿,Ryan(Community manager at Nervos Network)撰写了本文,他所在的Nervos Network, 是一个专门为 Layer 2 打造的 Layer 1 底层公链,致力于为未来加密经济构建基础设施。相信Ryan精彩的分享,应该能给你带来启发。

2016年1月,距离比特创世区块诞生7 年之后,一篇名为《The Bitcoin Lightning Network:Scalable Off

-Chain Instant Payment》的白皮书发布,这是第二层扩容方案(Layer 2 Scaling Solutions,简称 Layer 2 )的开端;

到 2018 年的年末,光是技术类型就已经有状态通道、Plasma、Truebit 等各类 Layer 2 方案,出现了 Celer Network、AlphaWallet、Raiden Network、Alacris 等等一众新星,在时间和资源都极度稀缺的情况下根据自己发现的需求,针对不同的场景给出自己的解决方案,准备迎接未来加密经济应用的爆发。?

区块链带来了强大的去中心化应用生态,无数人对它寄以厚望,希望区块链能够打破金融孤岛。2017 年上百个公链项目展开角逐,但到了 2019 年,大规模应用落地仍旧困难:区块链发展受到 Vitalik 提出的不可能三角的瓶颈性限制————也就是区块链系统设计无法同时兼顾可扩展性、去中心化和安全性,三者只取其二。

这个瓶颈是否属实?是否公链的性能真的那么低?以太坊、比特币确实可以将 TPS 做的很大,让每个节点处理更多的交易。甚至有人将它做简单的参数修改,就能作为一个吞吐量非常高的联盟链方案。但这个方案真的非常天真:TPS 提高带来的问题就是,由于带宽的限制,一般的节点甚至连同步数据都难以做到,更别说参与出块,随后小节点就被淘汰。这样损失的是去中心化:公链作为开放的协议,因为性能的需求实际上为大部分节点设置了不可进入的门槛,那讲解做到开放?

去中心化只是一个手段,我们需要的实际上是公共可验证:一个没有足够多、足够分散的验证者(也就是节点)的区块链网络是难以构造信任的————这个网络可以少数人轻易被控制,我讲解保证我的资产安全?

那么是否能够在保有去中心化和安全性的前提下,去追求更高数量级的吞吐量?

有人尝试新的区块链协议去打破不可能三角:一些团队开始研究 DAG,来取代「区块+链」的数据结构来做到上万甚至更高的 TPS。但是基于看似无序实则有序的图做交易顺序的判断是非常难,交易顺序难判断,讲解避免双花?因此很多 DAG 项目引入相对中心化的方案,比如 IOTA 采用一个中心化的 Check Point,ByteBall 采用见证人机制,本质上都不是共识,而是中心化的方式————而这显然不能解决问题。

?

如图Byteball 的 DAG 数据结构,在 Byteball 中交易会根据交易距离创世块的距离,再根据一种见证等级进行排序

是否能够用分片技术,将网络分为不同的片区,处理各自的交易,来将性能十倍、百倍的提升?但实际上,分片技术在计算层面、存储层面、网络层面、共识层面都有问题需要解决,并且不同层面的分片问题联系起来又会有新的问题出现。这些问题解决之后,还有跨片区交易问题,如著名的「Train & Hotel Problem」。

「主要是跨 shard 交易比较复杂」,原来在以太坊 Research 团队研究 Sharding ,现在是Nervos 首席架构师的 Jan 曾说到。

这是一个很让人失望的结果,但我们必须知道,一切事物都有自己的边界,我们应该理解,公链不应该做所有的事情,它应该做它该做的事情:

它应是以最高效率达成全球共识的工具,能够以最低的成本来构建信任;但我们不得不承认的是,它可能是最贵、最低效的数据库。

作为共识的工具、信任的引擎,它不该放弃去中心化和安全性对可扩展性做妥协。那如此低的 TPS,该讲解利用?

我们是否能够将大量的工作放到链下去解决,仅仅将最重要的数据提交到区块链上,让所有人都能够验证这些工作都是准确可靠的?

社会的发展带来的是更精细的分工,区块链的技术发展也如是——分层,本质上就是一种分工。公链不能做所有的事情,那么就让它来做它擅长的东西。由此,也就是第二层扩容方案的思路,我们称为「 Layer 2」,是构建在底层区块链(Layer 1)之上的基础架构,为丰富的区块链应用提供更好的可扩展性、隐私性和可用性。

Layer 1 来保证安全和去中心化,绝对可靠、可信;它能做到全球共识,并作为「加密法院」,通过智能合约设计的规则进行仲裁,以经济激励的形式将信任传递到 Layer 2 上。而 Layer 2 追求极致的性能,它只能做到局部共识,但是能够满足各类商业场景的需求。

Nervos 从一开始就决定做一个支持 Layer 2 的 Layer 1,我们着眼于安全和去中心化,为上层生态传递信任。今天我们能够说,我们预测的、百花齐放的 Layer 2 已经到来。

试图用一层区块链方案解决所有问题的人,往往没有思考过一个很重要的问题:公链虽能够达成全球共识,公共可验证,但是否所有的信息都需要让所有人验证、知道?我们之间的日常交易是否需要让全世界的人审核?

如果我不做违法的事情,当然不会介意,但是这显然没有必要。我们只需要将最关键的信息让所有人验证、获取保障就够了。而 Layer 2 恰好就能满足这样的需求:我们将大量工作放到链下(Off Chain),仅将最重要的内容提交 Layer 1 链上(On Chain)进行验证,并且 Layer 1 能够保证 Layer 2 的安全。

因此,我们提出最核心的两个观点:

1)不是所有的东西都需要全球共识;

2) 公链就该做它应该做的事情,其他的事情完全可以链下完成。

那什么样的方案能够被称为 Layer 2 ?

1)首先,应用的主要工作都是在链下;

2)其次,仅用 Layer 1 作为安全的锚点,保证链下环境的安全;

3)最后,和 Layer 1 尽量保有同样的风险模型(很遗憾,跨链和侧链方案并不符合这一条,因为它们将资产在一条链上锁定在另一条链上释放,资产进入了另一个安全性完全不同的环境)。

显然,这里 Layer 1 和 Layer 2 的安全等级是不一样的:

Layer 1 的安全性是由去中心化(Decentralized)保证,这意味一组无中心的节点取代了可信第三方的角色。在这里:1.被接受的交易就会按照规定执行;2.交易次序是确定的;3.双花是禁止的。

但是 Layer 2 的安全等级远小于此,它的安全性需要通过 Layer 1 来保证,因此只需要达到「去信任」(Trustless):不保证交易在 Layer 2 上一定能够执行,但是能够保证若交易不被执行能够有一种方式让资产安全地从 Layer 2 撤回。

在下面的的内容里,我们就给网一一友们不同的 Layer 2 方案:状态通道、Plasma 和链下计算。

  • 状态通道(State Channel)

我们常会面临的一个场景是,我们会和某一个人或者某几个人反复交互。比如家门口的咖啡厅,每天都去喝一杯咖啡并且用比特币支付,但是每次交易手续费就高的可怕,于是可以用支付通道技术,双方客户端之间建立一条通道,之后交易都在通道内部进行,最后到比特币区块链上做结算,如此只有在通道关闭和打开的时候需要手续费,这是第一个状态通道技术: Lightning Network 最初设计的场景。

本质上,状态通道是一个智能合约机制:区块链上的智能合约就像一个机器人,双方在通道中运行应用,最后将结果提交到机器人手里它会按照规则进行结算。

在状态通道中运行应用,会有如下的步骤:

1)参与状态通道的各方在区块链上部署智能合约,这个合约包含一个多重签名合约(仅在有各个参与方签名的情况下才能解锁),并存入一定的资金,一部分作为初始状态,一部分作为资产抵押防止作恶,通道开启。之后所有的行为都会在链下执行直到通道关闭;

2)应用会在各方客户端本地运行,每运行一步,双方在本地构建交易并签名,通过点对点网络或者简单的八卦协议的方式将交易发送给其他参与方并得到各方签名形成新的状态。新的状态更新包含:各方的最新状态(一般是状态的 Hash),各方的签名以及该状态的版本序号。同时各方保存运行过程中的每一次状态和签名;

3)应用结束,一方提交最终状态到区块链上的智能合约,并有一段时间的争议期。各方认为没有问题,争议期之后状态确认,状态通道关闭并根据最终状态在区块链上进行资产的结算。

原本在区块链中需要确认的「每一步」,变为只需要确认「结果」。需要注意的是,状态通道中并没有一个第三方运行节点,接受交易、打包出块来提供服务。应用在本地执行,状态更新通过点对点网络传播,不需要共识机制,非常高效。

于是状态通道会有非常多的优势,首先就是即时确定性(Instant finality),只要各方签名通过状态更新,状态就被「确认」,而不需要如区块链上等待区块确认;其次,状态更新在链下,点对点通信能够保证隐私,仅最终状态会提交到区块链上;最后是低手续费,状态通道是事务性的,只在通道打开和关闭的时候需要区块链上结算清算的手续费,而其他时间,不管双方在通道内讲解更新都是免费的。

那么状态通道是否安全呢?状态通道的安全性是由区块链上的智能合约来保证的。很可能出现的两类攻击模型:

1) 状态通道中有一个非常乐观的前提,那就是用户保持在线,确保状态的更新。若用户掉线,参与通道的另一方能够通过提交旧的、对自己有利的状态到区块链上结算进行攻击。

争议期的设计就是为了防止这个情况发生:在争议期内,用户可以提交最新的状态。由于每一次状态更新都有各方签名并带有版本序号,因此只要提交最新版本序号的状态到区块链上就能够证明提交旧状态的作恶,并将惩罚作恶者。

如果用户在争议期无法上线呢?不同项目给出了不同方案,如 Lightning Network 中的 Watch Tower 和 PISA 中的 Custodians,这些角色有经济激励来揭发提交错误状态的攻击者;Celer Network 的状态守护者网络帮助用户在下线的时候提交新的状态。

2) 若出现一方不合作的情况,比如他输了游戏,不对自己认输的状态签名。这时另一方能够将状态的证明提交到区块链上,区块链将整个过程重新运行,得到结果。如果的确出现作恶的情况,作恶的一方会受到惩罚并承担应用在区块链上运行的成本。

此外在状态通道中还有很多的概念,如支付通道、广义状态通道等。支付通道是最简单的状态通道,它的状态就是数字————在这个时刻,各方手里有多少 Token。而状态通道中的状态更加丰富,可以是如 Celer Network 的五子棋游戏中双方下棋的落子情况,也可以是海战游戏中各方战舰的受损情况……

而广义状态通道是另一个概念。一般情况下,一个状态通道只能处理一类应用,因为在区块链上的智能合约只能处理某一类应用的执行和验证。

在广义状态通道中制定了一系列的「标准」(如图其实是合约的功能 functions),在该标准下的应用能够在由同一个状态通道合约执行,由此广义状态通道能够允许用户在不关闭通道的情况下运行多种应用。

举例来说,你可以在广义状态通道中先运行五子棋游戏,之后进行支付,然后打一轮扑克牌。其中运行的应用的状态更新都基于同一个标准,在区块链上的合约都能够处理。

图中 V1、V2、V3 分别是不同的通道,但是在链上只需一个合约

状态通道技术给了我们一个非常美好的愿景,它牺牲流动性(在合约中抵押资产)来换取无手续费和即时确定性,但是它仅仅适用于计算量很小、并且各方需要来回交互的应用,并且由于状态通道每一步都需要用户一致同意,就需要在通道开启的时候明确各位参与者,并且中途难以加入/退出,这让状态通道仅仅能够成为链下交易的扩容。

在采访 IC 3成员、伦敦皇家学院副教授 Patrick McCorry 的时候,我问他:

你觉得状态通道的第一个杀手级应用会出现在哪里?

「I would say Payment.

I don’t really see state channels as a scaling solution per se, but as a technique to run existing smart contracts/apps for free.

They won’t work for a whole host of applications, but they’ll truly excel for where they do work.」

我觉得是支付。我并不认为状态通道本质上是一个扩容方案,它仅仅是能够免费运行现有合约、应用的技术而已。它并不能为所有应用起作用,但是对于它能做的方面它会非常出色。

  • Plasma

提到 Plasma 首先要提到侧链的概念。侧链(Sidechain)是非常有效的扩容方案,但是侧链的问题在于,我们将资产映射到侧链之后,在侧链上运行交易我们需要信任侧链的验证者(Validator 也就是出块节点)————一旦侧链上节点作恶,我们将没有办法保护资产的安全性。因此严格来说,侧链并不是一种 Layer 2 方案,因为它的安全性并不是由 Layer 1 保障的。

本文采摘于网络,不代表本站立场,转载联系作者并注明出处:http://www.fjxmta.com/ylsh/45358.html

联系我们

在线咨询:点击这里给我发消息

微信号:wx123456