This repository provides lightweight tools to monitor the Gno.land blockchain and its validators.
๐งฉ Architecture Overview:
Two services are available:
-
GovDAO โ Detect news proposal and status (ACCEPTED / REFUSED / IN PROGRESS).
-
Validator Alerting โ Monitors the entire validator set, calculates participation rates and sends Discord/Slack/Telegram alerts when needed. Also exposes Prometheus metrics.
Requirements
1.Copy the configuration template and edit it:
cd backend
cp config.yaml.template config.yaml
nano config.yaml2.Customize parameters as needed. For example:
backend_port: "8989"
allow_origin: "http://localhost:3000"
rpc_endpoint: "https://rpc.test9.testnets.gno.land"
metrics_port: 8888
gnoweb: "https://test9.testnets.gno.land"
graphql: "indexer.test9.testnets.gno.land/graphql/query"
clerk_secret_key: "sk_test...." #change me
dev_mode: false # Set to true for local development without Clerk auth
token_telegram_validator: ""
token_telegram_govdao: ""3.Start the backend:
docker compose up -d โ Add webhook URL:
curl -L -X POST '127.0.0.7:8989/webhooks/[govdao | validator]' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer Clerk_Token ' \
-d '{
"URL": "https://discord.com/api/webhooks/.....",
"Type": "discord",
"Description":"Samourai"
}'โฐ List webhook URL:
curl -L -X GET '127.0.0.7:8989/webhooks/[govdao | validator]' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer Clerk_Token'
โ Delete webhook URL:
curl -L -X DELETE '127.0.0.7:8989/webhooks/[govdao | validator]?id=2' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer Clerk_Token'
๐ Update webhook URL:
curl -L -X PUT '127.0.0.7:8989/webhooks/[govdao | validator]' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer Clerk_Token'
-d '{
"ID": 3,
"URL": "https://discord.com/api/...",
"Type": "discord",
"Description": "Samourai"
}Sends alerts (Discord/Slack) when:
- Rpc is down
- The blockchain is stuck on the same block for more than 2 minutes.
- A new validator joins the network.
- A validator's missed block :
- WARNING if a validator missed 5 blocks.
- CRITICAL if a validator missed more of 30 blocks
- Send Resolve Alert.
- Send Daily Report:
The disponible period for metrics:
- current_week
- current_month
- current_year
- all_time
Participate Rate:
The participation rate represents the percentage of blocks in which a validator successfully participated during a given time period.
curl -X GET '127.0.0.1:8989/Participation?period=all_time'Response:
[{"addr":"g1ek7ftha29qv4ahtv7jzpc0d57lqy7ynzklht7t","moniker":"gnocore-val-01","participationRate":100},
{"addr":"g1j306jcl4qyhgjw78shl3ajp88vmvdcf7m7ntm2","moniker":"onbloc-val-02","participationRate":100}]Missing Block Metrics: The Missing Block metric measures the total number of blocks that a validator failed to participate in during a given period
curl -X GET '127.0.0.1:8989/missing_block?period=all_time''Response:
[{"moniker":"gnocore-val-01","addr":"g1ek7ftha29qv4ahtv7jzpc0d57lqy7ynzklht7t","missingBlock":1},
{"moniker":"onbloc-val-02","addr":"g1j306jcl4qyhgjw78shl3ajp88vmvdcf7m7ntm2","missingBlock":1},
{"moniker":"onbloc-val-01","addr":"g1kntcjkfplj0z44phajajwqkx5q4ry5yaft5q2h","missingBlock":1}...Tx Contrib Metrics: The Tx Contribution metric measures how much a validator has contributed to the total number of transactions processed across all validators during a specific period.
curl -X GET '127.0.0.1:8989/tx_contrib?period=all_time'Response:
[{"moniker":"gnocore-val-01","addr":"g1ek7ftha29qv4ahtv7jzpc0d57lqy7ynzklht7t","txContrib":14.4},
{"moniker":"onbloc-val-02","addr":"g1j306jcl4qyhgjw78shl3ajp88vmvdcf7m7ntm2","txContrib":22.9},...Lastest incidents: The Latest Incidents metric retrieves the most recent critical or warning events (alerts) detected for validators within a specific time period.
curl -X GET '127.0.0.1:8989/latest_incidents?period=all_time'Response:
[{"moniker":"onbloc-val-02","addr":"g1j306jcl4qyhgjw78shl3ajp88vmvdcf7m7ntm2","level":"CRITICAL","startHeight":78811,"endHeight":78840,"msg":"","sentAt":"2025-10-20T14:40:45.452216011-03:00"},
{"moniker":"all","addr":"all","level":"CRITICAL","startHeight":78840,"endHeight":78840,"msg":"๐จ CRITICAL : Blockchain stuck at height 78840 since 18 Oct 25 16:29 UTC (121h33m45s ago)","sentAt":"2025-10-23T15:03:10.282235678-03:00"},
{"moniker":"onbloc-val-02","addr":"g1j306jcl4qyhgjw78shl3ajp88vmvdcf7m7ntm2","level":"WARNING","startHeight":78834,"endHeight":78838,"msg":"","sentAt":"2025-10-22T13:28:53.018836743-03:00"},Uptime Metrics:
Validator Uptime represents the percentage of the last 500 blocks in which a validator was active and participated successfully.
curl -X GET 'localhost:8989/uptime'Response:
[{"moniker":"onbloc-val-02","addr":"g1j306jcl4qyhgjw78shl3ajp88vmvdcf7m7ntm2","uptime":94},
{"moniker":"gnocore-val-01","addr":"g1ek7ftha29qv4ahtv7jzpc0d57lqy7ynzklht7t","uptime":100}]Operation time Metrics:
Operation Time represents the number of days between a validatorโs last successful participation and its most recent downtime.
curl -X GET 'localhost:8989/operation_time'Response:
[{"moniker":"gnocore-val-01",
"addr":"g1ek7ftha29qv4ahtv7jzpc0d57lqy7ynzklht7t",
"lastDownDate":"2025-10-14 08:00:00+00:00",
"lastUpDate":"2025-10-18 16:29:24.242186417+00:00","operationTime":4.4}....Metrics are exposed at http://localhost:8888/metrics.
List of metrics:
gnoland_validator_participation_rate{moniker="gnocore-val-01",validator_address="g1ek7ftha29qv4ahtv7jzpc0d57lqy7ynzklht7t"} 99.99873156005428gnoland_missed_blocks{moniker="gnocore-val-01",validator_address="g1ek7ftha29qv4ahtv7jzpc0d57lqy7ynzklht7t"} 1gnoland_consecutive_missed_blocks{moniker="onbloc-val-02",validator_address="g1j306jcl4qyhgjw78shl3ajp88vmvdcf7m7ntm2"} 30
/status โ list recent GovDAO proposals
โฎ Params: limit (optional, default: 10)
/status limit=5
/executedproposals โ show the last executed proposals
โฎ Params: limit (optional, default: 10)
/executedproposals limit=5
/lastproposal โ show the most recent proposal
โฑ๏ธ Available periods
current_weekcurrent_monthcurrent_yearall_time
๐ก Commands
๐ฆ Particpate rate command Shows the participation rate of validators for a given period. Examples:
/status [period=...] [limit=N]
/status(defaults: period=current_month, limit=10)/status period=current_month limit=5
๐ Up time command Displays uptime statistics of validator. Examples:
/uptime [limit=N]
/uptime(default: limit=10)/uptime limit=3
๐ช Tx contribution command
Shows each validatorโs contribution to transaction inclusion.
Examples:
/tx_contrib [period=...] [limit=N]
/tx_contrib(defaults: period=current_month, limit=10)/tx_contrib period=current_year limit=20
๐ง Subscribe missing block command Displays how many blocks each validator missed for a given period. Examples:
/missing [period=...] [limit=N]
/missing(defaults: period=current_month, limit=10)/missing period=all_time limit=50
๐ฌ Subscribe command Show your active subscriptions and available validators
/subscribe list
Enable alerts for one or more validators
/subscribe on [addr] [more...]
Disable alerts for one or more validators
/subscribe off [addr] [more...]\n
Enable alerts for all validators
/subscribe on all
Disable alerts for all validators
/subscribe off all





