Skip to content

Commit be5c028

Browse files
committed
rebase and update with change in IFeeHandler interface
1 parent 04d5b37 commit be5c028

File tree

2 files changed

+79
-85
lines changed

2 files changed

+79
-85
lines changed

contracts/sol6/Dao/EmergencyFeeHandler.sol

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ contract EmergencyKyberFeeHandler is IKyberFeeHandler, PermissionGroupsNoModifie
2121
event HandleFeeFailed(address[] rebateWallets, uint256[] rebateBpsPerWallet, uint256 feeBRRWei);
2222

2323
event HandleFee(
24+
IERC20 indexed token,
2425
address indexed platformWallet,
2526
uint256 platformFeeWei,
2627
address[] rebateWallets,
@@ -57,26 +58,31 @@ contract EmergencyKyberFeeHandler is IKyberFeeHandler, PermissionGroupsNoModifie
5758
}
5859

5960
/// @dev handleFees function is called per trade on KyberNetwork. unless the trade is not involving any fees.
61+
/// @param token Token currency of fees
6062
/// @param rebateWallets a list of rebate wallets that will get rebate for this trade.
6163
/// @param rebateBpsPerWallet percentage of rebate for each wallet, out of total rebate.
6264
/// @param platformWallet Wallet address that will receive the platfrom fee.
63-
/// @param platformFeeWei Fee amount in wei the platfrom wallet is entitled to.
65+
/// @param platformFee Fee amount in wei the platfrom wallet is entitled to.
66+
/// @param networkFee Fee amount (in wei) to be allocated for BRR
6467
function handleFees(
68+
IERC20 token,
6569
address[] calldata rebateWallets,
6670
uint256[] calldata rebateBpsPerWallet,
6771
address platformWallet,
68-
uint256 platformFeeWei
72+
uint256 platformFee,
73+
uint256 networkFee
6974
) external payable override onlyKyberNetwork {
70-
uint256 feeBRRWei = msg.value.sub(platformFeeWei);
75+
require(token == ETH_TOKEN_ADDRESS, "token not eth");
76+
require(msg.value == platformFee.add(networkFee), "msg.value not equal to total fees");
7177

7278
// handle platform fee
7379
feePerPlatformWallet[platformWallet] = feePerPlatformWallet[platformWallet].add(
74-
platformFeeWei
80+
platformFee
7581
);
76-
totalPlatformFeeWei = totalPlatformFeeWei.add(platformFeeWei);
77-
emit HandleFee(platformWallet, platformFeeWei, rebateWallets, rebateBpsPerWallet, feeBRRWei);
82+
totalPlatformFeeWei = totalPlatformFeeWei.add(platformFee);
83+
emit HandleFee(ETH_TOKEN_ADDRESS, platformWallet, platformFee, rebateWallets, rebateBpsPerWallet, networkFee);
7884

79-
if (feeBRRWei == 0) {
85+
if (networkFee == 0) {
8086
return;
8187
}
8288

@@ -85,11 +91,11 @@ contract EmergencyKyberFeeHandler is IKyberFeeHandler, PermissionGroupsNoModifie
8591
"calculateAndRecordFeeData(address[],uint256[],uint256)",
8692
rebateWallets,
8793
rebateBpsPerWallet,
88-
feeBRRWei
94+
networkFee
8995
)
9096
);
9197
if (!success) {
92-
emit HandleFeeFailed(rebateWallets, rebateBpsPerWallet, feeBRRWei);
98+
emit HandleFeeFailed(rebateWallets, rebateBpsPerWallet, networkFee);
9399
}
94100
}
95101

@@ -137,7 +143,7 @@ contract EmergencyKyberFeeHandler is IKyberFeeHandler, PermissionGroupsNoModifie
137143
(bool success, ) = platformWallet.call{value: amountWei}("");
138144
require(success, "platform fee transfer failed");
139145

