github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/docs/assets/how-to-guides/creating-grc721/mynonfungibletoken-2.gno (about)

     1  func mintNNFT(owner std.Address, n uint64) {
     2  	count := my.TokenCount()
     3  	for i := count; i < count+n; i++ {
     4  		tid := grc721.TokenID(ufmt.Sprintf("%d", i))
     5  		mynonfungibletoken.Mint(owner, tid)
     6  	}
     7  }
     8  
     9  // Getters
    10  
    11  func BalanceOf(user users.AddressOrName) uint64 {
    12  	balance, err := mynonfungibletoken.BalanceOf(user.Resolve())
    13  	if err != nil {
    14  		panic(err)
    15  	}
    16  
    17  	return balance
    18  }
    19  
    20  func OwnerOf(tid grc721.TokenID) std.Address {
    21  	owner, err := mynonfungibletoken.OwnerOf(tid)
    22  	if err != nil {
    23  		panic(err)
    24  	}
    25  
    26  	return owner
    27  }
    28  
    29  func IsApprovedForAll(owner, user users.AddressOrName) bool {
    30  	return mynonfungibletoken.IsApprovedForAll(owner.Resolve(), user.Resolve())
    31  }
    32  
    33  func GetApproved(tid grc721.TokenID) std.Address {
    34  	addr, err := mynonfungibletoken.GetApproved(tid)
    35  	if err != nil {
    36  		panic(err)
    37  	}
    38  
    39  	return addr
    40  }
    41  
    42  // Setters
    43  
    44  func Approve(user users.AddressOrName, tid grc721.TokenID) {
    45  	err := mynonfungibletoken.Approve(user.Resolve(), tid)
    46  	if err != nil {
    47  		panic(err)
    48  	}
    49  }
    50  
    51  func SetApprovalForAll(user users.AddressOrName, approved bool) {
    52  	err := mynonfungibletoken.SetApprovalForAll(user.Resolve(), approved)
    53  	if err != nil {
    54  		panic(err)
    55  	}
    56  }
    57  
    58  func TransferFrom(from, to users.AddressOrName, tid grc721.TokenID) {
    59  	err := mynonfungibletoken.TransferFrom(from.Resolve(), to.Resolve(), tid)
    60  	if err != nil {
    61  		panic(err)
    62  	}
    63  }
    64  
    65  // Admin
    66  
    67  func Mint(to users.AddressOrName, tid grc721.TokenID) {
    68  	caller := std.PrevRealm().Addr()
    69  	assertIsAdmin(caller)
    70  	err := mynonfungibletoken.Mint(to.Resolve(), tid)
    71  	if err != nil {
    72  		panic(err)
    73  	}
    74  }
    75  
    76  func Burn(tid grc721.TokenID) {
    77  	caller := std.PrevRealm().Addr()
    78  	assertIsAdmin(caller)
    79  	err := mynonfungibletoken.Burn(tid)
    80  	if err != nil {
    81  		panic(err)
    82  	}
    83  }
    84  
    85  // Render
    86  
    87  func Render(path string) string {
    88  	switch {
    89  	case path == "":
    90  		return mynonfungibletoken.RenderHome()
    91  	default:
    92  		return "404\n"
    93  	}
    94  }
    95  
    96  // Util
    97  
    98  func assertIsAdmin(address std.Address) {
    99  	if address != admin {
   100  		panic("restricted access")
   101  	}
   102  }