неверный код операции для this.balance, когда баланс контракта > 0

Я получаю исключение, когда я вызываю getBalance в Remix, а баланс контракта больше 0 (т.е. я отправил немного эфира, используя резервную функцию):

Исключение во время выполнения. (неверный код операции). Пожалуйста, отладьте транзакцию для получения дополнительной информации.

Когда баланс контракта равен 0, getBalance правильно возвращает 0.

pragma solidity ^0.4.0;

contract Test {

    function() payable {}

    function getBalance() public constant returns(uint bal) {
        bal = this.balance;
        return bal;
    }

} 

Ответы (2)

В вашем коде нет ошибки, я думаю, что после отправки транзакции в ваш контракт с помощью fallbackфункции вы вызываете getbalanceфункцию с ненулевым значением. Хотя getbalance не является платной функцией, вы получите указанную ошибку. Итак, перед вызовом getbalance убедитесь, что в значении транзакции remix значение равно 0:

введите описание изображения здесь

действительно, я оставил значение там для каждой попытки. Как неловко :)

У меня были похожие проблемы. Я думаю, что это проблема с кешем браузера. Попробуйте обновить страницу, но сначала скопируйте адрес контракта, чтобы потом посмотреть его, нажав кнопку «По адресу».