1. Что такое Idena.
На сегодняшний день в мире криптовалют существует несколько алгоритмов защиты, такие как proof-of-work, proof-of-stake и т.д. В основе Idena лежит алгоритм proof-of-person (доказательство личности) который позволяет без предоставления каких либо конфиденциальных данных гарантировать, что владелец кошелька - ЧЕЛОВЕК, а не бот, нейросеть или так называемый "искусственный интелект".
Подробности о проекте можно узнать на оффициальном сайте или прочесть переведенный на русский язык FAQ.
Покупка/продажа монет IDNA на биржах hotbit.io, qtrade.io.
2. Запуск приложения Idena на Windows компьютере .
Что бы запустить приложение, нужно скачать его с сайта github оффициальной ветки разработчиков сайта и произвести установку.
3. Структура приложения Idena.
Вместе с запуском клиента, запускается нода, которая обеспечивает связь кошелька с блокчейном, получением и отправки данных.
Структурная схема взаимодействия клиента с нодой.
Сразу же после запуска генерируются все конфигурационные файлы и nodekey.
4. Значение файла nodekey и его расположение на диске.
Самым важным файлом в структуре файлов, генерирующихся нодой является файл nodekey. Nodekey - это файл, который содержит 64 байтный код, который является приватным ключом ноды (опредлеляет личность в блокчейне Idena). С помощью этого кода посредством определенных преобразований формируется адрес, который является публичным ключом.
Расположение файла:
%UserProfile%\AppData\Roaming\Idena\node\datadir\keystore\nodekey
ВАЖНО: Ни под каким предлогом не давайте никому этот файл и не публикуйте его содержимое в публичный доступ.
5. Запуск и настройка ноды на удаленном сервере.
Что бы исключить необходимость держать постоянно включенным компьютер при майнинге, а так же уменьшить вероятность сбоя при валидации на машинах со медленным интернетом, ноду можно перенести на удаленный сервер.
Структурная схема взаимодействия клиента с удаленной нодой через тунель Putty.
Проверенная конфигурация сервера для работы Idena:
1 CPU, 2 Gb ОЗУ, 20 Gb HDD(или SSD), Lan 100+ Мбит, CentOS
После приобретения сервера необходимо получить к нему доступ через консоль SSH. Для получения доступа будем использовать консольный клиент Putty.
Открываем клиент, в поле Host Name (or IP address) (1) вводим IP адрес предоставленный провайдером, в поле Saved Session (2) вводим произвольное имя сервера и нажимаем кнопку Save (3), после чего запись появится в списке.
Нажимаем Open и логинимся в ssh консоли. При вводе пароля отображения символов не происходит.
После успешного входа открывается ssh консоль сервера, которая готова для приема команд.
6. Установка ноды с помощью скрипта.
Первая команда - переход в домашний каталог пользователя:
cd ~
Далее нужно установить git, что бы загрузить скрипт с сайта github.com.
Для Ubuntu:
sudo apt update
sudo apt install git
Для CentOS:
sudo yum update
sudo yum install git
Можно приступать к установке ноды:
git clone https://github.com/postarc/idena-sh.git
bash idena-sh/install.sh
В процессе установки скрипт задаст несколько вопросов:
Do you want reduce bandwidth usage and connected peer count down to 9? [Y,n] -
Опция полезна для машин с маленькой пропускной способностью и объемом диска меньше 25 Гб. Максимальное количество пиров уменьшается до 9 и уменьшается объем полученных/отправленных данных и интенсивность заполнения диска.
Do you want to change a service priority (niceness min=-20 max=20) [Default=0]
Выбор приоритета процесса idena-go. Минимальный приоритет -20, максимальный 20, по умолчанию 0. Для увереной работы ноды можно поставить значение 10. Желательно не ставить приоритет выше, чем 18, так как системные процессы в любом случае должны выполняться с большим приоритетом.
Do you want enable node autoupdate script? [Y,n] -
При подтверждении добавляется скрипт автообновления ноды. Проверка на необходимость обновления происходит один раз в час в *:00
По завершении работы скрипта выводится список команд для запуска/остановки/редактирования службы Idena
Что бы убедится в том, что нода запущена и работает, можно посмотреть лог файл, который пишет процесс idena-node:
tail -f ~/idena/datadir/logs/output.log
Далее, при необходимости, меняем nodekey на свой:
nano ~/idena/datadir/keystore/nodekey
Внимание! Редактор nano может быть не установлен по умолчанию в системе, поэтому нужно либо использовать другой редактор (mcedit, vi, kate и др.) либо установить nanо:
sudo apt install nano
Это для Ubuntu. Для CentOS:
sudo yum install nano
файл nodekey откроется в текстовом редакторе, нужно удалить существующий ключ, открыть nodekey из пункта 3 данного руководства, скопировать в буфер обмена и вставить в текстовый редактор nano (вставка происходит щелчком правой кнопки мыши). Далее нажать Ctrl+O для сохранения файла и Ctrl+X для выхода.
ВНИМАНИЕ: менять содержимое файла api.key нет необходимости, так как этот файл генерируется каждый раз при установке новой ноды. Это своего рода пароль для подключения. Не стоит делать его таким же, как и у локальной ноды. Если все же это необходимо, используйте команду:
echo -n "YOUR_API_KEY" > api.key
Где YOUR_API_KEY - это ваш апи ключ.
Посмотреть содержимое файла api.key можно либо в выводе по окончании работы скрипта, либо командой
cat ~/idena/datadir/api.key && echo
Для копирования в буфер обмена нужно аккуратно выделить апи ключ мышкой и нажать один раз правую кнопку мыши.
После замены nodekey, ноду необходимо перезагрузить. Сделать это можно командой:
sudo systemctl restart idena.service
или перегрузить весь сервер полностью командой:
sudo reboot
Иногда(например, при установке нескольких нод на один сервер), требуется коррекция конфигурационного файла. Отредактировать конфиг можно командой:
nano ~/idena/config.json
7. Запуск и установка ноды вручную.
Для тех, кто доверяет только тому, что делает сам, описываю инструкцию по ручной установке ноды на сервер.
Во-первых, нужно залогинится на сервер и перейти в домашний каталог пользователя от чьего имени устанавливается нода. Предпочтительно располагать файлы в своем домашнем каталоге, что бы не было проблем с разрешениями и правами.
su user
cd ~
Переходим на траницу идены в github и находим самый свежий релиз idena-go. На момент написания статьи - это 0.22.1.
Копируем ссылку на файл idena-node-linux-0.22.1 и вставляем ее в терминале:
wget https://github.com/idena-network/idena-go/releases/download/v0.22.1/idena-node-linux-0.22.1
После скачивания файла нужно изменить права доступа, разрешив выполнение файла:
chmod +x idena-node-linux-0.22.1
И переименовать его в что то более читаемое:
mv idena-node-linux-0.22.1 idena-go
Разработчиками рекомендуется при запуске на сервере запускать ноду с кофигурационным файлом со следующим содержанием:
{
"DataDir": "",
"P2P": {
"MaxInboundPeers": 12,
"MaxOutboundPeers": 6
},
"RPC": {
"HTTPHost": "localhost",
"HTTPPort": 9009
},
"IpfsConf": {
"Profile": "server",
"IpfsPort": 40405,
"BlockPinThreshold": 0.3,
"FlipPinThreshold": 0.5
},
"Sync": {
"FastSync": true
}
}
Создать его можно редактором nano. Сначала копируем в буфер обмена текст, открываем редактор:
> nano config.json
и вставляем содержимое буфера обмена щелчком правой кнопки в окно терминала.
Для сохранения файла используется комбинация клавиш Ctrl+O и для выхода из редактора комбинация Ctrl+X
Теперь все готово для начала работы ноды. Запустить ноду можно несколькими способами:
Запуск в скрине
sudo screen ./idena-go --config /home/user/config.json
далее, что бы выйти из скрина используем комбинацию Ctrl+A и нажимаем кнопку d.
Что бы залогинится снова в скрин вводим:
sudo screen -r
После первого запуска, нода создаст папку datadir в которой содержаться api.key и nodekey. для просмотра api.key ввести:
cat datadir/api.key && echo
Если возникла необходимость редактировать файл api.key, не рекомендую исползовать текстовые редакторы, так как многие из них добавляют в конец символ переноса строки, благодаря чему пользователи имеют проблемы с подключением к ноде. Лучше для этих целей использовать коману echo:
echo -n "YOUR_API_KEY" > api.key
Где YOUR_API_KEY - это ваш апи ключ.
Для редактирования nodekey ввести:
sudo nano datadir/keystore/nodekey
Особенность этого вида запуска ноды в том, что screen запускается только от пользователя root, следовательно root будет владельцем всех создаваемых файлов. При любом сбое нода вылетает, рестарт ноды возможен только в ручном режиме.
Запуск как службы
Для запуска ноды можно использовать systemctl. Для этого создаем файл:
sudo nano /etc/systemd/system/idena.service
с содержанием:
[Unit]
Description=idena
[Service]
User=user
WorkingDirectory=/home/user/
ExecStart=/home/user/idena-go --config /home/user/config.json
Restart=always
RestartSec=3
LimitNOFILE=500000
[Install]
WantedBy=default.target
Если ваше имя пользователя user, то содержимое можно оставить без изменений, а если нет, то отредактировать.
User - это имя вашего пользователя, от которого будет запускаться сервис, WorkingDirectory - рабочая директория ноды, расположение файла idena-go,
ExecStart содержит путь к файлу idena-go и расположение файла config.json.
После сохранения файла Ctrl+O и выхода Ctrl+X требуется перегрузить список служб:
sudo systemctl daemon-reload
разрешить автозапуск и запустить службу:
sudo systemctl enable idena.service
sudo systemctl start idena.service
другие команды для работы с сервисом:
sudo systemctl restart idena.service # Перезапуск службы
sudo systemctl stop idena.service # Остановка службы
sudo systemctl status idena.service # Просмотр статуса службы
Кроме того, статистику работы idena-go можно смотреть через просмотр лога:
tail -f ~/datadir/logs/output.log
Аналогично запуску через скрин, после первого запуска, нода создаст папку datadir в которой содержаться api.key и nodekey. для просмотра api.key ввести:
cat datadir/api.key && echo
Для редактирования nodekey ввести:
sudo nano datadir/keystore/nodekey
Отредактировав nodekey перезапускаем ноду:
sudo systemctl restart idena.service
Особенность данного типа запуска - автозапуск при сбое а так же при перезагрузке. Владелец всех создаваемых файлов - пользователь указанный в параметре User.
8. Настройка тунеля Putty и подключение клиента кошелька Idena к удаленной ноде.
Теперь нужно настроить тунель. Закрываем терминал ssh связи с сервером, если он открыт. Открываем Putty.
Выбираем сохраненную в 4 пункте этого руководства запись (1) и нажимаем кнопку Load (2)
Переходим в раскрывающийся список SSH (1)и выбираем Tunnel (2). Заполняем строки Source port: 9999 (3) и Destination: localhost:9009 (4) и нажимаем кнопку Add (5)
Еще раз возвращаемся на строку Session (1) и нажимаем кнопку Save (2)
После этого, открываем консоль управления SSH и вводим логин и пароль.
Открываем кошелек Идены.
Последнее, что нужно сделать - это заменить строку http://localhost:9009 на http://localhost:9999 (1) и ввести скопированный с удаленной ноды api.key (2). После каждой процедуры нажимать соответствующие кнопки Save
Если все предыдущие пункты были выполнены аккуратно и в соответствии с этой инструкцией, то красная надпись в левом верхнем углу сменится на
Добро пожаловать в криптомир!
9. Автообновление ноды, разбор скрипта
Рассмотрим один из вариантов скрипта для обновления ноды в автоматическом режиме.
_#!/bin/bash
GITPATH=https://github.com/idena-network/idena-go.git
RELEASESPATH=https://github.com/idena-network/idena-go/releases/download
FILENAME="idena-node-linux-"
CURRENTDIR=$(pwd)
cd /root/idena-scripts
if [ -d idena-go ]; then
cd idena-go
git fetch
else
git clone $GITPATH
cd idena-go
fi
LATESTTAG=$(git tag --sort=-creatordate | head -1)
cd ..
LATESTTAG=${LATESTTAG//v/}
DAEMONVERSION=$(/root/idena/idena-go -v | awk '{print $3}')
if [ -z $DAEMONVERSION ]; then DAEMONVERSION="new"; fi
if [ $DAEMONVERSION != $LATESTTAG ]; then FILENAME+=$LATESTTAG
if [ -f $FILENAME ]; then rm $FILENAME; fi
wget "$RELEASESPATH/v$LATESTTAG/$FILENAME"
if [ -f $FILENAME ]; then
chmod +x $FILENAME
systemctl stop idena-root.service
mv $FILENAME /root/idena/idena-go
systemctl start idena-root.service
fi
fi
cd $CURRENTDIR _
Разберем код скрипта. В переменной GITPATH записан путь к исходникам, RELEASESPATH - неизменяемая часть пути к скомпилированным бинарникам, FILENAME - неизменяемая часть имени бинарника.
if [ -d idena-go ]; then
cd idena-go
git fetch
else
git clone $GITPATH
cd idena-go
В этой части кода проверяется наличие каталога idena-go, если он есть, то нужно обновить ветку командой git fetch, если его нет, то нужно скачать исходники заново:
_git clone $GITPATH _
Далее получаем тег последней версии:
LATESTTAG=$(git tag --sort=-creatordate | head -1)
и оставляем только информацию о версии:
LATESTTAG=${LATESTTAG//v/}
Теперь в переменной LATESTTAG хранится номер самой свежей версии. Нужно сравнить его в версией нашего бинарника и если они не совпадают, нам требуется новый бинарник:
DAEMONVERSION=$(/root/idena/idena-go -v | awk '{print $3}')
На всякий случай нужно предусмотреть отсутствие бинарника, если его нет, то переменная DAEMONVERSION будет пустой:
if [ -z $DAEMONVERSION ]; then DAEMONVERSION="new"; fi
Присваеваем ей любое значение.
Далее идет сравнение и формирование ссылок:
if [ $DAEMONVERSION != $LATESTTAG ]; then FILENAME+=$LATESTTAG
проверка на всякий случай нет ли уже такого файла на диске:
if [ -f $FILENAME ]; then rm $FILENAME; fi
Скачиваем:
wget "$RELEASESPATH/v$LATESTTAG/$FILENAME"
и проверяем наличие скачанного файла: Если файла нет, значит бинарник еще не скомпилирован. Если файл есть, то первым делом добавляем разрешение на выполнение:
chmod +x $FILENAME
Останавливаем службу:
then systemctl stop idena-root.service
Перемещаем файл в рабочий каталог ноды:
mv $FILENAME /root/idena/idena-go
Запускаем службу:
systemctl start idena-root.service
Все, что теперь остается - это добавить задачу в cron для запуска скрипта каждые 1-2 часа:
crontab -e
Для запуска скрипта каждый час добавить строку:
0 */1 * * * /root/idena-scripts/idenaupdate.sh >/dev/null 2>&1
Где /root/idena-scripts/idenaupdate.sh - путь к скрипту, рассмотреному в этом параграфе.
@postarc
Внимательно прочитал и понял КАК это сделать.
Не понял только ЗАЧЕМ это делать. :-)
Какое-то бы краткое всткупление, что это за идена и для чего.
@retroscope Ок, добавил параграф введение.
@postarc больше половины статьи можно было не писать с idena-manager :)
@cryptomafia А еще лучше установить кошелек для виндовс и вообще ничего не писать )
@postarc
Было бы неплохо указать минимальные системные требования для сервера
@on0tole Сделано!
@postarc
Меньше 2 Gb RAM я бы не рискнул Идену запускать, и разрабы в минимальных требованиях не рекомендуют
@on0tole Ок, что бы проблем не было точно, изменил на 2 гб