Intento usar sha3
/ keccak
funciones dentro de un contrato de Solidity, pero aparece un error extraño:
Sin título: 5:13: Error: identificador no declarado.
bytes32 d=keccak256(0x616263);
El contrato :
pragma solidity ^0.4.0;
contract C {
bytes32 d=keccak256(0x616263);
bytes32 a=sha3(uint256(1));
}
the keccak256()
es un alias para la sha3
función para evitar confusiones con el estándar sha-3 (el código de operación todavía se llama SHA3). Este alias se adoptó este mes para que el antiguo compilador no lo reconozca. así que usa en su sha3
lugar.
Las funciones hash disponibles son 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); //<=========
}
}
Para la solidez del navegador, keccak256
se corrigió en la versión 0.4.4 y posteriores.
keccak256
Se recomienda su uso, es idéntico a sha3
, y es menos confuso porque Ethereum no usa el estándar SHA-3 final, sino el algoritmo ganador original llamado Keccak. El uso de más contratos keccak256
evitará confusiones como ¿Por qué los hashes sha3 de Solidity no coinciden con lo que producen otras bibliotecas sha3?
ética
sig touri