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

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

写在前面

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

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

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

Swap交易

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

1. token交换ETH

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

其中,

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

2. ETH交换token

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

其中,

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

状态转移如下:

其中,

这过程先用$\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
  • 阅读 ( 616 )
  • 学分 ( 112 )
  • 分类:入门/理论

0 条评论

请先 登录 后评论
blocksight
blocksight

53 篇文章, 954 学分