Skip to content

Commit a61dbef

Browse files
author
Dreamer
authored
fix empty json data for class/nft metadata (#332)
1 parent 00581e3 commit a61dbef

File tree

2 files changed

+26
-14
lines changed

2 files changed

+26
-14
lines changed

modules/nft/types/builder.go

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ func (cb ClassBuilder) BuildMetadata(class nft.Class) (string, error) {
7272
//when classData is not a legal json, there is no need to parse the data
7373
return base64.RawStdEncoding.EncodeToString([]byte(metadata.Data)), nil
7474
}
75+
//note: if metadata.Data is null, it may cause map to be redefined as nil
76+
if kvals == nil {
77+
kvals = make(map[string]interface{})
78+
}
7579
}
7680
creator, err := sdk.AccAddressFromBech32(metadata.Creator)
7781
if err != nil {
@@ -210,17 +214,21 @@ func (cb ClassBuilder) Build(classID, classURI, classData string) (nft.Class, er
210214
}
211215
}
212216

213-
data, err := json.Marshal(dataMap)
214-
if err != nil {
215-
return nft.Class{}, err
217+
var data = ""
218+
if len(dataMap) > 0 {
219+
dataBz, err := json.Marshal(dataMap)
220+
if err != nil {
221+
return nft.Class{}, err
222+
}
223+
data = string(dataBz)
216224
}
217225

218226
any, err := codectypes.NewAnyWithValue(&DenomMetadata{
219227
Creator: creator,
220228
Schema: schema,
221229
MintRestricted: mintRestricted,
222230
UpdateRestricted: updateRestricted,
223-
Data: string(data),
231+
Data: data,
224232
})
225233
if err != nil {
226234
return nft.Class{}, err
@@ -261,6 +269,10 @@ func (tb TokenBuilder) BuildMetadata(token nft.NFT) (string, error) {
261269
//when nftMetadata is not a legal json, there is no need to parse the data
262270
return base64.RawStdEncoding.EncodeToString([]byte(nftMetadata.Data)), nil
263271
}
272+
//note: if nftMetadata.Data is null, it may cause map to be redefined as nil
273+
if kvals == nil {
274+
kvals = make(map[string]interface{})
275+
}
264276
}
265277
kvals[TokenKeyName] = MediaField{Value: nftMetadata.Name}
266278
kvals[TokenKeyURIhash] = MediaField{Value: token.UriHash}
@@ -317,14 +329,18 @@ func (tb TokenBuilder) Build(classId, tokenId, tokenURI, tokenData string) (nft.
317329
}
318330
}
319331

320-
data, err := json.Marshal(dataMap)
321-
if err != nil {
322-
return nft.NFT{}, err
332+
var data = ""
333+
if len(dataMap) > 0 {
334+
dataBz, err := json.Marshal(dataMap)
335+
if err != nil {
336+
return nft.NFT{}, err
337+
}
338+
data = string(dataBz)
323339
}
324340

325341
metadata, err := codectypes.NewAnyWithValue(&NFTMetadata{
326342
Name: name,
327-
Data: string(data),
343+
Data: data,
328344
})
329345
if err != nil {
330346
return nft.NFT{}, err
@@ -338,7 +354,3 @@ func (tb TokenBuilder) Build(classId, tokenId, tokenURI, tokenData string) (nft.
338354
Data: metadata,
339355
}, nil
340356
}
341-
342-
func PopIfExist() {
343-
344-
}

modules/nft/types/builder_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ func TestClassBuilder_Build(t *testing.T) {
203203
args: args{
204204
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"}}`,
205205
},
206-
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":"{}"}}`,
206+
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":""}}`,
207207
wantErr: false,
208208
},
209209
{
@@ -240,7 +240,7 @@ func TestClassBuilder_Build(t *testing.T) {
240240
require.NoError(t, err, " class cdc.MarshalInterfaceJSON failed")
241241

242242
if string(got) != tt.want {
243-
t.Errorf("ClassBuilder.BuildMetadata() = %v, want %v", got, tt.want)
243+
t.Errorf("ClassBuilder.BuildMetadata() = %v, want %v", string(got), tt.want)
244244
}
245245
})
246246
}

0 commit comments

Comments
 (0)