Ich würde gerne wissen, wie man einen Bytes32-Keccak256-Hash einer Adresse und 2 uint256-Variablen erhält.
Ich möchte etwas, das so aussehen wird. Aber von den Remix-IDE-Fehlern muss ich die 3 Variablen in Bytes32 umwandeln und das dann hashen?
/* here are the variable names and types (Apart from msg.sender which is address */
uint256 _unixTimestamp;
uint256 _timeExpired;
/* This is what I have got so far, what do I need to do to fix the error? */
bytes32 output = keccak256(msg.sender, _unixTimestamp, _timeExpired);
Hier ist die Warnmeldung von der Remix-IDE
Warnung: Diese Funktion akzeptiert nur ein einzelnes "Bytes"-Argument. Bitte verwenden Sie "abi.encodePacked(...)" oder eine ähnliche Funktion, um die Daten zu kodieren.
Bytes32-Ausgabe = keccak256 (msg.sender, _unixTimestamp, _timeExpired);
. . . . . . . . . . . . . .^------------------------------------------------------------- ----------------------- ^
Wie in diesem Thread berichtet: https://github.com/ethereum/solidity/issues/3955
Die neuen abi.encode*()-Methoden bieten einen Ersatz für das Packen, das dann an alle diese Hash-Funktionen übergeben werden kann.
Fazit: Wie @mirg kommentierte, verwenden Sie einfach abi.encodePacked() in keccak256(). Das ist:
keccak256(abi.encodePacked(msg.sender, _unixTimestamp, _timeExpired))
mirg
uint265
stattdessenuint256
andere als dass es funktionieren sollteBlockchainBoy
mirg
keccak256(abi.encodePacked(msg.sender, _unixTimestamp, _timeExpired))