DeFi Hooks 革命的進階之旅:從 Uniswap V4 合約安全到 Artela 原生協議

中級5/21/2024, 3:41:36 PM
本文解釋Hooks編程模式的概念,即通過預定義的函數或代碼塊允許開發者在系統、應用程序或庫的執行路徑中插入自定義代碼,提高了程序的可擴展性和可定制性。Uniswap V4引入了Hooks,通過Hooks可以實現諸如動態費用、鏈上限價單和時間加權平均做市商等功能,增強了DApp的功能和Uniswap的網路效應。

什麼是 Hooks

Hooks,即 Hook 編程(Hook Programming),是一種編程模式,其中通過 Hook,也就是預定義的函數或代碼塊,允許開發者在一個系統、應用程序或庫的執行路徑中插入自定義代碼,而不需要修改原本的代碼。Hooks 經常被用於許多編程環境和框架中,例如操作系統、框架和庫、Web開發、以及插件系統。

通過使用 Hooks,開發者可以增加程序的可擴展性和可定制性,不必爲了每一個變化或拓展需求去修改原有的代碼,有助於保持代碼的清潔和穩固。Hooks 爲軟件的擴展提供了一種優雅的實現方式,是軟件設計中一種非常有用的編程模型。

特別的,AOP(Aspect-oriented Programming, 面向切面編程)經常和 Hook 編程拿來比較,AOP 是實現橫切關注點(cross-cutting concerns)的模塊化的編程範式,目標也是在不更改主要業務邏輯的情況下增強或修改功能。這裏不詳細展開 AOP,可以簡單認爲 AOP 是一種抽象層次更高的 HooK 編程。

Uniswap V4:Hooks 革命

2023 年 6 月,Uniswap 宣布並公開了 Uniswap V4 白皮書的草稿版本,Uniswap V4 的一個重要特性是引入了 Hooks。

其實,Hooks 在 Web2 的金融系統中已經有着廣泛的應用,因爲這些系統通常需要高度的定制化和可擴展性。定制化的場景例如在處理交易時,通過 Hooks 在交易執行前後插入額外的驗證邏輯,如二次驗證、風控檢測和反洗錢(AML)策略。可擴展性的場景例如通過 Hooks 與外部 API 或微服務集成,在金融系統中拓展新的功能,如身分驗證服務、匯率轉換、支付網關等。但將 Hooks 引入 DeFi,Uniswap 還是創下了先河。

Uniswap V4 Hooks 本質是一個由開發者創建和定義的外部合約,流動性池被創建時可以選擇綁定一個 Hook 合約。之後,流動性池會在生命週期的不同階段調用之前綁定的 Hook 合約執行指定的操作,提供了高度的自定義性。開發者可以基於 Uniswap 的 Hooks 滿足更個性化的交易場景,並構建出功能更豐富的 DApp,例如:

  • 動態費用:通過 Hooks,流動性池可以根據市場波動性或其他輸入參數動態調整費用,以更好地適應市場情況;
  • 鏈上限價單(On-chain Limit Orders):Hooks 可以實現在鏈上創建和執行限價訂單,使用戶能夠以指定價格進行交易;
  • 時間加權平均做市商 (TWAMM):利用 Hooks 機制創建支持 TWAMM 策略的流動性池,以在一段時間內平均分散大額訂單的交易。

目前 Uniswap V4 支持四組 Hook 回調,每組包含一對回調:

  • beforeInitialize/afterInitialize:初始化流動性池;
  • beforeModifyPosition/afterModifyPosition :添加/減少/移除流動性;
  • beforeSwap/afterSwap :交換;
  • beforeDonate/afterDonate :捐贈(Uniswap V4 引入的新功能,給予位於交易範圍內的流動性提供者小費)。

下圖是白皮書中展示的 beforeSwap/afterSwap Hook 的流程,可以看到在執行交換的前後,會先檢查流動性池對應的 Hook 是否開啓了相應的 flag,如果開啓了,才會調用 Hook 合約的相應函數。

這些 Hooks 可以在交易開始開始前和交易結束後執行,從而實現類似於鏈上限價訂單的功能。用戶在 Hook 合約上下限價訂單,隨後在 afterSwap 的回調裏根據自定義或托管預言機判斷價格是否滿足這個限價,如果滿足,就執行交易,如果不滿足,就取消交易。

