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  }