This week, I stop flying blind, or with a foggy view only thanks trough the glasses of SQL queries.
A blockchain without visibility is a black box, and black boxes are dangerous. You can believe everything is working until the moment it very clearly is not. As ZooBC starts behaving like a real network, I realize that relying on logs and ad-hoc SQL queries is no longer acceptable.
I need to see the chain.
The Problem Becomes Obvious
During testing, I keep interrupting myself to open a database shell.
Is the chain actually growing?
Which nodes are connected right now?
Who produced the last block?
Why is participation dropping on this node?
Each question sends me digging into SQLite, manually running queries, cross-referencing timestamps, and trying to reconstruct what just happened. It works, but it is slow, fragile, and completely wrong for something I am doing dozens of times a day.
These questions need instant answers.
So this week, instead of pushing protocol features forward, I step sideways and build tools.
Two Tools, Two Perspectives
I end up building two complementary monitoring tools, each serving a different purpose.
The first one is for humans.
The second one is for automation.
Together, they give ZooBC eyes.
The TUI Dashboard: Seeing the Network Breathe
The first tool is a full-screen terminal dashboard built with ncurses. It runs directly in the terminal and updates continuously, giving me a live view of the network as it evolves.
This is the monitor I keep open on a second screen while testing.
It shows:
- Live block production with height, timestamp, and producer
- Connected peers with node IDs and network addresses
- Registered blocksmiths versus observer nodes, clearly marked
- Participation scores for each node
- Current mempool size and pending transactions
- Basic network health indicators
When everything is running, it looks something like this:
ZooBC Network Monitor Height: 12,847
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
LATEST BLOCKS
#12847 2025-11-14 16:23:15 ZNK_RVG57E6P... txs: 3 coinbase: 1.50
#12846 2025-11-14 16:23:05 ZNK_QWSO7O3A... txs: 0 coinbase: 1.50
#12845 2025-11-14 16:22:55 ZNK_YSGMNXQG... txs: 1 coinbase: 1.50
CONNECTED PEERS
R Node ID Address Score
[✓] 8941cf6b1067788e... 128.199.38.140:8001 95.2%
[✓] 2d9e438674fe0087... 158.247.207.68:8001 93.8%
[ ] 7fe00879180cb202... 167.99.41.137:8001 0.0%
MEMPOOL: 7 pending transactions [Q]uit [B]lacklist [R]efresh
This view changes how I work. Instead of guessing, I observe. Instead of assuming, I verify. When something looks wrong, it usually is.
The Lightweight Monitor: Automation-Friendly
The second tool is deliberately simpler.
It is a small command-line utility that outputs structured JSON. No colors. No UI. Just data. This tool is meant to be piped into scripts, parsed with jq, or fed into monitoring systems.
For example:
$ mon status
returns:
{
"height": 12847,
"latest_block_time": "2025-11-14T16:23:15Z",
"connected_peers": 9,
"registered_nodes": 7,
"mempool_size": 7,
"chain_synced": true
}
This becomes incredibly useful when testing scenarios repeatedly or running multiple nodes. Machines do not need dashboards. They need clean data.
The Database as Source of Truth
Both tools read directly from the node’s SQLite database.
No RPC calls.
No internal hooks.
No special privileges.
The database is the source of truth, and the monitors treat it as such.
Some of the key queries include:
-- Latest blocks
SELECT height, timestamp, blocksmith_public_key,
total_amount, total_fee, total_coinbase
FROM main_block
WHERE is_main_chain = 1
ORDER BY height DESC LIMIT 10;
-- Participation scores
SELECT node_id, score, latest, height
FROM participation_score
WHERE latest = 1
ORDER BY score DESC;
-- Registered nodes
SELECT node_public_key, owner_account_address,
locked_balance, registration_height
FROM node_registry
WHERE status = 0; -- ACTIVE
The database is opened in read-only mode, ensuring the monitor can never interfere with the running node. Observation without side effects.
Unexpected Lessons
The biggest surprise is how much these tools change development speed.
Seeing participation scores drop in real time immediately shows when nodes miss their turns. Watching the mempool grow and shrink exposes transaction propagation delays I would never have noticed in logs. Small anomalies become obvious patterns once you can see them.
The feedback loop tightens dramatically.
This week reinforces something I already knew but keep relearning the hard way:
Good tools are not a luxury.
They are a force multiplier.
ZooBC is no longer invisible to me.
I can finally watch the chain think.

