پایگاه آی‌دی اِی‌پی‌آی
«کدنویسی، پروژه، موفقیت»


آموزش ساخت اسمارت کانترکت و توکن ERC-20 با Solidity

فایل اسمارت کانترکت: MyToken.sol

IDAPI.IR – برنامه‌نویسی، طراحی وب و راهکارهای دیجیتال

سلام دوستان برنامه‌نویس و علاقه‌مندان به دنیای بلاکچین! من [محمدرضا غریبی] هستم، یکی از اعضای تیم IDAPI، و سالهاست که با پروژه‌های وب و حالا بلاکچین کار می‌کنم. یادمه اولین باری که خواستم یه توکن بسازم، کلی گیج شدم – کدوم ابزار؟ چطور تست کنم؟ امنیتش چی می‌شه؟ اما بعد از کلی آزمون و خطا و کار روی پروژه‌های واقعی، حالا می‌تونم بگم که ساخت اسمارت کانترکت نه‌تنها پیچیده نیست، بلکه می‌تونه یکی از هیجان‌انگیزترین کارها تو دنیای کدینگ باشه.

تو این پست طولانی و کامل، می‌خوام قدم‌به‌قدم باهاتون پیش برم تا یه اسمارت کانترکت ساده بسازیم و بعدش یه توکن ERC-20 حرفه‌ای راه بندازیم. این آموزش رو طوری نوشتم که حتی اگر تازه‌کار باشی، بتونی دنبال کنی، اما نکات پیشرفته‌ای هم اضافه کردم تا حرفه‌ای‌ها هم چیزی جدید یاد بگیرن. بعلاوه، کدهای آماده و رایگان رو براتون گذاشتم که مستقیم دانلود کنید. اگر دنبال ساخت ارز دیجیتال خودتون، پروژه DeFi یا حتی یه NFT ساده هستید، این پست دقیقاً همون چیزیه که نیاز دارید. بریم سراغ اصل مطلب!

چرا ساخت اسمارت کانترکت و توکن ERC-20 مهمه؟

قبل از اینکه دست به کد بشیم، بذارید یه کم زمینه بدم. اسمارت کانترکت‌ها قراردادهای خودکار روی بلاکچین هستن که بدون نیاز به واسطه اجرا می‌شن – مثل یه ماشین فروش خودکار، اما برای پول و داده! استاندارد ERC-20 هم رایج‌ترین نوع توکن روی اتریومه که برای ارزهای دیجیتال مثل USDT یا SHIB استفاده می‌شه.

چرا الان؟ چون تو سال ۲۰۲۵، با آپدیت‌های جدید اتریوم مثل Pectra، بلاکچین سریع‌تر و ارزون‌تر شده. اگر می‌خواید وارد دنیای Web3 بشید، ساخت یه توکن اولین قدم عالیه. من تو پروژه‌های IDAPI دیدم که چقدر این مهارت می‌تونه درآمدی ایجاد کنه – از فروش توکن تا مشاوره پروژه. حالا بیاید شروع کنیم!

قدم اول: آماده‌سازی محیط توسعه (Setup اولیه)

برای ساخت اسمارت کانترکت، نیاز به ابزارهای ساده داریم. من پیشنهاد می‌کنم از Remix IDE شروع کنید چون آنلاینه و نیاز به نصب نداره، اما برای پروژه‌های بزرگ‌تر، Hardhat یا Foundry عالیه.

۱. نصب کیف پول Metamask: اگر ندارید، از سایت metamask.io دانلود کنید و یه اکانت بسازید. این کیف پول برای اتصال به شبکه‌های تست مثل Sepolia لازمه. حتماً seed phrase رو امن نگه دارید!

۲. انتخاب IDE: برید به remix.ethereum.org. این سایت یه ویرایشگر آنلاین Solidity داره که می‌تونید کد بنویسید، کامپایل کنید و حتی deploy کنید.

۳. گرفتن اتر آزمایشی (Faucet): برای تست، به شبکه Sepolia وصل شید و از سایت sepoliafaucet.com اتر رایگان بگیرید. هر روز می‌تونید ۰.۵ ETH بگیرید – کافیه آدرس کیف پولتون رو وارد کنید.

۴. نصب افزونه‌های مفید: اگر از VS Code استفاده می‌کنید، افزونه Solidity by Juan Blanco رو نصب کنید برای هایلایت کد و پیشنهادات هوشمند.

نکته متفاوت: تو سال ۲۰۲۵، از نسخه Solidity 0.8.30 یا بالاتر استفاده کنید چون امنیت بالاتری داره و از آپدیت‌های جدید مثل improved gas optimization پشتیبانی می‌کنه. همیشه چک کنید آخرین نسخه رو از soliditylang.org بگیرید.

