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
Uh oh!
There was an error while loading. Please reload this page.
-
看完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