LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资产 > 真正的以太坊,远比你想象的简单

真正的以太坊,远比你想象的简单

2020-04-14 dapdap区块链 来源:链闻

在过去的文章里,我们看到了太多关于区块链的内容,却如水中月镜中花,读完依旧迷茫。于是我们本能的反省,是不是区块链真的只有技术人员能懂?其实不然 ... 除去市面上故弄玄虚的小众人群,其实区块链涵盖的加密技术、分布式存储等,早已经不是什么新鲜事。有太深入浅出的文章我们没有读过,以至于觉得这个领域过于神秘。

今天这篇文章来自 Josh Stark 虽然有 7000 字,看似很长,但通篇没有废话没有故作高深,是为数不多能将区块链技术原理讲的通俗易懂的文章,如果你能耐心读完,一定会对以太坊、对 layer2 有个全新的认识,可能也会重燃起你对以太坊的信仰。

2018 年是以太坊建设基础设施的一年。在这一年内,大家对网络局限性进行了测试,重新把精力集中到扩容技术上。

以太坊仍然是非常稚嫩的,如今还不够安全,无法扩展。这是每个熟悉以太坊的人的共识。但是在过去一年里,由投机驱动的炒作,过分夸大了区块链的能力。

以太坊与 web3——一个安全、易于使用的分布式网络,受一套共识机制约束,并为数十亿人使用——仍处于即将到来的状态,在关键基础设施完善之前,都很难实现。

构建这一基础设施、扩展以太坊容量的项目,都被称作扩容方案。有许多不同形式的方案,但往往都是相互兼容或互补的。

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

首先,我将讨论以太坊(以及所有区块链)扩容需要面临的挑战。

其次,我将谈到解决扩容问题的不同方案,并阐述「layer1」和「layer2」的不同之处。

第三,我将介绍 layer2,并分析它是如何工作的,特别是状态通道(state channels)、Plasma、和 Truebit。

本文的重点是让读者对 layer2 的工作原理有个全面而详细的理解。但我不会深入到代码研究和特定的使用场景。相反,我们专注于让读者理解构建这种系统的经济机制,以及所有 layer2 技术的原理。

01 公有链的扩容挑战

首先,必须要有这样的概念——「扩容」不是单一的、具体的问题,它是一系列问题,如果以太坊想要为全球几十亿用户提供服务,就必须克服这些阻碍。

最普遍的问题就是交易吞吐量。目前,以太坊每秒可以处理 15 笔交易,相较而言,Visa 处理速度可以达到 45000 笔 / 秒。在过去一年里,因为类似 Cryptokitties 这样的应用程序太过流行,导致整个网络运行速度也开始放缓,交易价格增加。

类似以太坊这样的公链,要求网络中每一个节点参与处理每一笔交易,这也正是其主要局限所在。再以太坊上的每个操作——转账,Cryptokitty 的诞生,ERC20 合约的生成——都必须由网络中的每个节点一起执行。这是设计时决定的,也是公链权威的保证。节点不需要从外部得知区块链的状态,它们自己可以解决。

这意味着以太坊的交易吞吐量存在基本限制:不能高于从单个节点获得的数据的速度。

我们可以要求每个节点做更多的工作。如果我们将区块大小加倍(不考虑 gas 的限制),这将意味着每个节点所做的工作量大约是现在工作量的两倍。但这是以牺牲去中心化为代价的:需要每个节点完成更多的工作,那么功能较弱的计算机 (如消费者的设备) 就可能会退出网络,而挖矿的权利将集中到强大的运营商手上。

因此我们需要一种方案,既能不增加单个节点的负荷,又能处理更多交易。

从概念上讲,我们可以采取两种方法来解决这个问题:

1) 如果每个节点不必并行处理每个操作呢?

第一种方法,改变前提:我们是否可以构建一个区块链,链内节点都不必参与处理每笔交易呢?是否可以将网络分成两个部分,半独立地运作呢?

分开后,A 部分可以处理一批交易,B 部分也可以处理一部分,这样区块链交易吞吐量就提高一倍,因为我们现在设定每两个节点可以同时工作。如果我们把区块链分成许许多多不同区域,那吞吐量会提高许多倍。

这就是「分片(sharding)」背后的理念,是由以太坊 V 神和其他科研人员提出来的。将一个区块链分成许多不同的「片」,每个「片」都可以独立处理交易。分片一般是指 layer1 的扩容方案,因为它是在以太坊的基层协议上实现的。

2) 如果为以太坊建立协议层网络呢?

