در زبان برنامه‌ نویسی سالیدیتی، تابع fallback (تابع پشتیبان) یک تابع ویژه است که می‌تواند در شرایط خاص به کار گرفته شود. تابع تابع fallback سالیدیتی به طورمعمول برای مدیریت درخواست‌های ورودی بدون مشخص کردن تابعی در قرارداد استفاده می‌شود.

ویژگی‌ های کلیدی تابع Fallback

  1. بدون نام و بدون پارامتر: تابع fallback هیچ نامی ندارد و هیچ پارامتر ورودی دریافت نمی‌کند.

  2. تعلق به نوع خاصی: تابع fallback می‌تواند برای دریافت و مدیریت اتر (ETH) ارسال شده به قرارداد یا برای مدیریت فراخوانی‌های توابعی که وجود ندارند استفاده شود.

  3. محدودیت‌ها:

    • تنها می‌تواند یک تابع در یک قرارداد وجود داشته باشد.
    • نمی‌تواند مقدار برگشتی داشته باشد و نمی‌تواند خود را فراخوانی کند.
    • نمی‌تواند از سایر توابع غیرهمزمان استفاده کند.

آموزش سالیدیتی

ساختار تابع Fallback

یک تابع fallback به شکل زیر تعریف می‌شود:

pragma solidity ^.8.;

contract MyContract {
    event Received(address indexed sender, uint amount);

    fallback() external payable {
        emit Received(msg.sender, msg.value);
    }
}

بررسی

  1. واردات اتر: این تابع در صورت ارسال اتر به قرارداد بدون اینکه تابع خاصی مشخص شده باشد، فراخوانی می‌شود. این امکان برای مدیریت تراکنش‌ها و دریافت اتر مفید است.

  2. مدیریت فراخوانی‌های نادرست: اگر کاربر سعی کند توابعی را که در قرارداد تعریف نشده‌اند، فراخوانی کند، تابع پشتیبان می‌تواند برای مدیریت این درخواست‌ها مورد استفاده قرار گیرد.

مثال کامل

در اینجا یک مثال کامل از قرارداد استفاده از تابع fallback ارائه می‌شود:

pragma solidity ^.8.;

contract SimpleWallet {
    address public owner;

    event Received(address indexed sender, uint amount);
    event FallbackCalled(bytes data);

    constructor() {
        owner = msg.sender;
    }

    // تابع fallback
    fallback() external payable {
        emit Received(msg.sender, msg.value);
        emit FallbackCalled(msg.data);
    }

    // تابع برای برداشت وجه
    function withdraw() public {
        require(msg.sender == owner, "Only the owner can withdraw");
        payable(owner).transfer(address(this).balance);
    }
}

نتیجه‌ گیری

تابع fallback سالیدیتی برای ایجاد رفتار انعطاف‌ پذیر در قراردادهای هوشمند است. استفاده صحیح از آن می‌تواند به توسعه‌ دهندگان کمک کند تا تراکنش‌ ها و فراخوانی‌ های نادرست را مدیریت کنند و عملکرد قرارداد را بهبود بخشند.