首页 > 其他分享 >Uniswap V2 核心

Uniswap V2 核心

时间:2024-06-12 22:54:33浏览次数:28  
标签:流动性 核心 代币 地址 V2 Uniswap address uint deadline

Uniswap V2 核心

  • UniswapV2Factory

  • UniswapV2Pair

  • UniswapV2ERC20

  • IUniswapV2Router02

1. UniswapV2Factory 合约

UniswapV2Factory 是工厂合约,主要负责创建和管理交易对。它是 Uniswap V2 系统的核心管理部分。

主要功能:

  • 创建交易对:工厂合约可以创建新的交易对(流动性池),每个交易对都有一个对应的 UniswapV2Pair 合约。
  • 管理交易对:工厂合约维护一个映射,存储所有创建的交易对的地址,确保每个交易对的唯一性。
  • 设置费用接收地址:工厂合约可以设置和更改接收交易费用的地址。

重要方法:

  • createPair(address tokenA, address tokenB): 创建一个新的交易对,并返回其地址。
  • getPair(address tokenA, address tokenB): 获取现有交易对的地址。
  • setFeeTo(address): 设置交易费用的接收地址。
  • setFeeToSetter(address): 设置能够更改费用接收地址的权限地址。

类比:

生活中的例子:餐厅经理

  • 餐厅经理负责开设新的自助餐台(交易对)并记录这些餐台的位置(地址)。他还可以设置餐厅的收益接收人(费用接收地址)。

2. UniswapV2Pair 合约

UniswapV2Pair 是每个交易对对应的合约,负责管理流动性池和处理代币交换。每个交易对都会有一个独立的 UniswapV2Pair 合约实例。

主要功能:

  • 管理流动性池:存储流动性提供者(LP)存入的两种代币,并管理这些代币的交换。
  • 处理代币交换:按照恒定乘积公式进行代币的交换,并在每次交易时收取一定的交易费用。
  • 发放流动性代币:向流动性提供者发放流动性代币,代表他们在流动性池中的份额。

重要方法:

  • mint(address to): 向流动性提供者发放流动性代币。
  • burn(address to): 燃烧流动性代币并返回相应份额的基础代币。
  • swap(uint amount0Out, uint amount1Out, address to, bytes calldata data): 执行代币交换。
  • sync(): 更新流动性池中的代币余额。

类比:

生活中的例子:自助餐台

  • 自助餐台管理顾客(用户)存放和取用的食物(代币),并记录每个顾客在餐台上的份额(流动性代币)。餐台还处理不同食物之间的交换,并收取服务费(交易费)。

3. UniswapV2ERC20 合约

UniswapV2ERC20 实现了流动性代币的 ERC-20 标准。流动性代币用于表示流动性提供者在流动性池中的份额。

主要功能:

  • 实现 ERC-20 标准:支持代币的转账、授权和查询功能。
  • 流动性提供者的份额管理:流动性代币代表了流动性提供者在特定交易对池中的持有份额。

重要方法:

  • totalSupply(): 返回流动性代币的总供应量。
  • balanceOf(address account): 返回指定地址持有的流动性代币数量。
  • transfer(address recipient, uint amount): 将流动性代币从调用者地址转移到指定地址。
  • approve(address spender, uint amount): 授权第三方地址可以使用调用者的流动性代币。
  • transferFrom(address sender, address recipient, uint amount): 从授权地址转移流动性代币到指定地址。

类比:

生活中的例子:餐券

  • 餐券代表顾客在自助餐台上的用餐份额(流动性份额)。顾客可以转让餐券(流动性代币),餐券的总量和每个顾客持有的数量可以随时查询。

4.IUniswapV2Router02

Uniswap V2 的 IUniswapV2Router02 是一个关键的智能合约接口,它提供了一系列方法,用于在 Uniswap 协议上执行代币交换、增加和移除流动性等操作。IUniswapV2Router02 继承自 IUniswapV2Router01,并在其基础上增加了一些额外功能。下面详细介绍 IUniswapV2Router02 的作用及其包含的方法。

作用

IUniswapV2Router02 主要用于以下操作:

  1. 代币交换:在 Uniswap 上进行代币与代币之间的交换。
  2. 增加流动性:向 Uniswap 池中添加代币对以提供流动性,并获得流动性提供者 (LP) 代币。
  3. 移除流动性:从 Uniswap 池中移除代币对,赎回 LP 代币。
  4. 支持复杂的代币转换路径:支持通过多跳交易实现复杂的代币交换路径。

