پرش به محتوا
Home » چطور داده هایمان را در اسلات مورد نظر ذخیره کنیم؟

چطور داده هایمان را در اسلات مورد نظر ذخیره کنیم؟

فضای ذخیره سازی در سالیدیتی مثل یک آرایه به طول  2^256 است که هر اسلات آن میتواند 32 بایت داده را در خود جای دهد. ترتیب پر شدن اسلات ها به طور پیش فرض توسط ترتیب تعریف شدن متغیر ها و نوعشان تعیین می شود. اما با استفاده از اسمبلی می توانیم در هر اسلاتی که خواستیم داده ذخیره کنیم.

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

library StorageSlot {
    // Wrap address in a struct so that it can be passed around as a storage pointer
    struct AddressSlot {
        address value;
    }

    function getAddressSlot(
        bytes32 slot
    ) internal pure returns (AddressSlot storage pointer) {
        assembly {
            // Get the pointer to AddressSlot stored at slot
            pointer.slot := slot
        }
    }
}

contract TestSlot {
    bytes32 public constant TEST_SLOT = keccak256("TEST_SLOT");

    function write(address _addr) external {
        StorageSlot.AddressSlot storage data = StorageSlot.getAddressSlot(TEST_SLOT);
        data.value = _addr;
    }

    function get() external view returns (address) {
        StorageSlot.AddressSlot storage data = StorageSlot.getAddressSlot(TEST_SLOT);
        return data.value;
    }
}

منبع

برچسب‌ها:

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *