真正的区块链,远比你想象的简单

我们看了太多关于区块链的文章,读完却越发迷茫。来自Josh Stark的文章,能耐心读完,一定会对以太坊、对layer2有个全新的认识,可能也会重燃起你对以太坊的信仰。

2018年大家对网络局限性进行了测试,重新把精力集中到扩容技术上。以太坊仍然是非常稚嫩的,不够安全,无法扩展。这是每个熟悉以太坊的人的共识。投机驱动的炒作,过分夸大了区块链的能力。

以太坊与web3(安全、易于使用的分布式网络,受一套共识机制约束,并为数十亿人使用在关键基础设施完善之前,都很难实现。构建这一基础设施、扩展以太坊容量的项目,都被称作扩容方案。有许多不同形式的方案,但往往都是相互兼容或互补的。

在这篇文章中,将深入探讨一种扩容方案:“链下”或者“layer2”。

首先,讨论以太坊(以及所有区块链)扩容需要面临的挑战。其次,描述解决扩容问题的不同方案,并阐述“layer1”和“layer2”的不同之处。第三,介绍layer2,并分析它是如何工作的,特别是状态通道(state channels)、Plasma、和Truebit。

本文的重点是让读者对layer2的工作原理有个全面而详细的理解。专注于让读者理解构建这种系统的经济机制,以及所有layer2技术的原理。

01

公有链的扩容挑战

首先,必须要有这样的概念——“扩容”不是单一的、具体的问题。最普遍的问题就是交易吞吐量。相较以太坊每秒15笔交易,Visa处理速度可以达到45000笔/秒。因为类似Cryptokitties这样的应用程序太过流行,导致整个网络运行速度也开始放缓,交易成本增加。

类似以太坊这样的公链,要求网络中每一个节点参与处理每一笔交易,这也正是其主要局限所在。以太坊上的每个操作——转账,Cryptokitty的诞生,ERC20合约的生成——都必须由网络中的每个节点一起执行。这是公链权威的保证。这意味着以太坊的交易吞吐量不能高于从单个节点获得的数据的速度。

我们可以要求每个节点做更多的工作。但这是以牺牲去中心化为代价的:需要每个节点完成更多的工作,那么功能较弱的计算机(如消费者的设备)就可能会退出网络,而挖矿的权利将集中到强大的运营商手上。

因此我们需要一种方案,既能不增加单个节点的负荷,又能处理更多交易。从概念上讲,我们可以采取两种方法来解决这个问题:

1) 每个节点不必并行处理每个操作

第一种方法,“分片(sharding)”,将网络分成两个部分,半独立地运作。分开后,A部分可以处理一批交易,B部分也可以处理一部分,如果我们把区块链分成许多不同的“片”,每个“片”都可以独立处理交易。分片一般是指layer1的扩容方案,因为它是在以太坊的基层协议上实现的。

2)为以太坊建立协议层网络

第二种选择,“链下”:直接在现有的基础之上采取措施。在以太坊区块链基本层的吞吐量不变的基础上,尝试执行更多操作。具体的技术包括状态通道,Plasma,Truebit。虽然每一种技术旨在解决不同问题,但它们都需要在保证安全性的前提下,进行“链下”操作。这也被称作layer2。

02

Layer2是加密经济学解决方案

我们来了解一下其背后的原理,公链的基本力量在于加密经济共识。

通过仔细调整激励措施,并将其与软件和密码学结合,我们能够通过网络对系统内部达成共识。这点现在已经被应用到许多不同的公链中。

Layer2背后的原理是,我们可以将这个确定性内核作为一个锚——在此基础之上附加其他经济机制。Layer2可以将公有链的效用扩展到链外,让我们在链外互动成为可能,在需要的时候,这些互动仍然可以返回到主链。

这些layer都是建立在主链之上的,所以它并不能持续保证与链上操作同样的安全性。但是仍然可以确保它们是最终地、安全地、实用地——尤其是只需要牺牲一点操作权限,就可以提高运作效率,降低手续费用。

03

通道状态特点和限制

Ⅰ. 状态通道(State channels)

状态通道指的是“链下”处理交易和其他操作的一种技术。然而,发生在状态通道内事物仍然保持着很高的安全性和终结性:如果出了什么问题,可以选择回到链上交易。

状态通道是支付通道更为普遍的形式——它们不仅可以处理支付,也可以处理区块链的“状态更新”——就像智能合约的更改。

通过一个案例我们可以更好理解状态通道的工作方法。比如说两人正在玩三子棋游戏(tic tac toe),赢家可以获得1ETH作为奖励。最简单的办法,就是在以太坊上创建一个智能合约,将三子棋游戏的规则写入智能合约内。每次玩家移动棋子时,就发送给合约一次。当一个玩家胜出时,合约将支付1ETH给胜出者。

这种做法效率低、速度慢。整个以太坊网络都在为这个游戏运行,造成资源的浪费。玩家每移动一步棋,都要支付一笔费用,他们还要等矿工完成验证,才能进行下一步。

