Search Apps Documentation Source Content File Folder Download Copy Actions Download State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

README.md

4.90 Kb · 111 lines

gno.land/r/moul/x/wiki/v0

An open, on-chain encyclopedia. Anyone can create or edit a page, every edit is a signed revision, and the whole history is public and tamper-evident.

A thin realm over p/moul/x/wiki/v0: the library owns content (titles, revisions, wikilinks, categories, diffs, rendering), this realm owns authority (who may write what) and the chain wiring (block height, block time, the calling address, transaction links). There is no policy in the library and no content logic here.

Writing

call who
Edit(title, body, summary) anyone, subject to the page's protection
Revert(title, rev, summary) same
Comment(title, body, replyTo) anyone not banned, whatever the protection
HideComment(title, id) steward
Protect(title, "open"|"semi"|"locked") steward
Move(from, to, reason) steward
Blank(title, reason) steward
Purge(title) steward
AddEditor / RemoveEditor / Ban / Unban / SetCooldown steward
1gnokey maketx call -pkgpath gno.land/r/moul/x/wiki/v0 -func Edit \
2  -args 'Gno land' -args 'gno.land is a chain that runs [[Gno]].
3[[Category:Chains]]
4' -args 'expand the intro' \
5  -gas-fee 1000000ugnot -gas-wanted 20000000 -broadcast -chainid <id> <key>

The body is markdown plus [[wikilinks]], [[Category:Name]] and a #REDIRECT [[Target]] first line; the syntax table is in the library README.

Reading

route page
`` front page: counts and recent changes
Title the article
Title/history?offset= revisions, newest first
Title/raw current source with its SHA-256
Title/rev/<id> one stored revision
Title/diff?from=&to= a line diff
Title/talk?offset= the page's discussion
Category:Name the category and its members
Special:AllPages?ns= · Special:Categories · Special:RecentChanges · Special:Backlinks?page= · Special:Stats listings

Render is total: a malformed path returns a page, never an abort.

Authority

One ownable.Ownable steward, transferable, so the wiki can be handed to a DAO realm without redeploying. Three protection levels: open (anyone), semi (an explicit editor list), locked (steward only). A page that does not exist yet is open to anyone.

Commenting ignores the protection level on purpose. Locking an article is how a steward stops an edit war; the discussion is where that war is supposed to move, so a locked page still takes comments. A banned address cannot comment, and the cooldown still applies.

On anti-vandalism, the honest version: the storage deposit makes adding bytes cost the adder, but the chain refunds released storage to whoever frees it, at the realm's blended rate, not to whoever paid (see the library README, "Who gets the deposit back"). So shrinking a page can pay the editor who does it, and reverting the damage costs the good actor. That is why Blank, Purge and HideComment are steward-gated, and why the ban list, the protection levels and SetCooldown are not optional extras.

Blanking is the deletion a chain can honestly offer. The page stops rendering and stops costing rent as its bodies age out, while the revision spine stays as proof that something was there and who removed it. Purge releases the retained bytes immediately. Neither removes the transactions that wrote the content: on a public chain, "delete" means "stop serving", not "unhappen".

Cost

Storage deposit is 100ugnot per byte, locked while the bytes are held and released when they are removed. A 5 KB article is therefore about 0.5 GNOT of deposit for its current revision, plus roughly 0.02 GNOT for each revision's permanent spine; the default retention window keeps three bodies per page. Every page's footer shows its own held bytes and deposit, and Special:Stats shows the wiki's.

Retention defaults to 3 rather than 1 so that a revert can reach past two bad edits in a row, which is the common vandalism pattern. Raising it costs linearly more deposit per page.

Seeded content

init writes four linked pages (Gno land, Gno, Tendermint2, Help:Editing) so a fresh deploy renders a connected wiki instead of an empty index.


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:

gno.land/r/moul/x/wiki/v0 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.