Skip to content

Commit 933935d

Browse files
committed
fix(cardano-services-client): enhance token metadata mapping to include on-chain metadata fields
1 parent 053c886 commit 933935d

File tree

2 files changed

+45
-3
lines changed

2 files changed

+45
-3
lines changed

packages/cardano-services-client/src/AssetInfoProvider/BlockfrostAssetProvider.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,16 +116,16 @@ export class BlockfrostAssetProvider extends BlockfrostProvider implements Asset
116116
private mapTokenMetadata(assetId: Cardano.AssetId, asset: Responses['asset']): Asset.TokenMetadata {
117117
return {
118118
assetId,
119-
decimals: asset.metadata?.decimals || undefined,
119+
decimals: asset.metadata?.decimals || asset.onchain_metadata?.decimals || undefined,
120120
desc: this.metadatumToString(
121121
asset.metadata?.description || (asset.onchain_metadata?.description as string | string[] | undefined)
122122
),
123123
icon: this.metadatumToString(
124124
asset.metadata?.logo || (asset.onchain_metadata?.image as string | string[] | undefined)
125125
),
126126
name: asset.metadata?.name || (asset.onchain_metadata?.name as string | undefined),
127-
ticker: asset.metadata?.ticker || undefined,
128-
url: asset.metadata?.url || undefined,
127+
ticker: asset.metadata?.ticker || asset.onchain_metadata?.ticker || undefined,
128+
url: asset.metadata?.url || asset.onchain_metadata?.url || undefined,
129129
version: '1.0'
130130
};
131131
}

packages/cardano-services-client/test/AssetInfoProvider/BlockfrostAssetProvider.test.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,5 +214,47 @@ describe('BlockfrostAssetProvider', () => {
214214

215215
expect(response.nftMetadata!.version).toBe('2.0');
216216
});
217+
218+
test('uses decimal and ticker from onchain_metadata', async () => {
219+
const mockedAssetIdOnChainMetadata = Cardano.AssetId(
220+
'ecbe846aa1a535579d67f9480fa6173b64d7e239df0460eba36e3ad00014df1053617475726e'
221+
);
222+
mockResponses(request, [
223+
[
224+
`assets/${mockedAssetIdOnChainMetadata}`,
225+
{
226+
asset: mockedAssetIdOnChainMetadata,
227+
policy_id: 'ecbe846aa1a535579d67f9480fa6173b64d7e239df0460eba36e3ad0',
228+
asset_name: '0014df1053617475726e',
229+
fingerprint: 'asset1lnu3hw2pjw8xfprg7722mh0yu2vfzvk8ta60h0',
230+
quantity: '100000000000000',
231+
initial_mint_tx_hash: 'dcdd8ed32a71523a8393caab9d657964e50648fe0277de77add22b839e6fdb88',
232+
mint_or_burn_count: 1,
233+
onchain_metadata: {
234+
url: 'ipfs://Qmc2RWQxCmAaXn7YGZsXCcs2J5',
235+
logo: 'ipfs://Qmc2RWQxCmAaXn7YGZsXCcs2J5uwW8qQwYzmjh1gUiZBWA',
236+
name: 'Saturn',
237+
ticker: 'SATURN',
238+
decimals: 6,
239+
mediaType: '49696d6167652f706e67',
240+
description:
241+
'Saturn is the governance token for the Saturn Swap protocol, a fast and simple decentralized exchange on the Cardano blockchain. https://saturnswap.io/'
242+
},
243+
onchain_metadata_standard: 'CIP68v1',
244+
onchain_metadata_extra: 'd8799fff',
245+
metadata: null
246+
}
247+
]
248+
]);
249+
250+
const response = await provider.getAsset({
251+
assetId: mockedAssetIdOnChainMetadata,
252+
extraData: { tokenMetadata: true }
253+
});
254+
255+
expect(response.tokenMetadata!.decimals).toBe(6);
256+
expect(response.tokenMetadata!.ticker).toBe('SATURN');
257+
expect(response.tokenMetadata!.url).toBe('ipfs://Qmc2RWQxCmAaXn7YGZsXCcs2J5');
258+
});
217259
});
218260
});

0 commit comments

Comments
 (0)