ذخیره سازی جامد مانند آرایه ای به طول 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;
}
}