From bc70331786e7bf1788ca38f7cfbc81590bd98d97 Mon Sep 17 00:00:00 2001 From: leo42 Date: Thu, 14 Sep 2023 00:11:53 +0200 Subject: [PATCH 1/2] Support HexString metadata (not including '0x') --- src/functions/metadata.ts | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/src/functions/metadata.ts b/src/functions/metadata.ts index edb5cd92..a6ec40d6 100644 --- a/src/functions/metadata.ts +++ b/src/functions/metadata.ts @@ -147,23 +147,32 @@ export const getOnchainMetadata = ( onchainMetadataCbor, ); const foundMetadata = foundAssetInCbor - ? internalOnchainMetadata[policyIdVersion2][assetNameVersion2] + ? internalOnchainMetadata[policyIdVersion2][assetNameVersion2] : null; if (foundMetadata) { onchainMetadataResult = foundMetadata; isFound = true; } else { - // Fallback - // Due to previously missing and then incorrect implementation, metadata submitted as v2 - // (i.e. "version" field encoded in CBOR was set to 2) with mistakenly text-encoded - // policies/asset names (which is CIP25v1 method of encoding) instead of correct CIP25v2 - // byte-encoded keys passed as valid. (Note that the version number is a user input - // independent of the actual metadata content). - // To prevent breaking change, in case we don't find metadata for an asset under - // correct byte-encoded key, we fallback to CIP25v1 text-encoded format. - onchainMetadataResult = - internalOnchainMetadata[policyId][assetNameVersion1] || null; - isFound = false; + + const foundHexStringMetadata = foundAssetInCbor + ? internalOnchainMetadata[assetNameBase][policyId] + : null; + if (foundHexStringMetadata) { + onchainMetadataResult = foundHexStringMetadata; + isFound = true; + }else{ + // Fallback + // Due to previously missing and then incorrect implementation, metadata submitted as v2 + // (i.e. "version" field encoded in CBOR was set to 2) with mistakenly text-encoded + // policies/asset names (which is CIP25v1 method of encoding) instead of correct CIP25v2 + // byte-encoded keys passed as valid. (Note that the version number is a user input + // independent of the actual metadata content). + // To prevent breaking change, in case we don't find metadata for an asset under + // correct byte-encoded key, we fallback to CIP25v1 text-encoded format. + onchainMetadataResult = + internalOnchainMetadata[policyId][assetNameVersion1] || null; + isFound = false; + } } } catch (error) { onchainMetadataResult = null; From 5f828ad2708fc420e594d9ad674e439e73197212 Mon Sep 17 00:00:00 2001 From: leo42 Date: Thu, 14 Sep 2023 00:30:34 +0200 Subject: [PATCH 2/2] Update metadata.ts --- src/functions/metadata.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/functions/metadata.ts b/src/functions/metadata.ts index a6ec40d6..b8ec07a9 100644 --- a/src/functions/metadata.ts +++ b/src/functions/metadata.ts @@ -147,20 +147,19 @@ export const getOnchainMetadata = ( onchainMetadataCbor, ); const foundMetadata = foundAssetInCbor - ? internalOnchainMetadata[policyIdVersion2][assetNameVersion2] + ? internalOnchainMetadata[policyIdVersion2][assetNameVersion2] : null; if (foundMetadata) { onchainMetadataResult = foundMetadata; isFound = true; } else { - const foundHexStringMetadata = foundAssetInCbor - ? internalOnchainMetadata[assetNameBase][policyId] + ? internalOnchainMetadata[policyId][assetNameBase] : null; - if (foundHexStringMetadata) { - onchainMetadataResult = foundHexStringMetadata; - isFound = true; - }else{ + if (foundHexStringMetadata) { + onchainMetadataResult = foundHexStringMetadata; + isFound = true; + }else{ // Fallback // Due to previously missing and then incorrect implementation, metadata submitted as v2 // (i.e. "version" field encoded in CBOR was set to 2) with mistakenly text-encoded