利用代码开发 PancakeSwap 抢跑机器人的详细指南

利用代码开发 PancakeSwap 抢跑机器人的详细指南

开发抢跑机器人联系: t.me/dexdao123

利用代码开发 PancakeSwap 抢跑机器人的详细指南
在DeFi领域里,PancakeSwap(简称Cake)作为一个去中心化交易所备受欢迎。而在项目开盘时,由于抢购的热度,很多人会使用机器人来快速地参与抢购。在本文中,我们将详细讲解如何使用代码开发一个 PancakeSwap 抢跑机器人。

I. 概述 1.1 什么是 PancakeSwap 抢跑机器人 PancakeSwap 抢跑机器人是一种自动化程序,可以在 PancakeSwap 项目开盘时自动进行快速的抢购操作,以获取更多代币。 1.2 PancakeSwap 抢跑机器人的优势 PancakeSwap 抢跑机器人的主要优势是可以自动化执行,节省时间和精力,并且可以快速地参与项目开盘。 1.3 PancakeSwap 抢跑机器人的风险 使用 PancakeSwap 抢跑机器人也存在风险,因为交易的成功与否可能受到多种因素的影响,如网络延迟、代码错误等。

II. 技术要点 2.1 PancakeSwap 抢跑机器人的工作原理 PancakeSwap 抢跑机器人的工作原理是基于智能合约进行的。具体而言,机器人会监听合约的状态,一旦符合条件就会自动执行抢购操作。通常情况下,机器人的抢购操作可以分为以下几个步骤:

查询合约信息 计算交易费用 签署交易 发送交易 2.2 PancakeSwap 抢跑机器人的技术要点 开发 PancakeSwap 抢跑机器人需要熟练掌握以下技术:

Solidity 智能合约语言 Web3.js 库 Node.js 环境 2.3 智能合约的编写 智能合约的编写是 PancakeSwap 抢跑机器人的核心,它是机器人自动化执行的基础。编写智能合约需要注意以下几个要点:

合约应该包含一个计时器,以确保在项目开盘后自动执行 合约应该包含抢购函数,可以根据用户的输入参数自动执行抢购操作 合约应该具备错误处理机制,以确保在出现错误时及时通知用户 2.4 Web3.js 的使用 Web3.js 是一种以太坊的 JavaScript 库,可以用于编写与以太坊交互的应用程序。在开发 PancakeSwap 抢跑机器人时,Web3.js 是必不可少的工具之一。

III.具体开源代码,需要开发抢跑机器人联系: t.me/dexdao123

// 设置购买代币的 WBNB 合约
const WBNB_CONTRACT = '0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c';

// 获取 Pancake Factory 合约获得购买功能
const FACTORY = '0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73';

// 获取 Pancake Factory 合约处理购买功能
const ROUTER = '0x10ED43C718714eb63d5aA57B78B54704E256024E';

// 获取您来自 trustwallet 或其他钱包BSC (BEP20) 地址。
const YOUR_ADDRESS = '';

// 在这里自定义您的滑点,不能小数。 (例如:1、5、10)。如果你买早期代币推荐 30+ Slippage
常量滑点= 5;

// 在这里自定义您的 GWEI(gas 费),不能小数。 (例如:5、10、25)。如果买早期代币推荐15+ GWEI
常量 WEI = 5;

// 设置最低的 gas limit,最低限度是 210000,越多越好。
const GAS_LIMIT = 345684;

// 设置您想购买的配对地址中添加多少最低流动性。设置在 BNB 中。 (例如:2、4、7)。 2 表示增加了 2 个 BNB 流动性。
const MIN_LIQUIDITY_ADDED = 3;

// 在这里输入您的私钥,您可以从您的钱包隐私中获得。
const YOUR_MNEMONIC = '';

// 您想在WBNB中购买代币的金额。
const AMOUNT_OF_WBNB = 0.002;

// 您想购买的代币地址。
const TO_PURCHASE = '0xe9e7cea3dedca5984780bafc599bd69add087d56';

首先,引入需要的库和模块:ethers、express、chalk、dotenv、inquirer,它们用于与以太坊网络交互、搭建服务、输出彩色日志、从环境变量读取配置、交互式命令行界面。

然后,读取环境变量并保存到 data 对象中。这些环境变量包括:WBNB 合约地址、待购买代币的合约地址、购买的 WBNB 金额、PancakeSwap V2 工厂合约地址、PancakeSwap V2 路由合约地址、收款地址、滑点、gas 费用、gas 限制、最低添加流动性。

接下来,定义 initialLiquidityDetected 和 jmlBnb 变量,分别表示是否检测到初始流动性和购买的 BNB 金额。

然后,定义以太坊网络的连接方式和账户的身份验证,分别是 WebSocketProvider 和 Wallet 对象。

接下来,定义工厂合约、路由合约和 WBNB 合约对象,它们用于与 PancakeSwap 合约进行交互。

