以太坊交易所 以太坊交易所
Ctrl+D 以太坊交易所
ads
首頁 > 幣安幣 > Info

Uniswap V3 路徑編碼的進一步優化_SWAP:Uniswap

Author:

Time:1900/1/1 0:00:00

本文作者:ripwu

源起

前幾天群里有討論UniswapV3中詢價的處理,簡單翻了下代碼,發現與UniswapV2相比,V3變化真的很大~

其中v3-periphery目錄下的Path

functionflashArbs(PoolTiercalldatainput)external;

數據編碼為

0000000000000000000000000000000000000000000000000000000000000020//input.offset0000000000000000000000000000000000000000000000000000000000000004//input.length00000000000000000000000055542f696a3fecae1c937bd2e777b130587cfd2d//input00000000000000000000000000000000000000000000000000000000000001f40000000000000000000000009d7076ad0f7fdc5f0f249e97721d36a448d24906//input0000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000006ce15889c141c09ecf76a57795e91214a1f97648//input0000000000000000000000000000000000000000000000000000000000002710000000000000000000000000dfc647c079757bac4f7776cc876746119ac451ea//input0000000000000000000000000000000000000000000000000000000000002710

數據:某巨鯨從Binance提出約320萬美元山寨幣,包括LDO、AAVE和UNI:7月18日消息,據Lookonchain監測,某巨鯨地址剛剛從Binance提幣514,122枚LDO(約合104萬美元)、15,178枚AAVE(約合110萬美元)和172,584枚UNI(約合106萬美元)。[2023/7/18 11:02:03]

消耗gas為230*490*16=2360

節省gas為280

UniswapV3優化

從上面兩個例子可以看到,solidity編碼的最大問題在于padding,即32字節對齊,導致引入了非常多無效的空字節

上述例子中gas為2360,而空字節消耗了230*4=920,無效數據占比為~40%

為了進一步優化,考慮到pool和fee都為定長類型,可以直接拼接而不做padding,在實際使用時才做解碼

函數原型為

functionflashArbs(bytescalldatainput)external;

數據編碼為

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005c55542f696a3fecae1c937bd2e777b130587cfd2d0001f49d7076ad0f7fdc5f0f249e97721d36a448d24906000bb86ce15889c141c09ecf76a57795e91214a1f97648002710dfc647c079757bac4f7776cc876746119ac451ea00271000000000//padding

游戲引擎公司Unity以16億美元收購特效工作室Weta Digital,以布局元宇宙:11月10日消息,游戲引擎公司Unity將以16.3億美元的現金和股票收購為《指環王》和《阿凡達》制作特效的工作室Weta Digital,以布局元宇宙。Unity將能利用Weta Digital的技術和人才開發特效工具,并聚焦于元宇宙機會。Weta Digital獲得奧斯卡獎的特效團隊仍將以Weta FX的名義獨立運營,預計將成為Unity在媒體和娛樂領域的最大客戶。Weta FX將從Unity獲得技術和工具許可,簽署價值5000萬美元的年度協議和商業服務合同。Unity股價今年上漲約12%,消息公布后,盤后交易下跌8%。(路透社)[2021/11/10 6:43:28]

消耗gas為66*490*16=1704,無效數據占比降至~15%

這也是UniswapV3的優化方式

優化

實際上,我們繼續優化,使得有效載荷為100%

函數原型為

functionflashArbs()external;

數據編碼為

SushiSwap CTO:Optimism受VC影響偏袒Uniswap,故SushiSwap選擇更“可信中立”的Arbitrum:SushiSwap首席技術官Joseph Delong發推表示,SushiSwap之所以選擇Arbitrum而非Optimism作為二層擴容方案,是因為Optimism受VC影響給了Uniswap優惠待遇,阻礙 SushiSwap而支持Uniswap率先推出,因此SushiSwap才決定改在更“可信中立”的Arbitrum 上推出。

Joseph Delong稱此前SushiSwap部署到Optimism的Kovan測試網后,安排了與Optimism團隊的通話并計劃進一步部署到主網,但Optimism團隊明確表示“Uniswap必須優先”,Joseph Delong認為這是“Paradigm和a16z與它們的投資項目勾結以獲得優惠待遇”。而OptimismPBC聯合創始人兼CEO Jinglan Wang則對此回復稱,“Uniswap率先部署是因為它們在1.5年前就與我們商討合作,這早在Sushiswap之前,所以優先推出不是因為厚此薄彼”。

7月13日Uniswap V3正式上線以太坊擴容方案Optimism,此前5月底SushiSwap已在Arbitrum上部署。[2021/8/12 1:50:01]

55542f696a3fecae1c937bd2e777b130587cfd2d0001f49d7076ad0f7fdc5f0f249e97721d36a448d24906000bb86ce15889c141c09ecf76a57795e91214a1f97648002710dfc647c079757bac4f7776cc876746119ac451ea002710

過去一小時推特討論量:UNI升至第一 BTC排名第二:CoinTrendz.com數據顯示,過去一小時推特討論量排行中,UNI憑借266的討論量排名第一,BTC以98的討論量位居第二,ETH以34的討論量升至第三位。討論量排名四至十位的分別為:LINK(27)、ADA(21)、BNB(20)、SNX(18)、XRP(16)、THETA(15)、RLC(15)。[2020/10/4]

是不是有點奇怪,函數原型中沒有參數,那么參數從哪里獲取呢?

實際上,我的方式是拋棄solidity編碼,直接使用assembly來解析數據,代碼如下