140-
emit PlatformFeePaid(platformWallet, amountWei);
146+
emit PlatformFeePaid(platformWallet, ETH_TOKEN_ADDRESS, amountWei);
141147
return amountWei;
142148
}
143149

@@ -159,7 +165,7 @@ contract EmergencyKyberFeeHandler is IKyberFeeHandler, PermissionGroupsNoModifie
159165
}
160166

161167
/// @dev claimStakerReward is implemented for IKyberFeeHandler
162-
function claimStakerReward(address, uint256, uint256) external override returns (uint256) {
168+
function claimStakerReward(address, uint256) external override returns (uint256) {
163169
revert("not implemented");
164170
}
165171

test/sol6/emergencyFeeHandler.js

Lines changed: 62 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,7 @@ const TestToken = artifacts.require('Token.sol')
88
const Helper = require('../helper.js')
99
const nwHelper = require('./networkHelper.js')
1010
const BN = web3.utils.BN
11-
const {
12-
BPS,
13-
precisionUnits,
14-
ethDecimals,
15-
ethAddress,
16-
zeroAddress,
17-
emptyHint,
18-
zeroBN,
19-
MAX_QTY,
20-
MAX_RATE
21-
} = require('../helper.js')
11+
const {BPS, precisionUnits, ethDecimals, ethAddress, zeroAddress, emptyHint, zeroBN, MAX_QTY, MAX_RATE} = require('../helper.js')
2212
const {expectEvent, expectRevert} = require('@openzeppelin/test-helpers')
2313

2414
let admin
@@ -45,10 +35,7 @@ contract('EmergencyKyberFeeHandler', function (accounts) {
4535

4636
describe('valid constructor params', async () => {
4737
it('test total BRR value should be BPS', async () => {
48-
await expectRevert(
49-
EmergencyKyberFeeHandler.new(admin, network, rewardBps, rebateBps, burnBps.add(new BN(1))),
50-
'Bad BRR values'
51-
)
38+
await expectRevert(EmergencyKyberFeeHandler.new(admin, network, rewardBps, rebateBps, burnBps.add(new BN(1))), 'Bad BRR values')
5239
})
5340

5441
it('test total BRR value should not be overflow', async () => {
@@ -84,100 +71,112 @@ contract('EmergencyKyberFeeHandler', function (accounts) {
8471
})
8572

8673
it('should handle Fee', async () => {
87-
let platformFeeWei = new BN(10).pow(new BN(17))
74+
let platformFee = new BN(10).pow(new BN(17))
8875
let fee = new BN(10).pow(new BN(18))
8976

9077
let initalState = await getFeeHanlerState(feeHandler, rebateWallets, platformWallet)
91-
let txResult = await feeHandler.handleFees(rebateWallets, rebateBpsPerWallet, platformWallet, platformFeeWei, {
92-
from: network,
93-
value: fee
94-
})
78+
let txResult = await feeHandler.handleFees(
79+
ethAddress,
80+
rebateWallets,
81+
rebateBpsPerWallet,
82+
platformWallet,
83+
platformFee,
84+
fee.sub(platformFee),
85+
{
86+
from: network,
87+
value: fee
88+
}
89+
)
9590

96-
let feeBrrWei = fee.sub(platformFeeWei)
91+
let feeBrrWei = fee.sub(platformFee)
9792
let rewardWei = feeBrrWei.mul(rewardBps).div(BPS)
9893

9994
await expectEvent(txResult, 'HandleFee', {
10095
platformWallet,
101-
platformFeeWei,
96+
platformFeeWei: platformFee,
10297
feeBRRWei: feeBrrWei
10398
})
10499

105100
await expectEvent(txResult, 'BRRFeeDistribution', {
106101
rewardWei: rewardWei
107102
})
108103

109-
await assertStateAfterHandlerFees(
110-
feeHandler,
111-
initalState,
112-
rebateWallets,
113-
rebateBpsPerWallet,
114-
platformWallet,
115-
platformFeeWei,
116-
fee
117-
)
104+
await assertStateAfterHandlerFees(feeHandler, initalState, rebateWallets, rebateBpsPerWallet, platformWallet, platformFee, fee)
118105
})
119106

120107
it('should handle Fee with only platform Fee', async () => {
121-
let platformFeeWei = new BN(10).pow(new BN(17))
108+
let platformFee = new BN(10).pow(new BN(17))
122109
let initalState = await getFeeHanlerState(feeHandler, rebateWallets, platformWallet)
123-
let txResult = await feeHandler.handleFees(rebateWallets, rebateBpsPerWallet, platformWallet, platformFeeWei, {
110+
let txResult = await feeHandler.handleFees(ethAddress, rebateWallets, rebateBpsPerWallet, platformWallet, platformFee, zeroBN, {
124111
from: network,
125-
value: platformFeeWei
112+
value: platformFee
126113
})
127114

128115
await expectEvent(txResult, 'HandleFee', {
129116
platformWallet,
130-
platformFeeWei,
131-
feeBRRWei: new BN(0),
117+
platformFeeWei: platformFee,
118+
feeBRRWei: new BN(0)
132119
})
133120
await assertStateAfterHandlerFees(
134121
feeHandler,
135122
initalState,
136123
rebateWallets,
137124
rebateBpsPerWallet,
138125
platformWallet,
139-
platformFeeWei,
140-
platformFeeWei
126+
platformFee,
127+
platformFee
141128
)
142129
})
143130

144131
it('test failtolerance when calculateAndRecordFeeData failed', async () => {
145132
feeHandler = await MockEmergencyFeeHandler.new(admin, network, rewardBps, rebateBps, burnBps)
146-
let platformFeeWei = new BN(10).pow(new BN(17))
133+
let platformFee = new BN(10).pow(new BN(17))
147134
let fee = new BN(10).pow(new BN(18))
148135

149136
let initalFeePerPlatformWallet = await feeHandler.feePerPlatformWallet(platformWallet)
150-
let txResult = await feeHandler.handleFees(rebateWallets, rebateBpsPerWallet, platformWallet, platformFeeWei, {
151-
from: network,
152-
value: fee
153-
})
137+
let txResult = await feeHandler.handleFees(
138+
ethAddress,
139+
rebateWallets,
140+
rebateBpsPerWallet,
141+
platformWallet,
142+
platformFee,
143+
fee.sub(platformFee),
144+
{
145+
from: network,
146+
value: fee
147+
}
148+
)
154149

155150
await expectEvent(txResult, 'HandleFeeFailed', {
156-
feeBRRWei: fee.sub(platformFeeWei)
151+
feeBRRWei: fee.sub(platformFee)
157152
})
158153
//platform fee should update as normal
159154
let afterFeePerPlatformWallet = await feeHandler.feePerPlatformWallet(platformWallet)
160-
Helper.assertEqual(
161-
initalFeePerPlatformWallet.add(platformFeeWei),
162-
afterFeePerPlatformWallet,
163-
'unexpected feePerPlatformWallet'
164-
)
155+
Helper.assertEqual(initalFeePerPlatformWallet.add(platformFee), afterFeePerPlatformWallet, 'unexpected feePerPlatformWallet')
165156
})
166157
})
167158

168159
describe('test withdraw and claimPlatformFee function', async () => {
169160
let availableFee
170161
let totalBalance
171-
let platformFeeWei
162+
let platformFee
172163
before('create new feehandler', async () => {
173164
feeHandler = await EmergencyKyberFeeHandler.new(admin, network, rewardBps, rebateBps, burnBps)
174-
platformFeeWei = new BN(10).pow(new BN(17))
165+
platformFee = new BN(10).pow(new BN(17))
175166
totalBalance = new BN(10).pow(new BN(18))
176-
await feeHandler.handleFees(rebateWallets, rebateBpsPerWallet, platformWallet, platformFeeWei, {
177-
from: network,
178-
value: totalBalance
179-
})
180-
availableFee = totalBalance.sub(platformFeeWei)
167+
await feeHandler.handleFees(
168+
ethAddress,
169+
rebateWallets,
170+
rebateBpsPerWallet,
171+
platformWallet,
172+
platformFee,
173+
totalBalance.sub(platformFee),
174+
{
175+
from: network,
176+
value: totalBalance
177+
}
178+
)
179+
availableFee = totalBalance.sub(platformFee)
181180
})
182181

183182
it('test withdraw revert if not admin', async () => {
@@ -204,13 +203,14 @@ contract('EmergencyKyberFeeHandler', function (accounts) {
204203
let txResult = await feeHandler.claimPlatformFee(platformWallet)
205204
expectEvent(txResult, 'PlatformFeePaid', {
206205
platformWallet: platformWallet,
207-
amountWei: platformFeeWei.sub(new BN(1))
206+
amount: platformFee.sub(new BN(1)),
207+
token: ethAddress
208208
})
209209
let afterBalance = await Helper.getBalancePromise(platformWallet)
210-
Helper.assertEqual(initialBalance.add(platformFeeWei).sub(new BN(1)), afterBalance, 'unexpected balance')
210+
Helper.assertEqual(initialBalance.add(platformFee).sub(new BN(1)), afterBalance, 'unexpected balance')
211211
let afterTotalPlatformFee = await feeHandler.totalPlatformFeeWei()
212212
Helper.assertEqual(
213-
initialTotalPlatformFee.sub(platformFeeWei.sub(new BN(1))),
213+
initialTotalPlatformFee.sub(platformFee.sub(new BN(1))),
214214
afterTotalPlatformFee,
215215
'total balance platform fee wei is not update as expected'
216216
)
@@ -220,7 +220,7 @@ contract('EmergencyKyberFeeHandler', function (accounts) {
220220
it('should revert with not implemented method from IKyberFeeHandler', async () => {
221221
feeHandler = await EmergencyKyberFeeHandler.new(admin, network, rewardBps, rebateBps, burnBps)
222222
await expectRevert(feeHandler.claimReserveRebate(rebateWallets[0]), 'not implemented')
223-
await expectRevert(feeHandler.claimStakerReward(rebateWallets[0], new BN(0), new BN(0)), 'not implemented')
223+
await expectRevert(feeHandler.claimStakerReward(rebateWallets[0], new BN(0)), 'not implemented')
224224
})
225225

226226
describe('test integration with real network', async () => {
@@ -311,15 +311,7 @@ contract('EmergencyKyberFeeHandler', function (accounts) {
311311
.mul(networkFeeBps)
312312
.div(BPS)
313313
.add(platformFeeWei)
314-
await assertStateAfterHandlerFees(
315-
feeHandler,
316-
initalState,
317-
[rebateWallet],
318-
[BPS],
319-
platformWallet,
320-
platformFeeWei,
321-
fee
322-
)
314+
await assertStateAfterHandlerFees(feeHandler, initalState, [rebateWallet], [BPS], platformWallet, platformFeeWei, fee)
323315
})
324316
})
325317
})
@@ -361,10 +353,6 @@ async function assertStateAfterHandlerFees (
361353

362354
for (let i = 0; i < rebateWallets.length; i++) {
363355
let rebatePerWallet = rebateWei.mul(rebateBpsPerWallet[i]).div(BPS)
364-
Helper.assertEqual(
365-
rebatePerWallet.add(initalState.rebatePerWallet[i]),
366-
afterState.rebatePerWallet[i],
367-
'unpected rebatePerWallet'
368-
)
356+
Helper.assertEqual(rebatePerWallet.add(initalState.rebatePerWallet[i]), afterState.rebatePerWallet[i], 'unpected rebatePerWallet')
369357
}
370358
}

0 commit comments

Comments
 (0)