Uniswap V4 通過 Hooks 將流動性與 DApp 自身的發展深度綁定,增強 DApp 功能的同時也增強了 Uniswap 的網路效應,使其成爲整個 DeFi 生態系統的底層基礎設施。

Uniswap V4 Hooks 的安全問題

BlockSec 團隊曾經探究過 Uniswap V4 中 Hooks 機制的安全風險,除了 Hook 合約本身就是惡意的外,良性的 Hook 合約也極其容易存在漏洞。BlockSec 團隊分析了Awesome Uniswap v4 Hooks 倉庫(提交哈希爲 3a0a444922f26605ec27a41929f3ced924af6075),並發現倉庫中超過30%的項目存在漏洞。這些漏洞主要源於 Hook、PoolManager 以及外部第三方之間的風險交互,主要可以分爲兩類:

  • 訪問控制問題:主要關注的是 Uniswap V4 中的回調函數,這些函數應該只能被 PoolManager 調用,不能被其他地址(包括 EOA 和合約)調用。例如,在獎勵由資金池密鑰分發的情況下,如果相應的函數可以由任意帳戶調用,那麼獎勵可能會被錯誤地領取。因此,對於 Hook 來說,建立強大的訪問控制機制是至關重要的,尤其是它們可以被除了池子本身之外的其他方調用;
  • 輸入驗證問題:由於在一些易受攻擊的 Hook 實現中輸入驗證不當而導致的各種類型的攻擊,包括我們熟知的重入攻擊。最常見的情況是在某些關鍵 Hook 函數裏調用了不受信任的外部合約,爲了攻擊這些易受攻擊的 Hook,攻擊者可以爲自己的虛假代幣註冊一個惡意資金池,然後調用 Hook 在資金池執行操作。在與資金池交互時,惡意代幣邏輯劫持控制流以便進行不良行爲。

即使適當執行對敏感的外部/公共函數的必要訪問控制,並對輸入參數進行驗證,降低了以上兩類 Hook 相關的安全風險,但合約漏洞本身還是無法完全規避的,特別是 Hook 如果作爲可升級合約實現的,那麼還可能會遇到類似於 OpenZeppelin 的 UUPSUpgradeable 漏洞的相關問題。

究其原因,還是因爲 Hook 編程會增加智能合約的復雜度,從而加大攻擊向量。對於普通智能合約,OpenZeppelin 會有系列最佳實踐類庫,讓基於它開發出來的合約是安全的,但它本質上還是給開發者添加了“安全使用約束”。而 Hook 合約與普通合約相比,需要更嚴格的“安全使用約束”。因此,Hook 編程要廣泛應用,還需要一個全面的框架:需要有安全執行環境、適用 Hook 的編程範式,和更嚴格的使用約束。

Artela Aspect:協議級支持 Hook 編程

Uniswap V4 Hooks 是通過智能合約實現的,它的安全性問題也是由於智能合約的局限性帶來的,那有沒有一種從協議級別支持 Hook 編程的方案呢?Artela Aspect 給了我們答案!

Artela 是一個高擴展性高性能的 EVM 兼容 Layer 1 區塊鏈網路,專爲開發人員構建模塊化、功能豐富、可擴展且可定制的應用程序。Artela 中定義了一個新的可編程模塊作爲原生擴展,稱爲 Aspect,創新性地把 AOP 引入到了區塊鏈網路中。Aspect 需要指定連接點,即在整個交易處理生命週期中執行 Aspect 的位置,類似於 Hook 的回調,連接點包括:

  • Block Init:區塊初始化;
  • Transaction Verification:交易驗證;
  • Pre Execute:執行前;
  • Post Execute:執行後;
  • Block Finalize:區塊最終確定。

Aspect 目前只支持 Typescripts,其代碼被編譯爲 WebAssembly (WASM) 字節碼並部署到 Artela 網路。Aspect 部署完成後,智能合約所有者可以將合約與 Aspect 綁定。智能合約所有者是指其外部帳戶(EOA)地址能夠通過智能合約isOwner(address) returns (bool)的檢查。

隨後,調用智能合約的後續交易將由 Aspect 處理,如下圖所示:

Artela Aspects 作爲協議級別的 Hooks 實現,相比於 Uniswap V4 Hooks 有非常大的優勢:

