Solidity Uniswap V2 Output amount calculation

        现在,我们即将实现高级交换,包括链式交换(例如,通过token B 将token A 交换为token C)。在实现之前,我们需要了解 Uniswap 如何计算输出量。让我们先弄清楚金额与价格的关系。

        什么是价格?就是你用一种东西换取另一种东西的一个单位。在交易中,价格在某种意义上是一个中间实体:重要的是你拥有的token数量和你换取的token数量。

        在恒定产品交换中,价格只是储备之间的一种关系--我们已经在 ZuniswapV2Library 的报价功能中实现了价格计算。然而,在实际进行交换时,这个价格是不正确的,因为它只代表了某一时刻储备之间的关系。但在进行互换时,储备量会发生变化,我们实际上期望的是价格随着储备量的变化而下降。

        为了说明这一切,让我们回顾一下常量乘积公式:

                xy=k

        其中x和y是一对reserve(reserve0和reserve1)。

        在进行互换时,x 和 y 会发生变化,但 k 不变(实际上,由于互换费用的

        存在,k 会缓慢增长)。我们可以将其写成一个公式:

                (x+rΔx)(y−Δy)=xy

         其中,r 为 1 -  交易费(1 - 0.3% = 0.997)、

          Δx 是我们为换取的金额, Δy 是我们得到的金额。

        这是一个非常简洁明了的公式,它表明swap后储备金的乘积必须等于swap前储备金的乘积,这就是恒等乘积公式的定义。我们可以用这个公式来计算我们在互换过程中得到的金额。在进行一些基本的代数运算后,我们可以得到以下结果:

        如您所见,这是一个两个储备金的关系式 (y/x),其中考虑了投入金额 (rΔx),包括手续费。

                现在让我们对这个公式进行编程:

