1package gnft23import (4 prabc "gno.land/p/gnoswap/rbac/v1"5 "gno.land/p/nt/grc721/v0"6 "gno.land/p/nt/ufmt/v0"7 "gno.land/r/gnoswap/access/v1"8)910// assertIsValidTokenURI panics if the token already has a URI set.11func assertIsValidTokenURI(tid grc721.TokenID) {12 uri, _ := meta.TokenURI(tid)13 if uri != "" {14 panic(makeErrorWithDetails(errCannotSetURI, ufmt.Sprintf("token id (%s) has already set URI", string(tid))))15 }16}1718// assertIsNonEmptyTokenURI panics if the new URI is empty.19func assertIsNonEmptyTokenURI(tURI string) {20 if tURI == "" {21 panic(makeErrorWithDetails(errCannotSetURI, "empty token URI"))22 }23}2425// assertIsValidAddress panics if the address is invalid.26func assertIsValidAddress(addr address) {27 if !addr.IsValid() {28 panic(makeErrorWithDetails(errInvalidAddress, ufmt.Sprintf("address (%s)", addr.String())))29 }30}3132// assertFromIsValidAddress panics if the from address is invalid.33func assertFromIsValidAddress(from address) {34 if !from.IsValid() {35 panic(makeErrorWithDetails(errInvalidAddress, ufmt.Sprintf("from address (%s)", from.String())))36 }37}3839// assertToIsValidAddress panics if the to address is invalid.40func assertToIsValidAddress(to address) {41 if !to.IsValid() {42 panic(makeErrorWithDetails(errInvalidAddress, ufmt.Sprintf("to address (%s)", to.String())))43 }44}4546// assertIsAllowedTransfer enforces that NFTs held47// by the staker (i.e. currently staked) can only be moved by the staker itself.48// Other tokens fall through to the standard GRC721 owner/approval checks performed inside ledger.49func assertIsAllowedTransfer(caller address, tid grc721.TokenID) {50 owner, err := token.OwnerOf(tid)51 if err != nil {52 // Surface the same not-found error as the standard transfer path.53 checkErr(err)54 }5556 stakerAddr := access.MustGetAddress(prabc.ROLE_STAKER.String())57 if owner != stakerAddr {58 return59 }6061 if caller != stakerAddr {62 panic(makeErrorWithDetails(63 errStakedTokenLocked,64 ufmt.Sprintf("token (%s) is held by staker", string(tid)),65 ))66 }67}68Approve(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}, approved string, tid string) interface {Error func() string}
BalanceOf(owner string) (int64, interface {Error func() string})
Burn(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}, tid string)
Exists(tid string) bool
GetApproved(tid string) (string, interface {Error func() string})
IsApprovedForAll(owner string, operator string) bool
Mint(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}, to string, tid string) string
MustOwnerOf(tid string) string
Name() string
OwnerOf(tid string) (string, interface {Error func() string})
Render(path string) string
SetApprovalForAll(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}, operator string, approved bool) interface {Error func() string}
SetTokenURI(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}, tid string, tURI string) (bool, interface {Error func() string})
Symbol() string
TokenURI(tid string) (string, interface {Error func() string})
TotalSupply() int64
TransferFrom(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}, from string, to string, tid string) interface {Error func() string}
Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.
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.