最全面学习夹子智能机器人初级第二篇《PanCakeSwap V2》

路由器02

由于路由器是无状态的并且不持有代币余额,因此可以在必要时安全且无需信任地更换它们。如果发现了更有效的智能合约模式,或者需要额外的功能,则可能会发生这种情况。出于这个原因,路由器的版本号从 开始01。这是当前推荐的版本


代码

UniswapV2Router02.sol

地址

UniswapV2Router02部署在0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D以太坊主网上,以及Ropsten、Rinkeby、Görli和Kovan测试网。它是从提交6961711 构建的。

只读函数

function factory() external pure returns (address);

返回工厂地址

#WETH#

function WETH() external pure returns (address);

返回以太坊主网或Ropsten、Rinkeby、Görli或Kovan测试网上的规范 WETH 地址。

 #报价#

见报价。

#获取金额#

请参阅getAmountOut。

#获取金额#

请参阅getAmountIn。

#获取金额#

function getAmountsOut(uint amountIn, address[] memory path) public view returns (uint[] memory amounts);

请参阅getAmountsOut。

#获取金额#

function getAmountsIn(uint amountOut, address[] memory path) public view returns (uint[] memory amounts);

状态改变函数

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);
为 ERC-20⇄ERC-20 池增加流动性。                                                                                     1.为了涵盖所有可能的情况,msg.sender应该已经给路由器在 tokenA/tokenB 上至少有 amountADesired/amountBDesired 的余量。
2.始终根据交易执行时的价格以理想的比率添加资产。
3.如果传递的代币池不存在,则会自动创建一个池,并准确添加amountADesired/amountBDesired 代币。
扣群探讨技术:958319786
Name 类型
代币A address 池令牌。
代币B address 池令牌。
所需数量 uint 如果 B/A 价格 <= amountBDesired/amountADesired(A 贬值),则作为流动性添加的代币 A 的数量。
所需数量 uint 如果 A/B 价格 <= amountADesired/amountBDesired(B 贬值),则作为流动性添加的代币 B 的数量。
量Amin uint 限制 B/A 价格在交易恢复之前可以上涨的程度。必须 <= amountADesired。
数量BMin uint 限制在交易恢复之前 A/B 价格可以上涨的程度。必须 <= amountBDesired。
address 流动性代币的接收者。
最后期限 uint 交易将恢复的 Unix 时间戳。
金额A uint 发送到池中的 tokenA 数量。
金额B uint 发送到池中的 tokenB 数量。
流动性 uint 铸造的流动性代币数量。
function addLiquidityETH(
  address token,
  uint amountTokenDesired,
  uint amountTokenMin,
  uint amountETHMin,
  address to,
  uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);

使用 ETH 为 ERC-20⇄WETH 池增加流动性。

为了覆盖所有可能的场景,msg.sender 应该已经给路由器一个至少为amountTokenDesired 的令牌。
始终根据交易执行时的价格以理想的比率添加资产。
msg.value被视为数量ETHDesired。
剩余的 ETH(如果有)将返回给msg.sender.
如果传递的代币和 WETH 的池不存在,则会自动创建一个池,并准确msg.value添加 amountTokenDesired/ 代币。

Name 类型
令牌 address 池令牌。
amountTokenDesired uint 如果 WETH/代币价格 <= msg.value/amountTokenDesired(代币贬值),则作为流动性添加的代币数量。
msg.value(所需金额 ETH) uint 如果代币/WETH 价格 <= amountTokenDesired/ msg.value(WETH 贬值),则作为流动性添加的 ETH 数量。
amountTokenMin uint 限制在交易恢复之前 WETH/代币价格可以上涨的程度。必须 <= amountTokenDesired。
金额ETHMin uint 限制在交易恢复之前代币/WETH 价格可以上涨的程度。必须是 <= msg.value
address 流动性代币的接收者。
最后期限 uint 交易将恢复的 Unix 时间戳。
数量代币 uint 发送到池中的代币数量。
数量ETH uint 转换为 WETH 并发送到池中的 ETH 数量。
流动性 uint 铸造的流动性代币数量。
function removeLiquidity(
  address tokenA,
  address tokenB,
  uint liquidity,
  uint amountAMin,
  uint amountBMin,
  address to,
  uint deadline
) external returns (uint amountA, uint amountB);

