README.md
Personal Blog
⚠️ 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 multi-author on-chain blog realm for gno.land. Anyone can publish a post; each post records its author (the calling address) and the block height at which it was published. Posts are stored persistently and rendered newest-first, with a dedicated page for each post's full text.
Realm path: gno.land/r/REPLACE_ADDR/blog
Example calls
Publish a post (state-mutating, crossing function):
gnokey maketx call -pkgpath "gno.land/r/REPLACE_ADDR/blog" \
-func Publish -args "My first post" -args "Hello, gno.land!" \
-gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid sapphire-1 KEY
Read views (no transaction needed):
- Root — list all posts, newest first: render
gno.land/r/REPLACE_ADDR/blog - Single post by id: render
gno.land/r/REPLACE_ADDR/blog:/0
PostCount() returns the total number of published posts.
What changed in v1
State moved from a hand-rolled avl.Tree + nextID + zero-padding helper to
p/moul/kit/store, which keys entries by
seqid instead of a fixed-width decimal string.
v0 padded ids to width 12. Past that width the padding stops and the tree
orders "1000000000000" before "999999999999", so every list this realm
renders would be wrong from that entry on. store keys are 8 big-endian bytes
whose order is numeric for every uint64, so there is no width left to outgrow.
Ids stay plain integers, and Post loses its ID field, which the store now
owns. Two things a reader will notice:
- Post ids now start at 1.
v0handed out 0 for the first post; the store never assigns 0, so the zero id stays usable as "absent". /0is no longer a post path. It is rejected as invalid rather than looked up, along with anything else that is not a plain decimal.
This is a storage change, 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.