Skip to content

Commit

Permalink
-update saving grc1155 so it makes most sense
Browse files Browse the repository at this point in the history
-update the getbalances functions so they're easier to parse
  • Loading branch information
matijamarjanovic committed Jan 12, 2025
1 parent b5967e4 commit 8727cc6
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 39 deletions.
1 change: 1 addition & 0 deletions examples/gno.land/r/matijamarjanovic/test/gno.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module gno.land/r/matijamarjanovic/test
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package tokenhub
package test

import (
"std"
Expand All @@ -7,6 +7,7 @@ import (
"gno.land/p/demo/grc/grc721"
"gno.land/p/demo/grc/grc1155"
"gno.land/p/demo/ufmt"
"gno.land/r/matijamarjanovic/tokenhub"
)

var (
Expand All @@ -26,18 +27,18 @@ var (
func init() {
testAddr := std.Address("g1ej0qca5ptsw9kfr64ey8jvfy9eacga6mpj2z0y")

RegisterNFT(func() grc721.IGRC721 { return nftA }, "nft-a")
RegisterNFT(func() grc721.IGRC721 { return nftB }, "nft-b")
RegisterNFT(func() grc721.IGRC721 { return nftC }, "nft-c")
tokenhub.RegisterNFT(func() grc721.IGRC721 { return nftA }, "nft-a")
tokenhub.RegisterNFT(func() grc721.IGRC721 { return nftB }, "nft-b")
tokenhub.RegisterNFT(func() grc721.IGRC721 { return nftC }, "nft-c")

RegisterToken(tokenA.Getter(), "token-a")
RegisterToken(tokenB.Getter(), "token-b")
RegisterToken(tokenC.Getter(), "token-c")
tokenhub.RegisterToken(tokenA.Getter(), "token-a")
tokenhub.RegisterToken(tokenB.Getter(), "token-b")
tokenhub.RegisterToken(tokenC.Getter(), "token-c")

RegisterGRC1155Token(mtGameItems.Getter(), "sword", "game-sword")
RegisterGRC1155Token(mtGameItems.Getter(), "potion", "game-potion")
RegisterGRC1155Token(mtArtworks.Getter(), "artwork_1", "art-piece-1")
RegisterGRC1155Token(mtCollectibles.Getter(), "rare_card", "card-rare")
tokenhub.RegisterGRC1155Token(mtGameItems.Getter(), "sword")
tokenhub.RegisterGRC1155Token(mtGameItems.Getter(), "potion")
tokenhub.RegisterGRC1155Token(mtArtworks.Getter(), "artwork_1")
tokenhub.RegisterGRC1155Token(mtCollectibles.Getter(), "rare_card")

MintTestNFTs(testAddr)
MintTestTokens(testAddr)
Expand Down
46 changes: 18 additions & 28 deletions examples/gno.land/r/matijamarjanovic/tokenhub/tokenhub.gno
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ var (
ErrMTInfoNotFound = errors.New("Multi-token info not found")

pageSize = 1 // tokens per page
test = ""
)

func RegisterToken(tokenGetter grc20.TokenGetter, slugs ...string) {
Expand Down Expand Up @@ -64,13 +65,12 @@ func RegisterNFT(nftGetter grc721.NFTGetter, slugs ...string) error {
return nil
}

func RegisterGRC1155Token(mtGetter grc1155.MultiTokenGetter, tokenID string, slugs ...string) error {
// for grc1155 is a little bit different, since the one collection can have multiple tokens, this is why don't use slugs but tokenIDs,
// and the collection is saved as a part of the :value in the node
func RegisterGRC1155Token(mtGetter grc1155.MultiTokenGetter, tokenID string) error {
rlmPath := std.PrevRealm().PkgPath()
slug := ""
if len(slugs) > 0 {
slug = slugs[0]
}
key := fqname.Construct(rlmPath, slug)

key := fqname.Construct(rlmPath, tokenID)

if registeredMTs.Has(key) {
return ErrMTAlreadyRegistered
Expand All @@ -93,6 +93,7 @@ func GetMyBalances() string {

func Render(path string) string {
var sb strings.Builder
sb.WriteString(test)

switch {
case path == "":
Expand Down Expand Up @@ -324,28 +325,23 @@ func getBalances(addr std.Address) string {
return false
})

sb.WriteString("Balances:")
sb.WriteString("Balances: ")
balances.Iterate("", "", func(key string, value interface{}) bool {
switch {
case strings.HasPrefix(key, "nft:"):
balance := value.(uint64)
symbol := strings.TrimPrefix(key, "nft:")
sb.WriteString(ufmt.Sprintf("NFT %s: %d ", symbol, balance))
sb.WriteString(ufmt.Sprintf("NFT:%s:%d,", symbol, balance))
sb.WriteString(ufmt.Sprintf("Token:%s:%d,", symbol, balance))
case strings.HasPrefix(key, "token:"):
balance := value.(uint64)
symbol := strings.TrimPrefix(key, "token:")
sb.WriteString(ufmt.Sprintf("Token %s: %d ", symbol, balance))
sb.WriteString(ufmt.Sprintf("Token:%s:%d,", symbol, balance))
case strings.HasPrefix(key, "mt:"):
balance := value.(uint64)
symbol := strings.TrimPrefix(key, "mt:")
info, exists := registeredMTs.Get(strings.TrimPrefix(key, "mt:"))
if !exists {
panic("MT info not found")
}
collectionPath := strings.TrimPrefix(symbol, std.PrevRealm().PkgPath()+".")
sb.WriteString(ufmt.Sprintf("MultiToken %s.%s: %d ",
collectionPath,
info.(GRC1155TokenInfo).TokenID,
sb.WriteString(ufmt.Sprintf("MultiToken:%s:%d,",
symbol,
balance))
}
return false
Expand Down Expand Up @@ -390,28 +386,22 @@ func getNonZeroBalances(addr std.Address) string {
return false
})

sb.WriteString("Non-Zero Balances:")
sb.WriteString("Non-Zero Balances: ")
balances.Iterate("", "", func(key string, value interface{}) bool {
switch {
case strings.HasPrefix(key, "nft:"):
balance := value.(uint64)
symbol := strings.TrimPrefix(key, "nft:")
sb.WriteString(ufmt.Sprintf("NFT %s: %d ", symbol, balance))
sb.WriteString(ufmt.Sprintf("NFT:%s:%d,", symbol, balance))
case strings.HasPrefix(key, "token:"):
balance := value.(uint64)
symbol := strings.TrimPrefix(key, "token:")
sb.WriteString(ufmt.Sprintf("Token %s: %d ", symbol, balance))
sb.WriteString(ufmt.Sprintf("Token:%s:%d,", symbol, balance))
case strings.HasPrefix(key, "mt:"):
balance := value.(uint64)
symbol := strings.TrimPrefix(key, "mt:")
info, exists := registeredMTs.Get(strings.TrimPrefix(key, "mt:"))
if !exists {
panic("MT info not found")
}
collectionPath := strings.TrimPrefix(symbol, std.PrevRealm().PkgPath()+".")
sb.WriteString(ufmt.Sprintf("MultiToken %s.%s: %d ",
collectionPath,
info.(GRC1155TokenInfo).TokenID,
sb.WriteString(ufmt.Sprintf("MultiToken:%s:%d,",
symbol,
balance))
}
return false
Expand Down

0 comments on commit 8727cc6

Please sign in to comment.