有條件轉賬——實現L1-L2互操作性的關鍵

  • 主題:StarkEX提出的「有條件轉賬」(Conditional Transaction, CT)方案,實現Layer-1與Layer-2之間的互操作性,核心應用為「快速取款」(Fast Withdrawal)。
  • 關鍵機制
    • 透過「Fact Registry合約」註冊鏈上事件,確保CT僅在特定條件(如L1轉賬完成)觸發後執行。
    • 使用STARK證明批量處理L2交易,若條件未滿足(事實未註冊),整批交易將回滾。
  • 快速取款運作
    • 用戶簽署L2轉賬給流動性提供者(LP)的CT,條件是LP需先在L1完成轉賬。
    • 依賴Fact Registry合約驗證事件(如keccak哈希值註冊),免除用戶等待L2狀態更新的時間(約10分鐘),實現「區塊時間內」取款。
  • 其他應用場景
    • 價格觸發交易(如ETH跌至1010 DAI時自動賣出)。
    • 跨L2條件交易(如DeversiFi與dYdX間的資產互換)。
    • 抵押品聯動(如L2轉賬需綁定L1的DeFi存款)。
  • 現狀:自2020年10月起,此模塊已部署於StarkEx 2.0,支援DeversiFi與dYdX交易所。

(方案原文由StarkWare發表,翻譯:阿劍)

總結

本文意在講解StarkEX 為支持快速取款(Fast Withdrawel)(在一個區塊時間內從Layer-2 中取款到任意Layer-1 地址)而提出的解決方案。本方案的優點在於,其速度完全獨立於L2 的運營者生成有效性證明的速度。

快速取款模塊已經運行在以太坊主網的StarkEx 上(自2020 年10 月StarkEx 2.0 發布始),並且賦能了DeversiFi 交易所和dYdX 交易所。

而下文我們講解的方案除了快速取款以外,還有非常多的使用場景。我們先來了解一下需求是什麼。

需求

區塊鏈使得兩方之間的免信任交互成為可能。 Alice 想發布一筆僅在特定條件滿足時才能執行的交易;Bob 希望在條件滿足時能直接執行Alice 的交易、不必再次獲得Alice 的許可。我們把支持此類交互模式的元件稱作“有條件交易(Conditional Transaction,CT)”。

在L1 上實現CT 不需要什麼奇思妙想,因為智能合約可以保證時間和交易執行的耦合。但如果要求在L2 中實現,那就有些挑戰了。比如,在StarkEx 中,交易發起人簽名之後把交易傳遞給運營者,後者有責任來執行這筆交易,可是你用什麼辦法來阻止運營者在所需條件滿足之前就執行這筆交易呢?

在本文中,我們只聚焦於在L2 上實現依賴於L1 事件(記作L2 | L1)的CT。也就是說,這種CT 要能保證,運營者僅能在某個 鏈上事件 發生之後才能執行某筆簽過名的交易。更進一步,我們將加入一種依賴於另一個L2 中事件(記作L21 | L22 )的CT,從而支持StarkEx 實例之間以及StarkNet 中的互操作性。

下面,我們來形式化這種鏈上事件的概念,看看我們如何在StarkEx 中的CT 如何利用它。

有條件交易簡介

鏈上事件的註冊

CT 使用了Fact Registry 合約來跟踪鏈上事件。實際上,只有在一個Fact Registry 合約中註冊了的事件,才能“解鎖” CT。舉個例子,如果Alice 直接在以太坊鏈上轉賬了1 ETH 給Bob(而不是通過Fact Registry 合約),那CT 是不能因此滿足執行前提的。

在上面這個案例中,Fact Registry 合約需要一個函數 transfer(),Alice 傳入Bob 的地址作為收款方。 transfer() 函數做兩件事:(1)把需要轉移的ETH 發送給收款方;(2)保存對這筆轉賬的記錄,比如存儲這筆轉賬相關參數(發送者、收款方、數額)的哈希值,到合約的存儲項中。 Fact Registry 合約還帶有一個 isValid() 函數,接受一條哈希值作為參數,返回一個布爾值—— 如果該條輸入的哈希值等於合約中記錄的某條哈希值,就返回 True。如此,這個記錄在合約中的哈希值,就可以當成是一個事實(某個事件已經發生)的證明。這個為Fact Registry 合約引入一個新的事實的過程,通常稱為“事實註冊”。