接着,定义 checkLiq 函数,用于检查是否检测到初始流动性。在函数中,首先获取代币配对的地址,如果没有检测到,则输出提示信息并重新运行该函数;否则,获取代币配对的 BNB 余额,将其转换为 BNB 数量,并判断是否大于最低添加流动性。如果大于,则等待 5 秒后执行 buyAction 函数;否则,重新运行该函数。

接着,定义 buyAction 函数,用于购买代币。如果已经检测到初始流动性,则直接返回 null;否则,根据购买的 WBNB 金额和代币地址计算需要购买的代币数量,并将其作为参数传递给 swapExactTokensForTokensSupportingFeeOnTransferTokens 函数进行购买。购买成功后,输出交易收据,并在 4 秒后退出程序。如果购买失败,则输出错误信息,并提示是否重新运行该机器人。

最后,定义 run 函数,用于运行 checkLiq 函数。

最后,监听 5001 端口并输出提示信息。

以下代码实现了利用 PancakeSwap 抢购代币的功能,涉及到了以太坊网络连接、PancakeSwap 合约交互、环境变量读取、命令行交互等方面的知识点。

开发抢跑机器人联系: t.me/dexdao123

从“醚”中导入醚;
从“快递”进口快递;
从“粉笔”导入粉笔;
从“dotenv”导入 dotenv;
从“询问者”导入询问者;
 
const app = express();
dotenv.config();
 
常量数据 = {
  WBNB:process.env.WBNB_CONTRACT, //wbnb
 
  to_PURCHASE: process.env.TO_PURCHASE, // 你将购买的代币 = BUSD 用于测试 '0xe9e7cea3dedca5984780bafc599bd69add087d56'
 
  AMOUNT_OF_WBNB : process.env.AMOUNT_OF_WBNB, // 你想买多少WBNB
 
  factory: process.env.FACTORY, //PancakeSwap V2 工厂
 
  router: process.env.ROUTER, //PancakeSwap V2 路由器
 
  recipient: process.env.YOUR_ADDRESS, //你的钱包地址,
 
  滑点:process.env.SLIPPAGE, //百分比
 
  gasPrice : ethers.utils.parseUnits(`${process.env.GWEI}`, 'gwei'), //在gwei
  
  gasLimit : process.env.GAS_LIMIT, //至少21000
 
  minBnb : process.env.MIN_LIQUIDITY_ADDED //添加的最小流动性
}
 
让 initialLiquidityDetected = false;
让 jmlBnb = 0;
 
const bscMainnetUrl = 'https://bsc-dataseed1.defibit.io/' //https://bsc-dataseed1.defibit.io/ https://bsc-dataseed.binance.org/
const wss = 'wss://bsc-ws-node.nariox.org:443';
const mnemonic = process.env.YOUR_MNEMONIC //你的记忆;
const tokenIn = data.WBNB;
const tokenOut = data.to_PURCHASE;
const provider = new ethers.providers.WebSocketProvider(wss);
const wallet = new ethers.Wallet(助记符);
const account = wallet.connect(provider);
 
 
const factory = new ethers.Contract(
  数据工厂,
  [
    'event PairCreated(address indexed token0, address indexed token1, address pair, uint)',
    'function getPair(address tokenA, address tokenB) external view returns (address pair)'
  ],
  帐户
);
 
const router = new ethers.Contract(
  数据路由器,
  [
    'function getAmountsOut(uint amountIn, address[] memory path) public view returns (uint[] memory amounts)',
    'function swapExactTokensForTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts)',
    '函数 swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts)'
  ],
  帐户
);
 
const erc = new ethers.Contract(
  数据.WBNB,
  [{“常量”:真,“输入”:[{“名称”:“_所有者”,“类型”:“地址”}],“名称”:“balanceOf”,“输出”:[{“名称”: "balance","type": "uint256"}],"payable": false,"type": "function"}],
  帐户
);  
 
