pancakeswap 抢币

前断时间 pancakeswap抢币 比较流行,所以研究了下pancakeswap 合约

抢币核心函数就是 swapExactTokensForTokens

用一种币换另外一种币

pancakeswap合约分为 factory router pair 3个核心部分,其他的还有些周边合约,暂时用不上(bakeryswap和uniswap都一样的架构)

第一步: 先向币1合约地址 approve 允许router合约花费当前账户多少数量的币

approve函数如下

function approve(address spender, uint value) external returns (bool);

第二步:获取2个币的交易对,使用factory合约的getPair函数

function getPair(address tokenA, address tokenB) external view returns (address pair);

如果获取到的地址是0x000000....,因为还未创建交易对

第三步:获取流动性,使用pair合约的getReserves获取流动性(未添加流动性之前交易会失败)

function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

第四步:调用router合约的 swapExactTokensForTokens 用一种币换另外一种币

比如用wbnb来换doge

wbnb是token bnb是基础币,汇率1:1,但他们不是同一个

函数如下

function swapExactTokensForTokens(
        uint amountIn, //币1的数量 这里的单位是wei,记得转换
        uint amountOutMin, //单位wei,最少要获得币2的数量,如果换不到这么多就交易失败
        address[] calldata path, //交易路径  从币1到币2,多路径不在本文章讨论范围
        address to, //当前账户地址
        uint deadline //时间戳
    ) external returns (uint[] memory amounts);

换币的函数有以下几个

swapExactTokensForTokens 根据精确的token交换尽量多的token
swapTokensForExactTokens 使用尽量少的token交换精确的token
swapExactETHForTokens 根据精确的ETH交换尽量多的token
swapTokensForExactETH 使用尽量少的token交换精确的ETH
swapExactTokensForETH 根据精确的token交换尽量多的ETH
swapETHForExactTokens 使用尽量少的ETH交换精确的token
swapExactTokensForTokensSupportingFeeOnTransferTokens 支持收税的根据精确的token交换尽量多的token
swapExactETHForTokensSupportingFeeOnTransferTokens 支持收税的根据精确的ETH交换尽量多的token
swapExactTokensForETHSupportingFeeOnTransferTokens 支持收税的根据精确的token交换尽量多的ETH

具体使用不再详述,自行百度就有了

如果要换回来,把2个币的顺序对调一下就行了

我自己用c#写了个,效果还不错

我放到了下载区,需要的自行下载 pancakeswap抢币

你可能感兴趣的:(区块链)