从 ERC-20⇄ERC-20 池中移除流动性。

msg.sender应该已经给路由器至少允许池中的流动性。

Name 类型
代币A address 池令牌。
代币B address 池令牌。
流动性 uint 要移除的流动性代币数量。
量Amin uint 为使交易不恢复而必须接收的最小 tokenA 数量。
数量BMin uint 为使交易不恢复而必须接收的最小令牌 B 数量。
address 标的资产的接收方。
最后期限 uint 交易将恢复的 Unix 时间戳。
金额A uint 收到的 tokenA 数量。
金额B uint 收到的tokenB数量。

function removeLiquidityETH(
  address token,
  uint liquidity,
  uint amountTokenMin,
  uint amountETHMin,
  address to,
  uint deadline
) external returns (uint amountToken, uint amountETH);

从 ERC-20⇄WETH 池中移除流动性并接收 ETH。

msg.sender应该已经给路由器至少允许池中的流动性。

Name 类型
令牌 address 池令牌。
流动性 uint 要移除的流动性代币数量。
amountTokenMin uint 为使交易不恢复而必须接收的最小令牌数量。
金额ETHMin uint 为使交易不恢复而必须接收的最低 ETH 数量。
address 标的资产的接收方。
最后期限 uint 交易将恢复的 Unix 时间戳。
数量代币 uint 收到的代币数量。
数量ETH uint 收到的 ETH 数量。
function removeLiquidityWithPermit(
  address tokenA,
  address tokenB,
  uint liquidity,
  uint amountAMin,
  uint amountBMin,
  address to,
  uint deadline,
  bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);

由于permit,无需预先批准即可从 ERC-20⇄ERC-20 池中移除流动性。

Name 类型
代币A address 池令牌。
代币B address 池令牌。
流动性 uint 要移除的流动性代币数量。
量Amin uint 为使交易不恢复而必须接收的最小 tokenA 数量。
数量BMin uint 为使交易不恢复而必须接收的最小令牌 B 数量。
address 标的资产的接收方。
最后期限 uint 交易将恢复的 Unix 时间戳。
批准最大 bool 签名中的批准金额是流动性还是uint(-1).
v uint8 许可签名的 v 分量。
r bytes32 许可签名的 r 分量。
s bytes32 许可签名的 s 组件。
金额A uint 收到的 tokenA 数量。
金额B uint 收到的tokenB数量。
function removeLiquidityETHWithPermit(
  address token,
  uint liquidity,
  uint amountTokenMin,
  uint amountETHMin,
  address to,
  uint deadline,
  bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);

由于permit,从 ERC-20⇄WETTH 池中移除流动性并在未经预先批准的情况下接收 ETH 

Name 类型
令牌 address 池令牌。
流动性 uint 要移除的流动性代币数量。
amountTokenMin uint 为使交易不恢复而必须接收的最小令牌数量。
金额ETHMin uint 为使交易不恢复而必须接收的最低 ETH 数量。
address 标的资产的接收方。
最后期限 uint 交易将恢复的 Unix 时间戳。
批准最大 bool 签名中的批准金额是流动性还是uint(-1).
v uint8 许可签名的 v 分量。
r bytes32 许可签名的 r 分量。
s bytes32 许可签名的 s 组件。
数量代币 uint 收到的代币数量。
数量ETH uint 收到的 ETH 数量。
function removeLiquidityETHSupportingFeeOnTransferTokens(
  address token,
  uint liquidity,
  uint amountTokenMin,
  uint amountETHMin,
  address to,
  uint deadline
) external returns (uint amountETH);

与removeLiquidityETH相同,但对于收取转账费用的代币会成功。

msg.sender应该已经给路由器至少允许池中的流动性

Name 类型
令牌 address 池令牌。
流动性 uint 要移除的流动性代币数量。
amountTokenMin uint 为使交易不恢复而必须接收的最小令牌数量。
金额ETHMin uint 为使交易不恢复而必须接收的最低 ETH 数量。
address 标的资产的接收方。
最后期限 uint 交易将恢复的 Unix 时间戳。
数量ETH uint 收到的 ETH 数量。
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
  address token,
  uint liquidity,
  uint amountTokenMin,
  uint amountETHMin,
  address to,
  uint deadline,
  bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);

