以太坊扩容从链上到链下:状态通道和Rollups 方案对比

本文介绍了以太坊Layer2扩展方案,包括状态通道和Roll-ups技术,Roll-ups又分为Optimistic Roll-ups和Zero-knowledge rollups(zk-Rollups),以及Side chains。文章对比了各种方案的原理、特点和优缺点,并分析了各自的应用场景。

从链上到链下:状态通道和 Rollup

Ethereum 是有史以来最令人惊叹的计算基础设施,但它需要在扩展方面提供一些帮助

在不久的将来,我们需要意识到我们正在运行一个传统的金融世界,并且我们需要构建一个更值得信赖的数字基础设施。事实上,我们需要转型的不仅仅是金融,而是任何需要高度信任、安全和分布的领域。为此,我们可以使用像 Ethereum 这样的 Layer-1 区块链方法,但它已经显示出扩展问题,即主账本和计算基础设施无法处理每秒超过 15-30 笔交易。

但是,现在正在应用新的方法来减轻 Ethereum 的负载,同时保持可信度和分布性。这些包括用于共享的 Layer 1 实现以及向权益证明 (PoS) 的过渡。然而,最有趣的进展发生在 Layer 2 方法中,这些方法建立在核心 Ethereum 网络(Mainnet)之上。

Layer 2:状态通道

状态通道 最初是在 Bitcoin Lightning 网络中实现的,此后已在 Ethereum 上扩展。通过这种方式,我们基本上在 Mainnet 账本上有两条记录,相关方必须承诺一些可能或可能不会被花费的资金。例如,假设 Bob 想要创建一个侧通道来支付他的客户,并将承诺 10 Eth。然后他将创建一个通道合约。承诺的 Ether 将在通道期间被锁定,并且无法花费。然后 Bob 可以给 Alice 2 Eth,给 Carol 3 Eth。一旦他完成这些,他会将完成的交易提交回去,Bob 将获得 5 Eth 的返还,Alice 将获得 2 Eth,Carol 将获得 3 Eth。最后,Bob 只发布摘要数据,并且只需为对账本的两次承诺支付 gas 费用。状态通道的实现由 Polygon 提供,Polygon 实现了完整的 EVM 兼容性和低交易费用。一个例子来自 这里

pragma solidity ^0.7.0;

contract PaymentChannel {
    address public sender;
    address public receiver;
    uint256 public expiration;
    uint256 public amount;

    constructor(
        address _receiver,
        uint256 _amount,
        uint256 _expiration
    ) payable {
        sender = msg.sender;
        receiver = _receiver;
        amount = _amount;
        expiration = block.timestamp + _expiration;
    }

    function close(uint256 _payment) public {
        require(
            msg.sender == receiver,
            "Only the receiver can close the channel"
        );
        require(
            _payment <= amount,
            "Payment amount exceeds amount in the channel"
        );
        selfdestruct(receiver);
    }

    function extendExpiration(uint256 _expiration) public {
        require(
            msg.sender == sender,
            "Only the sender can extend the expiration"
        );
        require(
            _expiration > expiration,
            "Expiration must be set to a longer time than the current expiration"
        );
        expiration = _expiration;
    }
}

Layer 2:Rollup

扩展 Ethereum 的最佳机制之一是通过 Rollup 和侧链将交易转移到链下。

乐观 Rollup

这些在链下处理交易,并假设交易是有效的(基本上是一种“信任并验证”的方法)。它们仅在交易中存在争议时才占用 Mainnet 上的计算资源。因此,在交易实际确认到 Mainnet 上之前,需要一个“挑战期”延迟。

对于 Arbitrum,欺诈观察者会分析交易,如果识别出欺诈交易,观察者会将欺诈证明发布到 Mainnet。事实上,Arbitrum 可以识别与欺诈分析相关的代码行,然后将其发布到 Mainnet。然后,Mainnet 可以裁决该欺诈证明,并决定是否执行所需的代码。对于 Arbitrum,有一个为期七天的提款期 [这里]。

Optimism 也使用链下方法和乐观 Rollup,并假设交易是有效的。它使用观察者(或验证者)来确定是否存在欺诈交易,并且可以提交欺诈证明,并且可以删除该交易。观察者将因发现欺诈交易而获得奖励。总的来说,挑战大约有七天的延迟,如果发现欺诈证明是正确的,则交易将被撤销[这里]:

零知识 Rollup (zk-Rollups)

这些将计算和状态存储转移到链下,并涉及一种无需信任的方法。一旦发布回 Mainnet,状态更改和与之相关的证明所需的更新将非常少。由于我们的证明以压缩形式存在,因此我们可以快速验证更新的交易,同时支持交易的隐私。这样,与需要数天才能提交的乐观 Rollup 不同,使用 zk-Rollups(基于 zkSnarks),我们只需要大约一个小时来验证证明。这确保了没有双重支出,并且所有交易都是有偿付能力的。一个例子是 ZKsync [这里]:

对于 zk-Rollups,存在交易有效性的密码学证明,然后它们链接到 Mainnet。因此,执行欺诈交易将非常困难。对于乐观 Rollup,缺乏密码学证明,因此在提交回 Mainnet 之前,需要延迟,以便可以检测到欺诈交易。

侧链

这是一个独立的侧链,是一个与 Mainnet 桥接的单独区块链。与 Rollup 方法不同,更新后的交易可以在需要时回显到 Mainnet 上。总的来说,它们有自己的区块链和自己的共识机制,例如权威证明 (PoA)。Polygon 是侧链基础设施的一个例子。侧通道的总体弱点是它们可能具有与主 Ethereum 网络不同的安全模型 [这里]:

结论

对我来说,离线链中的零知识证明是最好的解决方案,因为它可以快速验证主链上的交易,并保持交易者的隐私。我们还可以在 ZKP 中使用选择性披露,这对于揭示重要信息(例如某人是否有权访问资源)非常有用。

使用乐观的 Rollup,我们假设交易是有效的,除非另有证明,并且我们需要一个挑战期才能在最终确定之前对交易提出质疑。使用 zk-Rollups,我们的交易将是有效的,因为有与此相关的证明,并且我们可以快速提交给 Mainnet。不幸的是,zk-Rollups 需要对密码学和区块链有深入的了解,这可能会减慢开发速度。

显然,Ethereum 并不是唯一的选择,Polygon [这里]、Solana [这里]、Cardano [这里] 和 Polkadot [这里] 正在提供比 Ethereum 扩展性更好的替代方案。但是,我们喜欢为我们带来智能合约和 EVM(Ethereum 虚拟机)的区块链,并且许多人希望它可以克服其可扩展性问题,并保持相同的分配和安全级别。

  • 原文链接: medium.com/asecuritysite...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
asecuritysite
asecuritysite
江湖只有他的大名,没有他的介绍。