首先 Artela Aspects 使用 WASM 執行其代碼,執行效率比 EVM 高出幾個數量級;

其次,Artela Aspects 可以 Hook 整個交易的生命週期,而不只是 DeFi 核心邏輯,可以構建功能更豐富的 DApp;

最後,也是最重要的,Artela Aspects 獨立運行在一個安全的沙盒環境中,這種隔離可確保 Aspects 的執行不會影響到合約執行的安全性。

Artela Aspects 的隔離性限制了 Hook 合約作爲一個普通合約與外部其他合約間的相互調用,解決了 Uniswap V4 Hooks 訪問控制和輸入驗證的痛點。對於類似 Uniswap 這樣的 DeFi 合約部署到 Artela 可以享受到更快更強更安全的 Hook 體驗。

總結

Uniswap 作爲 DeFi 行業的重要參與者和領導者,在推動行業進步和完善功能方面發揮了至關重要的作用,此次 Uniswap V4 引入的 Hooks,毫無疑問也會引領 DEX 的發展方向,被後繼者爭相模仿。

但 Uniswap V4 Hooks 受限於智能合約本身的局限性,無論協議上設計得多牢固,工具庫做的多完善,也無法從根源上阻止 Hook 合約和外部其他合約之間的相互調用,存在潛在的安全漏洞。

Artela 作爲一個高性能 EVM 兼容 Layer 1 區塊鏈網路,從一開始的協議上,就設計了獨立運行於 WASM 中的 Aspect 來原生支持 Hooks 編程,極大提升了安全性。這給將安全視爲生命的 DeFi 協議提供了一個進階的解決方案。

聲明:

  1. 本文轉載自[小豬Web3],著作權歸屬原作者[web3朱大膽],如對轉載有異議,請聯系Gate Learn團隊,團隊會根據相關流程盡速處理。

  2. 免責聲明:本文所表達的觀點和意見僅代表作者個人觀點,不構成任何投資建議。

  3. 文章其他語言版本由Gate Learn團隊翻譯, 在未提及Gate.io的情況下不得復制、傳播或抄襲經翻譯文章。

DeFi Hooks 革命的進階之旅:從 Uniswap V4 合約安全到 Artela 原生協議

中級5/21/2024, 3:41:36 PM
本文解釋Hooks編程模式的概念,即通過預定義的函數或代碼塊允許開發者在系統、應用程序或庫的執行路徑中插入自定義代碼,提高了程序的可擴展性和可定制性。Uniswap V4引入了Hooks,通過Hooks可以實現諸如動態費用、鏈上限價單和時間加權平均做市商等功能,增強了DApp的功能和Uniswap的網路效應。

什麼是 Hooks

Hooks,即 Hook 編程(Hook Programming),是一種編程模式,其中通過 Hook,也就是預定義的函數或代碼塊,允許開發者在一個系統、應用程序或庫的執行路徑中插入自定義代碼,而不需要修改原本的代碼。Hooks 經常被用於許多編程環境和框架中,例如操作系統、框架和庫、Web開發、以及插件系統。

通過使用 Hooks,開發者可以增加程序的可擴展性和可定制性,不必爲了每一個變化或拓展需求去修改原有的代碼,有助於保持代碼的清潔和穩固。Hooks 爲軟件的擴展提供了一種優雅的實現方式,是軟件設計中一種非常有用的編程模型。

特別的,AOP(Aspect-oriented Programming, 面向切面編程)經常和 Hook 編程拿來比較,AOP 是實現橫切關注點(cross-cutting concerns)的模塊化的編程範式,目標也是在不更改主要業務邏輯的情況下增強或修改功能。這裏不詳細展開 AOP,可以簡單認爲 AOP 是一種抽象層次更高的 HooK 編程。

Uniswap V4:Hooks 革命

2023 年 6 月,Uniswap 宣布並公開了 Uniswap V4 白皮書的草稿版本,Uniswap V4 的一個重要特性是引入了 Hooks。

其實,Hooks 在 Web2 的金融系統中已經有着廣泛的應用,因爲這些系統通常需要高度的定制化和可擴展性。定制化的場景例如在處理交易時,通過 Hooks 在交易執行前後插入額外的驗證邏輯,如二次驗證、風控檢測和反洗錢(AML)策略。可擴展性的場景例如通過 Hooks 與外部 API 或微服務集成,在金融系統中拓展新的功能,如身分驗證服務、匯率轉換、支付網關等。但將 Hooks 引入 DeFi,Uniswap 還是創下了先河。

