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

across/v0 package

Overview

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.

Why this realm holds no state and extracts no library

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.

What it measures, besides balances

The signatures below are the honest half of the demo. Eight of these realms hold a per-address balance and they agree on nothing:

Example
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.

The two sources that could not be read

  • r/moul/x/amm/v0 exports SharesOf(keyA, keyB string, owner address), and it routes through mustPool, which PANICS when the pool does not exist. A getter that panics is not composable: fifteen sources on one page means one panicking source takes the whole page down, and a wrapper cannot recover, because recover() does not catch a cross-realm abort. So amm contributes PoolCount() to the index and nothing to a report.
  • r/moul/demo/vault/v0 exports MyBalance() with no address parameter. It answers for whoever is calling, which from here is this realm, so the value is structurally unreadable from outside.

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.

Function

Report

func Report(who address) []fact

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.

Param

Command

gnokey query vm/qeval -remote "https://rpc.gno.land" -data "gno.land/r/moul/x/across/v0.Report()"

Result