加密貨幣交易所 加密貨幣交易所
Ctrl+D 加密貨幣交易所
ads
首頁 > DAI > Info

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

關于建議在Avalanche部署Uniswap V3的提案已在鏈上發布:金色財經報道,關于建議在Avalanche部署Uniswap V3的提案已在鏈上發布,將于3月12日開放鏈上投票,3月17日結束投票。此前,該提案已通過Temperature Check。提案發起方Blockchain at Michigan表示,隨著Uniswap V3核心代碼版權商業保護于4月1日到期,在咨詢了Ava Labs團隊后,我們認為這是Uniswap擴展到Avalanche生態系統的適當時機。[2023/3/10 12:54:00]

消耗gas為230*490*16=2360

節省gas為280

UniswapV3優化

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

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

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

函數原型為

Uniswap V3將在未來數周內部署至Boba Network:金色財經報道,Boba Network將成為部署Uniswap v3的第六條鏈,部署計劃在未來幾周內進行。此舉得到了GFX Labs、Blockchain at Michigan、Gauntlet和ConsenSys等多家實體的支持。

此前消息,Uniswap社區成員投票贊成將Uniswap v3部署在Boba Network上。該提案由Boba基金會和FranklinDAO提交,最終獲得了超過5100萬票的支持。(Cointelegraph)[2023/2/7 11:50:45]

functionflashArbs(bytescalldatainput)external;

數據編碼為

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005c55542f696a3fecae1c937bd2e777b130587cfd2d0001f49d7076ad0f7fdc5f0f249e97721d36a448d24906000bb86ce15889c141c09ecf76a57795e91214a1f97648002710dfc647c079757bac4f7776cc876746119ac451ea00271000000000//padding

UNI突破23美元關口 日內漲幅為13%:火幣全球站數據顯示,UNI短線上漲,突破23美元關口,現報23.0014美元,日內漲幅達到13%,行情波動較大,請做好風險控制。[2021/2/20 17:33:41]

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

這也是UniswapV3的優化方式

優化

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

函數原型為

functionflashArbs()external;

數據編碼為

55542f696a3fecae1c937bd2e777b130587cfd2d0001f49d7076ad0f7fdc5f0f249e97721d36a448d24906000bb86ce15889c141c09ecf76a57795e91214a1f97648002710dfc647c079757bac4f7776cc876746119ac451ea002710

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

Asproex(阿波羅)開啟玩UNI得空投活動:據官方消息,在9月17日Asproex(阿波羅)正式上線UNI/USDT交易對后。Asproex(阿波羅)平臺今日宣布,將于9月19日20:00-9月22日24:00開啟“玩UNI送全網最高空投”活動。

用戶可通過邀請新用戶注冊Asproex(阿波羅)并完成UNI購買,及充值UNI等方式獲得創世移民。移民身份是Asproex(阿波羅)金融生態的部分,擁有移民身份將獲得算力加成、加速線性解鎖、新產品優先使用權等諸多權益。

Asproex(阿波羅)作為一家離岸銀行控股持牌交易平臺,涵蓋CTO(Corporate Token Offering)企業通證上市、合約跟單、ETT指數通證、數字礦業、Digital Bank板塊并持有5國合法牌照,為全球中小微企業提數字化上市一站式服務。[2020/9/19]

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

XRP支持者推出XRP Symbol項目 對其Unicode符號進行標識開源:據CCN報道,近日,Ripple的支持者Alexavier Guzman為XRP的Unicode符號而推出XRP Symbol標識開源項目。Guzman解釋,雖然XRP擁有代碼ISO 4217,但并無Unicode符號。例如BTC的符號是“?”,而XRP也應該有用一個這樣的符號。[2018/5/14]

這里稍微解釋下:

首先通過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:PUTUNISWAPUniswapintelligencefogcomputerchainUnique.PhotoAirSwapuniswap幣最新消息

DAI
STRP(Strips Finance?)_STR:比特幣

項目簡介: Strips是部署在Arbitrum上的革新的利率衍生品交易所。Strips在打造DeFi中最大的固定收益交易平臺。Strips可以使交易者和投資者使用永續利率互換輕松交易利率.

1900/1/1 0:00:00
Uniswap V3 流動性管理協議 Sommelier 完成 2300 萬美元融資,Polychain Capital 領投_UNI:TUR

鏈聞消息,據CoinDesk報道,使用Cosmos驗證器的UniswapV3流動性管理協議Sommelier完成2300萬美元融資,PolychainCapital領投.

1900/1/1 0:00:00
【ETF 乾坤袋】熱門ETF代幣空投活動開啟_比特幣:OMI

親愛的用戶: ????為了感謝用戶長久以來對ZT的支持,ZT開啟熱門ETF代幣空投活動。2021年7月18日00:00-2021年10月18日00:00期間,交易額≥1000USDT的用戶將得到.

1900/1/1 0:00:00
MEXC關於 KEEP3S、 SKL3S & LIT3S 3種 ETF產品進行份額合並的公告_MEX:FITM

尊敬的用戶: 由於杠桿ETF產品KEEP3S、SKL3S&LIT3S的單價均低於0.1USDT,觸發了MEXC杠桿ETF產品份額合並機製.

1900/1/1 0:00:00
BKEX Global 關于上線 CMCX(CORE MultiChain Token)的公告_KEX:BAL

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

1900/1/1 0:00:00
XT 關于恢復HAM交易及充值的公告_NEX:CON

尊敬的XT用戶: XT.COM現已恢復HAM交易以及充值業務。提現開啟時間將另行公告通知。暫停期間給您帶來的不便,敬請諒解.

1900/1/1 0:00:00
ads