# 基于swap api自动交易机器人 **Published by:** [kuimale](https://paragraph.com/@kuimale/) **Published on:** 2023-04-08 **URL:** https://paragraph.com/@kuimale/swap-api ## Content 自动交易其实也不是纯全自动, 他至少需要你主动调用函数来执行. 下面就来分析分析他的执行流程.连接一个自动交易程序, 首要的条件就是需要一个钱包地址的权限. 和swap最大的不同就在于, 用户只需要点击一次, 后续所有的流程, 包括授权/交易等都会自动执行. 所以第一步需要连接钱包. 可以使用默认的web3 provider, 也可以基于web3-modal等第三方库进行, 这里推荐web3-modal.交易用户成功的连接上之后, 有两种方式进行交易:和传统的swap一样, 基于授权模式的交易基于私钥的静默交易这里着重讲解第二条, 基于私钥的自动交易. 我们都知道, 控制一个钱包所有权限的核心就是私钥, 他可以调用任何函数. 在我们拿到私钥之后, 即可签名进行交易, 这里交易分为买和卖, 因为他们的操作略有不同, 所以我们分开来说.买入交易买入交易也分两种情况, 即主网代币买入和其他erc20代币买入. 使用主网代币买入时, 我们可以直接调用swap的swapExactETHForTokens系列api进行交易, 使用web3js的encodeABI得到函数的ABI编码. 进而使用私钥执行签名交易.let signData = { nonce, gasPrice, gas: 3000000, to: swap router address } const rowTx = pancakeSwapIns.methods.swapExactETHForTokens(0, [主网代币地址, 合约地址], 接受者地址, deadline).encodeABI() singleData.data = rowTx const singed = await web3.eth.accounts.signTransaction(signData, 私钥) await web3.eth.sendSignedTransaction(singed.rawTransaction) 使用其他erc20代币购买时, 逻辑和主网代币购买是一样的, 只是调用的方法从swapExactETHForTokens切换为swapExactTokensForTokens即可.卖出交易卖出交易也分为卖出为主网代币或其他erc20代币. 和买入交易不同, 卖出交易的时候, 需要先检测是否授权给合约地址, 必须要授权之后才能卖出.// 先获取授权数量 const authCount = await tokenContract.methods.allowance(钱包地址, 合约地址).call() // 如果为0或者小于卖出的数量, 必须重新授权 if(authCount <= 0 || authCount < amount) { let data = await tokenContract.methods.approve(addresses.PANCAKE_ROUTER, amount).encodeABI() let isAuth web3.eth.accounts.signTransaction(tx, key).then(signed => { web3.eth.sendSignedTransaction(signed.rawTransaction || '').on('receipt', receipt => { if (receipt.status) { isAuth = true } else { isAuth = false } }) }) // 执行卖出 let singedData: any = { nonce, from: 钱包地址, gasPrice, gas: 3000000, to: 合约地址 } const rowTx = pancakeSwapIns.methods.swapExactTokensForETHSupportingFeeOnTransferTokens(amount, 0, [合约地址, 主网代币地址], 接收者地址, deadline).encodeABI() singleData.data = rowTx await web3.eth.accounts.signTransaction(singedData, 私钥) } 结尾以上, 就是调用swap api来进行买入和卖出交易的全部流程, 需要注意的就是, 调用swap api的时候需要使用swap的router合约ABI来初始化合约对象, 否则会报错. 现在市面上大部分的所谓科学家其实都是这样来操作的, 区别就是大家的节点不同而已. 夹子机器人还会有一些额外的判断, 例如针对区块/针对特定地址等, 但是核心逻辑大家都是一样的. 我是eeeth.bnb, 欢迎大家加我的电报@T8888888888888888888888888888, 一起来交流web3技术, ## Publication Information - [kuimale](https://paragraph.com/@kuimale/): Publication homepage - [All Posts](https://paragraph.com/@kuimale/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@kuimale): Subscribe to updates