剖析DeFi交易產品之UniswapV4:概述篇

本文首發于公眾號:Keegan小鋼


UniswapV4UniswapV3 相比,算法上并沒有什么改變,依然還是采用集中流動性模型,但架構上變化很大,包括功能架構,也包括技術架構。相比之前的版本,UniswapV4 最大的創新主要包括四點:

  1. 引入 Hooks
  2. 改用單例模式
  3. 采用閃電記賬
  4. 支持原生 ETH

Hooks

引入 Hooks 機制是最核心的變動點,也大大擴展了其靈活性,使得定制化池成為了可能。

Hooks 本質上就是一個定制化的合約,當初始化一個交易池的時候,需要指定該池子所用的 Hooks 合約地址。Hooks 合約需要實現一系列回調函數:

  • beforeInitialize / afterInitialize
  • beforeModifyPosition / afterModifyPosition
  • beforeSwap / afterSwap
  • beforeDonate / afterDonate

其實就是分別在 initialize、modifyPosition、swap、donate 這幾個關鍵操作執行前和執行后都可以添加自定義邏輯。

以 swap 操作為例,加上 Hooks 的 swap 流程如下圖所示:

image.png

其他操作流程也是同理。

V4 的白皮書中有列舉出了可以使用 Hooks 實現的一些示例功能:

  • 通過 TWAMM 隨時間執行大額訂單
  • 按指定價格成交的鏈上限價單
  • 隨波動率變化的動態費用
  • 為流動性提供者內化 MEV 的機制
  • 中位數、截斷或其他自定義預言機實現

目前,UniswapV4 官方也已經提供了幾個參考實現,包括 TWAMM、LimitOrder、FullRange、VolatilityOracle、GeomeanOracle。之后的文章我們會一一剖析講解這幾個示例實現。

Hooks 除了可以實現這些功能之外,還可以管理池的 swap 費用,以及還可以向流動性提供者收取提款費用。

對于費用的管理,不只是可以設置為靜態費用,還可以設置為動態費用。支持動態費用的話,那就可以實現和中心化交易所一樣,按用戶的不同等級設置不同的費率。還可以把費用分配給不同的人,比如添加邀請分傭機制,手續費部分分配給邀請人。

總而言之,Hooks 大大提高了 Uniswap 的可擴展性。

單例和閃電記賬

Uniswap 以前的版本,每個池子都是單獨的合約,是通過工廠合約來創建每個池子合約的。而 UniswapV4 改為了使用單例模式,所有池子全都由單個合約進行管理,即 PoolManager 合約進行統一管理。

使用單例模式,那新建池子時,就不再需要部署新合約實例,可以大大降低創建池子的成本。

另外,單例模式還結合了另一個機制叫閃電記賬,以及結合使用了 EIP-1153 中提議的瞬態存儲操作碼。EIP-1153 會在坎昆升級中支持,這就是 UniswapV4 到目前還沒有發布上線的主要原因,在等坎昆升級完成。

在以前的版本中,每次交易都需要計算所有相關倉位的余額,尤其涉及跨池交易,還需要在多個池子間多次執行 transfer,交易成本其實挺高的。而閃電記賬機制,每個操作前會先做一個鎖定,鎖定期間只會更新一個稱為 delta 的內部凈余額,僅在鎖定結束時才進行外部轉賬,這就大大節省了交易成本。

image.png

不過,在當前執行環境中,閃電記賬架構其實是挺昂貴的,因為需要在每次余額變化時進行存儲更新。但是,由于余額必須在事務結束時為 0,因此可以使用瞬態存儲實現對這些余額的記賬,從而減少 gas 消耗。

瞬態存儲操作碼是專門用來解決區塊內部通訊的解決方案。瞬態存儲不改變現有操作的語義,瞬態存儲的數據在每次交易后會被丟棄,不會訪問服務器磁盤,使用后也無需清除存儲槽,客戶端也不需要加載原始數據。因此,相對來說,使用瞬態存儲解決區塊內部之間通訊問題的優勢在于 Gas 較低,且未來的以太坊數據存儲設計中不需要考慮因臨時存儲而產生的操作費用退費的情況。

簡而言之,使用瞬態存儲,可以用低 gas 解決臨時存儲的問題。

原生 ETH 和其他

支持原生 ETH 是說,在底層池子里就支持原生 ETH 和其他代幣之間的直接交易。