Uniswap V4 Hooks 本質是一個由開發者創建和定義的外部合約,流動性池被創建時可以選擇綁定一個 Hook 合約。之後,流動性池會在生命週期的不同階段調用之前綁定的 Hook 合約執行指定的操作,提供了高度的自定義性。開發者可以基於 Uniswap 的 Hooks 滿足更個性化的交易場景,並構建出功能更豐富的 DApp,例如:

  • 動態費用:通過 Hooks,流動性池可以根據市場波動性或其他輸入參數動態調整費用,以更好地適應市場情況;
  • 鏈上限價單(On-chain Limit Orders):Hooks 可以實現在鏈上創建和執行限價訂單,使用戶能夠以指定價格進行交易;
  • 時間加權平均做市商 (TWAMM):利用 Hooks 機制創建支持 TWAMM 策略的流動性池,以在一段時間內平均分散大額訂單的交易。

目前 Uniswap V4 支持四組 Hook 回調,每組包含一對回調:

  • beforeInitialize/afterInitialize:初始化流動性池;
  • beforeModifyPosition/afterModifyPosition :添加/減少/移除流動性;
  • beforeSwap/afterSwap :交換;
  • beforeDonate/afterDonate :捐贈(Uniswap V4 引入的新功能,給予位於交易範圍內的流動性提供者小費)。

下圖是白皮書中展示的 beforeSwap/afterSwap Hook 的流程,可以看到在執行交換的前後,會先檢查流動性池對應的 Hook 是否開啓了相應的 flag,如果開啓了,才會調用 Hook 合約的相應函數。

這些 Hooks 可以在交易開始開始前和交易結束後執行,從而實現類似於鏈上限價訂單的功能。用戶在 Hook 合約上下限價訂單,隨後在 afterSwap 的回調裏根據自定義或托管預言機判斷價格是否滿足這個限價,如果滿足,就執行交易,如果不滿足,就取消交易。

Uniswap V4 通過 Hooks 將流動性與 DApp 自身的發展深度綁定,增強 DApp 功能的同時也增強了 Uniswap 的網路效應,使其成爲整個 DeFi 生態系統的底層基礎設施。

Uniswap V4 Hooks 的安全問題

BlockSec 團隊曾經探究過 Uniswap V4 中 Hooks 機制的安全風險,除了 Hook 合約本身就是惡意的外,良性的 Hook 合約也極其容易存在漏洞。BlockSec 團隊分析了Awesome Uniswap v4 Hooks 倉庫(提交哈希爲 3a0a444922f26605ec27a41929f3ced924af6075),並發現倉庫中超過30%的項目存在漏洞。這些漏洞主要源於 Hook、PoolManager 以及外部第三方之間的風險交互,主要可以分爲兩類:

  • 訪問控制問題:主要關注的是 Uniswap V4 中的回調函數,這些函數應該只能被 PoolManager 調用,不能被其他地址(包括 EOA 和合約)調用。例如,在獎勵由資金池密鑰分發的情況下,如果相應的函數可以由任意帳戶調用,那麼獎勵可能會被錯誤地領取。因此,對於 Hook 來說,建立強大的訪問控制機制是至關重要的,尤其是它們可以被除了池子本身之外的其他方調用;
  • 輸入驗證問題:由於在一些易受攻擊的 Hook 實現中輸入驗證不當而導致的各種類型的攻擊,包括我們熟知的重入攻擊。最常見的情況是在某些關鍵 Hook 函數裏調用了不受信任的外部合約,爲了攻擊這些易受攻擊的 Hook,攻擊者可以爲自己的虛假代幣註冊一個惡意資金池,然後調用 Hook 在資金池執行操作。在與資金池交互時,惡意代幣邏輯劫持控制流以便進行不良行爲。

即使適當執行對敏感的外部/公共函數的必要訪問控制,並對輸入參數進行驗證,降低了以上兩類 Hook 相關的安全風險,但合約漏洞本身還是無法完全規避的,特別是 Hook 如果作爲可升級合約實現的,那麼還可能會遇到類似於 OpenZeppelin 的 UUPSUpgradeable 漏洞的相關問題。

