Ошибка функции выгорания: требуемый газ превышает норму или транзакция всегда завершается сбоем

Я создал контракт с помощью Remix.

Когда я запускаю функцию burnFrom(), она показывает:

gas required exceeds allowance or always failing transaction.

Что я делаю не так?

function burnFrom(address _from, uint256 _value) onlyOwner public returns 
(bool success) {
    require(balanceOf[_from] >= _value);                
    require(_value <= allowance[_from][msg.sender]);    
    balanceOf[_from] -= _value;                         
    allowance[_from][msg.sender] -= _value;             
    totalSupply -= _value;                              
    emit Burn(_from, _value);
    return true;
}
Как говорит ошибка, транзакция всегда терпит неудачу. Вы должны проверить, что все требуемые условия выполнены.

Ответы (1)

Убедитесь, что вы либо используете виртуальную машину javascript, либо у вас разблокирована метамаска и вы подключены к тестовой сети, если используете внедренный web3.

Убедитесь, что у вас есть сопоставление допусков, которое выглядит следующим образом:

mapping(address => mapping(address => uint256)) public allowance;

И что ваше событие Burn выглядит так:

event Burn(address indexed from, uint256 value);

Если у вас оба они правильные, вероятно, что-то не так с модификатором onlyOwner.

ОП должен был объявить эти сопоставления, иначе он получит ошибку времени компиляции в ремиксе. Код, скомпилированный успешно, означает, что нет случаев, чтобы он пропустил объявления.