其實在 UniswapV1 版本也是支持原生 ETH 的,但那時候的池子嚴格限制了只能是 ETH 和另一個 ERC20 代幣配對組成的,ERC20 代幣之間是通過跨池交易的。但從 UniswapV2 開始,支持任意 ERC20 代幣配對,但由于實施的復雜性,以及在 WETH 和 ETH 配對之間的流動性碎片化的擔憂,底層池子統一只支持 ERC20 代幣,只在上層合約里實現 ETH 和 WETH 的自動互換。增加了 ETH 和 WETH 互換的邏輯,其實增加了交易成本。如果只用原生 ETH 轉賬的話,gas 成本只約為 ERC20 轉賬的一半(ETH 為 21k gas,ERC20 約為 40k gas)。

現在,UniswapV4 因為使用了單例和閃電記賬模式,又能很好地支持原生 ETH 了,而且還允許同時支持 ETH 和 WETH 的配對。

UniswapV4 還引入了 ERC1155 代幣用于額外的代幣記賬。用戶可以將代幣保留在單例合約中,避免 ERC20 頻繁轉入和轉出合約。這一點對于頻繁交易者或流動性提供者非常有價值,因為他們會在多個區塊或交易中連續使用相同的代幣。

引入了 Hooks 機制之后,像 UniswapV2 和 UniswapV3 內嵌的價格預言機也變得不再必要了,因此,在 PoolManager 中再見不到價格預言機相關的數據存儲和邏輯處理了。因為預言機可以通過 Hooks 合約定制化實現了。

donate() 函數是 V4 新增的操作,允許用戶、集成者和 Hooks 直接支付給特定范圍內的流動性提供者,支付的方式可以是池中的任意一種或兩種代幣。

總結一下,UniswapV4 算法上并沒有改變,依然還是采用集中流動性,但通過 Hooks 實現了可定制的池,單例合約和閃電記賬大幅度降低了 gas 成本,對原生 ETH 的支持也同樣減少了 gas,還有對動態費用的支持、ERC1155 的支持等,都大大提高了 Uniswap 的靈活性、可擴展性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/38614.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/38614.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/38614.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

百元藍牙耳機推薦2024,百元藍牙耳機排行榜盤點

在2024年面對琳瑯滿目的藍牙耳機選項,消費者往往難以抉擇,特別是在預算有限的情況下,如何在眾多產品中挑選出既滿足質量又符合預算的耳機成為了一個不小的挑戰。 為了幫助大家在繁多的選擇中找到真正物有所值的百元藍牙耳機,我們…

UnityUGUI之一:image和Rawimage

image組件的相關屬性 其中SpriteMode,若為單個圖片則為Single,圖片集則為Multiple 圖集的切割 點擊Slice可以進行自動切割 為且每個格子都可以進行單獨的九宮格切割 當圖片被九宮格切割再進行拉伸以后,九宮格的四角不會被拉伸 Tiled&#x…

構建支持多平臺的返利App跨平臺開發策略

構建支持多平臺的返利App跨平臺開發策略 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!今天我們將討論如何構建支持多平臺的返利App,特別關注跨平臺…

一棵B+樹可以存放多少行數據

以MySQL InnoDB為例。InnoDB存儲引擎最小儲存單元是頁,一頁大小固定是16KB,使用該引擎的表為索引組織表。B樹葉子存的是數據,內部節點存的是鍵值和指針。索引組織表通過非葉子節點的二分查找法以及指針確定數據在哪個頁中,進而再去…

數據治理不再頭疼,篩斗數據為您打造無縫數據處理體驗

在當今數字化時代,數據已成為企業最寶貴的資產之一。然而,隨著數據量的激增和數據來源的多樣化,數據治理成為許多企業面臨的一大挑戰。繁瑣的數據提取、混亂的數據結構和不清晰的數據質量,往往讓企業陷入數據處理的泥潭。幸運的是…

如何在本地一鍵配置最強國產大模型

自從OpenAI的ChatGPT橫空出世以來,國內外各類大語言模型(LLM)層出不窮,其中不乏Google的Gemini、Claude、文心一言等等。相較于競爭激烈的商業模型賽道,以Llama為代表的開源大模型的進步速度也十分驚人。 伴隨著大語言…

CP AUTOSAR標準之MemoryAccess(AUTOSAR_CP_SWS_MemoryAccess)(更新中……)

1 簡介和功能概述 該規范描述了AUTOSAR基礎軟件模塊內存訪問(MemAcc)的功能、API和配置。 ??內存訪問模塊通過基于地址的API提供對不同內存技術設備的訪問。內存訪問模塊始終由一個或多個內存驅動程序(Mem)補充。內存訪問模塊與內存設備技術無關,可與閃存、EEPROM、RAM或相變…

