Ошибка Mist Testnet «похоже, эта транзакция завершится неудачно»

Я очень новичок в Ethereum и просто работаю над некоторыми ранними руководствами с использованием тестовой сети. Моя версия актуальна; блокчейн тоже актуален; и у меня есть только одна учетная запись в хранилище ключей, основная учетная запись.

Когда я пытаюсь развернуть простой контракт (или любой другой контракт, включая примеры на ethereum.org), код компилируется правильно:

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

Когда я продолжаю и нажимаю «Развернуть контракт», всплывающее окно подтверждения выдает мне эту ошибку: «Кажется, эта транзакция завершится ошибкой. Если вы отправите ее, она может потреблять весь газ, который вы отправляете».

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

Это дает мне эту ошибку независимо от того, отправляю ли я 1 или 20, и независимо от суммы комиссии, которую я выбираю.

Если я нажму независимо, контракт будет создан в пользовательском интерфейсе кошелька тумана, но появится другое сообщение об ошибке под транзакцией, в котором говорится, что данные не достигли блокчейна: «Нет данных, размещенных на адресе контракта!».

Мои извинения, если это основное. Я просмотрел предыдущие вопросы, и они либо не совсем охватывали этот сценарий, либо имели исправление, которое не сработало для меня (например, повторный выбор учетной записи FROM непосредственно перед развертыванием)

Спасибо заранее.

Ответы (2)

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

Надеюсь, поможет.

ОБНОВИТЬ:

Пример для наглядности.

pragma solidity ^0.4.2;
contract Example {

   string public brandName;

   function Example(string yourCompanyName) payable { // <--- here    
       brandName = yourCompanyName;
   }

}

Как ускользнуло ранее, нет никакого способа заставить контракт отправить эфир, поэтому любые средства, депонированные там, остаются на месте. Мы могли бы исправить это с помощью простой функции неразборчивого вывода средств.

function withdraw(uint amount) public returns(bool success) {
   if(!msg.sender.send(amount) throw;
   return true;
}
Ура, Роб, на этом этапе мне не хватило 32 комментариев, однако пропуск количества эфира предотвратил появление сообщения об ошибке и позволил мне развернуть контракт в общедоступной тестовой сети. Большое спасибо за ваш ответ - он решил проблему, с которой я столкнулся.
Спасибо за ответ. Я обновил свой ответ, чтобы сосредоточиться на решении, которое сработало в этом случае.
если вы предоставите несколько примеров кода с оплатой, это было бы хорошо
@dark_ruby. Добавлен пример.
Как упоминалось stackoverflow.com/questions/40750913/… , начиная с Solidity 0.4: бросок потребляет весь газ, поэтому используйтеfunction t() payable returns (uint)
два слова для разработчиков Эфириума: "КОДЫ ОШИБОК"

такая же проблема с использованием тумана и testrpc, мой код

contract sampletoken{
mapping(address=>unit256) public balances;
function sampletoken(unit256 initialsupply) payable
{
balances[msg.sender]=initialsupply;
}
}

получаю ту же ошибку при развертывании, вы можете найти скриншот на https://i.stack.imgur.com/R5BLz.png

Это не ответ, и его не должно быть в поле ответа. Пожалуйста, переместите его в комментарий, чтобы он был более полезным.
@omkar khair у меня не такая уж большая репутация
Комментарии не должны требовать репутации. В любом случае размещение вопроса в поле ответа тоже не вариант. Это приведет к штрафу в репутации.