以太坊擴容從鏈上到鏈下:狀態通道與Rollups 方案對比

從鏈上到鏈下:狀態通道與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 虛擬機器)的區塊鏈,並且許多人希望它可以克服其可擴展性問題,並保持相同的分配和安全等級。 (登鏈社區)