Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
133 changes: 133 additions & 0 deletions content/english/articles/showcases/gnowatch/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
---
title: Monitor block signing using GnoWatch
publishDate: 2026-01-10T08:00:00-01:00
translationKey: 'gnowatch'
tags: ['gnoland', 'validator', 'gnowatch', 'observability', 'monitoring']
level: Beginner
author: RaulBernal
summary: 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](https://t.me/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:

```bash
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:

```go
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:

```bash
go run .
```

Or build a binary first:

```bash
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:

```ini
[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:

```bash
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](https://github.com/RaulBernal/GnoWatch)
- **License**: Apache 2.0