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, то гвард будет сообщать об ошибке.