方法详细讲解

以下是 IUniswapV2Router02 包含的一些主要方法及其详细说明:

1. addLiquidity

function addLiquidity(
    address tokenA,
    address tokenB,
    uint amountADesired,
    uint amountBDesired,
    uint amountAMin,
    uint amountBMin,
    address to,
    uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
  • 功能:向指定的代币对池中添加流动性。
  • 参数
    • tokenAtokenB:要添加流动性的代币对。
    • amountADesiredamountBDesired:希望添加的代币数量。
    • amountAMinamountBMin:希望添加的代币的最小数量(滑点保护)。
    • to:接收流动性代币的地址。
    • deadline:交易必须完成的时间(时间戳)。
  • 返回值:实际添加的代币数量和获得的流动性代币数量。

2. removeLiquidity

function removeLiquidity(
    address tokenA,
    address tokenB,
    uint liquidity,
    uint amountAMin,
    uint amountBMin,
    address to,
    uint deadline
) external returns (uint amountA, uint amountB);
  • 功能:从指定的代币对池中移除流动性。
  • 参数
    • tokenAtokenB:要移除流动性的代币对。
    • liquidity:要移除的流动性代币数量。
    • amountAMinamountBMin:最小可接受的代币数量(滑点保护)。
    • to:接收代币的地址。
    • deadline:交易必须完成的时间(时间戳)。
  • 返回值:实际接收的代币数量。

3. swapExactTokensForTokens

function swapExactTokensForTokens(
    uint amountIn,
    uint amountOutMin,
    address[] calldata path,
    address to,
    uint deadline
) external returns (uint[] memory amounts);
  • 功能:用指定数量的输入代币交换尽可能多的输出代币。
  • 参数
    • amountIn:输入代币数量。
    • amountOutMin:最小可接受的输出代币数量(滑点保护)。
    • path:代币交换路径。
    • to:接收输出代币的地址。
    • deadline:交易必须完成的时间(时间戳)。
  • 返回值:每个路径节点的代币数量。

4. swapTokensForExactTokens

function swapTokensForExactTokens(
    uint amountOut,
    uint amountInMax,
    address[] calldata path,
    address to,
    uint deadline
) external returns (uint[] memory amounts);
  • 功能:用尽可能少的输入代币交换指定数量的输出代币。
  • 参数
    • amountOut:输出代币数量。
    • amountInMax:最大可接受的输入代币数量(滑点保护)。
    • path:代币交换路径。
    • to:接收输出代币的地址。
    • deadline:交易必须完成的时间(时间戳)。
  • 返回值:每个路径节点的代币数量。

5. swapExactETHForTokens

function swapExactETHForTokens(
    uint amountOutMin,
    address[] calldata path,
    address to,
    uint deadline
) external payable returns (uint[] memory amounts);
  • 功能:用指定数量的 ETH 交换尽可能多的输出代币。
  • 参数
    • amountOutMin:最小可接受的输出代币数量(滑点保护)。
    • path:代币交换路径(第一个地址必须是 WETH)。
    • to:接收输出代币的地址。
    • deadline:交易必须完成的时间(时间戳)。
  • 返回值:每个路径节点的代币数量。

6. swapTokensForExactETH

function swapTokensForExactETH(
    uint amountOut,
    uint amountInMax,
    address[] calldata path,
    address to,
    uint deadline
) external returns (uint[] memory amounts);
  • 功能:用尽可能少的输入代币交换指定数量的 ETH。
  • 参数
    • amountOut:输出 ETH 数量。
    • amountInMax:最大可接受的输入代币数量(滑点保护)。
    • path:代币交换路径(最后一个地址必须是 WETH)。
    • to:接收 ETH 的地址。
    • deadline:交易必须完成的时间(时间戳)。
  • 返回值:每个路径节点的代币数量。

总结

  • UniswapV2Factory 合约类似于餐厅经理,负责创建和管理所有的交易对(自助餐台)。
  • UniswapV2Pair 合约类似于具体的自助餐台,管理存放和交换的代币(食物),并发放流动性代币(餐券)。
  • UniswapV2ERC20 合约实现了流动性代币的 ERC-20 标准,用于表示和管理流动性提供者在池中的份额(餐券的管理)。
  • IUniswapV2Router02 提供了一系列用于代币交换和流动性管理的功能,使得用户能够在去中心化交易所 Uniswap 上方便地进行交易和流动性操作。了解这些方法及其参数和返回值,有助于更好地利用 Uniswap 协议进行 DeFi 操作。

标签:流动性,核心,代币,地址,V2,Uniswap,address,uint,deadline
From: https://www.cnblogs.com/sjie/p/18244897

相关文章

  • React核心概念、主要特点及组件的生命周期
    在前端开发的世界中,React以其独特的魅力和强大的功能,成为了构建用户界面的首选框架之一。本文将深入探讨React的核心概念、主要特点以及组件生命周期React简介React是由Facebook开发并开源的前端JavaScript库,专门用于构建可重用的UI组件。它首次发布于2013年,并迅速成为最......
  • 基于yolov2深度学习网络的昆虫检测算法matlab仿真,并输出昆虫数量和大小判决
    1.算法运行效果图预览     2.算法运行软件版本matlab2022A 3.部分核心程序fori=1:12%遍历结构体就可以一一处理图片了ifigureimg=imread([imgPath[num2str(i),'.jpeg']]);%读取每张图片I=imre......
  • AIGC绘画设计:深入浅出完整解析Stable Diffusion(SD)核心基础知识
    心血来潮再加上想要督促自己,所以决定开始搞AI绘画技术的分享。如果觉得我写的好,又很久没更新,请多点我,因为可能我的懒癌又犯了,哈哈哈哈哈......没有本人帅,十分之一都没有不多废话,切入主题。学一门技术什么最难?当然是入门最难!从0到1,远远比从1到100要难一百倍,为啥?因为你之前......
  • 金地集团:性能考量为首要,核心系统的数据库选型|OceanBase 《DB大咖说》(七)
    OLTP是关系型数据库的典型使用场景。然而,在实际应用中,除了OLTP外,OLAP能力也至关重要,因此催生了HTAP技术的发展。金地集团的核心系统,新一代预算管理系统,凭借OceanBase的HTAP能力,仅花费一年便实现了从研发到投入使用,其测算的性能效率显著提升,达到了90倍的飞跃,成功满足了集团整体......
  • 《Windows核心编程》若干知识点实战应用分享
    目录1、进程的虚拟内存分区与小于0x10000的小地址内存区1.1、进程的虚拟内存分区1.2、小于0x10000的小地址内存区2、保存线程上下文的CONTEXT结构体3、从汇编代码角度去理解多线程运行过程的典型实例4、调用TerminateThread强制结束线程会导致线程中的资源没有释放的问题......
  • 数字人贴牌哪家好?需要关注的核心优势有哪些?
    随着人工智能时代的发展,数字人蕴含着的广泛的应用场景和庞大的市场需求也逐渐展现在了人们的眼前。在此背景下,数字人成为了一众创业赛道中的大热门,数字人贴牌模式也因此走红。所谓的数字人贴牌,又称为数字人源码部署和数字人OEM定制等,简单来说,就是一种由数字人源码公司向B端客......
  • 开源工业物联网网关 v2.1.1发布
    变量维护增加只写(WriteOnly)类型缓存最近3次原值,可以用raw、$pv、$ppv获取,配合表达式灵活进行计算增加触发字段,用于上升沿等监控触发采集和上传驱动增加西门子plc中文字符串的读写完善modbus协议连读增加modbus协议double类型解析修正modbus浮点类型数值写入modb......
  • 关于计算核心先进性和稳定性的差异以及CPU/MCU/PLC/工控机/DSP/FPGA/PAC/SOC/GPU/NPU/
    各种名称的关系PLC分为组合式和一体式,整体上落后于个人商用主机主要使用梯形图语言(LD)、指令表语言(IL)、功能模块图语言(FBD)、顺序功能流程图语言(SFC)、结构化文本语言(ST)编程为什么PLC贵为什么PLC使用的处理器都比较低端?(比如低端赛扬甚至STM32)PLC无需进行多任务处理CPU越......
  • C#.NET与JAVA互通之AES加密解密V2024
    C#.NET与JAVA互通之AES加密解密V2024 视频:   注意点:1.KEY和IV从字符串转byte数组时,双方要约定好编码,一般是UTF8。2.明文从字符串转byte数组时,双方要约定好编码,一般是UTF8,也可以GB2312,但不能Encoding.Default。3.加密后的结果,从byte数组转字符串时,双方要约定好编......
  • 【Python核心数据结构探秘】:元组与字典的完美协奏曲
    文章目录......