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  }