В этом вопросе OP сталкивается с предупреждением при использовании keccak256
функции в Solidity:
Предупреждение: эта функция принимает только один аргумент «байты». Пожалуйста, используйте "abi.encodePacked(...)" или аналогичную функцию для кодирования данных.
uint256 _unixTimestamp;
uint256 _timeExpired;
bytes32 output = keccak256(msg.sender, _unixTimestamp, _timeExpired);
В чем причина этой ошибки - зачем мне ее использовать abi.encodePacked
и что она делает по сравнению с ее использованием, как показано выше?
До Solidity 0.5.0 оба работали одинаково. Предупреждение является частью процесса устаревания версий с переменным аргументом keccak256
и других хеш-функций.
Начиная с Solidity 0.5.0, sha3
был удален. Подробнее см. https://github.com/ethereum/solidity/issues/3955 .
Это означает, что теперь вам нужно изменить свой код на:
uint256 _unixTimestamp;
uint256 _timeExpired;
bytes32 output = keccak256(
abi.encodePacked(msg.sender, _unixTimestamp, _timeExpired)
);