与removeLiquidityETHWithPermit相同,但对于收取转账费用的代币会成功。

Name 类型
令牌 address 池令牌。
流动性 uint 要移除的流动性代币数量。
amountTokenMin uint 为使交易不恢复而必须接收的最小令牌数量。
金额ETHMin uint 为使交易不恢复而必须接收的最低 ETH 数量。
address 标的资产的接收方。
最后期限 uint 交易将恢复的 Unix 时间戳。
批准最大 bool 签名中的批准金额是流动性还是uint(-1).
v uint8 许可签名的 v 分量。
r bytes32 许可签名的 r 分量。
s bytes32 许可签名的 s 组件。
数量ETH uint 收到的 ETH 数量
function swapExactTokensForTokens(
  uint amountIn,
  uint amountOutMin,
  address[] calldata path,
  address to,
  uint deadline
) external returns (uint[] memory amounts);

沿着由路径确定的路线,将精确数量的输入标记交换为尽可能多的输出标记。path 的第一个元素是输入标记,最后一个是输出标记,任何中间元素都表示要交易的中间对(例如,如果不存在直接对)。

msg.sender应该已经在输入令牌上给了路由器至少 amountIn 的余量。

Name 类型
金额 uint 要发送的输入令牌的数量。
最小金额 uint 为使交易不恢复而必须接收的最小输出令牌数量。
小路 address[] calldata 令牌地址数组。path.length必须 >= 2。每对连续地址的池必须存在并具有流动性。
address 输出令牌的接收者。
最后期限 uint 交易将恢复的 Unix 时间戳。
金额 uint[] memory 输入代币数量和所有后续输出代币数量。
function swapTokensForExactTokens(
  uint amountOut,
  uint amountInMax,
  address[] calldata path,
  address to,
  uint deadline
) external returns (uint[] memory amounts);

沿着由路径确定的路线,为尽可能少的输入令牌接收准确数量的输出令牌。path 的第一个元素是输入令牌,最后一个是输出令牌,任何中间元素都表示要交易的中间令牌(例如,如果不存在直接对)。

msg.sender应该已经在输入令牌上给了路由器至少 amountInMax 的余量。

Name 类型
金额 uint 要接收的输出令牌数量。
最大金额 uint 在交易恢复之前可能需要的最大输入令牌数量。
小路 address[] calldata 令牌地址数组。path.length必须 >= 2。每对连续地址的池必须存在并具有流动性。
address 输出令牌的接收者。
最后期限 uint 交易将恢复的 Unix 时间戳。
金额 uint[] memory 输入代币数量和所有后续输出代币数量
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
  external
  payable
  returns (uint[] memory amounts);

沿着由路径确定的路线,为尽可能多的输出令牌交换准确数量的 ETH。path 的第一个元素必须是WETH,最后一个是输出令牌,任何中间元素都表示要交易的中间对(例如,如果不存在直接对)。

Name 类型
msg.value(金额) uint 要发送的 ETH 数量。
最小金额 uint 为使交易不恢复而必须接收的最小输出令牌数量。
小路 address[] calldata 令牌地址数组。path.length必须 >= 2。每对连续地址的池必须存在并具有流动性。
address 输出令牌的接收者。
最后期限 uint 交易将恢复的 Unix 时间戳。
金额 uint[] memory 输入代币数量和所有后续输出代币数量。
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
  external
  returns (uint[] memory amounts);

沿着由路径确定的路线,以尽可能少的输入令牌接收准确数量的 ETH。path 的第一个元素是输入令牌,最后一个元素必须是WETH,并且任何中间元素都表示要交易的中间对(例如,如果不存在直接对)。

msg.sender应该已经在输入令牌上给了路由器至少 amountInMax 的余量。
如果收件人地址是智能合约,它必须具有接收 ETH 的能力。

