x0r2 (OP)
Newbie
Offline
Activity: 54
Merit: 0
|
|
October 16, 2017, 10:02:34 AM Last edit: October 16, 2017, 12:05:30 PM by x0r2 |
|
Всем привет, подскажите как правильно развернуть контракт в реальную сеть? Использую фреймворк truffle.
|
|
|
|
|
x0r2 (OP)
Newbie
Offline
Activity: 54
Merit: 0
|
|
October 16, 2017, 12:08:51 PM |
|
Я использую фреймворк truffle, если использовать команду truffle migrate, то мне не понятно как развернуть контракт на реальную сеть. По ссылке выше можно развернуть контракт имея исходный код, truffle компилирует все в папку build, например один контракт внутри может разворачивать другой.
|
|
|
|
ShDenis
|
|
October 16, 2017, 12:45:38 PM |
|
Я использую фреймворк truffle, если использовать команду truffle migrate, то мне не понятно как развернуть контракт на реальную сеть. По ссылке выше можно развернуть контракт имея исходный код, truffle компилирует все в папку build, например один контракт внутри может разворачивать другой. по теории, вопрос к какой сети подключен truffle. Т.е. сперва нужно поднять локальную ноду с реальным блокчейном и потом указать её трюфелю для выгрузки. Либо, можно попробовать указать чужую с открытым RPC, если есть адрес и порт... Это что касается разворачивания а реальную сеть. А вот с контрактами, которые один другого разворачивает вопрос как-то непонятно задан.
|
|
|
|
x0r2 (OP)
Newbie
Offline
Activity: 54
Merit: 0
|
|
October 16, 2017, 01:00:25 PM |
|
Я использую фреймворк truffle, если использовать команду truffle migrate, то мне не понятно как развернуть контракт на реальную сеть. По ссылке выше можно развернуть контракт имея исходный код, truffle компилирует все в папку build, например один контракт внутри может разворачивать другой. по теории, вопрос к какой сети подключен truffle. Т.е. сперва нужно поднять локальную ноду с реальным блокчейном и потом указать её трюфелю для выгрузки. Либо, можно попробовать указать чужую с открытым RPC, если есть адрес и порт... Это что касается разворачивания а реальную сеть. А вот с контрактами, которые один другого разворачивает вопрос как-то непонятно задан. Правильно ли я понимаю, что мне нужно просто поднять ноду, сконфигурировать на неё truffle и как обычно запустить truffle migrate? Или я могу не поднимать ноду а отправить контракт на ноду infura? Я взял для примера 2 контракта, пример токена и пример краудсейла. Контракт краудсейла внутри себя разворачивает токен через new MyToken(). Если смотреть скрипты деплоя truffle то видно что он первым разворачивает стандартный контракт Migrations, затем краудсейл. Токена я в логах деплоя не увидел, но он видимо разворачивается из краудсейла.
|
|
|
|
ShDenis
|
|
October 16, 2017, 04:31:39 PM |
|
Правильно ли я понимаю, что мне нужно просто поднять ноду, сконфигурировать на неё truffle и как обычно запустить truffle migrate?
да Или я могу не поднимать ноду а отправить контракт на ноду infura?
не знаю что за infura, но наверное да, если на ней запущен RPC и у вас есть хост и порт и не будет проблем достучаться. Я взял для примера 2 контракта, пример токена и пример краудсейла. Контракт краудсейла внутри себя разворачивает токен через new MyToken(). Если смотреть скрипты деплоя truffle то видно что он первым разворачивает стандартный контракт Migrations, затем краудсейл. Токена я в логах деплоя не увидел, но он видимо разворачивается из краудсейла.
скрипты деплоя, это те что в папке migrations? в них первым деплоится migrations.sol (стандартный для трюфеля) и затем деплоятся все необходимые самописные контракты. Что вы там должны были увидеть в деплоях, зависит от того, что у вас было изначально (создано трюфелем покоманде truffle init). Необходимо лишнее убрать и оставить только то, что вам нужно. Если вы деплоите контракт, а он в свою очередь создаёт в конструкторе второй контракт, то второй контракт вам деплоить не нужно (по теории, сам сейчас проверять буду, но кажется что так), поскольку в этом случае в блокчейне вторых контрактов у вас должно оказаться два, один из которых нужный, созданный по new MyToken() со ссылкой внутри краудсейла, а второй ненужный, который ни к чему привязан не будет.
|
|
|
|
x0r2 (OP)
Newbie
Offline
Activity: 54
Merit: 0
|
|
October 16, 2017, 06:04:07 PM |
|
Спасибо за ответы, понемногу проясняется. скрипты деплоя, это те что в папке migrations?
Да в них первым деплоится migrations.sol (стандартный для трюфеля)
Можно его не деплоить вообще? Как мне узнать адрес токена который деплоился краудсейлом?
|
|
|
|
ShDenis
|
|
October 17, 2017, 08:21:11 AM |
|
migrations.sol не деплоить не пробовал, но вроде как читал что можно. Просто лишитесь части функционала по управлению версиями, вроде как (могу ошибаться). Внутри контракта-создателя обычно сохраняют адрес в параметр (переменную). Далее, если нужно, можно сделать переменную публичной или добавить getter (только для владельца). А ещё в логах можно попробовать поискать (опять таки, по логам сам не пробовал искать).
|
|
|
|
verudza
Newbie
Offline
Activity: 31
Merit: 0
|
|
October 17, 2017, 10:08:02 AM |
|
Разрабатываем смарт-контракты на заказ.
Опытная команда. Аудит безопасности. Консультации по техническому запуску ICO.
Связь: slava(точка)brall(собака)gmail(точка)com
|
|
|
|
x0r2 (OP)
Newbie
Offline
Activity: 54
Merit: 0
|
|
October 18, 2017, 09:20:22 AM |
|
Разрабатываем смарт-контракты на заказ.
Опытная команда. Аудит безопасности. Консультации по техническому запуску ICO.
Связь: slava(точка)brall(собака)gmail(точка)com
Судя по вашему статусу на форуме, очень сомнительно, что команда опытная Разработать и сами можем, вопрос был с разверткой через truffle.
|
|
|
|
x0r2 (OP)
Newbie
Offline
Activity: 54
Merit: 0
|
|
October 18, 2017, 09:31:23 AM |
|
Настроил truffle на сервер infura, но при разворачивании получаю ошибку: Error encountered, bailing. Network state unknown. Review successful transactions manually. insufficient funds for gas * price + value
Конфиг truffle: module.exports = { networks: { live: { provider: new HDWalletProvider('<mnemonic>', 'https://mainnet.infura.io/<infuraKey>'), network_id: 1 } } };
Разворачиваю командой: truffle migration --reset --network=live
Мнемоническая фраза проверена, на адресе есть баланс.
|
|
|
|
x0r2 (OP)
Newbie
Offline
Activity: 54
Merit: 0
|
|
October 18, 2017, 05:51:12 PM |
|
Пробовал поднять ноду на geth, но тоже потерпел фиаско. Конфиг truffle: module.exports = { networks: { live: { from: '0xADDR', host: 'localhost', port: 8545, network_id: '1' } } };
Ошибка: Error encountered, bailing. Network state unknown. Review successful transactions manually. Error: exceeds block gas limit
|
|
|
|
websalamander
Newbie
Offline
Activity: 88
Merit: 0
|
|
October 20, 2017, 10:28:04 AM |
|
Пробовал поднять ноду на geth, но тоже потерпел фиаско. Конфиг truffle: module.exports = { networks: { live: { from: '0xADDR', host: 'localhost', port: 8545, network_id: '1' } } };
Ошибка: Error encountered, bailing. Network state unknown. Review successful transactions manually. Error: exceeds block gas limit
Поставьте после network_id: '1' какой-либо лимит(4500000-5000000) gas: - может подхватит...
|
|
|
|
x0r2 (OP)
Newbie
Offline
Activity: 54
Merit: 0
|
|
October 21, 2017, 12:58:14 PM |
|
Поставьте после network_id: '1' какой-либо лимит(4500000-5000000) gas: - может подхватит...
module.exports = { networks: { live: { from: '0xADDR', host: 'localhost', port: 8545, network_id: 1, gas: 5000 } } };
С таким конфигом другая ошибка: Error: insufficient funds for gas * price + value
|
|
|
|
websalamander
Newbie
Offline
Activity: 88
Merit: 0
|
|
October 23, 2017, 05:59:04 AM |
|
Поставьте после network_id: '1' какой-либо лимит(4500000-5000000) gas: - может подхватит...
module.exports = { networks: { live: { from: '0xADDR', host: 'localhost', port: 8545, network_id: 1, gas: 5000 } } };
С таким конфигом другая ошибка: Error: insufficient funds for gas * price + value
Вы забыли порядки - вот и пишет, что "недостаточно средств" - почитайте What is Gas?
|
|
|
|
ShDenis
|
|
October 23, 2017, 07:09:49 AM |
|
Тоже поимел большую проблему с газом при разворачивании конрактов. Вот это вот: exceeds block gas limit может означать, что вы пытаетесь заливая контракты превысить газ, который нужен для всего блока транзакций. Т.е. код большой к заливке.
По-другому, есть стандартный размер блока (можно настраивать, но этого делать не стоит, поскольку будут нестыковки потом с реальной сетью) и он потребляет определённое количество газа (примерно 4 700 000) на своё заполнение. Я так понял, что (если всё компилируется нормально) выгружая контракт получается только одна транзакция с размером, превышающим по газу возможности блока. Однако, это всё мои догадки, поскольку на подобные вопросы в этой же ветке форума, мне детального разъяснения никто не дал.
п.с. Мне, в моём случае, например, сейчас придётся не то что бы оптимизировать контракты для уменьшения потребления, а скорее всего придётся отказываться от единоразовой выгрузки всех контрактов при создании основного контракта. Отказываться в пользу ручного создания доп. контрактов системы с их последующим подключением к системе. Т.е. разбивать код на части. Что есть не совсем удобно. Т.е. плохо.
|
|
|
|
x0r2 (OP)
Newbie
Offline
Activity: 54
Merit: 0
|
|
October 23, 2017, 03:23:19 PM |
|
Вы забыли порядки - вот и пишет, что "недостаточно средств" - почитайте What is Gas?Geth не давал менять больше 5000, пробовал различные значения. С Parity вроде завелось, транзакция прошла, но с газом так до конца и не разобрался.
|
|
|
|
|