Python Tkinter:開發一款文件加密解密小工具

在這個信息泄露風險日益增加的時代,使用文件加密工具對于保護個人隱私和企業機密至關重要。 本文介紹了一款小工具——encryptDecrypt,它不僅提供了一個易于使用的圖形界面,簡化了加密和解密過程,還確保了數據的安全性&#xff0c…

深入解析 androidx.databinding.BaseObservable

在現代 Android 開發中,數據綁定 (Data Binding) 是一個重要的技術,它簡化了 UI 和數據之間的交互。在數據綁定框架中,androidx.databinding.BaseObservable 是一個關鍵類,用于實現可觀察的數據模型。本文將詳細介紹 BaseObservab…

python-求s=a+aa+aaa+aaaa+aa...a的值(賽氪OJ)

[題目描述] 求 saaaaaaaaaaaa...a 的值,其中 a 是一個一位的整數。 例如 :2222222222222222(此時共有 5 個數相加)。輸入格式: 整數 a 和 n ( n 個數相加)。輸出格式: s 的值。樣例輸入 2 2樣例輸出 24數據…

WSL——忘記root密碼(Ubuntu)

1、問題描述 Windows下的WSL(Ubuntu)忘記了root密碼,無法使用管理員權限。 2、解決方法 關閉 Ubuntu 窗口。打開 Windows 的 Powershell 或 cmd, 以 root 默認登陸 WSL。 wsl -u root 修改對應用戶密碼。 # xxx為要修改密碼的用…

Stable Diffusion【真人模型】:人臉特美的人像攝影大模型wuhaXL_realisticMixV3.0

今天和大家分享一個基于SDXL的真人大模型:wuhaXL_realisticMix。該模型無需使用LORA**就能生成的特別漂亮的人臉,雖然有時候人臉有些假,但是生成的人臉確實非常漂亮。 該模型底模融合了WhiteXL_realisticMix,訓練素材來自于視頻轉…

Dockerfile構建一個包含多個SpringBoot應用程序的鏡像

為什么要使用Dockerfile 構建一個包含多個SpringBoot應用程序的鏡像呢? 1、可移植性:Dockerfile 定義了一個標準化的方式來構建Docker鏡像,意味著無論在哪個系統上(只要它支持Docker), 都可以使用相同的Dockerfile來構建完全相同的…

pytorch統計學分布

1、pytorch統計學函數 import torcha torch.rand(2,2) print(a) print(torch.sum(a, dim0)) print(torch.mean(a, dim0)) print(torch.prod(a, dim0))print(torch.argmax(a, dim0)) print(torch.argmin(a, dim0)) print(torch.std(a)) print(torch.var(a)) print(torch.median…

如何學好AI繪畫?點這里有答案!

前言 地獄難度的求職模式下,“掌握一門技術”的那部分求職者,遠比其他人更有競爭力;而擁有出色技術和技能的設計師、以及未來想做設計師的小伙伴們,怎么才能更好實現工作自由? 只有兩個字:學習。 學習新…

EE trade:白銀什么情況下會暴漲

白銀價格的暴漲通常由多種因素共同作用引發,包括宏觀經濟背景、市場供需變化、地緣政治緊張局勢以及金融市場波動等。本文整理了一些具體情況和實例,說明白銀在什么情況下可能會暴漲。 1. 宏觀經濟因素 通貨膨脹急劇上升 背景:當通貨膨脹急…

電腦怎么錄屏幕視頻帶聲音?2種方法教會你

在數字時代的浪潮中,電腦屏幕視頻錄制已經成為一項潮流且實用的技能。無論是為了創作短視頻、分享游戲過程,還是為了記錄在線會議或教程,電腦錄屏都是非常重要的功能。但是不少的人都會遇上錄制好的視頻沒有聲音的困境,面對這種情…

Jenkins的一些記錄

設置環境變量 在 Jenkins 流水線中,取決于使用的是聲明式還是腳本式流水線,設置環境變量的方法不同。 聲明式流水線支持 environment 指令,而腳本式流水線的使用者必須使用 withEnv 步驟。 pipeline {agent anyenvironment { CC clang}stag…

權限控制在軟件開發中的重要性和實施方法

權限控制在軟件開發中的重要性和實施方法 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 1. 為什么權限控制很重要? 權限控制是軟件開發中不可或…

HTML5+CSS3+JS小實例:圖片九宮格

實例:圖片九宮格 技術棧:HTML+CSS+JS 效果: 源碼: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1…