Использование браузера Solidity ( https://ethereum.github.io/browser-solidity/ ) для майнинга контракта в тестовой сети с внедренной учетной записью web3 и metamask выдает эту ошибку:
callback contain no result Gas required exceeds limit: 3000000
Ожидается, что этот контракт (исходный код => https://gist.github.com/computerphysicslab/f362383f9d3fed26becba48b934bbcfc ) будет стоить около 6 миллионов газа для развертывания (согласно среде JS VM). Тем не менее, при попытке увеличить лимит газа выбрасываются следующие ошибки:
callback contain no result Gas required exceeds limit: 4000000
callback contain no result Gas required exceeds block gas limit: 5000000
callback contain no result Gas required exceeds block gas limit: 6000000
callback contain no result Gas required exceeds block gas limit: 10000000
...
Таким образом, похоже, что добыча контракта невозможна, потому что существует ограничение на блок газа около 5 миллионов газа. Можно ли как-то преодолеть этот предел?
Ссылки:
Сбой компилятора браузера Solidity
почему браузерный компилятор солидности падает, когда код слишком длинный?
Ошибка превышения лимита газа при развертывании рядом с контрактом лимита блока газа
Если майнеры не увеличат лимит блочного газа, ваш единственный вариант — разделить контракт на несколько контрактов.
Таким образом, у каждого контракта есть свой адрес, и вы можете совершать звонки между ними. Например, краудсейл ICO можно разделить на:
Также разделение помогает аудиту безопасности, поскольку каждый контракт имеет ограниченную область действия.
Каждый контракт можно развернуть независимо, и с помощью метода конфигурации вы завершаете настройку.
На самом деле максимальное количество газа за транзакцию eth.getBlock('latest').gasLimit
составляет около 4,7 миллиона на сегодняшний день.
Редактировать: лимит газа увеличивается, и кажется, что цель состоит в том, чтобы достичь лимита в 6,7 миллиона, поэтому, ничего не делая, вы вскоре сможете развернуть свой контракт. Источник: Реддит
Чтобы развернуть ваш контракт, вы должны снизить стоимость развертывания.
Есть способы снизить стоимость газа:
Например, вы можете попробовать использовать SafeMath вместо своей собственной реализации.
Или даже если вы это сделали, но вы можете удалить часть, используемую для отладки, например
// @notice For debugging purposes when using solidity online browser
function whoAmI() constant returns (address) {
return msg.sender;
}
Кстати, обсуждение увеличения лимита газа в разгаре, некоторые майнерские пулы уже увеличили его, но некоторые крупные все еще используют этот «старый» лимит, используемый для предотвращения DDOS-атак. Эта ветка на Reddit немного объясняет текущую проблему с лимитом газа.
Вам нужно будет поместить некоторые вещи, такие как safemath, в библиотечный контракт , который вы можете развернуть как отдельные контракты. В противном случае вы не сможете сократить расходы на газ.
Хуан Игнасио Перес Сакристан
Джефф Коулман
Исмаэль
Хуан Игнасио Перес Сакристан
Исмаэль
Исмаэль