Decimal Guard это инструмент, помогающий мониторить ноду валидатора и автоматически деактивировать её, если нода по какой-то причине перестаёт подписывать блоки.

Скачивание и сборка

1. Скачать исходные коды, используя следующую команду. В текущей папке появится dsc-guard

`git clone [email protected]:decimalteam/dsc-guard.git `


2. Поочередно зайти в dsc-guard/cmd/dsc-guard и dsc-guard/cmd/gentx и собрать гвард и генератор транзакций командой `go build`.

Настройка генератора транзакций

Для генерации транзакций отключения рядом с бинарным файлом gentx нужно расположить файл .env следующего содержания:

``` DECIMAL_GATEWAY="https://mainnet-gate.decimalchain.com/api" MNEMONIC="..." ```

DECIMAL_GATEWAY необходим для генерации правильной транзакции, MNEMONIC - мнемоник аккаунта, создавшего ноду.

 

Для testnet:

``` DECIMAL_GATEWAY="https://testnet-gate.decimalchain.com/api" MNEMONIC="..." ```

Команда `./gentx` выведет подготовленную транзакцию в шестнадцатеричном виде.

 

Настройка гварда

Рядом с бинарным файлом dsc-guard необходимо расположить файл .env примерно следующего содержания:

``` NODES_ENDPOINTS=tcp://localhost:26657,tcp://a.b.c.d:26657 MISSED_BLOCKS_LIMIT=8 MISSED_BLOCKS_WINDOW=24 FALLBACK_PAUSE=2 NEW_BLOCK_TIMEOUT=10 VALIDATOR_ADDRESS=FBAFF7A1BB2C4E72DF924FAF5F23F11DEFF5C70B HTTP_LISTENER=localhost:11111 SET_OFFLINE_TX=0a5b0a590a232f646563696d616c2e76616c696461746f722e76312e4d73675365744f66666c696e6512320a30647876616c6f70657231787036617161643439746537767366676136737472386872646568323472396a30356d736363125d0a590a4f0a282f65746865726d696e742e63727970746f2e76312e657468736563703235366b312e5075624b657912230a2103448e6b3d50d6a39cab3babaa4aa2b0885f556fe05d7149885a05a0e7940a7e4f12040a020801180d12001a4122264e07b59dd0739a289587ae8b7bf4103dec6ddb7a87e5bf51f98e3e6415937f594bf66cbf5ab8b0284d0d1d5cf99810ff5ca01484237e7e491c43361b886200 ```

NODES_ENDPOINTS - разделенный запятыми список нод в блокчейне DSC с открытыми портами tendermint (26657)

MISSED_BLOCKS_LIMIT и MISSED_BLOCKS_WINDOW - по достижении какого количества пропущенных блоков MISSED_BLOCKS_LIMIT в окне размером MISSED_BLOCKS_WINDOW необходимо отправить транзакцию отключения

FALLBACK_PAUSE - время переподключения к нодам в секундах

NEW_BLOCK_TIMEOUT - время ожидания нового блока в секундах

VALIDATOR_ADDRESS - tendermint адрес валидатора, берется из priv_validator_key.json, поле "address"

SET_OFFLINE_TX - шестнадцатеричное представление транзакции отключения, здесь должен быть результат выполнения `gentx`

HTTP_LISTENER - необязательный. Если установлен в виде хост:порт, то по этому адресу выдается JSON по статусу гварда

 

Запуск

`./dsc-guard`

Гвард подключается к нодам, следит за подписями указанного валидатора, считает пропущенные блоки.

Каждые 5 блоков гвард проверяет транзакцию на валидность через известные ему ноды. Если транзакция неправильная - сгенерирована для другого chain id, со старым nonce, то гвард будет сообщать об ошибке.