Выполняя проекты на блокчейне мы столкнулись с тем, что в интернете нет информативной статьи, которая подробно рассказывала бы, как развернуть ноду и выполнить простейшие команды.
Что такое нода?
Нода - это любой компьютер, подключенный к блокчейн-сети. Через P2P-протоколы ноды обмениваются между собой информацией о блоках и транзакциях.
В зависимости от типа ноды хранят только часть или все данные блокчейна и делятся на:
- Полные ноды. Они обслуживают всю сеть, загружают и валидируют каждый блок с транзакциями, руководствуясь исключительно алгоритмом консенсуса, и являются полностью независимыми. Полные ноды отвергают противоречащие консенсусу блоки или отдельные транзакции. Такая нода имеет полную копию данных сети блокчейна.
- Облегченные ноды. Представляют компьютер со специальным ПО, подключенный к сети блокчейн. Облегченные ноды не хранят все данные блокчейна, а только заголовки блоков для подтверждения подлинности транзакций, которые они содержат.
Системные требования для работы ноды криптовалюты Ethereum
Для полноценной работы с приложениями необходимо “поднимать” полную ноду. Самый важный и проблемный вопрос - наличие подходящего железа. Бюджетные виртуальные сервера не смогут должным образом поддерживать работу нод, их мощности просто не хватит. А некоторые криптовалюты, такие как Ethereum и Bitcoin, требуют большой объем жесткого диска - около терабайта.
Для работы ноды нужен выделенный сервер среднего сегмента. Сервер низкого сегмента брать не стоит, есть риск, что со временем требования к серверу повысятся, нода разрастется, а мощности не хватит. Слишком дорогой сервер тоже не нужен, только если вы не собираетесь на нем держать несколько нод для разных криптовалют.
Размер жесткого диска
Это один из основных моментов, требующих постоянного контроля. Размер ноды Ethereum постоянно растет на несколько десятков гигабайт в месяц. Покупайте сервер с большим запасом места, чтобы не приходилось останавливать работу для его увеличения.
На момент написания статьи рекомендуем иметь ноду на 1,2 Тб - это уже с небольшим запасом на ближайшие 2-3 месяца.
Производительность дисков
Обязательно нужно обращать внимание на производительность жестких дисков. Нода криптовалюты Ethereum содержит огромное количество мелких и очень мелких файлов, количество которых может достигать миллионов. Для этого лучше использовать SSD-диски, т.к. они более быстрые в сравнении с SATA. Нода Ethereum больше всех других нод нагружает систему, поэтому и железо нужно помощнее.
Процессор и память
Минимальные системные параметры для работы ноды Ethereum: 4 ядра процессора и 8 гигабайт оперативной памяти (ОЗУ). Конечно, нода будет работать и на более низких параметрах, но ее стабильность при этом будет куда ниже.
Если на сервере располагается еще какой-то проект, особенно высокофункциональный и нагруженный, рекомендуем повысить эти показатели в 1,5-2 раза.
Операционная система
Нет какой-то определенной рекомендации для конкретного выбора ОС. Мы используем при реализации проектов Ubuntu. Обычно разработчики нод объявляют поддержку именно этой системы. Под нее всегда есть готовые сборки и скрипты установки. С другой версией линукс придется тратить больше времени.
Установка и настройка ноды эфира (etherium)
Если помимо ноды на сервере у вас стоит проект, то для работы с каждой нодой мы рекомендуем создать отдельного пользователей на сервере. Это обезопасит проект от случайной поломки и позволит разграничить доступ к данным.
1. Авторизуемся на сервере:
2. Переходим в папку на сервере, где будет располагаться нода. В примере мы создали отдельную папку eth/data/:
# cd /var/www/eth/data
3. Добавляем репозиторий ethereum, с которого будут загружены установочные файлы ноды:
# add-apt-repository -y ppa:ethereum/ethereum
4. Обновляем список репозиториев:
# apt update
5. Следующей командой запускаем установку ноды Ethereum на сервере:
# apt install ethereum
После запуска команды нас попросят подтвердить операцию, указываем “y” и жмем “Enter”:
В консоли отобразиться длинное полотно лога, это нормально. Ошибок при этом быть не должно:
Нода установлена. Теперь ее нужно запустить.
6. Для запуск ноды выполняем команду:
# geth console
В консоли начнет отображаться ход запуска ноды и ее синхронизация:
В случае запуска команды без дополнительных параметров нода будет запущена с параметрами по умолчанию. На скриншоте можно видеть что, памяти выделено всего 512 Мб.
7. Чтобы запустить ноду в более быстром режиме, необходимо выполнить команду с параметрами, которые запускают RPC API для возможности обращения к командам API ноды:
# geth --cache=8192 --rpc --rpcaddr 0.0.0.0 --rpcport 8545 --rpccorsdomain "*" --rpcapi "admin,eth,miner,web3,personal"
- cache - размер выделяемой памяти в Мб, рекомендуемое значение 8192, если параметры сервера позволяют;
- rpcaddr - ip-адрес по которому будет работать API ноды, в данном случае это адрес сервера;
- rpcport - порт, через который будет происходить подключение к API ноды:
- rpcapi - для работы достаточно параметров “admin, eth, miner, web3, personal”.
С более подробной информацией о работе с API Ethereum можно ознакомиться на официальной странице в Github https://github.com/ethereum/go-ethereum.
Для быстрого обновления ноды желательно иметь выделенный канал не менее чем 1 Гбит/с. В наших проектах такую скорость связи нам обеспечивает наличие собственного дата-центра.
Поскольку нода может синхронизироваться очень долго, до нескольких дней, есть смысл ее повесить на фоновый процесс вместе с супервизором. Периодически может случаться, что память на сервере заканчивается и ноду необходимо перезапустить. Супервизор будет делать это автоматически, а процесс синхронизации не будет остановлен.
Пока нода запущена - работает API, а вместе с ним и весь функционал по Ethereum.
Команды для работы с нодой на Ethereum
В данном блоке мы перечислили основные команды, которые помогут управлять нодой и обслуживать ее.
Чтобы подключиться к панели управления нодой, необходимо ввести команду:
# geth attach
В консоли отобразится информация о подключении:
В первую очередь нам нужно знать, каков статус синхронизации. Для этого в Панели вводим команду:
eth.syncing
Отобразится информация о блоках:
- currentblock - текущий блок в нашей ноде;
- highestblock - значение самого последнего блока в сети.
Наша задача дождаться, пока значение текущего блока будет равно значению последнего. Как только это случилось, консоль нам выдаст статус “false”, означающий, что нода полностью синхронизирована и готова к работе:
Таким образом мы запустили и синхронизировали всю базу Ethereum и готовы к последующей разработке приложения на блокчейн.
Иногда бывает, что нода перестает синхронизироваться из-за битых данных либо вообще не запускается процесс синхронизации, выдает ошибку. В таком случае необходимо очистить базу данных блокчейна командой:
# geth removedb
В случае, если после очистки базы нода все-равно медленно синхронизируется или вообще прогресс не идет, нужно проверить наличие подключений пиров. Пиры - это все компьютеры, которые отдают вам свои данные блокчейна, т.е. откуда вы скачиваете базу. Для этого в Панели управления нодой запускаете команду:
net.peerCount
Посмотреть, на сколько процентов загружена база от своего общего объема, можно командой, запускать ее нужно в консоли:
# geth --exec 'var s = eth.syncing; console.log("\n------------ GETH SYNCING PROGRESS\nprogress: " + (s.currentBlock/s.highestBlock*100)+ " %\nblocks left to parse: "+ (s.highestBlock-s.currentBlock) + "\ncurrent Block: " + s.currentBlock + " of " + s.highestBlock)' attach
Надпись “undefined” означает, что нода синхронизируется в реальном времени, но еще не получила информацию о самом последнем блоке. Это нормально, т.к. ежесекундно появляются новые данные, которые постоянно загружаются в базу блокчейна. Тут скорее следует обращать внимание на общий прогресс синхронизации, чтобы он не сильно отставал, иначе есть риск получения неактуальных данных о блокчейне.
Если вам требуется разработать проект, которые реализован на блокчейн, то вы можете обратиться к нам для расчета стоимости.