Name 类型
金额 uint 要接收的 ETH 数量。
最大金额 uint 在交易恢复之前可能需要的最大输入令牌数量。
小路 address[] calldata 令牌地址数组。path.length必须 >= 2。每对连续地址的池必须存在并具有流动性。
address ETH 的接收者。
最后期限 uint 交易将恢复的 Unix 时间戳。
金额 uint[] memory 输入代币数量和所有后续输出代币数量。
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
  external
  returns (uint[] memory amounts);

沿着由路径确定的路线,用尽可能多的 ETH 交换准确数量的代币。path 的第一个元素是输入令牌,最后一个元素必须是WETH,并且任何中间元素都表示要交易的中间对(例如,如果不存在直接对)。

如果收件人地址是智能合约,它必须具有接收 ETH 的能力。

Name 类型
金额 uint 要发送的输入令牌的数量。
最小金额 uint 为使交易不恢复而必须接收的最小输出令牌数量。
小路 address[] calldata 令牌地址数组。path.length必须 >= 2。每对连续地址的池必须存在并具有流动性。
address ETH 的接收者。
最后期限 uint 交易将恢复的 Unix 时间戳。
金额 uint[] memory 输入代币数量和所有后续输出代币数量。
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
  external
  payable
  returns (uint[] memory amounts);

沿着由路径确定的路线,以尽可能少的 ETH 接收准确数量的代币。path 的第一个元素必须是WETH,最后一个是输出令牌,任何中间元素都代表要交易的中间对(例如,如果不存在直接对)。

剩余的 ETH(如果有)将返回给msg.sender.

Name 类型
金额 uint 要接收的代币数量。
msg.value(金额最大) uint 交易恢复之前可能需要的最大 ETH 数量。
小路 address[] calldata 令牌地址数组。path.length必须 >= 2。每对连续地址的池必须存在并具有流动性。
address 输出令牌的接收者。
最后期限 uint 交易将恢复的 Unix 时间戳。
金额 uint[] memory 输入代币数量和所有后续输出代币数量。
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
  uint amountIn,
  uint amountOutMin,
  address[] calldata path,
  address to,
  uint deadline
) external;

与swapExactTokensForTokens相同,但对于收取转账费用的代币会成功。

          msg.sender应该已经在输入令牌上给了路由器至少 amountIn 的余量。

Name 类型
金额 uint 要发送的输入令牌的数量。
最小金额 uint 为使交易不恢复而必须接收的最小输出令牌数量。
小路 address[] calldata 令牌地址数组。path.length必须 >= 2。每对连续地址的池必须存在并具有流动性。
address 输出令牌的接收者。
最后期限 uint 交易将恢复的 Unix 时间戳。
function swapExactETHForTokensSupportingFeeOnTransferTokens(
  uint amountOutMin,
  address[] calldata path,
  address to,
  uint deadline
) external payable;

与swapExactETHForTokens相同,但对于收取转账费用的代币会成功。

Name 类型
msg.value(金额) uint 要发送的 ETH 数量。
最小金额 uint 为使交易不恢复而必须接收的最小输出令牌数量。
小路 address[] calldata 令牌地址数组。path.length必须 >= 2。每对连续地址的池必须存在并具有流动性。
address 输出令牌的接收者。
最后期限 uint 交易将恢复的 Unix 时间戳。
function swapExactTokensForETHSupportingFeeOnTransferTokens(
  uint amountIn,
  uint amountOutMin,
  address[] calldata path,
  address to,
  uint deadline
) external;

与swapExactTokensForETH相同,但对于收取转账费用的代币会成功。

      如果收件人地址是智能合约,它必须具有接收 ETH 的能力

Name 类型
金额 uint 要发送的输入令牌的数量。
最小金额 uint 为使交易不恢复而必须接收的最小输出令牌数量。
小路 address[] calldata 令牌地址数组。path.length必须 >= 2。每对连续地址的池必须存在并具有流动性。
address ETH 的接收者。
最后期限 uint 交易将恢复的 Unix 时间戳。

界面

import '@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol';
pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    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);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

帮助

import IUniswapV2Router02 from "@uniswap/v2-periphery/build/IUniswapV2Router02.json";

欢迎大家加入【技术交流群】:958319786

你可能感兴趣的:(夹子,linux,服务器,bsc,运维,云计算)