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 }