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

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

路由器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类型
代币Aaddress池令牌。
代币Baddress池令牌。
所需数量uint如果 B/A 价格 <= amountBDesired/amountADesired(A 贬值),则作为流动性添加的代币 A 的数量。
所需数量uint如果 A/B 价格 <= amountADesired/amountBDesired(B 贬值),则作为流动性添加的代币 B 的数量。
量Aminuint限制 B/A 价格在交易恢复之前可以上涨的程度。必须 <= amountADesired。
数量BMinuint限制在交易恢复之前 A/B 价格可以上涨的程度。必须 <= amountBDesired。
address流动性代币的接收者。
最后期限uint交易将恢复的 Unix 时间戳。
金额Auint发送到池中的 tokenA 数量。
金额Buint发送到池中的 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池令牌。
amountTokenDesireduint如果 WETH/代币价格 <= msg.value/amountTokenDesired(代币贬值),则作为流动性添加的代币数量。
msg.value(所需金额 ETH)uint如果代币/WETH 价格 <= amountTokenDesired/ msg.value(WETH 贬值),则作为流动性添加的 ETH 数量。
amountTokenMinuint限制在交易恢复之前 WETH/代币价格可以上涨的程度。必须 <= amountTokenDesired。
金额ETHMinuint限制在交易恢复之前代币/WETH 价格可以上涨的程度。必须是 <= msg.value
address流动性代币的接收者。
最后期限uint交易将恢复的 Unix 时间戳。
数量代币uint发送到池中的代币数量。
数量ETHuint转换为 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类型
代币Aaddress池令牌。
代币Baddress池令牌。
流动性uint要移除的流动性代币数量。
量Aminuint为使交易不恢复而必须接收的最小 tokenA 数量。
数量BMinuint为使交易不恢复而必须接收的最小令牌 B 数量。
address标的资产的接收方。
最后期限uint交易将恢复的 Unix 时间戳。
金额Auint收到的 tokenA 数量。
金额Buint收到的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要移除的流动性代币数量。
amountTokenMinuint为使交易不恢复而必须接收的最小令牌数量。
金额ETHMinuint为使交易不恢复而必须接收的最低 ETH 数量。
address标的资产的接收方。
最后期限uint交易将恢复的 Unix 时间戳。
数量代币uint收到的代币数量。
数量ETHuint收到的 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类型
代币Aaddress池令牌。
代币Baddress池令牌。
流动性uint要移除的流动性代币数量。
量Aminuint为使交易不恢复而必须接收的最小 tokenA 数量。
数量BMinuint为使交易不恢复而必须接收的最小令牌 B 数量。
address标的资产的接收方。
最后期限uint交易将恢复的 Unix 时间戳。
批准最大bool签名中的批准金额是流动性还是uint(-1).
vuint8许可签名的 v 分量。
rbytes32许可签名的 r 分量。
sbytes32许可签名的 s 组件。
金额Auint收到的 tokenA 数量。
金额Buint收到的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要移除的流动性代币数量。
amountTokenMinuint为使交易不恢复而必须接收的最小令牌数量。
金额ETHMinuint为使交易不恢复而必须接收的最低 ETH 数量。
address标的资产的接收方。
最后期限uint交易将恢复的 Unix 时间戳。
批准最大bool签名中的批准金额是流动性还是uint(-1).
vuint8许可签名的 v 分量。
rbytes32许可签名的 r 分量。
sbytes32许可签名的 s 组件。
数量代币uint收到的代币数量。
数量ETHuint收到的 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要移除的流动性代币数量。
amountTokenMinuint为使交易不恢复而必须接收的最小令牌数量。
金额ETHMinuint为使交易不恢复而必须接收的最低 ETH 数量。
address标的资产的接收方。
最后期限uint交易将恢复的 Unix 时间戳。
数量ETHuint收到的 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要移除的流动性代币数量。
amountTokenMinuint为使交易不恢复而必须接收的最小令牌数量。
金额ETHMinuint为使交易不恢复而必须接收的最低 ETH 数量。
address标的资产的接收方。
最后期限uint交易将恢复的 Unix 时间戳。
批准最大bool签名中的批准金额是流动性还是uint(-1).
vuint8许可签名的 v 分量。
rbytes32许可签名的 r 分量。
sbytes32许可签名的 s 组件。
数量ETHuint收到的 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。每对连续地址的池必须存在并具有流动性。
addressETH 的接收者。
最后期限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。每对连续地址的池必须存在并具有流动性。
addressETH 的接收者。
最后期限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。每对连续地址的池必须存在并具有流动性。
addressETH 的接收者。
最后期限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

欢迎分享,转载请注明来源:内存溢出

原文地址:http://outofmemory.cn/zaji/1298339.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-10
下一篇2022-06-10

发表评论

登录后才能评论

评论列表(0条)

    保存