# Microblog Wall > ⚠️ **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](https://github.com/moul/gno-contracts/blob/main/r/moul/x/daily/README.md) --- A public, append-only microblog for gno.land. Anyone can post a short message (up to 280 bytes); each post records the caller's address and the block height at which it was made. The `Render` view shows the wall newest-first, 20 posts per page, with total count and prev/next pagination driven by the render path. - **Realm path:** `gno.land/r/REPLACE_ADDR/microblog` - **Gno version:** 0.9 (sapphire) ## API - `Post(cur realm, msg string)` — crossing tx. Panics if `msg` is empty or longer than 280 bytes. Stores `{author, msg, height}`. - `Count() int` — total number of posts. - `Render(path string) string` — Markdown wall, newest-first, paginated. ## Example calls Post a message (crossing call via `gnokey`): ```sh gnokey maketx call \ -pkgpath "gno.land/r/REPLACE_ADDR/microblog" \ -func Post \ -args "gm gno.land 👋" \ -gas-fee 1000000ugnot -gas-wanted 2000000 \ -broadcast -chainid sapphire-1 -remote mykey ``` View the wall in gnoweb: ``` https://gno.land/r/REPLACE_ADDR/microblog # page 1 (newest 20) https://gno.land/r/REPLACE_ADDR/microblog:?page=2 # older posts https://gno.land/r/REPLACE_ADDR/microblog:/2 # same page, path form ``` From another realm: ```go import "gno.land/r/REPLACE_ADDR/microblog" func Shout(cur realm) { microblog.Post(cross(cur), "posted from another realm") } ``` ## What changed in v1 Identical behaviour to [`v0`](https://github.com/moul/gno-contracts/tree/4f2df83869b80470eb81c48a82fdbe82256b8113/r/moul/x/daily/microblog) apart from rendering, which now goes through [`p/moul/kit/ui`](/p/moul/kit/ui/v0) instead of the local `escapeInline`, `shortAddr` helpers. **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. **Real escaping.** The local helper replaced a handful of markdown metacharacters. `ui.Inline` and `ui.Cell` delegate to [`p/nt/markdown/sanitize`](/p/nt/markdown/sanitize/v0), which also strips bidi and zero-width characters and folds newlines, so user text cannot reorder or escape the line it sits on. Visible change: addresses now render in monospace. 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](https://github.com/moul/gno-contracts)** — moul's versioned gno.land contracts. See the repository for the full catalog, build/test tooling, and usage. **Dependency graph:** ![gno.land/r/moul/x/daily/microblog/v1 dependency graph](https://raw.githubusercontent.com/moul/gno-contracts/main/_assets/gno.land/r/moul/x/daily/microblog/v1/deps.png) > 🧪 **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](https://github.com/moul/gno-contracts/blob/main/DISCLAIMER.md).