ManagedContract.sol
1 pragma solidity ^0.6.0; 2 pragma experimental ABIEncoderV2; 3 4 import "./Deployer.sol"; 5 // *** IMPORTANT *** 6 // "onwer" storage variable must be set to a GnosisSafe multisig wallet address: 7 // - https://github.com/gnosis/safe-contracts/blob/main/contracts/GnosisSafe.sol 8 9 contract ManagedContract { 10 11 // ATTENTION: storage variable alignment 12 address internal owner; 13 address private pendingOwner; 14 address private implementation; 15 uint private locked; // 1 = Initialized; 2 = Non upgradable 16 // -------------------------------------------------------- 17 18 function initializeAndLock(Deployer deployer) public { 19 20 require(locked == 0, "initialization locked"); 21 locked = 1; 22 initialize(deployer); 23 } 24 25 function initialize(Deployer deployer) virtual internal { 26 27 } 28 29 function getOwner() public view returns (address) { 30 31 return owner; 32 } 33 34 function getImplementation() public view returns (address) { 35 36 return implementation; 37 } 38 }