Запуск валидатора Decimal Smart Chain

Во избежание потери приватных ключей, разглашения приватных ключей или штрафования валидатора НИКОГДА, НИ ПРИ КАКИХ УСЛОВИЯХ не используйте мнемоники и конфигурации главной сети (mainnet) блокчейна в тестовых окружениях, не настраивайте тестовое окружение на сервере, на котором запущен валидатор главной сети.

1. Бекап конфигурации ноды

Необходимо сделать резервную копию существующей конфигурации, обычно это папка $HOME/.decimal/daemon/config

Приватные ключи из бекапа понадобятся далее.

2. Скачивание, установка бинарных файлов

На текущий момент предпочтительный вариантом является скачивание бинарника под ваш дистрибутив linux.

Скомпилированный исполняемый файл можно скачать с https://repo.decimalchain.com/

Testnet: https://testnet-repo.decimalchain.com/

Для скачивания бинарника нужно брать папку с более поздней датой и названием папки (из всех папок нужно выбрать папку с самым старшим блоком и самой свежей датой это и будет папка с актуальным бинарником). 

Для установки из исходных файлов необходим установленный go не ниже версии 1.18, git

``` git clone [email protected]:decimalteam/go-smart-node.git cd go-smart-node git checkout master make install ```

Для тестнет:

``` git clone [email protected]:decimalteam/go-smart-node.git cd go-smart-node git checkout staging # switch to branch for testnet make install ```

3. Инициализация

Необходимо инициализировать локальную конфигурацию ноды командой

`dscd init <MONIKER> --chain-id <CHAINID>`
  • MONIKER - некоторый произвольный идентификатор ноды, выбираемый создателем ноды
  • CHAINID - идентификатор цепочки блокчейна, берется из генезиса (поле `chain_id`)

После выполнения команды в папке `$HOME/.decimal/daemon/config` появятся файлы конфигурации ноды:

  • app.toml, config.toml - конфигурация ноды как сервиса
  • genesis.json - пустой генезис по-умолчанию
  • node_key.json - приватный ключ для обмена данных между нодами
  • priv_validator_key.json - приватные и публичные ключи ноды для работы в качестве валидатора

Пустой генезис ноды, т.е. $HOME/.decimal/daemon/config/genesis.json нужно заменить скачанным генезисом

Из бекапа необходимо скопировать в конфигурацию DSC файлы node_key.json, priv_validator_key.json

Нужно проверить и скорректировать параметры ноды

  • в config.toml должны быть следующие значения
    - timeout_commit = "5s" - для правильной генерации пустых блоков при работе валидатором
    - create_empty_blocks = true - для правильной генерации пустых блоков при работе валидатором
    - create_empty_blocks_interval = "0s"
    - persistent_peers = "..." - для правильного подключения к существующим валидаторам (14 декабря 2022 года будет опубликовано в Telegram чате валидаторов)

Testnet:

persistent_peers = "[email protected]:26656" - for correct connection to existing validators

  Mainnet:

seeds = "0906b583daebe8951226e56cf75e1d2175f19671@decimal-node-1.mainnet.decimalchain.com:26656,1e9a5adb32f39a62849c94dbec95f251f5ebd728@decimal-node-2.mainnet.decimalchain.com:26656"

!!! После запуска обратите внимание на балансы, они должны быть такими же как и в предыдущем блокчейне (= полная преемственность). 

4. Скачивание генезиса, копии состояния блокчейна

Генезис для mainnet нужно скачать в архиве zip или tar.xz, которые доступны на https://repo.decimalchain.com

Для testnet генезис нужно скачать следующей командой (требует установленных curl и jq) и сохранить как `genesis.json` (генезис тестнета)

`curl "https://testnet-gate.decimalchain.com/api/rpc/genesis" | jq '.result.genesis' > genesis.json`

Загрузить свежий снимок блокчейна, пример команды:

rsync -avPh rsync://rsync-mainnet.decimalchain.com:10000/daily-data/ /home/centos/.decimal/daemon/data/ --delete

5. Запуск

Выполняется командой

`dscd start`

