mirror of
				https://github.com/Instadapp/yield-contract.git
				synced 2024-07-29 21:47:29 +00:00 
			
		
		
		
	Moved flusher.sol functions to logic.sol
This commit is contained in:
		
							parent
							
								
									2ed1eacc4d
								
							
						
					
					
						commit
						9d63e4212e
					
				|  | @ -0,0 +1,74 @@ | ||||||
|  | // SPDX-License-Identifier: MIT | ||||||
|  | pragma solidity ^0.6.8; | ||||||
|  | pragma experimental ABIEncoderV2; | ||||||
|  | 
 | ||||||
|  | interface DeployerInterface { | ||||||
|  |   function signer(address) external view returns (bool);  | ||||||
|  |   function master() external view returns (address);  | ||||||
|  |   function isConnector(address[] calldata) external view returns (bool); | ||||||
|  |   function implementationLogic(address) external view returns (bool); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | contract Setup { | ||||||
|  | 
 | ||||||
|  |     function deployer() public pure returns (DeployerInterface) { | ||||||
|  |         return DeployerInterface(address(0)); // TODO - change. | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     string constant public name = "Flusher-v1"; | ||||||
|  | 
 | ||||||
|  |     function spell(address _target, bytes memory _data) internal { | ||||||
|  |         require(_target != address(0), "target-invalid"); | ||||||
|  |         assembly { | ||||||
|  |         let succeeded := delegatecall(gas(), _target, add(_data, 0x20), mload(_data), 0, 0) | ||||||
|  |         switch iszero(succeeded) | ||||||
|  |             case 1 { | ||||||
|  |                 let size := returndatasize() | ||||||
|  |                 returndatacopy(0x00, 0x00, size) | ||||||
|  |                 revert(0x00, size) | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | contract UpgradeableProxy is Setup { | ||||||
|  |     event Upgraded(address indexed implementation); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * @dev Storage slot with the address of the current implementation. | ||||||
|  |      * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1. | ||||||
|  |      */ | ||||||
|  |     bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; | ||||||
|  | 
 | ||||||
|  |     function changeImplementation(address newImplementation) public { | ||||||
|  |         require(deployer().master() == msg.sender, "not-master"); | ||||||
|  |         require(deployer().implementationLogic(newImplementation), "not-whitelisted-logic"); | ||||||
|  |         // require(Address.isContract(newImplementation), "UpgradeableProxy: new implementation is not a contract"); | ||||||
|  | 
 | ||||||
|  |         bytes32 slot = _IMPLEMENTATION_SLOT; | ||||||
|  | 
 | ||||||
|  |         // solhint-disable-next-line no-inline-assembly | ||||||
|  |         assembly { | ||||||
|  |             sstore(slot, newImplementation) | ||||||
|  |         } | ||||||
|  |         emit Upgraded(newImplementation); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | contract Flusher is UpgradeableProxy { | ||||||
|  |   event LogCast(address indexed sender, uint value); | ||||||
|  | 
 | ||||||
|  |   function cast(address[] calldata _targets, bytes[] calldata _datas) external payable { | ||||||
|  |     require(deployer().signer(msg.sender), "not-signer"); | ||||||
|  |     require(_targets.length == _datas.length , "invalid-array-length"); | ||||||
|  |     require(deployer().isConnector(_targets), "not-connector"); | ||||||
|  |     for (uint i = 0; i < _targets.length; i++) { | ||||||
|  |         spell(_targets[i], _datas[i]); | ||||||
|  |     } | ||||||
|  |     emit LogCast(msg.sender, msg.value); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   receive() external payable {} | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Thrilok Kumar
						Thrilok Kumar