I’m having trouble modifying the metadata for my Metaplex NFT. The transaction goes through successfully without any errors, and I can see it on Solana Explorer, but the actual metadata remains unchanged.
I’m using the @metaplex/js library for this operation. Here’s my implementation:
The transaction completes successfully and I can verify it on the blockchain explorer, but when I check the NFT, the metadata hasn’t actually changed. What could be causing this issue?
you’re using the old metaplex library - @metaplex/js is deprecated. switch to @metaplex-foundation/js instead. the new sdk handles metadata updates much better. the old one has bugs where update transactions look successful but don’t actually save your changes.
Hmm, that’s weird… I’ve seen this before and it’s usually caching issues or timing problems.
Couple things to check - first, are you looking in the right place for the updated metadata? Sometimes the on-chain data updates but the JSON file at the URI endpoint takes forever to propagate, especially with Arweave since it’s slow to update.
Also wondering about your wallet permissions - you said the transaction succeeds but are you sure the wallet you’re using is actually the update authority for that NFT? The blockchain won’t throw an error if you don’t have the right permissions but it also won’t actually update anything.
One more thing - how long are you waiting before checking if the metadata changed? I’ve noticed there’s sometimes a delay between when the transaction confirms and when you can actually see the changes, could be anywhere from a few minutes to 30 mins depending on network congestion.
What happens when you fetch the metadata directly from the PDA right after the transaction? Does it show the new URI immediately or is it still showing the old one? That would help narrow down if it’s a blockchain issue or just a caching/propagation thing.
Have you tried this with a different NFT to see if it’s specific to that token mint or happening across the board?
Had the same issue recently - it’s usually the metadata structure. Your code looks fine, but there’s a catch: you’re keeping the existing creators array as-is, and those Creator objects might have properties that break the update instruction. Create fresh Creator objects instead of spreading the old ones. Also check that your new Arweave metadata JSON is properly formatted and accessible. I’ve seen transactions succeed but the metadata service can’t fetch the new JSON because of formatting issues or CORS problems. Make sure you’re actually the update authority too. Run await Metadata.load(solConnection, metadataPDA) after your transaction and see if the URI field shows your new value. If it doesn’t update on-chain right away, it’s definitely a permission or instruction formatting problem, not caching.