keccak256 Fehler Nicht deklarierter Bezeichner in Browser-Solidity

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));
}
Welche Version des Solidity-Compilers verwenden Sie?
0.4.3 nächtlich (im Solidity-Browser)

Antworten (2)

Das keccak256()ist ein Alias ​​für die sha3Funktion, 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 sha3stattdessen 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 keccak256behoben .

keccak256wird empfohlen, es ist identisch mit sha3und 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 keccak256verhindert Verwirrung, wie z. B. Warum stimmen Solidity sha3-Hashes nicht mit dem überein, was andere sha3-Bibliotheken produzieren?