Author

Topic: Вопросы по Truffle (смарт контракты) (Read 465 times)

full member
Activity: 313
Merit: 103
а бывает такое, что системы смартконтрактов при выгрузке реально требуют газа размером примерно с газ для целого стандартного блока? (более 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 за весь блок, указанный выше. Но тогда с десяток таких контрактов залил и выбрал весь блок, который превышать нельзя за одну транзакцию. Или я не понимаю чего-то? Просто это далеко не самый большой из контрактов в системе, которую я пытаюсь залить за одну транзакцию (деплоем одного контракта, который должен всё это дело развернуть в сети).
full member
Activity: 313
Merit: 103
У меня проблема с газом (truffle, testrpc) была, когда у меня была матрёшка классов a > b > c и я не объявлял в явном виде конструктор в последнем c классе. Только когда я в явном виде прописал

function c(arg1, arg2) b(arg1, arg2) {
// просто пустой конструктор
}

Пропала проблема с газом. Может быть, у вас что-то из этой оперы?

глупый вопрос, но что значит вот эта запись:
 function c(arg1, arg2) b(arg1, arg2) {
и как ей пользоваться? Sad
newbie
Activity: 88
Merit: 0
testrpc тоже вроде не без монет...

А сколько обычно газа требует выгрузка стандартного токена ERC20 никто не обращал внимания?

По умолчанию 21 GWEI(shannon), а так чем более скрипт - больше газа, но вы запускаете тестовую = там не должно быть проблем.
newbie
Activity: 44
Merit: 0
Есть контракт:
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) {
// просто пустой конструктор
}

Пропала проблема с газом. Может быть, у вас что-то из этой оперы?
full member
Activity: 313
Merit: 103
testrpc тоже вроде не без монет...

А сколько обычно газа требует выгрузка стандартного токена ERC20 никто не обращал внимания?
newbie
Activity: 88
Merit: 0
Есть контракт:
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, где есть тестовая среда с монетами.
full member
Activity: 313
Merit: 103
Есть контракт:
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 и заливаю в исходном виде - снова не хватает газа.

Что это такое и как с этим бороться.
Jump to: