文章/教程 nodejs 转账 ERC20 的代币

gtokentool · 2024年12月23日 · 16 次阅读

nodejs 转账 ERC20 的代币 继上次的转账 eth 之后,我们这次来继续看怎么转账 ERC20 的代币

安装依赖和初始化 web3 这里就不对赘述了,不知道怎么初始化 web3 的,可以看我之前的一篇文章。

初始化合约对象 Contract

上次我们是新建了一个 start 方法。这次我们就在里面新建一个 startContract 方法,下面的换成执行 startContract 方法

const startContract = async () => {
    let currentAddress = '0xe208D2fB37df02061B78848B83F02b4AD33540e4'
    let toAddress = '0x3EcAa09DD6B8828607bba4B1d7055Ea1143f8B94'

  // 代币我们这次还是选择goerli测试链上面的uni
    const uniContractAddress = '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984'    // uni erc20代币合约地址

    const uniswapAbi = []   // uniabi信息,可以自己去找一下,也可以看我的web3学习笔记里面有具体的寻找方法

    const uniToken = new web3.eth.Contract(uniswapAbi, uniContractAddress)

}
startContract()

这样我们就有了合约对象 Contract

初始化参数

我们把交易时需要的一些参数准备一下

const privateKey = Buffer.from('你的钱包密钥', 'hex')
// 设置amount 之前需要先获取到token币种的精度,这里的decimals 值为18,就是18
const decimals = await uniToken.methods.decimals().call()

// amount = 转账数量 * decimals 这里就是转账了1uni代币
const amount = web3.utils.toHex(1 * Math.pow(10, decimals))

const count = await web3.eth.getTransactionCount(currentAddress)

const txParams = {
  from: currentAddress,
  to: uniContractAddress,
  gasPrice: web3.utils.toHex(web3.utils.toWei('10', 'gwei')),
  gasLimit: web3.utils.toHex(210000),
  value: web3.utils.toHex(0),
  data: uniToken.methods.transfer(toAddress, amount).encodeABI(),
  nonce: web3.utils.toHex(count)
}

const tx = new EthereumTx(txParams, {
  chain: 'goerli'
})

tx.sign(privateKey)

这样就有了所需的参数,并且已经将密钥签了名。 以上 ethereumjs-tx 的签名方案,使用的是 ethereumjs-common,默认有:

mainnet ropsten rinkeby kovan goerli (final configuration since v1.1.0) 这些链的话可以直接签。其他链的话需要自己 requireethereumjs-common。

const  Common = require('ethereumjs-common').default
const blockchain = Common.forCustomChain(
    'mainnet', {
        name: 'Fantom Opera',
        networkId: 250,
        chainId: 250
    },
    'petersburg'
)

const tx = new EthereumTx(txParams, {
    common: blockchain
})

tx.sign(privateKey)

发送交易

web3.eth.sendSignedTransaction('0x' + tx.serialize().toString('hex'))
  .on('transactionHash', console.log)
  .catch(err => {
    console.log({err});
  })

这样我们就已经把代币发送出去了。起交流,https://t.me/+XB-mhZfcnQExOTdl

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请 注册新账号