我试图实现我自己的小修改承诺&公开投票。我对雷斐尔阶段有意见。显示metod签名如下:
function reveal(bytes32[] memory _reveals, bytes32[] memory _commits)所以我需要比较散列显示短语和提交短语。我发现这些散列不匹配。
为了演示我的问题,我创建了这个契约:
pragma solidity >=0.5.10;
contract Utils{
event HashedData(bytes32);
function getHash(bytes32 data) public pure returns(bytes32){
return keccak256(abi.encodePacked(data));
}
function checkHash(bytes32 hash, bytes32 data) public returns(bool){
bytes32 hashedData = getHash(data);
emit HashedData(hashedData);
return hash==hashedData;
}
}示例输入数据:短语:"1_john“到bytes32
数据: 0x315f6b6f74000000000000000000000000000000000000000000000000000000
数据散列(没有0x)
散列: 0x90a0076f07f9884805bdc4d668c55756ff42238a0ad7b824b8a267783e822544
因此,我收到:

我在哪里犯了错?
发布于 2019-07-29 04:34:38
您似乎将"315f6b6f74000000000000000000000000000000000000000000000000000000"视为字符串,而不是实际的十六进制字节序列。
通过web3 0.2.x:
web3.sha3('315f6b6f74000000000000000000000000000000000000000000000000000000')
> "0x90a0076f07f9884805bdc4d668c55756ff42238a0ad7b824b8a267783e822544"
web3.sha3('315f6b6f74000000000000000000000000000000000000000000000000000000', { encoding: 'hex' })
> "0x1a32a86fd2fa1e85655c2d86eadd160787458aff3d70eefae6150b79b648693f"注意,当您将第二个值解释为十六进制时,第二个值是正确的。如果您使用的工具不支持十六进制输入,则需要找到不同的工具。
https://ethereum.stackexchange.com/questions/73389
复制相似问题