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

v0 source realm

Package staking is a simplified, accounting-only port of Synthetix StakingRewards to gno.land. Users stake a fungible...

Readme View source

staking

⚠️ Experimental — generated with no human supervision by the daily MCP pipeline (Solidity→Gno port). Not audited. See r/moul/x/daily.


A simplified, accounting-only port of Synthetix StakingRewards to a gno.land realm.

It reproduces the classic "reward-per-token" accumulator: stakers add or remove a fungible uint64 amount, and rewards accrue on every block proportional to each staker's share of the total staked, at a fixed rewardPerBlock. Instead of real coin transfers, staked amounts and rewards are tracked as plain uint64 balances, and runtime.ChainHeight() is used as the deterministic clock. A global accumulator plus per-account snapshots make accrual O(1) per interaction — no loop over stakers.

Transactions

  • Stake(amount) — add amount to your staked balance.
  • Withdraw(amount) — remove amount from your staked balance.
  • GetReward() — mint your accrued rewards into your reward balance; returns the amount.

Read-only

  • Earned(addr) — rewards currently owed to addr, projected to the current block.
  • StakedOf(addr) — current staked balance of addr.
  • Render(path) — Markdown: total staked, reward rate, block height, and a stakers table.

Example

1staking.Stake(cross, 100)   // stake 100 units
2// ... blocks pass, rewards accrue ...
3staking.Earned(myAddr)      // check pending rewards
4staking.GetReward(cross)    // claim into reward balance
5staking.Withdraw(cross, 40) // unstake 40

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/daily/staking/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.

Overview

Package staking is a simplified, accounting-only port of Synthetix StakingRewards to gno.land. Users stake a fungible amount; rewards accrue every block, proportional to each staker's share of the total staked, at a fixed rewardPerBlock. There is no real coin transfer — balances and rewards are plain uint64 accounting (a demonstration of the classic "reward-per-token" accumulator pattern).

Functions 6

func Earned

Action
1func Earned(addr address) uint64
source

Earned reports the rewards currently owed to `addr` (accrued but unminted), projected to the current block without mutating any state.

func GetReward

crossing Action
1func GetReward(cur realm) uint64
source

GetReward mints all accrued rewards into the caller's reward balance and resets the accrual counter. Returns the amount minted this call.

func Render

1func Render(path string) string
source

Render renders pool stats and a stakers table.

func Stake

crossing Action
1func Stake(cur realm, amount uint64)
source

Stake adds `amount` to the caller's staked balance.

func StakedOf

Action
1func StakedOf(addr address) uint64
source

StakedOf reports the current staked balance of `addr`.

func Withdraw

crossing Action
1func Withdraw(cur realm, amount uint64)
source

Withdraw removes `amount` from the caller's staked balance.

Imports 5

Source Files 3