AI & ML; Python Programmer And Interested In Decentralized World
روز ۷/۱۰۰ - بررسی خواندن و نوشتن State variable در سالیدیتی
سالیدیتی، زبان برنامهنویسی محبوب برای توسعه قراردادهای هوشمند در بلاکچینهایی مانند اتریوم، از ویژگیها و قابلیتهای متنوعی برخوردار است. در این مقاله، به بررسی موضوع خواندن و نوشتن در State Variables در Solidity میپردازیم. State variable نقشی حیاتی در ذخیرهسازی و دسترسی به دادهها در داخل قراردادهای هوشمند ایفا میکنند. ما در این مقاله به نحوه بهروزرسانی State variable با ارسال تراکنشها و همچنین نحوه خواندن مقادیر آنها بدون پرداخت هیچگونه هزینه تراکنشی خواهیم پرداخت.
در کد فوق، قرارداد SimpleStorage
با یک متغیر وضعیت به نام num
تعریف شده است. این متغیر به عنوان یک عدد صحیح بدون علامت عمومی (uint public
) اعلان شده است که امکان دسترسی به مقدار آن از خارج از قرارداد را فراهم میکند. علاوه بر این، این قرارداد شامل دو تابع set
و get
به ترتیب برای بهروزرسانی و خواندن مقدار متغیر num
است.
مفهوم State variable
ـState variables، متغیرهایی هستند که در داخل یک قرارداد تعریف میشوند و مقادیر خود را در طول فراخوانی توابع حفظ میکنند. این متغیرها نماینده فضای ذخیرهسازی قرارداد هستند و امکان ذخیرهسازی دائمی دادهها را فراهم میکنند. برای درک بهتر نحوه عملکرد State variable، به قطعه کد زیر که نمونهای از استفاده از این متغیرها را نشان میدهد، توجه کنید:
/// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract SimpleStorage {
// State variable to store a number
uint public num;
// You need to send a transaction to write to a state variable.
function set(uint _num) public {
num = _num;
}
// You can read from a state variable without sending a transaction.
function get() public view returns (uint) {
return num;
}
}
در کد فوق، قرارداد SimpleStorage
با یک متغیر وضعیت به نام num
تعریف شده است. این متغیر به عنوان یک عدد صحیح بدون علامت عمومی (uint public
) اعلان شده است که امکان دسترسی به مقدار آن از خارج از قرارداد را فراهم میکند. علاوه بر این، این قرارداد شامل یک تابع set
برای بهروزرسانی مقدار num
و یک تابع get
برای خواندن مقدار آن است.
نوشتن State Variable
به منظور بهروزرسانی مقدار یک متغیر وضعیت، ارسال تراکنش به بلاکچین ضروری است. در قرارداد SimpleStorage
، تابع set
وظیفهی بهروزرسانی متغیر num
را بر عهده دارد. بررسی دقیقتر این تابع، نکات زیر را آشکار میکند:
```solidity
function set(uint _num) public {
num = _num;
}
```
تابع set
با دریافت یک پارامتر ورودی _num
از نوع uint
، مقدار آن را به متغیر وضعیت num
اختصاص میدهد. فراخوانی این تابع با یک مقدار دلخواه، متغیر وضعیت را به تناسب بهروزرسانی میکند. توجه داشته باشید که نوشتن در یک متغیر وضعیت، نیازمند ارسال تراکنش است که به طور معمول، هزینهی ناچیزی به عنوان کارمزد تراکنش یا گس، به همراه دارد.
خواندن مقادیر از State Variable
برخلاف نوشتن در یک متغیر وضعیت، خواندن مقدار آن بدون هزینه است و به هیچ کارمزد تراکنشی نیاز ندارد. در قرارداد SimpleStorage
، تابع get
به ما اجازه میدهد تا مقدار فعلی num
را بازیابی کنیم.
بر خلاف نوشتن در یک متغیر وضعیت، خواندن مقدار آن بدون هزینه و نیاز به کارمزد تراکنش انجام میشود. در قرارداد SimpleStorage
، تابع get
امکان بازیابی مقدار فعلی num
را فراهم میکند:
```solidity
function get() public view returns (uint) {
return num;
}
```
تابع get
با دو صفت public
و view
تعریف شده است. صفت public
امکان دسترسی خارجی به تابع را فراهم میکند و صفت view
تضمین میکند که تابع هیچگونه تغییری در وضعیت قرارداد ایجاد نکند. با فراخوانی تابع get
میتوان مقدار فعلی num
را بدون متحمل شدن هیچ هزینه تراکنشی بازیابی کرد.
نتیجهگیری
در این مقاله، به بررسی مفهوم خواندن و نوشتن در State variables در زبان برنامهنویسی Solidity پرداختیم. State variables به عنوان حافظهای دائمی برای قراردادهای هوشمند عمل میکنند و امکان ذخیرهسازی و دسترسی به دادهها را در طول اجرای قرارداد فراهم میکنند. لازم به ذکر است که نوشتن در یک متغیر وضعیت مستلزم ارسال تراکنش و پرداخت هزینه تراکنش است، در حالی که خواندن از آن رایگان است. توجه به این نکات در هنگام طراحی و پیادهسازی قراردادهای هوشمند، به منظور استفاده کارآمد از منابع بلاکچین، حائز اهمیت است.
Sample Code
کد کامل قرارداد SimpleStorage
در بلاک زیر ارائه شده است:
/// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract SimpleStorage {
// State variable to
store a number
uint public num;
// You need to send a transaction to write to a state variable.
function set(uint _num) public {
num = _num;
}
// You can read from a state variable without sending a transaction.
function get() public view returns (uint) {
return num;
}
}
به یاد داشته باشید برای تعامل با قرارداد، باید آن را در یک شبکه توسعه اتریوم کامپایل و دیپلوی کنید.
قرارداد SimpleStorage ارائه شده، نحوه خواندن و نوشتن یک state variable
را به نمایش میگذارد. در ادامه به بررسی دقیقتر اجزای آن میپردازیم:
1. State Variable:
- قرارداد شامل یک State Variable به نام
num
است که به عنوان یک عدد صحیح بدون علامت عمومی (uint public
) تعریف شده است. - استفاده از عبارت
public
به عنوان شناسه دسترسی، به طور خودکار یک تابع getter برای متغیرnum
ایجاد میکند. - مقدار پیشفرض
num
برابر با ۰ است.
2. Set Function:
- تابع
set
با دریافت یک پارامتر_num
از نوعuint
، امکان بهروزرسانی مقدار متغیرnum
را فراهم میکند. - صفت دیدهپذیری
public
، دسترسی به این تابع را از داخل و خارج قرارداد (contract) امکانپذیر میسازد. - در بدنه تابع، مقدار
_num
به متغیرnum
تخصیص داده میشود که منجر به بهروزرسانی مقدار آن خواهد شد.
3. Get Functions:
- این تابع امکان خواندن مقدار فعلی متغیر
num
را فراهم میکند. - تابع
get
با دید عمومی (public) و فقط خواندنی (view) تعریف شده است. - با فراخوانی تابع
get
، مقدار فعلیnum
بازیابی میشود.
نتیجهگیری
درک نحوه خواندن و نوشتن State Variable در زبان برنامهنویسی Solidity، برای توسعه قراردادهای هوشمند قوی و کارآمد، امری ضروری است. State variables امکان ذخیرهسازی دائمی دادهها را بر روی بلاکچین فراهم میکنند. اگرچه نوشتن در یک State variables، شامل هزینه تراکنش میشود، اما خواندن از آن رایگان است. با استفاده کارآمد از State variables، میتوانید دادهها را ذخیره و بازیابی کنید که این امر، توسعه برنامههای غیرمتمرکز قدرتمند را تسهیل میکند. Solidity مجموعهای گسترده از امکانات و قابلیتها را برای ساخت سیستمهای امن و شفاف بر روی پلتفرمهای مختلف بلاکچین ارائه میدهد. برای دستیابی به پتانسیل کامل توسعه قراردادهای هوشمند، به کاوش و آزمایش خود ادامه دهید!
Happy coding!
این مقاله،از مقالات ترجمه شده از سالیدیتی آکادمی است برای خواندن مقاله اصلی میتوانید به لینک زیر🔸 مراجعه کنید:
🔸 شما میتوانید برای خواندن ادامه مقالات ترجمه شده این آکادمی به سالیدیتی آکادمی مراجعه کنید.
مطلبی دیگر از این انتشارات
روز ۱۱/۱۰۰ - #100DaysOfSolidity تسلط بر حلقه های For و While در Solidity
مطلبی دیگر از این انتشارات
روز ۴/۱۰۰ - متغیرهای Solidity: بررسی متغیرهای Local، State، و Global
مطلبی دیگر از این انتشارات
روز ۱۲/۱۰۰ - کاوش در قدرت mapping در سالیدیتی