1package fomo3d
2
3import (
4 "std"
5 "strconv"
6
7 "gno.land/p/demo/grc/grc721"
8)
9
10var (
11 fomo3dNFT = grc721.NewNFTWithMetadata("Fomo3D Winner", "FOMO")
12)
13
14// Public getters
15
16func Name() string {
17 return fomo3dNFT.Name()
18}
19
20func Symbol() string {
21 return fomo3dNFT.Symbol()
22}
23
24func BalanceOf(owner std.Address) (uint64, error) {
25 return fomo3dNFT.BalanceOf(owner)
26}
27
28func OwnerOf(tokenID grc721.TokenID) (std.Address, error) {
29 return fomo3dNFT.OwnerOf(tokenID)
30}
31
32func TokenMetadata(tokenID grc721.TokenID) (grc721.Metadata, error) {
33 return fomo3dNFT.TokenMetadata(tokenID)
34}
35
36// Transfer and approval methods
37
38func TransferFrom(from, to std.Address, tokenID grc721.TokenID) error {
39 return fomo3dNFT.TransferFrom(from, to, tokenID)
40}
41
42func SafeTransferFrom(from, to std.Address, tokenID grc721.TokenID) error {
43 return fomo3dNFT.SafeTransferFrom(from, to, tokenID)
44}
45
46func Approve(approved std.Address, tokenID grc721.TokenID) error {
47 return fomo3dNFT.Approve(approved, tokenID)
48}
49
50func GetApproved(tokenID grc721.TokenID) (std.Address, error) {
51 return fomo3dNFT.GetApproved(tokenID)
52}
53
54func SetApprovalForAll(operator std.Address, approved bool) error {
55 return fomo3dNFT.SetApprovalForAll(operator, approved)
56}
57
58func IsApprovedForAll(owner, operator std.Address) bool {
59 return fomo3dNFT.IsApprovedForAll(owner, operator)
60}
61
62// Mints a new NFT for the round winner
63func mintRoundWinnerNFT(winner std.Address, roundNumber int64) error {
64 if winner == "" {
65 return ErrZeroAddress
66 }
67
68 roundStr := strconv.FormatInt(roundNumber, 10)
69 tokenID := grc721.TokenID(roundStr)
70
71 // Create metadata
72 metadata := grc721.Metadata{
73 Name: "Fomo3D Winner - Round #" + roundStr,
74 Description: "Winner of Fomo3D round #" + roundStr,
75 Image: "https://ipfs.io/ipfs/bafybeidayyli6bpewkhgtwqpgubmo77kmgjn4r5zq2i7usoyadcmvynhhq",
76 ExternalURL: "https://gno.land/r/stefann/fomo3d:round/" + roundStr, // TODO: Add this render in main realm that shows details of specific round
77 Attributes: []grc721.Trait{},
78 BackgroundColor: "2D2D2D", // Dark theme background
79 }
80
81 if err := fomo3dNFT.Mint(winner, tokenID); err != nil {
82 return err
83 }
84
85 fomo3dNFT.SetTokenMetadata(tokenID, metadata)
86
87 return nil
88}
nft.gno
2.17 Kb ยท 88 lines