解碼 web3 eth 呼叫的合約輸出
我已經使用 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”。
你會得到: