mirror of
				https://github.com/Instadapp/aave-protocol-v2.git
				synced 2024-07-29 21:47:30 +00:00 
			
		
		
		
	Added immutable proxies
This commit is contained in:
		
							parent
							
								
									fc9b096f23
								
							
						
					
					
						commit
						d681a21272
					
				|  | @ -0,0 +1,80 @@ | |||
| // SPDX-License-Identifier: agpl-3.0 | ||||
| pragma solidity ^0.6.8; | ||||
| 
 | ||||
| import '../openzeppelin-upgradeability/BaseUpgradeabilityProxy.sol'; | ||||
| 
 | ||||
| /** | ||||
|  * @title BaseAdminUpgradeabilityProxy | ||||
|  * @dev This contract combines an upgradeability proxy with an authorization | ||||
|  * mechanism for administrative tasks. | ||||
|  * All external functions in this contract must be guarded by the | ||||
|  * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity | ||||
|  * feature proposal that would enable this to be done automatically. | ||||
|  */ | ||||
| contract BaseImmutableAdminUpgradeabilityProxy is BaseUpgradeabilityProxy { | ||||
| 
 | ||||
|   address immutable ADMIN; | ||||
| 
 | ||||
|   constructor(address admin) public { | ||||
|      ADMIN = admin;  | ||||
|   } | ||||
| 
 | ||||
|   modifier ifAdmin() { | ||||
|     if (msg.sender == ADMIN) { | ||||
|       _; | ||||
|     } else { | ||||
|       _fallback(); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * @return The address of the proxy admin. | ||||
|    */ | ||||
|   function admin() external ifAdmin returns (address) { | ||||
|     return ADMIN; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * @return The address of the implementation. | ||||
|    */ | ||||
|   function implementation() external ifAdmin returns (address) { | ||||
|     return _implementation(); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * @dev Upgrade the backing implementation of the proxy. | ||||
|    * Only the admin can call this function. | ||||
|    * @param newImplementation Address of the new implementation. | ||||
|    */ | ||||
|   function upgradeTo(address newImplementation) external ifAdmin { | ||||
|     _upgradeTo(newImplementation); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * @dev Upgrade the backing implementation of the proxy and call a function | ||||
|    * on the new implementation. | ||||
|    * This is useful to initialize the proxied contract. | ||||
|    * @param newImplementation Address of the new implementation. | ||||
|    * @param data Data to send as msg.data in the low level call. | ||||
|    * 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. | ||||
|    */ | ||||
|   function upgradeToAndCall(address newImplementation, bytes calldata data) | ||||
|     external | ||||
|     payable | ||||
|     ifAdmin | ||||
|   { | ||||
|     _upgradeTo(newImplementation); | ||||
|     (bool success, ) = newImplementation.delegatecall(data); | ||||
|     require(success); | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
|   /** | ||||
|    * @dev Only fall back when the sender is not the admin. | ||||
|    */ | ||||
|   function _willFallback() internal virtual override { | ||||
|     require(msg.sender != ADMIN, 'Cannot call fallback function from the proxy admin'); | ||||
|     super._willFallback(); | ||||
|   } | ||||
| } | ||||
|  | @ -0,0 +1,35 @@ | |||
| // SPDX-License-Identifier: agpl-3.0 | ||||
| pragma solidity ^0.6.8; | ||||
| 
 | ||||
| import './BaseImmutableAdminUpgradeabilityProxy.sol'; | ||||
| import '../openzeppelin-upgradeability/UpgradeabilityProxy.sol'; | ||||
| 
 | ||||
| /** | ||||
|  * @title AdminUpgradeabilityProxy | ||||
|  * @dev Extends from BaseAdminUpgradeabilityProxy with a constructor for | ||||
|  * initializing the implementation, admin, and init data. | ||||
|  */ | ||||
| contract ImmutableAdminUpgradeabilityProxy is BaseImmutableAdminUpgradeabilityProxy, UpgradeabilityProxy { | ||||
|   /** | ||||
|    * Contract constructor. | ||||
|    * @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. | ||||
|    */ | ||||
|   constructor( | ||||
|     address _logic, | ||||
|     address _admin, | ||||
|     bytes memory _data | ||||
|   ) public payable UpgradeabilityProxy(_logic, _data) BaseImmutableAdminUpgradeabilityProxy(_admin) { | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * @dev Only fall back when the sender is not the admin. | ||||
|    */ | ||||
|   function _willFallback() internal override(BaseImmutableAdminUpgradeabilityProxy, Proxy) { | ||||
|     BaseImmutableAdminUpgradeabilityProxy._willFallback(); | ||||
|   } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 The3D
						The3D