NFT ها (توکن های Non-Fungible) تازه واردان در فضای قرارداد هوشمند هستند. اگر سال 2020 سال DeFi بود ، پس حداقل سال 2021 متعلق به NFT است. NFT ها استانداردی شبیه به ERC20 هستند.
توکن Non-Fungible یعنی این یک رمز منحصر به فرد است که هیچ کد دیگری مانند آن وجود ندارد. این به شدت با ERC20 ها که قابل تعویض هستند متفاوت است. Fungible به معنی “قابل تعویض” است. به عنوان مثال ، اسکناس دلار شما بدون توجه به اسکناس دلاری شما 1 دلار خواهد بود. شماره سریال روی اسکناس دلار ممکن است متفاوت باشد ، اما اسکناس ها قابل تعویض هستند زیرا به هر حال 1 دلار ارزش دارند.
تعداد زیادی ERC20 مانند MKR ، AAVE و SNX وجود دارد. تعداد زیادی NFT (یا ERC721) وجود ندارد. در واقع ، فقط یکی از هر یک وجود دارد ، از این رو منحصر به فرد هستند. اینها را می توان برای انجام هر کاری که دوست دارید درست کنید، درست مانند قراردادهای معمولی هوشمند ، اما آنها دارای اعتبار رمزنگاری شده هستند زیرا سابقه استقرار آنها همیشه تضمین می شود. این امر با رمزگشایی از اصالت یک اثر هنری ، تعدادی از مشکلات – به ویژه برای کسانی که در دنیای هنر هستند – را حل می کند. این همچنین می تواند مسائل مربوط به حق امتیاز را حل کند ، نمادهای وضعیت دیجیتال ایجاد کند ، به برنامه های بازی اجازه دهد که قابلیت همکاری داشته باشند و موارد دیگر.
این توکن ها الان کجا هستند؟
ارزش زیادی دارند. در ماه فوریه Axie Infinity نه قطعه زمین را به قیمت حدود 1.5 میلیون دلار فروخت.
مردم نسبت به این موارد بسیار هیجان زده می شوند. NFT ها یک سرمایه گذاری جدید هستند که با ظهور بلاک چین و قراردادهای هوشمند فعال شده اند و مردم با آنها چیزهای شگفت انگیزی می سازند.
بنابراین بیایید همه آنچه را که باید در مورد NFT ها بدانید به شما آموزش دهیم.
استانداردها
همانطور که اشاره کردیم ، NFT ها با استاندارد توکن ERC721 شروع می شوند ، که مشابه ERC20 است – با چند تغییر.
برای اینکه قرارداد شما NFT در نظر گرفته شود ، تنها کاری که باید انجام دهد این است که از این استاندارد پیروی کند. ما فقط با وارد کردن استاندارد به قراردادهای خود این کار را آسان می کنیم تا مجبور نباشیم هر بار که می خواهیم یک چرخ جدید بسازیم ، چرخ را دوباره اختراع کنیم.
NFT ها دارای یک متغیر tokenURI هستند که ما در یک دقیقه در مورد آن صحبت خواهیم کرد ، و آنها دارای نقشه ای از tokenId به صاحب آن هستند ، که در آن هر توکن “مالک” خاص خود را دارد. این آنها را از ERC20 ها متمایز می کند ، که فقط نقشه ای از آدرس به balance دارند. ERC721 هنوز هم به مردم اجازه می دهد تا توکن ها را منتقل کنند ، مجوزها را روی توکن ها تعیین کنند و موارد دیگر. این یک استاندارد سبک وزن طبق قرارداد است تا بتوانیم هر چیزی را که می خواهیم با آنها بسازیم.
حالا اینجا جایی است که همه چیز واقعاً متفاوت می شود. Metadata. وقتی به OpenSea (بازار محبوب NFT) می روید ، می توانید دسته ای از تصاویر را مشاهده کنید. از آنجا که NFT ها در بلاک چین هستند ، همه داده های آنها باید در زنجیره باشد ، درست است؟ خوب ، نه کاملاً.
ذخیره اطلاعات روی زنجیره می تواند بسیار گران باشد و هنر به دلیل اندازه کوچک آن شناخته نمی شود. اتریوم و توسعه دهندگان قرارداد هوشمند متوجه شدند که بارگذاری حتی یک تصویر 1 مگابایتی می تواند حساب های بانکی آنها را خراب کند ، بنابراین آنها می خواستند راهی برای نمایش هنر بدون نیاز به بارگذاری کل تصویر ارائه دهند.
به عنوان یک راه حل ، اکثر NFT ها چیزی دارند که tokenURI نامیده می شود. این یک شناسه جهانی منحصر به فرد برای همه جنبه های تصویر NFT است. این امر به شما امکان می دهد تصاویر بصری NFT را ارائه دهید. URI می تواند یک HTTPS API Call ، چیزی از طریق IPFS یا نوعی دیگر از شناسه منحصر به فرد باشد. این فراداده به شکل زیر است:
{ "name": "The Chainlink Elf", "description": "Inspiring, Based, Mythical, Oracle loving creature. Leading the new world and helping teach about superior digital agreements. Also is good with a bow!", "image": "https://ipfs.io/ipfs/QmTgqnhFBMkfT9s8PHKcdXBn1f5bG3Q5hmBaR4U6hoTvb1?filename=Chainlink_Elf.png", "attributes": [ { "trait_type": "Strength", "value": 84 } ] }
این فایل های JSON حاوی موارد زیر هستند:
name
description
image
attributes
اینها معمولاً در API یا IPFS ذخیره می شوند.
On-Chain Metadata vs. Off-Chain Metadata
اگر می خواهید NFT شما کار جالبی انجام دهد ، به نظر من ، باید ویژگی های زنجیره ای داشته باشد. چند مثال شامل این است که آیا می خواهید آمارهایی از نبردها مانند Pokemon به آنها بدهید ، برخی از آمارهای نادر ، یا کمیابی آنها از نظر رمزنگاری تضمین شده باشد. ویژگی ها باید زنجیره ای باشند.
در حال حاضر ، سیستم عامل های NFT روش های فوق العاده ای برای تجسم ویژگی های درون زنجیره ای ندارند ، بنابراین فقط باید یک tokenURI با NFT های ساخته شده خود ایجاد کنید.
Image from OpenSea D&D Characters
برای tokenURI ، یکی از رایج ترین روش ها استفاده از IPFS برای ذخیره داده های شما است. شما داده های خود را در آنجا بارگذاری می کنید و سپس از یک سرویس سنجاق استفاده می کنید تا مطمئن شوید داده ها برای همیشه در آنجا باقی می مانند. من هیجان زده هستم که چه زمانی قابلیت همکاری بیشتری بین پلتفرم های قرارداد هوشمند و فضای ذخیره سازی خود داشته باشیم.
بیایید کد یک NFT ساده را بررسی کنیم. همه کد های مربوط به این مورد را می توان در repo nft-mix در GitHub و کد Dungeons and Dragons را در GitHub نیز یافت.
The Simple NFT Contract
pragma solidity 0.6.6; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; contract SimpleCollectible is ERC721 { uint256 public tokenCounter; constructor () public ERC721 ("Dogie", "DOG"){ tokenCounter = 0; } function createCollectible(string memory tokenURI) public returns (uint256) { uint256 newItemId = tokenCounter; _safeMint(msg.sender, newItemId); _setTokenURI(newItemId, tokenURI); tokenCounter = tokenCounter + 1; return newItemId; } }
این ساده ترین راه برای گسترش قرارداد NFT است. این نحو برای Truffle ، Hardhat و Brownie است و در Remix کار نمی کند. من عاشق کار با قراردادهای OpenZepplin هستم زیرا آنها خوب هستند و تمام ابزارهایی را که معمولاً برای شروع به آنها نیاز داریم در اختیار دارند. بنابراین حتما package زیر نصب کنید:
npm install @openzeppelin/contracts
برای مشاهده نمونه کد پیشرفته قرارداد NFT روی لینک منبع کلیک کنید.