20
已解决

rollup扩容是什么

吴超人会飞 副船长 发布在 问答/互助
 5336  1

rollup扩容是什么?主要有什么作用?

最佳答案
青灯有味海盗王
2021-03-25 16:56:45
楼层直达
Rollups,则是一种「混合型」的以太坊二层网络的解决方案。Rollups 将计算 (以及状态存储) 移至链下,但将每笔交易的一些数据放在链上。为了提高效率,这类方案借助了许多复杂的压缩技巧以尽可能使用计算替代数据。结果是系统的扩容性仍然受到底层区块链的数据带宽限制,但比较来看仍十分有利:以太坊基础层 ERC20 通证的转移成本约为 45000 gas,而 Rollup 中的 ERC20 通证仅转移占用 16 字节的链上空间,成本不到 300 gas。数据在链上这一点很关键 (请注意:将数据「放在 IPFS 上」是行不通的,因为 IPFS 不能就任何给定的数据是否可用提供共识;数据必须被记录在链上)。将数据放在链上并对此达成共识,使得任何人都可以根据需要在本地处理 Rollup 中的所有操作,从而允许其对欺诈进行监测、发起提款或亲自开始批量生成交易。缺乏数据可用性意味着一名恶意的或是离线的运营者能够产生的影响甚至会更小 (例如他们无法造成一周的延迟),从而为有权发布批量交易的人打开更大的设计空间,并使 Rollup 更容易有理可循。更重要的是,缺乏数据可用性意味着不再需要映射资产到所有者,从而我们能得出以太坊社区相较之前的二层扩容方案对 Rollups 更加期待的关键原因之一:Rollups 是完全通用的,我们甚至还可以在 Rollup 内部运行 EVM,使得既有的以太坊应用几乎不需要编写新代码就能迁移到 Rollups 上。Rollup 的原理到底是什么?在链上存在一份智能合约,其中包含一个状态根,即 Rollup 状态的默克尔根 (也就是 Rollup 内部的账户余额、合约代码等等)。任何人都可以发布一批汇总交易(batch),这是一个经由高度压缩的交易集合,其中包含之前的状态根和新状态根 (处理交易之后的新默克尔根)。该合约会检查 batch 中的旧状态根是否匹配其当前的状态根,如果匹配的话,合约会对状态根进行更新。为了支持存款和提款,我们增加了输入和输出在 Rollup 状态「外部」的交易的功能。如果一个 batch 中包含来自外部的输入,则提交到该 batch 的交易也需要将资产转移到 Rollup 合约。如果一个 batch 中包含来自外部的输出,则智能合约在处理该 batch 时会发起提款。这就是 Rollup 的工作原理了。但还有一个重要细节:如何得知 batches 里的后状态根 (post-state root) 是正确的呢?如果某人能够提交一个具备任意后状态根的 batch,而无需承担任何后果,他们完全可以将 Rollup 中的所有代币都转移给自己。这个问题很关键,因为由此诞生了两种不同的解决方案,这两种解决方案又衍生出了两种不同的 Rollups。Optimistic Rollups 与 ZK Rollups这两种 Rollups 为:Optimistic Rollups,其解决方案为欺诈证明 (fraud proofs):这类 Rollup 会追踪所有历史状态根以及每个 batch 的哈希值。如果任何人发现某个 batch 的后状态根不正确,他可以向区块链发布一个证明,证明该 batch 计算错误。合约会对证明进行验证,并且对该 batch 及其之后的 batches 进行回滚。ZK Rollups,其解决方案为有效性证明 (validity proofs):每个 batch 都包含一个称作 ZK-SNARK 的密码学证明 (例如使用 PLONK 协议),以证明后状态根是正确执行 batch 的结果。无论计算量有多大,该证明都能在链上得到极速验证。这两种 Rollup 之间存在复杂的权衡:总的来说,在短期内,Optimistic Rollup 的显著优势在于其通用的 EVM 计算,而 ZK Rollup 更可能被用于支付、交易和其他特定用例。但中长期来看,随着 ZK-SNARK 技术的成熟,ZK Rollup 会在所有用例中发挥出优势。