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 }