metaboss_lib 0.24.0

The core library for the metaboss cli.
Documentation
use crate::transaction::send_and_confirm_tx;

use super::*;

pub enum VerifyCreatorArgs<'a, P1: ToPubkey> {
    V1 { authority: &'a Keypair, mint: P1 },
}

pub fn verify_creator<P1>(client: &RpcClient, args: VerifyCreatorArgs<P1>) -> Result<Signature>
where
    P1: ToPubkey,
{
    match args {
        VerifyCreatorArgs::V1 { .. } => verify_creator_v1(client, args),
    }
}

fn verify_creator_v1<P1>(client: &RpcClient, args: VerifyCreatorArgs<P1>) -> Result<Signature>
where
    P1: ToPubkey,
{
    let VerifyCreatorArgs::V1 { authority, mint } = args;

    let mint = mint.to_pubkey()?;
    let asset = Asset::new(mint);

    let md = asset.get_metadata(client)?;

    let mut verify_builder = VerifyCreatorV1Builder::new();
    verify_builder
        .authority(authority.pubkey())
        .metadata(asset.metadata);

    if !matches!(
        md.token_standard,
        Some(TokenStandard::NonFungible | TokenStandard::ProgrammableNonFungible) | None
    ) {
        bail!("Only NFTs or pNFTs can have creators be verified");
    }

    let verify_ix = verify_builder.instruction();

    send_and_confirm_tx(client, &[authority], &[verify_ix])
}