Есть контракт:
contract a is b,c{
...
address d = address(new d());
address e = address(new e());
address f = address(new f());
address g = address(new g());
address h = address(new h());
...
В таком виде всё компилируется, но при заливке превышение по газу. Увеличиваю газ, вплоть до размера нужного всему блоку (testrpc, если важно), но газа не хватает для заливки. Привожу контракт к виду:
contract a{
...
...
- заливается нормально. Сразу после этого меняю его на:
contract a is b,c{
...
...
опять заливается нормально. Меняю на исходный:
contract a is b,c{
...
address d = address(new d());
address e = address(new e());
address f = address(new f());
address g = address(new g());
address h = address(new h());
...
и опять нормально.
Перегружаю testrpc и заливаю в исходном виде - снова не хватает газа.
Что это такое и как с этим бороться.
У меня проблема с газом (truffle, testrpc) была, когда у меня была матрёшка классов a > b > c и я не объявлял в явном виде конструктор в последнем c классе. Только когда я в явном виде прописал
function c(arg1, arg2) b(arg1, arg2) {
// просто пустой конструктор
}
Пропала проблема с газом. Может быть, у вас что-то из этой оперы?