Solidity
keccak256 如何在 Solidity 智能合約中連接值?
我正在使用 Solidity 開發一個智能合約,我需要在其中評估兩個連接字節 32 的雜湊值。我不必連接 bytes32,因為sha3函式支持多個參數,我將其用作:
sha3(first, second);
其中第一個和第二個是字節 32。我想知道如何執行連接以在本地複制相同的雜湊結果,或者使用keccak-256 雜湊函式的線上評估器。
參數表示為字節,用零填充到您傳入的數據類型的最大長度,並且在沒有任何分隔符的情況下連接起來。
在 Python 中,給定兩個 hex 編碼
bytes32
的 s 前面加上一個0x
被呼叫的first
andsecond
,它看起來像:# keccak, change before upgrading pysha >= 3.10 from sha3 import sha3_256 from rlp.utils import decode_hex my_hash = "0x" + sha3_256( decode_hex(first[2:].zfill(64)) + decode_hex(second[2:].zfill(64)) ).hexdigest()
那裡正在將
decode_hex
十六進制轉換為字節數組。PS Solidity 和 pysha 的現代版本,以及您使用的任何語言的相關庫,現在都有名為
keccak
or的 keccak 版本keccak256
,因此最好對它們進行標準化。