bytesmemoryinput;assembly{letcalldata_len:=calldatasize()letinput_len:=sub(calldata_len,4)input:=mload(0x40)mstore(input,input_len)letinput_data:=add(input,0x20)calldatacopy(input_data,4,input_len)letfree:=add(input_data,input_len)letfree_round:=and(add(free,31),not(31))mstore(0x40,free_round。

Uniswap 24h交易量約3.54億美元 YFIE漲超700%:智能交易平臺Uniswap當前流動代幣總價值約為6.44億美元(+7.87%),24h交易量約為3.54億美元(+54.59%)。漲幅前三代幣:YFIE(+713%)、NEWTON(+318%)、YFII(+278%);跌幅前三代幣:PASTA(-100%)、NUGS(-75.85%)、SPID(-56.14%)。

提示:任何人都可以在Uniswap上創建和命名任何ERC20代幣,兌換代幣請注意風險。[2020/8/30]

這里稍微解釋下:

首先通過calldatasize得到調用數據的長度,減去functionselector的4字節,得到的input_len即為參數長度

然后通過0x40獲得空閑指針,拷貝參數到memory

最后將參數長度按32字節向上取整,修改空閑指針

題外

不要覺得上面的assembly本身消耗了gas,導致優化效果減少

要知道,即使按UniswapV3傳bytes參數的方式,也是需要拷貝數據到memory,過程是一樣的

如果考究一些,我們甚至可以跳過solidity編譯后的某些opcode

比如上面例子中,我并不檢查input_len的長度是否大于0,因為我不需要

而solidity編譯后的操作碼,勢必包括種種邊界檢查

換句話說,這種方式不僅優化了數據gas,還稍微優化了一些opcode

到此為止?

實際上,上面的優化有個小問題,在于memory中消耗了32字節用于保存input的長度,而這個長度,在整個生命周期中是固定的

我選擇將它轉移到棧上,只是使用時稍微麻煩一些,不像bytes方便~

,即

uintinput;uintinput_len;assembly{letcalldata_len:=calldatasize()input_len:=sub(calldata_len,4)input:=mload(0x40)calldatacopy(input,4,input_len)letfree:=add(input,input_len)letfree_round:=and(add(free,31),not(31))mstore(0x40,free_round。

實測

我用大概100多條套利路徑,對UniswapV3編碼方式,以及進一步優化方式,分別跑了自動化測試,平均下來一筆交易可以優化2000gas左右

比預期的優化大了很多,具體原因未查

參考資料

ripwu:https://learnblockchain.cn/people/3911

UniswapV3:https://learnblockchain.cn/article/2302

UniswapV2:https://learnblockchain.cn/article/2611

v3-periphery:https://github.com/Uniswap/v3-periphery/tree/main/contracts/libraries

FormalSpecificationoftheEncoding:https://docs.soliditylang.org/en/v0.8.9/abi-spec.html#mapping-solidity-to-abi-types]

免責聲明:作為區塊鏈信息平臺,本站所發布文章僅代表作者個人觀點,與鏈聞ChainNews立場無關。文章內的信息、意見等均僅供參考,并非作為或被視為實際投資建議。

本文來源于非小號媒體平臺:

登鏈社區

現已在非小號資訊平臺發布105篇作品,

非小號開放平臺歡迎幣圈作者入駐

入駐指南:

/apply_guide/

本文網址:

/news/10417118.html

免責聲明:

1.資訊內容不構成投資建議,投資者應獨立決策并自行承擔風險

2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表非小號的觀點或立場

上一篇:

每周編輯精選WeeklyEditors'Picks

Tags:PUTUNISWAPUniswapBitconch Reputation HeatUniwhaleGSWAP幣uniswap幣排行

幣安幣
Diem回應美國參議員質疑:Diem不是Facebook,與Novi試點無關_DIE:HOODIE

據Cointelegraph消息,針對美國參議員呼吁Facebook停止推出Diem和Novi一事,Diem回應稱,參議員們誤解了“Diem和Facebook之間的關系”.

1900/1/1 0:00:00
BKEX Global 關于上線 MOWA(Moniwar)并開放充值功能的公告_BAL:okex幣幣交易怎么賣出

尊敬的用戶:?????????????BKEXGlobal即將上線MOWA,詳情如下:上線交易對:MOWA/USDT幣種類型:BEP20?充值功能開放時間:已開放交易功能開放時間:2021年10.

1900/1/1 0:00:00
關于如何解綁手機號綁定郵箱的公告_FEX:KEX

尊敬的用戶: WBF已于暫停短信服務通知,具體詳情見《關于WBF調整短信通知服務的公告》,由于很多用戶并未及時綁定郵箱和谷歌驗證器,導致其無法登陸,請無法登陸的用戶,聯系在線客服.

1900/1/1 0:00:00
關于WBF恢復手機短信的服務的公告_TUSD:TPS

尊敬的用戶: WBF預計將于2021年10月16日20:00恢復手機短信服務。為了后續更好的為您提供優質的服務,建議您盡快綁定郵箱和谷歌驗證,具體綁定方式如下:APP:點擊左上角人頭像,點擊安全.

1900/1/1 0:00:00
meme有可能使得NFT和DeFi結合在一起_MEM:doge幣是無限的嗎

無論你對NFT的觀點是積極的還是消極的,你都不會忽視NFT。從流行游戲CryptoKitties開始像野火一樣蔓延的趨勢,全球金融市場都有些反應不過來.

1900/1/1 0:00:00
幣安槓桿推出USDT借貸優惠活動,優惠年利率低至9.31%!_CRYPTO:BITB

親愛的用戶:為回饋廣大用戶對槓桿交易的支持,幣安將於2021年10月14日20:00推出USDT借貸優惠活動.

1900/1/1 0:00:00
ads