# Запуск мастерноды

Разница между обычным узлом сети и мастернодой (мастер-узлом, валидатором) только в том, что она принимает участие в производстве и проверке/подписи блоков. Технически, оба эти узла работают почти одинаково. Например, у каждой ноды всегда есть свой идентификатор (node_id) и пара приватный/публичный ключ формата ed25519 - этот ключ используется для подписи блоков в случае, если нода становится мастер-нодой.

# Требования

1) git;
2) golang 1.14+;
3) консольные утилиты curl and jq;
4) инструменты для сборки и компиляции (building tools);
5) key-value библиотеку хранения LevelDB.

Для установки building tools (которые включают make) и LevelDB используйте следующие команды:

# RHEL 8 / CentOS 8:

sudo dnf groupinstall "Development Tools"
sudo dnf install leveldb leveldb-devel snappy

# Ubuntu:

sudo apt-get install build-essential
sudo apt-get install libsnappy-dev libleveldb-dev

# macOS:

brew install coreutils
brew install leveldb snappy

# Установка

Для работы с узлом необходимы программы decd и deccli. Для этого необходимо установить компилятор Go и утилиту Make, и затем скомпилировать decd и deccli. Для того, чтобы скомпилировать узел:

  1. Клонируем исходный код узла:

    git clone https://bitbucket.org/decimalteam/go-node.git
    
    1
  2. Выполняем компиляцию и установку decd и deccli:

    make all
    
    1
  3. Проверяем, что decd и deccli доступны командами:

    decd version
    deccli version
    
    1
    2

# Конфигурирование

  1. Необходимо инициализировать узел, создав папку $HOME/.decimal, при помощи команды:

    decd init YOUR_NODE_NAME --network mainnet|testnet|devnet
    
    1

    YOUR_NODE_NAME - имя узла, например `my-great-node;
    mainnet|testnet|devnet - укажите один из вариантов для соответствующей сети.

  2. Исполняем команду:

    cat $HOME/.decimal/daemon/config/priv_validator_key.json | jq --raw-output '.pub_key.value'
    
    1

    Эта команда выведет публичный ключ формата ed25519 закодированный в base64. Это публичный ключ узла, он понадобится позже для регистрации валидатора (в поле Public key), его необходимо сохранить.

# Старт

  1. Запускаем ноду и дожидаемся конца синхронизации:

    decd start
    
    1
  2. Пока синхронизируется нода, необходимо подготовить аккаунт с монетами для стейка и регистрации валидатора. В Консоли доступен кран для получения тестовых монет tDEL.

  3. Когда узел синхронзировался и находится в актуальном состоянии, необходимо зарегистрировать подготовленную ноду как валидатора и назначить изначальный стейк, необходимо через консоль сформировать и отправить транзакцию Declare candidate с того аккаунта, с которого планируется осуществлять дальнейшее управление валидатором в блокчейне. По ссылке https://console.decimalchain.com/masternode заполняем информацию об узле и отправляем транзакцию. По этой же ссылке возможно активировать и деактивировать валидатора.

    Чтобы узнать Public key, в системе с узлом необходимо выполнить команду (Public key будет выведен как в терминал):

    cat $HOME/.decimal/daemon/config/priv_validator_key.json | jq --raw-output '.pub_key.value'
    
    1

# Второй (резервный) валидатор

Если у вас запущена и работает нода валидатора, но вы хотите подготовить вторую (запасную) ноду на другом оборудовании и при необходимости запустить её, то это делается следующим образом:

  1. Нода развёртывается заблаговременно, как обычная нода, параллельно текущей работающей.

  2. Нода синхронизируется с блокчейном, получая актуальные блоки.

  3. Если текущая нода была деактивирована, то её следует выключить (остановлен decd). Потом:

    Скопируте из директории .decimal/daemon/config/ основной ноды её ключи валидатора:
    а. priv_validator_key.json
    б. node_key.json

  4. Вставьте эти ключи в аналогичную директорию на второй (запасной) ноде. Важно! При этом запасная нода тоже должна быть выключена (остановлен decd).

  5. Запустите запасную ноду. После этого нода быстро синхронизируется до актуального состояния.

  6. После завершения синхронизации отправьте транзакцию SetOnline из Консоли и новая нода будет работать вместо остановленной ранее (необходимо убедится, что первая нода точно не выйдет в онлайн).