

区块链中的数学-uniswap 中交易的几种情况算法
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,
其中,
这里符号含义同上篇,不再解释!
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
写在前面
上一节说了 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
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。
- 发表于 15分钟前
- 阅读 ( 3 )
- 学分 ( 0 )
- 分类:入门/理论
Recommend
-
26
本文简要概述了爱德华曲线方程和有限域K上点运算,在参数d不是k平方的情况下,是完备的,即没有异常点以及相同点操作也是一致的(对比之前的椭圆曲线点加法规则(有无穷远点,相同点操作异与不同点),这样的性质可以增强对侧信道攻击(si...
-
21
本文介绍了爱德华曲线运算的几何意义,引入了扭曲爱德华曲线。 写在前面 上一节说了 爱德华曲线基本方程和点运算规则 ,由于Edwards curve是新的...
-
28
Ed25519使用了扭曲爱德华曲线,签名过程和之前介绍过的Schnorr,secp256k1, sm2都不一样,最大的区别在于没有使用随机数,这样产生的签名结果是确定性的,即每次对同一消息签名结果相同。 写在前面 上一节...
-
56
本文主要说了EdDSA签名机制的发展及其优点 写在前面 上一节介绍了Ed25519签名机制,本节我们介绍爱德华签名更多内容。 Why EdDSA ? 为什么要有爱德华签名机制? 这就要从其发展历...
-
13
动态秘密共享方案可有效提高长周期密钥的安全性。本文介绍了典型的Amir Herzberg实现方案,默认情况下所有参与者都参与,恢复阶段只要大于或等于门限t个参与能够周期性地更新自己的密钥部分,就能达到目的,本质上是 n 个参与者...
-
9
双线性配对特性不仅可以用于签名构造,密钥协商等,还可以实现乘法的同态隐藏和校验。这一点在零知识证明项目中应用很多。另外需要说明的是,并非基于任何椭圆曲线都可以构造配对函数,对于能有效实现双线性对的椭圆曲线,称为pairing-fri...
-
8
区块链中的数学 - 不经意传输 | 登链社区 | 深入浅出区块链技术区块链中的数学 - 不经意传输
-
14
写在前面 上一篇介绍了不经意传输协议,原本打算本文写paillier加密及其同态,但是想想还是后面再说比较好,按循序渐进顺序,先介绍密码学承诺更自然些, 好了,进入正题 --- 密码学中的承诺!...
-
11
本文介绍密码学承诺的含义及性质,并对哈希承诺做了说明,关于hash函数的内在机制实际是比较复杂的,我们以黑盒的角度来学习了解它的性质,在区块链&密码学中,哈希函数占据了基础且重要的位置。 比如区块链中常用的sha256,keccak等哈希算法。...
-
12
写在前面 上一篇介绍了 密码学承诺中的Peders...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK