Ethereum-Wallet-Dapp

如何從散列輸出中提取值

  • July 30, 2018

我正在嘗試對標準投票 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 版本。

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