Base.t.sol
  1  pragma solidity >=0.6.0;
  2  
  3  import "truffle/Assert.sol";
  4  //import "truffle/DeployedAddresses.sol";
  5  
  6  import "../../../contracts/deployment/Deployer.sol";
  7  import "../../../contracts/finance/credit/CreditProvider.sol";
  8  import "../../../contracts/finance/OptionsExchange.sol";
  9  import "../../../contracts/finance/collateral/CollateralManager.sol";
 10  import "../../../contracts/finance/credit/CreditToken.sol";
 11  import "../../../contracts/finance/UnderlyingVault.sol";
 12  import "../../../contracts/finance/Incentivized.sol";
 13  import "../../../contracts/finance/OptionTokenFactory.sol";
 14  import "../../../contracts/finance/PendingExposureRouter.sol";
 15  
 16  import "../../../contracts/feeds/DEXFeedFactory.sol";
 17  import "../../../contracts/pools/LinearLiquidityPoolFactory.sol";
 18  import "../../../contracts/pools/LinearAnySlopeInterpolator.sol";
 19  
 20  import "../../../contracts/finance/credit/UnderlyingCreditProviderFactory.sol";
 21  import "../../../contracts/finance/credit/UnderlyingCreditTokenFactory.sol";
 22  import "../../../contracts/governance/ProtocolSettings.sol";
 23  import "../../../contracts/governance/ProposalsManager.sol";
 24  import "../../../contracts/governance/GovToken.sol";
 25  
 26  import "../../../contracts/governance/ProposalWrapper.sol";
 27  
 28  import "../../common/actors/ShareHolder.t.sol";
 29  import "../../common/mock/ERC20Mock.t.sol";
 30  import "../../common/mock/EthFeedMock.t.sol";
 31  import "../../common/mock/TimeProviderMock.t.sol";
 32  import "../../common/mock/UniswapV2RouterMock.t.sol";
 33  import "../../common/samples/ChangeInterestRateProposal.t.sol";
 34  import "../../common/samples/TransferBalanceProposal.t.sol";
 35  
 36  contract Base {
 37      
 38      TimeProviderMock time;
 39      CreditProvider creditProvider;
 40      OptionsExchange exchange;
 41      ProtocolSettings settings;
 42      ProposalsManager manager;
 43      GovToken govToken;
 44      ERC20Mock erc20;
 45      
 46      ShareHolder alpha;
 47      ShareHolder beta;
 48      ShareHolder gama;
 49  
 50      ProposalWrapper.Quorum SIMPLE_MAJORITY = ProposalWrapper.Quorum.SIMPLE_MAJORITY;
 51      Deployer deployer;
 52  
 53      //function beforeEachDeploy() public {
 54      function setUp() public {
 55  
 56          deployer = new Deployer(address(this));
 57          deployer.setContractAddress("ProtocolSettings", address(new ProtocolSettings(true)));
 58          deployer.setContractAddress("TimeProvider", address(new TimeProviderMock()));
 59          deployer.setContractAddress("CreditProvider", address(new CreditProvider()));
 60          deployer.addAlias("CreditIssuer", "CreditProvider");
 61          deployer.setContractAddress("CreditToken", address(new CreditToken()));
 62          deployer.setContractAddress("ProposalsManager", address(new ProposalsManager()));
 63          deployer.setContractAddress("GovToken", address(new GovToken(address(0))));
 64          deployer.setContractAddress("CollateralManager", address(new CollateralManager()));
 65          deployer.setContractAddress("OptionsExchange", address(new OptionsExchange()));
 66          deployer.setContractAddress("OptionTokenFactory", address(new OptionTokenFactory()));
 67          deployer.setContractAddress("UnderlyingVault", address(new UnderlyingVault()));
 68          deployer.setContractAddress("Incentivized", address(new Incentivized()));
 69          deployer.setContractAddress("UnderlyingCreditProviderFactory", address(new UnderlyingCreditProviderFactory()));
 70          deployer.setContractAddress("UnderlyingCreditTokenFactory", address(new UnderlyingCreditTokenFactory()));
 71          deployer.setContractAddress("LinearLiquidityPoolFactory", address(new LinearLiquidityPoolFactory()));
 72          deployer.setContractAddress("DEXFeedFactory", address(new DEXFeedFactory()));
 73          deployer.setContractAddress("Interpolator", address(new LinearAnySlopeInterpolator()));
 74          deployer.setContractAddress("PendingExposureRouter", address(new PendingExposureRouter()));
 75          deployer.setContractAddress("UnderlyingToken", address(new ERC20Mock(18)), false);
 76          deployer.setContractAddress("UnderlyingFeed", address(new EthFeedMock()));
 77          deployer.setContractAddress("SwapRouter", address(new UniswapV2RouterMock()));
 78          deployer.setContractAddress("StablecoinA", address(new ERC20Mock(18)), false);
 79          deployer.deploy(address(this));
 80  
 81  
 82          time = TimeProviderMock(deployer.getContractAddress("TimeProvider"));
 83          creditProvider = CreditProvider(deployer.getContractAddress("CreditProvider"));
 84          exchange = OptionsExchange(deployer.getContractAddress("OptionsExchange"));
 85          settings = ProtocolSettings(deployer.getContractAddress("ProtocolSettings"));
 86          manager = ProposalsManager(deployer.getContractAddress("ProposalsManager"));
 87          govToken = GovToken(deployer.getContractAddress("GovToken"));
 88          erc20 = ERC20Mock(deployer.getContractAddress("StablecoinA"));
 89  
 90          erc20.reset();
 91          
 92          settings.setCirculatingSupply(1 ether);
 93          settings.setAllowedToken(address(erc20), 1, 1);
 94          govToken.setChildChainManager(address(this));
 95  
 96          alpha = new ShareHolder(address(settings), address(govToken), address(manager));
 97          beta = new ShareHolder(address(settings), address(govToken), address(manager));
 98          gama = new ShareHolder(address(settings), address(govToken), address(manager));
 99          
100          govToken.deposit(address(alpha), abi.encode(1 ether));
101          alpha.delegateTo(address(alpha));
102  
103          alpha.transfer(address(beta),  99 finney); //  9.9%
104          beta.delegateTo(address(beta));
105  
106          alpha.transfer(address(gama), 410 finney); // 41.0%
107          gama.delegateTo(address(gama));
108  
109          time.setTimeOffset(0);
110      }
111  
112      function depositTokens(address to, uint value) internal {
113          
114          erc20.issue(address(this), value);
115          erc20.approve(address(exchange), value);
116          exchange.depositTokens(to, address(erc20), value);
117      }
118  }