Showcases |

Monitor block signing using GnoWatch

Back Author:  RaulBernal 3 min to read Check on repo

This guide explains how to monitor gnoland validator’s block signing using GnoWatch.

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 gnoland validator 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"},
}
FieldDescription
TelegramBotTokenThe API token provided by @BotFather
TelegramChatIDThe target group/channel ID (must be negative for groups)
NameA human-readable label for the validator
AddressThe g1… bech32 address of the validator
TelegramOne 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.

Gnops is a community project. Check out the GitHub Repo.