Skip to content

Commit

Permalink
fix empty json data for class/nft metadata (#332)
Browse files Browse the repository at this point in the history
  • Loading branch information
Dreamer authored Feb 1, 2023
1 parent 00581e3 commit a61dbef
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 14 deletions.
36 changes: 24 additions & 12 deletions modules/nft/types/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,10 @@ func (cb ClassBuilder) BuildMetadata(class nft.Class) (string, error) {
//when classData is not a legal json, there is no need to parse the data
return base64.RawStdEncoding.EncodeToString([]byte(metadata.Data)), nil
}
//note: if metadata.Data is null, it may cause map to be redefined as nil
if kvals == nil {
kvals = make(map[string]interface{})
}
}
creator, err := sdk.AccAddressFromBech32(metadata.Creator)
if err != nil {
Expand Down Expand Up @@ -210,17 +214,21 @@ func (cb ClassBuilder) Build(classID, classURI, classData string) (nft.Class, er
}
}

data, err := json.Marshal(dataMap)
if err != nil {
return nft.Class{}, err
var data = ""
if len(dataMap) > 0 {
dataBz, err := json.Marshal(dataMap)
if err != nil {
return nft.Class{}, err
}
data = string(dataBz)
}

any, err := codectypes.NewAnyWithValue(&DenomMetadata{
Creator: creator,
Schema: schema,
MintRestricted: mintRestricted,
UpdateRestricted: updateRestricted,
Data: string(data),
Data: data,
})
if err != nil {
return nft.Class{}, err
Expand Down Expand Up @@ -261,6 +269,10 @@ func (tb TokenBuilder) BuildMetadata(token nft.NFT) (string, error) {
//when nftMetadata is not a legal json, there is no need to parse the data
return base64.RawStdEncoding.EncodeToString([]byte(nftMetadata.Data)), nil
}
//note: if nftMetadata.Data is null, it may cause map to be redefined as nil
if kvals == nil {
kvals = make(map[string]interface{})
}
}
kvals[TokenKeyName] = MediaField{Value: nftMetadata.Name}
kvals[TokenKeyURIhash] = MediaField{Value: token.UriHash}
Expand Down Expand Up @@ -317,14 +329,18 @@ func (tb TokenBuilder) Build(classId, tokenId, tokenURI, tokenData string) (nft.
}
}

data, err := json.Marshal(dataMap)
if err != nil {
return nft.NFT{}, err
var data = ""
if len(dataMap) > 0 {
dataBz, err := json.Marshal(dataMap)
if err != nil {
return nft.NFT{}, err
}
data = string(dataBz)
}

metadata, err := codectypes.NewAnyWithValue(&NFTMetadata{
Name: name,
Data: string(data),
Data: data,
})
if err != nil {
return nft.NFT{}, err
Expand All @@ -338,7 +354,3 @@ func (tb TokenBuilder) Build(classId, tokenId, tokenURI, tokenData string) (nft.
Data: metadata,
}, nil
}

func PopIfExist() {

}
4 changes: 2 additions & 2 deletions modules/nft/types/builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ func TestClassBuilder_Build(t *testing.T) {
args: args{
classData: `{"irismod:creator":{"value":"f8a9eee6bce5bc043e5feec2baef355f87dbfcdf"},"irismod:description":{"value":"digital cat"},"irismod:mint_restricted":{"value":true},"irismod:name":{"value":"kitty"},"irismod:schema":{"value":"{}"},"irismod:symbol":{"value":"symbol"},"irismod:update_restricted":{"value":true},"irismod:uri_hash":{"value":"uri_hash"}}`,
},
want: `{"@type":"/cosmos.nft.v1beta1.Class","id":"cat","name":"kitty","symbol":"symbol","description":"digital cat","uri":"uri","uri_hash":"uri_hash","data":{"@type":"/irismod.nft.DenomMetadata","creator":"cosmos1lz57ae4uuk7qg0jlampt4me4t7rahlxl5pnn3y","schema":"{}","mint_restricted":true,"update_restricted":true,"data":"{}"}}`,
want: `{"@type":"/cosmos.nft.v1beta1.Class","id":"cat","name":"kitty","symbol":"symbol","description":"digital cat","uri":"uri","uri_hash":"uri_hash","data":{"@type":"/irismod.nft.DenomMetadata","creator":"cosmos1lz57ae4uuk7qg0jlampt4me4t7rahlxl5pnn3y","schema":"{}","mint_restricted":true,"update_restricted":true,"data":""}}`,
wantErr: false,
},
{
Expand Down Expand Up @@ -240,7 +240,7 @@ func TestClassBuilder_Build(t *testing.T) {
require.NoError(t, err, " class cdc.MarshalInterfaceJSON failed")

if string(got) != tt.want {
t.Errorf("ClassBuilder.BuildMetadata() = %v, want %v", got, tt.want)
t.Errorf("ClassBuilder.BuildMetadata() = %v, want %v", string(got), tt.want)
}
})
}
Expand Down

0 comments on commit a61dbef

Please sign in to comment.