Skip to content

Commit cc938da

Browse files
committed
fix: allow arbitrary asset onchain metadata
1 parent 3cdc7c6 commit cc938da

File tree

4 files changed

+78
-18
lines changed

4 files changed

+78
-18
lines changed

api_assets.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,6 @@ const (
1717
resourcePolicyAssets = "assets/policy"
1818
)
1919

20-
type AssetOnchainMetadata struct {
21-
Name string `json:"name"`
22-
Image string `json:"image"`
23-
}
24-
2520
// Contains metadata information about an asset.
2621
type AssetMetadata struct {
2722
Name string `json:"name"`
@@ -56,7 +51,7 @@ type Asset struct {
5651
MintOrBurnCount int `json:"mint_or_burn_count"`
5752

5853
// On-chain metadata which SHOULD adhere to the valid standards, based on which we perform the look up and display the asset (best effort)
59-
OnchainMetadata *AssetOnchainMetadata `json:"onchain_metadata"`
54+
OnchainMetadata *interface{} `json:"onchain_metadata"`
6055
// Enum: "CIP25v1" "CIP25v2" "CIP68v1"
6156
// If on-chain metadata passes validation, we display the standard under which it is valid
6257
OnchainMetadataStandard *string `json:"onchain_metadata_standard"`

api_assets_test.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@ import (
1212
)
1313

1414
func TestAssetUnmarshal(t *testing.T) {
15+
16+
var onchainMetadata interface{} = map[string]interface{}{
17+
"image": "ipfs://ipfs/QmfKyJ4tuvHowwKQCbCHj4L5T3fSj8cjs7Aau8V7BWv226",
18+
"name": "My NFT token",
19+
"description": "optional",
20+
}
21+
1522
fp := filepath.Join(testdata, "json", "assets", "asset.json")
1623
want := blockfrost.Asset{
1724
Asset: "b0d07d45fe9514f80213f4020e5a61241458be626841cde717cb38a76e7574636f696e",
@@ -21,10 +28,7 @@ func TestAssetUnmarshal(t *testing.T) {
2128
InitialMintTxHash: "6804edf9712d2b619edb6ac86861fe93a730693183a262b165fcc1ba1bc99cad",
2229
MintOrBurnCount: 1,
2330
Quantity: "12000",
24-
OnchainMetadata: &blockfrost.AssetOnchainMetadata{
25-
Image: "ipfs://ipfs/QmfKyJ4tuvHowwKQCbCHj4L5T3fSj8cjs7Aau8V7BWv226",
26-
Name: "My NFT token",
27-
},
31+
OnchainMetadata: &onchainMetadata,
2832
Metadata: &blockfrost.AssetMetadata{
2933
Name: "nutcoin",
3034
Description: "The Nut Coin",
@@ -62,6 +66,18 @@ func TestResourceAssetIntegration(t *testing.T) {
6266
want := blockfrost.Asset{}
6367
testIntUtil(t, fp, &got, &want)
6468
}
69+
func TestResourceAssetMetadataIntegration(t *testing.T) {
70+
asset := "14696a4676909f4e3cb1f2e60e2e08e5abed70caf5c02699be97113943554259"
71+
api := blockfrost.NewAPIClient(blockfrost.APIClientOptions{})
72+
73+
got, err := api.Asset(context.TODO(), asset)
74+
if err != nil {
75+
t.Fatal(err)
76+
}
77+
fp := filepath.Join(testdata, strings.ToLower(strings.TrimLeft(t.Name(), "Test"))+".golden")
78+
want := blockfrost.Asset{}
79+
testIntUtil(t, fp, &got, &want)
80+
}
6581

6682
func TestResourceAssetHistoryIntegration(t *testing.T) {
6783
asset := "3a9241cd79895e3a8d65261b40077d4437ce71e9d7c8c6c00e3f658e4669727374636f696e"

testdata/json/assets/asset.json

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,16 @@
77
"initial_mint_tx_hash": "6804edf9712d2b619edb6ac86861fe93a730693183a262b165fcc1ba1bc99cad",
88
"mint_or_burn_count": 1,
99
"onchain_metadata": {
10-
"name": "My NFT token",
11-
"image": "ipfs://ipfs/QmfKyJ4tuvHowwKQCbCHj4L5T3fSj8cjs7Aau8V7BWv226"
10+
"name": "My NFT token",
11+
"image": "ipfs://ipfs/QmfKyJ4tuvHowwKQCbCHj4L5T3fSj8cjs7Aau8V7BWv226",
12+
"description": "optional"
1213
},
1314
"metadata": {
14-
"name": "nutcoin",
15-
"description": "The Nut Coin",
16-
"ticker": "nutc",
17-
"url": "https://www.stakenuts.com/",
18-
"logo": "42",
19-
"decimals": 6
15+
"name": "nutcoin",
16+
"description": "The Nut Coin",
17+
"ticker": "nutc",
18+
"url": "https://www.stakenuts.com/",
19+
"logo": "42",
20+
"decimals": 6
2021
}
2122
}

0 commit comments

Comments
 (0)