Title: Вопросы по Truffle (смарт контракты) Post by: ShDenis on October 18, 2017, 04:41:47 AM Есть контракт:
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 и заливаю в исходном виде - снова не хватает газа. Что это такое и как с этим бороться. Title: Re: Вопросы по Truffle (смарт контракты) Post by: websalamander on October 18, 2017, 06:01:16 AM Есть контракт: 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 для тестов лучше использовать с MetaMask, где есть тестовая среда с монетами. Title: Re: Вопросы по Truffle (смарт контракты) Post by: ShDenis on October 18, 2017, 01:14:13 PM testrpc тоже вроде не без монет...
А сколько обычно газа требует выгрузка стандартного токена ERC20 никто не обращал внимания? Title: Re: Вопросы по Truffle (смарт контракты) Post by: madcoiner on October 19, 2017, 09:39:22 AM Есть контракт: 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) { // просто пустой конструктор } Пропала проблема с газом. Может быть, у вас что-то из этой оперы? Title: Re: Вопросы по Truffle (смарт контракты) Post by: websalamander on October 19, 2017, 11:40:03 AM testrpc тоже вроде не без монет... А сколько обычно газа требует выгрузка стандартного токена ERC20 никто не обращал внимания? По умолчанию 21 GWEI(shannon), а так чем более скрипт - больше газа, но вы запускаете тестовую = там не должно быть проблем. Title: Re: Вопросы по Truffle (смарт контракты) Post by: ShDenis on October 19, 2017, 04:53:35 PM У меня проблема с газом (truffle, testrpc) была, когда у меня была матрёшка классов a > b > c и я не объявлял в явном виде конструктор в последнем c классе. Только когда я в явном виде прописал function c(arg1, arg2) b(arg1, arg2) { // просто пустой конструктор } Пропала проблема с газом. Может быть, у вас что-то из этой оперы? глупый вопрос, но что значит вот эта запись: function c(arg1, arg2) b(arg1, arg2) { и как ей пользоваться? :( Title: Re: Вопросы по Truffle (смарт контракты) Post by: ShDenis on October 22, 2017, 02:08:25 PM а бывает такое, что системы смартконтрактов при выгрузке реально требуют газа размером примерно с газ для целого стандартного блока? (более 4 500 000 феев?) или всё же это проблемы в коде, или с непониманием трюфелем динамически создаваемых смартконтрактов?
Вот допустим, testrpc в ходе заливки одного из контрактов написал: Transaction: 0x7923215b58ecb7cb446ea Contract created: 0xb385c90add2fb06c Gas usage: 365751 Block Number: 5 Block Time: Sun Oct 22 2017 20:03:41 Т.е. Gas usage: 365751 - это в чём в Wei, Kwei, GWEI? Скорее всего, в той же единице, что и gaz за весь блок, указанный выше. Но тогда с десяток таких контрактов залил и выбрал весь блок, который превышать нельзя за одну транзакцию. Или я не понимаю чего-то? Просто это далеко не самый большой из контрактов в системе, которую я пытаюсь залить за одну транзакцию (деплоем одного контракта, который должен всё это дело развернуть в сети). |