比特幣價格 比特幣價格
Ctrl+D 比特幣價格
ads
首頁 > FTX > Info

PUT:Uniswap V3 路徑編碼的進一步優化_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

某交易員通過投資UNI、AAVE、LDO一個月內獲利近43萬美元:7月16日消息,據Lookonchain監測,某交易員(0x123d開頭地址)在沒有投資Meme幣的情況下1個月內獲利42.8萬美元。該交易員操作如下:6月16日總成本:94.2萬美元以4.34美元的價格買入71891枚UNI(31.2萬美元);以50美元的價格買入6371枚AAVE(32萬美元);以1.64美元的價格買入189,255枚LDO(31萬美元)。

7月15日總收益:137萬美元以5.84美元的價格賣出71891枚UNI(42萬美元);以79美元的價格賣出6371枚AAVE(50.04萬美元);以2.37美元的價格賣出189,255枚LDO(44.85萬美元)。[2023/7/16 10:58:26]

消耗gas為230*490*16=2360

節省gas為280

UniswapV3優化

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

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

Messari報告:2022 Q2 1inch總交易量首次超越Uniswap,達310億美元:7月25日消息,加密分析平臺Messari近期發布的“2022 Q2 1inch狀態報告”顯示,在2022年第二季度,各大去中心化交易平臺(DEX)的總交易量超過810億美元。自2021年第四季度以來,交易量下降達31%。其中,1inch總交易量達310億美元,占比達39%;

而相比之下,Uniswap的總交易量為230億美元,占比28%,此前Uniswap在歷史上一直占據著DEX交易總量的主導地位。此外,1inch和Uniswap曾分別占據一季度900億美元總交易量的36%和37%。[2022/7/25 2:35:39]

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

函數原型為

functionflashArbs(bytescalldatainput)external;

數據編碼為

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005c55542f696a3fecae1c937bd2e777b130587cfd2d0001f49d7076ad0f7fdc5f0f249e97721d36a448d24906000bb86ce15889c141c09ecf76a57795e91214a1f97648002710dfc647c079757bac4f7776cc876746119ac451ea00271000000000//padding

Uniswap贈款方案現已開始接受第一輪資助申請:金色財經報道,1月21日消息,Uniswap Protocol官方發推稱,Uniswap贈款方案(經治理層投票通過的)現在開始接受第一輪資助申請。[2021/1/21 16:38:11]

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

這也是UniswapV3的優化方式

優化

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

函數原型為

functionflashArbs()external;

數據編碼為

55542f696a3fecae1c937bd2e777b130587cfd2d0001f49d7076ad0f7fdc5f0f249e97721d36a448d24906000bb86ce15889c141c09ecf76a57795e91214a1f97648002710dfc647c079757bac4f7776cc876746119ac451ea002710

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

庫幣新增BNB、NEO、LINK、UNI資產杠桿交易服務:據庫幣KuCoin官方消息,庫幣杠桿交易平臺于11月10日新增BNB、NEO、LINK、UNI四種資產并開放:BNB/USDT、NEO/USDT、LINK/USDT、UNI/USDT杠桿交易服務,支持10X杠桿。據悉,庫幣杠桿交易已開放了BTC、ETH、XRP、USDT、EOS和LTC等代幣的41個交易對。庫幣數字貨幣交易所,為來自207個國家的600萬用戶提供幣幣、法幣、合約、礦池、借貸等一站式服務。[2020/11/11 12:17:20]

實際上,我的方式是拋棄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。

OKEx將于9月20日16:00上調UNIUSDT、SUNUSDT等合約資金費率上限:據官網公告,OKEx永續合約將于2020年9月20日16:00上調UNIUSDT、UNIUSD、SUNUSDT、SUNUSD和JSTUSDT合約的資金費率上限。具體調整規則如圖。[2020/9/18]

這里稍微解釋下:

首先通過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:PUTUNISWAPUniswapInternet Computer(Dfinity)uni幣的中文意思ZonoSwap Financeuniswap幣排行

FTX
FEX:關于WBF恢復手機短信的服務的公告_htt幣被騙

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

1900/1/1 0:00:00
KEX:BKEX Global 關于ETP專區新增NU3L、NU3S(NuCypher)的公告_BetProtocol

尊敬的用戶: BKEXGlobalETP專區將于2021年10月21日15:00上線NU3L、NU3S.

1900/1/1 0:00:00
比特幣:Coingecko報告:2021年Q3加密行業五大亮點_Escoin Legal Token

本文來自Coingecko,原文作者:BenjaminHor,由Odaily星球日報譯者Katie辜編譯.

1900/1/1 0:00:00
USD:ZT創新板即將上線DMLG_TPS

親愛的ZT用戶: ZT創新板即將上線DMLG,並開啟DMLG/USDT交易對。具體上線時間如下:充值:已開啟;交易:2021年10月20日17:00; DMLG 項目簡介:Demole是一款基于.

1900/1/1 0:00:00
ISA:VISA和美國職業棒球大聯盟前球員聯手建立NFT項目以支持數字創作者_unisat錢包安裝教程

Visa啟動了一個項目,以支持那些想要使用NFT出售作品的藝術家。Visa網站發布的公告表明,這家金融服務巨頭正與美國職業棒球大聯盟前球員、NFT藝術家MicahJohnson合作,幫助創作者理.

1900/1/1 0:00:00
TPS:XT關于暫停AUSCM提現的公告_NEX

尊敬的XT用戶: 因AUSCM錢包升級維護,XT現已暫停AUSCM提現業務。給您帶來的不便,請您諒解!感謝您對XT.COM的支持與信任.

1900/1/1 0:00:00
ads