github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/examples/gno.land/r/demo/foo721/foo721.gno (about) 1 package foo721 2 3 import ( 4 "std" 5 6 "gno.land/p/demo/grc/grc721" 7 "gno.land/p/demo/ufmt" 8 "gno.land/r/demo/users" 9 10 pusers "gno.land/p/demo/users" 11 ) 12 13 var ( 14 admin std.Address = "g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj" 15 foo = grc721.NewBasicNFT("FooNFT", "FNFT") 16 ) 17 18 func init() { 19 mintNNFT(admin, 10) // @administrator (10) 20 mintNNFT("g1var589z07ppjsjd24ukm4uguzwdt0tw7g47cgm", 5) // @hariom (5) 21 } 22 23 func mintNNFT(owner std.Address, n uint64) { 24 count := foo.TokenCount() 25 for i := count; i < count+n; i++ { 26 tid := grc721.TokenID(ufmt.Sprintf("%d", i)) 27 foo.Mint(owner, tid) 28 } 29 } 30 31 // Getters 32 33 func BalanceOf(user pusers.AddressOrName) uint64 { 34 balance, err := foo.BalanceOf(users.Resolve(user)) 35 if err != nil { 36 panic(err) 37 } 38 39 return balance 40 } 41 42 func OwnerOf(tid grc721.TokenID) std.Address { 43 owner, err := foo.OwnerOf(tid) 44 if err != nil { 45 panic(err) 46 } 47 48 return owner 49 } 50 51 func IsApprovedForAll(owner, user pusers.AddressOrName) bool { 52 return foo.IsApprovedForAll(users.Resolve(owner), users.Resolve(user)) 53 } 54 55 func GetApproved(tid grc721.TokenID) std.Address { 56 addr, err := foo.GetApproved(tid) 57 if err != nil { 58 panic(err) 59 } 60 61 return addr 62 } 63 64 // Setters 65 66 func Approve(user pusers.AddressOrName, tid grc721.TokenID) { 67 err := foo.Approve(users.Resolve(user), tid) 68 if err != nil { 69 panic(err) 70 } 71 } 72 73 func SetApprovalForAll(user pusers.AddressOrName, approved bool) { 74 err := foo.SetApprovalForAll(users.Resolve(user), approved) 75 if err != nil { 76 panic(err) 77 } 78 } 79 80 func TransferFrom(from, to pusers.AddressOrName, tid grc721.TokenID) { 81 err := foo.TransferFrom(users.Resolve(from), users.Resolve(to), tid) 82 if err != nil { 83 panic(err) 84 } 85 } 86 87 // Admin 88 89 func Mint(to pusers.AddressOrName, tid grc721.TokenID) { 90 caller := std.PrevRealm().Addr() 91 assertIsAdmin(caller) 92 err := foo.Mint(users.Resolve(to), tid) 93 if err != nil { 94 panic(err) 95 } 96 } 97 98 func Burn(tid grc721.TokenID) { 99 caller := std.PrevRealm().Addr() 100 assertIsAdmin(caller) 101 err := foo.Burn(tid) 102 if err != nil { 103 panic(err) 104 } 105 } 106 107 // Render 108 109 func Render(path string) string { 110 switch { 111 case path == "": 112 return foo.RenderHome() 113 default: 114 return "404\n" 115 } 116 } 117 118 // Util 119 120 func assertIsAdmin(address std.Address) { 121 if address != admin { 122 panic("restricted access") 123 } 124 }