mirror of
https://github.com/vacp2p/linea-monorepo.git
synced 2026-01-09 07:28:05 -05:00
70 lines
2.6 KiB
Solidity
70 lines
2.6 KiB
Solidity
// SPDX-License-Identifier: BSL 1.1 - Copyright 2024 MetaLayer Labs Ltd.
|
|
pragma solidity ^0.8.0;
|
|
|
|
/// @title Storage
|
|
/// @notice Storage handles reading and writing to arbitary storage locations
|
|
library Storage {
|
|
/// @notice Returns an address stored in an arbitrary storage slot.
|
|
/// These storage slots decouple the storage layout from
|
|
/// solc's automation.
|
|
/// @param _slot The storage slot to retrieve the address from.
|
|
function getAddress(bytes32 _slot) internal view returns (address addr_) {
|
|
assembly {
|
|
addr_ := sload(_slot)
|
|
}
|
|
}
|
|
|
|
/// @notice Stores an address in an arbitrary storage slot, `_slot`.
|
|
/// @param _slot The storage slot to store the address in.
|
|
/// @param _address The protocol version to store
|
|
/// @dev WARNING! This function must be used cautiously, as it allows for overwriting addresses
|
|
/// in arbitrary storage slots.
|
|
function setAddress(bytes32 _slot, address _address) internal {
|
|
assembly {
|
|
sstore(_slot, _address)
|
|
}
|
|
}
|
|
|
|
/// @notice Returns a uint256 stored in an arbitrary storage slot.
|
|
/// These storage slots decouple the storage layout from
|
|
/// solc's automation.
|
|
/// @param _slot The storage slot to retrieve the address from.
|
|
function getUint(bytes32 _slot) internal view returns (uint256 value_) {
|
|
assembly {
|
|
value_ := sload(_slot)
|
|
}
|
|
}
|
|
|
|
/// @notice Stores a value in an arbitrary storage slot, `_slot`.
|
|
/// @param _slot The storage slot to store the address in.
|
|
/// @param _value The protocol version to store
|
|
/// @dev WARNING! This function must be used cautiously, as it allows for overwriting values
|
|
/// in arbitrary storage slots.
|
|
function setUint(bytes32 _slot, uint256 _value) internal {
|
|
assembly {
|
|
sstore(_slot, _value)
|
|
}
|
|
}
|
|
|
|
/// @notice Returns a bytes32 stored in an arbitrary storage slot.
|
|
/// These storage slots decouple the storage layout from
|
|
/// solc's automation.
|
|
/// @param _slot The storage slot to retrieve the address from.
|
|
function getBytes32(bytes32 _slot) internal view returns (bytes32 value_) {
|
|
assembly {
|
|
value_ := sload(_slot)
|
|
}
|
|
}
|
|
|
|
/// @notice Stores a bytes32 value in an arbitrary storage slot, `_slot`.
|
|
/// @param _slot The storage slot to store the address in.
|
|
/// @param _value The protocol version to store
|
|
/// @dev WARNING! This function must be used cautiously, as it allows for overwriting values
|
|
/// in arbitrary storage slots.
|
|
function setBytes32(bytes32 _slot, bytes32 _value) internal {
|
|
assembly {
|
|
sstore(_slot, _value)
|
|
}
|
|
}
|
|
}
|