Ich versuche, sha3
/ keccak
-Funktionen in einem Solidity-Vertrag zu verwenden, aber ich erhalte einen seltsamen Fehler:
Untitled:5:13: Fehler: Nicht deklarierte Kennung.
bytes32 d = keccak256 (0x616263);
Der Vertrag :
pragma solidity ^0.4.0;
contract C {
bytes32 d=keccak256(0x616263);
bytes32 a=sha3(uint256(1));
}
Das keccak256()
ist ein Alias für die sha3
Funktion, um Verwechslungen mit dem sha-3-Standard zu vermeiden (Der Opcode heißt immer noch SHA3). Dieser Alias wurde diesen Monat eingeführt, damit der alte Compiler ihn nicht erkennt. also sha3
stattdessen verwenden.
Die verfügbaren Hash-Funktionen sind sha3
, sha256
, ripemd160
:
pragma solidity ^0.4.0;
contract C {
function hashingsha3 (string s) returns (bytes32 hash){
return sha3(s);//<=========
}
function hashingsha256 (string s) returns (bytes32 hash){
return sha256(s); //<=========
}
function ripemd160 (string s) returns (bytes20 hash){
return ripemd160(s); //<=========
}
}
Für Browser-Solidität, wurde in Version 0.4.4 und höher keccak256
behoben .
keccak256
wird empfohlen, es ist identisch mit sha3
und weniger verwirrend, da Ethereum nicht den endgültigen SHA-3-Standard verwendet, sondern den ursprünglichen Gewinneralgorithmus namens Keccak. Die Verwendung von mehr Verträgen keccak256
verhindert Verwirrung, wie z. B. Warum stimmen Solidity sha3-Hashes nicht mit dem überein, was andere sha3-Bibliotheken produzieren?
eth
Sig Touri