mirror of
https://github.com/Instadapp/yield-contract.git
synced 2024-07-29 21:47:29 +00:00
36 lines
1.2 KiB
Solidity
36 lines
1.2 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.6.8;
|
|
pragma experimental ABIEncoderV2;
|
|
|
|
import "@openzeppelin/contracts/proxy/Proxy.sol";
|
|
|
|
contract Flusher is Proxy {
|
|
/**
|
|
* @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 = bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1); // 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
|
|
|
|
/**
|
|
* @dev Returns the current implementation address.
|
|
*/
|
|
function _implementation() internal override view returns (address impl) {
|
|
bytes32 slot = _IMPLEMENTATION_SLOT;
|
|
// solhint-disable-next-line no-inline-assembly
|
|
assembly {
|
|
impl := sload(slot)
|
|
}
|
|
}
|
|
|
|
function setBasic(address newImplementation) public {
|
|
require(_implementation() == address(0), "_implementation-logic-already-set");
|
|
require(newImplementation == address(0), "newImplementation-not-vaild");
|
|
bytes32 slot = _IMPLEMENTATION_SLOT;
|
|
|
|
// solhint-disable-next-line no-inline-assembly
|
|
assembly {
|
|
sstore(slot, newImplementation)
|
|
}
|
|
}
|
|
}
|