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

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

## 写在前面 上一节说了[Uniwap核心算法中的流动性管理](https://learnblockchain.cn/article/1521), 主要核心内容已经讲完了,这一节说下实现相关内容,作为总结。 本文的基础是上三篇,建议认真理解,凡是都有背景知识,没有捷径可走! 本文说下uniswap一些代码实现核心方法。 ## Swap交易 由于uniswap每个交易池都是ETH和另外一种代币token, 所以交易可以分为三种情况, token交换ETH,ETH交换token,token交换token。下面分别介绍 ### 1\. token交换ETH ethToTokenExact 方法,使用定量的其他token交换ETH, ![](https://img.learnblockchain.cn/2020/09/29/16013662539528.jpg) 其中, ![](https://img.learnblockchain.cn/2020/09/29/16013662671678.jpg) 这里符号含义同上篇,不再解释! ### 2\. ETH交换token tokenToEthExact方法,使用定量的ETH交换其他token, ![](https://img.learnblockchain.cn/2020/09/29/16013662839940.jpg) 其中, ![](https://img.learnblockchain.cn/2020/09/29/16013662928225.jpg) ### 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)$. 状态转移如下: ![](https://img.learnblockchain.cn/2020/09/29/16013664476385.jpg) 其中, ![](https://img.learnblockchain.cn/2020/09/29/16013664556464.jpg) 这过程先用$\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](https://learnblockchain.cn/article/1543), 敬请期待! 欢迎关注公众号:blocksight

写在前面

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

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

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

Swap交易

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

1. token交换ETH

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

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

其中,

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

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

2. ETH交换token

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

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

其中,

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

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)$.

状态转移如下:

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

其中,

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

这过程先用$\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

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

  • 发表于 2020-09-29 16:06
  • 阅读 ( 353 )
  • 学分 ( 78 )
  • 分类:入门/理论

该内容来自于互联网公开内容,非区块链原创内容,如若转载,请注明出处:https://htzkw.com/archives/27678

联系我们

aliyinhang@gmail.com