AI & ML; Python Programmer And Interested In Decentralized World
روز 6/100 - درک immutability در سالیدیتی: ساخت قراردادهای هوشمند قابل اعتماد
سلام. #100DaysOfSolidity ادامه دارد! در این قسمت، به سراغ مبحث immutability یا "تغییرناپذیری" در زبان سالیدیتی میرویم. تغییرناپذیری، عنصری کلیدی در برنامهنویسی است که ثبات و عدم تغییر برخی متغیرها را پس از مقداردهی اولیه، تضمین میکند. زبان سالیدیتی که برای توسعهٔ قراردادهای هوشمند در بلاکچین اتریوم به کار میرود، امکان تعریف متغیرهای Immutable را فراهم میکند.
در این مقاله، مفهوم "عدم تغییرپذیری" و اهمیت آن در ساخت قراردادهای هوشمند قابل اعتماد و امن را بررسی خواهیم کرد.
مفهوم immutabilityدر زبان سالیدیتی
در زبان برنامهنویسی سالیدیتی، متغیرهای غیرقابل تغییر مشابه constants در سایر زبانهای برنامهنویسی هستند. بعد از اینکه به این متغیرها مقداری اختصاص داده شد، دیگر نمیتوان آنها را تغییر داد یا مقادیر جدیدی به آنها اختصاص داد. این ویژگی، متغیرهای غیرقابل تغییر را برای ذخیرهسازی مقادیری که باید در طول اجرای قرارداد هوشمند ثابت بمانند، بسیار با ارزش میکند. متغیرهای غیرقابل تغییر باعث افزایش امنیت و اعتماد در اجرای برنامههای غیرمتمرکز میشوند.
برای درک بهتر ماهیت تغییرناپذیری در سالیدیتی، بیایید نگاهی دقیق تر به یک قرارداد هوشمند نمونه داشته باشیم.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Immutable {
address public immutable MY_ADDRESS;
uint public immutable MY_UINT;
constructor(uint _myUint) {
MY_ADDRESS = msg.sender;
MY_UINT = _myUint;
}
}
در قسمت کد بالا، ما یک قرارداد به نام "Immutable" داریم که شامل دو متغیر غیر قابل تغییر است: "MY_ADDRESS" و "MY_UINT". کلید واژه "Immutable" تضمین می کند که پس از اختصاص مقادیر به این متغیرها، نمی توان آنها را تغییر داد. در constructor ، به "MY_ADDRESS" مقدار "msg.sender" اختصاص داده شده است که نشان دهنده آدرس مستقر کننده قرارداد است. از طرف دیگر، "MY_UINT" با مقدار پارامتر constructor "_myUint" مقداردهی اولیه می شود.
مزایا و کاربردهای immutability:
۱. امنیت و اعتماد: تغییرناپذیری امنیت قراردادهای هوشمند را با اطمینان از ثابت ماندن متغیرهای حیاتی، مانند آدرسهای قرارداد یا پارامترهای پیکربندی، افزایش میدهد. این امر از آسیبپذیریهای بالقوهای که ممکن است در اثر تغییرات غیرمجاز ایجاد شود، جلوگیری میکند.
۲. پیشبینیپذیری: متغیرهای تغییرناپذیر، پیشبینیپذیری را در اجرای قرارداد تضمین میکنند. از آنجایی که مقادیر آنها ثابت باقی میمانند، توسعهدهندگان و کاربران میتوانند به این متغیرها تکیه کنند که همیشه در طول عمر قرارداد مقادیر یکسانی داشته باشند. این پیشبینیپذیری برای ساخت برنامههای غیرمتمرکز قدرتمند و قابل اعتماد ضروری است.
۳. بهینهسازی: Solidity قادر است قراردادهایی که از متغیرهای Immutable استفاده میکنند را بهینهسازی کند. کامپایلر قادر است ارجاعات به این متغیرها را با مقادیر واقعی آنها جایگزین کند، که نیاز به دسترسی به ذخیرهسازی در طول اجرای قرارداد را از بین میبرد.
نمونه کد: ساخت قرارداد Immutable
برای درک بهتر مفهوم تغییر ناپذیری، اجازه دهید یک نمونه قرارداد را بررسی کنیم:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract ImmutableExample {
uint public immutable MY_CONSTANT;
constructor(uint _value) {
MY_CONSTANT = _value;
}
function updateConstant(uint _newValue) external {
// This will result in a compilation error
MY_CONSTANT = _newValue;
}
}
در این تکه کد، ما یک قرارداد به نام "ImmutableExample" داریم که یک متغیر Immutable به نام "MY_CONSTANT" را تعریف می کند. constructor ، "_value" منتقل شده را به "MY_CONSTANT" اختصاص می دهد. با این حال، اگر سعی کنیم با استفاده از تابع "updateConstant" مقدار "MY_CONSTANT" را تغییر دهیم، یک خطای کامپایل رخ خواهد داد. این به این دلیل است که متغیرهای Immutable پس از مقدار دهی اولیه قابل تغییر نیستند، که باعث حفظ یکپارچگی و اعتماد به قرارداد می شود.
نتیجهگیری:
خاصیت تغییرناپذیری ویژگی قدرتمندی در سالیدیتی است که تضمین میکند دادههای اصلی قابل دستکاری نباشند و در نتیجه امنیت و اعتماد به اجرای قراردادهای هوشمند را فراهم میکند. با تعریف دادهها به عنوان تغییرناپذیر، توسعهدهندگان میتوانند برنامههای کاربردی غیرمتمرکز قوی و قابل اعتمادی را ایجاد کنند. درک و استفاده از تغییرناپذیری برای ساخت قراردادهای هوشمند قابل اعتماد و امن بر روی بلاکچین اتریوم ضروری است.
به پایان این مقاله رسیدید! تبریک میگم! امیدوارم مطالب این مقاله برای شما آموزنده و مفید بوده باشه. در ادامه سفر برنامهنویسی با زبان سالیدیتی، تغییرناپذیری رو به عنوان یک ویژگی قدرتمند در نظر بگیرید و از اون برای ساخت برنامههای غیرمتمرکز قوی و قابل توجه استفاده کنید. منتظر محتوای جذابتر در سری #100DaysOfSolidity باشید!
🔸 این مقاله،از مقالات ترجمه شده از سالیدیتی آکادمی است برای خواندن مقاله اصلی میتوانید به لینک زیر مراجعه کنید:
مطلبی دیگر از این انتشارات
روز ۷/۱۰۰ - بررسی خواندن و نوشتن State variable در سالیدیتی
مطلبی دیگر از این انتشارات
روز ۸/۱۰۰ - رمزگشایی از جادوی اتر و وی در سالیدیتی: توانمندسازی توسعه اتریوم
مطلبی دیگر از این انتشارات
روز ۱۲/۱۰۰ - کاوش در قدرت mapping در سالیدیتی