2016-11-22 11 views
1

У меня есть geth 1.5.2 и работайте на testnet с Mist-linux64-0-8-7. Я столкнулся с простой проблемой, когда я пытаюсь отправить эфир (значение) в мой контракт, вызвав любую функцию. Например, даже эта фиктивная функция не работает с ненулевым значением, но работает нормально с нулевым значением:Ошибка отправки значения в контракт с Ethereum smart

function t() returns (uint){ 
    return 1; 
} 

Что удивительное, что я могу видеть предупреждение в Mist с сообщением «Кажется, эта сделка Если вы его подадите, он может потреблять весь газ, который вы отправляете ». Это не зависит от количества газа, которое я предоставляю. Даже если я поставлю 500 000 газа, транзакция, похоже, не будет завершена.

Вы можете увидеть свой результат здесь: https://testnet.etherscan.io/tx/0x3206118530079d1b416dc649c6f0a89283f9457e9189f259b3429cf0c6a998d0

Там есть сообщение

Внимание! Ошибка при выполнении контракта [Плохой скачок назначение]

Я попытался выполнить различные функции в разных контрактах. Я даже использовал функцию sendTransaction, чтобы делать то же самое непосредственно из консоли geth, но я все еще не могу заставить ее работать. Я не нашел, если у кого-то была аналогичная проблема. Пожалуйста, помогите мне, если у вас есть идеи.

ответ

2

От Solidity 0.4 onwards:

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

A throw consumes all gas, поэтому используйте function t() payable returns (uint).