I have made a pNFT and then transferred it to other account. Now what I want to do is that, I want to lock transfer of token account which currently has the NFT. I have read this https://github.com/metaplex-foundation/metaplex-program-library/issues/470 article but I don't know how can I be the delegate of the token account. Please help me. I would appreciate for any kind of help or clue.

1 Answer 1


While minting a NFT the mint authority and freeze authority both are transfered to the Master Edition account. As a result you have to go through the metaplex functions to achieve this. There is no function for minting as it is a NFT but use the createFreezeDelegatedAccountInstruction to freeze the token mint account.

To freeze a token account you first need to be the delegate of the token account. The creator of the token account needs to call the anchor_spl::token::approve function. Below is the rust docs for the same:


If you are using javascript for this you need to call the approve function in anchor-spl or solana-spl whichever package you are using:

// Approve the above associated token address to spend the SFT
    await approve({
        connection: connection,
        payer: wallet, 
        account: masterEditionAddress,
        delegate: delegateAddress, 
        owner: wallet.publicKey, 
        amount: token(1) // As it is a NFT it will be one

Also you can use createApproveInstruction to create instruction and then add to transaction for the same result.

Then you can call the freeze account.

  • Thanks for your answer Tushar sahoo. Have you tested it? What you did is SFT and What I want to do is pNFT
    – Mac Collin
    Commented Dec 6, 2023 at 11:51
  • I couldn't approve because the token is pNFT
    – Mac Collin
    Commented Dec 6, 2023 at 11:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.