En esta pregunta, el OP se encuentra con una advertencia al usar la keccak256
función en Solidity:
Advertencia: esta función solo acepta un único argumento de "bytes". Utilice "abi.encodePacked(...)" o una función similar para codificar los datos.
uint256 _unixTimestamp;
uint256 _timeExpired;
bytes32 output = keccak256(msg.sender, _unixTimestamp, _timeExpired);
¿Cuál es la razón detrás de este error? ¿Por qué necesito usarlo abi.encodePacked
y qué hace en comparación con usarlo como se muestra arriba?
Antes de Solidity 0.5.0, ambos funcionaban de la misma manera. La advertencia es parte del proceso de desaprobación de las versiones de argumentos variables keccak256
y otras funciones hash.
A partir de Solidity 0.5.0, sha3
se eliminó. Consulte https://github.com/ethereum/solidity/issues/3955 para obtener más detalles.
Significa que ahora necesita cambiar su código a:
uint256 _unixTimestamp;
uint256 _timeExpired;
bytes32 output = keccak256(
abi.encodePacked(msg.sender, _unixTimestamp, _timeExpired)
);