High-level

Metaplex NFTs have two essential components, the on-chain metadata and the off-chain metadata. The on-chain metadata has a specification here which outlines what fields are encoded, but the most important ones are the uri (which points to the off-chain metadata) and the creators array (the set of addresses that receive royalty payments).

Anything related to the asset itself is typically in the off-chain metadata.

Technical Requirements

One requires the “update authority” to make changes to any mutable on-chain metadata.

Update authority: <your address>, is_mutable: True

<aside> 💡 You can do bulk or bundled Arweave updates with https://docs.arweave.org/developers/tools/textury-arkb

</aside>

Upgrading an NFT

Upgrading an NFT essentially means updating the uri field to point to new off-chain metadata to reflect the new state. This can be done in a few ways:

Swaps

Burn → Mint a new one

Entanglement / wrapping

Updates

Using the latest (alpha) version of the Metaplex SDK, one can easily coordinate updates of both on-chain and off-chain metadata. See the uploadMetadata function which handles uploading JSON blobs to Arweave (or other configured storage provider) as well as updateNft which handles updating the on-chain metadata.

Technically speaking, since the JSON blob that is resolved via uri ends up determining the attributes and images related to an NFT, one could resolve that uri against any API you control. As mentioned before, this means that changes don’t get reflected on-chain, so we typically recommend at least updating the uri to reflect some change, even if the URI points to an API.