PathrockNetwork Gno Explorer
HomeBlocksTransactionsRealmsPackagesValidatorsAnalytics

PathrockNetwork Gno Explorer — an independent explorer for Gno.land Mainnet (gnoland-1), operated by PathrockNetwork. Not an official Gno.land service.

gnowebarchive RPC

gno.land/r/moul/x/daily/countminsketchdemo/v0

Realm
Open in gnoweb ↗

Overview

Kind
Realm (renderable)
Name
v0
Namespace
moul / x / daily / countminsketchdemo
Files
3 (README)(gnomod.toml)
Exported functions
1
Module
gno.land/r/moul/x/daily/countminsketchdemo/v0
gno
0.9

Files (3)

  • README.mdmarkdown
  • gnomod.tomltoml
  • countminsketchdemo.gnogno

Select a file to view its exact on-chain source. Sorted README → gnomod → sources → tests.

Functions

  • Render(path string) string

Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.

Rendered

RenderedRawgnoweb ↗
# Count–Min Sketch

Frequency estimates in fixed space, demoing the [`p/moul/x/daily/countminsketch`](/p/moul/x/daily/countminsketch/v0) library.

## The workload

`195` events over `123` distinct keys: three heavy hitters and a long tail of one-offs.

## A generously sized sketch (1024 × 4)

| key | true | estimate |
|---|---|---|
| `alice` | 40 | 40 |
| `bob` | 25 | 25 |
| `carol` | 10 | 10 |
| `user0` | 1 | 1 |
| `never-seen` | 0 | 0 |

Exact here, and `never-seen` reads `0` — a **zero estimate is definitive**: that key was never added.

## A deliberately tiny one (8 × 2)

Only `16` counters for `123` distinct keys, so collisions are guaranteed:

| key | true | estimate | error |
|---|---|---|---|
| `alice` | 40 | 54 | +14 |
| `bob` | 25 | 39 | +14 |
| `carol` | 10 | 24 | +14 |
| `user0` | 1 | 16 | +15 |

Every error is **positive**. That is the guarantee: the sketch may overcount, never undercount, so an estimate is an upper bound — "at most this often", never "exactly this often".

## Where the collisions are

Row 0 of the tiny sketch, and the column each key lands in:

| column | counter |
|---|---|
| 0 | 15 |
| 1 | 25 ← `carol` |
| 2 | 16 |
| 3 | 15 |
| 4 | 54 ← `alice` |
| 5 | 16 |
| 6 | 15 |
| 7 | 39 ← `bob` |

Taking the **minimum** across rows is what limits the damage: an overestimate needs a collision in *every* row at once.

## Why bother

| | exact map | sketch (1024 × 4) |
|---|---|---|
| storage | one entry per distinct key, unbounded | 4096 counters, fixed |
| answer | exact | upper bound |

On chain the second row is the point: storage driven by user input is a liability, and a sketch sized once cannot be made to grow.

vm/qrender output, sanitized (docs/render-security.md) and displayed in an empty-sandbox iframe — scripts, forms and popups cannot run. Links stay inert in-preview; right-click to open.