Solidity Uniswap V2 router contract Liquidity removal

2024-03-22 20:44

本文主要是介绍Solidity Uniswap V2 router contract Liquidity removal,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        router合约是一种高级合约,能让用户与 Uniswap 的交互变得更简单。因此,它的函数可以执行多个操作,而 pair 合约中的函数只能执行一个核心操作。除此之外,Router 的函数是通用的--它们可以用于与任何pair进行交互。

GitHub - XuHugo/solidityproject: DApp go go go !!!

        因此,我们需要这样一个函数

        1、抽象pair--用户操作token而非pair。

        2、将用户的 LP-token转移到pair合约中。用户需要能够选择金额。

        3、从pair中移除用户的流动性。

        4、保护用户免受滑点影响。流动性移除也受滑点影响--请查看配对合约中的 testBurnUnbalancedDifferentUsers 测试。

function removeLiquidity(address tokenA,address tokenB,uint256 liquidity,uint256 amountAMin,uint256 amountBMin,address to) public returns (uint256 amountA, uint256 amountB) {...

        1、tokenA 和 tokenB 是pair的两个地址。由于用户使用token进行操作,因此无需指定pair地址。

        2、liquidity 是要销毁的 LP-token数量。

        3、amountAMin、amountBMin 是我们在销毁 LP-token时希望获得的token A 和token B 的最小数量。正是这些参数保护了我们免受损失。

        4、to - 接收代币的地址。

        第一步是找到pair:

address pair = ZuniswapV2Library.pairFor(address(factory),tokenA,tokenB);

        下一步:将 LP-token发送给pair,并销毁他。

IZuniswapV2Pair(pair).transferFrom(msg.sender, pair, liquidity);(amountA, amountB) = IZuniswapV2Pair(pair).burn(to);

        最后,我们会检查退回的金额是否在用户选择的可容忍误差范围内。

if (amountA < amountAMin) revert InsufficientAAmount();if (amountB < amountBMin) revert InsufficientBAmount();

这篇关于Solidity Uniswap V2 router contract Liquidity removal的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/836158

相关文章

【vue3|第28期】 Vue3 + Vue Router:探索路由重定向的使用与作用

日期:2024年9月8日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉在这里插入代码片得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^ 1.01365 = 37.7834;0.99365 = 0.0255 1.02365 = 1377.4083;0.98365 = 0.0006 说

野火霸天虎V2学习记录

文章目录 嵌入式开发常识汇总1、嵌入式Linux和stm32之间的区别和联系2、stm32程序下载方式3、Keil5安装芯片包4、芯片封装种类5、STM32命名6、数据手册和参考手册7、什么是寄存器、寄存器映射和内存映射8、芯片引脚顺序9、stm32芯片里有什么10、存储器空间的划分11、如何理解寄存器说明12、如何操作寄存器的某一位 STM32F407芯片学习1、stm32单片机启动流程s

vue中路由管理(vue-router,page)使用总结

现在的项目都以模块化的方式去开发,所以在这样的开发模式下,如何更好的去管理路由是开发中所需要考虑的重点,幸运的是当前的开发中已经有了成熟的中间件去管理,我们只需要用就可以了 下面是我在学习vue-router的时候在原来基础上修改出来的demo,也是为了有助于对vue-router的理解 首先理解下vue官网的一个示例demo https://jsfiddle.net/yyx990803/x

翻译Houdini官方对UE4新版插件的介绍:Houdini Engine for Unreal - V2

原视频:Houdini For Unreal - YouTube 目录 介绍0. 总览1. 简介HoudiniEngine2. UE4的HoudiniEngine - 第二版为什么要做“第二版” ?What's new? - 核心What's new? - 输出(1)What's new? - 输出(2)What's new? - 输入What's new? - 参数What's new?

Vue - 关于Router路由跳转时显示的animate.css动画

Vue - 关于Router路由跳转时显示的animate.css动画 在Vue中,操作路由跳转时页面是闪白的,没有动画效果,我们可以通过在router-view中设置transition,并搭配animate丰富的动画效果来美化路由跳转时的显示效果. 1.安装animate npm i -S animate.css 2.在main中引入animate.css import 'anim

Jaxb - com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 8 counts of IllegalAnnotationExcepti

一、异常 com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 8 counts of IllegalAnnotationExceptions类的两个属性具有相同名称 "orderName"his problem is related to the following location:at public java.lang.Stri

MapReduce V2---Yarn的架构及其执行原理

1. MRv1的局限性    1):扩展性差            MRv1中,Jobracker同事兼备了资源管理和作业控制(job的生命周期管理(task调度,跟踪task过程状态,task处理容错)两个功能。     单个的jobtracker无论在内存还是其他资源方面总存在瓶颈,在伸缩性、资源利用率、运行除mapreduce的其他任务等方面都会有限制。 MRv2 Y

golang中使用aws-sdk-go-v2

1.aws-sdk-go-v2常用api 1.引入所需包     import ("context""fmt""log""os""path/filepath""sync""time""github.com/aws/aws-sdk-go-v2/aws""github.com/aws/aws-sdk-go-v2/config""github.com/aws/aws-sdk-go-v2/crede

vue路由Router设置父路由默认选中第一个子路由,切换子路由让父路由激活高亮效果不会消失

import Vue from 'vue';import VueRouter from 'vue-router';// 导入组件import Home from '../views/Home.vue';import Parent from '../views/Parent.vue';import Child1 from '../views/Child1.vue';import Child

AttributeError: module ‘tensorflow_core._api.v2.config’ has no attribute ‘experimental_list_devices’

找到 tensorflow_backend.py 源文件的第506行 _LOCAL_DEVICES = tf.config.experimental_list_devices() 改成 devices = tf.config.list_logical_devices()_LOCAL_DEVICES = [x.name for x in devices]