foo1155.gno

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