Add _initializableStorageSlot (#5337)
Co-authored-by: Arr00 <13561405+arr00@users.noreply.github.com>
This commit is contained in:
5
.changeset/fast-coats-try.md
Normal file
5
.changeset/fast-coats-try.md
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
'openzeppelin-solidity': minor
|
||||
---
|
||||
|
||||
`Initializable`: Add `_initializableStorageSlot` function that returns a pointer to the storage struct. The function allows customizing with a custom storage slot with an `override`.
|
||||
@ -216,13 +216,23 @@ abstract contract Initializable {
|
||||
return _getInitializableStorage()._initializing;
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Pointer to storage slot. Allows integrators to override it with a custom storage location.
|
||||
*
|
||||
* NOTE: Consider following the ERC-7201 formula to derive storage locations.
|
||||
*/
|
||||
function _initializableStorageSlot() internal pure virtual returns (bytes32) {
|
||||
return INITIALIZABLE_STORAGE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Returns a pointer to the storage namespace.
|
||||
*/
|
||||
// solhint-disable-next-line var-name-mixedcase
|
||||
function _getInitializableStorage() private pure returns (InitializableStorage storage $) {
|
||||
bytes32 slot = _initializableStorageSlot();
|
||||
assembly {
|
||||
$.slot := INITIALIZABLE_STORAGE
|
||||
$.slot := slot
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user