@gearbox-protocol/sdk 1.16.6 → 1.16.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { BigNumber, providers } from "ethers";
|
|
2
|
-
import {
|
|
3
|
-
import { CloseCreditAccountEvent, DecreaseBorrowedAmountEvent, IncreaseBorrowedAmountEvent, LiquidateCreditAccountEvent, OpenCreditAccountEvent, TransferAccountEvent } from "../types/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol/ICreditFacade";
|
|
2
|
+
import { TypedEvent } from "../types/common";
|
|
4
3
|
import { Reward } from "./poolRewards";
|
|
5
4
|
import { RangedValue } from "./range";
|
|
6
5
|
export declare class CreditRewards {
|
|
7
|
-
static computeReward(
|
|
8
|
-
static computeAllRewards(
|
|
6
|
+
static computeReward(creditManager: string, address: string, provider: providers.Provider, toBlock?: number): Promise<BigNumber>;
|
|
7
|
+
static computeAllRewards(creditManager: string, provider: providers.Provider, toBlock?: number): Promise<Array<Reward>>;
|
|
8
|
+
static parseEvents(events: Array<TypedEvent>, rewardPerBlock: RangedValue, toBlock: number): Array<Reward>;
|
|
9
9
|
static computeRewardInt(toBlock: number, balance: RangedValue, totalSupply: RangedValue, rewardPerBlock: RangedValue): BigNumber;
|
|
10
|
-
protected static query(creditFacade: string, provider: providers.Provider, toBlock: number): Promise<Array<
|
|
10
|
+
protected static query(creditFacade: string, provider: providers.Provider, toBlock: number): Promise<Array<TypedEvent>>;
|
|
11
11
|
protected static getRewardsRange(creditManager: string): RangedValue;
|
|
12
12
|
}
|
|
@@ -53,12 +53,12 @@ var range_1 = require("./range");
|
|
|
53
53
|
var CreditRewards = /** @class */ (function () {
|
|
54
54
|
function CreditRewards() {
|
|
55
55
|
}
|
|
56
|
-
CreditRewards.computeReward = function (
|
|
56
|
+
CreditRewards.computeReward = function (creditManager, address, provider, toBlock) {
|
|
57
57
|
return __awaiter(this, void 0, void 0, function () {
|
|
58
58
|
var rewards, rewardToAddress;
|
|
59
59
|
return __generator(this, function (_a) {
|
|
60
60
|
switch (_a.label) {
|
|
61
|
-
case 0: return [4 /*yield*/, CreditRewards.computeAllRewards(
|
|
61
|
+
case 0: return [4 /*yield*/, CreditRewards.computeAllRewards(creditManager, provider, toBlock)];
|
|
62
62
|
case 1:
|
|
63
63
|
rewards = _a.sent();
|
|
64
64
|
rewardToAddress = rewards.filter(function (r) { return r.address === address.toLowerCase(); });
|
|
@@ -67,92 +67,115 @@ var CreditRewards = /** @class */ (function () {
|
|
|
67
67
|
});
|
|
68
68
|
});
|
|
69
69
|
};
|
|
70
|
-
CreditRewards.computeAllRewards = function (
|
|
70
|
+
CreditRewards.computeAllRewards = function (creditManager, provider, toBlock) {
|
|
71
71
|
return __awaiter(this, void 0, void 0, function () {
|
|
72
|
-
var toBlockQuery, _a,
|
|
73
|
-
return __generator(this, function (
|
|
74
|
-
switch (
|
|
72
|
+
var toBlockQuery, _a, cm, cc, _b, _c, creditFacadesEvents, events, _i, creditFacadesEvents_1, cfe, query, rewardPerBlock;
|
|
73
|
+
return __generator(this, function (_d) {
|
|
74
|
+
switch (_d.label) {
|
|
75
75
|
case 0:
|
|
76
76
|
_a = toBlock;
|
|
77
77
|
if (_a) return [3 /*break*/, 2];
|
|
78
78
|
return [4 /*yield*/, provider.getBlockNumber()];
|
|
79
79
|
case 1:
|
|
80
|
-
_a = (
|
|
81
|
-
|
|
80
|
+
_a = (_d.sent());
|
|
81
|
+
_d.label = 2;
|
|
82
82
|
case 2:
|
|
83
83
|
toBlockQuery = _a;
|
|
84
|
-
|
|
84
|
+
cm = types_1.ICreditManagerV2__factory.connect(creditManager, provider);
|
|
85
|
+
_c = (_b = types_1.ICreditConfigurator__factory).connect;
|
|
86
|
+
return [4 /*yield*/, cm.creditConfigurator()];
|
|
85
87
|
case 3:
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
case cfi.getEventTopic("CloseCreditAccount"):
|
|
108
|
-
case cfi.getEventTopic("LiquidateCreditAccount"):
|
|
109
|
-
case cfi.getEventTopic("LiquidateExpiredCreditAccount"): {
|
|
110
|
-
// We need { borrower} only so, we can use any event to get it from args
|
|
111
|
-
var borrower = event
|
|
112
|
-
.args.borrower;
|
|
113
|
-
totalBorrowed = totalBorrowed.sub(borrowed[borrower]);
|
|
114
|
-
totalBorrowedRange.addValue(e.blockNumber, totalBorrowed);
|
|
115
|
-
borrowed[borrower] = ethers_1.BigNumber.from(0);
|
|
116
|
-
borrowedRange[borrower].addValue(e.blockNumber, ethers_1.BigNumber.from(0));
|
|
117
|
-
break;
|
|
118
|
-
}
|
|
119
|
-
case cfi.getEventTopic("IncreaseBorrowedAmount"): {
|
|
120
|
-
var _b = event.args, borrower = _b.borrower, amount = _b.amount;
|
|
121
|
-
totalBorrowed = totalBorrowed.add(amount);
|
|
122
|
-
totalBorrowedRange.addValue(e.blockNumber, totalBorrowed);
|
|
123
|
-
borrowed[borrower] = borrowed[borrower].add(amount);
|
|
124
|
-
borrowedRange[borrower].addValue(e.blockNumber, borrowed[borrower]);
|
|
125
|
-
break;
|
|
126
|
-
}
|
|
127
|
-
case cfi.getEventTopic("DecreaseBorrowedAmount"): {
|
|
128
|
-
var _c = event.args, borrower = _c.borrower, amount = _c.amount;
|
|
129
|
-
totalBorrowed = totalBorrowed.sub(amount);
|
|
130
|
-
totalBorrowedRange.addValue(e.blockNumber, totalBorrowed);
|
|
131
|
-
borrowed[borrower] = borrowed[borrower].sub(amount);
|
|
132
|
-
borrowedRange[borrower].addValue(e.blockNumber, borrowed[borrower]);
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
case cfi.getEventTopic("TransferAccount"): {
|
|
136
|
-
var _d = event.args, newOwner = _d.newOwner, oldOwner = _d.oldOwner;
|
|
137
|
-
borrowed[newOwner] = borrowed[oldOwner];
|
|
138
|
-
if (!borrowed[newOwner]) {
|
|
139
|
-
borrowedRange[newOwner] = new range_1.RangedValue();
|
|
140
|
-
}
|
|
141
|
-
borrowed[oldOwner] = ethers_1.BigNumber.from(0);
|
|
142
|
-
borrowedRange[newOwner].addValue(e.blockNumber, borrowed[newOwner]);
|
|
143
|
-
borrowedRange[oldOwner].addValue(e.blockNumber, ethers_1.BigNumber.from(0));
|
|
144
|
-
break;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
return [2 /*return*/, Object.keys(borrowed).map(function (address) { return ({
|
|
149
|
-
address: address.toLowerCase(),
|
|
150
|
-
amount: CreditRewards.computeRewardInt(toBlockQuery, borrowedRange[address], totalBorrowedRange, rewardPerBlock),
|
|
151
|
-
}); })];
|
|
88
|
+
cc = _c.apply(_b, [_d.sent(), provider]);
|
|
89
|
+
return [4 /*yield*/, cc.queryFilter(cc.filters.CreditFacadeUpgraded())];
|
|
90
|
+
case 4:
|
|
91
|
+
creditFacadesEvents = _d.sent();
|
|
92
|
+
events = [];
|
|
93
|
+
_i = 0, creditFacadesEvents_1 = creditFacadesEvents;
|
|
94
|
+
_d.label = 5;
|
|
95
|
+
case 5:
|
|
96
|
+
if (!(_i < creditFacadesEvents_1.length)) return [3 /*break*/, 8];
|
|
97
|
+
cfe = creditFacadesEvents_1[_i];
|
|
98
|
+
return [4 /*yield*/, CreditRewards.query(cfe.args.newCreditFacade, provider, toBlockQuery)];
|
|
99
|
+
case 6:
|
|
100
|
+
query = _d.sent();
|
|
101
|
+
events.push.apply(events, query);
|
|
102
|
+
_d.label = 7;
|
|
103
|
+
case 7:
|
|
104
|
+
_i++;
|
|
105
|
+
return [3 /*break*/, 5];
|
|
106
|
+
case 8:
|
|
107
|
+
rewardPerBlock = CreditRewards.getRewardsRange(creditManager.toLowerCase());
|
|
108
|
+
return [2 /*return*/, CreditRewards.parseEvents(events, rewardPerBlock, toBlockQuery)];
|
|
152
109
|
}
|
|
153
110
|
});
|
|
154
111
|
});
|
|
155
112
|
};
|
|
113
|
+
CreditRewards.parseEvents = function (events, rewardPerBlock, toBlock) {
|
|
114
|
+
var borrowedRange = {};
|
|
115
|
+
var totalBorrowedRange = new range_1.RangedValue();
|
|
116
|
+
var borrowed = {};
|
|
117
|
+
var totalBorrowed = ethers_1.BigNumber.from(0);
|
|
118
|
+
var cfi = types_1.ICreditFacade__factory.createInterface();
|
|
119
|
+
events.forEach(function (e) {
|
|
120
|
+
var event = cfi.parseLog(e);
|
|
121
|
+
switch (e.topics[0]) {
|
|
122
|
+
case cfi.getEventTopic("OpenCreditAccount"): {
|
|
123
|
+
var _a = event.args, onBehalfOf = _a.onBehalfOf, borrowAmount = _a.borrowAmount;
|
|
124
|
+
totalBorrowed = totalBorrowed.add(borrowAmount);
|
|
125
|
+
totalBorrowedRange.addValue(e.blockNumber, totalBorrowed);
|
|
126
|
+
borrowed[onBehalfOf] = borrowAmount;
|
|
127
|
+
if (!borrowedRange[onBehalfOf]) {
|
|
128
|
+
borrowedRange[onBehalfOf] = new range_1.RangedValue();
|
|
129
|
+
}
|
|
130
|
+
borrowedRange[onBehalfOf].addValue(e.blockNumber, borrowAmount);
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
case cfi.getEventTopic("CloseCreditAccount"):
|
|
134
|
+
case cfi.getEventTopic("LiquidateCreditAccount"):
|
|
135
|
+
case cfi.getEventTopic("LiquidateExpiredCreditAccount"): {
|
|
136
|
+
// We need { borrower} only so, we can use any event to get it from args
|
|
137
|
+
var borrower = event
|
|
138
|
+
.args.borrower;
|
|
139
|
+
totalBorrowed = totalBorrowed.sub(borrowed[borrower]);
|
|
140
|
+
totalBorrowedRange.addValue(e.blockNumber, totalBorrowed);
|
|
141
|
+
borrowed[borrower] = ethers_1.BigNumber.from(0);
|
|
142
|
+
borrowedRange[borrower].addValue(e.blockNumber, ethers_1.BigNumber.from(0));
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
case cfi.getEventTopic("IncreaseBorrowedAmount"): {
|
|
146
|
+
var _b = event.args, borrower = _b.borrower, amount = _b.amount;
|
|
147
|
+
totalBorrowed = totalBorrowed.add(amount);
|
|
148
|
+
totalBorrowedRange.addValue(e.blockNumber, totalBorrowed);
|
|
149
|
+
borrowed[borrower] = borrowed[borrower].add(amount);
|
|
150
|
+
borrowedRange[borrower].addValue(e.blockNumber, borrowed[borrower]);
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
case cfi.getEventTopic("DecreaseBorrowedAmount"): {
|
|
154
|
+
var _c = event.args, borrower = _c.borrower, amount = _c.amount;
|
|
155
|
+
totalBorrowed = totalBorrowed.sub(amount);
|
|
156
|
+
totalBorrowedRange.addValue(e.blockNumber, totalBorrowed);
|
|
157
|
+
borrowed[borrower] = borrowed[borrower].sub(amount);
|
|
158
|
+
borrowedRange[borrower].addValue(e.blockNumber, borrowed[borrower]);
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
case cfi.getEventTopic("TransferAccount"): {
|
|
162
|
+
var _d = event.args, newOwner = _d.newOwner, oldOwner = _d.oldOwner;
|
|
163
|
+
borrowed[newOwner] = borrowed[oldOwner];
|
|
164
|
+
if (!borrowedRange[newOwner]) {
|
|
165
|
+
borrowedRange[newOwner] = new range_1.RangedValue();
|
|
166
|
+
}
|
|
167
|
+
borrowed[oldOwner] = ethers_1.BigNumber.from(0);
|
|
168
|
+
borrowedRange[newOwner].addValue(e.blockNumber, borrowed[newOwner]);
|
|
169
|
+
borrowedRange[oldOwner].addValue(e.blockNumber, ethers_1.BigNumber.from(0));
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
return Object.keys(borrowed).map(function (address) { return ({
|
|
175
|
+
address: address.toLowerCase(),
|
|
176
|
+
amount: CreditRewards.computeRewardInt(toBlock, borrowedRange[address], totalBorrowedRange, rewardPerBlock),
|
|
177
|
+
}); });
|
|
178
|
+
};
|
|
156
179
|
CreditRewards.computeRewardInt = function (toBlock, balance, totalSupply, rewardPerBlock) {
|
|
157
180
|
var keys = Array.from(new Set(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], balance.keys, true), totalSupply.keys, true), rewardPerBlock.keys, true), [
|
|
158
181
|
toBlock,
|
|
@@ -2,56 +2,134 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
var chai_1 = require("chai");
|
|
4
4
|
var ethers_1 = require("ethers");
|
|
5
|
-
var
|
|
5
|
+
var constants_1 = require("../core/constants");
|
|
6
|
+
var creditRewards_1 = require("./creditRewards");
|
|
7
|
+
var creditRewardsHelper_spec_1 = require("./creditRewardsHelper.spec");
|
|
6
8
|
var range_1 = require("./range");
|
|
7
9
|
describe("CreditRewards test", function () {
|
|
8
|
-
it("
|
|
9
|
-
var
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
// Balances: 0 100 ---------------- 200 ------------------ 0
|
|
24
|
-
// Total supply 100 200 -- 250 400 100
|
|
25
|
-
// Rewards: 20
|
|
26
|
-
// 10 ------ 8 10 -------------------- 0
|
|
27
|
-
// Total: 10 * 500 + 8*500 + 10 * 1000 = 19000
|
|
28
|
-
var result = poolRewards_1.PoolRewards.computeRewardInt(4000, balances, totalSupply, rewards);
|
|
29
|
-
(0, chai_1.expect)(result.toNumber()).to.be.eq(19000);
|
|
10
|
+
it("one acccount only", function () {
|
|
11
|
+
var cfacade = constants_1.DUMB_ADDRESS;
|
|
12
|
+
var user = constants_1.DUMB_ADDRESS2.toLowerCase();
|
|
13
|
+
var events = [
|
|
14
|
+
(0, creditRewardsHelper_spec_1.openCreditAccountEvent)(cfacade, 1000, user, ethers_1.BigNumber.from(100)),
|
|
15
|
+
];
|
|
16
|
+
var rewardPerBlock = new range_1.RangedValue();
|
|
17
|
+
rewardPerBlock.addValue(1000, ethers_1.BigNumber.from(1000));
|
|
18
|
+
var r = creditRewards_1.CreditRewards.parseEvents(events, rewardPerBlock, 2000);
|
|
19
|
+
(0, chai_1.expect)(r).to.be.eql([
|
|
20
|
+
{
|
|
21
|
+
address: user,
|
|
22
|
+
amount: ethers_1.BigNumber.from(1000).mul(1000),
|
|
23
|
+
},
|
|
24
|
+
]);
|
|
30
25
|
});
|
|
31
|
-
it("
|
|
32
|
-
var
|
|
33
|
-
var
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
26
|
+
it("one acccoun only with closure", function () {
|
|
27
|
+
var cfacade = constants_1.DUMB_ADDRESS;
|
|
28
|
+
var user = constants_1.DUMB_ADDRESS2.toLowerCase();
|
|
29
|
+
var events = [
|
|
30
|
+
(0, creditRewardsHelper_spec_1.openCreditAccountEvent)(cfacade, 1000, user, ethers_1.BigNumber.from(100)),
|
|
31
|
+
(0, creditRewardsHelper_spec_1.closeCreditAccountEvent)(cfacade, 1500, user),
|
|
32
|
+
];
|
|
33
|
+
var rewardPerBlock = new range_1.RangedValue();
|
|
34
|
+
rewardPerBlock.addValue(1000, ethers_1.BigNumber.from(1000));
|
|
35
|
+
var r = creditRewards_1.CreditRewards.parseEvents(events, rewardPerBlock, 2000);
|
|
36
|
+
(0, chai_1.expect)(r).to.be.eql([
|
|
37
|
+
{
|
|
38
|
+
address: user,
|
|
39
|
+
amount: ethers_1.BigNumber.from(1000).mul(500),
|
|
40
|
+
},
|
|
41
|
+
]);
|
|
42
|
+
});
|
|
43
|
+
it("two accounts with one liquidation", function () {
|
|
44
|
+
var cfacade = constants_1.DUMB_ADDRESS;
|
|
45
|
+
var user = constants_1.DUMB_ADDRESS2.toLowerCase();
|
|
46
|
+
var user2 = constants_1.DUMB_ADDRESS3.toLowerCase();
|
|
47
|
+
var events = [
|
|
48
|
+
(0, creditRewardsHelper_spec_1.openCreditAccountEvent)(cfacade, 1000, user, ethers_1.BigNumber.from(100)),
|
|
49
|
+
(0, creditRewardsHelper_spec_1.liquidateCreditAccountEvent)(cfacade, 1500, user),
|
|
50
|
+
(0, creditRewardsHelper_spec_1.openCreditAccountEvent)(cfacade, 1500, user2, ethers_1.BigNumber.from(200)),
|
|
51
|
+
];
|
|
52
|
+
var rewardPerBlock = new range_1.RangedValue();
|
|
53
|
+
rewardPerBlock.addValue(1000, ethers_1.BigNumber.from(1000));
|
|
54
|
+
var r = creditRewards_1.CreditRewards.parseEvents(events, rewardPerBlock, 2000);
|
|
55
|
+
(0, chai_1.expect)(r).to.be.eql([
|
|
56
|
+
{
|
|
57
|
+
address: user,
|
|
58
|
+
amount: ethers_1.BigNumber.from(1000).mul(500),
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
address: user2,
|
|
62
|
+
amount: ethers_1.BigNumber.from(1000).mul(500),
|
|
63
|
+
},
|
|
64
|
+
]);
|
|
65
|
+
});
|
|
66
|
+
it("two accounts with increase borrowed amount", function () {
|
|
67
|
+
var cfacade = constants_1.DUMB_ADDRESS;
|
|
68
|
+
var user = constants_1.DUMB_ADDRESS2.toLowerCase();
|
|
69
|
+
var user2 = constants_1.DUMB_ADDRESS3.toLowerCase();
|
|
70
|
+
var events = [
|
|
71
|
+
(0, creditRewardsHelper_spec_1.openCreditAccountEvent)(cfacade, 1000, user, ethers_1.BigNumber.from(100)),
|
|
72
|
+
(0, creditRewardsHelper_spec_1.openCreditAccountEvent)(cfacade, 1000, user2, ethers_1.BigNumber.from(100)),
|
|
73
|
+
(0, creditRewardsHelper_spec_1.increaseBorrowedAmountEvent)(cfacade, 1500, user2, ethers_1.BigNumber.from(200)),
|
|
74
|
+
];
|
|
75
|
+
var rewardPerBlock = new range_1.RangedValue();
|
|
76
|
+
rewardPerBlock.addValue(1000, ethers_1.BigNumber.from(1000));
|
|
77
|
+
var r = creditRewards_1.CreditRewards.parseEvents(events, rewardPerBlock, 2000);
|
|
78
|
+
(0, chai_1.expect)(r).to.be.eql([
|
|
79
|
+
{
|
|
80
|
+
address: user,
|
|
81
|
+
amount: ethers_1.BigNumber.from(500).mul(500).add(ethers_1.BigNumber.from(250).mul(500)),
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
address: user2,
|
|
85
|
+
amount: ethers_1.BigNumber.from(500).mul(500).add(ethers_1.BigNumber.from(750).mul(500)),
|
|
86
|
+
},
|
|
87
|
+
]);
|
|
88
|
+
});
|
|
89
|
+
it("two accounts with decrease borrowed amount", function () {
|
|
90
|
+
var cfacade = constants_1.DUMB_ADDRESS;
|
|
91
|
+
var user = constants_1.DUMB_ADDRESS2.toLowerCase();
|
|
92
|
+
var user2 = constants_1.DUMB_ADDRESS3.toLowerCase();
|
|
93
|
+
var events = [
|
|
94
|
+
(0, creditRewardsHelper_spec_1.openCreditAccountEvent)(cfacade, 1000, user, ethers_1.BigNumber.from(200)),
|
|
95
|
+
(0, creditRewardsHelper_spec_1.openCreditAccountEvent)(cfacade, 1000, user2, ethers_1.BigNumber.from(200)),
|
|
96
|
+
(0, creditRewardsHelper_spec_1.decreaseBorrowedAmountEvent)(cfacade, 1500, user, ethers_1.BigNumber.from(100)),
|
|
97
|
+
(0, creditRewardsHelper_spec_1.increaseBorrowedAmountEvent)(cfacade, 1500, user2, ethers_1.BigNumber.from(100)),
|
|
98
|
+
];
|
|
99
|
+
var rewardPerBlock = new range_1.RangedValue();
|
|
100
|
+
rewardPerBlock.addValue(1000, ethers_1.BigNumber.from(1000));
|
|
101
|
+
var r = creditRewards_1.CreditRewards.parseEvents(events, rewardPerBlock, 2000);
|
|
102
|
+
(0, chai_1.expect)(r).to.be.eql([
|
|
103
|
+
{
|
|
104
|
+
address: user,
|
|
105
|
+
amount: ethers_1.BigNumber.from(500).mul(500).add(ethers_1.BigNumber.from(250).mul(500)),
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
address: user2,
|
|
109
|
+
amount: ethers_1.BigNumber.from(500).mul(500).add(ethers_1.BigNumber.from(750).mul(500)),
|
|
110
|
+
},
|
|
111
|
+
]);
|
|
112
|
+
});
|
|
113
|
+
it("transfer works correctly ", function () {
|
|
114
|
+
var cfacade = constants_1.DUMB_ADDRESS;
|
|
115
|
+
var user = constants_1.DUMB_ADDRESS2.toLowerCase();
|
|
116
|
+
var user2 = constants_1.DUMB_ADDRESS3.toLowerCase();
|
|
117
|
+
var events = [
|
|
118
|
+
(0, creditRewardsHelper_spec_1.openCreditAccountEvent)(cfacade, 1000, user, ethers_1.BigNumber.from(200)),
|
|
119
|
+
(0, creditRewardsHelper_spec_1.transferAccountEvent)(cfacade, 1500, user, user2),
|
|
120
|
+
];
|
|
121
|
+
var rewardPerBlock = new range_1.RangedValue();
|
|
122
|
+
rewardPerBlock.addValue(1000, ethers_1.BigNumber.from(1000));
|
|
123
|
+
var r = creditRewards_1.CreditRewards.parseEvents(events, rewardPerBlock, 2000);
|
|
124
|
+
(0, chai_1.expect)(r).to.be.eql([
|
|
125
|
+
{
|
|
126
|
+
address: user,
|
|
127
|
+
amount: ethers_1.BigNumber.from(500).mul(1000),
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
address: user2,
|
|
131
|
+
amount: ethers_1.BigNumber.from(500).mul(1000),
|
|
132
|
+
},
|
|
133
|
+
]);
|
|
56
134
|
});
|
|
57
135
|
});
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { BigNumber } from "ethers";
|
|
2
|
+
export declare const openCreditAccountEvent: (address: string, blockNumber: number, onBehalf: string, borrowAmount: BigNumber) => {
|
|
3
|
+
blockHash: string;
|
|
4
|
+
transactionIndex: number;
|
|
5
|
+
removed: boolean;
|
|
6
|
+
transactionHash: string;
|
|
7
|
+
logIndex: number;
|
|
8
|
+
blockNumber: number;
|
|
9
|
+
address: string;
|
|
10
|
+
data: string;
|
|
11
|
+
topics: string[];
|
|
12
|
+
};
|
|
13
|
+
export declare const closeCreditAccountEvent: (address: string, blockNumber: number, borrower: string) => {
|
|
14
|
+
blockHash: string;
|
|
15
|
+
transactionIndex: number;
|
|
16
|
+
removed: boolean;
|
|
17
|
+
transactionHash: string;
|
|
18
|
+
logIndex: number;
|
|
19
|
+
blockNumber: number;
|
|
20
|
+
address: string;
|
|
21
|
+
data: string;
|
|
22
|
+
topics: string[];
|
|
23
|
+
};
|
|
24
|
+
export declare const liquidateCreditAccountEvent: (address: string, blockNumber: number, borrower: string, expired?: boolean) => {
|
|
25
|
+
blockHash: string;
|
|
26
|
+
transactionIndex: number;
|
|
27
|
+
removed: boolean;
|
|
28
|
+
transactionHash: string;
|
|
29
|
+
logIndex: number;
|
|
30
|
+
blockNumber: number;
|
|
31
|
+
address: string;
|
|
32
|
+
data: string;
|
|
33
|
+
topics: string[];
|
|
34
|
+
};
|
|
35
|
+
export declare const increaseBorrowedAmountEvent: (address: string, blockNumber: number, borrower: string, amount: BigNumber) => {
|
|
36
|
+
blockHash: string;
|
|
37
|
+
transactionIndex: number;
|
|
38
|
+
removed: boolean;
|
|
39
|
+
transactionHash: string;
|
|
40
|
+
logIndex: number;
|
|
41
|
+
blockNumber: number;
|
|
42
|
+
address: string;
|
|
43
|
+
data: string;
|
|
44
|
+
topics: string[];
|
|
45
|
+
};
|
|
46
|
+
export declare const decreaseBorrowedAmountEvent: (address: string, blockNumber: number, borrower: string, amount: BigNumber) => {
|
|
47
|
+
blockHash: string;
|
|
48
|
+
transactionIndex: number;
|
|
49
|
+
removed: boolean;
|
|
50
|
+
transactionHash: string;
|
|
51
|
+
logIndex: number;
|
|
52
|
+
blockNumber: number;
|
|
53
|
+
address: string;
|
|
54
|
+
data: string;
|
|
55
|
+
topics: string[];
|
|
56
|
+
};
|
|
57
|
+
export declare const transferAccountEvent: (address: string, blockNumber: number, oldOwner: string, newOwner: string) => {
|
|
58
|
+
blockHash: string;
|
|
59
|
+
transactionIndex: number;
|
|
60
|
+
removed: boolean;
|
|
61
|
+
transactionHash: string;
|
|
62
|
+
logIndex: number;
|
|
63
|
+
blockNumber: number;
|
|
64
|
+
address: string;
|
|
65
|
+
data: string;
|
|
66
|
+
topics: string[];
|
|
67
|
+
};
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.transferAccountEvent = exports.decreaseBorrowedAmountEvent = exports.increaseBorrowedAmountEvent = exports.liquidateCreditAccountEvent = exports.closeCreditAccountEvent = exports.openCreditAccountEvent = void 0;
|
|
15
|
+
var chai_1 = require("chai");
|
|
16
|
+
var ethers_1 = require("ethers");
|
|
17
|
+
var contractsRegister_1 = require("../contracts/contractsRegister");
|
|
18
|
+
var constants_1 = require("../core/constants");
|
|
19
|
+
var types_1 = require("../types");
|
|
20
|
+
var cfi = types_1.ICreditFacade__factory.createInterface();
|
|
21
|
+
var bnToU256 = function (bn) {
|
|
22
|
+
var hexValue = bn.toHexString().replaceAll("0x", "");
|
|
23
|
+
return "".concat("0".repeat(64 - hexValue.length)).concat(hexValue);
|
|
24
|
+
};
|
|
25
|
+
var addrToU256 = function (addr) {
|
|
26
|
+
return "0x000000000000000000000000".concat(addr.replaceAll("0x", ""));
|
|
27
|
+
};
|
|
28
|
+
var commonEventFields = {
|
|
29
|
+
blockHash: "0xb77353a688104b25b14a3caf018b48d601f67fd08b748206b97930a90cee45c9",
|
|
30
|
+
transactionIndex: 49,
|
|
31
|
+
removed: false,
|
|
32
|
+
transactionHash: "0x03f85b59b3641f863ac687e7c09e38777d42c5640ae0a74cc62f5667c74109d4",
|
|
33
|
+
logIndex: 114,
|
|
34
|
+
};
|
|
35
|
+
var openCreditAccountEvent = function (address, blockNumber, onBehalf, borrowAmount) {
|
|
36
|
+
var data = "0x".concat(bnToU256(borrowAmount)).concat(bnToU256(ethers_1.BigNumber.from(0)));
|
|
37
|
+
return __assign({ blockNumber: blockNumber, address: address, data: data, topics: [
|
|
38
|
+
cfi.getEventTopic("OpenCreditAccount"),
|
|
39
|
+
addrToU256(onBehalf),
|
|
40
|
+
addrToU256(constants_1.DUMB_ADDRESS),
|
|
41
|
+
] }, commonEventFields);
|
|
42
|
+
};
|
|
43
|
+
exports.openCreditAccountEvent = openCreditAccountEvent;
|
|
44
|
+
var closeCreditAccountEvent = function (address, blockNumber, borrower) {
|
|
45
|
+
return __assign({ blockNumber: blockNumber, address: address, data: "0x", topics: [
|
|
46
|
+
cfi.getEventTopic("CloseCreditAccount"),
|
|
47
|
+
addrToU256(borrower),
|
|
48
|
+
addrToU256(borrower),
|
|
49
|
+
] }, commonEventFields);
|
|
50
|
+
};
|
|
51
|
+
exports.closeCreditAccountEvent = closeCreditAccountEvent;
|
|
52
|
+
var liquidateCreditAccountEvent = function (address, blockNumber, borrower, expired) {
|
|
53
|
+
if (expired === void 0) { expired = false; }
|
|
54
|
+
return __assign({ blockNumber: blockNumber, address: address, data: "0x".concat(bnToU256(ethers_1.BigNumber.from(1))), topics: [
|
|
55
|
+
expired
|
|
56
|
+
? cfi.getEventTopic("LiquidateExpiredCreditAccount")
|
|
57
|
+
: cfi.getEventTopic("LiquidateCreditAccount"),
|
|
58
|
+
addrToU256(borrower),
|
|
59
|
+
addrToU256(constants_1.DUMB_ADDRESS2),
|
|
60
|
+
addrToU256(borrower),
|
|
61
|
+
] }, commonEventFields);
|
|
62
|
+
};
|
|
63
|
+
exports.liquidateCreditAccountEvent = liquidateCreditAccountEvent;
|
|
64
|
+
var increaseBorrowedAmountEvent = function (address, blockNumber, borrower, amount) {
|
|
65
|
+
return __assign({ blockNumber: blockNumber, address: address, data: "0x".concat(bnToU256(amount)), topics: [cfi.getEventTopic("IncreaseBorrowedAmount"), addrToU256(borrower)] }, commonEventFields);
|
|
66
|
+
};
|
|
67
|
+
exports.increaseBorrowedAmountEvent = increaseBorrowedAmountEvent;
|
|
68
|
+
var decreaseBorrowedAmountEvent = function (address, blockNumber, borrower, amount) {
|
|
69
|
+
return __assign({ blockNumber: blockNumber, address: address, data: "0x".concat(bnToU256(amount)), topics: [cfi.getEventTopic("DecreaseBorrowedAmount"), addrToU256(borrower)] }, commonEventFields);
|
|
70
|
+
};
|
|
71
|
+
exports.decreaseBorrowedAmountEvent = decreaseBorrowedAmountEvent;
|
|
72
|
+
var transferAccountEvent = function (address, blockNumber, oldOwner, newOwner) {
|
|
73
|
+
return __assign({ blockNumber: blockNumber, address: address, data: "0x", topics: [
|
|
74
|
+
cfi.getEventTopic("TransferAccount"),
|
|
75
|
+
addrToU256(oldOwner),
|
|
76
|
+
addrToU256(newOwner),
|
|
77
|
+
] }, commonEventFields);
|
|
78
|
+
};
|
|
79
|
+
exports.transferAccountEvent = transferAccountEvent;
|
|
80
|
+
describe("CreditRewards helper test", function () {
|
|
81
|
+
it("test events generated correctly", function () {
|
|
82
|
+
var e = (0, exports.openCreditAccountEvent)(contractsRegister_1.CREDIT_MANAGER_DAI_V2_MAINNET, 15902535, constants_1.DUMB_ADDRESS, ethers_1.BigNumber.from(1500));
|
|
83
|
+
var openEvent = cfi.parseLog(e);
|
|
84
|
+
(0, chai_1.expect)(openEvent.args.onBehalfOf).to.be.eq(constants_1.DUMB_ADDRESS);
|
|
85
|
+
(0, chai_1.expect)(openEvent.args.borrowAmount.toNumber()).to.be.eq(1500);
|
|
86
|
+
e = (0, exports.closeCreditAccountEvent)(contractsRegister_1.CREDIT_MANAGER_DAI_V2_MAINNET, 15902535, constants_1.DUMB_ADDRESS);
|
|
87
|
+
var closeEvent = cfi.parseLog(e);
|
|
88
|
+
(0, chai_1.expect)(closeEvent.args.borrower).to.be.eq(constants_1.DUMB_ADDRESS);
|
|
89
|
+
for (var _i = 0, _a = [false, true]; _i < _a.length; _i++) {
|
|
90
|
+
var expired = _a[_i];
|
|
91
|
+
e = (0, exports.liquidateCreditAccountEvent)(contractsRegister_1.CREDIT_MANAGER_DAI_V2_MAINNET, 15902535, constants_1.DUMB_ADDRESS, expired);
|
|
92
|
+
var liquidateEvent = cfi.parseLog(e);
|
|
93
|
+
(0, chai_1.expect)(liquidateEvent.args.borrower).to.be.eq(constants_1.DUMB_ADDRESS);
|
|
94
|
+
}
|
|
95
|
+
e = (0, exports.increaseBorrowedAmountEvent)(contractsRegister_1.CREDIT_MANAGER_DAI_V2_MAINNET, 15902535, constants_1.DUMB_ADDRESS, ethers_1.BigNumber.from(1898));
|
|
96
|
+
var increaseEvent = cfi.parseLog(e);
|
|
97
|
+
(0, chai_1.expect)(increaseEvent.args.borrower).to.be.eq(constants_1.DUMB_ADDRESS);
|
|
98
|
+
(0, chai_1.expect)(increaseEvent.args.amount.toNumber()).to.be.eq(1898);
|
|
99
|
+
e = (0, exports.decreaseBorrowedAmountEvent)(contractsRegister_1.CREDIT_MANAGER_DAI_V2_MAINNET, 15902535, constants_1.DUMB_ADDRESS, ethers_1.BigNumber.from(1898));
|
|
100
|
+
var decreaseEvent = cfi.parseLog(e);
|
|
101
|
+
(0, chai_1.expect)(decreaseEvent.args.borrower).to.be.eq(constants_1.DUMB_ADDRESS);
|
|
102
|
+
(0, chai_1.expect)(decreaseEvent.args.amount.toNumber()).to.be.eq(1898);
|
|
103
|
+
e = (0, exports.transferAccountEvent)(contractsRegister_1.CREDIT_MANAGER_DAI_V2_MAINNET, 15902535, constants_1.DUMB_ADDRESS, constants_1.DUMB_ADDRESS2);
|
|
104
|
+
var transferEvent = cfi.parseLog(e);
|
|
105
|
+
(0, chai_1.expect)(transferEvent.args.oldOwner).to.be.eq(constants_1.DUMB_ADDRESS);
|
|
106
|
+
(0, chai_1.expect)(transferEvent.args.newOwner).to.be.eq(constants_1.DUMB_ADDRESS2);
|
|
107
|
+
});
|
|
108
|
+
});
|