uniswap


uniswap开发

https://www.youtube.com/watch?v=RbjV5CvyAUs&list=PLV16oVzL15MRR_Fnxe7EFYc3MAykL-ccv&index=3

1、综述

1⃣️流动性:锁定在交易所内的资金
2⃣️手续费收益(fees):不归交易所所有者所有,归流动性的提供者所有
用户来到交易所之后一般有两个操作:交易/为资金池提供流动性
3⃣️路由(router):两个币可能不能直接兑换,因为可能不存在两个币的交易对,需要有个中间货币做路由。(WETH和ETH:ETH是以太网主币,WETH是ERC20版的ETH)
4⃣️流动性挖矿:如果我拥有某个交易对的两种代币,就可以把两种代币都交到资金池中,其他用户交易后产生的流动性手续费就归所有提供了流动性的人所有。
5⃣️去中心化交易所里代币的价格由什么确定?:并非借助了预言机,价格的产生是由恒定乘积做市商产生的,这也是uniswap最大的特色。(A,B两种token在池子里。此时有人用A去购买B,导致池子中A的池子变大,B的池子变小,进而B的价格也会上涨。)
6⃣️常量乘积模型(K=x * y),确保交易前后K不变。
v2:资金利用率不高,大部分资金没有参与交易
v3:(x + x_virtual) * (y + y_virtual) = k(曲线下移),允许用户在一段价格区间内童工流动性
v3的核心公式:(x + L / √p_upper) * (y + L * √p_lower) = L^2 其中 p_upper 和 p_lower 作为已知的变量,L是虚拟流动性,√p是根号价格
要为池子增加流动性,增加K。

核心逻辑

1.uniswap核心合约分为3个合约,工厂合约,配对合约,ERC20合约
2.核心合约布署时只需要布署工厂合约
3.工厂合约布署时构造函数只需要设定一个手续费管理员(管理员可以随时打开收费开关)
4.在工厂合约布署之后,就可以进行创建配对的操作
5.要在交易所中进行交易,操作顺序是:创建交易对,添加流动性,交易(在调用路由合约添加流动性的时候,会首先判断交易对是否存在。如果存在则直接添加流动性,如果不存在则先创建交易对再添加流动性)
6.添加配对时需要提供两个token的地址,随后工厂合约会为这个交易对布署一个新的配对合约
7.配对合约的布署是通过create2的方法
8.两个token地址按2进制大小排序后一起进行hash,以这个hash值作为create2的salt进行布署(交易对的地址是固定的,可以在部署前获得)
9.所以配对合约的地址是可以通过两个token地址进行create2计算的
10.用户可以将两个token存入到配对合约中,然后在配对合约中为用户生成一种兼容ERC20的token(也可称为流动性Token,数值约为两种Token数量乘积的平方根)(所以Pair合约继承了ERC20合约)
11.配对合约中生成的erc20Token可以成为流动性
12.用户可以将自己的流动性余额兑换成配对合约中的任何一种token
13.用户也可以取出流动性,配对合约将销毀流动性,并将两种token同时返还用户
14.返还的数量将根据流动性数量和两种token的储备量重新计算,如果有手续费收益,用户也将得到收益
15.用户可以通过一种token交换另一种token,配对合约将扣除千分之3的手续费
16.在uniswap校心合约基础上,还有一个路由合约用来更好的操作核心合约
17.路由合约拥有3部分操作方法,添加流动性,移除流动性,交换(除了项目方,用户也可以为交易对增加流动性,称为质押挖矿)
18.虽然配对合约已经可以完成所有的交易操作,但路由合约将所有操作整合,配合前端更好的完成交易
19.因为路由合约的代码量较多,布署时会超过gas限制,,所以路由合约被分为两个版本,功能互相补充

2、源代码

uniswap-v2-core:核心代码
uniswap-v2-periphery:边缘代码
uniswap-interface:前端界面代码
uniswap-sdk:开发工具
uniswap-lib:库工具(各种算法库)

uniswap-v2-core

使用waffle开发,有一些编写&测试的功能
1⃣️结构
image

Interfaces文件:接口合约
(一个合约调用另一个合约的时候需要把它的接口合约继承下来,才能使用另一个合约里的方法)
libraries文件:库
(Math.sol / SafeMath.sol / UQ112x112.sol(uniswap进行运算储备量和流动性时,使用的是 112 * 112 精度的二进制))
test
UniswapV2ERC20:ERC20合约
UniswapV2Factory:工厂合约
UniswapV2Pair:配对合约
Pair合约继承了ERC20,Factory引用了Pair合约,Factory用于部署Pair合约(使用的create2方法),创建一个交易对时会调用Factory创建一个Pari合约
每一个交易对都是在一个pair合约里锁定的,每个Pari合约都有一些ERC20的特殊方法

uniswap-v2-periphery

1⃣️结构
image

examples:ExampleFlashSwap.sol(闪电贷:一个区块完成),ExampleOracleSimple.sol(价格预言机,通过链外数据预测下一次的价格)。。。
interfaces
libraries
test
UniswapV2Migrator.sol:迁移合约(用于将V1合约的内容迁移到V2合约)
UniswapV2Router01.sol:路由合约
UniswapV2Router02.sol:路由合约
(两个路由合约如果写在一起,gas费会超过一个块的上限)
✨举例(项目方发币):项目方有一个新代币,要创建流动性,就要通过Router合约调用Factory合约,部署新的Pair,将新代币和有价值的代币的代币对存到池子里
✨举例(用户交易):用户要进行某个交易对的交易,就要通过Router合约调用Pair合约,进行交易(此处不需要调用Factory合约)

uniswap-v2-interface

使用react做的前端开发
infura:提供了一个开放的免费的以太坊节点,参数需要修改

universe

网站链接、白皮书、新闻。。。

SDK

npm安装的包

libraries

各种算法

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/278862.html

(0)
上一篇 2022年8月4日
下一篇 2022年8月4日

相关推荐

发表回复

登录后才能评论