Tron sign transaction over trustwallet/wallet-core

375 Views Asked by At

Please tell me what I'm doing wrong.

I am trying to create and sign a Tron transaction using trustwallet/wallet-core, but I get a TAPOS_ERROR error when broadcasting the transaction via https://api.shasta.trongrid.io/wallet/broadcasttransaction

{
  code: 'TAPOS_ERROR',
  txid: '90e89ae750029eca100c7319a268b7859ebb3a4fd59388f2d4f16f71ec4dd139',
  message: '5461706f7320636865636b206572726f722e'
}

Full code https://gist.github.com/profbiss/aefc257c55695b5f9b2b2bf21484c381

  let now_block = await fetch("https://nile.trongrid.io/wallet/getnowblock", {method: "POST"}).
  then(resp => resp.json()).catch(err => console.error(err))
  console.log("NOW", now_block);

  let options = {
    method: 'POST',
    headers: {accept: 'application/json', 'content-type': 'application/json'},
    body: JSON.stringify({num: now_block.block_header.raw_data.number-10})
  };
  let prev_block = await fetch("https://nile.trongrid.io/wallet/getblockbynum", options).
  then(resp => resp.json()).catch(err => console.error(err))

  console.log("prev", prev_block)
  let transaction = TW.Tron.Proto.Transaction.fromObject({
    timestamp: prev_block.block_header.raw_data.timestamp,
    expiration: prev_block.block_header.raw_data.timestamp + (10*60*60*1000),
    feeLimit: 100000000,
    transferAsset: TW.Tron.Proto.TransferAssetContract.fromObject({
      assetName: 'TRX',
      ownerAddress: from,
      toAddress: to,
      amount: 10000,
    }),
    blockHeader: TW.Tron.Proto.BlockHeader.fromObject({
      txTrieRoot: HexCoding.decode(prev_block.block_header.raw_data.txTrieRoot),
      parentHash: HexCoding.decode(prev_block.block_header.raw_data.parentHash),
      witness_address: HexCoding.decode(prev_block.block_header.raw_data.witness_address),
      number: prev_block.block_header.raw_data.number,
      version: prev_block.block_header.raw_data.version,
      timestamp: prev_block.block_header.raw_data.timestamp,
    })
  })

  let input = TW.Tron.Proto.SigningInput.fromObject({
    transaction: transaction,
    privateKey: key.data()
  })

  let result = AnySigner.sign(TW.Tron.Proto.SigningInput.encode(input).finish(), CoinType.tron)
  let output = TW.Tron.Proto.SigningOutput.decode(result)

0

There are 0 best solutions below