一筆簽過名的CT 所包含的鏈上事件的指紋有兩個字段(實際上是這兩個參數的哈希值):(1)一個Fact Registry 合約的地址;(2)上述合約中應當記錄的事實。

StarkEx 有條件交易

StarkEx 會批量打包Layey-2 中的交易,並使用一條發送到鏈上的STARK 證明來結算這些交易。如果某一批次中包含CT,StarkEx 將保證相關的事實已經註冊,以便能清算該批交易;否則,整批交易都會回滾。

有條件交易的案例

在本部分,我們會提出一些應用場景,並指出CT 如何能用在這些場景中。

詳細案例—— 快速取款

在任意L2 方案中,最初級的從L2 轉出資金到L1 中的辦法便是終局化一次L2 的狀態更新(在該次更新中包含一筆取款交易)。在基於有效性證明的系統(比如StarkEx)中,終局化一次L2 的狀態更新需要在鏈上提交一個相應(於此次更新)的有效性證明,一般來說需要10 分鐘。這就意味著,如果用戶使用這種方式來取款,就不得不等待至少10 分鐘。

而快速取款的用意正是為了解耦這種(取款對L2 狀態更新的)依賴,讓用戶能夠在“區塊時間” 內免信任地將資金取出,也即,就像使用普通的以太坊合約一樣。

那到底是怎麼個流程呢?如果Alice 想要從L2 中取出1 ETH 到L1,Alice 可以在L2 上簽名一條將1 ETH 轉移給流動性提供者(LP)的CT,條件是LP 在L1 上轉移1 ETH(減去一些手續費)給Alice。 Alice 的CT 僅能在她收到L1 上的轉賬之後才能執行,所以她不會面臨對手方風險。

我們來看一個能夠協助CT 的簡易的Fact Registry 合約:

我們可以看到這個合約有一個payabe 函數 transfer(),它的功能有兩個:

(1)轉移一定數量的ETH 到某個地址

(2)登記keccack(amount, address, nonce)

Alice 簽發的CT 只有keccack(1 ETH, Alice, nonce) 在Fact Registry 中註冊之後才能執行。而這個事實,也只有在給Alice 的1 ETH 轉賬發生了之後才能成功註冊。 Alice 可以無需信任地取出1 ETH,整個過程只需她的前面,和LP 在以太坊鏈上發起的一筆交易。

更多應用場景

類似的流程可以捕捉到下列類型的事件,從而L2 的CT 也可以有更多的用途,例如:

如果ETH 的價格跌到了1010 DAI(可以通過一個已知的信息輸入服務在鏈上註冊),Alice 希望在L2 賣出1 ETH,換回在L1 上的1000 DAIAlice 希望在L2 上給Bob 10 ETH,只要Bob 以Alice 的名義在Alice 指定的dApp (比如Aave 或者Compound)中存入9.5 ETHAlice 希望在DeversiFi 的L2 上給Bob 10 ETH,只要Bob 在dYdX 的L2 中給Alice 的賬戶存入9.5 ETH

總結

CT 的第一種用途是快速取款,但StarkEx 運營者可以用這一元件實現許多種類的L2-L1 交互。

(完)

原文鏈接:

https://medium.com/starkware/conditional-transfers-the-key-to-interoperability-2e1de044fb65

作者: StarkWare

翻譯:

阿劍


分享至:

作者:以太坊爱好者

本文為PANews入駐專欄作者的觀點,不代表PANews立場,不承擔法律責任。

文章及觀點也不構成投資意見

圖片來源:以太坊爱好者如有侵權,請聯絡作者刪除。

關注PANews官方賬號,一起穿越牛熊
推薦閱讀
10小時前
11小時前
17小時前
17小時前
20小時前
2026-01-12 04:01

熱門文章

行業要聞
市場熱點
精選讀物

精選專題

App内阅读