PathrockNetwork Gno Explorer
HomeBlocksTransactionsTokensRealmsPackagesValidatorsAnalytics

PathrockNetwork Gno Explorer — an independent explorer for Gno.land Mainnet (gnoland-1), operated by PathrockNetwork. Not an official Gno.land service.

gnowebarchive RPC

gno.land/r/moul/vesting/v0

Realm
Open in gnoweb ↗

Overview

Kind
Realm (renderable)
Name
v0
Namespace
moul / vesting
Files
6 (README)(gnomod.toml)
Exported functions
7
Module
gno.land/r/moul/vesting/v0
gno
0.9

Files (6)

  • README.mdmarkdown
  • gnomod.tomltoml
  • render.gnogno
  • vesting.gnogno
  • render_example_test.gnogno
  • vesting_test.gnogno
README.mdPreviewRaw
# `r/moul/vesting`

How much of a gno.land account's balance can **actually move right now**.

## Read this before trusting a number here

A realm cannot read an account's vesting schedule. `banker.GetCoins` returns the **total**
balance with the locked part included, and no native exposes `std.VestingSchedule`. So the
page reads two things from the chain and is told the third:

| figure | source | trust |
|---|---|---|
| balance | `banker.GetCoins`, every render | always true |
| the clock | the block time, every render | always true |
| the schedule | supplied, see below | only as good as its source |

Every rendered figure says which of the two it rests on. Nothing is presented as verified
when it is not. That honesty is the feature: a page that quietly guessed the locked amount
would be worse than no page.

## Where a schedule comes from

**The URL**, for a one-off that stores nothing:

```
/r/moul/vesting/v0:g1youraddress?o=106560000000&s=1789225200&e=1852383600
```

`o` original vesting in ugnot, `s` start, `e` end, both unix seconds, `&d=1` for a `delayed`
schedule. Read your real one off the chain:

```sh
gnokey query auth/accounts/g1youraddress -remote https://rpc.gno.land:443
```

**Or the registry.** `Declare` writes a schedule for the **caller's own address and no
other**. That is the whole trust model: an address can only misdescribe itself, and a wrong
entry misleads nobody but its author. `Forget` takes it off again.

## Why a cached schedule is honest rather than stale

Because a schedule can never change. `std.SetVesting` has exactly one caller in the
monorepo, `gno.land/pkg/gnoland/app.go`, during genesis balance loading, and no message type
creates or modifies one. A schedule declared correctly today is correct forever.

## Routes

| | |
|---|---|
| `/r/moul/vesting/v0` | every schedule on file |
| `…:g1…` | one address |
| `…:g1…?o=&s=&e=` | one address, with a schedule you supply |

## Notes

The seeded schedules are source constants, not registry rows. This realm is
`private = true`, so a redeploy wipes realm state, and the one schedule the page exists to
show should not need a transaction to come back. A seeded address is refused by `Declare`
for the same reason: a redeploy would silently revert whatever it set.

The arithmetic is [`p/moul/vesting`](/p/moul/vesting/v0), which mirrors what the chain
enforces, down to the rounding direction.

<!-- BEGIN GNOCONTRACTS FOOTER (generated by `make readmes`; do not edit below) -->

---

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/vesting/v0 dependency graph](https://raw.githubusercontent.com/moul/gno-contracts/main/_assets/gno.land/r/moul/vesting/v0/deps.png)

> ⚠️ **Disclaimer:** provided as-is, without warranty; not security-audited. Full disclaimer: [DISCLAIMER](https://github.com/moul/gno-contracts/blob/main/DISCLAIMER.md).

<!-- END GNOCONTRACTS FOOTER -->

Functions

  • Count() int

  • Declare(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, original int64, start int64, end int64, delayed bool)

  • Forget(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string})

  • LockedOf(addr string) (locked int64, ok bool)

  • Render(path string) string

  • ScheduleOf(addr string) (original int64, start int64, end int64, delayed bool, ok bool)

  • SpendableOf(addr string) (spendable int64, ok bool)

Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.

Rendered

RenderedRawgnoweb ↗

vm/qrender output, sanitized (docs/render-security.md) and displayed in an empty-sandbox iframe — scripts, forms and popups cannot run. Links stay inert in-preview; right-click to open.