pancakeswap批量抢跑机器
这个机器人主要是用来在pancakeswap开盘时抢先购买token。
界面图
完整代码是用vue写的,现在先来个学习版的方便小白理解
这个学习版只有单个抢先的功能,完整版在GitHub
核心代码讲解:
const ethers = require('ethers');
const axios=require('axios');
//This contains an Endpoint URL, and a wallet private key!!!
//const secrets = require('./secrets.json');
//THIS WORK ON BSC TESTNET!!!!!
//All Values are for the testnet!!!!!!!!
//这里填WBNB地址
const WBNB = "0xae13d989dac2f0debff460ac112a837c89baa7cd";
//这里填USDT或者BUSD都行
const BUSD = "0x78867BbEeF44f2326bF8DDd1941a4439382EF2A7";
//这里填pancakeswap路由地址
const router = "0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3";
//填合约地址
const DogeAddress='0xF2a816876e12378F67E1Aa88Fc466685d5C16874';
//填节点地址
const provider = new ethers.providers.JsonRpcProvider("https://late-divine-emerald.bsc-testnet.discover.quiknode.pro/5a218dc9c94daf4309ea27ff0a6a3c2013fae4b6");
//填你的私钥
const wallet = new ethers.Wallet("你的私钥");
const signer = wallet.connect(provider);
const routerContract = new ethers.Contract(
router,
[
'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)',
'function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, 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 swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts)',
],
signer
);
const busdContract = new ethers.Contract(
BUSD,
[
'function approve(address spender, uint256 amount) external returns (bool)',
'function balanceOf(address account) external view returns (uint256)'
],
signer
)
const WBNBContract = new ethers.Contract(
WBNB,
[
'function approve(address spender, uint256 amount) external returns (bool)'
],
signer
)
async function main() {
//获取bnb余额
let balance=await provider.getBalance(wallet.address)
const balanceInEth = ethers.utils.formatEther(balance);
console.log(balanceInEth);
// //获取usdt余额
const BUSDamountIn = ethers.utils.parseUnits('0.001', 'ether')
const MaxNum = ethers.utils.parseUnits('1', 'ether')
console.log(BUSDamountIn);
console.log(BUSDamountIn);
let amounts = await routerContract.getAmountsOut(BUSDamountIn, [WBNB, DogeAddress])
const WBNBamountOutMin = amounts[1].sub(amounts[1].div(10));
// console.log(ethers.utils.formatEther(BUSDamountIn));
// console.log(ethers.utils.formatEther(WBNBamountOutMin));
//授权
const approveTx = await WBNBContract.approve(
router,
MaxNum.toString()
);
let reciept = await approveTx.wait();
// console.log(reciept);
//转账
const swapTx = await routerContract.swapExactETHForTokens(
0,
[WBNB, DogeAddress],
wallet.address,
Date.now() + 1000 * 60 * 10,
{
'gasLimit': 1000000,
//'value':BUSDamountIn,
'gasPrice':ethers.utils.parseUnits('10','gwei'),
//'from':wallet.address
value:BUSDamountIn
}
)
receipt = await swapTx.wait();
console.log(receipt);
}
main().then().finally(() => {});
调用swapExactTokensForTokens和swapExactETHForTokens进行转账操作
原vue写的网页完整版在这里:https://github.com/Larsy5/batch_Transfer
觉得不错可以给我点个star