/ contracts / deployment / ManagedContract.sol
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  }