Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
chebykin
6 лет назад

EOSDEV #1. Установка ноды EOS

EOSDEV #1. Установка ноды EOS

Привет. Я планирую выпустить несколько постов, описывающих основы работы с программным обеспечением блокчейн сети EOS. Если у меня хватит терпения, их будет около 10. В первом посте я опишу процесс сборки и поднятия локальной ноды на своем компьютере.

Предупреждение

На момент написания поста проект EOS находится на ранней стадии реализации. Первая запускаемая версия появилось лишь в середине сентября 2017 года. Сборки еще крайне сырые, так что рассматривать сеть для разработки каких либо рабочих решений на данный момент (осень 2017) еще очень рано. Цель данной серии постов - знакомство с проектом EOS, рассмотрение его смарт-контрактов, отличия от Ethereum и т.п с точки зрения разработчика.

Начнем

Для того, чтобы начать, нам необходимо установить локальную ноду на своем компьютере. Публично доступные testnet и mainnet проекта EOS на момент написания статьи отсутствуют. Есть еще вариант поднять тестовую сеть самостоятельно, но для того, чтобы базово пощупать смарт-контракты это не требуется.

Итак, предлагаю вам два варианта установки, у каждого свои плюсы и минусы:

  • Компилируем ручками (долго, но самая свежая версия, исходники весят мало)
  • Вытягиваем готовый Docker образ (много весит, не самая свежая версия, зато все уже готово к экспериментам)

Вариант 1. Собираем ручками.

Я описываю установку на ОС Ubuntu 16.10. Установка на мак не должна сильно отличаться, а вот что делать с виндой, я пока не могу сказать(.

Чтобы установить ноду и набор сопутствующих утилит необходимо вытянуть исходники с GitHub:

git clone https://github.com/eosio/eos --recursive
cd eos

Здесь разработчики позаботились о нас и написали скрипт ./build.sh. На данный момент он поддерживает две платформы - ubuntu и darwin. Название платформы указывается первым аргументом при запуске, например для Ubuntu:

./build.sh ubuntu

Процесс не быстрый, т.к. все компилируется из исходников. На дроплете DigitalOcean за 20 баксов с 2 процессорами Xeon E5-2695 v4 и 2 гигами памяти компиляция заняла 74 минуты.

img1.png

Если не хочется ждать так долго - ниже описана установка с вытягиванием Docker образа.

После окончания компиляции заходим в директорию ./build. Находясь в ней можно установить все программы и исходники на системном уровне, для этого необходимо с правами администратора выполнить в этой папке команду

make install

Можно и не засорять пока свою систему и использовать скомпилированное добро из текущей папки. Далее я описываю именно этот способ.

Сейчас нам будут необходимы только две исполняемые программы:

  • ./programs/eosd/eosd - демон ноды блокчейна
  • ./programs/eosc/eosc - CLI клиент для ноды блокчейна

Процесс запуска ноды пока не очень автоматизирован. Необходимо зайти в папку ./programs/eosd и один раз попробовать запустить демон ноды:

./eosd

Запуск выдаст ошибку, но сгенерирует папку data-dir. В ней необходимо отредактировать файл config.init. Первым делом удалим строку с дефолтным значением enable-stale-production=false, она будет установлена в true на следующем шаге.
Теперь в конец файла добавляем следующие строки:

# Load the testnet genesis state, which creates some initial block producers with the default key
genesis-json = /path/to/eos/source/genesis.json
 # Enable production on a stale chain, since a single-node test chain is pretty much always stale
enable-stale-production = true
# Enable block production with the testnet producers
producer-name = inita
producer-name = initb
producer-name = initc
producer-name = initd
producer-name = inite
producer-name = initf
producer-name = initg
producer-name = inith
producer-name = initi
producer-name = initj
producer-name = initk
producer-name = initl
producer-name = initm
producer-name = initn
producer-name = inito
producer-name = initp
producer-name = initq
producer-name = initr
producer-name = inits
producer-name = initt
producer-name = initu
# Load the block producer plugin, so you can produce blocks
plugin = eos::producer_plugin
# Wallet plugin
plugin = eos::wallet_api_plugin
# As well as API and HTTP plugins
plugin = eos::chain_api_plugin
plugin = eos::http_plugin

Не забываем обновить путь к genesis-json в добавленных строках, этот файл лежит в корне вытянутого репозитория.

Далее заново запускаем ноду командой

./eosd

И наслаждаемся процессом генерации новых блоков раз в 3 секунды)

Вариант 2. Установка через Docker.

Я не нашел публично доступного официального Docker образа, поэтому собрал свой по инструкции от сюда https://github.com/EOSIO/eos/tree/master/Docker. Так же я подготовил docker-compose файл, где уже настроены необходимые порты и тома (volumes). Вытянем его с помощью wget:

wget https://raw.githubusercontent.com/chebykin/eos-docker/master/docker-compose.yml

Он отличается от официального лишь использованием публично доступного образа (chebykin/eos).
Теперь поднимаем docker-compose конфиг:

docker-compose -f docker-compose.yml up

img2.png

Сейчас в образе версия на 28 октября 2017 года. Возможно, я обновлю ее еще несколько раз, но это не точно. Если вам нужна самая актуальная версия, то самый верный способ, это самостоятельно скомпилировать проект по вышеописанной инструкции Установка ручками.

Проверяем доступность ноды

После запуска демона обоими из вышеперечисленных методов, активируется плагин, который открывает HTTP API сервер на 8888 порту локального компьютера. Если система запущена корректно, то мы можем дернуть GET запросом следующий url:

curl http://127.0.0.1:8888/v1/chain/get_info

и получить json ответ

{
  "head_block_num": 299,
  "last_irreversible_block_num": 283,
  "head_block_id": "0000012b82a219e812607eddbb1062c1c2aff7aedf7dcaf8bdea7c025cdbf4e6",
  "head_block_time": "2017-10-29T16:50:06",
  "head_block_producer": "initk",
  "recent_slots": "1111111111111111111111111111111111111111111111111111111111111111",
  "participation_rate": "1.00000000000000000"
}

Аналогичный запрос можно выполнить и с помощью CLI клиента eosc, набрав в консоли команду

./programs/eosc/eosc get info

В случае с Docker контейнером это будет

docker exec -it {your_countainer_id} eosc get info

Заключение

Для того, чтобы познакомиться с текущем состоянием разработки нам достаточно отдельно поднятой, но не подключенной к какой-либо сети ноды. Она позволит создавать кошельки, аккаунты, контракты и прочие сущности, которые предлагает нам EOS. Эксперементировать с сетью уже в принципе можно, но для этого нужно поднимать ее самостоятельно. Я сомневаюсь, что сейчас это все стабильно работает. Можно подождать буквально месяц-два до того, как появится публичный testnet.

В следующей посте рассмотрим Hello World контракт для блокчейна EOS.

83
0.235 GOLOS
На Golos с July 2017
Комментарии (73)
Сортировать по:
Сначала старые