неверный отправитель при передаче токена BEP20

#node.js #blockchain #web3 #binance #bep20

Вопрос:

Здравствуйте,я хочу перенести токен bep20 с одного адреса на другой адрес, используя api ankr и провайдера для web3, но получил ошибку типа

Неверный Отправитель

Вот код, который я использовал для токена передачи, я использовал идентификатор chaind для binanace, например bnb, bsc binance smart chain mainnet

 let tokenAddress = '0x41XXXXXXXXXXXXXXXXXXXXXXXXXXXXXbce' //  contract address
 
  let toAddress = req.params.toaddress // where to send it
  let fromAddress = req.params.fromaddress // your wallet
  let pKey = req.params.privatekey.split('0x');
  let privateKey = Buffer.from(pKey[1],'hex');
  
  let contractABI = [
    // transfer
    {
      'constant': false,
      'inputs': [
        {
          'name': '_to',
          'type': 'address'
        },
        {
          'name': '_value',
          'type': 'uint256'
        }
      ],
      'name': 'transfer',
      'outputs': [
        {
          'name': '',
          'type': 'bool'
        }
      ],
      'type': 'function'
    }
  ]

  let contract = new web32.eth.Contract(contractABI, tokenAddress, {from: fromAddress})

  // 1e18 === 1 HST
  let amount1 = req.params.amount;

  let amount = web32.utils.toBN(amount1*1000000000000000000)
  // console.log(amount);
  web32.eth.getTransactionCount(fromAddress)
    .then((count) => {
      let rawTransaction = {
        'from': fromAddress,
        'gasPrice': web32.utils.toHex(20 * 1e9),
        'gasLimit': web32.utils.toHex(210000),
        'to': tokenAddress,
        'value': 0x0,
        'data': contract.methods.transfer(toAddress, amount).encodeABI(),
        'nonce': web32.utils.toHex(count),
        "chainId": 56
      }
      let transaction = new EthereumTx(rawTransaction,{chain:'bsc'})
      transaction.sign(privateKey)
      web32.eth.sendSignedTransaction('0x'   transaction.serialize().toString('hex'),(err,hash) => {
        console.log(err)
        var url = "https://etherscan.io/tx/" hash
        res.json({hash: hash, status_url: url,success:'true',message : 'Transaction has been pushed.'});
      })
        
    })
 

Ответ №1:

 transaction.sign(privateKey)
web32.eth.sendSignedTransaction('0x'   transaction.serialize().toString('hex'),(err,hash) => {
 

Вы передаете неподписанную транзакцию, вам нужно передать подписанную.

 const signedTx = transaction.sign(privateKey)
web32.eth.sendSignedTransaction('0x'   signedTx.serialize().toString('hex'),(err,hash) => {
 

Смотрите пример в файле readme (найдите const signedTx фрагмент кода).