11import {
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
7894export 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
0 commit comments