سیستم whitelist (فهرست سیاه) یکی از روش‌های موثر برای کنترل دسترسی به برخی قابلیت‌ها یا ویژگی‌ها در قراردادهای هوشمند است. با استفاده از این سیستم، تنها کاربران مشخص‌شده می‌توانند به توابع خاصی از قرارداد دسترسی داشته باشند. در اینجا، یک راهنمای ساده برای ایجاد یک سیستم whitelist در سالیدیتی ارائه می‌دهیم.

مراحل ایجاد یک سیستم Whitelist

1. تعریف قرارداد

برای شروع، یک قرارداد ساده تعریف می‌کنیم که شامل قابلیت‌ های اضافه کردن و حذف آدرس‌ها به/from whitelist و یک تابع برای دسترسی محدود به یک عملکرد خاص است.

2. نوشتن کد

در اینجا یک مثال از یک سیستم whitelist ساده شامل توابع اصلی آورده شده است:

// SPDX-License-Identifier: MIT
pragma solidity ^.8.;

contract Whitelist {
    address public owner;
    mapping(address => bool) public whitelistedAddresses;

    event AddressAdded(address indexed user);
    event AddressRemoved(address indexed user);

    constructor() {
        owner = msg.sender; // تنظیم مالک به آدرس ایجادکننده
    }

    // تابع برای اضافه کردن آدرس به whitelist
    function addAddressToWhitelist(address _user) public {
        require(msg.sender == owner, "فقط مالک می‌تواند آدرس‌ها را اضافه کند.");
        require(!whitelistedAddresses[_user], "این آدرس قبلاً در whitelist است.");
        whitelistedAddresses[_user] = true;
        emit AddressAdded(_user);
    }

    // تابع برای حذف آدرس از whitelist
    function removeAddressFromWhitelist(address _user) public {
        require(msg.sender == owner, "فقط مالک می‌تواند آدرس‌ها را حذف کند.");
        require(whitelistedAddresses[_user], "این آدرس در whitelist نیست.");
        whitelistedAddresses[_user] = false;
        emit AddressRemoved(_user);
    }

    // تابعی که فقط به آدرس‌های whitelisted اجازه دسترسی می‌دهد
    function restrictedFunction() public view {
        require(whitelistedAddresses[msg.sender], "شما مجاز به دسترسی به این تابع نیستید.");
        // عملکرد مورد نظر در اینجا
    }
}

آموزش سالیدیتی (5 پروژه عملی)

توضیحات عملکرد کد

  1. تعریف مالک: سازنده قرارداد مالک را به آدرس ایجادکننده تنظیم می‌کند.

  2. مأموریت‌ها (Mapping)whitelistedAddresses یک mapping برای ذخیره‌سازی وضعیت whitelist هر آدرس است.

  3. توابع مدیریت whitelist:

    • addAddressToWhitelist: این تابع برای اضافه کردن آدرس‌ها به whitelist استفاده می‌شود. فقط مالک می‌تواند این کار را انجام دهد.
    • removeAddressFromWhitelist: این تابع برای حذف آدرس‌ها از whitelist است و فقط مالک اجازه انجام آن را دارد.
  4. توابع محدود شده:

    • restrictedFunction: این تابع فقط به آدرس‌هایی که در whitelist هستند اجازه دسترسی می‌دهد و در غیر این صورت یک پیام خطا تولید می‌کند.

نتیجه‌ گیری

ایجاد یک سیستم whitelist در سالیدیتی به شما کمک می‌کند تا کنترل بهتری بر روی دسترسی‌ ها و قابلیت‌ های مختلف قرارداد داشته باشید. با استفاده از کد بالا، می‌توانید به راحتی آدرس‌های مورد نظر خود را مدیریت کنید و مطمئن شوید که تنها کاربران مجاز به توابع خاص دسترسی دارند.