环球讯息:优雅简洁!在FMZ上用200行代码接入了Uniswap V3(上篇)
2023-01-31 11:55:10 来源: 哔哩哔哩
近些年随着Defi概念的流行,在去中心化金融(DeFi)领域,Uniswap V3是最受关注的话题之一。作为领先的去中心化交换协议,Uniswap V3提供了更高效,更安全,更优秀的用户体验。现在,只需要200行代码,交易员和开发人员就可以在FMZ平台上轻松访问Uniswap V3。
(资料图片仅供参考)
FMZ是一个量化交易平台,支持数量交易策略的开发、回测和实盘部署。其易于使用的界面和强大的功能不难理解为为什么FMZ正在成为DeFi交易员和开发人员的首选。
将Uniswap V3整合到FMZ的过程简单易懂,只需要200行代码即可完成。这意味着,即使您是代码新手,也可以在FMZ上轻松连接Uniswap V3并立即开始交易。
FMZ已经封装了一系列的web3基础功能,除了Uniswap之外也可以用很少的代码封装其它的DEX交易所。接下来就让我带你一起零基础开始学习defi应用中的概念与技术,鉴于篇幅原因,以下描述尽量采用最简单易懂的方式,可能不是十分严谨,但是便于理解。
FMZ平台公开的「Uniswap V3 交易类库」,可以在FMZ的策略广场搜索到这个开源模板。
代码如下:
以太坊网络
以太坊网络可以理解为一个软件基础设施,在这个网络上可以部署运行各种智能合约,智能合约有各种各样的功能、应用场景。运行以太坊客户端的设备就构成了以太坊网络中的节点。
Uniswap V3中的一些概念
不熟悉Uniswap V3
协议的同学,这里需要先简单了解几个概念。Uniswap V3
也是在以太坊上部署运行的智能合约。
1、路由(Route):路由也是一个智能合约,用于管理token
兑换。2、池(Pool):池也是一个智能合约,用于存储两种以太坊代币,并在这两种代币之间进行交换。3、工厂合约(Factory):工厂合约是用来创建池的智能合约。4、ABI:(应用程序二进制接口)是一种规范,用于描述智能合约如何与外部世界互相通信。它指定了智能合约的函数名称,参数类型和返回值类型,以及如何编码和解码数据,并确定了智能合约的外部接口。可以理解为要调用某个接口,就必须按照接口约定的标准调用,而ABI中记录的就是约定的一系列标准。
一旦智能合约在以太坊上部署,就有一个地址。
剖析Uniswap V3 交易类库的代码
Uniswap V3 交易类库代码主要分为4个部分,我们来逐一讲解。
Part 1:与Uniswap V3交互时用到的常量
通过上面的基础概念预热,这里就很容易理解啦。
ABI_Route
这个常量储存的字符串就是路由智能合约的ABI。ABI_Pool
储存池合约的ABI。ABI_Factory
工厂合约的ABI。
由于这些字符串很长,所以只是节选。这些内容就给程序提供了调用智能合约方法的标准(例如这个智能合约接口的参数有什么,几个参数,都是什么类型,返回数据是什么类型等)。
刚才我们也提过,一旦智能合约部署在以太坊,就有一个地址。
ContractV3Factory
:记录了工厂合约的地址。ContractV3SwapRouterV2
:Uniswap V3的router V2地址,注意Uniswap有V1、V2,Uniswap V3 的router也有V1、V2之分,不同的合约地址是不一样的。
Part2:工具函数
1、computePoolPrice
函数用来计算池中token的价格。
假如交易对是ETH_USDT
,那么token0
是ETH
,token1
是USDT
。decimals0
就是token0
的精度数据,decimals1
就是token1
的精度数据。sqrtPriceX96
就是价格相关数据(并不是直接的价格数值),该数据可以从池合约的slot0
方法获取。
sqrtPriceX96 : The current price of the pool as a sqrt(token1/token0) Q64.96 valueQ64.96 是一种数据处理储存标准。
decimals0
,decimals1
, sqrtPriceX96
这三个数据作为参数传入computePoolPrice
函数即可计算出交易对ETH_USDT
的价格。该函数最后return
语句中的算法就是把sqrtPriceX96
还原成token1/token0
的过程。例如此时池里token0(ETH)个数是1个,token1(USDT)个数是1100个。那么1100/1=1100
,当前交易对ETH_USDT
池中的价格就是1100。
2、toAmount
函数用来把链上数值数据转换成可读数据。
简单说,例如一个ETH代币在链上表示数量时是1e18,即10的18次方,因为ETH的精度数据是18。并非所有代币精度都是18,USDT的精度就和ETH的精度不一样。toAmount
函数就是将1e18转换成1。
3、toInnerAmount
函数则和toAmount
相反,是将可读数据转换成链上使用的数值。
本期文章先介绍到这里,我们下期再见。
[责任编辑:]
猜你喜欢
- (2022-11-23)重磅信息!南京依维柯新车申报图“惊现”网络
- (2022-11-11)今日热议:能源出口表现强劲 俄罗斯二季度关键贸易数据创近30年新高
- (2022-11-11)动态焦点:陕西煤业(601225)6月份煤炭销量1680.28万吨 同比降24.13%
- (2022-11-11)【焦点热闻】潘金逸:黄金弱势无反弹 欧盘继续看跌不变
- (2022-11-11)全球最新:首开股份(600376)上半年签约金额434.86亿元 同比降34.37%
- (2022-11-11)全球简讯:方邦股份(688020)授出192万份股票期权 行权价为34元/份
- (2022-11-11)天天看热讯:Needham:基本面恶化 下调Meta(META.US)评级至“跑输大盘”