/ test / finance / CreditToken / TestCreditTokenInterest.t.sol
TestCreditTokenInterest.t.sol
 1  pragma solidity >=0.6.0;
 2  
 3  import "truffle/Assert.sol";
 4  import "../../../contracts/utils/MoreMath.sol";
 5  import "../../common/utils/MoreAssert.t.sol";
 6  import "./Base.t.sol";
 7  
 8  contract TestCreditTokenInterestRate is Base {
 9  
10      function testInterestRateAtDifferentDates() public {
11  
12          (uint ir, uint base,) = settings.getCreditInterestRate();
13          
14          issuer.issueTokens(address(alpha), 100 finney);
15          Assert.equal(creditToken.balanceOf(address(alpha)), 100 finney, "alpha credit t0");
16          Assert.equal(creditToken.balanceOf(address(beta)), 0 finney, "beta credit t0");
17          
18          time.setTimeOffset(365 days);
19          alpha.transfer(address(beta), 50 finney);
20          uint v1 = MoreMath.powAndMultiply(ir, base, 365 days / timeBase, 100 finney) - 50 finney;
21          Assert.equal(creditToken.balanceOf(address(alpha)), v1, "alpha credit t1");
22          Assert.equal(creditToken.balanceOf(address(beta)), 50 finney, "beta credit t1");
23  
24          time.setTimeOffset(730 days);
25          uint v2 = MoreMath.powAndMultiply(ir, base, 365 days / timeBase, v1);
26          uint v3 = MoreMath.powAndMultiply(ir, base, 365 days / timeBase, 50 finney);
27          Assert.equal(creditToken.balanceOf(address(alpha)), v2, "alpha credit t2");
28          Assert.equal(creditToken.balanceOf(address(beta)), v3, "beta credit t2");
29  
30          uint total = MoreMath.powAndMultiply(ir, base, 730 days / timeBase, 100 finney);
31          MoreAssert.equal(total, v2 + v3, cBase, "total credit");
32      }
33  
34      function testVaryingInterestRate() public {
35          
36          issuer.issueTokens(address(alpha), 100 finney);
37          Assert.equal(creditToken.balanceOf(address(alpha)), 100 finney, "alpha credit t0");
38  
39          settings.setCreditInterestRate( // 5% per day
40              10020349912970346474243981869599,
41              10000000000000000000000000000000
42          );
43          
44          time.setTimeOffset(1 days);
45          MoreAssert.equal(creditToken.balanceOf(address(alpha)), 105 finney, cBase, "alpha credit t1");
46  
47          settings.setCreditInterestRate( // 9.5238% per day
48              10037976837541235831695851518435,
49              10000000000000000000000000000000
50          );
51  
52          time.setTimeOffset(2 days);
53          MoreAssert.equal(creditToken.balanceOf(address(alpha)), 115 finney, cBase, "alpha credit t2");
54  
55          settings.setCreditInterestRate( // 73.913% each two days
56              10115955725553215120662198270526,
57              10000000000000000000000000000000
58          );
59  
60          time.setTimeOffset(4 days);
61          MoreAssert.equal(creditToken.balanceOf(address(alpha)), 200 finney, cBase, "alpha credit t3");
62      }
63  }