Ethereum-Wallet-Dapp
如何從散列輸出中提取值
我正在嘗試對標準投票 dapp 進行更新。我的目標是列出投票給候選人的選民。到目前為止,我已經實現了以下內容:
投票.sol:
struct voter { bytes32 votedFor; bool hasVoted; } mapping (bytes32 => uint8) public votesReceived; // Mapping for persons who have already voted mapping (bytes32 => voter) public voters; function lookUpVoter(bytes32 hashedVoter) view public returns (bytes32){ bytes32 candidateDetails = voters[hashedVoter].votedFor; return candidateDetails; }
index.js:
function lookUpVoter(){ voterName = $("#voter-info").val(); var vals = contractInstance.lookUpVoter.call(voterName); $("#votes-cast").html(vals); }
我從 index.js 收到的輸出是雜湊值“0x4b6576696e2042000000000000000000000000000000000000000000000000000”。我需要候選人姓名。請幫助我確定程式碼中缺少的內容。
謝謝!!
輸出不是雜湊,而是
bytes32
.您只需
toAscii
要從 Web3.js 呼叫該函式:var str = "0x4b6576696e204200000000000000000000000000000000000000000000000000" web3.toAscii(str.slice(0,18))
“凱文 B”
請注意,我們只需要 32 個字節的十六進制的前 16 個字元,這意味著如果包含 18 個字元
0x
,則使用該slice()
函式。請參閱此處的文件。
或者對於 Web3.js 1.0,
web3.utils.hexToAscii
按照此處記錄的方式使用。
那不是雜湊值,那是您正在查找的字元串,它只是十六進制編碼。如果您只是將十六進製字元串插入函式
web3.toAscii
,它將返回它的 ascii 版本。