Overview #
In this guide, we take a look at GnoWatch, a simple real-time monitoring tool written in Go and designed to efficiently check the block signatures (precommits) generated by a gnoland validator node.
GnoWatch actively polls the latest blockchain block at regular intervals (every 60 seconds) and checks whether your validators have signed it. If a validator misses a block, GnoWatch immediately sends an alert to a configured Telegram group or channel, tagging the relevant contacts.
Prerequisites #
Before you start, make sure you have the following:
- A running
gnolandvalidator node (or the address of one you want to watch). - A Telegram Bot and its API token. You can create one via @BotFather.
- The Chat ID of the Telegram group or channel where alerts should be sent (use a negative ID for groups/channels, e.g.
-1001234567890). - Go 1.21+ installed.
Installation #
Clone the repository:
git clone https://github.com/RaulBernal/GnoWatch.git
cd GnoWatch
No extra dependencies are needed beyond the standard Go toolchain. The module file (go.mod) lists everything required.
Configuration #
All monitoring settings live in config.go. Open it and replace the placeholder values with your own:
package main
// Telegram Bot configuration
const (
TelegramBotToken = "123456789:AABBCCDDEEFFaabbccddeeff-1234567890"
TelegramChatID = "-1001234567890" // use negative ID for groups/channels
)
// address monitoring variables
var validatorsToMonGnoland = []Validator{
{Name: "Validator 1", Address: "g1zmua93u53na9xsvtmlh5d8p7pm0w7p52ehewc9", Telegram: "@YourHandle"},
{Name: "Validator AviaOne", Address: "g1e5sxezpafa8lcv5xu3nmw4plz30mnepq2wv9xs", Telegram: "@HandleA @HandleB"},
{Name: "Validator 2", Address: "g1k9cp2fz6n3fa4zftx7cz6wv2hwzaz6lkr0xk7z", Telegram: "@YourHandle"},
}
| Field | Description |
|---|---|
TelegramBotToken | The API token provided by @BotFather |
TelegramChatID | The target group/channel ID (must be negative for groups) |
Name | A human-readable label for the validator |
Address | The g1… bech32 address of the validator |
Telegram | One or more Telegram handles to tag in alert messages |
You can add as many validators as you need — just append extra entries to the slice.
Running GnoWatch #
Run directly with:
go run .
Or build a binary first:
go build -o validator-monitor .
./validator-monitor
Once started, GnoWatch will print a startup message and begin checking every 60 seconds:
Go Bot started, we are going to check some VALIDATORS every 60 seconds
* Checking: g1zmua93u53na9xsvtmlh5d8p7pm0w7p52ehewc9 - Validator 1
* Checking: g1e5sxezpafa8lcv5xu3nmw4plz30mnepq2wv9xs - Validator AviaOne
* Checking: g1k9cp2fz6n3fa4zftx7cz6wv2hwzaz6lkr0xk7z - Validator 2
👍 g1zmua93u53na9xsvtmlh5d8p7pm0w7p52ehewc9 is signing
❌ Validator AviaOne is not signing!!
g1e5sxezpafa8lcv5xu3nmw4plz30mnepq2wv9xs
cc: @HandleA @HandleB
👍 g1k9cp2fz6n3fa4zftx7cz6wv2hwzaz6lkr0xk7z is signing
When a validator misses a block, the same alert is forwarded to the configured Telegram group so the tagged contacts are notified immediately.
Running as a background service (optional) #
For production use you will want GnoWatch to run continuously in the background. A minimal systemd unit:
[Unit]
Description=GnoWatch validator signing monitor
After=network.target
[Service]
ExecStart=/path/to/validator-monitor
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Save it to /etc/systemd/system/gnowatch.service, then enable and start it:
sudo systemctl daemon-reload
sudo systemctl enable --now gnowatch
Summary #
GnoWatch is a lightweight, zero-dependency way to gain immediate visibility into your gnoland validator’s signing activity. With just a Telegram bot and a handful of config lines, you can ensure you are alerted the moment a precommit is missed — keeping your validator healthy and your delegators happy.
- Source code: github.com/RaulBernal/GnoWatch
- License: Apache 2.0