github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/docs/assets/how-to-guides/creating-grc721/mynonfungibletoken-1.gno (about) 1 package mynft 2 3 import ( 4 "github.com/gnolang/gno/examples/gno.land/p/demo/grc/grc721" 5 "std" 6 //"gno.land/p/demo/grc/grc721" 7 ) 8 9 var ( 10 mynft *grc721.IGRC721 11 admin std.Address 12 ) 13 14 // init is called once at time of deployment 15 func init() { 16 // Set deployer of Realm to admin 17 admin = std.PrevRealm().Addr() 18 19 // Set token name, symbol and number of decimals 20 mynft = grc721.NewBasicNFT("My NFT", "MNFT") 21 } 22 23 func BalanceOf(owner std.Address) uint64 { 24 balance, err := mynft.BalanceOf(owner) 25 if err != nil { 26 panic(err) 27 } 28 29 return balance 30 } 31 32 func OwnerOf(tid grc721.TokenID) std.Address { 33 owner, err := mynft.OwnerOf(tid) 34 if err != nil { 35 panic(err) 36 } 37 38 return owner 39 } 40 41 func IsApprovedForAll(owner, operator std.Address) bool { 42 return mynft.IsApprovedForAll(owner, operator) 43 } 44 45 func GetApproved(tid grc721.TokenID) std.Address { 46 addr, err := mynft.GetApproved(tid) 47 if err != nil { 48 panic(err) 49 } 50 51 return addr 52 } 53 54 func Approve(to std.Address, tid grc721.TokenID) { 55 err := mynft.Approve(to, tid) 56 if err != nil { 57 panic(err) 58 } 59 } 60 61 func SetApprovalForAll(operator std.Address, approved bool) { 62 err := mynft.SetApprovalForAll(operator, approved) 63 if err != nil { 64 panic(err) 65 } 66 } 67 68 func TransferFrom(from, to std.Address, tid grc721.TokenID) { 69 err := mynft.TransferFrom(from, to, tid) 70 if err != nil { 71 panic(err) 72 } 73 } 74 75 func Mint(to std.Address, tid grc721.TokenID) { 76 assertIsAdmin(std.PrevRealm().Addr()) 77 err := mynft.Mint(to, tid) 78 if err != nil { 79 panic(err) 80 } 81 } 82 83 func Burn(tid grc721.TokenID) { 84 assertIsAdmin(std.PrevRealm().Addr()) 85 err := mynft.Burn(tid) 86 if err != nil { 87 panic(err) 88 } 89 } 90 91 func Render(path string) string { 92 switch { 93 case path == "": 94 return mynft.RenderHome() 95 default: 96 return "404\n" 97 } 98 } 99 100 func assertIsAdmin(address std.Address) { 101 if address != admin { 102 panic("restricted access") 103 } 104 }