Solidity

keccak256 如何在 Solidity 智能合約中連接值?

  • March 31, 2017

我正在使用 Solidity 開發一個智能合約,我需要在其中評估兩個連接字節 32 的雜湊值。我不必連接 bytes32,因為sha3函式支持多個參數,我將其用作:

sha3(first, second);

其中第一個第二個是字節 32。我想知道如何執行連接以在本地複制相同的雜湊結果,或者使用keccak-256 雜湊函式的線上評估器

參數表示為字節,用零填充到您傳入的數據類型的最大長度,並且在沒有任何分隔符的情況下連接起來。

在 Python 中,給定兩個 hex 編碼bytes32的 s 前面加上一個0x被呼叫的firstand second,它看起來像:

# 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 的現代版本,以及您使用的任何語言的相關庫,現在都有名為keccakor的 keccak 版本keccak256,因此最好對它們進行標準化。

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