Solidity
將 web3py 雜湊函式與solidity 雜湊函式匹配
如果我使用 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]);
希望這可以幫助