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

README.md

2.27 Kb · 52 lines

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.