时间:2022-03-22|浏览:7234
用戶喜愛的交易所
已有账号登陆后会弹出下载
深入研究以太坊扩容方案的优缺点。
前沿
不管你是不是区块链技术专家,只要你留在那里Crypto世界足够长。以太坊扩容,layer2,Rollup这些词对你来说并不陌生。很多人都知道这些概念中的一个或多个,但它们之间的关系是什么呢?为什么我们需要这些技术?他们想解决什么样的问题?
如果你想知道上述问题的答案,我希望这篇文章能对你有所帮助:
本文的所有内容都是逻辑梳理,不涉及密码学/计算机科学知识,相信只要熟悉以太坊本身,基本就能理解。
正文
自从CryotoKitty从以太坊链拥堵的那一天起,以太坊开发者就在不断探索提高以太坊吞吐量的方案。
原则上可分为两类:
我们称之为以太坊区块本身的改造Layer1这里的主要解决方案是分片。
它是为了改变我们使用以太坊的方式,将交易的执行和处理放在链下。以太坊本身只用于验证交易的有效性和提供安全性。这就是我们经常听到的Layer2。
Layer2核心思想是在链下执行和计算大量实际交易,然后通过以太坊上少量交易验证交易的最终有效性。无论如何State Channel,Plasma还是Rollup,其实都遵循这个原则。
现在谈起Layer2,许多人的第一反应是与之相比Optimistic/ZK Rollup但这里我们简单介绍一下状态通道和Plasma,它帮助我们理解为什么Rollup最终的胜利成为我们目前谈论最多的Layer2解决方案:
一.状态通道
以下是状态通道最原始的结构:
状态通道是一种长期存在的区块链扩展方案,其最著名的应用是比特币闪电网络。
一个例子比描述他的原理更能说清楚什么是状态通道:
你喜欢楼下的理发店。每次去理发店,Tony老师会让你在你耳边办卡。
有一天你终于决定办卡了。反正我以后会来的。于是你把一千块钱转到理发店办了一张卡。
以后每次去理发,你都不需要再向理发店转账,取而代之的是你的卡里的余额会被扣除,同时每次理发你都和理发店完成了一次实际上的交易。
一个月后,你要搬家了,但你卡里的钱还没用完。所以你向理发店申请退卡,理发店Tony老师给了你200元。
这个月,你在理发店花了十几次钱,但实际上你和理发店只转了两次钱。
把这个过程放在区块链上,你买卡的过程实际上是把钱存入智能合同,同时打开你和理发店之间的状态通道。你退卡的过程关闭了你和理发店之间的状态通道。你和理发店之间的相互转账相当于以太坊主链上的两笔交易。
想象一下,如果你没有办卡,你需要在每次理发后把账户转到理发店。
通过这个例子,我们发现,通过状态渠道,只有第一步和最后一步需要我们在区块链上进行交易。在这些步骤之间,你 和 理发店 可以向对方发送无限数的签名信息(完成一次消费),并指示付款。在这种情况下,以太坊区块链性付款的最终交易,这大大减轻了底层区块链的负担。
应用场景
(1)状态通道在某些简单场景如流支付中能够发挥很大的作用,其通过在链下对消息签名的方式对交易数据进行记录,将大量在逻辑上发生了的交易简化成了主链上的两笔交易。
(2)由于其成本低,状态通道非常适合一些微支付场景,如使用ETH或者BTC买早餐咖啡等。
局限性
但与此同时,状态渠道要求资金的发送人和接受人进入这个渠道。为了维护状态渠道,支持比流动支付更复杂的操作,需要锁定大量资金。因此,开发人员很快意识到状态渠道不能作为可选的扩展方案之一。
二:Plasma
1:原理
现在我们都知道状态通道的局限性,为了解决这个问题 - Plasma出现在历史时刻。它解决了将资产发送给任何目标人的问题,并确保它TPS改进。事实上,开发者研究Layer2解决方案长期开始,Plasma曾经被认为是 一。
要理解Plasma,首先要明白,它不是一种实用的技术,更像是一种设计理念或技术架构。
Plasma它通常是一条链,可以有不同于主链的共识机制,也可以有自己的矿工。但最重要的是Plasma链条上会有一个叫的名字Operator角色定期根据子链上的状态转换生成默克尔树,并将默克尔树的根哈希值提交给主链进行验证和记录。我们还将使用默克尔树及其根哈希值作为状态转换的验证Rollup中讲到。
这样,无论子链在两次提交过程中发生了多少笔交易,子链只需将交易执行引起的状态信息提交给主链。
以下是使用Plasma机制的简单示意图:
用户想要进入Plasma链需要在以太坊主链上映射资产,当它需要时Plasma当链上的资产转移或主链上的资产转移需要经历一段挑战期供他人使用「 欺诈证明 」确认资产转移有效性的机制。
「 欺诈证明 」这意味着任何人都可以通过默克尔树(通常是7天或更长时间)内通过默克尔树验证提交用户资产退出是非法的。
但有两个问题:
(1)要验证提款的正确性,需要节点保存Layer2交易和状态信息,因为Plasma只提交状态转移的结果,必须提交欺诈证明Layer2上述信息将大大提高 验证者 角色的成本。
(2)所谓 「 数据不可用」,他的意思是Plasma不会将其链上发生的交易数据发给主链进行存储,主链的节点无法获取到这些交易数据,无法通过主链本身的安全性为其做验证。当然有些解决方案会把这些数据提交到中心化存储或者IPFS但这对主链没有意义,因为用户使用它Layer2基础是信任主链本身的安全。
三:Rollup
我们Plasma一个非常重要的问题是他的 数据不可用Operator提交的状态转移结果只能期望有人在链下存储交易和状态信息,并通过欺诈认证机制确保子链提交的真实性。在此过程中,它只扮演确认者的角色,其安全水平较差。
1.具体理解数据不可用
以太坊公开了链上发生的所有数据,大家都可以查询。Plasma这些交易数据不会提交到主链,只会提交执行结果,所以效率提高很高,但成本是Plasma无法建立与以太坊主链同级别的信任。
Rollup其实可以算是原主链处理方法和Plasma这种方式的妥协将向主链提交数据,但他将通过聪明的编码将数据压缩到最大程度,同时基于Rollup只要最终提交能够被任何人验证,适当地删除和减少部分数据本身的特征。
交易数据上链后,任何人都可以根据这些数据进行验证Rollup提交的结果是否正确。Rollup比Plasma高。
总结一下,Rollup其核心优势是所谓的数据可用性
那么究竟Rollup它是如何实现的?
2.原理
(1) State Root:首先Rollup主链上有一份(或一系列相互关联)合同:
该合同用于维护Rollup层中的状态记录实际上是默克尔树根节点存储的哈希值,称为哈希值state root。
默克尔树的叶节点是Rollup账户状态信息。如果您不知道默克尔树是什么,以下是一个简单的例子:
可见这是一棵二叉树,目前记录在二叉树的叶节点上rollup层账户状态信息。
对于每两个状态信息(例如State 1/State 2)我们可以根据哈希公式计算出唯一的哈希值(eg: Hash(1,2) )作为这两个叶节点的父亲节点,一层一层地向上类推,最后在根节点中存储一个哈希值:
你不需要知道如何计算哈希值,你只需要记住几件事。
1 任何叶结点的变化都会导致根节点值的变化(任何状态的变化都会导致根节点值的变化)Root hash发生变化)
2 如果两棵树的根哈希值相同,则表明叶结点存储的信息完全相同(因此,底部状态信息的一致性只能通过比较两个根节点来确认)
3 根据节点的哈希值和指向某一状态信息的路径,我们可以确认这棵哈希树中存在某一状态信息。
(2)Batch:通过 state root 我们可以得到一个账户状态key-value map:
其中key帐户地址,value包括余额/Nonce/合同代码/存储状态信息(合同账户)
当rollup交易发生时,很明显,这些账户的状态会发生变化,从而产生新的state root。
虽然这可以是非常准确和及时的反馈Rollup最新状态变化,但如果每笔交易都在主链上更新state root,成本将比这些交易更高Layer1执行更高。
所以为了解决这个问题,rollup中产生的交易将分批打包汇总,并根据所有交易完成后的状态产生新的交易state root。无论谁将交易打包并提交给主链上的智能合同,他都需要计算这个新合同state root,和上一个state root并提交交易数据。
这部分的包装被称为一batch,提交人将batch提交给Rollup contract之后,主链验证新的state root是否正确,如果是否正确state root最新提交的更新state root,最后完成一次rollup确认内部状态转移。
(3)Rollup :以下是简化版Optimstic Rollup过程,可以看到和Plasma事实上,最大的区别交易数据的提交。
所以,Rollup本质是将大量实际交易汇总成主链上的交易,这些交易是由Rollup链实施和计算,但数据将提交给主链,主链扮演最高法院法官的角色,最终确认这些交易。因此,我们利用主链的共识和安全性,提高实际交易效率,降低交易成本。
3:疑惑
看完以上描述,你可能会有一些问题。别担心,我们会一步一步地推断和解释。
(1)如果提交了大量的交易数据,扩展容量还是很困难的。上述数据压缩是否解决了这个问题?怎么做?
这两种技术方案的核心是交易的压缩和包装。这是因为以太坊的块 gas limit 有上限。压缩交易越小,一次可以提交给主链的交易就越多。那么如何做到这一点呢?
以下是Vitalik文章中描述的压缩模式作为例子帮助我们理解
以太坊主链上的简单交易(如发送 ETH)通常消耗大约110 字节。然而, Rollup 上发送 ETH 字节可缩减至12 左右。