
آموزش برنامه نویسی سالیدیتی رایگان درس پنجم
قراردادها در Solidity مشابه کلاسهای زبانهای شیگرا هستند. هر قرارداد میتواند شامل اعلانهایی از متغیرهای حالت، توابع، اصلاحکنندههای تابع، رویدادها، خطاها، انواع ساختار و انواع Enum باشد. علاوه بر این، قراردادها میتوانند از قراردادهای دیگر ارث ببرند. انواع خاصی از قراردادها به نام کتابخانهها و رابطها نیز وجود دارد. بخش مربوط به قراردادها حاوی جزئیات بیشتری نسبت به این بخش است که به ارائه یک
Table of contents [Show]
ساختار یک قرارداد
قراردادها در Solidity مشابه کلاسهای زبانهای شیگرا هستند. هر قرارداد میتواند شامل اعلانهایی از متغیرهای حالت، توابع، اصلاحکنندههای تابع، رویدادها، خطاها، انواع ساختار و انواع Enum باشد. علاوه بر این، قراردادها میتوانند از قراردادهای دیگر ارث ببرند. انواع خاصی از قراردادها به نام کتابخانهها و رابطها نیز وجود دارد. بخش مربوط به قراردادها حاوی جزئیات بیشتری نسبت به این بخش است که به ارائه یک نمای کلی سریع کمک میکند.
پیشنهاد ویژه: آموزش رایگان سالیدیتی
متغیرهای حالت
متغیرهای حالت متغیرهایی هستند که مقادیر آنها به طور دائم در مخزن قرارداد ذخیره می شود.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.9.0;
contract SimpleStorage {
uint storedData; // State variable
// Additional functions or logic can be added here
}
برای دیدن انواع متغیرهای حالت معتبر و قابلیت مشاهده آنها و گیرندهها برای انتخابهای احتمالی برای مشاهده انواع متغیرها، به بخش انواع مراجعه کنید.
توابع
توابع، واحد اجرایی کد هستند. توابع معمولاً در داخل قرارداد تعریف میشوند، اما در خارج از قراردادها نیز میتوانند تعریف شوند.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.1 <0.9.0;
contract SimpleAuction {
function bid() public payable {
// Function logic goes here
// ...
}
}
// Helper function defined outside of a contract
function helper(uint x) pure returns (uint) {
return x * 2;
}
فراخوانی توابع میتوانند به صورت داخلی یا خارجی اتفاق بیفتند و دارای قابلیت مشاهده مختلفی نسبت به سایر قراردادها هستند. توابع پارامترها را میپذیرند و متغیرها را برمیگردانند تا پارامترها و مقادیر بین آنها منتقل شود.
توابع اصلاح کننده
از تابع اصلاح کنندهها میتوان برای اصلاح معناشناسی (semantics ) توابع به روشی اعلانی استفاده کرد (به توابع اصلاح کننده در بخش قراردادها مراجعه کنید.) اضافه بار ، به این معنا که داشتن نام اصلاح کننده یکسان با پارامترهای مختلف، امکان پذیر نیست. مانند توابع، اصلاح کنندهها را میتوان لغو کرد.
مانند توابع، اصلاح کنندهها نیز میتوانند نادیده گرفته شوند.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.22 <0.9.0;
contract Purchase {
address public seller;
modifier onlySeller() {
// Modifier to restrict access to the seller
require(
msg.sender == seller,
Only seller can call this.
);
_;
}
function abort() public view onlySeller {
// Modifier usage
// Function logic goes here
// ...
}
}
رویدادها
رویدادها رابطهای راحتی برای ورود به امکانات EVM هستند.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.21 <0.9.0;
contract SimpleAuction {
// Event declaration
event HighestBidIncreased(address bidder, uint amount);
function bid() public payable {
// Logic for bidding goes here
// ...
// Triggering the event
emit HighestBidIncreased(msg.sender, msg.value);
}
}
برای اطلاع از چگونگی اعلام رویدادها و استفاده از آنها از طریق dapp، به بخش رویدادها در بخش قراردادها مراجعه کنید.
خطاها
خطاها به شما امکان میدهند نامها و دادههای توصیفی را برای شرایط شکست تعریف کنید. از خطاها میتوان در دستورات revert استفاده کرد. در مقایسه با توضیحات رشته ، خطاها بسیار ارزانتر هستند و به شما امکان میدهند دادههای اضافی را رمزگذاری کنید. برای توصیف خطا برای کاربر میتوانید از NatSpec استفاده کنید.
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;
/// Not enough funds for transfer. Requested `requested`,
/// but only `available` available.
error NotEnoughFunds(uint requested, uint available);
contract Token {
mapping(address => uint) balances;
function transfer(address to, uint amount) public {
uint balance = balances[msg.sender];
if (balance < amount) {
revert NotEnoughFunds(amount, balance);
}
balances[msg.sender] -= amount;
balances[to] += amount;
// Additional logic can go here
}
}
برای اطلاعات بیشتر به خطاها و دستورات Revert در قسمت قراردادها مراجعه کنید.
انواع Struct
Structها انواع تعریف شده سفارشی هستند که میتوانند متغیرهای مختلفی را گروه بندی کنند (به بخش Structها در بخش انواع مراجعه کنید.)
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.9.0;
contract Ballot {
struct Voter {
// Struct definition for a voter
uint weight;
bool voted;
address delegate;
uint vote;
}
}
انواع Enum
از Enums میتوان برای ایجاد انواع سفارشی با مجموعه محدودی از “مقادیر ثابت ” استفاده کرد (به قسمت Enumها در بخش انواع مراجعه کنید.)
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.9.0;
contract Purchase {
// Enum to represent the state of the purchase
enum State { Created, Locked, Inactive }
}

مریم گوهرزاد
مدرس و بنیانگذار هلدینگ آرتا رسانه. برنامه نویس و محقق حوزه بلاکچین و توسعهدهنده بلاکچین | متخصص Solidity | توسعهدهنده وب Full-Stackمن یک توسعهدهنده علاقهمند به فناوریهای بلاکچین و وب ۳ هستم و در زمینه Solidity، توسعه قراردادهای هوشمند و ساخت برنامههای غیرمتمرکز (DApps) فعالیت میکنم. تمرکز من بر طراحی و پیادهسازی راهکارهایی است که در کنار بهرهگیری از فناوریهای نوین، عملکرد مناسب، امنیت و تجربه کاربری مطلوبی ارائه دهند.در مسیر حرفهای خود، تجربه کار با قراردادهای هوشمند و معماری راهکارهای مبتنی بر بلاکچین را به دست آوردهام و همواره تلاش میکنم دانش خود را با آخرین تغییرات و پیشرفتهای این حوزه بهروز نگه دارم. برای من، بلاکچین تنها یک فناوری جدید نیست؛ بلکه بستری برای ایجاد راهکارهای متفاوت و کاربردی در دنیای واقعی است.در کنار تخصص در حوزه بلاکچین، به عنوان یک توسعهدهنده وب Full-Stack نیز در طراحی و توسعه وبسایتها و برنامههای تحت وب فعالیت میکنم. تجربه کار در بخشهای Front-End و Back-End به من این امکان را داده است که پروژهها را از مرحله ایده و طراحی تا توسعه و اجرا، با دیدی جامع دنبال کنم. در فرآیند توسعه، توجه ویژهای به کدنویسی تمیز، معماری مناسب، طراحی واکنشگرا، عملکرد مطلوب و تجربه کاربری روان دارم.همیشه به دنبال یادگیری، تجربه فناوریهای جدید و پیدا کردن راههای بهتر برای حل مسائل فنی هستم. از مواجهه با چالشهای پیچیده استقبال میکنم و معتقدم بهترین نتایج زمانی شکل میگیرند که دانش فنی، خلاقیت و همکاری مؤثر در کنار یکدیگر قرار بگیرند.اگر به دنبال همکاری در یک پروژه بلاکچینی، Web3 یا توسعه وب هستید، خوشحال میشوم با یکدیگر در ارتباط باشیم و ایدهها را به راهکارهای واقعی و قابل اجرا تبدیل کنیم.



