Не удается отправить ETH из контракта кошелька

  • ОС Win7.
  • Узел: Паритет 1.3.3
  • Клиент: кошелек Ethereum и Mist (на 2 разных ПК)

Аккаунт владельца контракта полностью финансируется более чем 5 ETH (достаточно, чтобы покрыть комиссию за транзакцию / газ) * Контракт кошелька содержит > 1 ETH fwiw.

Раньше у меня никогда не было этой проблемы, но после перехода на четность (из-за DOS-атак) я решил провести несколько транзакций, чтобы проверить, что все работает правильно.

Сначала я отправил небольшое количество ETH с account1на account2, все работает нормально.

Затем я отправил небольшую сумму с account1на мой wallet contract, работает нормально.

Наконец, я попытался (несколько раз) отправить со wallet contractспины, account1а также попытался отправить в account2. Кошелек Ethereum показывает транзакцию как подтвержденную и показывает «-1,18 ETHER» в истории транзакций в течение короткого времени, но затем исчезает из истории (в тумане транзакция все еще видна). Но балансы принимающей учетной записи и контракта кошелька не показывают никаких изменений.

На приведенных ниже снимках экрана показано потребление газа, но переданное значение равно «0». Я пробовал несколько раз с 2 разных компьютеров и сжигал газ за газом, но не могу вывести эфир из контракта.

Просмотр адреса контракта на etherscan показывает несколько транзакций, которые я пробовал, но значение каждой транзакции равно «0 Ether». Баланс ETH > 1.

Просто для проверки функции я также написал контракт add ownerи успешно добавил в контракт второго владельца. Контракт был создан с использованием кошелька ethererum Add wallet contract- опция (учетная запись с одним владельцем).

Любая помощь будет принята с благодарностью.

РЕДАКТИРОВАТЬ: я использовал Killфункцию для удаления эфира из контракта. К сожалению, контракт теперь бесполезен (так как у него нет владельцев). Я попытался заключить новый контракт, но получил ошибку, что он превышает лимит газа на блокировку (примерно 2 миллиона газа, максимум 3 миллиона).введите описание изображения здесь

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

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

Может вообще не быть проблемы. Есть ли у транзакций, отображаемых на etherscan, значок ошибки? Если они выполнены должным образом, контракт, возможно, только что сработал. Ваши транзакции имеют значение 0, но проверьте внутренние транзакции контракта. Вы должны увидеть контракт -> передача эфира на счет.
Это звучит так, как будто у вас закончился газ, и транзакция была отменена. Однако я не решаюсь предоставить это в качестве ответа, потому что вы не предоставили хэш транзакции для проверки. Комиссия по-прежнему выплачивается майнеру, даже если транзакция не может быть завершена.
Возможный дубликат ethereum.stackexchange.com/questions/1206/…

Ответы (1)

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

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

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