При правильной конфигурации начнется синхронизация состояния ноды: быстрый поток сообщений вида

` :54AM INF received proposal module=consensus proposal={"Type":32,"block_id":{"hash":"1E0E7A42F373C313CDB2CFEFFD439CE2F58ADD823459038DAEC074FFDD617BDD","parts":{"hash":"90B658BA659BEFDDAB189C6F28A56954CB12864EE6DD9B66FC1B5FEAB7F4BC85","total":1}},"height":409,"pol_round":-1,"round":0,"signature":"ket6zcb/+Mfhv23oGE3+FVQIs8jh4zg2cfg6cWFCf8vF+UkbGthiFeIWMXF5IpjEGbixlWN2uXKOL1VmK+wtCQ==","timestamp":"2022-11-25T02:54:36.860957321Z"} server=node 9:54AM INF received complete proposal block hash=1E0E7A42F373C313CDB2CFEFFD439CE2F58ADD823459038DAEC074FFDD617BDD height=409 module=consensus server=node 9:54AM INF finalizing commit of block hash={} height=409 module=consensus num_txs=0 root=02D456451AA48CD3F35427DBEDD4E9F1344391BE5BFF0D6C541675AC2C051477 server=node 9:54AM INF burned tokens from module account amount= from=fee_collector module=x/bank 9:54AM INF minted coins from module account amount= from=fee_collector module=x/bank 9:54AM INF minted coins from module account amount=50000000000000000000del from=validator module=x/bank 9:54AM INF executed block height=409 module=state num_invalid_txs=0 num_valid_txs=0 server=node 9:54AM INF commit synced commit=436F6D6D697449447B5B31323920383620313636203537203133312031343620313335203136312036302032323720363220313234203139302032353020313338203134203135332032343320313535203233352032353320313332203531203333203434203233382038382037382031333220323033203430203130335D3A3139397D `

По окончании синхронизации эти сообщения будут идти с периодичностью около 5 секунд

6. Регистрация ноды как валидатора

Этот пункт только для новых валидаторов.

  • Получение публичного ключа ноды

Из priv_validator_key.json необходимо взять байты публичного ключа, закодированные в base64.

Это можно сделать командой

`cat $HOME/.decimal/daemon/config/priv_validator_key.json | jq --raw-output '.pub_key.value'`
  • Создание кандидата в валидаторы через консоль

Зайти в консоль, используя некоторый свой мнемоник, перейти в раздел "Мастернода"

https://console.decimalchain.com/masternode

(https://testnet-console.decimalchain.com/masternode - testnet)

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

По окончании диалога потребуется подтвердить транзакцию создания валидатора.

После успешного выполнения транзакции нода появится в списке кандидатов.

https://explorer.decimalchain.com/validators?type=candidates&page=1

(https://testnet.explorer.decimalchain.com/validators?type=candidates&page=1 - testnet)

7. Активация-деактивация ноды

Активация ноды - процедура объявления ноды валидатором. У ноды появляется обязательство предлагать и подписывать блоки, в случае пропусков блоков (более 12 на окно из 24 блоков) или двойной подписи блока стейки ноды будут оштрафованы на 1% и 5% соответственно.

За работу валидатором на reward address ноды начисляется награждение.

Активацию можно осуществить либо через консоль, пункт "Мастернода", либо через cli `dscd tx validator set-online` (требует подключения к работающей ноде).

Деактивацию - исключение из спика валидаторов - можно также осуществить через консоль, пункт "Мастернода", либо через cli `dscd tx validator set-offline` (требует подключения к работающей ноде).

Systemd файл

Для управления сервисом ноды можно использовать файл dscd.serivce следующего вида

[Unit] Description=Decimal Smart Chain Node daemon Documentation=https://help.decimalchain.com [Service] Type=idle User=centos ExecStart=/home/centos/decimal/dscd start Restart=always RestartSec=30s StandardOutput=journal StandardError=journal SyslogIdentifier=DSCD [Install] WantedBy=multi-user.target

Путь ExecStart=/home/centos/decimal/dscd нужно заменить тот, где лежит бинарный файл ноды.