Solidity

將 web3py 雜湊函式與solidity 雜湊函式匹配

  • January 6, 2019

如果我使用 web3py 來散列一些數據,就像這樣,

msgHash = w3.soliditySha3(['bytes32','bytes32'], [dataBytes, saltBytes]);

在 Solidity 合約中散列並期望相同的結果散列的正確方法是什麼?

在 Solidity (v0.4.24) 我試過了,

keccak256(abi.encodePacked(data, salt))

sha3(data, salt)

還有其他一些方法,但沒有運氣。我相信有一種特定的方法可以做到這一點,並且確切的雜湊算法並不總是匹配的。在 Solidity 中,我使用的數據類型是,

bytes32

text= 前綴會搞砸嗎?Solidity 是否還有特定的前綴?

dataBytes = w3.toBytes(text=data);
saltBytes = w3.toBytes(text=salt);

問題是你如何管理文本。你可以做:

data = 'some data';
salt = 'some salt data';      
msgHash = w3.soliditySha3(['bytes32','bytes32'], [bytes(data.encode()), bytes(salt.encode())]);

堅固:

string memory data = 'some data';
string memory salt = 'some salt data';
hash = keccak256(abi.encodePacked(data,salt));

這將產生相同的雜湊。

如果你有例如 int256 應該沒有問題:

data = 'some data';
salt = 1234567;      
msgHash = w3.soliditySha3(['bytes32','int256'], [bytes(data.encode()), salt]);

希望這可以幫助

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