From cc938da597285e262f7ea61cce2f1c7ad559cea9 Mon Sep 17 00:00:00 2001 From: slowbackspace Date: Mon, 18 Dec 2023 12:00:52 +0100 Subject: [PATCH] fix: allow arbitrary asset onchain metadata --- api_assets.go | 7 +-- api_assets_test.go | 24 ++++++++-- testdata/json/assets/asset.json | 17 +++---- .../resourceassetmetadataintegration.golden | 48 +++++++++++++++++++ 4 files changed, 78 insertions(+), 18 deletions(-) create mode 100644 testdata/resourceassetmetadataintegration.golden diff --git a/api_assets.go b/api_assets.go index 0296c1e..0f63527 100644 --- a/api_assets.go +++ b/api_assets.go @@ -17,11 +17,6 @@ const ( resourcePolicyAssets = "assets/policy" ) -type AssetOnchainMetadata struct { - Name string `json:"name"` - Image string `json:"image"` -} - // Contains metadata information about an asset. type AssetMetadata struct { Name string `json:"name"` @@ -56,7 +51,7 @@ type Asset struct { MintOrBurnCount int `json:"mint_or_burn_count"` // On-chain metadata which SHOULD adhere to the valid standards, based on which we perform the look up and display the asset (best effort) - OnchainMetadata *AssetOnchainMetadata `json:"onchain_metadata"` + OnchainMetadata *interface{} `json:"onchain_metadata"` // Enum: "CIP25v1" "CIP25v2" "CIP68v1" // If on-chain metadata passes validation, we display the standard under which it is valid OnchainMetadataStandard *string `json:"onchain_metadata_standard"` diff --git a/api_assets_test.go b/api_assets_test.go index ca25d92..e0b2534 100644 --- a/api_assets_test.go +++ b/api_assets_test.go @@ -12,6 +12,13 @@ import ( ) func TestAssetUnmarshal(t *testing.T) { + + var onchainMetadata interface{} = map[string]interface{}{ + "image": "ipfs://ipfs/QmfKyJ4tuvHowwKQCbCHj4L5T3fSj8cjs7Aau8V7BWv226", + "name": "My NFT token", + "description": "optional", + } + fp := filepath.Join(testdata, "json", "assets", "asset.json") want := blockfrost.Asset{ Asset: "b0d07d45fe9514f80213f4020e5a61241458be626841cde717cb38a76e7574636f696e", @@ -21,10 +28,7 @@ func TestAssetUnmarshal(t *testing.T) { InitialMintTxHash: "6804edf9712d2b619edb6ac86861fe93a730693183a262b165fcc1ba1bc99cad", MintOrBurnCount: 1, Quantity: "12000", - OnchainMetadata: &blockfrost.AssetOnchainMetadata{ - Image: "ipfs://ipfs/QmfKyJ4tuvHowwKQCbCHj4L5T3fSj8cjs7Aau8V7BWv226", - Name: "My NFT token", - }, + OnchainMetadata: &onchainMetadata, Metadata: &blockfrost.AssetMetadata{ Name: "nutcoin", Description: "The Nut Coin", @@ -62,6 +66,18 @@ func TestResourceAssetIntegration(t *testing.T) { want := blockfrost.Asset{} testIntUtil(t, fp, &got, &want) } +func TestResourceAssetMetadataIntegration(t *testing.T) { + asset := "14696a4676909f4e3cb1f2e60e2e08e5abed70caf5c02699be97113943554259" + api := blockfrost.NewAPIClient(blockfrost.APIClientOptions{}) + + got, err := api.Asset(context.TODO(), asset) + if err != nil { + t.Fatal(err) + } + fp := filepath.Join(testdata, strings.ToLower(strings.TrimLeft(t.Name(), "Test"))+".golden") + want := blockfrost.Asset{} + testIntUtil(t, fp, &got, &want) +} func TestResourceAssetHistoryIntegration(t *testing.T) { asset := "3a9241cd79895e3a8d65261b40077d4437ce71e9d7c8c6c00e3f658e4669727374636f696e" diff --git a/testdata/json/assets/asset.json b/testdata/json/assets/asset.json index cd1b62b..fae56ff 100644 --- a/testdata/json/assets/asset.json +++ b/testdata/json/assets/asset.json @@ -7,15 +7,16 @@ "initial_mint_tx_hash": "6804edf9712d2b619edb6ac86861fe93a730693183a262b165fcc1ba1bc99cad", "mint_or_burn_count": 1, "onchain_metadata": { - "name": "My NFT token", - "image": "ipfs://ipfs/QmfKyJ4tuvHowwKQCbCHj4L5T3fSj8cjs7Aau8V7BWv226" + "name": "My NFT token", + "image": "ipfs://ipfs/QmfKyJ4tuvHowwKQCbCHj4L5T3fSj8cjs7Aau8V7BWv226", + "description": "optional" }, "metadata": { - "name": "nutcoin", - "description": "The Nut Coin", - "ticker": "nutc", - "url": "https://www.stakenuts.com/", - "logo": "42", - "decimals": 6 + "name": "nutcoin", + "description": "The Nut Coin", + "ticker": "nutc", + "url": "https://www.stakenuts.com/", + "logo": "42", + "decimals": 6 } } diff --git a/testdata/resourceassetmetadataintegration.golden b/testdata/resourceassetmetadataintegration.golden new file mode 100644 index 0000000..a283269 --- /dev/null +++ b/testdata/resourceassetmetadataintegration.golden @@ -0,0 +1,48 @@ +{ + "asset": "14696a4676909f4e3cb1f2e60e2e08e5abed70caf5c02699be97113943554259", + "policy_id": "14696a4676909f4e3cb1f2e60e2e08e5abed70caf5c02699be971139", + "asset_name": "43554259", + "fingerprint": "asset1s7nlt45cc82upqewvjtgu7g97l7eg483c6wu75", + "quantity": "43252003274489856000", + "initial_mint_tx_hash": "50ac23b0ba9323c8d122b7df44464b3494d43e88617673e4576eff561062dfd3", + "mint_or_burn_count": 6, + "onchain_metadata": { + "IPFSClone": "ipfs://QmWyTkmAEdB5LAjELRKD4ACD4GdmrPiVa1Jk5u5EWPMJQS", + "description": "Highest supply on-Chain token on Cardano", + "id": "CUBY", + "image": [ + "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTE4MSIgaGVpZ2h0PSIxMz", + "gyIiB2aWV3Qm94PSIwIDAgMTE4MSAxMzgyIiBmaWxsPSJub25lIiB4bWxucz0iaH", + "R0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0zOC44MDAxIDMxOS", + "41NDZMNTUyLjYzNiAyMy4wMzc3QzU3Ni42NjMgOS4xNzMxOCA2MDYuMjY0IDkuMT", + "k0MiA2MzAuMjcxIDIzLjA5MjlMMTE0Mi4zIDMxOS41MjhDMTE2Ni4yNSAzMzMuMz", + "k3IDExODEgMzU4Ljk3OSAxMTgxIDM4Ni42NTlWOTk1LjM0MUMxMTgxIDEwMjMuMD", + "IgMTE2Ni4yNSAxMDQ4LjYgMTE0Mi4zIDEwNjIuNDdMNjMwLjI3MSAxMzU4LjkxQz", + "YwNi4yNjQgMTM3Mi44MSA1NzYuNjYzIDEzNzIuODMgNTUyLjYzNiAxMzU4Ljk2TD", + "M4LjgwMDEgMTA2Mi40NUMxNC43OTEzIDEwNDguNiAwIDEwMjIuOTkgMCA5OTUuMj", + "Y3VjM4Ni43MzNDMCAzNTkuMDEzIDE0Ljc5MTQgMzMzLjQwMSAzOC44MDAxIDMxOS", + "41NDZaIiBmaWxsPSIjMTAxMDEwIi8+PHBhdGggZD0iTTU4OS4yMDUgNjMxLjA3OE", + "w5Ni45NjI0IDM0Ni44ODNMNTg5LjIwNSA2Mi42ODQ3TDEwODEuNDUgMzQ2Ljg4M0", + "w1ODkuMjA1IDYzMS4wNzhaIiBmaWxsPSIjRTMwMDFDIi8+PHBhdGggZD0iTTUyLj", + "M1OTkgMTAwMi40M0w1Mi4zNTk5IDQzNC4wMzZMNTQ0LjYwMiA3MTguMjMxVjEyOD", + "YuNjJMNTIuMzU5OSAxMDAyLjQzWiIgZmlsbD0iIzQ0RkYwMiIvPjxwYXRoIGQ9Ik", + "02MzIuMjcxIDcyMS43OThWMTI5MC4xOUwxMTI0LjUxIDEwMDZWNDM3LjYwM0w2Mz", + "IuMjcxIDcyMS43OThaIiBmaWxsPSIjRkZGNTAyIi8+PC9zdmc+Cg==" + ], + "mediaType": "image/svg+xml", + "name": "$CUBY", + "project": "Cubes CNFT", + "supply": "43,252,003,274,489,856,000", + "website": "http://cuby.cubescnft.com" + }, + "onchain_metadata_standard": "CIP25v1", + "onchain_metadata_extra": null, + "metadata": { + "name": "Cuby Token", + "description": "Highest supply on-Chain token on Cardano. Use CUBY to buy exclusive Cubes CNFT drops", + "ticker": "CUBY", + "url": "https://cubescnft.com/cuby", + "logo": "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", + "decimals": 0 + } +}