Web3js

解碼 web3 eth 呼叫的合約輸出

  • March 18, 2022

我已經使用 sendRawTransaction 將數據寫入合約,並嘗試使用 web3.eth.call 獲取該函式:

function checkRecord(uint id, bytes email) constant returns (uint id2, bytes email2, bytes hash) {..}

我創建呼叫數據作為

var callData = contract.checkRecord.getData(id, email)

獲得

“0xf1e8a43c0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000156d617467656f2e3230303840676d61696c2e636f6d0000000000000000000000”

並獲取結果作為

result = web3.eth.call({’to’: address, ‘from’: account, ‘data’: callData})

其中的結果是

‘0x000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000156d617467656f2e3230303840676d61696c2e636f6d000000000000000000000000000000000000000000000000000000000000000000000000000000000000’

我如何將結果解碼回 (uint, bytes, bytes) ?

您可以使用 web3 內置功能:

web3.eth.abi.decodeParameters(typesArray, hexString);

連結

最簡單的方法是使用“ abi-decoder ”。我分叉了儲存庫並創建了 index.html 以便於使用。

您可以從以下網址下載和使用它: https ://github.com/Muhammad-Altabba/abi-decoder(一旦他們接受我的拉取請求,您可以稍後在https://github.com/ConsenSys/abi-decoder檢查它)

使用 NPM 下載和執行:

npm install abi-decoder
bower install abi-decoder

然後下載https://github.com/Muhammad-Altabba/abi-decoder/index.html到同一目錄。然後在瀏覽器中打開文件“index.html”。

你會得到:

abi 解碼器 index.html

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