区块见闻 区块见闻
Ctrl+D收藏区块见闻
首页 > USDC > 正文

CAL:Uniswap V3 路径编码的进一步优化_ethicaljudgement

作者:

时间:

本文作者:ripwu

源起

前几天群里有讨论UniswapV3中询价的处理,简单翻了下代码,发现与UniswapV2相比,V3变化真的很大~

其中v3-periphery目录下的Path

functionflashArbs(PoolTiercalldatainput)external;

数据编码为

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

AOFEX创新型期权24H交易量2913万USDT:据AOFEX创新型期权交易数据:截至18:00, BTC 1M交割期权成交量652万USDT,多空换手频次18241次,看多/看空买入量比为1.04;5M交割期权成交量1327万USDT,多空换手频次31314次,看多/看空买入比为1.04。

AOFEX数字货币金融衍生品交易所,旨在为用户提供优质服务和资产安全保障。[2020/12/28 15:53:56]

消耗gas为230*490*16=2360

节省gas为280

UniswapV3优化

从上面两个例子可以看到,solidity编码的最大问题在于padding,即32字节对齐,导致引入了非常多无效的空字节

上述例子中gas为2360,而空字节消耗了230*4=920,无效数据占比为~40%

为了进一步优化,考虑到pool和fee都为定长类型,可以直接拼接而不做padding,在实际使用时才做解码

函数原型为

functionflashArbs(bytescalldatainput)external;

AOFEX永续合约:24小时交易量6.7亿USDT 做多人数略占优:AOFEX交易大数据显示,截止今日10:30,永续合约交易量达6.8亿USDT,其中ETH/USDT永续合约交易量为1.69亿张,占比25.2%,现报价382.8USDT。BTC/USDT永续合约交易量为1.64亿张,占比24.5%,现报价11435.1USDT。BTC合约多空持仓人数比为1.12,市场做多人数暂时占优。

AOFEX数字货币金融衍生品交易所,旨在为用户提供优质服务和资产安全保障。[2020/10/14]

数据编码为

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005c55542f696a3fecae1c937bd2e777b130587cfd2d0001f49d7076ad0f7fdc5f0f249e97721d36a448d24906000bb86ce15889c141c09ecf76a57795e91214a1f97648002710dfc647c079757bac4f7776cc876746119ac451ea00271000000000//padding

TikTok网红Bryce Hall推出比特币播客频道“Capital University”:现年21岁的TikTok网红Bryce Hall宣布与加密行业大咖Anthony ‘Pomp’ Pompliano合作推出比特币播客频道“Capital University”。Bryce Hall表示,比特币是一种“属于自己”的资产类别,更是“互联网版黄金”,值得一探。这位TikTok网红现在短视频分享应用程序YouTube,Instagram和Twitter上拥有大约2500万粉丝,当前净资产超过200万美元。(cointelegraph)[2020/9/30]

消耗gas为66*490*16=1704,无效数据占比降至~15%

这也是UniswapV3的优化方式

优化

实际上,我们继续优化,使得有效载荷为100%

函数原型为

functionflashArbs()external;

数据编码为

55542f696a3fecae1c937bd2e777b130587cfd2d0001f49d7076ad0f7fdc5f0f249e97721d36a448d24906000bb86ce15889c141c09ecf76a57795e91214a1f97648002710dfc647c079757bac4f7776cc876746119ac451ea002710

新协议SushiSwap:利用Uniswap核心设计,新增面向社区功能:推特用户Chef Nomi #SushiSwap宣布推出SushiSwap,该协议利用Uniswap的核心设计,增加了面向社区的功能。要开始提供流动性并获得SUSHI代币,任何持有Uniswap LP代币的人都可以将其质押到相应的池中,并将在区块高度10750000开始赚取代币奖励。每个区块将创建100枚SUSHI,平均分配给每个支持池的质押者。在最初的100000个区块(大约2周),SUSHI的生产数量将是10倍,即每区块生产1000枚,以此激励耕作者和协议采用者。

达到100000区块后,我们将把所有的流动性质押代币转移到SushiSwap合约上,这将涉及获取所有质押在SushiSwap上的Uniswap LP代币,届时将在Uniswap上为各自代币对赎回,并初始化新的流动性池。新池几乎与标准的Uniswap池相同,只增加了一个特性,即任何累积的费用都将通过上述逻辑分配给SUSHI持有者。[2020/8/27]

是不是有点奇怪,函数原型中没有参数,那么参数从哪里获取呢?

实际上,我的方式是抛弃solidity编码,直接使用assembly来解析数据,代码如下

公告 | JUST UNIVERSE即将上线FUBT:据FUBT官方消息, JUST(JUST UNIVERSE)近日在官方推特和电报宣布,根据白名单机制 JUST已与FUBT达成战略合作,其项目代币 JT将在近期上线FUBT交易平台。JT在上线FUBT交易平台之后,还将陆续上线其他平台。据了解,JUST是一个拥有强通缩模型的创新协议跨链生态应用公链、一个拥有一篮子货币计划的跨链金融匿名公链、一个拥有储备金拖底的分布式公链,全网社区用户近50万。FUBT是一站式区块链资产交易服务平台,全球用户总数超百万。[2020/2/26]

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。

这里稍微解释下:

首先通过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

标签:CALALLLIDSOLIDethicaljudgementfootball币发行总量BLIDSOLID币

USDC热门资讯
SIS:Chainalysis 发布 2021 年度全球各地加密货币采用度研究报告,越南、印度、巴基斯坦位列前三_sis币创始人团队

链闻消息,区块链数据分析公司Chainalysis发布《The2021GeographyofCryptocurrency》报告,研究全球各地对于加密货币的采用度情况.

CHA:「Plan B」已就位,比特币牛市将继续_比特币价格

原文标题:《吴说深度:比特币牛市继续的可能性有多少潜在干扰是什么》 吴说作者|刘全凯 本期编辑|ColinWu在6月20日.

SOLID:關於支持Helium(HNT)網絡升級的公告_LID

親愛的用戶:幣安將支持Helium的網絡升級,具體安排如下:幣安預計將於東八區時間2021年10月19日07:00暫停HNT的充值、提現業務.

SSV:AOFEX於10月20日上線SSV(SSV Network)_HTT

尊敬的用戶:AOFEX將於2021年10月20日上線SSV,具體時間安排如下:充提業務均已開啟交易時間:10月20日12:00提示:以下内容来源于公告发布时的网络现有资料,AOFEX已尽力核对.

RES:DApp 开发平台 Decentology 完成 430 万美元种子轮融资,用于构建可组合智能合约市场并向 DAO 过度_bitpiecom官网下载正版

链闻消息,DApp开发平台Decentology宣布完成430万美元种子轮融资,DapperLabs、BorderlessCapital、GoodNewsVentures、BerezkaVent.

EXC:MEXC關於KEEP3S、 AXS3S、 LTC5S、 ETH5S、 BTC2S 等 8種 ETF產品進行份額合並的公告_BTC

尊敬的用戶: 由於杠桿ETF產品KEEP3S、AXS3S、LTC5S、ETH5S、BTC2S、BTC5S、NEAR3S和BAL3S的單價均低於0.1USDT.