# NFT Implementation

There has been discussion for a NEAR non-transferable NFT, however there is currently no established NEP.

Our NEAR smart contracts closely follow the NEP171 standard for NFTs. We have removed any functions related to transfers or approvals.

In the hopes that our implementation for non-transferable NFTs (NTNFTs) will some day become a NEAR standard, we have added it to the near-sdk-rs repository. See our branch here for details.

For details of our specific KYC additions for NTNFTs (including metadata specifics) see our code here

# Metadata

For NEAR we follow the NEAR NFT metadata standard NEP-177, with some extensions in the extra field.

type TokenMetadata = {
  title: string|null, // ex. "Arch Nemesis: Mail Carrier" or "Parcel #5055"
  description: string|null, // free-form description
  media: string|null, // URL to associated media, preferably to decentralized, content-addressed storage
  media_hash: string|null, // Base64-encoded sha256 hash of content referenced by the `media` field. Required if `media` is included.
  issued_at: number|null, // When token was issued or minted, Unix epoch in milliseconds
  expires_at: number|null, // When token expires, Unix epoch in milliseconds
  extra: string|null, // anything extra the NFT wants to store on-chain. Can be stringified JSON.
  reference: string|null, // URL to an off-chain JSON file with more info.
  reference_hash: string|null // Base64-encoded sha256 hash of JSON from reference field. Required if `reference` is included.