基于swap api自动交易机器人

自动交易其实也不是纯全自动, 他至少需要你主动调用函数来执行.

下面就来分析分析他的执行流程.

连接

一个自动交易程序, 首要的条件就是需要一个钱包地址的权限.

和swap最大的不同就在于, 用户只需要点击一次, 后续所有的流程, 包括授权/交易等都会自动执行.

所以第一步需要连接钱包.

可以使用默认的web3 provider, 也可以基于web3-modal等第三方库进行, 这里推荐web3-modal.

交易

用户成功的连接上之后, 有两种方式进行交易:

  1. 和传统的swap一样, 基于授权模式的交易

  2. 基于私钥的静默交易

这里着重讲解第二条, 基于私钥的自动交易.

我们都知道, 控制一个钱包所有权限的核心就是私钥, 他可以调用任何函数.

在我们拿到私钥之后, 即可签名进行交易, 这里交易分为买和卖, 因为他们的操作略有不同, 所以我们分开来说.

买入交易

买入交易也分两种情况, 即主网代币买入和其他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技术,

Subscribe to kuimale
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.