# Solana

# NFT Implementation

Our Non-transferable NFT implementation on Solana uses the SPL Token program to mint directly, rather than Metaplex's Candy Machine. We then use the in-built 'freeze' functionality of the SPL Token program to prevent transfers. We then set the freeze and mint authority to None.

See below for a full list of the instructions used to mint the NFT:

        // EXTERNAL INSTRUCTIONS

        /* create the mint account */
        SystemProgram.createAccount()
        /* initialize the mint*/
        createInitializeMintInstruction()
        /* create a token account that will hold the NFT */
        createAssociatedTokenAccountInstruction()
        /* mint 1 (and only) NFT to the mint account */
        createMintToInstruction()
        /* run our kycDAO program to create metadata and freeze the token */
        mintWithArgs()
        
        // CPI INSTRUCTIONS within mintWithArgs()

        /* create the metadata account */
        /* freeze the token */
        /* set freeze authority to None */
        /* set mint authority to None */

# Metadata

On Solana we follow Metaplex's NFT metadata standard

Here is an example of the JSON metadata stored off-chain referred to in the uri field:

{
  "name": "kycDAO NFT",
  "symbol": "KYCDAO",
  "description": "A non-transferable NFT from kycDAO",
  "image": "https://ipfs.io/ipfs/QmdCZ1yrHkHMBRRdMRFQyPeVnwGqPpch3BQiBVy62aBesb",
}