خواندن و نوشتن یک متغیر وضعیت (State Variable)

برای نوشتن یا به‌روزرسانی یک متغیر وضعیت در سالیدیتی، نیاز به ارسال تراکنش دارین.
از طرفی، برای خواندن مقادیر متغیرهای وضعیت می‌تونین بدون پرداخت هزینه تراکنش، مقدار رو دریافت کنین.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;

contract SimpleStorage {
    // متغیر وضعیت برای ذخیره یک عدد
    uint256 public num;

    // برای نوشتن یا به‌روزرسانی مقدار متغیر وضعیت باید تراکنش ارسال کنین.
    function set(uint256 _num) public {
        num = _num;
    }

    // می‌تونین بدون ارسال تراکنش، مقدار متغیر وضعیت رو بخونید.
    function get() public view returns (uint256) {
        return num;
    }
}

توضیحات بیشتر: #
  • نوشتن به یک متغیر وضعیت:
    برای تغییر یا به‌روزرسانی مقدار متغیرهای وضعیت (که روی بلاکچین ذخیره می‌شن)، باید تراکنش ارسال کنین. این کار هزینه گس (Gas) داره.
    در کد بالا، تابع set() این کار رو انجام می‌ده. وقتی این تابع اجرا می‌شه، مقدار num به عدد جدید _num تغییر می‌کنه و برای انجام این تغییر باید تراکنش ارسال بشه.
  • خواندن از یک متغیر وضعیت:
    بر خلاف نوشتن، برای خواندن مقدار متغیرهای وضعیت هیچ هزینه‌ای به شما تعلق نمی‌گیره.
    تابع get() برای این کار طراحی شده که مقدار num رو فقط از روی بلاکچین خوانده و برمی‌گردونه.
چرا این موضوع مهمه؟ #
  • هزینه گس:
    در بلاکچین، هر عملی که باعث تغییر وضعیت می‌شه (مثل نوشتن در متغیرهای وضعیت) هزینه تراکنش و گس داره. ولی برای خواندن اطلاعات، هیچ هزینه‌ای نمی‌پردازید.
  • این ویژگی‌ها می‌تونه در طراحی قراردادهای هوشمند خیلی مفید باشه، چرا که بعضی عملیات ممکنه نیاز به هزینه گس داشته باشن و بعضی دیگه فقط نیاز به خواندن اطلاعات.