这时候,可以设计一个系统,让互动尽量在链下进行,在链下更新状态,并在需要的时候,回到链上交易。我们把这种系统称之为“状态通道”。

首先,我们在以太坊主链上创建一种智能合约作为“法官”,并将游戏规则写入合约,并识别出本次游戏的两个玩家。给这个合约设置1ETH的奖励。

随后,玩家开始互动。所有操作都不是在链上发生。只是在互联网中发生了交易,但是所有交易都可以上传至合约——换句话说,它们依然是有效的以太坊交易。就像两个人是在来回写着区块链认证的支票。事实上银行内并没有存款或者取款业务,但是每张支票都可以随时存入。

游戏结束,可以上传最终状态(交易清单)并关闭通道。这样,只用支付一次交易费用就可以了。合约可以确保“最终状态”有双方签名,并等待一段时间,以确保结果可靠,最后把1ETH的奖金支付给获胜方。

这个等待时间可以获胜方提供证据证明自己提供的是最终版本。获胜方提交双方签名的交易副本,合约通过的nonce确定双方哪一个提交的才是最终版本。

特点和限制

状态通道可以适用于很多应用程序,并对传统的链上操作进行了许多升级。但是,在引入状态通道之前,还必须考虑其他因素:

l状态通道依赖可用性。

l如果用户要进行许多次状态更新,并且持续时间很长,那么这种状态通道就特别适合。虽然在创建状态通道时需要一笔费用,但是之后维护成本就会特别低。

l状态通道适用于那些拥有固定用户的应用程序。

l状态通道具有很强的隐私属性。所有操作都发生在“内部”通道中和参与者之间,而不会在链上公布,也不会记录在链。只有交易的开始和结束状态是公开的。

l状态通道具有即时的终结性。也就是说,一旦双方对状态签名了,就可以认为是最终的。必要的话,也可以“强制”在链上执行。

04

Plasma—创造子链扩大吞吐量

2017年8月11日,一篇名为《Plasma:自主智能合约》的论文介绍了一项全新的,可以提高以太坊的处理效率的技术。

与状态通道一样,Plasma是一种处理链下交易的技术,需要依赖以太坊底层技术去对其安全性进行保障。但Plasma的切入点是通过在以太坊主链上创建“子链”(“child” blockchain)。这些“子链”,也可以创建它们自己的“子链”。

我们可以在子链级执行许多复杂的操作,但与以太坊主链只需要进行很少的交互。Plasma子链的运行速度能够非常快,并至收取较低的交易费用,因为整个过程不需要在以太坊主链上发生。

比如说,你在以太坊上制作了一款卡片交易的游戏。在链上执行这些复杂的操作是很昂贵的,所以使用Plasma是很好的选择。

首先,在以太坊主链创建一套智能合约,作为服务于我们Plasma子链的“Root”。Plasma Root包含我们子链的“状态转换规则”(比如资产只能交易一次),记录子链状态的哈希,并充当一种“桥梁”,允许用户在以太坊主链和子链之间进行互动。

然后,我们创造我们的子链。子链可以有自己的一套共识机制——在这个案例中就是授权证明(PoA),这是一种依赖可信任的区块生产者的共识机制。

一旦子链被创建或者激活,区块生产者就对Root合约做出承诺。意味着他们实际在说“我作证,子链中的最新区块是X。”这些承诺都被记录在Plasma root,以证明子链中发生的交易。

现在,我们可以创建卡牌交易游戏的基本部分。卡片是基于以太坊主链创造的ERC 721资产,通过Plasma Root转移到子链。这就引入了一个关键点:Plasma允许我们与基于以太坊的数字资产进行大规模交互。然后,我们再在子链上部署游戏应用的智能合约,把游戏逻辑和规则都写进合约里。

在游戏过程中,游戏用户其实只是与我们的子链交互。因为只有少量节点需要处理交易,交易费用会低很多,操作速度也会更快。将更多主链上的操作转移到子链上,整个区块链网络可以处理更多交易。但是要怎么保障它的安全呢?

简单地说,即使一个公司拥有子链区块生成100%的控制权,Plasma也为你提供了一个基本保证,你可以随时将你的资金和资产取出,放回主链。如果一个区块生产者出现恶意行为,最坏的结果就是,它强迫你离开子链。

让我们看看区块链生产者会有怎样的恶意行为,再看Plasma会做出怎样的对策。

首先,如果一个区块生产者通过创建一个假的新区块来控制你的资金。他们不按照区块链的法则来创建区块。与其他区块一样,他们也会公布一份包含该区块证据的Plasma Root契约的承诺。

如上所述,用户可以撤回他们的资产回到主链。在这种情况下,用户(或者更确切地说是代表他们行事的应用程序)将检测到企图盗窃的行为,并在区块生产者尝试使用他们“窃取”的资产之前退出。

Plasma还创造了一种机制,以防止欺诈退出主链。Plasma包括一种机制,任何人(包括你)都可以向Root合约发布欺诈证据,证明区块生产者作弊。此欺诈证明将包含有关前一个块的信息。根据子链的状态转换规则,虚假块不符合以前的状态。如果欺诈被证实,子链将被“退回”到前一个区块。更令人欣喜的是,在这个系统下,任何签下虚假区块的区块生产者都会因丢失一张链上存款而受到惩罚。

