پروژه‌های عملی در سالیدیتی

ایجاد شده توسط دکتر مصطفی جلیلی در آموزش برنامه نویسی سالیدیتی 17 مه 2025
اشتراک گذاری

پروژه‌های عملی در سالیدیتی | از ساخت کیف پول تا سیستم رأی‌گیری غیرمتمرکز (DAO)


درک مفاهیم نظری سالیدیتی تنها نیمی از مسیر توسعه قراردادهای هوشمند است. برای تسلط واقعی بر این زبان و معماری Web3، انجام پروژه‌های عملی نقش کلیدی دارد. در این مقاله با چهار پروژه‌ی کاربردی و متنوع آشنا می‌شویم که به شما کمک می‌کنند مهارت‌های خود را در توسعه قراردادهای هوشمند تقویت کرده و برای دنیای واقعی آماده شوید.




1. ساخت کیف پول ساده (Simple Wallet)


هدف:


ایجاد یک قرارداد هوشمند برای ذخیره و انتقال اتر توسط صاحب آن (مالک).


امکانات:

-  قابلیت دریافت اتر

-  قابلیت ارسال اتر توسط مالک

-  مشاهده موجودی

-  محدود کردن انتقال به آدرس مشخص


کد ساده کیف پول:


// SPDX-License-Identifier: MIT
pragma 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;
}
}

نکات:

-  امنیت اولیه رعایت شده، اما می‌توان با افزودن محدودیت‌های زمان‌بندی یا چند امضایی آن را ارتقاء داد.

-  مناسب برای درک اولیه عملکرد پرداخت‌ها در اتریوم.




2. ساخت یک توکن شخصی (Personal Token - ERC-20)


هدف:


ایجاد یک توکن ERC-20 برای کاربردهای خاص مثل پاداش، رأی‌دهی، یا عرضه اولیه.


پیاده‌سازی با OpenZeppelin:


// SPDX-License-Identifier: MIT
pragma 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) را اضافه کنید.

-  تست کامل در شبکه‌های تستی توصیه می‌شود.




3. ساخت مارکت‌پلیس NFT (NFT Marketplace)


 هدف:


ایجاد یک بازار غیرمتمرکز برای خرید و فروش NFTها توسط کاربران مختلف.


امکانات اصلی:

-  لیست کردن NFT برای فروش

-  خرید NFT با پرداخت اتر

-  انتقال مالکیت NFT پس از خرید


 کد پایه مارکت‌پلیس:


// SPDX-License-Identifier: MIT
pragma 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 برای امنیت بالاتر توصیه می‌شود.




4. ساخت سیستم رأی‌گیری غیرمتمرکز (DAO Voting)


هدف:


ساخت یک سیستم رأی‌گیری شفاف و غیرمتمرکز برای سازمان‌های خودمختار (DAO).


ویژگی‌ها:

-  ثبت پیشنهادها

-  رأی‌دهی توسط دارندگان توکن یا اعضا

-  اعمال تصمیم پس از رأی‌گیری موفق


کد ساده DAO Voting:


// SPDX-License-Identifier: MIT
pragma 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 و متامسک، می‌توانید اپلیکیشن‌های غیرمتمرکز حرفه‌ای طراحی کنید.

نظرات (0)

اشتراک گذاری

این پست را با دیگران به اشتراک بگذارید

تنظیمات GDPR

When you visit any of our websites, it may store or retrieve information on your browser, mostly in the form of cookies. This information might be about you, your preferences or your device and is mostly used to make the site work as you expect it to. The information does not usually directly identify you, but it can give you a more personalized web experience. Because we respect your right to privacy, you can choose not to allow some types of cookies. Click on the different category headings to find out more and manage your preferences. Please note, that blocking some types of cookies may impact your experience of the site and the services we are able to offer.