github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/examples/gno.land/r/demo/foo1155/foo1155.gno (about) 1 package foo1155 2 3 import ( 4 "std" 5 6 "gno.land/p/demo/grc/grc1155" 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 dummyURI = "ipfs://xyz" 15 admin std.Address = "g10x5phu0k6p64cwrhfpsc8tk43st9kug6wft530" 16 foo = grc1155.NewBasicGRC1155Token(dummyURI) 17 ) 18 19 func init() { 20 mintGRC1155Token(admin) // @administrator (10) 21 } 22 23 func mintGRC1155Token(owner std.Address) { 24 for i := 1; i <= 10; i++ { 25 tid := grc1155.TokenID(ufmt.Sprintf("%d", i)) 26 foo.SafeMint(owner, tid, 100) 27 } 28 } 29 30 // Getters 31 32 func BalanceOf(user pusers.AddressOrName, tid grc1155.TokenID) uint64 { 33 balance, err := foo.BalanceOf(users.Resolve(user), tid) 34 if err != nil { 35 panic(err) 36 } 37 38 return balance 39 } 40 41 func BalanceOfBatch(ul []pusers.AddressOrName, batch []grc1155.TokenID) []uint64 { 42 var usersResolved []std.Address 43 44 for i := 0; i < len(ul); i++ { 45 usersResolved[i] = users.Resolve(ul[i]) 46 } 47 balanceBatch, err := foo.BalanceOfBatch(usersResolved, batch) 48 if err != nil { 49 panic(err) 50 } 51 52 return balanceBatch 53 } 54 55 func IsApprovedForAll(owner, user pusers.AddressOrName) bool { 56 return foo.IsApprovedForAll(users.Resolve(owner), users.Resolve(user)) 57 } 58 59 // Setters 60 61 func SetApprovalForAll(user pusers.AddressOrName, approved bool) { 62 err := foo.SetApprovalForAll(users.Resolve(user), approved) 63 if err != nil { 64 panic(err) 65 } 66 } 67 68 func TransferFrom(from, to pusers.AddressOrName, tid grc1155.TokenID, amount uint64) { 69 err := foo.SafeTransferFrom(users.Resolve(from), users.Resolve(to), tid, amount) 70 if err != nil { 71 panic(err) 72 } 73 } 74 75 func BatchTransferFrom(from, to pusers.AddressOrName, batch []grc1155.TokenID, amounts []uint64) { 76 err := foo.SafeBatchTransferFrom(users.Resolve(from), users.Resolve(to), batch, amounts) 77 if err != nil { 78 panic(err) 79 } 80 } 81 82 // Admin 83 84 func Mint(to pusers.AddressOrName, tid grc1155.TokenID, amount uint64) { 85 caller := std.GetOrigCaller() 86 assertIsAdmin(caller) 87 err := foo.SafeMint(users.Resolve(to), tid, amount) 88 if err != nil { 89 panic(err) 90 } 91 } 92 93 func MintBatch(to pusers.AddressOrName, batch []grc1155.TokenID, amounts []uint64) { 94 caller := std.GetOrigCaller() 95 assertIsAdmin(caller) 96 err := foo.SafeBatchMint(users.Resolve(to), batch, amounts) 97 if err != nil { 98 panic(err) 99 } 100 } 101 102 func Burn(from pusers.AddressOrName, tid grc1155.TokenID, amount uint64) { 103 caller := std.GetOrigCaller() 104 assertIsAdmin(caller) 105 err := foo.Burn(users.Resolve(from), tid, amount) 106 if err != nil { 107 panic(err) 108 } 109 } 110 111 func BurnBatch(from pusers.AddressOrName, batch []grc1155.TokenID, amounts []uint64) { 112 caller := std.GetOrigCaller() 113 assertIsAdmin(caller) 114 err := foo.BatchBurn(users.Resolve(from), batch, amounts) 115 if err != nil { 116 panic(err) 117 } 118 } 119 120 // Render 121 122 func Render(path string) string { 123 switch { 124 case path == "": 125 return foo.RenderHome() 126 default: 127 return "404\n" 128 } 129 } 130 131 // Util 132 133 func assertIsAdmin(address std.Address) { 134 if address != admin { 135 panic("restricted access") 136 } 137 }