Accounts
Accounts returns how many addresses have ever claimed.
Command
gnokey query vm/qeval -remote "https://rpc.gno.land" -data "gno.land/r/moul/x/moultest/v0.Accounts()"
Result
Package moultest issues `moultest`, a NATIVE coin, and gives it away.
Native here means the chain's own bank holds it, exactly as it holds GNOT. It is not a GRC20: there is no ledger in this realm's storage, no balance map, no Transfer function, no allowance. A realm with the right banker calls IssueCoin once and from that moment the coin is a first-class chain object, and this realm has no further say in who holds it.
The interesting half is what disappears. Moving moultest needs no code here at all: a plain bank send does it, from any wallet, with no realm call and no approval dance, because the transfer is a tm2 bank message rather than a function call. It can also RIDE a transaction: the `-send` envelope of a call carries it into the realm being called, which is the one thing no GRC20 can do, and Tip exists to show it. The account page of any explorer lists it beside GNOT with nothing registered anywhere.
The half that is worse is the authority. A GRC20's mint and burn live behind a PrivateLedger this realm chooses to guard; a native coin's live in a banker minted from a realm handle, and banker.RemoveCoin takes an ARBITRARY address. Nothing in the chain stops the issuing realm from deleting anybody's balance at any time. This realm does not expose that (see Burn, which is scoped to the caller and to nobody else), but "does not expose it" is the only protection there is, and it lasts exactly as long as the deployed code. That is the real asymmetry against a GRC20, not the ergonomics.
There is no decimals field either, nor a name, nor a symbol: a native denom is a string and nothing else. 1000 moultest is a thousand moultest.
Free money with no ceiling is a spam vector rather than a faucet, so Claim is bounded four ways, and the caps are the point of the experiment as much as the coin is:
Burn does not give any of it back. Issuance is counted monotonically, so claim-burn-claim cannot walk around the per-account cap; what burning moves is the circulating supply, which is why the two numbers are reported separately.
gnomod.toml declares private = true, so this path can be redeployed with corrected code instead of being abandoned for a v1. The price is measured elsewhere in this repo and applies here too: the coins survive a redeploy (they are bank state, held at their owners' addresses, and the denom embeds the package path, which does not move), and everything on this page does not. Claim history, caps consumed and the tip board all return to their init values, which would hand every account a fresh MaxPerAccount. For a coin that is worthless by construction that is an acceptable trade; it would not be for one that is not.
Accounts returns how many addresses have ever claimed.
gnokey query vm/qeval -remote "https://rpc.gno.land" -data "gno.land/r/moul/x/moultest/v0.Accounts()"
BalanceOf returns what the bank holds of moultest for `who`. It reads the chain, not this realm: a balance this realm never saw counts the same.
gnokey query vm/qeval -remote "https://rpc.gno.land" -data "gno.land/r/moul/x/moultest/v0.BalanceOf()"
Burn destroys `amount` of the CALLER's moultest, and only the caller's.
The banker this realm holds could remove coins from any address on the chain without asking, so the `who` here is read from the call frame and is never a parameter. A clawback is what an issuing realm is always able to write; the choice not to is made here, once, and cannot be revisited without a redeploy.
Burning lowers what circulates and does not return any cap headroom: see MaxPerAccount.
# WARNING: This command is running in an INSECURE mode.
# It is strongly recommended to use a hardware device for signing
# and avoid trusting any computer connected to the internet,
# as your private keys could be exposed.
gnokey maketx call -pkgpath "gno.land/r/moul/x/moultest/v0" -func "Burn" -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -chainid "gnoland-1" -remote "https://rpc.gno.land" ADDRESSgnokey query -remote "https://rpc.gno.land" auth/accounts/ADDRESS
gnokey maketx call -pkgpath "gno.land/r/moul/x/moultest/v0" -func "Burn" -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -broadcast=false ADDRESS > call.tx
gnokey sign -tx-path call.tx -chainid "gnoland-1" -account-number ACCOUNTNUMBER -account-sequence SEQUENCENUMBER ADDRESS
gnokey broadcast -remote "https://rpc.gno.land" call.tx
Burned returns how much has been destroyed through Burn.
gnokey query vm/qeval -remote "https://rpc.gno.land" -data "gno.land/r/moul/x/moultest/v0.Burned()"
Circulating returns how much moultest exists right now, from the bank.
gnokey query vm/qeval -remote "https://rpc.gno.land" -data "gno.land/r/moul/x/moultest/v0.Circulating()"
Claim issues ClaimAmount of moultest to the caller and returns it.
It never issues to an address the caller names. That is deliberate: a faucet that mints to a third party is a way to spray a denom nobody asked for into strangers' wallets, and their account page then carries it forever.
# WARNING: This command is running in an INSECURE mode.
# It is strongly recommended to use a hardware device for signing
# and avoid trusting any computer connected to the internet,
# as your private keys could be exposed.
gnokey maketx call -pkgpath "gno.land/r/moul/x/moultest/v0" -func "Claim" -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -chainid "gnoland-1" -remote "https://rpc.gno.land" ADDRESSgnokey query -remote "https://rpc.gno.land" auth/accounts/ADDRESS
gnokey maketx call -pkgpath "gno.land/r/moul/x/moultest/v0" -func "Claim" -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -broadcast=false ADDRESS > call.tx
gnokey sign -tx-path call.tx -chainid "gnoland-1" -account-number ACCOUNTNUMBER -account-sequence SEQUENCENUMBER ADDRESS
gnokey broadcast -remote "https://rpc.gno.land" call.tx
ClaimedBy returns the lifetime total issued to `who` by this realm, which is what MaxPerAccount caps.
gnokey query vm/qeval -remote "https://rpc.gno.land" -data "gno.land/r/moul/x/moultest/v0.ClaimedBy()"
Issued returns how much this realm has ever issued. It only grows, and it is what MaxSupply caps.
gnokey query vm/qeval -remote "https://rpc.gno.land" -data "gno.land/r/moul/x/moultest/v0.Issued()"
NextClaim returns the block height at which `who` may claim again, and whether they have ever claimed at all.
gnokey query vm/qeval -remote "https://rpc.gno.land" -data "gno.land/r/moul/x/moultest/v0.NextClaim()"
Render shows the coin, what is left under each cap, and the tip board. `?<address>` adds that address's balance and claim state.
gnokey query vm/qeval -remote "https://rpc.gno.land" -data "gno.land/r/moul/x/moultest/v0.Render()"
Tip forwards the moultest attached to THIS transaction to `to`, and writes the note on a public board.
The coin arrives in the `-send` envelope of the call, credited to this realm's address before a line of this function runs, and leaves through a BankerTypeOriginSend banker, whose whole authority is that envelope: it can spend what this message paid in and not one coin more, not even out of the realm's own balance. So the realm can route a payment it was handed while being structurally unable to touch anything else.
A GRC20 has no equivalent. Its tokens cannot ride a message, so the same flow costs an Approve, then a call, then an allowance that outlives both.
Anything else in the envelope (the GNOT covering a storage deposit, say) is left alone and stays with the realm.
# WARNING: This command is running in an INSECURE mode.
# It is strongly recommended to use a hardware device for signing
# and avoid trusting any computer connected to the internet,
# as your private keys could be exposed.
gnokey maketx call -pkgpath "gno.land/r/moul/x/moultest/v0" -func "Tip" -args $'' -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -chainid "gnoland-1" -remote "https://rpc.gno.land" ADDRESSgnokey query -remote "https://rpc.gno.land" auth/accounts/ADDRESS
gnokey maketx call -pkgpath "gno.land/r/moul/x/moultest/v0" -func "Tip" -args $'' -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -broadcast=false ADDRESS > call.tx
gnokey sign -tx-path call.tx -chainid "gnoland-1" -account-number ACCOUNTNUMBER -account-sequence SEQUENCENUMBER ADDRESS
gnokey broadcast -remote "https://rpc.gno.land" call.tx