Skip to content

Commit bd86bfe

Browse files
committed
deduplicate metadata construction code
only adds metadata relation if metadata is good Signed-off-by: stadolf <[email protected]>
1 parent 9130b99 commit bd86bfe

File tree

2 files changed

+22
-19
lines changed

2 files changed

+22
-19
lines changed

subgraph/src/ipnftMapping.ts

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {
22
Address,
3+
BigInt,
34
ByteArray,
45
crypto,
56
ethereum,
@@ -74,18 +75,28 @@ export function handleReservation(event: ReservedEvent): void {
7475
reservation.save()
7576
}
7677

78+
function updateIpnftMetadata(ipnft: Ipnft, uri: string, timestamp: BigInt): Ipnft {
79+
let ipfsLocation = uri.replace('ipfs://', '');
80+
if (!ipfsLocation || ipfsLocation == uri) {
81+
log.error("Invalid URI format for tokenId {}: {}", [ipnft.id, uri]);
82+
return ipnft;
83+
}
84+
85+
ipnft.tokenURI = uri;
86+
ipnft.metadata = ipfsLocation;
87+
ipnft.updatedAtTimestamp = timestamp;
88+
IpnftMetadataTemplate.create(ipfsLocation);
89+
90+
return ipnft;
91+
}
92+
7793
//the underlying parameter arrays are misaligned, hence we cannot cast or unify both events
7894
export function handleMint(event: IPNFTMintedEvent): void {
7995
let ipnft = new Ipnft(event.params.tokenId.toString())
8096
ipnft.owner = event.params.owner
81-
ipnft.tokenURI = event.params.tokenURI
8297
ipnft.createdAt = event.block.timestamp
8398
ipnft.symbol = event.params.symbol
84-
let ipfsLocation = event.params.tokenURI.replace('ipfs://', '');
85-
ipnft.metadata = ipfsLocation
86-
ipnft.updatedAtTimestamp = event.block.timestamp
87-
IpnftMetadataTemplate.create(ipfsLocation)
88-
99+
ipnft = updateIpnftMetadata(ipnft, event.params.tokenURI, event.block.timestamp)
89100
store.remove('Reservation', event.params.tokenId.toString())
90101
ipnft.save()
91102

@@ -101,19 +112,11 @@ export function handleMetadataUpdated(event: MetadataUpdateEvent): void {
101112
//erc4906 is not emitting the new url, we must query it ourselves
102113
let _ipnftContract = IPNFTContract.bind(event.params._event.address);
103114
let newUri = _ipnftContract.tokenURI(event.params._tokenId)
104-
if (!newUri) {
115+
if (!newUri || newUri == "") {
105116
log.debug("no new uri found for token, likely just minted {}", [event.params._tokenId.toString()])
106117
return
107118
}
108-
109-
ipnft.tokenURI = newUri
110-
111-
let ipfsLocation = newUri.replace('ipfs://', '');
112-
ipnft.updatedAtTimestamp = event.block.timestamp
113-
ipnft.metadata = ipfsLocation
114-
115-
IpnftMetadataTemplate.create(ipfsLocation)
116-
119+
ipnft = updateIpnftMetadata(ipnft, newUri, event.block.timestamp)
117120
ipnft.save()
118121
}
119122

subgraph/src/metadataMapping.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,21 @@ import { json, Bytes, dataSource } from '@graphprotocol/graph-ts'
22
import { IpnftMetadata } from '../generated/schema'
33

44
export function handleMetadata(content: Bytes): void {
5-
let ipnftMetadata = new IpnftMetadata(dataSource.stringParam())
65
const value = json.fromBytes(content).toObject()
76
if (value) {
87
const image = value.get('image')
98
const name = value.get('name')
109
const description = value.get('description')
1110
const externalURL = value.get('external_url')
12-
11+
1312
if (name && image && description && externalURL) {
13+
let ipnftMetadata = new IpnftMetadata(dataSource.stringParam())
1414
ipnftMetadata.name = name.toString()
1515
ipnftMetadata.image = image.toString()
1616
ipnftMetadata.externalURL = externalURL.toString()
1717
ipnftMetadata.description = description.toString()
18+
ipnftMetadata.save()
1819
}
1920

20-
ipnftMetadata.save()
2121
}
2222
}

0 commit comments

Comments
 (0)