nft.gno

2.17 Kb ยท 88 lines
 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}