نحوه ایجاد ERC721 در قرارداد هوشمند
نحوه ایجاد ERC721 در قرارداد هوشمند
در این آموزش نحوه ایجاد ERC721 قرارداد هوشمند Solidity را توضیح خواهیم داد. ابتدا تفاوت های بین ERC20 و ERC721 را بررسی می کنیم. سپس دو قرارداد ERC721 NFT ایجاد می کنیم.
در این آموزش نحوه ایجاد ERC721 قرارداد هوشمند Solidity را توضیح خواهیم داد. ابتدا تفاوت های بین ERC20 و ERC721 را بررسی می کنیم. سپس دو قرارداد ERC721 NFT ایجاد می کنیم.
تفاوت های زیادی بین قراردادهای توکن اتریوم ERC20 و ERC721 وجود دارد. قرارداد ERC20 توکنهای یکسانی را ایجاد میکند که ویژگیهایی برای منحصربهفرد کردن آنها ندارند. توکن های یک قرارداد ERC20 قابل تعویض هستند و یک به یک مبادله می شوند. فرقی نمی کند کدام را بخرید یا بفروشید زیرا همه آنها یکسان هستند. قرارداد ERC721 برای ایجاد توکنهای منحصربهفرد یا NFT (توکنهای غیرقابل تعویض) استفاده میشود.
توکنهای ERC721 یک قرارداد منحصربهفرد هستند و نمیتوان آنها را کپی کرد زیرا هر توکن یک شناسه منحصربهفرد دارد. این بدان معنی است که هر نشانه از یک قرارداد می تواند ارزش یا ویژگی متفاوتی به دلیل قدمت، نادر بودن یا ویژگی دیگر داشته باشد.
قرارداد ERC721
توکنهای ERC721 از بسیاری از ویژگیهای مشابه با توکنهای ERC20 پشتیبانی میکنند. هر دوی این قراردادهای توکن از بسیاری از انواع عملکردهای مشابه (انتقال، تأیید، دریافت کل عرضه و غیره) پشتیبانی می کنند. علاوه بر این، درست مانند قرارداد ERC20، قرارداد ERC721 به ابرداده های اساسی نیاز دارد، به عنوان مثال، نام و نماد هنگام ایجاد یک قرارداد مورد نیاز است.
توکن های ERC721 دارای چند ویژگی هستند که در یک توکن ERC20 یافت نمی شوند. هر توکن ERC721 که از یک قرارداد استخراج میشود، میتواند یک شناسه منحصربهفرد داشته باشد. به این شناسه منحصر به فرد مانند شماره روی کارت بیسبال 1 از 200 فکر کنید. هر توکن ERC721 ضرب میتواند شامل یک URI (پیوندی به چیزی) باشد. URI یا Uniform Resource Locator یک شناسه برای یک فایل منبع خاص برای مثال یک عکس، کتاب یا سند است. این URI ها معمولاً نشانگرهای IPFS (سیستم فایل بین سیاره ای) هستند.
نمونه قراردادهای هوشمند ERC721 NFT با URI
کد Solidity زیر یک قرارداد هوشمند ERC721 است. می توانید از این قرارداد برای ضرب توکن های NFT استفاده کنید. در قرارداد زیر وقتی تابع ایجاد NFT را فراخوانی میکنید، میتوانید یک URI ارسال کنید تا آن را با NFT که میزنید مرتبط کنید. بنابراین اگر یک URI در IPFS دارید که به یک عکس پیوند دارد، میتوانید آن را در قرارداد زیر بگنجانید. قرارداد قابل تمدید است و می تواند دارای عملکردهای اضافی باشد. نظرات کد را بخوانید تا درک بهتری از نحوه عملکرد قرارداد پیدا کنید.
pragma solidity ^0.6.6;
import "github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.4/contracts/token/ERC721/ERC721.sol";
//this contract inherits ERC721
contract SampleNFTContract is ERC721 {
uint256 public tokenCounter;
//constructor for an ERC721 is a name and symbol
constructor () public ERC721 ("astronaut", "STAR"){
tokenCounter = 0;
}
//a token url is a ipfs url
//after we mint the token we are going to return the id of the token
function createNFT(string memory tokenURI) public returns (uint256) {
//get number from token counter
uint256 newNFTTokenId = tokenCounter;
//safely mint token for the person that called the function
_safeMint(msg.sender, newNFTTokenId);
//set the token uri of the token id of the uri passed
_setTokenURI(newNFTTokenId, tokenURI);
//increment the counter
tokenCounter = tokenCounter + 1;
//return the token id
return newNFTTokenId;
}
}
نمونه قراردادهای هوشمند ERC721 NFT با ویژگیها
در برنامهنویسی راههای زیادی برای پیادهسازی یک راهحل وجود دارد، بنابراین اکنون اجازه میدهیم پیادهسازی قرارداد هوشمند NFT را بررسی کنیم.
در قرارداد هوشمند ERC721 زیر میتوانید یک NFT ایجاد کنید که میتواند یک ویژگی یا ویژگی خاص داشته باشد (به عنوان مثال؛ قرمز، بلند، سریع، قوی، هر چیزی). نقشه ها ویژگی های NTF را ذخیره می کنند. هر بار که یک NFT جدید برای جلوگیری از ایجاد توکن های تکراری، نقشه بررسی می شود. این مانع از داشتن صفات یا ویژگی های مشابه توکن ها می شود.
pragma solidity 0.5.0;
import "./ERC721Flattened.sol";
contract Astronaut is ERC721Full {
//create an array of traits to keep track of different traits
//no traits can be the same
string[] public trait;
mapping(string => bool) _traitExists;
//constructor for an ERC721 is a name and symbol
constructor() ERC721Full("astronaut", "STAR") public {
}
//create a new token by calling the mint function
//every token needs to be different
//need to pass in a trait that does not exist
function createNFT(string memory _trait) public {
//check the mapping to determine if trait exists
require(!_traitExists[_trait]);
//if trait does not exist mint token and create a new token id
//mint for the msg.sender
//add trait to array and set trait in mapping to true
uint _id = trait.push(_trait);
_mint(msg.sender, _id);
_traitExists[_trait] = true;
}
}
بهترین راه برای یادگیری نحوه عملکرد NFT، آزمایش و ایجاد یک قرارداد هوشمند در Remix است. این قراردادها را به سطح بعدی ببرید و خلاقیت خود را اضافه کنید. تمدید این قراردادها به موارد زیر:
- اجازه دادن به صفات متعدد
- یک اوراکل Chainlink را برای تولید یک عدد واقعا تصادفی اجرا کنید و عدد را نشان دهنده یک مشخصه (مقدار، قدرت، سرعت و غیره) کنید.
- یک وب سایت ایجاد کنید تا بازدیدکنندگان بتوانند NFT های خود را ایجاد کنند.
- دو قرارداد بالا را با هم ترکیب کنید تا NFT شما بتواند URI و ویژگی هایی داشته باشد
قراردادهای ERC721 از موارد استفاده مختلف از مالکیت سند گرفته تا صدور نام دامنه پشتیبانی می کند.
در صورتی که تجربه خاصی در خصوص برنامهنویسی ندارید میتوانید از دورههای رایگان سایت ما “فرازمان“، استفاده کنید. همچنین اگر به دورههای پیشرفتهتری در این خصوص نیاز داشته باشید، ما با آموزش های حرفه ای که در سایتمان قرار دادیم می توانید به سطح دلخواهتان با تلاش و پشتکار برسید.
نقشه راه
راهنما آکادمی فرازمان
برای یادگیری برنامه نویسی بلاکچین…
در این باره بیشتر بخوانید
دیدگاهتان را بنویسید