第二种选择和第一种恰恰相反:与其增加以太坊自身的处理能力,不如在现有的基础之上采取措施。在以太坊区块链基本层的吞吐量不变的基础上,尝试执行更多操作,比如交易、状态更新或简单的计算。

这就是「链下」技术背后的原理,具体的技术包括状态通道,Plasma,Truebit。虽然每一种技术旨在解决不同问题,但它们都需要在保证安全性的前提下,进行「链下」操作。

这也被称作 layer2,因为它们是建立在以太坊主链之上的,不需要在基础层上进行改变,相反,只是作为与链下软件交互的智能合约存在的。

02 Layer2 是加密经济学解决方案

在深入解释 layer2 解决方案前,我们先来了解一下其背后的原理。

公链的基本力量在于加密经济共识。

通过仔细调整激励措施,并将其与软件和密码学结合,我们能够通过网络对系统内部达成共识。这也是中本聪白皮书中提到的重点,这点现在已经被应用到许多不同的公链中,包括比特币和以太坊。

加密经济共识给了我们一个确定性内核——除非发生像 51% 攻击这样极端事件,否则所有操作(包括支付,或者智能合约)都将按书写程序执行。

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

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

加密经济学的起源并不是中本聪的白皮书,但这同样不是终点——这是我们正在尝试应用的技术。不仅在核心协议的设计上,也体现在旨在扩展底层链功能的 layer2 的设计中。

03 通道状态特点和限制

状态通道(State channels)

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

很多读者对支付通道都很熟悉,这个同店已经出现了许多年,最近也在通过闪电网络(lightning network)在比特币上实施。状态通道是支付通道更为普遍的形式——它们不仅可以处理支付,也可以处理区块链的「状态更新」——就像智能合约的更改。状态通道于 2015 年由 Jeff Coleman 率先提出。

通过一个案例我们可以更好理解状态通道的工作方法。这依然是一个概念性的解释,我们不会进入特定的技术细节。

比如说 Alice 和 Bob 正在玩三子棋游戏(tic tac toe),赢家可以获得 1ETH 作为奖励。最简单的办法,就是在以太坊上创建一个智能合约,将三子棋游戏的规则写入智能合约内,并追踪每一名玩家棋子的移动轨迹。每次玩家移动棋子时,就发送给合约一次。当一个玩家胜出时,合约将支付 1ETH 给胜出者。

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

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

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

随后,Alice 和 Bob 开始互动。Alice 开始走第一步,签名后发送给 Bob,Bob 也会签名,并将自己签名后的版本发回,自己保存一份副本。然后往复操作,每次他们都会更新自己的状态。每次互动都会包含一次「nonce」,以便于按时间给每次互动排序。

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

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

为什么需要这个等待时间?

假设 Bob 上传的不是最终版本,而是他胜利那个版本。但是合约只会执行指令,无法知道哪一个是最终版本。这个时候,设置一段等待时间,可以让 Alice 提供证据证明自己提供的是最终版本。

Alice 提交双方签名的交易副本,合约通过的 nonce 确定 Alice 提交的才是最终版本,驳回 Bob 的请求。

特点和限制

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

l 状态通道依赖可用性。如果 Alice 在过程中断网了(假设是由于 Bob 迫切想要获得奖金,而破坏了 Alice 家的网),那么她可能无法及时提交状态信息。但尽管如此,Alice 可以付钱让其他人保存她的交易状态,并作为她的代表,维持数据的可用性。

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

l 状态通道适用于那些拥有固定用户的应用程序。因为合约必须知道通道内的所有实体(地址)。虽然可以对人员进行增加或者移除,但这都需要在合同上进行更改。

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

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

在 L4,我们正在构建一个 Counterfactual:一个基于以太坊的状态通道框架。我们通用的、模块化的模板将允许开发人员在其应用程序中使用状态通道,不需要自己去研究状态通道。

另一个值得关注的状态通道项目是 Raiden,该项目的目标是建立一个支付渠道,使用与闪电网络类似的模式。这意味着,不仅仅只能与特定人员开设通道,你还可以与一个较大的频道网络开设通道,使你可以与同一频道内的所有成员交易,并无需手续费。

除了 Counterfactual,Raiden 之外,还有几个基于以太坊的的应用程序。例如,Funfair 为了它们的去中心化平台建立的状态通道(「Fate channels」),Spankchain 为成年演员建立了单向支付通道(他们也为 ICO 创建状态通道),Horizon Gamesis 为他们的第一款以太坊游戏创建了状态通道。

04 Plasma—创造子链扩大吞吐量

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

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

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

同样的,我们通过一个例子来理解 Plasma 是如何运作的。

