Я написал умный контракт для базового ICO, используя стандарт токена ERC223.Когда я проверил код в securify.ch (https://securify.chainsecurity.com/), он показывает некоторые ошибки безопасности. Вот код, где я получаю эти ошибки
Код:
function transfer(address _to, uint _value, bytes _data) public {
uint codeLength;
assembly {
codeLength := extcodesize(_to)
}
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
if(codeLength>0) {
ERC223ReceivingContract receiver = ERC223ReceivingContract(_to);
receiver.tokenFallback(msg.sender, _value, _data);
}
emit Transfer(msg.sender, _to, _value, _data);
}
В строке ниже я получаю сообщения об ошибках.
receiver.tokenFallback(msg.sender, _value, _data);
Ошибка: этот контракт позволяет произвольному пользователю выполнять ненадежный код от имени контракта, поскольку любой пользователь может передать произвольный адрес * 1011.* и произвольные данные _data
, которые предоставляются в качестве аргумента метода. Модуль адресации определяет цель инструкции вызова, а _data
определяет функцию, вызываемую в ненадежном контракте.