Out of Gas вызывает предварительно скомпилированные контракты на частных блокчейнах

Почему предварительно скомпилированные контракты приводят к Out of Gas на частных блокчейнах?

Некоторые лакомые кусочки представлены в документации Solidity , но можно ли их объяснить подробнее?

Может случиться так, что вы столкнулись с Out-of-Gas для sha256, ripemd160или ecrecoverв частном блокчейне. Причина этого в том, что они реализованы как так называемые предварительно скомпилированные контракты, и эти контракты действительно существуют только после того, как они получили первое сообщение (хотя их код контракта жестко запрограммирован). Сообщения к несуществующим контрактам обходятся дороже, поэтому выполнение приводит к ошибке Out-of-Gas. Обходной путь для этой проблемы состоит в том, чтобы сначала отправить, например, 1 Wei на каждый из контрактов, прежде чем использовать их в своих реальных контрактах. Это не проблема в официальной или тестовой сети.

Что происходит, что «эти контракты действительно существуют только после того, как они получили первое сообщение (хотя их код контракта жестко запрограммирован)»?

Как отправка 1 Wei делает эти контракты «действительно существующими»?

Избежит ли выделения 1 wei в генезисном блоке частного блокчейна для каждого из этих контрактов Out of Gas?

Ответы (1)

Существует общее правило стоимости газа, которое гласит, что отправка сообщения на любую несуществующую учетную запись стоит больше, чем отправка сообщения на существующую учетную запись. Это также относится к счетам предварительно составленных контрактов.

Чтобы не платить более высокую стоимость сообщения, вам необходимо заранее создать учетную запись назначения. По этой причине некоторые тестовые/частные генезис-блоки создают учетные записи для предварительно скомпилированных контрактов, устанавливая их балансы на 1 wei, например, тестовый генезис-блок .