const Self
Self is this realm's own package path, exported so a caller can build a link back without hardcoding the version.
Package across reads one address across fifteen other realms that are already live, and renders everything they will ...
gno.land/r/moul/x/across/v0One address, read across fifteen realms that were already on chain.
Open /r/moul/x/across/v0:<address> and the page answers with everything fifteen
other realms will say about that address: token balances, an LP position, stake
and unclaimed rewards, a check-in streak, dice rolled, a rate-limit bucket, a
lottery entry, a reaction. Rows that came back empty are counted and hidden.
Not one of the fifteen source realms was changed. None of them knows this realm
exists, none of them registered anywhere, and there is no shared interface, no
base package, no version handshake. The only thing every source had to do was
not declare private = true in its gnomod.toml, which is what lets another
realm import it at all.
That is the composability claim in its weakest, most testable form: a realm's exported reads are a permanent public API, because the path it lives at can never be replaced. What you compile against today is what is on chain forever.
Eight of the sources hold a per-address balance. They agree on nothing:
| realm | signature |
|---|---|
r/moul/x/daily/erc20/v0, …/vestoken/v0, …/wrapped/v0 |
BalanceOf(address) uint64 |
r/moul/x/pairs/aaa/v0, …/bbb/v0 |
BalanceOf(address) int64 |
r/moul/x/grc20faucet/v0 |
BalanceOf(symbol string, owner address) int64 |
r/moul/demo/wikicoin/v0 |
BalanceOf(address) uint |
r/moul/x/daily/dice/v0 |
RollsOf(addr string) []int |
Three integer widths, two signednesses, one that wants a symbol before the
address, one that wants the address as a string. Composition still works, it
just costs one hand-written adapter line per source. Report is those lines and
nothing else, which is also why this realm ships no p/ library: extract one and
both halves are empty.
r/moul/x/amm/v0 exports SharesOf(keyA, keyB string, owner address),
which routes through a helper that panics on an unknown pool. A getter that
panics is not composable: one panicking source takes down a page assembled from
fifteen, and recover() does not catch a cross-realm abort. Only its
PoolCount() is called from here.r/moul/demo/vault/v0 exports MyBalance() with no address parameter, so
it answers for its caller, which from here is this realm.Neither is a bug. Both are what a getter looks like before anyone has tried to call it from another realm.
private = true, the repo default, because nothing needs to import this realm.
The flag is a one-way door decided before the first publish, and it is the single
thing that determines whether a realm can ever appear in a page like this one.
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 across reads one address across fifteen other realms that are already live, and renders everything they will say about it on one page.
It is a composability demo with a working product hiding inside it. The realms it reads were written months apart, by nobody coordinating, and none of them knows this one exists. Not a line of them changed to make this possible: the only requirement any of them had to meet was NOT declaring `private = true`, which is what lets another realm import it at all.
Every other realm here splits into a pure `p/` and a thin `r/`. This one cannot, and that is the point: its entire content is the wiring. Fifteen import lines, one call each, and a table. Extract a library and what is left on both sides is empty.
The signatures below are the honest half of the demo. Eight of these realms hold a per-address balance and they agree on nothing:
1erc20, vestoken, wrapped BalanceOf(address) uint64
2pairs/aaa, pairs/bbb BalanceOf(address) int64
3grc20faucet BalanceOf(symbol string, owner address) int64
4wikicoin BalanceOf(address) uint
5dice RollsOf(addr string) []int
Three integer widths, two signednesses, one that takes the address as a string, one that needs a symbol first. Composition works anyway, because a gno import is a type-checked contract with a permanent artifact behind it and not a call convention anyone has to agree on in advance. It just costs one hand-written adapter per source, which is what the report function is.
Neither is a bug in those realms. Both are what a getter looks like when nobody has tried to call it from another realm yet.
Sources reports how many realms this one reads.
Report collects what every wired source says about who.
Every call in here is a plain exported read on another realm: no cur realm, no cross, nothing written. A read with no realm parameter is borrowed rather than entered (AGENTS.md), so none of these realms even observes a caller.