Нет газа во время создания контракта

Несколько дней назад несколько попыток создания контракта завершились неудачно с ошибками out of gas (подтверждено etherscan/ethercamp и getBalance API), однако мне не ясно, что именно не удалось и как это можно диагностировать.

Недостаточно газа для «Нет газа для возврата только что созданного контракта» вызывает расходы

Одна из таких транзакций — 0x47bf53491a14e64bc8938afa97d4b012677f465bddd7c3c0bbfb5df2baa99127.

Если вы проверите его в Etherscan и ether.camp, он будет указан с ошибкой, но при просмотре vmtrace в обоих проводниках или при просмотре вывода debug.traceTransaction об ошибке не сообщается.

Квитанция о транзакции также не показывает ошибок и указывает адрес контракта, как будто все работает.

Что именно пошло не так?

(Я предварительно объявил проблему для geth , но я не уверен, как ее следует квалифицировать)

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

  • 0x0b157cbbcca6079664e1f61e5f5e33241999c1cc1a7dbc1adad347b904c0fb65
  • 0xc712e39a316745d1c0154941bcd9c60eacaf6287596dd3e356249e69509d20c1
  • 0xaf071ce2147cc61d951a07c4e123c99f84b50e3656ceb07bba2c78796875626c
  • 0x47bf53491a14e64bc8938afa97d4b012677f465bddd7c3c0bbfb5df2baa99127
Это не похоже на проблему гетов. Возможно, ошибка Solidity, которая приводит к неправильным возвратам? Есть ли шанс, что вы можете опубликовать метод инициализатора из источника?
Не уверен, что вы имеете в виду под методом инициализации... Я просто проверил traceTransaction vs getBalance до/после использования geth, нашел что-то, чего не понял, а затем посмотрел, что говорят исследователи :)
Я имею в виду функцию в исходном коде с тем же именем, что и контракт
@fairglu: Вы решили проблему? etherscan.io/tx/…
@ryepdx это etherscan.io/tx/… , обратите внимание на ошибку, затем нажмите VMTrace, ошибки нет. В Tjaden это не мой контракт, просто то, что я наблюдал в блокчейне, там есть 4 таких транзакции (перечислим их под вопросом)
Если ваш контракт вызвал исключение во время развертывания, это объяснило бы это. Исключения потребляют весь газ в транзакции и приводят к ошибке «Нет газа».
@ryepdx как вы видите апостериорно, что контракт вызвал исключение?
@fairglu вы видите, что gasLimit, который был отправлен на tx, был полностью израсходован. Это явный признак того, что вы столкнулись с нехваткой газа, которая в основном была вызвана внутренним и явно выброшенным исключением или из-за того, что вы просто предоставили слишком мало газа в первую очередь, а затем просто «сожгли весь свой газ». ".

Ответы (1)

Вы предоставили только 500 000 газа при создании транзакции, и транзакция сожгла все это (см. «Газ» и «Газ, используемый транзакцией» на Etherscan ). Вам просто нужно обеспечить больше газа.

Как видно из Ethstats, текущий лимит газа (на блок) составляет 4 712 388. Вы можете попробовать отправить транзакцию в Testnet или использовать eth_estimategas , чтобы точно узнать, сколько газа потребуется для обработки этой транзакции создания контракта, прежде чем тратить столько газа на одну транзакцию.

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