Bitcoin Forum
May 11, 2024, 02:09:10 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Вопросы по Truffle (смарт контракты)  (Read 440 times)
ShDenis (OP)
Full Member
***
Offline Offline

Activity: 313
Merit: 103



View Profile
October 18, 2017, 04:41:47 AM
 #1

Есть контракт:
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 и заливаю в исходном виде - снова не хватает газа.

Что это такое и как с этим бороться.
You get merit points when someone likes your post enough to give you some. And for every 2 merit points you receive, you can send 1 merit point to someone else!
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1715436550
Hero Member
*
Offline Offline

Posts: 1715436550

View Profile Personal Message (Offline)

Ignore
1715436550
Reply with quote  #2

1715436550
Report to moderator
websalamander
Newbie
*
Offline Offline

Activity: 88
Merit: 0


View Profile
October 18, 2017, 06:01:16 AM
 #2

Есть контракт:
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, где есть тестовая среда с монетами.
ShDenis (OP)
Full Member
***
Offline Offline

Activity: 313
Merit: 103



View Profile
October 18, 2017, 01:14:13 PM
 #3

testrpc тоже вроде не без монет...

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

Activity: 44
Merit: 0


View Profile WWW
October 19, 2017, 09:39:22 AM
 #4

Есть контракт:
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) {
// просто пустой конструктор
}

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

Activity: 88
Merit: 0


View Profile
October 19, 2017, 11:40:03 AM
 #5

testrpc тоже вроде не без монет...

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

По умолчанию 21 GWEI(shannon), а так чем более скрипт - больше газа, но вы запускаете тестовую = там не должно быть проблем.
ShDenis (OP)
Full Member
***
Offline Offline

Activity: 313
Merit: 103



View Profile
October 19, 2017, 04:53:35 PM
 #6

У меня проблема с газом (truffle, testrpc) была, когда у меня была матрёшка классов a > b > c и я не объявлял в явном виде конструктор в последнем c классе. Только когда я в явном виде прописал

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

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

глупый вопрос, но что значит вот эта запись:
 function c(arg1, arg2) b(arg1, arg2) {
и как ей пользоваться? Sad
ShDenis (OP)
Full Member
***
Offline Offline

Activity: 313
Merit: 103



View Profile
October 22, 2017, 02:08:25 PM
Last edit: October 22, 2017, 05:20:26 PM by ShDenis
 #7

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

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!