Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 32 additions & 22 deletions contracts/open-zeppelin/InitializableAdminUpgradeabilityProxy.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,41 @@ import "./InitializableUpgradeabilityProxy.sol";

/**
* @title InitializableAdminUpgradeabilityProxy
* @dev Extends from BaseAdminUpgradeabilityProxy with an initializer for
* initializing the implementation, admin, and init data.
* @dev Extends BaseAdminUpgradeabilityProxy with an initializer for
* setting the implementation, admin, and initialization data.
*/
contract InitializableAdminUpgradeabilityProxy is BaseAdminUpgradeabilityProxy, InitializableUpgradeabilityProxy {
/**
* Contract initializer.
* @param _logic address of the initial implementation.
contract InitializableAdminUpgradeabilityProxy is
BaseAdminUpgradeabilityProxy,
InitializableUpgradeabilityProxy
{
/**
* @notice Contract initializer.
* @param _logic Address of the initial implementation.
* @param _admin Address of the proxy administrator.
* @param _data Data to send as msg.data to the implementation to initialize the proxied contract.
* It should include the signature and the parameters of the function to be called, as described in
* https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.
* This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.
* It should include the signature and the parameters of the function to be called, as described in
* https://docs.soliditylang.org/en/v0.6.12/abi-spec.html#function-selector-and-argument-encoding.
* This parameter is optional; if no data is provided, the initialization call to the proxied contract will be skipped.
*/
function initialize(address _logic, address _admin, bytes memory _data) public payable {
require(_implementation() == address(0));
InitializableUpgradeabilityProxy.initialize(_logic, _data);
assert(ADMIN_SLOT == bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1));
_setAdmin(_admin);
}

/**
* @dev Only fall back when the sender is not the admin.
*/
function _willFallback() internal override(BaseAdminUpgradeabilityProxy, Proxy) {
BaseAdminUpgradeabilityProxy._willFallback();
}
function initialize(
address _logic,
address _admin,
bytes memory _data
) public payable {
require(_implementation() == address(0), "Already initialized");
InitializableUpgradeabilityProxy.initialize(_logic, _data);
// EIP-1967 admin slot check
assert(ADMIN_SLOT == bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1));
_setAdmin(_admin);
}

/**
* @dev Only fallback when the sender is not the admin.
*/
function _willFallback()
internal
override(BaseAdminUpgradeabilityProxy, Proxy)
{
BaseAdminUpgradeabilityProxy._willFallback();
}
}