const run = async () => {
    等待 checkLiq();
}
 
  让 checkLiq = async() => {
    const pairAddressx = await factory.getPair(tokenIn, tokenOut);
    console.log(chalk.blue(`pairAddress: ${pairAddressx}`));
 
    if (pairAddressx !== null && pairAddressx !== undefined) {
      如果 (pairAddressx.toString().indexOf('0x0000000000000') > -1) {
        console.log(chalk.cyan(`未检测到 pairAddress ${pairAddressx}。自动重启`));
        返回等待运行();
      }
    }
    const pairBNBvalue = await erc.balanceOf(pairAddressx);
    jmlBnb = await ethers.utils.formatEther(pairBNBvalue);
    console.log(`值 BNB : ${jmlBnb}`);
  
    如果(jmlBnb > data.minBnb){
        setTimeout(() => buyAction(), 5000);
    }
    别的{
        initialLiquidityDetected = false;
        console.log('再次运行...');
        返回等待运行();
      }
  }
 
  让 buyAction = async() => {
    如果(initialLiquidityDetected === 真){
      console.log('不买因为已经买了');
        返回空值;
    }
    
    console.log('准备购买');
    尝试{
      initialLiquidityDetected = true;
 
      让 amountOutMin = 0.;
      //我们为我们的 wbnb 购买 x 数量的新代币
      const amountIn = ethers.utils.parseUnits(`${data.AMOUNT_OF_WBNB}`, 'ether');
      //if ( parseInt(data.Slippage) !== 0 ){
      // const mounts = await router.getAmountsOut(amountIn, [tokenIn, tokenOut]);
        //我们的执行价格会有点不同,我们需要一些灵活性
     // amountOutMin = amounts[1].sub(amounts[1].div(`${data.Slippage}`));
     // }
   
      控制台日志(
       chalk.green.inverse(`开始购买\n`)
        +
        `购买代币
        =================
        tokenIn: ${(amountIn * 1e-18).toString()} ${tokenIn} (币安币)
        tokenOut:${(amountOutMin / 1e-18).toString()} ${tokenOut}
      `);
     
      console.log('正在处理交易......');
      console.log(chalk.yellow(`amountIn: ${(amountIn * 1e-18)} ${tokenIn} (BNB)`));
      console.log(chalk.yellow(`amountOutMin: ${amountOutMin / 1e-18}`));
      console.log(chalk.yellow(`tokenIn: ${tokenIn}`));
      console.log(chalk.yellow(`tokenOut: ${tokenOut}`));
      console.log(chalk.yellow(`data.recipient: ${data.recipient}`));
      console.log(chalk.yellow(`data.gasLimit: ${data.gasLimit}`));
      console.log(chalk.yellow(`data.gasPrice: ${data.gasPrice}`));
 
      const tx = await router.swapExactTokensForTokensSupportingFeeOnTransferTokens( //如果你想购买通缩代币,请取消注释
      // const tx = await router.swapExactTokensForTokens( //如果你想购买代币,请取消注释
        金额,
        数量OutMin,
        [令牌输入,令牌输出],
        数据.收件人,
        Date.now() + 1000 * 60 * 5, //5 分钟
        {
          'gasLimit': data.gasLimit,
          'gasPrice': data.gasPrice,
            'nonce' : null //设置你想在块中的哪个位置购买
      });
     
      const receipt = await tx.wait();
      console.log(`交易回执:https://www.bscscan.com/tx/${receipt.logs[1].transactionHash}`);
      setTimeout(() => {process.exit()},4000);
    }赶上(错误){
      让 error = JSON.parse(JSON.stringify(err));
        console.log(`错误由 :
        {
        原因:${error.reason},
        交易哈希:${error.transactionHash}
        消息:请检查您的 BNB/WBNB 余额,可能是因为余额不足或在 pancakeSwap 上手动批准您的代币
        }`);
        控制台日志(错误);
 
        询问者.prompt([
    {
      输入:“确认”,
      名称:'再次运行',
      消息:'你想再次运行机器人吗?',
    },
  ])
  .then(答案=> {
    如果(answers.runAgain === 真){
      console.log('================================');
      console.log('再次运行');
      console.log('================================');
      initialLiquidityDetected = false;
      跑步();
    }别的{
      进程.exit();
    }
 
  });
 
    }
  }
 
跑步();
 
常数端口 = 5001;
 
app.listen(PORT, console.log(chalk.yellow(`监听代币 ${data.to_PURCHASE}`)));

在代码的最后,我们可以添加一些额外的功能来增强我们的机器人。例如:

  1. 添加自动下单功能:我们可以设置机器人在某个特定价格时自动下单购买或出售代币。
  2. 添加自动刷新功能:我们可以设置机器人定时刷新交易对价格并进行相应的操作。
  3. 添加多交易对支持:我们可以修改代码以支持多个交易对,以便机器人可以同时监控和交易多个代币。
  4. 添加价格预测功能:我们可以使用机器学习算法来预测代币价格并进行相应的交易操作。

在使用机器人交易时,需要注意以下几点:

  1. 风险自担:机器人只是根据我们预设的条件执行交易,但是市场行情是无法预测的,机器人不会为我们承担任何风险,所以需要谨慎操作。
  2. 不要贪心:过度使用机器人可能会导致频繁的买入和卖出,这可能会影响价格并产生额外的手续费。因此,需要设定合适的条件并避免贪婪的行为。
  3. 熟悉交易所规则:在使用机器人前,需要了解交易所的规则和手续费等相关信息,以免因为不了解规则而造成不必要的损失。

总之,利用代码开发 PancakeSwap 抢跑机器人可以帮助我们更快地进行交易操作,但是需要谨慎操作,并确保了解相关风险和规则。希望本文能够帮助大家更好地理解如何开发和使用机器人进行交易。

开发抢跑机器人联系: t.me/dexdao123

© 版权声明

相关文章

暂无评论

暂无评论...