Plugins
Verified Creator Plugin
The Verified Creator
Plugin is a Authority Managed
plugin that allows people to add verified creators to your Asset or Collection. It works similar to the verified Creator Array Metaplex Token Metadata used, different to that in MPL Core the Verified Creatores are not used to distribute royalties.
Possible use cases for this plugins can be to publicly verify that a Creator was part of the asset creation process. For example the Designer, Developer and Founder could sign as proof as creatorship.
The update authority
can:
- Add the plugin.
- Add unverified creators to the creators array.
- Can remove unverified creators. To remove verified creators they must unverify themselves first.
- Can verify themselves.
To verify a creator the updatePlugin
instruction has to be signed by the public key that was added by the update authority to the creators array.
Works With
MPL Core Asset | ✅ |
MPL Core Collection | ✅ |
Arguments
The verifiedCreator
Plugin requires the following arguments in a VerifiedCreatorsSignature
Array:
Arg | Value |
---|---|
address | publicKey |
message | string |
Assets inherit the Creators array from the Collection.
Adding the autograph Plugin to an Asset code example
Adding a verified Creators Plugin to an MPL Core Asset
This snippet assumes that the umi identity is the update authority of the asset.
import {
addPlugin,
} from '@metaplex-foundation/mpl-core'
await addPlugin(umi, {
asset: asset.publicKey,
plugin: {
type: 'VerifiedCreators',
signatures: [
{
address: umi.identity.publicKey,
verified: true,
},
},
}).sendAndConfirm(umi)
Adding a different Creator to an Asset code example
Adding a different Creator to an MPL Core Asset
This snippet assumes that the umi identity is the update authority of the asset to add a unverified Creator.
import { publicKey } from '@metaplex-foundation/umi'
import { updatePlugin, fetchAsset } from '@metaplex-foundation/mpl-core'
const asset = await fetchAsset(umi, assetAddress.publicKey, {
skipDerivePlugins: false,
})
const publicKeyToAdd = publicKey("abc...")
// The new autograph that you want to add
const newCreator = {
address: publicKeyToAdd,
verified: false,
}
// Add the new autograph to the existing signatures array
const updatedCreators = [...asset.verifiedCreators.signatures, newCreator]
await updatePlugin(umi, {
asset: asset.publicKey,
plugin: {
type: 'VerifiedCreators',
signatures: updatedCreators,
},
authority: umi.identity,
}).sendAndConfirm(umi)
After adding the unverified Creator they can verify themselves using the updatePlugin
function again. This snippet assumes that the umi identity is the Creator.
import { publicKey } from '@metaplex-foundation/umi'
import { updatePlugin, fetchAsset } from '@metaplex-foundation/mpl-core'
const asset = await fetchAsset(umi, assetAddress.publicKey, {
skipDerivePlugins: false,
})
const publicKeyToVerify = publicKey("abc...")
// The creator that you want to verify
const updatedCreators = asset.verifiedCreators.signatures.map(creator => {
if (creator.address === publicKeyToVerify) {
return { ...creator, verified: true };
}
return creator;
});
await updatePlugin(umi, {
asset: asset.publicKey,
plugin: {
type: 'VerifiedCreators',
signatures: updatedCreators,
},
authority: umi.identity,
}).sendAndConfirm(umi)
Removing a Creator from an Asset code example
Removing a Creator from an MPL Core Asset
Only the update authority can remove creators. To remove the creator it has to be verified:false
or the update authority itself. Therefore the update will be done in two steps. If you are able to sign with the update authority and the creator at the same time this could be done in one transaction combining both instructions.
- Set
verified:false
This snippet assumes thatumi.identity
is the creator that you want to remove
import { publicKey } from '@metaplex-foundation/umi'
import { updatePlugin, fetchAsset } from '@metaplex-foundation/mpl-core'
const asset = await fetchAsset(umi, assetAddress.publicKey, {
skipDerivePlugins: false,
})
// The Publickey of the creator that you want to remove
const publicKeyToRemove = publicKey("abc...")
const modifiedCreators = signatures.map(signature =>
signature.address === creator.publicKey
? { ...signature, verified: false }
: signature
);
await updatePlugin(umi, {
asset: asset.publicKey,
plugin: {
type: 'VerifiedCreators',
signatures: modifiedCreators,
},
authority: umi.identity, // Should be the creator
}).sendAndConfirm(umi)
- remove the creator This snippet assumes that
umi.identity
is the update authority
import { publicKey } from '@metaplex-foundation/umi'
import { updatePlugin, fetchAsset } from '@metaplex-foundation/mpl-core'
const asset = await fetchAsset(umi, assetAddress.publicKey, {
skipDerivePlugins: false,
})
// The Publickey of the creator that you want to remove
const publicKeyToRemove = publicKey("abc...")
const creatorsToKeep = asset.verifiedCreators.signatures.filter(
(creator) => creator.address !== publicKeyToRemove
);
await updatePlugin(umi, {
asset: asset.publicKey,
plugin: {
type: 'VerifiedCreators',
signatures: creatorsToKeep,
},
authority: umi.identity, // Should be the update authority
}).sendAndConfirm(umi)
Adding the verified Creators Plugin to a Collection code example
Add verified Creators Plugin to Collection
This snippet assumes that the umi.identity
is the update authority
import { addCollectionPlugin } from '@metaplex-foundation/mpl-core'
await addCollectionPlugin(umi, {
collection: collection.publicKey,
plugin: {
type: 'VerifiedCreators',
signatures: [
{
address: umi.identity.publicKey,
verified: true,
},
},
}).sendAndConfirm(umi)