/ test / common / actors / ShareHolder.t.sol
ShareHolder.t.sol
 1  pragma solidity >=0.6.0;
 2  
 3  import "../../../contracts/governance/GovToken.sol";
 4  import "../../../contracts/governance/Proposal.sol";
 5  import "../../../contracts/governance/ProposalsManager.sol";
 6  import "../../../contracts/governance/ProposalWrapper.sol";
 7  import "../../../contracts/governance/ProtocolSettings.sol";
 8  
 9  contract ShareHolder {
10      
11      GovToken govToken;
12      ProposalsManager manager;
13      address payable addr;
14      ProtocolSettings settings;
15      
16      constructor(address _settings, address _govToken, address _mgr) public {
17          addr = address(uint160(address(this)));
18          govToken = GovToken(_govToken);
19          manager = ProposalsManager(_mgr);
20          settings = ProtocolSettings(_settings);
21      }
22      
23      fallback() external payable { }
24      receive() external payable { }
25  
26      function transfer(address to, uint amount) public {
27  
28          govToken.transfer(to, amount);
29      }
30  
31      function delegateTo(address to) public {
32  
33          govToken.delegateTo(to);
34      }
35      
36      function registerProposal(
37          Proposal p,
38          ProposalWrapper.Quorum quorum,
39          uint expiresAt
40      )
41          public
42          returns (uint id, ProposalWrapper wrapper)
43      {    
44          address w;
45          (id, w) = manager.registerProposal(address(settings), address(p), quorum, ProposalWrapper.VoteType.PROTOCOL_SETTINGS, expiresAt);
46          wrapper = ProposalWrapper(w);
47      }
48  
49      function castVote(ProposalWrapper w, bool support) public {
50  
51          require(address(w) != address(0), "invalid 'ProposalWrapper' contract");
52          w.castVote(support);
53      }
54  }