قدم دوم: ساخت یه اسمارت کانترکت ساده برای گرم کردن

قبل از توکن، بیاید یه قرارداد ساده بسازیم تا با سینتکس Solidity آشنا شیم. این قرارداد یه عدد رو ذخیره و نمایش می‌ده – مثل یه جعبه ساده روی بلاکچین.

۱. تو Remix، یه فایل جدید بسازید با نام SimpleStorage.sol.

۲. کد زیر رو کپی کنید:

solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SimpleStorage {
    uint256 private storedNumber; // متغیر خصوصی برای ذخیره عدد

    // فانکشن برای تنظیم عدد
    function setNumber(uint256 _number) public {
        storedNumber = _number;
    }

    // فانکشن برای خواندن عدد (view یعنی گاز مصرف نمی‌کنه)
    function getNumber() public view returns (uint256) {
        return storedNumber;
    }
}

۳. کامپایل کنید: سمت چپ Remix، روی Solidity Compiler کلیک کنید و کامپایل رو بزنید. اگر ارور داد، نسخه pragma رو چک کنید.

۴. deploy کنید: به تب Deploy & Run Transactions برید، محیط رو روی Injected Provider – Metamask تنظیم کنید، و deploy رو بزنید. Metamask باز می‌شه و باید تأیید کنید (گاز کمی مصرف می‌کنه).

۵. تست کنید: بعد از deploy، فانکشن setNumber رو با یه عدد مثل ۴۲ صدا بزنید و بعد getNumber رو چک کنید. اگر کار کرد، تبریک! اولین قراردادتون روی بلاکچینه.

نکته کاربردی: همیشه از modifierها مثل onlyOwner استفاده کنید تا فقط صاحب قرارداد بتونه تغییر بده. این کار امنیت رو بالا می‌بره و جلوی سوءاستفاده رو می‌گیره.

قدم سوم: ساخت توکن ERC-20 – قلب مطلب!

حالا می‌ریم سراغ ساخت توکن. برای اینکه کارمون حرفه‌ای باشه، از کتابخونه OpenZeppelin استفاده می‌کنیم که کدهای آماده و امن داره. این کتابخونه جلوی باگ‌های رایج مثل reentrancy رو می‌گیره.

۱. نصب OpenZeppelin (در Remix): تو Remix، نمی‌تونید npm نصب کنید، پس مستقیم import کنید. اما اگر Hardhat استفاده می‌کنید، اول npm init -y بزنید، بعد npm install @openzeppelin/contracts.

۲. فایل جدید بسازید: نامش رو MyToken.sol بذارید.

۳. کد کامل توکن:

solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20; // نسخه جدید برای امنیت بهتر

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol"; // برای کنترل دسترسی

contract MyToken is ERC20, Ownable {
    // سازنده: نام توکن، نماد و مقدار اولیه
    constructor(address initialOwner, uint256 initialSupply) 
        ERC20("MyAwesomeToken", "MAT") // نام و نماد توکن
        Ownable(initialOwner) // صاحب اولیه
    {
        _mint(initialOwner, initialSupply * 10 ** decimals()); // مینت اولیه با دقت اعشاری
    }

    // فانکشن اضافی: مینت بیشتر فقط توسط صاحب
    function mint(address to, uint256 amount) public onlyOwner {
        _mint(to, amount);
    }

    // فانکشن برن (سوزاندن) توکن
    function burn(uint256 amount) public {
        _burn(msg.sender, amount);
    }
}

توضیح کد:

  • ERC20 همه فانکشن‌های استاندارد مثل transfer، balanceOf و approve رو می‌ده.
  • Ownable اجازه می‌ده فقط صاحب قرارداد مینت کنه.
  • decimals معمولاً ۱۸ هست، پس initialSupply رو ضربدر ۱۰^۱۸ کنید تا واحد درست باشه (مثل ۱۰۰۰۰۰۰ توکن واقعی ۱۰۰۰۰۰۰ * ۱۰^۱۸ wei بشه).

۴. کامپایل و deploy: مثل قدم قبل، اما موقع deploy، initialOwner رو آدرس خودتون بذارید و initialSupply رو مثلاً ۱۰۰۰۰۰۰.

۵. تعامل با توکن: بعد deploy، balanceOf رو چک کنید – باید کل توکن‌ها رو نشون بده. transfer رو تست کنید تا به آدرس دیگه بفرستید.

نکته متفاوت: برخلاف آموزش‌های قدیمی، تو ۲۰۲۵ از SafeMath استفاده نکنید چون تو نسخه ۰.۸ به بعد، Solidity خودش overflow رو چک می‌کنه. اما همیشه گاز مصرفی رو مانیتور کنید – از Etherscan برای چک کردن تراکنش‌ها استفاده کنید.

قدم چهارم: تست و دیباگ پیشرفته

تست بدون ابزار مثل رانندگی بدون کمربنده!

۱. تست محلی: تو Remix، از تب Solidity Unit Testing استفاده کنید. یه فایل تست بسازید:

solidity

// در فایل جداگانه test/MyToken.t.sol (اگر Hardhat دارید)
pragma solidity ^0.8.20;

import "forge-std/Test.sol";
import "../MyToken.sol";

contract MyTokenTest is Test {
    MyToken token;

    function setUp() public {
        token = new MyToken(address(this), 1000000);
    }

    function testInitialBalance() public {
        assertEq(token.balanceOf(address(this)), 1000000 * 10**18);
    }
}

۲. تست روی شبکه: از Postman یا ethers.js برای صدا زدن فانکشن‌ها استفاده کنید. مثلاً اسکریپت JS بنویسید تا transfer رو اتوماتیک تست کنه.

۳. دیباگ: اگر ارور داد، از Remix Debugger استفاده کنید – قدم‌به‌قدم کد رو اجرا کنید و متغیرها رو چک کنید.

نکته کاربردی: برای پروژه‌های واقعی، از ابزار Slither یا Mythril برای تحلیل امنیت استفاده کنید. این ابزارها باگ‌های پنهان رو پیدا می‌کنن.

قدم پنجم: دیپلوی روی شبکه اصلی و مانیتورینگ

وقتی تست تموم شد، زمان راه‌اندازیه!

۱. انتخاب شبکه: برای شروع، Sepolia خوبه، اما برای واقعی، Ethereum Mainnet یا Polygon (ارزون‌تر).

۲. deploy با Hardhat: اسکریپت deploy.js بنویسید:

javascript

const hre = require("hardhat");

async function main() {
  const MyToken = await hre.ethers.getContractFactory("MyToken");
  const token = await MyToken.deploy("YourAddressHere", 1000000);

  await token.deployed();
  console.log("Token deployed to:", token.address);
}

main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

۳. ورود به Etherscan: بعد deploy، قرارداد رو verify کنید تا کد منبع عمومی بشه – این کار اعتماد می‌سازه.

۴. مانیتورینگ: از Tenderly یا Alchemy برای داشبورد واقعی‌زمان استفاده کنید. اگر توکنتون محبوب شد، bot برای هشدار خطاها بسازید.

نکته پیشرفته: برای آپگرید، از الگوی Proxy استفاده کنید (از OpenZeppelin). اینطوری می‌تونید بعدا کد رو بدون از دست دادن داده تغییر بدید – چیزی که تو آموزش‌های پایه‌ای نمی‌گن!

امنیت: بهترین شیوه‌ها برای جلوگیری از هک

امنیت اسمارت کانترکت مثل بیمه ماشینه – بدونش، همه چیز از دست می‌ره. تو ۲۰۲۵، OWASP Smart Contract Top 10 رو چک کنید.

۱. از کتابخونه‌های معتبر استفاده کنید: مثل OpenZeppelin.

۲. چک لیست ساده:

  • جلوی reentrancy بگیرید با Checks-Effects-Interactions.
  • همیشه external calls رو بعد از تغییرات داخلی بذارید.
  • ازتایم اوت برای فانکشن‌ها استفاده کنید اگر لازم باشه.

۳. Audit: برای پروژه جدی، از شرکت‌هایی مثل Hacken یا تیم IDAPI کمک بگیرید. ما تو IDAPI سرویس audit داریم با ۱۵% تخفیف برای خوانندگان این پست!

۴. به‌روزرسانی: همیشه کد رو برای نسخه جدید Solidity چک کنید – مثلاً ۰.۸.۳۰ جلوی باگ‌های قدیمی رو می‌گیره.

نتیجه‌گیری و قدم بعدی

تبریک! حالا شما یه توکن ERC-20 حرفه‌ای ساختید که می‌تونه پایه پروژه‌های بزرگ باشه. من تو IDAPI دیدم که چقدر این مهارت می‌تونه زندگی حرفه‌ای رو تغییر بده – از freelancerی تا startup. اگر سوالی داشتید، تو کامنت‌ها بپرسید، حتماً جواب می‌دم.

اگر پروژه سفارشی می‌خواید، از قسمت سفارش پروژه ارسال سفارش کنید با تشکر.
یک اسمارت کانترکت برای درک بیشتر :» دانلود رایگان -MyToken.sol
رمز فایل : idapi.ir
آموزش اجرا و توضیحات در فایل قرار داده شده است.نظر شما چیه؟ کدوم بخش براتون جالب‌تر بود؟ تجربه‌ای با بلاکچین دارید؟ منتظر کامنت‌هاتون هستم! 😊

گفتگوی زنده