From 9e156fd92f5dfd790ff647ddde6b4ee89c3002d7 Mon Sep 17 00:00:00 2001 From: daiagi Date: Mon, 30 Oct 2023 15:18:39 +0700 Subject: [PATCH 1/4] touch tokens only if image is changes --- src/mappings/nfts/setMetadata.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/mappings/nfts/setMetadata.ts b/src/mappings/nfts/setMetadata.ts index 552c615..1d33df1 100644 --- a/src/mappings/nfts/setMetadata.ts +++ b/src/mappings/nfts/setMetadata.ts @@ -39,6 +39,8 @@ export async function handleMetadataSet(context: Context): Promise { if (final.metadata) { const metadata = await handleMetadata(final.metadata, context.store) + const previousNftMedia = final?.image || final?.media + const newNftMedia = metadata?.image || metadata?.animationUrl final.meta = metadata final.name = metadata?.name final.image = metadata?.image @@ -51,7 +53,7 @@ export async function handleMetadataSet(context: Context): Promise { warn(OPERATION, `collection ${event.collectionId} not found`) return } - if (final instanceof NFTEntity) { + if (final instanceof NFTEntity && newNftMedia !== previousNftMedia) { await setMetadataHandler(context, collection, final) } } From 4bc35302b9d7b45b405a40e85674ed8e82ee25d5 Mon Sep 17 00:00:00 2001 From: daiagi Date: Mon, 30 Oct 2023 15:19:06 +0700 Subject: [PATCH 2/4] existingToken check after potential delete --- src/mappings/shared/token/setMetadata.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/mappings/shared/token/setMetadata.ts b/src/mappings/shared/token/setMetadata.ts index db6fdbd..13921f3 100644 --- a/src/mappings/shared/token/setMetadata.ts +++ b/src/mappings/shared/token/setMetadata.ts @@ -12,12 +12,9 @@ export async function setMetadataHandler(context: Context, collection: CE, nft: return } - let nftWithToken, existingToken + let nftWithToken try { - [nftWithToken, existingToken] = await Promise.all([ - getWith(context.store, NE, nft.id, { token: true }), - getOptional(context.store, TE, generateTokenId(collection.id, nftMedia)), - ]) + nftWithToken = await getWith(context.store, NE, nft.id, { token: true }) } catch (error) { warn(OPERATION, `ERROR ${error}`) return @@ -28,5 +25,6 @@ export async function setMetadataHandler(context: Context, collection: CE, nft: if (nftWithToken.token) { await tokenAPI.removeNftFromToken(nft, nftWithToken.token) } + const existingToken = await getOptional(context.store, TE, generateTokenId(collection.id, nftMedia)) return await (existingToken ? tokenAPI.addNftToToken(nft, existingToken) : tokenAPI.create(collection, nft)) } From 64721d332a4451101c5c924c8a90670dc04bcb8c Mon Sep 17 00:00:00 2001 From: daiagi Date: Mon, 30 Oct 2023 15:56:01 +0700 Subject: [PATCH 3/4] reorder --- src/mappings/shared/token/setMetadata.ts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/mappings/shared/token/setMetadata.ts b/src/mappings/shared/token/setMetadata.ts index 13921f3..f0be74d 100644 --- a/src/mappings/shared/token/setMetadata.ts +++ b/src/mappings/shared/token/setMetadata.ts @@ -11,20 +11,18 @@ export async function setMetadataHandler(context: Context, collection: CE, nft: if (!nftMedia) { return } + const tokenAPI = new TokenAPI(context.store) - let nftWithToken try { - nftWithToken = await getWith(context.store, NE, nft.id, { token: true }) + const nftWithToken = await getWith(context.store, NE, nft.id, { token: true }) + if (nftWithToken.token) { + await tokenAPI.removeNftFromToken(nft, nftWithToken.token) + } } catch (error) { warn(OPERATION, `ERROR ${error}`) return } - const tokenAPI = new TokenAPI(context.store) - - if (nftWithToken.token) { - await tokenAPI.removeNftFromToken(nft, nftWithToken.token) - } const existingToken = await getOptional(context.store, TE, generateTokenId(collection.id, nftMedia)) return await (existingToken ? tokenAPI.addNftToToken(nft, existingToken) : tokenAPI.create(collection, nft)) } From 539ea753b5e6982a1591cfcd4800a06d8670577c Mon Sep 17 00:00:00 2001 From: daiagi Date: Mon, 30 Oct 2023 16:06:55 +0700 Subject: [PATCH 4/4] Thanks @roiLeo --- src/mappings/shared/token/setMetadata.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mappings/shared/token/setMetadata.ts b/src/mappings/shared/token/setMetadata.ts index f0be74d..3f59e14 100644 --- a/src/mappings/shared/token/setMetadata.ts +++ b/src/mappings/shared/token/setMetadata.ts @@ -15,7 +15,7 @@ export async function setMetadataHandler(context: Context, collection: CE, nft: try { const nftWithToken = await getWith(context.store, NE, nft.id, { token: true }) - if (nftWithToken.token) { + if (nftWithToken?.token) { await tokenAPI.removeNftFromToken(nft, nftWithToken.token) } } catch (error) {