Siblearn Academy siblearn academy

Write to Any Slot

ذخیره سازی جامد مانند آرایه ای به طول 2^256 است.

ترتیب اعلان و نوع متغیرهای حالت تعیین می کند که از کدام شکاف ها استفاده خواهد کرد.

با این حال، با استفاده از اسمبلی، می توانید در هر شکافی بنویسید.


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

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;
    }
}

روی محیط توسعه ی Remix امتحان بکنید

  • Slot.sol
  • بازگشت به لیست