基于swap api自动交易机器人

kuimale
2023-04-08 12:41
发布于 Mirror

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

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

连接

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

和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技术,

0
粉丝
0
获赞
3
精选
数据来源区块链,不构成投资建议!
网站只展示作者的精选文章
2022 Tagge. With ❤️ from Lambda