-
Notifications
You must be signed in to change notification settings - Fork 18
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit a4cd7f4
Showing
6 changed files
with
1,427 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
name: test | ||
on: [push] | ||
jobs: | ||
go-build: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@master | ||
- uses: actions/setup-go@v2 | ||
- run: go version | ||
- run: go mod download | ||
- run: go build | ||
go-vet: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@master | ||
- uses: actions/setup-go@v2 | ||
- run: go version | ||
- run: go mod download | ||
- run: go vet | ||
golangci: | ||
name: lint | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v2 | ||
- name: golangci-lint | ||
uses: golangci/golangci-lint-action@v2 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
name: goreleaser | ||
|
||
on: | ||
push: | ||
tags: | ||
- '*' | ||
|
||
permissions: | ||
contents: write | ||
|
||
jobs: | ||
goreleaser: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v2 | ||
- uses: actions/setup-go@v2 | ||
- | ||
name: Run GoReleaser | ||
uses: goreleaser/goreleaser-action@v2 | ||
with: | ||
version: latest | ||
args: release --rm-dist | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
# missed-blocks-checker | ||
|
||
![Latest release](https://img.shields.io/github/v/release/solarlabsteam/missed-blocks-checker) | ||
[![Actions Status](https://github.com/solarlabsteam/missed-blocks-checker/workflows/test/badge.svg)](https://github.com/solarlabsteam/missed-blocks-checker/actions) | ||
|
||
missed-blocks-checker is a tool that sends a message to Telegram chat if any of the Cosmos validators starts or stops missing blocks. It queries the data from the gRPC endpoint. | ||
|
||
## How can I set it up? | ||
|
||
First of all, go to @BotFather in Telegram and create a bot. After that, there are two options: | ||
- you want to send messages to a user. This user should write a message to @getmyid_bot, then copy the `Your user ID` number. | ||
- you want to send messages to a channel. Write something to a channel, then forward it to @getmyid_bot and copy the `Forwarded from chat` number | ||
|
||
After that, you need to download the latest release from [the releases page](https://github.com/solarlabsteam/missed-blocks-checker/releases/). After that, you should unzip it and you are ready to go: | ||
|
||
```sh | ||
wget <the link from the releases page> | ||
tar xvfz missed-blocks-checker-*.*-amd64.tar.gz | ||
cd missed-blocks-checker-*.*-amd64.tar.gz | ||
./missed-blocks-checker --telegram-token <bot token> --telegram-chat <user or chat ID from the previous step> | ||
``` | ||
|
||
That's not really interesting, what you probably want to do is to have it running in the background. For that, first of all, we have to copy the file to the system apps folder: | ||
|
||
```sh | ||
sudo cp ./missed-blocks-checker /usr/bin | ||
``` | ||
|
||
Then we need to create a systemd service for our app: | ||
|
||
```sh | ||
sudo nano /etc/systemd/system/missed-blocks-checker.service | ||
``` | ||
|
||
You can use this template (change the user to whatever user you want this to be executed from. It's advised to create a separate user for that instead of running it from root): | ||
|
||
``` | ||
[Unit] | ||
Description=Missed Blocks Checker | ||
After=network-online.target | ||
[Service] | ||
User=<username> | ||
TimeoutStartSec=0 | ||
CPUWeight=95 | ||
IOWeight=95 | ||
ExecStart=missed-blocks-checker --telegram-token <bot token> --telegram-chat <user or chat ID> | ||
Restart=always | ||
RestartSec=2 | ||
LimitNOFILE=800000 | ||
KillSignal=SIGTERM | ||
[Install] | ||
WantedBy=multi-user.target | ||
``` | ||
|
||
Then we'll add this service to the autostart and run it: | ||
|
||
```sh | ||
sudo systemctl enable missed-blocks-checker | ||
sudo systemctl start missed-blocks-checker | ||
sudo systemctl status missed-blocks-checker # validate it's running | ||
``` | ||
|
||
If you need to, you can also see the logs of the process: | ||
|
||
```sh | ||
sudo journalctl -u missed-blocks-checker -f | ||
``` | ||
|
||
## How does it work? | ||
|
||
It periodically queries the full node via gRPC for all validators and their missed blocks, then checks the difference with the missed blocks before and now. If the validator is faulty, it writes a Telegram message to a specified chat. | ||
|
||
## How can I configure it? | ||
|
||
You can pass the artuments to the executable file to configure it. Here is the parameters list: | ||
|
||
- `--bech-prefix` - the global prefix for addresses. Defaults to `persistence` | ||
- `--node` - the gRPC node URL. Defaults to `localhost:9090` | ||
- `--log-devel` - logger level. Defaults to `info`. You can set it to `debug` to make it more verbose. | ||
- `--limit` - pagination limit for gRPC requests. Defaults to 1000. | ||
- `--telegram-token` - Telegram bot token | ||
- `--telegram-chat` - Telegram user or chat ID | ||
- `--threshold` - If the missed blocks count is below this value, the messages are not sent. Defaults to 0. | ||
- `--mintscan-prefix` - This bot generates links to Mintscan for validators, using this prefix. Links have the following format: `https://mintscan.io/<mintscan-prefix>/validator/<validator ID>`. Defaults to `persistence`. | ||
- `--interval` - Interval between the two checks, in seconds. Defaults to 120 | ||
|
||
|
||
|
||
You can also specify custom Bech32 prefixes for wallets, validators, consensus nodes, and their pubkeys by using the following params: | ||
- `--bech-validator-prefix` | ||
- `--bech-validator-pubkey-prefix` | ||
- `--bech-consensus-node-prefix` | ||
- `--bech-consensus-node-pubkey-prefix` | ||
|
||
By default, if not specified, it defaults to the next values (as it works this way for the most of the networks): | ||
- `--bech-validator-prefix` = `--bech-prefix` + "valoper" | ||
- `--bech-validator-pubkey-prefix` = `--bech-prefix` + "valoperpub" | ||
- `--bech-consensus-node-prefix` = `--bech-prefix` + "valcons" | ||
- `--bech-consensus-node-pubkey-prefix` = `--bech-prefix` + "valconspub" | ||
|
||
An example of the network where you have to specify all the prefixes manually is Iris, check out the flags example below. | ||
|
||
|
||
## Which networks this is guaranteed to work? | ||
|
||
In theory, it should work on a Cosmos-based blockchains that expose a gRPC endpoint. | ||
|
||
## How can I contribute? | ||
|
||
Bug reports and feature requests are always welcome! If you want to contribute, feel free to open issues or PRs. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
module main | ||
|
||
go 1.16 | ||
|
||
replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 | ||
|
||
require ( | ||
github.com/cosmos/cosmos-sdk v0.42.4 | ||
github.com/rs/zerolog v1.21.0 | ||
google.golang.org/grpc v1.37.0 | ||
gopkg.in/tucnak/telebot.v2 v2.3.5 | ||
) |
Oops, something went wrong.