func Count
ActionCount returns the number of currently registered handles.
Package handles is a tiny on-chain nickname registry.
⚠️ Experimental — generated with no human supervision. This realm was produced automatically by an MCP-driven agent to exercise the gno MCP server and tooling, and to generate test content for gno compilers, linters and formatters. Not audited. Not for production. Full context & folder README: r/moul/x/daily
A tiny on-chain nickname registry. Any address can claim one unique handle
(3-20 lowercase letters/digits, starting with a letter), attach a short bio,
transfer the handle to another address, or release it back into the pool.
Two avl.Tree indexes (handle -> record, owner -> record) keep lookups
in both directions cheap and deterministic.
Realm path: gno.land/r/g12cs4cehujpffpjpywmkqj43m6u5ya53nj69sjz/handles
Register(cur, "moul") # claim the handle "moul" for the caller
SetBio(cur, "building gno stuff")
Transfer(cur, g1...recipient) # hand the handle to another address
Release(cur) # free the handle back up
OwnerOf("moul") # (address, bool)
HandleOf(g1...) # (string, bool)
Count() # number of registered handles
Render("") lists every registered handle in a table; Render("/moul")
shows a single handle's detail page (owner, bio, block registered).
Built and tested against a local gno build at master.3130+bf5b31eda
(GNOROOT pointed at a full gnolang/gno checkout). gno test . and
gno lint . both pass (6 tests, 0 lint issues). Note for test authors:
plain recover() did not catch panics thrown across a cross(cur)
boundary in this toolchain build — the non-crossing call form
(Register(cur, ...) instead of Register(cross(cur), ...)) was used
in the two panic-expectation tests instead, since no realm boundary is
crossed and there was nothing to revive.
Identical behaviour to v0 apart from rendering, which now goes
through p/moul/kit/ui instead of the local short helper.
One address format. Eleven realms carried their own shortAddr with four different truncation rules, so the same account rendered differently depending on which realm you opened. ui.Addr is that decision made once: 8 leading characters, an ellipsis, 4 trailing, in backticks.
The rendering change means the output differs from v0, which under this repo's versioning rule is a compatibility change, hence a new version rather than an edit in place. v0 stays live and untouched.
Part of moul/gno-contracts — moul's versioned gno.land contracts. See the repository for the full catalog, build/test tooling, and usage.
Dependency graph:

🧪 Highly experimental — potentially vibe-coded. Not audited; may break, change, or be removed at any time. Do not use with anything of value. Full disclaimer: DISCLAIMER.
Package handles is a tiny on-chain nickname registry.
Any address may claim one unique handle (3-20 lowercase letters/digits, starting with a letter), attach a short bio, transfer the handle to another address, or release it back to the pool. It is deliberately small: two AVL indexes (handle -> record, address -> record) and a handful of guarded mutators.
Count returns the number of currently registered handles.
HandleOf returns the handle owned by addr, if any.
Register claims handle for the caller. Aborts if the handle is invalid, already taken, or the caller already owns a handle (release it first).
Release frees the handle owned by the caller, making it claimable again.
Render renders Markdown. "/" lists every handle; "/<handle>" shows a single record's detail.
SetBio updates the bio of the handle owned by the caller.
Transfer moves the caller's handle to another address that does not already own one.