Александр Фролов - Создание смарт-контрактов Solidity для блокчейна Ethereum. Практическое руководство
- Название:Создание смарт-контрактов Solidity для блокчейна Ethereum. Практическое руководство
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:2019
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Александр Фролов - Создание смарт-контрактов Solidity для блокчейна Ethereum. Практическое руководство краткое содержание
Создание смарт-контрактов Solidity для блокчейна Ethereum. Практическое руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Чем больше файл DAG, тем труднее выполнить майнинг. Если для майнинга используются видеокарты, то данные DAG должны полностью поместиться в память видеокарты, иначе применение видеокарты для майнинга будет бесполезным.
Так как запуск узла вы будете выполнять часто, рекомендуем подготовить пакетный файл для запуска с именем, например, start_node.sh (листинг 2.2.).
Листинг 2.2. Файл start_node.sh
geth –etherbase "0x4f744742ac711fd111c7a983176db1d48d29f413" –datadir node1 –nodiscover –mine –minerthreads 1 –maxpeers 0 –verbosity 3 –networkid 98760 –rpc –rpcapi="db,eth,net,web3,personal,web3" console
Параметры запуска узла
Расскажем о параметрах geth, которые мы использовали при запуске узла. Эти параметры были выбраны исходя из назначения нашего узла – мы создаем узел для учебной приватной сети Ethereum. Когда вы будете создавать узел для работы с тестовой сетью Rinkeby или с основной сетью Ethereum, нужно будет указывать другие параметры.
Чтобы получить краткую справку по всем командам и параметрам geth, запустите ее следующим образом:
$ geth -h
С параметром datadir, который указывает путь к каталогу блокчейна, вы уже знакомы. При запуске узла укажите тот же каталог, что мы использовали при инициализации приватного блокчейна.
Параметр etherbaseзадает публичный адрес, на который будет отправлено вознаграждение за майнинг.
Параметр nodiscoverотключает поиск других узлов сети. Мы указали его, так как пока будем работать только с одним узлом блокчейна.
Мы также указали значение параметра maxpeers, равное нулю. Таким способом мы фактически отключили обмен по сети между узлами нашего блокчейна.
С помощью параметра mineмы запускаем так называемый майнинг – процесс создания новых блоков в нашем блокчейне. Это необходимо, так как без появления новых блоков выполнение транзакций и публикация смарт-контрактов будут невозможны.
Параметр minerthreadsуказывает количество потоков, используемых для майнинга. Если ресурсы вашего сервера позволяют и там установлен многоядерный процессор, то для ускорения майнинга можно увеличить значение этого параметра.
Очень важный параметр – networkid. Это идентификатор сети. Здесь мы должны указать уникальный идентификатор 98760 нашего приватного блокчейна.
Параметр verbosityзадает детализацию журнала:
• 0 – не записывать данные в журнал;
• 1 – записывать сообщения об ошибках;
• 2 – записывать предупреждающие сообщения;
• 3 – записывать информационные сообщения;
• 4 – записывать отладочную информацию;
• 5 – записывать детальную информацию.
По умолчанию используется значение 3.
Так как мы будем работать с узлом с помощью протокола JSON RPC, нам необходимо включить такую возможность, указав параметр rpc. Дополнительно с помощью параметра rpcapiмы перечисляем, какие программные интерфейсы должен предоставить нам узел. Здесь мы указали такой набор: db, eth, net, web3, personal, web3. Подробнее об этом мы расскажем позже.
При запуске geth мы указываем команду console. Эта команда запускает интерактивную консоль JavaScript, где мы сможем выдавать команды.
Подключаемся к нашему узлу
Теперь откройте вторую консоль и введите в ней следующую команду:
$ geth –datadir node1 –networkid 98760 attach ipc://home/book/node1/geth.ipc
Эта команда откроет консоль geth и подключится к вашему приватному узлу.
Здесь необходимо указать те же значения параметров datadirи networked, что и при запуске узла. Команда attachподключается к узлу, адрес которого задан после нее, и запускает интерактивную консоль JavaScript. В адресе нам нужно указать полный путь к рабочему каталогу нашего приватного блокчейна.
Запишите команду подключения в файл attach_node.sh для удобства (листинг 2.3.).
Листинг 2.3. Файл attach_node.sh
geth –datadir node1 –networkid 98760 attach ipc://home/book/node1/geth.ipc
Теперь запустите этот файл, и вы увидите приглашение консоли geth:
$ sh attach_node.sh
Welcome to the Geth JavaScript console!
instance: Geth/v1.8.22-stable-7fa3509e/linux-amd64/go1.10.4
coinbase: 0x3cd46aab0631305437842cf639218e41ce946baa
at block: 379 (Wed, 13 Feb 2019 09:12:48 PST)
datadir: /home/book/node1
modules: admin:1.0 debug:1.0 eth:1.0 ethash:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
>
Введите в этом приглашении команду web3.eth.accounts:
> web3.eth.accounts
["0x4f744742ac711fd111c7a983176db1d48d29f413"]
Вы увидите идентификатор (адрес) аккаунта, который мы создали ранее, указав для него пароль. У вас этот идентификатор будет другой.
Попробуйте также ввести команду web3.version. Эта команда позволяет посмотреть версию фреймворка Web3, с помощью которого мы будем работать с контрактами, версию geth, а также номер сети. Мы задали номер нашей приветной сети, равный 98760.
Для стабильного релиза Geth версии 1.8.22 на консоль будет выведено сообщение:
> web3.version
{
api: "0.20.1",
ethereum: "0x3f",
network: "98760",
node: "Geth/v1.8.22-stable-7fa3509e/linux-amd64/go1.10.4",
whisper: undefined,
getEthereum: function(callback),
getNetwork: function(callback),
getNode: function(callback),
getWhisper: function(callback)
}
Использование нестабильной версии Geth будет отмечено в поле node:
> web3.version
{
api: "0.20.1",
ethereum: "0x3f",
network: "98760",
node: "Geth/v1.8.11-unstable/linux-amd64/go1.9.6",
whisper: undefined,
getEthereum: function(callback),
getNetwork: function(callback),
getNode: function(callback),
getWhisper: function(callback)
}
Управление майнингом и проверка баланса
При запуске узла мы автоматически запускаем майнинг. Текущий баланс вы можете проверить при помощи следующей команды:
> web3.fromWei( eth.getBalance(eth.coinbase) )
0
Позже мы опишем экономику Ethereum и эти команды детальнее.
Сразу после инициализации сети баланс нашего аккаунта равен нулю. Однако по мере того, как будут «добыты» новые блоки, баланс будет расти:
> web3.fromWei( eth.getBalance(eth.coinbase) )
15
В первой консоли, где мы запустили узел, добавление каждого блока будет отмечено такими сообщениями:
INFO [02-13|09:37:10.577]
block reached canonical chain number=45 hash=924ce1…d8b5a2
INFO [02-13|09:37:10.577]
mined potential block number=52 hash=a80a36…153593
INFO [02-13|09:37:10.577] Commit new mining work number=53 sealhash=3acb6c…0ecd19 uncles=0 txs=0 gas=0 fees=0 elapsed=130.557µs
INFO [02-13|09:37:11.223] Successfully sealed new block number=53 sealhash=3acb6c…0ecd19 hash=14e0fa…575494 elapsed=645.999ms
INFO [02-13|09:37:11.223]
block reached canonical chain number=46 hash=c5ff7a…da8069
INFO [02-13|09:37:11.224]
mined potential block number=53 hash=14e0fa…575494
INFO [02-13|09:37:11.224] Commit new mining work number=54 sealhash=96235b…f3fc50 uncles=0 txs=0 gas=0 fees=0 elapsed=124.053µs
Интервал:
Закладка: