درک مفاهیم نظری سالیدیتی تنها نیمی از مسیر توسعه قراردادهای هوشمند است. برای تسلط واقعی بر این زبان و معماری Web3، انجام پروژههای عملی نقش کلیدی دارد. در این مقاله با چهار پروژهی کاربردی و متنوع آشنا میشویم که به شما کمک میکنند مهارتهای خود را در توسعه قراردادهای هوشمند تقویت کرده و برای دنیای واقعی آماده شوید.
هدف:
ایجاد یک قرارداد هوشمند برای ذخیره و انتقال اتر توسط صاحب آن (مالک).
امکانات:
- قابلیت دریافت اتر
- قابلیت ارسال اتر توسط مالک
- مشاهده موجودی
- محدود کردن انتقال به آدرس مشخص
کد ساده کیف پول:
// SPDX-License-Identifier: MITpragma solidity ^0.8.0;contract SimpleWallet {address public owner;constructor() {owner = msg.sender;}receive() external payable {}function withdraw(address payable to, uint amount) external {require(msg.sender == owner, "Not the owner");require(address(this).balance >= amount, "Insufficient funds");to.transfer(amount);}function getBalance() external view returns (uint) {return address(this).balance;}}
نکات:
- امنیت اولیه رعایت شده، اما میتوان با افزودن محدودیتهای زمانبندی یا چند امضایی آن را ارتقاء داد.
- مناسب برای درک اولیه عملکرد پرداختها در اتریوم.
هدف:
ایجاد یک توکن ERC-20 برای کاربردهای خاص مثل پاداش، رأیدهی، یا عرضه اولیه.
پیادهسازی با OpenZeppelin:
// SPDX-License-Identifier: MITpragma solidity ^0.8.0;import "@openzeppelin/contracts/token/ERC20/ERC20.sol";contract MyPersonalToken is ERC20 {constructor() ERC20("MyToken", "MTK") {_mint(msg.sender, 1_000_000 * 10 ** decimals());}}
موارد کاربرد:
- اقتصاد درونبرنامهای
- پرداخت در DAppها
- عرضه اولیه (ICO یا IDO)
نکات:
- میتوانید قابلیتهایی مانند burn، mint توسط کاربران خاص یا قابلیت توقف قرارداد (Pausable) را اضافه کنید.
- تست کامل در شبکههای تستی توصیه میشود.
هدف:
ایجاد یک بازار غیرمتمرکز برای خرید و فروش NFTها توسط کاربران مختلف.
امکانات اصلی:
- لیست کردن NFT برای فروش
- خرید NFT با پرداخت اتر
- انتقال مالکیت NFT پس از خرید
کد پایه مارکتپلیس:
// SPDX-License-Identifier: MITpragma solidity ^0.8.0;interface IERC721 {function safeTransferFrom(address from, address to, uint tokenId) external;}contract NFTMarketplace {struct Listing {address seller;uint price;}mapping(address => mapping(uint => Listing)) public listings;function listNFT(address nft, uint tokenId, uint price) external {listings[nft][tokenId] = Listing(msg.sender, price);}function buyNFT(address nft, uint tokenId) external payable {Listing memory item = listings[nft][tokenId];require(msg.value == item.price, "Incorrect price");delete listings[nft][tokenId];payable(item.seller).transfer(msg.value);IERC721(nft).safeTransferFrom(item.seller, msg.sender, tokenId);}}
نکات:
- برای پروژههای واقعی، قابلیتهای بیشتری مثل کارمزد، فی بازار، یا تایید دستی میتوان اضافه کرد.
- استفاده از استانداردهای OpenZeppelin برای امنیت بالاتر توصیه میشود.
هدف:
ساخت یک سیستم رأیگیری شفاف و غیرمتمرکز برای سازمانهای خودمختار (DAO).
ویژگیها:
- ثبت پیشنهادها
- رأیدهی توسط دارندگان توکن یا اعضا
- اعمال تصمیم پس از رأیگیری موفق
کد ساده DAO Voting:
// SPDX-License-Identifier: MITpragma solidity ^0.8.0;contract DAOVoting {struct Proposal {string description;uint votesFor;uint votesAgainst;bool executed;}address public admin;mapping(address => bool) public voters;Proposal[] public proposals;constructor() {admin = msg.sender;}function addVoter(address voter) external {require(msg.sender == admin, "Only admin");voters[voter] = true;}function createProposal(string memory desc) external {require(voters[msg.sender], "Not allowed");proposals.push(Proposal(desc, 0, 0, false));}function vote(uint index, bool support) external {require(voters[msg.sender], "Not allowed");Proposal storage p = proposals[index];require(!p.executed, "Already executed");if (support) {p.votesFor++;} else {p.votesAgainst++;}}function executeProposal(uint index) external {Proposal storage p = proposals[index];require(p.votesFor > p.votesAgainst, "Not enough support");p.executed = true;// اجرای تصمیم...}}
نکات:
- میتوانید رأیدهی با توکن (ERC-20) و مکانیزمهای پیچیدهتر مانند Quadratic Voting را پیادهسازی کنید.
- ثبت زمان شروع و پایان رأیگیری نیز در پروژههای واقعی ضروری است.
انجام پروژههای عملی در سالیدیتی، درک عمیقتری از مفاهیم قرارداد هوشمند، امنیت، تعاملات و استانداردهای ERC به شما میدهد. پروژههایی مانند ساخت کیفپول، ایجاد توکن شخصی، بازار NFT و سیستم DAO از کاربردیترین پروژههای Web3 هستند. با ترکیب این مفاهیم و ابزارهایی مانند OpenZeppelin، Hardhat، Remix و متامسک، میتوانید اپلیکیشنهای غیرمتمرکز حرفهای طراحی کنید.