Bitcoin Forum

Local => Кодеры => Topic started by: ShDenis on October 18, 2017, 04:41:47 AM



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 за весь блок, указанный выше. Но тогда с десяток таких контрактов залил и выбрал весь блок, который превышать нельзя за одну транзакцию. Или я не понимаю чего-то? Просто это далеко не самый большой из контрактов в системе, которую я пытаюсь залить за одну транзакцию (деплоем одного контракта, который должен всё это дело развернуть в сети).