github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/docs/assets/how-to-guides/creating-grc721/mynonfungibletoken-2.gno (about) 1 func mintNNFT(owner std.Address, n uint64) { 2 count := my.TokenCount() 3 for i := count; i < count+n; i++ { 4 tid := grc721.TokenID(ufmt.Sprintf("%d", i)) 5 mynonfungibletoken.Mint(owner, tid) 6 } 7 } 8 9 // Getters 10 11 func BalanceOf(user users.AddressOrName) uint64 { 12 balance, err := mynonfungibletoken.BalanceOf(user.Resolve()) 13 if err != nil { 14 panic(err) 15 } 16 17 return balance 18 } 19 20 func OwnerOf(tid grc721.TokenID) std.Address { 21 owner, err := mynonfungibletoken.OwnerOf(tid) 22 if err != nil { 23 panic(err) 24 } 25 26 return owner 27 } 28 29 func IsApprovedForAll(owner, user users.AddressOrName) bool { 30 return mynonfungibletoken.IsApprovedForAll(owner.Resolve(), user.Resolve()) 31 } 32 33 func GetApproved(tid grc721.TokenID) std.Address { 34 addr, err := mynonfungibletoken.GetApproved(tid) 35 if err != nil { 36 panic(err) 37 } 38 39 return addr 40 } 41 42 // Setters 43 44 func Approve(user users.AddressOrName, tid grc721.TokenID) { 45 err := mynonfungibletoken.Approve(user.Resolve(), tid) 46 if err != nil { 47 panic(err) 48 } 49 } 50 51 func SetApprovalForAll(user users.AddressOrName, approved bool) { 52 err := mynonfungibletoken.SetApprovalForAll(user.Resolve(), approved) 53 if err != nil { 54 panic(err) 55 } 56 } 57 58 func TransferFrom(from, to users.AddressOrName, tid grc721.TokenID) { 59 err := mynonfungibletoken.TransferFrom(from.Resolve(), to.Resolve(), tid) 60 if err != nil { 61 panic(err) 62 } 63 } 64 65 // Admin 66 67 func Mint(to users.AddressOrName, tid grc721.TokenID) { 68 caller := std.PrevRealm().Addr() 69 assertIsAdmin(caller) 70 err := mynonfungibletoken.Mint(to.Resolve(), tid) 71 if err != nil { 72 panic(err) 73 } 74 } 75 76 func Burn(tid grc721.TokenID) { 77 caller := std.PrevRealm().Addr() 78 assertIsAdmin(caller) 79 err := mynonfungibletoken.Burn(tid) 80 if err != nil { 81 panic(err) 82 } 83 } 84 85 // Render 86 87 func Render(path string) string { 88 switch { 89 case path == "": 90 return mynonfungibletoken.RenderHome() 91 default: 92 return "404\n" 93 } 94 } 95 96 // Util 97 98 func assertIsAdmin(address std.Address) { 99 if address != admin { 100 panic("restricted access") 101 } 102 }