-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtestCompound.js_old
222 lines (189 loc) · 8.11 KB
/
testCompound.js_old
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
const Comp = artifacts.require("Comp");
const CErc20 = artifacts.require("CErc20");
const CEther = artifacts.require("CEther");
const ERC20 = artifacts.require("ERC20");
const Comptroller = artifacts.require("ComptrollerScenarioG1");
var chai = require("chai");
var assert = require("chai").assert;
var expect = require("chai").expect;
const BN = require("bn.js");
// Enable and inject BN dependency
chai.use(require("chai-bn")(BN));
var compoundJSON = require("../compound-protocol/networks/development.json");
contract("Validate Compound Deployment", (accounts) => {
const ONE_TOKEN_18 = new BN(10).pow(new BN(18));
const ONE_MILLION_TOKENS_18 = new BN(10).pow(new BN(6)).mul(ONE_TOKEN_18);
it("should get COMP token balance", async () => {
const FIVE_MILLION_TOKENS_18 = ONE_MILLION_TOKENS_18.mul(new BN(5));
const COMP_addr = compoundJSON.Contracts.COMP;
const instance = await Comp.at(COMP_addr);
const totalSupply = await instance.totalSupply();
expect(FIVE_MILLION_TOKENS_18).to.bignumber.equal(totalSupply);
});
it("should print token balances:", async () => {
// BAT
const cBAT_addr = compoundJSON.Contracts.cBAT;
const cBAT = await CErc20.at(cBAT_addr);
const BAT_addr = compoundJSON.Contracts.BAT;
const BAT = await ERC20.at(BAT_addr);
// ZRX
const cZRX_addr = compoundJSON.Contracts.cZRX;
const cZRX = await CErc20.at(cZRX_addr);
const ZRX_addr = compoundJSON.Contracts.ZRX;
const ZRX = await ERC20.at(ZRX_addr);
console.log("ACCOUNT\tBAT\tcBAT\tZRX\tcZRX");
await Promise.all(
accounts.map(async (account) => {
const batBal = await BAT.balanceOf(account);
const cBATbal = await cBAT.balanceOf(account);
const zrxBal = await ZRX.balanceOf(account);
const cZRXbal = await cZRX.balanceOf(account);
console.log(
account +
"\t" +
batBal.toString() +
"\t" +
cBATbal.toString() +
"\t" +
zrxBal.toString() +
"\t" +
cZRXbal.toString()
);
})
);
});
it("should mint cBAT", async () => {
const minter = accounts[3];
const TEN_TOKENS_18 = new BN(10).mul(ONE_TOKEN_18);
const BAT_addr = compoundJSON.Contracts.BAT;
const BAT = await ERC20.at(BAT_addr);
const cBAT_addr = compoundJSON.Contracts.cBAT;
const cBAT = await CErc20.at(cBAT_addr);
await BAT.approve(cBAT_addr, TEN_TOKENS_18, { from: minter });
const beforeBalance = await cBAT.balanceOf(minter);
await cBAT.mint(TEN_TOKENS_18, { from: minter });
const afterBalance = await cBAT.balanceOf(minter);
expect(afterBalance).to.bignumber.gt(beforeBalance);
});
it("should mint cZRX", async () => {
const minter = accounts[2];
const TEN_TOKENS_18 = new BN(10).mul(ONE_TOKEN_18);
const ZRX_addr = compoundJSON.Contracts.ZRX;
const ZRX = await ERC20.at(ZRX_addr);
const cZRX_addr = compoundJSON.Contracts.cZRX;
const cZRX = await CErc20.at(cZRX_addr);
await ZRX.approve(cZRX_addr, TEN_TOKENS_18, { from: minter });
const beforeBalance = await cZRX.balanceOf(minter);
await cZRX.mint(TEN_TOKENS_18, { from: minter });
const afterBalance = await cZRX.balanceOf(minter);
expect(afterBalance).to.bignumber.gt(beforeBalance);
});
it("should mint cETH", async () => {
const minter = accounts[9];
const cETH_addr = compoundJSON.Contracts.cETH;
const cETH = await CEther.at(cETH_addr);
const beforeBalance = await cETH.balanceOf(minter);
await cETH.mint({ from: minter, value: web3.utils.toWei("1", "ether") });
const afterBalance = await cETH.balanceOf(minter);
expect(afterBalance).to.bignumber.gt(beforeBalance);
});
it("should borrow ZRX", async () => {
const borrower = accounts[3];
const ZRX_addr = compoundJSON.Contracts.ZRX;
const ZRX = await ERC20.at(ZRX_addr);
const cZRX_addr = compoundJSON.Contracts.cZRX;
const cZRX = await CErc20.at(cZRX_addr);
const beforeBalance = await ZRX.balanceOf(borrower);
await cZRX.borrow(ONE_TOKEN_18, { from: borrower });
const afterBalance = await ZRX.balanceOf(borrower);
expect(afterBalance).to.bignumber.gt(beforeBalance);
});
it("should borrow BAT", async () => {
const borrower = accounts[3];
const BAT_addr = compoundJSON.Contracts.BAT;
const BAT = await ERC20.at(BAT_addr);
const cBAT_addr = compoundJSON.Contracts.cBAT;
const cBAT = await CErc20.at(cBAT_addr);
const beforeBalance = await BAT.balanceOf(borrower);
await cBAT.borrow(ONE_TOKEN_18, { from: borrower });
const afterBalance = await BAT.balanceOf(borrower);
expect(afterBalance).to.bignumber.gt(beforeBalance);
});
it("should borrow ETH", async () => {
// depositing ZRX
const minter = accounts[0];
const THOUSAND_TOKENS_18 = new BN(1000).mul(ONE_TOKEN_18);
const ZRX_addr = compoundJSON.Contracts.ZRX;
const ZRX = await ERC20.at(ZRX_addr);
const cZRX_addr = compoundJSON.Contracts.cZRX;
const cZRX = await CErc20.at(cZRX_addr);
await ZRX.approve(cZRX_addr, THOUSAND_TOKENS_18, { from: minter });
let beforeBalance = await cZRX.balanceOf(minter);
await cZRX.mint(THOUSAND_TOKENS_18, { from: minter });
let afterBalance = await cZRX.balanceOf(minter);
expect(afterBalance).to.bignumber.gt(beforeBalance);
const beforeBalOfUnderlaying = await cZRX.balanceOfUnderlying.call(minter);
// console.log("cZRX balanceOfUnderlaying" + beforeBalOfUnderlaying);
// enter market
const comptrollerAddr = await cZRX.comptroller();
const comptroller = await Comptroller.at(comptrollerAddr);
await comptroller.enterMarkets([cZRX_addr], { from: minter });
// Borrowing ETH
const borrower = accounts[0];
const cETH_addr = compoundJSON.Contracts.cETH;
const cETH = await CEther.at(cETH_addr);
// console.log(await cETH.comptroller());
await comptroller.enterMarkets([cETH.address], { from: borrower });
console.log("factor", await comptroller.markets(cETH.address));
const cethBal = await cETH.balanceOf(borrower);
console.log(cethBal.toString());
beforeBalance = await web3.eth.getBalance(borrower);
await cETH.accrueInterest();
console.log("cETH balance", await web3.eth.getBalance(cETH.address));
await cETH.mint({
from: borrower,
value: web3.utils.toWei("10000000", "ether"),
});
console.log("cETH balance", await web3.eth.getBalance(cETH.address));
const borVal = web3.utils.toWei("1000000", "ether");
console.log(
"borrow ret val",
await cETH.borrow.call(borVal, { from: borrower })
);
await cETH.borrow(borVal, { from: borrower });
afterBalance = await web3.eth.getBalance(borrower);
const totalBorrow = await cETH.totalBorrowsCurrent.call();
expect(totalBorrow).to.bignumber.gte(borVal);
console.log(await cETH.totalReserves());
console.log(await cETH.reserveFactorMantissa());
console.log(await cZRX.reserveFactorMantissa());
let retVal = await cETH.accrueInterest.call();
console.log(retVal);
await cETH.accrueInterest();
console.log("borrow rate", await cETH.borrowRatePerBlock());
console.log(
await web3.eth.getBlockNumber(),
await cETH.totalReserves(),
await cETH.exchangeRateCurrent.call(),
await cETH.totalBorrowsCurrent.call()
);
const beforeTotalBorrowCurrent = await cETH.totalBorrowsCurrent.call();
await comptroller.fastForward(1000);
//await mineBlock()
retVal = await cETH.accrueInterest.call();
console.log(retVal);
await cETH.accrueInterest();
console.log("borrow rate", await cETH.borrowRatePerBlock());
console.log(
await web3.eth.getBlockNumber(),
await cETH.totalReserves(),
await cETH.exchangeRateCurrent.call(),
await cETH.totalBorrowsCurrent.call()
);
const afterTotalBorrowCurrent = await cETH.totalBorrowsCurrent.call();
expect(afterTotalBorrowCurrent).to.bignumber.gt(beforeTotalBorrowCurrent);
const afterBalOfUnderlaying = await cZRX.balanceOfUnderlying.call(minter);
expect(afterBalOfUnderlaying).to.bignumber.gt(beforeBalOfUnderlaying);
// console.log("cZRX balanceOfUnderlaying" + afterBalOfUnderlaying);
});
});