究其原因,還是因爲 Hook 編程會增加智能合約的復雜度,從而加大攻擊向量。對於普通智能合約,OpenZeppelin 會有系列最佳實踐類庫,讓基於它開發出來的合約是安全的,但它本質上還是給開發者添加了“安全使用約束”。而 Hook 合約與普通合約相比,需要更嚴格的“安全使用約束”。因此,Hook 編程要廣泛應用,還需要一個全面的框架:需要有安全執行環境、適用 Hook 的編程範式,和更嚴格的使用約束。

Artela Aspect:協議級支持 Hook 編程

Uniswap V4 Hooks 是通過智能合約實現的,它的安全性問題也是由於智能合約的局限性帶來的,那有沒有一種從協議級別支持 Hook 編程的方案呢?Artela Aspect 給了我們答案!

Artela 是一個高擴展性高性能的 EVM 兼容 Layer 1 區塊鏈網路,專爲開發人員構建模塊化、功能豐富、可擴展且可定制的應用程序。Artela 中定義了一個新的可編程模塊作爲原生擴展,稱爲 Aspect,創新性地把 AOP 引入到了區塊鏈網路中。Aspect 需要指定連接點,即在整個交易處理生命週期中執行 Aspect 的位置,類似於 Hook 的回調,連接點包括:

  • Block Init:區塊初始化;
  • Transaction Verification:交易驗證;
  • Pre Execute:執行前;
  • Post Execute:執行後;
  • Block Finalize:區塊最終確定。

Aspect 目前只支持 Typescripts,其代碼被編譯爲 WebAssembly (WASM) 字節碼並部署到 Artela 網路。Aspect 部署完成後,智能合約所有者可以將合約與 Aspect 綁定。智能合約所有者是指其外部帳戶(EOA)地址能夠通過智能合約isOwner(address) returns (bool)的檢查。

隨後,調用智能合約的後續交易將由 Aspect 處理,如下圖所示:

Artela Aspects 作爲協議級別的 Hooks 實現,相比於 Uniswap V4 Hooks 有非常大的優勢:

首先 Artela Aspects 使用 WASM 執行其代碼,執行效率比 EVM 高出幾個數量級;

其次,Artela Aspects 可以 Hook 整個交易的生命週期,而不只是 DeFi 核心邏輯,可以構建功能更豐富的 DApp;

最後,也是最重要的,Artela Aspects 獨立運行在一個安全的沙盒環境中,這種隔離可確保 Aspects 的執行不會影響到合約執行的安全性。

Artela Aspects 的隔離性限制了 Hook 合約作爲一個普通合約與外部其他合約間的相互調用,解決了 Uniswap V4 Hooks 訪問控制和輸入驗證的痛點。對於類似 Uniswap 這樣的 DeFi 合約部署到 Artela 可以享受到更快更強更安全的 Hook 體驗。

總結

Uniswap 作爲 DeFi 行業的重要參與者和領導者,在推動行業進步和完善功能方面發揮了至關重要的作用,此次 Uniswap V4 引入的 Hooks,毫無疑問也會引領 DEX 的發展方向,被後繼者爭相模仿。

但 Uniswap V4 Hooks 受限於智能合約本身的局限性,無論協議上設計得多牢固,工具庫做的多完善,也無法從根源上阻止 Hook 合約和外部其他合約之間的相互調用,存在潛在的安全漏洞。

Artela 作爲一個高性能 EVM 兼容 Layer 1 區塊鏈網路,從一開始的協議上,就設計了獨立運行於 WASM 中的 Aspect 來原生支持 Hooks 編程,極大提升了安全性。這給將安全視爲生命的 DeFi 協議提供了一個進階的解決方案。

聲明:

  1. 本文轉載自[小豬Web3],著作權歸屬原作者[web3朱大膽],如對轉載有異議,請聯系Gate Learn團隊,團隊會根據相關流程盡速處理。

  2. 免責聲明:本文所表達的觀點和意見僅代表作者個人觀點,不構成任何投資建議。

  3. 文章其他語言版本由Gate Learn團隊翻譯, 在未提及Gate.io的情況下不得復制、傳播或抄襲經翻譯文章。

即刻开始交易
注册并交易即可获得
$100
和价值
$5500
理财体验金奖励!