Wie verkettet keccak256 Werte in einem Solidity Smart Contract?

Ich entwickle einen Smart Contract in Solidity, in dem ich den Hash von zwei verketteten Bytes32 auswerten muss. Ich muss die bytes32 nicht verketten, da die sha3- Funktion mehr als einen Parameter unterstützt und ich sie verwende als:

sha3(first, second);

Wo erster und zweiter Bytes32 sind. Ich würde gerne wissen, wie die Verkettung durchgeführt wird, um dasselbe Hash-Ergebnis lokal zu replizieren oder einen Online-Evaluator der keccak-256-Hash-Funktion zu verwenden .

Antworten (1)

Die Argumente werden als Bytes ausgedrückt, links mit Nullen bis zur maximalen Länge des übergebenen Datentyps aufgefüllt und ohne Trennzeichen verkettet.

In Python sieht es bei zwei hexadezimal codierten s, denen ein aufgerufenes und bytes32vorangestellt ist, in etwa so aus:0xfirstsecond

# 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()

Das decode_hexdort verwandelt Hex in ein Array von Bytes.

PS Die modernen Versionen von Solidity und Pysha und wahrscheinlich die relevante Bibliothek in welcher Sprache Sie auch immer verwenden, haben jetzt Versionen von keccak namens keccakor keccak256, daher ist es wahrscheinlich besser, diese zu standardisieren.

"ausgefüllt" bedeutet Linksauffüllung mit Nullen (für diejenigen, die möglicherweise nachschlagen mussten zfill).
Sorry für die Verspätung und vielen Dank für die Antwort :)