提交欺诈证明需要获得基本数据,即用于证明欺诈的块的实际历史。如果区块生产者也没有分享先前区块的信息,以阻止向Root合约提交欺诈证据,该怎么办?

在这种情况下,我们需要取出资金,离开子链。实际上是向Root合约提交了一份“资金证明”。在等待一段时间之后,任何人都可以质疑她的证明(例如,为了证明她在后来的有效区块中花了这些钱),资金会被移回以太坊主链。

最后,区块生产者可以审查子链的用户。区块生产者可以有效地阻止用户在子链上执行任何操作。这种情况下的解决办法同样很简单,将我们所有的资产撤回到上面所述的主链上。

然而,取款本身也存在风险。如果子链上的所有用户要在同一时间取出自己所有的资产,以太坊主链可能没有办法实现这一操作,这意味着用户会有可能失去其资金,不过也有许多技术可以阻止这件事发生,如延长提款的响应时间。

事实是,一个公司掌控100%区块生成权是非常极端的情况,一般不会发生这种情况。也就是说,子链和公有链一样,是去中心化的。因而上诉提到的风险会比较小,用户可以轻易地将资产转回以太坊主链。

我们比较一下状态通道和Plasma:

l一个不同之处是,当同一通道内的所有用户都同意退出时,状态通道可以即时退出。这在Plasma上是不可能的,在Plasma中,用户必须等待一段时间,才能退出。

l状态通道也比Plasma更便宜,更便捷。这意味着我们可以将两者结合起来,在Plasma子链上建立状态通道。

05

Truebit—完成繁重链下计算

Truebit是帮助以太坊完成繁重链下计算的技术。而状态通道和Plasma是扩大吞吐量的。以太坊面临的难题不仅仅是扩大吞吐量。Truebit不会提高交易吞吐量,但是它会让基于以太坊的应用程序做更复杂的事情。

有些操作计算成本太高,无法在链上执行。例如,验证来自其他区块链的简单支付验证(SPV)证明,这可以让以太坊智能合约“检查”一项交易是否发生在另一条链上(如比特币)。

举个例子,你需要在基于以太坊的app上执行一些昂贵的计算(比如说SPV证明)。你不能把它简单的作为以太坊主链智能合约的一部分,因为SPV计算的成本太高了。事实上,在以太坊上做所有计算都很贵,因为总是需要所有节点都要参与到计算中。

然而,你可以给某个人(我们称其为解决者)支付一点费用,让它完成链下计算。

那我们怎么知道解决者结果正不正确呢?Truebit使用一种叫“验证游戏”的经济机制。从本质上讲,是一种激励机制,鼓励“挑战者”来验证解决者提交的结果。如果证明解决者提交了一个错误的结果,那么他们就会得到奖励,而解决者则会失去他们的定金。

因为验证游戏是在链上执行的,它不能简单地计算结果。我们强迫解决者和挑战者确定他们不同意的具体操作。实际上,我们正在努力使双方对结果产生异议。

一旦操作被认定,就足以在以太坊主链上运行。然后,我们通过智能合约来执行细节。

06

layer2的共同内核及其他结论

Layer2有个共同的内核:一旦我们拥有一个公链提供的确定性硬核,我们就可以将它用作扩展块链应用程序有效性的数字经济系统的锚。

Layer2所使用的经济机制往往是交互式的游戏:它们通过为不同的参与者创造竞争或“检查”的动机来发挥作用。区块链应用程序可以假定一个给定的声明可能是真的,因为我们已经为另一个方提供证明它是假的信息创造了强大的激励。

在状态通道中,我们确认渠道的最终状态的方式是——让各方有机会“反驳”对方。在Plasma中,它是我们如何管理欺诈证据和取款。在Truebit中,它是我们如何确保解题者讲真话——通过给验证者一个激励来证明解题者是错的。

这三个示例仅代表了用于加密经济扩容方案的一小部分。我们还应该期望创造新的和意想不到的layer2系统,以改进现有的模型,或在速度、终结性和成本之间提供新的权衡点。

比任何特定的Layer2更重要的是,进一步开发底层技术和机制—加密经济设计。

这些Layer2解决方案是证明可编程区块链(如以太坊)的长期价值的有力论据。只有当区块链可编程时,才能建立Layer2解决方案的经济机制:你需要一种脚本语言来编写程序。对于比特币这样的区块链,这就困难得多(或者在某些情况下基本不能实现),因为这些区块链只能提供有限的脚本。

我们可以在以太坊上构建Layer2,并可以在访问速度、终结性和成本之间达到平衡。这使得底层区块链对于更广泛的应用程序来说更加实用。对于高价值、极其重要的交易,我们还是建议使用主链。对于交易数字收藏品,速度更重要,我们可以使用Plasma。Layer2让我们在不损害底层块链的情况下进行这些权衡,保持去中心化和终结性。

来源:dapdap区块链,原作者Josh Stark

--END--

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181019B0LCMG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券