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 }