function getAmountOut(

    uint256 amountIn,

    uint256 reserveIn,

    uint256 reserveOut

) public pure returns (uint256) {

  if (amountIn == 0) revert InsufficientAmount();

  if (reserveIn == 0 || reserveOut == 0) revert InsufficientLiquidity();

  ...

        amountIn is ΔxreserveIn is xreserveOut is y.

        由于 Solidity 不支持浮点除法,我们需要将分子和分母乘以 1000,然后从应用于 amountIn 的乘数中减去 3--这将把 0.3% 的费用应用于 amountIn:

uint256 amountInWithFee = amountIn * 997;

uint256 numerator = amountInWithFee * reserveOut;

uint256 denominator = (reserveIn * 1000) + amountInWithFee;



return numerator / denominator;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/468838.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

KVM安装-kvm彻底卸载-docker安装Webvirtmgr

KVM安装和使用 一、安装 检测硬件是否支持KVM需要硬件的支持,使用命令查看硬件是否支持KVM。如果结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的 egrep ‘(vmx|svm)’ /proc/cpuinfo关闭selinux将 /etc/sysconfig/selinux 中的 SELinux=enforcing 修改为 SELinux=d…

工业智能网关的功能特点、应用及其对企业产生的价值-天拓四方

一、工业智能网关的功能特点 工业智能网关是一种具备数据采集、传输、处理能力的智能设备,它能够将工业现场的各种传感器、执行器、控制器等设备连接起来,实现设备间的信息互通与协同工作。同时,工业智能网关还具备强大的数据处理能力&#…

超火短剧分销推广项目cps,现在做还不晚(完整教程)

短剧是一种介于短视频和长视频之间的中视频模式,以爽点和反转为特点,讲究引人入胜,刺激消费。更白话一点表达,短剧就是压缩版的电视剧,易上头上瘾,易冲动消费。 所以,使用“蜂小推”进行短剧分…

xss.pwnfunction(DOM型XSS)靶场

环境进入该网站 Challenges (pwnfunction.com) 第一关&#xff1a;Ma Spaghet! 源码&#xff1a; <!-- Challenge --> <h2 id"spaghet"></h2> <script>spaghet.innerHTML (new URL(location).searchParams.get(somebody) || "Somebo…

实地研究降本增效的杀伤力,LSTM算法实现全国失业率分析预测

前言 ​ 降本增效降本增笑&#xff1f;增不增效暂且不清楚&#xff0c;但是这段时间大厂的产品频繁出现服务器宕机和产品BUG确实是十分增笑。目前来看降本增效这一理念还会不断渗透到各行各业&#xff0c;不单单只是互联网这块了&#xff0c;那么对于目前就业最为严峻的一段时…

五款软件让效率飞跃

幸运的是&#xff0c;随着信息技术的不断演进&#xff0c;一系列高效的软件工具应运而生&#xff0c;它们旨在简化我们的日常工作&#xff0c;帮助我们以更少的时间完成更多的任务。下面&#xff0c;将介绍五款能够有效提升您工作效率的软件神器。 1、亿可达 他是一款自动化工…

从自动化到测开,测试人员逆袭之路从此起步!

在当今竞争激烈的软件测试行业中&#xff0c;近期的招聘市场确实面临一些挑战。大量的求职者争相涌入岗位&#xff0c;许多热衷于功能测试的人士甚至难以找到理想的工作机会。更不幸的是&#xff0c;连自动化测试和性能测试这些专业领域也受到了测试开发人员的竞争压力。然而&a…

Ubuntu使用Docker部署Nginx容器并结合内网穿透实现公网访问本地服务

目录 ⛳️推荐 1. 安装Docker 2. 使用Docker拉取Nginx镜像 3. 创建并启动Nginx容器 4. 本地连接测试 5. 公网远程访问本地Nginx 5.1 内网穿透工具安装 5.2 创建远程连接公网地址 5.3 使用固定公网地址远程访问 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#…

作业:基于udp的tftp文件传输实例

#include <head.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <errno.h>#define PORT 69 //服务器绑定的端口号 #define IP "192.168.1.107" //服务器的IP地址int do_download(i…

adobe animate 时间轴找不到编辑多个帧按钮

如题&#xff0c;找了半天&#xff0c;在时间轴上找不到编辑多个帧按钮,导致无法批量处理帧 然后搜索发现原来是有些版本被隐藏了&#xff0c;需要再设置一下 勾选上就好了

怎么进行流程图制作?这种方法一看就会

怎么进行流程图制作&#xff1f;在当今这个信息爆炸的时代&#xff0c;流程图作为一种直观、高效的表达方式&#xff0c;被广泛应用于各种工作场景。无论是项目管理、流程优化&#xff0c;还是产品设计、教育培训&#xff0c;流程图都能帮助我们更好地理解、分析和优化工作流程…

如何查看chrome里network的payload

如何查看chrome的network的请求payload&#xff0c;点击漏斗形状的过滤器&#xff0c;过滤框清空&#xff0c;表示检测所有&#xff0c;右边按钮点击“全部”&#xff0c;“第三方请求”不要勾选。

数字化金融展厅设计要点,你get到了吗?

近年间随着各类数字化主题展厅的出圈&#xff0c;让这种数字多媒体的设计概念逐渐深入至各个领域&#xff0c;这其中也包含了金融主题展厅&#xff0c;与传统展厅不同的是&#xff0c;借助了先进的技术和设备的数字化展厅&#xff0c;能提供更为丰富、个性化的参观体验&#xf…

Java实现定时发送邮件(基于Springboot工程)

1、功能概述&#xff1f; 1、在企业中有很多需要定时提醒的任务&#xff1a;如每天下午四点钟给第二天的值班人员发送值班消息&#xff1f;如提前一天给参与第二天会议的人员发送参会消息等。 2、这种定时提醒有很多方式如短信提醒、站内提醒等邮件提醒是其中较为方便且廉价的…

opengl日记8-opengl创建三角形

文章目录 环境直接上代码一点小总结参考 环境 系统&#xff1a;ubuntu20.04opengl版本&#xff1a;4.6glfw版本&#xff1a;3.3glad版本&#xff1a;4.6cmake版本&#xff1a;3.16.3gcc版本&#xff1a;10.3.0 直接上代码 CMakeLists.txt cmake_minimum_required(VERSION 2…

开源离线语音识别输入工具CapsWriter v1.0——支持无限时长语音、音视频文件转录字幕。

分享一款开源离线语音识别输入工具&#xff0c;支持无限时长语音、音视频文件转录字幕。 软件简介&#xff1a; CapsWriter是一款免费开源且可完全离线识别的语音输入工具&#xff0c;无需担心因在线版本识别带来的各种隐私泄露问题。支持win7及以上的系统&#xff0c;已经更…

TH-FBCQX2防爆气象站

TH-FBCQX2防爆气象站主要适用于易燃易爆、危险性高的场所。以下是其主要的适用领域&#xff1a; 石油与天然气行业&#xff1a;在石油和天然气的生产、储存和运输过程中&#xff0c;防爆气象站可以监测环境中的可燃气体浓度&#xff0c;并根据气象条件预测爆炸风险。同时&…

Kali Linux结合cpolar内网穿透实现公网环境SSH远程访问

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过[cpolar 内网穿透](cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站)软件实现ssh 远程连接kali! …

蓝桥杯可撤销并查集|查找|合并|撤销(C++)

前置知识 蓝桥杯并查集|路径压缩|合并优化|按秩合并|合根植物(C)-CSDN博客 可撤销并查集 关键注意 可撤销并查集的撤销功能如何实现可撤销并查集能不能用路径压缩 可撤销并查集(Reversible Union-Find)是一种扩展了标准并查集(Union-Find)数据结构的数据结构&#xff0c;它允…

小北技术圈第一期:技术人员不要只想着用技术变现

每周分享干货内容。寻找100个技术人员&#xff0c;聚在一起副业变现&#xff0c;全程免费&#xff0c;有意者关注微信公众号&#xff1a;小北技术圈。 本期赚钱经 摆脱思维陷阱。 技术人员的副业&#xff0c;不能只局限于开发产品。技术人员有很多独特的优势&#xff0c;这些…