Исключение VM: неверный JUMP при вызове второй функции

Я экспериментирую с Solidity Browser

Вот код моего контракта:

контракт Тест {

    отображение (адрес => uint256) weismap;

    функция bet(uint voice) оплачиваемая возвращает (uint256 weis) {
        если (msg.value==0) бросить;
        weismap[msg.sender]= msg.value;
        вернуть weismap[msg.sender];
    }

    Функция test() возвращает (uint myVote) {
           вернуть 1;
    }
}

Если я установлю значение транзакции 1

Я установил в качестве значения транзакции значение 1

,создайте контракт и вызовите функцию bet с 1 в качестве параметра

функция выполняется успешно.

Если после этого я вызову функцию test(), я получу

Исключение виртуальной машины: неверный JUMP

Любая идея, о том, что не так?

Когда в браузере ставишь 1, то понимается как 1 эфир, а не 1 вэй.
Да, я это знаю, но не понимаю, при чем здесь ошибка. К тому же msg.value находится в wei. Вы уверены, что это актуально?

Ответы (1)

Вам нужно добавить constantключевое слово в test()функцию, например:

pragma solidity ^0.4.0;
contract Test {
    mapping (address => uint256) weismap;

    function bet(uint vote) payable returns (uint256 weis) {
        if (msg.value==0) 
            throw;
        weismap[msg.sender]= msg.value;
        return  weismap[msg.sender];
    }

    function test() constant returns (uint myVote)  {
        return 1;
    }
}

Вызов bet(...)со значением 2. Обратите внимание, что я также отправляю 2 эфира с транзакцией:

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

Теперь я звоню test() И оставил значение 2 . Этот вызов test()терпит неудачу, так как константная функция вызывается как транзакция, а не чтение значений из блокчейна:

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

Если я вызываю test() И я установил пустое значение , этот вызов test()завершается успешно, поскольку константная функция вызывается как чтение значений из блокчейна:

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

Извините, но не получается. Вы пробовали это сами? Это работает?
Ага. Пробовал в браузере с локальным geth 1.4.11-stable. Ответ обновлен с более подробной информацией.
Да, но вы не уравняли ставку. Не могли бы вы попробовать это, пожалуйста? Сначала вы устанавливаете стоимость транзакции. Затем коллируйте ставку, скажем, 2. Затем тестируйте. Это работает? Спасибо