что означает «Предупреждение: эта функция принимает только один аргумент «байты». Пожалуйста, используйте «abi.encodePacked (...)» означает

В этом вопросе OP сталкивается с предупреждением при использовании keccak256функции в Solidity:

Предупреждение: эта функция принимает только один аргумент «байты». Пожалуйста, используйте "abi.encodePacked(...)" или аналогичную функцию для кодирования данных.

uint256 _unixTimestamp;
uint256 _timeExpired;

bytes32 output = keccak256(msg.sender, _unixTimestamp, _timeExpired);

В чем причина этой ошибки - зачем мне ее использовать abi.encodePackedи что она делает по сравнению с ее использованием, как показано выше?

Ответы (2)

До 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)
);