README.md
erc721 — NFT (ERC-721 port)
⚠️ Experimental — generated with no human supervision by the daily MCP pipeline (Solidity→Gno port). Not audited. See r/moul/x/daily.
An idiomatic gno.land port of the Solidity ERC-721 non-fungible token
standard. Each token is a unique, sequentially-minted integer id owned by
exactly one address. Ownership, per-owner balances and single-token approvals
live in ordered avl.Trees, so Render can list every token deterministically.
msg.sender maps to unsafe.PreviousRealm().Address(), require to panic,
and Solidity events to chain.Emit (Mint, Transfer, Approval).
Transactions
Mint(cur realm, to address) int64— mint the next token id toto; returns the id.Transfer(cur realm, to address, id int64)— move a token you own (or are approved for) toto; clears the approval.Approve(cur realm, spender address, id int64)— owner grantsspenderthe right to transfer tokenid.
Read-only
OwnerOf(id int64) address— owner of a token (panics if it does not exist).BalanceOf(owner address) uint64— number of tokens held byowner.TotalSupply() int64— total tokens in circulation.Render(path string)— Markdown: total supply + a token → owner → approved table.
Example
Mint(cur, g1alice...) // -> tokenID 1
Mint(cur, g1alice...) // -> tokenID 2
Approve(cur, g1bob..., 1) // alice approves bob for token 1
Transfer(cur, g1carol..., 1) // owner alice sends token 1 to carol
OwnerOf(1) // -> g1carol...
BalanceOf(g1alice...) // -> 1
TotalSupply() // -> 2
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:

🧪 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.