ما در این مقاله به بررسی استاندارد توکن ERC-721 ، عدم قابلیت جایگزینی و ساخت یک توکن ERC-721 ساده می پردازیم. به طور کلی، توکن ERC-721 به توکن غیر قابل جایگزینی گفته میشود که توکنیزه کردن هر دیتای دلخواهی را ممکن میکند.
یکی از عبارتهای پرکاربرد بازار ارزهای دیجیتال ERC مخفف عبارت Ethereum Request for Comments است. ERC را نمیتوان یک فناوری یا پلتفرم دانست بلکه به مجموعهای از قواعد و استانداردها و دستورالعملهای فنی گفته میشود که توسعهدهندگان بلاکچین از آن استفاده میکنند.
در واقع این دستورالعملها میتواند فروش، خرید، محدودیتهای واحد و وجود توکنها را مشخص کنند. قوانین مربوطه به استانداردهای توکن میتواند به صرافیها، برنامهها و کیف پولهای مختلف مانند کیف پول متامسک کمک کند که عملکردهای پولی پایهای را بهتر درک کنند.
به عبارت سادهتر، ERC را میتوان یک سیستم باز و عمومی دانست که به همه افراد اجازه میدهد که بتوانند ساخت و نظردهی روی طرحهای پیشنهادی برای استانداردسازی توکنها را انجام دهند؛ استاندارد ERC-721 یکی از همینهاست. در ادامه مطلب نگاهی دقیق به ERC-721، کارکرد، توکنهای مبتنی بر آن و ویژگیهایش خواهیم داشت.
فهرست محتوا
استاندارد ERC-721 چیست؟
در تعریف استاندارد ERC-721 میتوان گفت یک مشخصه فنی است که میتواند به منظور توسعه توکنهای NFT بر بستر بلاکچینهایی که با ماشین مجازی اتریوم (EVM) سازگار هستند به کار گرفته شود. در پاسخ به این سوال که نقشش در EVM چیست میتوان گفت که با استفاده از آن میتوان توکنهای مختلفی را با ویژگیهای متفاوت پرداختی ساخت که با توکنهای ساخته شده توسط یک قرارداد هوشمند مشابه از ارزش متفاوتی برخوردار باشند.
بر اساس این تعریف توکنهای مبتنی بر استاندارد ERC-721 منحصر به فرد بوده و نمیتوان آنها را با سایر توکنها تعویض کرد.
قابلیت جایگزینی (Fungibility)
قبل از درک عدم قابلیت جایگزینی، لازم است قابلیت جایگزینی را درک کنیم. دو ویژگی اصلی برای قابلیت جایگزینی وجود دارد:
۱- قابلیت معاوضه: شما می توانید به معاوضه یا جابجایی واحد های یک دارایی قابل جایگزینی بپردازید. اسکناس ۲۰ دلاری شما و اسکناس ۲۰ دلاری من یک چیز را ارائه میدهند و میتوان آنها را با هم معاوضه کرد. به عنوان یک مثال دیگر می توانیم بگوییم که یک کیلوگرم شمش طلا با یک کیلوگرم دیگر شمش طلا برابر است . آنها ارزش مشابهی را ارائه میدهند و می توانند با همدیگر معاوضه شوند.
۲- مقدار: شما می توانید به ادغام واحدهای یک دارایی قابل جایگزینی بپردازید تا به ارزش بالاتری در کمیت و مقدار دست یابید. به عنوان مثال، شما میتوانید تعداد زیادی غلات را با هم جمع کنید و حالا شما همان چیز را دارید اما با تعداد و کمیت بالاتری.
عدم قابلیت جایگزینی (NonFungibility)
یک توکن غیر قابل جایگزینی، ارائه دهنده توکن منحصر به فردی است که نمی توان آن را با توکن دیگری معاوضه کرد. در اینجا شما نمیتوانید برای رسیدن به کمیت بالاتر به تقسیم و یا جمع کردن بپردازید؛ زیرا هر واحد منحصر به فرد است و نمیتوان آن را با داراییهای دیگر جابجا یا معاوضه کرد. به عنوان، مثال دو قطعه زمین را در نظر بگیرید؛ آنها هر دو با توجه به موقعیتی که دارند، غیر قابل جایگزینی هستند.
مثالی از توکن های غیر قابل جایگزین
توکن های غیر قابل جایگزین زیادی وجود دارند. تعدادی از مشهورترین آنها CryptoKitties، Etheremons، Crypto Bots و Blockchain Cuties هستند. می توانید لیست کاملی از توکن های ERC-721 را از طریق این لینک بررسی کنید.
ویژگیهای استاندارد ERC-721
حال اجازه دهید به بررسی عمیق استاندارد ERC-721 بپردازیم. این استاندارد مجموعهای از روشها را تعریف میکند که به شناسایی و تعامل با یک توکن غیر قابل جایگزین کمک میکنند.
رویداد ها (Events) در استاندارد ERC-721
رویداد هایی هستند که در انتقال و تایید ها صادر می شوند.
عملکرد های ERC-721
- balanceOf: موجودی یک آدرس را برخواهد گرداند.
- ownerOf: آدرس مالک یک توکن را برخواهد گرداند.
- safeTransferFrom: انتقال توکن از یک آدرس به آدرس دیگر با بررسی های انجام شده به منظور اطمینان حاصل کردن از این که گیرنده می تواند توکن را بپذیرد، پس توکن منهدم و یا گم نمی شود.
- transferFrom: انتقال توکن از یک آدرس به آدرس دیگر (استفاده از این عملکرد توصیه نمی شود). دعوت کننده این روش مسئول گذاشتن آدرس گیرنده صحیح می باشد.
- Approve: به تصویب هر آدرس دیگری برای ارسال یک تراکنش از اکانت مالک توکن به اکانت دیگر می پردازد.
- setApprovalForAll: به یک اپراتور (هر آدرسی، اکثرا کیف پول ها و صرافی ها) اجازه می دهد و یا گاها اجازه نمی دهد که به ارسال همه توکن ها از آدرس مالک به یک آدرس دیگر بپردازد.
- getApproved: آدرسی را برمی گرداند که مجاز به انتقال توکن برای مالکان می باشد. اگر آدرسی تنظیم نشده باشد ۰ را برمی گرداند.
- isApprovedForAll: اگر اپراتور مورد نظر (هر آدرسی) توسط مالک مورد نظر تایید شود، True (درست) را برمی گرداند.
دلیل ایجاد توکن ERC-721
هدف اصلی از طراحی استاندارد ERC-721 این است که توکنهای منحصر به فردی توسعه پیدا کنند که بتوانند ارزش ذاتی خود را از یک سری ویژگیهای خاص مانند کمیابی به دست آوردند. در واقع این استاندارد امکان ساخت یک اکوسیستم جدید از توکنها بر بستر بلاکچین اتریوم را فراهم کرده که میتواند با بهرهمندی از مفهوم ذخیره دیجیتال، ارزش و هویت مالک این نوع داراییها را ثبت کند.
به عبارت سادهتر هدف اصلی طراحی این استاندارد تولید توکنهای منحصر به فردی است که مشخصات آنها غیر قابل تکرار باشد. شاید با شنیدن این جمله برای شما این سوال به وجود آید که این ویژگی چه کارایی دارد؟ در جواب باید گفت که توکنهای تولید شده با استاندارد ERC-721 از نظر خاص بودن یا یکتایی بسیار کمیاب هستند که این موضوع ارزش زیادی را برای آنها به همراه دارد.
برای درک بهتر این مسئله فرض کنید که در فضای موزه قصد دارید با ارزشترین آثار خود را در یک مزایده به فروش بگذارید. از طرفی موزه به لطف قرعهکشی ویژه یک بلیط خاص برای هر یک از شرکت کنندگان در نظر میگیرد که امکان خریداری آثار هنری را به آنها میدهد.
در واقع موزه هر یک از بلیطها را با یک سری مشخصات منحصر به فرد و غیر قابل تکرار صادر کرده است. در این حالت فردی که بلیط برنده را در دست دارد میتواند آثار هنری مورد علاقه خود را خریداری کند. در بحث توکنهای تولید شده با استاندارد ERC-721 نیز همین مشخصات منحصر به فرد باعث ارزشمندی آن میشود.
کاربردهای استاندارد ERC-721
از مهمترین کاربردهای استاندارد ERC-721 در دنیای ارزهای دیجیتال میتوان موارد زیر را نام برد:
اثر هنری دیجیتال یا فیزیکی: یکی از مهمترین کاربردهای NFT مربوط به آثار هنری میشود. از این رو امکان شرکت در مزایدههای آثار دیجیتال یکی از مهمترین کاربردهای توکن ساخته شده بر اساس این استاندارد است.
بازی: توکنهای ساخته شده بر اساس این استاندارد میتوانند به منظور خریدهای درون بازی و به دست آوردن آیتمهای کمیاب کاربرد داشته باشند.
ملک: با استفاده از این نوع توکنهای میتوان توکنیزه کردن داراییها و قراردادهای هوشمند را انجام داده و به راحتی خرید و فروش کرد.
امور مالی: با استفاده از این توکنها میتوان امور مالی مختلف مانند دیفای، وام، اوراق آتی و غیره را متحول کرد.
نرمافزار: با استفاده از توکنهای ساخته شده بر اساس استاندارد ERC-721 میتوان مجوزهای نرمافزاری به منظور ایجاد حریم شخصی و جلوگیری از استفاده غیر قانونی را فراهم کرد.
بلیت کنسرت یا مسابقات ورزشی: یکی از کاربردهای توکنهای مبتنی بر این استاندارد حصول اطمینان از عدم کلاهبرداری در فروش بلیط است.
احراز هویت: این توکنها به دلیل ویژگیهای منحصر به فرد بهترین ابزار برای احراز هویتها کاربری محسوب میشوند.
مهمترین ویژگیهای استاندارد ERC-721
در این قسمت باید به یک نکته اشاره کرد که ساختار استاندارد ERC-721 مشابه با ساختار توکنهای مبتنی بر ERC-20 است. همچنین این دو از نظر قراردادهای هوشمند موجود نیز مشابه هستند. با این حال این دو استاندارد و توکنهای ساخته شده بر مبنای آنها در برخی از خصوصیات تفاوتهایی دارند. از مهمترین ویژگیهای توکنهای ساخته شده مبتنی بر استاندارد ERC-721 میتوان به موارد زیر اشاره کرد:
- توکنها دارای یک نام هستند که به منظور نشان دادن اپلیکیشنهای بیرونی به کار میروند.
- به برنامههای غیر متمرکز یا dApps این امکان را میدهد که با یک نام کوتاه به این توکنها دسترسی داشته باشند.
- هر توکن مبتنی بر این استاندارد یک آدرس دارد که در یک فیلد قرار گرفته است.
- هر یک از این توکنها یک فیلد تعریف شده از عملکردهای مالک دارند که کاربرد اصلی آنها تعریف مالکیت توکن و روش انتقال آن است.
- توکنهای مبتنی بر این استاندارد دارای یک فیلد به نام Owners هستند که میتواند غیر قابل تعویض بودن و شناسایی توکن را تضمین کند.
مشهورترین توکنهای مبتنی بر استاندارد ERC-721
ERC-721 یکی از بهترین استانداردهای بلاک چین به حساب میآید که یکی از مشهورترین و محبوبترین بازیهای غیر متمرکز بر بستر بلاکچین اتریوم از این استاندارد استفاده میکند. این بازی که کریپتوکیتیز (Cryptokitties) نام دارد از این استاندارد به منظور ساخت کالکتیبلهای دیجیتال منحصر به فرد که به شکل بچه گربه هستند استفاده میکند. هر گربه در این بازی قیمت متفاوتی دارد که کاربران مشخص کننده قیمت آن هستند.
بسیاری از ان اف تیهایی که امروزه ساخته میشوند از استاندارد ERC-721 بهره میبرند. در ادامه با چند نمونه از معروفترین NFTهای مبتنی بر این استاندارد آشنا میشویم.
بورد ایپ یات کلاب (Borde Ape Yacht Club)
این NFT که به کلکیسون میمونهای خسته معروف است، یک مجموعه توکن ان اف تی است. این کالکشن که بر بستر بلاکچین اتریوم طراحی شده مجموعهای از تصاویر کارتونی میمونها است که با استفاده از یک الگوریتم ساخته شدهاند و ارزش بالایی دارد.
کول کتز (Cool Cats)
یکی دیگر از پروژهای جذاب دنیای NFT که از ERC-721 برای ساخت آن استفاده شده، در سال ۲۰۲۱ میلادی راهاندازی شد؛ اما توانست در یک مدت کوتاه و با سرعت بالا رتبه سوم NFTها را از نظر حجم فروش به دست آورد. رتبههای اول و دوم به ترتیب در اختیار ایپ یات کلاب و کریپتوپانکز (CryptoPunks) قرار دارد. با این که این روزها این پروژه کمتر مورد توجه قرار دارد، اما همچنان به عنوان یکی از ۲۰ پروژه برتر دنیای NFT شناخته میشود.
تیکل بیچ (Tickle Beach)
یکی از مجموعههای جذاب دنیای NFT که در سال ۲۰۲۲ راهاندازی شده است، تیکل بیچ نام دارد. این کلکسیون از ۵۸ کاراکتر سهبعدی حیوانات بامزه تشکیل شده که بر بستر شبکه اتریوم و مبتنی بر استاندارد ERC-721 ساخته شده است. این کالکشن امروزه رتبه اول مجموعههای ترند و رتبه ۵ کلکسیونها برتر در اوپن سی را در اختیار دارد.
تفاوت استاندارد ERC-20 با ERC-721
با توجه به موضوعاتی که تا این قسمت مورد بررسی قرار گرفت، مشخص شد که این دو استاندارد در برخی از ویژگیها مانند ساختار توکنها و نوع قرارداد هوشمند مشابهند. اما با تمام این شباهتها این دو و توکنهای ساخته شده مبتنی بر آنها تفاوتهایی دارند:
- توکنهای ساخته شده مبتنی بر ERC-721 غیر قابل تفویض یا NFT هستند. اما توکنهای مبتنی بر استاندارد ERC-20 فاقد این ویژگی هستند.
- یکی دیگر از تفاوتهای موجود بین این دو استاندارد ارزهای دیجیتال، غیر قابل تقسیم بودن توکنهای مبتنی بر ERC-721 است.
استاندارد ERC20 در سال ۲۰۱۵ توسط فابیان وگلستلر (Fabian Vogelsteller) معرفی شد. این استاندارد توکن فقط API یک قرارداد هوشمند اتریوم را تعریف میکند و در پیادهسازی آن دخالتی ندارد. بنابراین، ERC20 نیز یک پروتکل استاندارد برای بلاک چین اتریوم است که برای بهاشتراکگذاری، تبادل یا انتقال توکنها بهکار میرود.
بنابراین با ساخت یک اسمارت کانترکت، گروهی از کدها تحت عنوان “function” یا «تابع» ایجاد میشود. در ظاهر، این رابط کاربری جزئیات تابع یک قرارداد هوشمند را تعیین میکند و در پشت صحنه، پیادهسازی آن اتفاق میافتد. کدهای تابع ERC20 به صورت زیر است:
- Token name: نام توکن
- Symbol: نماد
- Decimal: رقم اعشار تا ۱۸
- totalSupply: عرضه کل
- balanceOf: موجودی آدرس
- transfer: نحوه انتقال
- transferFrom: هویت انتقالدهنده
- approve: تصویب مالکیت
- Allowance: برای ارائه مجوزهای خاص توسط هولدرهای این توکنها به برنامهها، صرافیهای غیر متمرکز و دیفای
۳ تابع اول توکنهای ERC20 دلخواه است، اما باقی آنها الزامی هستند. مثلا، یک توکن ERC20 باید دارای تابع transfer باشد که نحوه انتقال و حساب انتقالدهنده را مشخص میکند.
با وجود شباهتهای زیاد استاندارد ERC20 و ERC721، از جمله تفاوتهای آنها عبارتند از:
- برخلاف ERC20، توکنهای ERC 721 ان اف تی و غیر مثلی هستند. این یعنی توکنهای استاندارد ERC-721 همانند ERC-20 قابل تخریب نیستند.
- ارزهای ERC20 تقسیمپذیر هستند، یعنی شما میتوانید مثلا ۰.۱ آنها را (بسته به رقم اعشار تعریف شده) انتقال دهید. اما توکنهای استاندارد ERC 721 بهصورت واحد کل قابل انتقال هستند.
- تابع Allowance در قراردادهای با استاندارد توکن ERC721 وجود ندارد.
در جدول زیر، تفاوتهای میان این دو استاندارد توکن را مشاهده میکنید:
معیار | ERC-20 | ERC-721 |
تعویض پذیری | تعویض پذیر | غیر تعویض پذیر |
هویت توکن | عدم وجود تمایز میان توکنها | دارای هویت مشخص و متمایز |
خصیصه کالکتیبل | غیر قابل کالکتیبل | دارای قابلیت کالکتیبل همانند پول فیات |
تغییرات ارزش | بر اساس عرضه و تقاضا | بر اساس ویژگیهای کمیابی و منحصربهفردی |
پذیرش | پذیرش گسترده | پذیرش محدود |
جایگزین | جایگزینی راحت | عدم وجود جایگزین مشخص |
تقسیمپذیری | قابل تقسیم به اعشار | غیر قابل تقسیم به اعشار |
تابع مالکیت | عدم وجود تابع مالکیت خاص | دارای تابع مالکیت ویژه |
استاندارد ERC-721؛ طراحی توکن با مشخصات منحصر به فرد
استاندارد ERC-721 به عنوان یکی از استانداردهای بلاکچین با این هدف طراحی شد که امکان ساخت توکنهای مختلف با ویژگیها و مشخصات منحصر به فرد را غیر قابل تکرار هستند فراهم کند. همین یکتا و منحصر به فرد بودن توکنهای ساخته شده مبتنی بر این استاندارد، باعث میشود که ارزش زیادی پیدا کند.
در حال حاضر این استاندارد به عنوان سازوکاری پیشران در اکوسیستم اتریوم شناخته میشود که امروزه مجموعههای NFT زیادی مبتنی بر آن ساخته میشوند. به همین دلیل درک قابلیتها و کاربردهای این استاندارد و آگاهی نسبت به ویژگیهای آن به منظور حضور در دنیای ان اف تی ضرورت دارد؛ زیرا در آینده با افزایش تقاضا برای توکنهای ساخته شده مبتنی بر استاندارد ERC-721 دنیای NFT به یک موضوع داغ در دنیا تبدیل میشود.
ساخت یک توکن ERC-721 با استفاده از OpenZeppelin و Truffle
حال اجازه دهید با استفاده از کتابخانه OpenZeppelin و Truffle یک توکن ERC-721 بسازیم. ابتدا به سازمان دادن Truffle می پردازیم:
mkdir simple
truffle init
npm install openzeppelin-solidity
اجازه دهید قرارداد جدیدی برای توکن نمونه خود ایجاد کنیم:
pragma solidity ^0.4.24;import “/openzeppelin-solidity/contracts/token/ERC721/ERC721Full.sol”;
import “/openzeppelin-solidity/contracts/ownership/Ownable.sol”;contract SIMPLEToken is ERC721Full, Ownable{
constructor()
ERC721Full(“SIMPLE”, “SMPL”)
public {}function mint(address to, uint256 tokenId) public onlyOwner {
_mint(to, tokenId);
}function _mint(address to) public onlyOwner{
mint(to, totalSupply().add(1));
}}
اجازه دهید ببینیم که ما در اینجا داریم چه کار می کنیم. ما در حال دریافت دو قرارداد ERC721FULL و Ownable هستیم.
Ownable
با استفاده از این قرارداد، ما می توانیم به مدیریت مالکیت قراردادمان بپردازیم و تنها قادر به ایجاد توکن ها از اکانت مالک قرارداد خواهیم بود.
ERC721FULL
این پیاده سازی استاندارد سطح کاربری ERC-721 است که در بالا ذکر شد. اجازه دهید ببینیم که در داخل این قرارداد چه چیزی روی می دهد:
pragma solidity ^0.4.24;import “./ERC721.sol”;
import “./ERC721Enumerable.sol”;
import “./ERC721Metadata.sol”;
contract ERC721Full is ERC721, ERC721Enumerable, ERC721Metadata {
constructor(string name, string symbol) ERC721Metadata(name, symbol)
public
{
}
}
ERC721FULL در داخل خود ۳ قرارداد را دریافت می کند. ما اساسا به ERC-721 نگاه می کنیم تا این پیاده سازی را درک کنیم.
اجازه دهید مرحله به مرحله از عملکرد اصلی گذر کنیم. قبل از آن باید درک کنیم که توکن ها چگونه ذخیره می شوند:
// Mapping from token ID to owner
mapping (uint256 => address) private _tokenOwner;// Mapping from token ID to approved address
mapping (uint256 => address) private _tokenApprovals;// Mapping from owner to number of owned token
mapping (address => uint256) private _ownedTokensCount;// Mapping from owner to operator approvals
mapping (address => mapping (address => bool)) private _operatorApprovals;
- tokenOwner: این طراحی برای ذخیره یک توکن در برابر مالک خود مورد نیاز است. با استفاده از این می دانیم که مالک یک tokenId کیست.
- tokenApprovals: این طراحی برای ذخیره tokenId در برابر آدرسی که توسط مالک توکن تصویب شده مورد نیاز می باشد و با استفاده از آن، توکن برای مالک انتقال داده می شود.
- ownedTokenCount: این طراحی برای دانستن تعداد توکن هایی که یک آدرس مالک آن است مورد نیاز می باشد. اگر این طراحی را ایجاد نکنید، مجبور به تشکیل حلقه برای دسترسی به این اطلاعات هستیم و این تشکیل حلقه نیاز به gas زیادی در EVM دارد.
- operatorApprovals: طراحی یک مالک و اپراتور برای بررسی این است که آیا مالک تایید شده است یا نه.
حال اجازه دهید به بررسی عملکرد ها در این استاندارد بپردازیم:
balanceOf: این موجودی یک آدرس را برخواهد گرداند. ابتدا آن در جستجوی یک آدرس معتبر می باشد و سپس از _ownedTokensCountاستفاده می کند تا شمار توکن را برگرداند.
function balanceOf(address owner) public view returns (uint256) {
require(owner != address(0));
return _ownedTokensCount[owner];
}
OwnerOf: این آدرس مالک را برای یک توکن مورد نظر با استفاده از طراحی _tokenOwner برمی گرداند.
function ownerOf(uint256 tokenId) public view returns (address) {
address owner = _tokenOwner[tokenId];
require(owner != address(0));
return owner;
}
Approve: این یک آدرس را برای انتقال توکن به خاطر مالک تصویب خواهد کرد. این عملکرد ابتدا بررسی می کند که آیا مالک عملکرد را دعوت کرده و یا آیا این دعوت توسط مالک برای ارسال همه توکن ها تایید شده است. سپس اگر همه چیز صحیح باشد، طراحی _tokenApprovals را به روز رسانی می کند.
function approve(address to, uint256 tokenId) public {
address owner = ownerOf(tokenId);
require(to != owner);
require(msg.sender == owner || isApprovedForAll(owner, msg.sender));_tokenApprovals[tokenId] = to;
emit Approval(owner, to, tokenId);
}
safeTransferFrom: دو عملکرد وجود دارد که نام های مشابهی دارند اما بحث های آنها متفاوت است. این عملکرد ها به صورت داخلی عملکرد transferfrom نامیده می شوند. آنها همچنین یک وظیفه مهم تر را اجرا می کنند. آنها بررسی می کنند تا ببینند که آیا آدرس گیرنده برای دریافت توکن معتبر است یا نه. این به امنیت توکن کمک می کند.
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes _data
)
public
{
transferFrom(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data));
}
transferFrom: این عملکرد اصلی برای انتقال یک توکن از یک آدرس به آدرس دیگر است. اجازه دهید ببینیم که این عملکرد چه چیزی انجام می دهد:
۱- بررسی می کند که آیا توکن توسط called به مالکیت درآمده و یا به caller یا دعوت کننده approved شده است. همچنین به بررسی اعتبار آدرس میپردازد.
۲- تصویب واضح، برداشتن مالکیت حال حاضر و کاهش شمار توکن مالک حال حاضر.
۳- اضافه کردن توکن به یک اکانت گیرنده و افزایش شمار توکن برای گیرنده.
function transferFrom(
address from,
address to,
uint256 tokenId
)
public
{
require(_isApprovedOrOwner(msg.sender, tokenId));
require(to != address(0));_clearApproval(from, tokenId);
_removeTokenFrom(from, tokenId);
_addTokenTo(to, tokenId);emit Transfer(from, to, tokenId);
}
setApprovalForAll: این عملکرد آدرس را برای انتقال همه توکنها به خاطر مالک تایید میکند. آن ابتدا بررسی میکند که آدرس called و to مشابه نباشند و سپس طراحی operatorApprovals را به روز رسانی میکند.
function setApprovalForAll(address to, bool approved) public {
require(to != msg.sender);
_operatorApprovals[msg.sender][to] = approved;
emit ApprovalForAll(msg.sender, to, approved);
}
isApprovedForAll: این عملکرد بررسی می کند که آیا owner، operator را برای انتقال توکن ها تایید کرده است یا نه.
function isApprovedForAll(
address owner,
address operator
)
public
view
returns (bool)
{
return _operatorApprovals[owner][operator];
}
getApproved: آدرس تصویب شده برای tokenId مورد نظر را برمیگرداند.
function getApproved(uint256 tokenId) public view returns (address) {
require(_exists(tokenId));
return _tokenApprovals[tokenId];
}
شما میتوانید به بررسی دیگر عملکردهای کمک کننده و قراردادهای دریافت شده بپردازید.
امتحان کردن توکن ERC-721
حال به امتحان و بررسی توکن نمونه خود میپردازیم. ما از یک بلاک چین محلی تعبیه شده در داخل برای نصب و تست قرارداد استفاده میکنیم.
truffle develop
این میز فرمان Truffle را برای ما فراهم می کند.
حال به نصب قرارداد میپردازیم. به یاد داشته باشید که لازم است یک فایل migration اضافه کنیم.
truffle compile
migrate –reset
SIMPLEToken.deployed().then((simple) => {token = simple;})
حال اجازه دهید تعدادی توکن ایجاد کنیم و یک تست انتقال و تایید را انجام دهیم.
oken._mint(web3.eth.accounts[0]) // will mint a new tokentoken.totalSupply() // check token’s total supplytoken.safeTransferFrom(web3.eth.accounts[0] , web3.eth.accounts[1], 1) // transfer token (token id 1) from 0’th account to 1st accounttoken.ownerOf(1) // check owner of token id 1token._mint(web3.eth.accounts[0]) // will mint another tokentoken.approve(web3.eth.accounts[3] , 2) // approve token id 2 to account[3]token.safeTransferFrom(web3.eth.accounts[0] , web3.eth.accounts[1], 2 , {from:web3.eth.accounts[3]}) // Note that we are adding {from:web3.eth.accounts[3]}, this mean that we are invoking this function using account[3]
شما میتوانید به تست همه روشها بپردازید (openZeppelin کتابخانهای است که به خوبی تست شده است و بنابراین لازم نیست نگران عملکردی باشید که توسط کتابخانه فراهم شده است). شما باید در عوض متمرکز بر تست هر عملکردی باشید که توسط شما اضافه شده است.
جمع بندی:
استاندارد توکن ERC 721 اتریوم صرفا بهخاطر ماهیت فناوری دیجیتال، دارای محدودیتهای خاص خود است. هر شیء دیجیتالی حاصل مجموعهای از بیتهاست که امکان دستکاری و تغییر آنها وجود دارد. فرض کنید شما بهعنوان یک هنرمند، بهترین پرتره دیجیتال را تا کنون ساختهاید. حالا اگر فردی خواهان کپی و نقاشی کردن یک سبیل روی آن باشد، آیا شما فقط با اثبات مالکیت این دارایی دیجیتال قادر به جلوگیری از این کار هستید؟ آیا شما مالک تصویر جدید حاصل از دارایی تحت تملک خود هستید؟ اگر این نقاشی نه یک اثر هنری، بلکه یک کد قابل اجرا بود، آیا قادر به محدود کردن استفاده از آن کد بودید؟
زمانی که یک فناوری جدید وارد صحنه میشود، تمام احتمالات و محدودیتها خودشان را سریعا نشان نمیدهند. به همین خاطر، مهندسان این حوزه همیشه درصدد کشف پتانسیلها و چالشها هستند. سخن مطمئن درباره آینده توکنهای ERC721 این است که این استاندارد یک رویکرد بسیار فکرشده است و برای رفع برخی از کمبودهای پروتکلهای دنیای ورلد وایب وب کارایی خوبی دارد.
همانطور که دیدیم، سال گذشته توکنهای NFT سر و صدای زیادی به پا کردند و برخی از کلکسیونهای معروف به قیمتهای فضایی میلیون دلاری به فروش رسیدند. با این حال، باید در نظر داشت که همیشه با ظهور تکنولوژیهای جدید، فناوریهای قدیمیتر از کار افتاده و جای خود را به تازه واردان میدهند. بنابراین تا زمانی که جایگزینی برای استاندارد توکن ERC-721 معرفی نشود، میتوان به آینده درخشان این فضا امیدوار بود.
ERC-721 استاندارد توکن پیشران در اکوسیستم اتریوم بوده است. این استاندارد بنیاد قراردادهای هوشمند است که عنصر محوری برنامههای غیر متمرکز مبتنی بر بلاک چین مدرن محسوب میشود. درک قابلیتها و کاربردهای استاندارد توکن ERC 721 برای حضور در فضای ان اف تیها حیاتی است و با افزایش تقاضا برای توکن های استاندارد ERC-721، فضای NFT به موضوعی داغ تبدیل شده است.
سوالات متداول:
+استاندارد ERC721 چه زمانی اختراع شد؟
استاندارد ERC721 در سال ۲۰۱۸ توسط ۳ نفر از اعضای تیم توسعهدهندگان اتریوم از طریق یک طرح پیشنهادی توسعه (EIP) معرفی شد.
+چرا استاندارد توکن ERC-721 مهم است؟
به دلیل کاربردهای متعدد استاندارد ERC-721 برای ساخت توکنهای غیر مثلی نظیر آثار هنری دیجیتال، بلیتهای مسابقه، آیتمهای کمیاب درون بازی و موارد دیگر، استفاده از این استاندارد اهمیت ویژهای یافته است.
+چگونه یک توکن ERC-721 بسازیم؟
برای ساخت یک توکن مبتنی بر استاندارد ERC721 باید ابتدا یک قرارداد هوشمند ساخته و سپس توکن خود را روی یک بلاک چین سازگار با ماشین مجازی اتریوم مینت کنید.