StorageSlot
*Library for reading and writing primitive types to specific storage slots.
Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
This library helps with reading and writing to such slots without the need for inline assembly.
The functions in this library return Slot structs that contain a value
member that can be used to read or write.
Example usage to set ERC1967 implementation slot:
contract ERC1967 {
bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
function _getImplementation() internal view returns (address) {
return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
}
function _setImplementation(address newImplementation) internal {
require(newImplementation.code.length > 0);
StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
}
}
```*
## Functions
### getAddressSlot
*Returns an `AddressSlot` with member `value` located at `slot`.*
```solidity
function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r);
getBooleanSlot
Returns an BooleanSlot
with member value
located at slot
.
function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r);
getBytes32Slot
Returns an Bytes32Slot
with member value
located at slot
.
function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r);
getUint256Slot
Returns an Uint256Slot
with member value
located at slot
.
function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r);
getStringSlot
Returns an StringSlot
with member value
located at slot
.
function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r);
getStringSlot
Returns an StringSlot
representation of the string storage pointer store
.
function getStringSlot(string storage store) internal pure returns (StringSlot storage r);
getBytesSlot
Returns an BytesSlot
with member value
located at slot
.
function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r);
getBytesSlot
Returns an BytesSlot
representation of the bytes storage pointer store
.
function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r);
Structs
AddressSlot
struct AddressSlot {
address value;
}
BooleanSlot
struct BooleanSlot {
bool value;
}
Bytes32Slot
struct Bytes32Slot {
bytes32 value;
}
Uint256Slot
struct Uint256Slot {
uint256 value;
}
StringSlot
struct StringSlot {
string value;
}
BytesSlot
struct BytesSlot {
bytes value;
}