比如说,你在以太坊上制作了一款卡片交易的游戏。这些卡片就是 ERC721 资产(与 Cryptokitties 类似),但它们具有某些特性和属性,让用户可以通过其对战和博弈——类似《炉石传说》(Hearthstone)。在链上执行这些复杂的操作是很昂贵的,所以使用 Plasma 是很好的选择。

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

然后,我们创造我们的子链。子链可以有自己的一套共识机制——在这个案例中就是授权证明(PoA),这是一种依赖可信任的区块生产者的共识机制。区块生产者类似于工作量证明中的矿工——它们是接受交易、生成区块、收取交易费的节点。打个简单的比方,假设你(即制作游戏的公司)是生成区块的唯一实体——也就是说,你的公司运行几个节点,这些节点是我们子链的区块生产者。

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

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

在游戏过程中,游戏用户其实只是与我们的子链交互。他们可以持有资产(ERC 721 token),与以太交易,与其他用户游戏,但完全不用与主链直接互动。因为只有少量节点需要处理交易,交易费用会低很多,操作速度也会更快。

但这怎么确保安全呢?

很明显,将更多主链上的操作转移到子链上,整个区块链网络可以处理更多交易。但是要怎么保障它的安全呢?在子链上发生的交易是最终的吗?毕竟,我们刚刚还说,会有一个实体公司控制区块的生成。这不就是中心化吗?这个公司能随时盗走你的资金或者游戏卡吗?

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

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

首先,想象一下,一个区块生产者会怎样欺骗你:通过创建一个假的新区块来控制你的资金。他们是唯一有权力生成区块的,因而他们可以不按照区块链的法则来创建区块。与其他区块一样,他们也会公布一份包含该区块证据的 Plasma Root 契约的承诺。

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

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

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

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

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

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

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

我们已经解释了状态通道和 Plasma,有必要将两者做一个比较。

l 一个不同之处是,当同一通道内的所有用户都同意退出时,状态通道可以即时退出。比如说,如果 Alice 和 Bob 都同意关闭一个通道,并取回他们的资金,他们就可以立即拿回资产。这在 Plasma 上是不可能的,在 Plasma 中,用户必须等待一段时间,才能退出。

l 状态通道也比 Plasma 更便宜,更便捷。这意味着我们可以将两者结合起来,在 Plasma 子链上建立状态通道。例如,在一个 app 上,两个用户可以进行系列小额交易。在子链上创建状态通道,比直接在子链上进行交易,会更便宜高效。

l 最后,本文可能遗漏了一些细节。Plasma 还处在早期,你可以看看 V 神最近提出的「最小的可行 Plasma (Minimal Viable plasma)」。还有一个台湾团队也正在做这件事。OmiseGo 也试图将这一技术应用到其交易所上。

05 Truebit—完成繁重链下计算

Truebit 是帮助以太坊完成繁重链下计算的技术。而状态通道和 Plasma 是扩大吞吐量的,所以这是 Truebit 的不同之处。正如我们在文章开头所提到的,以太坊面临的难题不仅仅 1 扩大吞吐量。Truebit 不会提高交易吞吐量,但是它会让基于以太坊的应用程序做更复杂的事情。

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

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

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

首先,解决者往智能合约存入一笔费用,然后,你把需求告知解决者。他进行计算,然后把结果反馈给你。如果计算结果正确,他的押金会被退回。如果计算出错(他出错或作弊),就会损失自己的押金。

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

因为验证游戏是在链上执行的,它不能简单地计算结果 (这将破坏整个系统的目的,因为如果我们能够在链上进行计算,我们就不需要 Truebit)。相反,我们强迫解决者和挑战者确定他们不同意的具体操作。实际上,我们正在努力使双方对结果产生异议。

一旦操作被认定,就足以在以太坊主链上运行。然后,我们通过智能合约来执行细节,该合约一劳永逸地解决了哪一方说实话,哪些是谎言或错误的问题。

06 layer2 的共同内核及其他结论

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

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

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

这些系统将有助于解决以太坊实现大规模全球用户群缩放所涉及到的一些挑战。一些工具,比如状态通道和 Plasma,将增加平台的事务吞吐量。其他的工具,比如 Truebit,将使得有可能将更困难的计算作为智能契约的一部分,从而打开新的用例。

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

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

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

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

目前我们还很难预测来扩展需要哪些功能的进步,在设计以太坊的时候,Plasma 和 Truebit 还没有被发明出来。但由于以太坊是完全可编程的,它几乎能够实现我们发明的任何经济机制。

来源链接:medium.com

—-

编译者/作者:dapdap区块链

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...