یکی از مهمترین اجزای توسعه قراردادهای هوشمند در اتریوم، استفاده از استانداردهای توکن است. این استانداردها نهتنها موجب هماهنگی و تعامل بین قراردادها و اپلیکیشنها میشوند، بلکه امنیت، سازگاری با کیفپولها و صرافیها، و مقیاسپذیری را تضمین میکنند. در این مطلب به بررسی سه استاندارد پرکاربرد ERC-20، ERC-721 و ERC-1155 در سالیدیتی میپردازیم. همچنین نمونه کدهای عملی برای هرکدام ارائه شده تا بتوانید خودتان از صفر یک توکن بسازید.
ERC-20 متداولترین استاندارد برای ساخت توکنهای دیجیتال قابل تعویض است. توکنهایی که از این استاندارد پیروی میکنند، همانند یکدیگر هستند و ارزش و ویژگی یکسانی دارند؛ مانند ارزهای دیجیتال، توکنهای پاداش، یا داراییهای مالی قابل تقسیم.
ویژگیها:
تمام واحدهای توکن ارزش برابر دارند.
قابلیت انتقال، تایید و نگهداری توسط قراردادهای دیگر.
استانداردسازی برای کیفپولها و صرافیها.
ساخت یک توکن ERC-20 با OpenZeppelin:
// SPDX-License-Identifier: MITpragma solidity ^0.8.0;import "@openzeppelin/contracts/token/ERC20/ERC20.sol";contract GoldToken is ERC20 {constructor() ERC20("Gold Token", "GLD") {_mint(msg.sender, 1000000 * 10 ** decimals());}}
با استفاده از این قرارداد، توکنی با نام "Gold Token" و نماد "GLD" ایجاد شده که یک میلیون واحد دارد.
تمامی توکنها هنگام استقرار به آدرس سازنده اختصاص داده میشود.
ERC-721 اولین استاندارد رسمی برای ساخت NFT (Non-Fungible Token) است. این توکنها یکتا هستند و به هیچ وجه قابل تعویض با یکدیگر نیستند. هر توکن نمایانگر یک دارایی منحصربهفرد است؛ مانند تابلوهای هنری، آیتمهای خاص بازی، یا سند مالکیت دیجیتال.
ویژگیها:
هر توکن دارای شناسهی یکتا (tokenId) است.
امکان اتصال متادیتا (metadata) و فایلها از طریق URI.
مناسب برای بازارهای دیجیتال، بازیها، هنر و کلکسیونها.
توابع کلیدی:
ownerOf(tokenId)
safeTransferFrom(from, to, tokenId)
tokenURI(tokenId)
approve(to, tokenId)
ساخت یک NFT ساده:
// SPDX-License-Identifier: MITpragma solidity ^0.8.0;import "@openzeppelin/contracts/token/ERC721/ERC721.sol";contract ArtGallery is ERC721 {uint public currentId;address public admin;constructor() ERC721("ArtGallery", "ART") {admin = msg.sender;}function mint(address to) external {require(msg.sender == admin, "Only admin");_safeMint(to, currentId);currentId++;}}
ERC-1155 استانداردی نوین و چندمنظوره است که توسط Enjin معرفی شد. برخلاف ERC-20 یا ERC-721 که محدود به یک نوع توکن هستند، در ERC-1155 میتوان توکنهای مختلف (چه قابل تعویض و چه غیرقابل تعویض) را در یک قرارداد نگهداری کرد.
مزایا:
پشتیبانی از انواع توکن در یک قرارداد واحد.
انتقال چند توکن در یک تراکنش (batch transfer) با مصرف گس کمتر.
مناسب برای بازیها، متاورسها و پروژههای چندارزی.
توابع خاص:
safeBatchTransferFrom(...)
balanceOfBatch(...)
setURI(...)
نمونه کد پایه ERC-1155:
// SPDX-License-Identifier: MITpragma solidity ^0.8.0;import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";contract GameAssets is ERC1155 {constructor() ERC1155("https://api.example.com/metadata/{id}.json") {}function mint(address to, uint256 id, uint256 amount) external {_mint(to, id, amount, "");}}
در این مثال میتوان آیتمهایی مانند "شمشیر"، "سپر"، یا "NFT خاص" را با شناسه متفاوت ضرب (mint) کرد.
نکات تکمیلی برای طراحی توکن حرفهای
استفاده از کتابخانه OpenZeppelin برای پیادهسازی مطمئن و امنیتی.
تعیین دقیق اعشار (decimals) برای توکنهای ERC-20.
در نظر گرفتن محدودیتهای mint و burn برای کنترل عرضه.
استفاده از تابع AccessControl برای مدیریت سطوح دسترسی در پروژههای پیشرفته.
استفاده از Events برای ثبت دقیق تراکنشها در شبکه.
آشنایی با استانداردهای ERC یکی از پایههای اصلی توسعه در دنیای Web3 و بلاکچین است. با استفاده از ERC-20 میتوان توکنهای مالی قابل تعویض ساخت؛ با ERC-721 توکنهای یکتا مانند NFTها را ایجاد کرد؛ و با ERC-1155 توکنهایی انعطافپذیرتر و چندمنظوره پیادهسازی نمود. با انتخاب استاندارد مناسب، رعایت اصول امنیتی و استفاده از ابزارهای حرفهای مانند OpenZeppelin، مسیر توسعه توکنسازی ایمن و حرفهای را هموار خواهید کرد.