Web3js

在客戶端解碼交易輸入的最佳方式

  • October 4, 2021

我需要在客戶端解碼交易輸入。像ethereum-input-data-decoder這樣的庫需要像fs.

現在我將一種類型的合約方法解碼如下:

const getERC20TransferByHash = async (hash) => {
 const tx = await web3.eth.getTransaction(hash)
 if (
   tx !== null &&
   (tx.input.length === 138 || tx.input.slice(2, 10) === 'a9059cbb')
 ) {
   const receiver = web3.utils.toChecksumAddress('0x' + tx.input.slice(34, 74))
   const amount = web3.utils.toBN('0x' + tx.input.slice(74))
   const contractAddress = tx.to
   const sender = web3.utils.toChecksumAddress(tx.from)
   return { receiver, amount, contractAddress, hash, sender }
 }
 return {}
}

解碼web3.utils.toAscii(transaction.input)也不起作用。

有沒有一種方法可以讓它變得容易?

你能試試decodeParameters嗎?喜歡:

const erc20TransferABI = [{
       type: "address",
       name: "receiver"
   },{
       type: "uint256",
       name: "amount"
   }];
const decoded = web3.eth.abi.decodeParameters(
   erc20TransferABI,
   tx.input.slice(10)); // Or (11), not sure

甚至可能,erc20TransferABI取自 ABI 文件本身。

引用自:https://ethereum.stackexchange.com/questions/110955