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

Sources

func Sources() int

Sources reports how many realms this one reads.

Command

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

Result