Web3js
在客戶端解碼交易輸入的最佳方式
我需要在客戶端解碼交易輸入。像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 文件本身。