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 .
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 bytes32
vorangestellt ist, in etwa so aus:0x
first
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()
Das decode_hex
dort 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 keccak
or keccak256
, daher ist es wahrscheinlich besser, diese zu standardisieren.
eth
zfill
).gatb27