26

区块链中的数学-uniswap 中交易的几种情况算法

 3 years ago
source link: https://learnblockchain.cn/article/1522
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

罗列了交易的几种情况算法流程

写在前面

上一节说了 Uniwap核心算法中的流动性管理 , 主要核心内容已经讲完了,这一节说下实现相关内容,作为总结。

本文的基础是上三篇,建议认真理解,凡是都有背景知识,没有捷径可走!

本文说下uniswap一些代码实现核心方法。

Swap交易

由于uniswap每个交易池都是ETH和另外一种代币token, 所以交易可以分为三种情况, token交换ETH,ETH交换token,token交换token。下面分别介绍

1. token交换ETH

ethToTokenExact 方法,使用定量的其他token交换ETH,

eEny6bQ.jpg!mobile

其中,

RbymYju.jpg!mobile

这里符号含义同上篇,不再解释!

2. ETH交换token

tokenToEthExact方法,使用定量的ETH交换其他token,

6rMbI3B.jpg!mobile

其中,

Ej2Yry2.jpg!mobile

3. token交换token

tokenToToken方法,使用定量的某种token交换特定的其他token。

假定使用一定量token A记为 $t_A$ 交换token B记为 $t_B$, 由于没有$t_A,t_B$, 不在一个交易池中,所以不能直接进行交易。

为了能够交易,必须要找到 $t_A$-->$t_B$ 的兑换路径, 最最简单的路径是,$t_A$ -> eth -->$t_B$ .也有可能不止一种路径。

以最简单的路径为例,有两个交易Pool的合约状态分别为 $(e_A,t_A,l_A)$ 和 $(e_B,t_B,l_B)$.

状态转移如下:

Zz2eEbr.jpg!mobile

其中,

Ej2myyJ.jpg!mobile

这过程先用$\Delta t_A$利用上两节讲的价格计算公式,换取特定的ETH数量,再拿这些ETH去 $(e_B,t_B,l_B)$池中,同样按照价格算法,最终得到$t_B$数量。

由于可能存在多少个路径path, 所以会存在最优路径,实现中用tokenToTokenExact,可以参见合约源码。

交易划点处理

uniswap可以在前端设置交易划点,默认是5%,什么意思呢?这是传统交易中的一个名词,是说挂单价格和实际成交时刻价格细小差别。 我们知道以太坊tps并不高,尤其拥堵时,出现划点较大的情况很正常,uniswap通过提供划点设置,让用户决定可以接受的范围,如果在最终交易确认时的价格超过了划点设置范围,该交易会被回滚,视为交易失败。

划点相关计算逻辑没有写在合约代码中,而是交易前端(uniswap-interface)repo中,当用户输入一种代币数量时,会根据划点计算出,可换取的另一种token的最小值,连同理想情况数值(划点为0情况)一并传给合约, 合约执行时若价格高于最小值则接受,否则revert, 具体逻辑参见合约代码。

小结

本文主要罗列了交易的几种情况算法流程,有了之前三篇的理解,本文理解顺理成章,就是具体实现的逻辑,到此uniswap的核心算法系列已经讲解完毕。

还有其他一些细小的辅助知识点,自行学习。

从下一篇开始,回归到原正题, 前天就有密码学与区块链课程群的同学说,尽快讲讲VRF, 敬请期待!

欢迎关注公众号:blocksight

写在前面

上一节说了 Uniwap核心算法中的流动性管理 , 主要核心内容已经讲完了,这一节说下实现相关内容,作为总结。

本文的基础是上三篇,建议认真理解,凡是都有背景知识,没有捷径可走!

本文说下uniswap一些代码实现核心方法。

Swap交易

由于uniswap每个交易池都是ETH和另外一种代币token, 所以交易可以分为三种情况, token交换ETH,ETH交换token,token交换token。下面分别介绍

1. token交换ETH

ethToTokenExact 方法,使用定量的其他token交换ETH,

eEny6bQ.jpg!mobile

其中,

RbymYju.jpg!mobile

这里符号含义同上篇,不再解释!

2. ETH交换token

tokenToEthExact方法,使用定量的ETH交换其他token,

6rMbI3B.jpg!mobile

其中,

Ej2Yry2.jpg!mobile

3. token交换token

tokenToToken方法,使用定量的某种token交换特定的其他token。

假定使用一定量token A记为 $t_A$ 交换token B记为 $t_B$, 由于没有$t_A,t_B$, 不在一个交易池中,所以不能直接进行交易。

为了能够交易,必须要找到 $t_A$-->$t_B$ 的兑换路径, 最最简单的路径是,$t_A$ -> eth -->$t_B$ .也有可能不止一种路径。

以最简单的路径为例,有两个交易Pool的合约状态分别为 $(e_A,t_A,l_A)$ 和 $(e_B,t_B,l_B)$.

状态转移如下:

Zz2eEbr.jpg!mobile

其中,

Ej2myyJ.jpg!mobile

这过程先用$\Delta t_A$利用上两节讲的价格计算公式,换取特定的ETH数量,再拿这些ETH去 $(e_B,t_B,l_B)$池中,同样按照价格算法,最终得到$t_B$数量。

由于可能存在多少个路径path, 所以会存在最优路径,实现中用tokenToTokenExact,可以参见合约源码。

交易划点处理

uniswap可以在前端设置交易划点,默认是5%,什么意思呢?这是传统交易中的一个名词,是说挂单价格和实际成交时刻价格细小差别。 我们知道以太坊tps并不高,尤其拥堵时,出现划点较大的情况很正常,uniswap通过提供划点设置,让用户决定可以接受的范围,如果在最终交易确认时的价格超过了划点设置范围,该交易会被回滚,视为交易失败。

划点相关计算逻辑没有写在合约代码中,而是交易前端(uniswap-interface)repo中,当用户输入一种代币数量时,会根据划点计算出,可换取的另一种token的最小值,连同理想情况数值(划点为0情况)一并传给合约, 合约执行时若价格高于最小值则接受,否则revert, 具体逻辑参见合约代码。

小结

本文主要罗列了交易的几种情况算法流程,有了之前三篇的理解,本文理解顺理成章,就是具体实现的逻辑,到此uniswap的核心算法系列已经讲解完毕。

还有其他一些细小的辅助知识点,自行学习。

从下一篇开始,回归到原正题, 前天就有密码学与区块链课程群的同学说,尽快讲讲VRF, 敬请期待!

欢迎关注公众号:blocksight

本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

  • 发表于 15分钟前
  • 阅读 ( 3 )
  • 学分 ( 0 )
  • 分类:入门/理论

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK