Task6学习过程分享 #1054
LyricaQiang
started this conversation in
Materials
Task6学习过程分享
#1054
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
看完Task6教程视频之后,其实我是有点懵的,因为之前完全没有了解过Uniswap,所以我就先了解了CEX、DEX交易模式,然后看了下Uniswap的官网,开发思路才逐渐清晰,下面是我的学习总结和开发思路分享:
一、交易模式
CEX交易模式采用订单簿模式,其中包含所有待成交的买单和卖单。在订单簿中,买单和卖单相辅相成,确保市场流动性和成交。
DEX交易模式则采用自动做市商(AMM)机制,核心公式是x * y = k(恒定乘积),根据这个数学公式确定代币的价格。交易直接在流动性池中进行,每个交易池由用户提供的资产对组成(如ETH/DAI、USDT/USDC等),该用户称为流动性提供者(Liquidity Provider),通过质押代币并锁仓来增加交易池的流动性(增加流动性)。LP在锁仓期结束后可以取出质押的代币(去除流动性),影响初始的流动性配置和代币价格。
Uniswap作为典型的DEX交易平台,所有交易在其提供的流动性池中完成。用户可以随时添加或提取资金到这些交易池中,每个池子对应一组特定的交易对(Pair)。
二、交易对
在Uniswap这样的协议中,交易对(Pair)是指同时包含两种不同资产的组合,用于进行交易的基本单位。
Pair.getAddress()是Uniswap V2 SDK中的一个函数,用于获取已存在的交易对地址。在这个例子中,它根据输入的两个代币(例如 DAI 和 WETH)及它们的链 ID,通过 Uniswap V2 工厂合约查询已存在的交易对地址。
那么交易池中存在一组交易对,我们如何获取交易对价格?
三、交易对价格
Uniswap包含两个重要的价格概念:Mid Price( 一种代币相对于另一种代币的价值比率)和Execution Price( 是指执行实际交易时所得到的资产比率),这次的学习中,只涉及到了Mid Price,Mid Price又细分为两种:
(1)获取直接价格
通过 toSignificant(6) 方法将中间价格格式化为6个有效数字,这是因为价格在内部以精确的分数形式存储,可以根据需要转换为其他表示形式。
(2)获取间接价格
如果不存在直接的 DAI-WETH 交易对,可以通过选择有效的交易路径(例如通过共同的第三种代币,如USDC)来计算间接的中间价格。
如果在流动性交易池中存在交易对,那么可以获取直接价格;如果没有,那么需要间接获取价格。
四、怎么判断有没有直接的交易对?
在 Uniswap V2 中,要判断是否存在直接的交易对,即两种资产之间存在一个直接的流动性池(liquidity pool)可以进行交易,可以按照以下步骤进行:
有了这些前置知识,Uniswap 开发思路稍微清晰了一些。
首先我们需要根据前端交易界面选择的两种 token, 创建交易对(Pair),根据交易对(Pair)来获取 token 在流动性交易池中的储备量;
Route 代表了一条交易路径。在给定一对交易对(Pair)的情况下,Route 帮助我们计算不同代币之间的价格比例;
获取价格兑换比例之后,需要授权Uniswap Router合约执行代币的转移操作, 然后调用Router合约的swapExactTokensForTokens方法执行代币交换。
基本开发思路就是这样,但是代码中有些细节还是需要注意:
Router合约地址在官网都有,连接的哪条链,就替换对应地址即可;token的地址在etherscan上搜索一下就有了。
以上就是我task6任务的学习过程,如果有写的不对的地方,欢迎指出来。
Beta Was this translation helpful? Give feedback.
All reactions