@@ -2399,7 +2399,7 @@ contract('KyberNetwork', function(accounts) {
2399
2399
} ) ;
2400
2400
} ) ;
2401
2401
2402
- describe ( "test fee handler integrations with 1 mock and 1 apr " , async ( ) => {
2402
+ describe ( "test fee handler integrations with 1 mock and 1 fpr " , async ( ) => {
2403
2403
let platformFee = new BN ( 200 ) ;
2404
2404
let reserveIdToWallet = [ ] ;
2405
2405
let rebateWallets ;
@@ -2457,26 +2457,24 @@ contract('KyberNetwork', function(accounts) {
2457
2457
reserveInstances = { } ;
2458
2458
} ) ;
2459
2459
2460
- async function assertFeeHandlerUpdate ( tradeWei , platfromFeeBps , feeAccountedBps , rebatePerWallet ) {
2460
+ async function assertFeeHandlerUpdate ( tradeWei , platfromFeeBps , feeAccountedBps , rebateEntitledBps , rebatePerWallet ) {
2461
2461
platformFeeWei = tradeWei . mul ( platfromFeeBps ) . div ( BPS ) ;
2462
2462
Helper . assertEqual ( await feeHandler . feePerPlatformWallet ( platformWallet ) , beforePlatformFee . add ( platformFeeWei ) , "unexpected rebate value" ) ;
2463
2463
networkFeeWei = tradeWei . mul ( networkFeeBps ) . div ( BPS ) . mul ( feeAccountedBps ) . div ( BPS ) ;
2464
- let hasRebate = false ;
2464
+ rebateWei = zeroBN ;
2465
2465
for ( const [ rebateWallet , beforeBalance ] of Object . entries ( beforeRebate ) ) {
2466
2466
if ( rebateWallet in rebatePerWallet ) {
2467
+ rebateWei = rebateWei . add ( rebatePerWallet [ rebateWallet ] ) ;
2467
2468
Helper . assertApproximate ( await feeHandler . rebatePerWallet ( rebateWallet ) , beforeBalance . add ( rebatePerWallet [ rebateWallet ] ) , "unexpected rebate value" ) ;
2468
- hasRebate = true ;
2469
2469
} else {
2470
2470
Helper . assertApproximate ( await feeHandler . rebatePerWallet ( rebateWallet ) , beforeBalance , "unexpected rebate value" ) ;
2471
2471
}
2472
2472
}
2473
- if ( hasRebate ) {
2474
- totalPayout = platformFeeWei . add ( networkFeeWei . mul ( rewardInBPS ) . div ( BPS ) ) . add ( networkFeeWei . mul ( rebateInBPS ) . div ( BPS ) ) ;
2475
- } else {
2476
- totalPayout = platformFeeWei . add ( networkFeeWei . mul ( rewardInBPS ) . div ( BPS ) ) ;
2477
- }
2473
+
2474
+ let rebateLeftOver = feeAccountedBps == zeroBN ? zeroBN : networkFeeWei . mul ( feeAccountedBps . sub ( rebateEntitledBps ) ) . div ( feeAccountedBps ) . mul ( rebateInBPS ) . div ( BPS ) ;
2475
+ let rewardWei = ( networkFeeWei . mul ( rewardInBPS ) . div ( BPS ) ) . add ( rebateLeftOver ) ;
2476
+ totalPayout = platformFeeWei . add ( rewardWei . add ( rebateWei ) ) ;
2478
2477
Helper . assertApproximate ( await feeHandler . totalPayoutBalance ( ) , beforeTotalBalancePayout . add ( totalPayout ) , "unexpected payout balance" ) ;
2479
-
2480
2478
}
2481
2479
2482
2480
it ( "e2t trade. see fee updated in fee handler." , async ( ) => {
@@ -2494,7 +2492,7 @@ contract('KyberNetwork', function(accounts) {
2494
2492
let expectedRebate = new BN ( tradeEventArgs . ethWeiValue ) . mul ( networkFeeBps ) . div ( BPS ) . mul ( rebateInBPS ) . div ( BPS ) ;
2495
2493
let rebatePerWallet = { }
2496
2494
rebatePerWallet [ rebateWallet ] = expectedRebate ;
2497
- await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , BPS , rebatePerWallet ) ;
2495
+ await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , BPS , BPS , rebatePerWallet ) ;
2498
2496
} ) ;
2499
2497
2500
2498
it ( "t2e trade. see fee in fee handler." , async ( ) => {
@@ -2513,10 +2511,10 @@ contract('KyberNetwork', function(accounts) {
2513
2511
let expectedRebate = new BN ( tradeEventArgs . ethWeiValue ) . mul ( networkFeeBps ) . div ( BPS ) . mul ( rebateInBPS ) . div ( BPS ) ;
2514
2512
let rebatePerWallet = { }
2515
2513
rebatePerWallet [ rebateWallet ] = expectedRebate ;
2516
- await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , BPS , rebatePerWallet ) ;
2514
+ await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , BPS , BPS , rebatePerWallet ) ;
2517
2515
} ) ;
2518
2516
2519
- it ( "should have rebate given only to rebate entitled reserve. " , async ( ) => {
2517
+ it ( "check that reserve rebate amount is correct " , async ( ) => {
2520
2518
await storage . setFeeAccountedPerReserveType ( true , true , true , true , true , true , { from : admin } ) ;
2521
2519
// set rebate entitled true for FPR
2522
2520
await storage . setEntitledRebatePerReserveType ( true , false , false , false , false , false , { from : admin } ) ;
@@ -2530,14 +2528,22 @@ contract('KyberNetwork', function(accounts) {
2530
2528
await srcToken . transfer ( network . address , srcQty ) ;
2531
2529
hint = await nwHelper . getHint ( rateHelper , matchingEngine , reserveInstances , SPLIT_HINTTYPE , numReserves ,
2532
2530
srcToken . address , destToken . address , srcQty ) ;
2531
+
2533
2532
txResult = await network . tradeWithHintAndFee ( networkProxy , srcToken . address , srcQty , destToken . address , taker ,
2534
2533
maxDestAmt , minConversionRate , platformWallet , platformFee , hint , { from : networkProxy } ) ;
2534
+
2535
2535
// assert first rebateWallet is received enitled rebate value
2536
2536
let tradeEventArgs = nwHelper . getTradeEventArgs ( txResult ) ;
2537
- let rebatePerWallet = { }
2538
- let expectedRebate = new BN ( tradeEventArgs . ethWeiValue ) . mul ( networkFeeBps ) . div ( BPS ) . mul ( new BN ( 2 ) ) . mul ( rebateInBPS ) . div ( BPS ) ;
2539
- rebatePerWallet [ rebateWallets [ 0 ] ] = expectedRebate
2540
- await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , BPS . mul ( new BN ( 2 ) ) , rebatePerWallet ) ;
2537
+ let rebatePerWallet = { } ;
2538
+ let feeAccountedBps = new BN ( 2 ) . mul ( BPS ) ;
2539
+ let entitledRebateBps = BPS ;
2540
+ let networkFeeWei = new BN ( tradeEventArgs . ethWeiValue ) . mul ( networkFeeBps ) . div ( BPS ) . mul ( new BN ( 2 ) ) ;
2541
+ let expectedRebateWei = networkFeeWei . mul ( entitledRebateBps ) . div ( feeAccountedBps ) . mul ( rebateInBPS ) . div ( BPS ) ;
2542
+
2543
+ rebatePerWallet [ rebateWallets [ 0 ] ] = expectedRebateWei ;
2544
+ rebatePerWallet [ rebateWallets [ 1 ] ] = zeroBN ;
2545
+ await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , feeAccountedBps ,
2546
+ entitledRebateBps , rebatePerWallet ) ;
2541
2547
// revert changes
2542
2548
await storage . setEntitledRebatePerReserveType ( true , true , true , true , true , true , { from : admin } ) ;
2543
2549
} ) ;
@@ -2551,27 +2557,25 @@ contract('KyberNetwork', function(accounts) {
2551
2557
let txResult = await network . tradeWithHintAndFee ( networkProxy , ethAddress , srcQty , srcToken . address , taker ,
2552
2558
maxDestAmt , minConversionRate , platformWallet , zeroBN , '0x' , { from : networkProxy , value : srcQty } ) ;
2553
2559
let tradeEventArgs = nwHelper . getTradeEventArgs ( txResult ) ;
2554
- await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , zeroBN , zeroBN , { } ) ;
2560
+ await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , zeroBN , zeroBN , zeroBN , { } ) ;
2555
2561
2556
2562
// revert changes
2557
2563
await storage . setFeeAccountedPerReserveType ( true , true , true , true , true , true , { from : admin } ) ;
2558
2564
await storage . setEntitledRebatePerReserveType ( true , true , true , true , true , true , { from : admin } ) ;
2559
2565
} ) ;
2560
2566
2561
- it ( "should have no rebate fee if entitled rebate data is set to false" , async ( ) => {
2567
+ it ( "should have no rebate if entitled rebate data is set to false" , async ( ) => {
2562
2568
await storage . setFeeAccountedPerReserveType ( true , true , true , true , true , true , { from : admin } ) ;
2563
2569
// set entitled rebate data to false
2564
2570
await storage . setEntitledRebatePerReserveType ( false , false , false , false , false , false , { from : admin } ) ;
2565
-
2566
- // let payoutBalance0 = await feeHandler.totalPayoutBalance();
2571
+
2567
2572
let srcQty = oneEth ;
2568
2573
2569
2574
let txResult = await network . tradeWithHintAndFee ( networkProxy , ethAddress , srcQty , srcToken . address , taker ,
2570
2575
maxDestAmt , minConversionRate , platformWallet , zeroBN , '0x' , { from : networkProxy , value : srcQty } ) ;
2571
- // let payoutBalance1 = await feeHandler.totalPayoutBalance();
2572
- // Helper.assertEqual(payoutBalance0, payoutBalance1);
2576
+
2573
2577
let tradeEventArgs = nwHelper . getTradeEventArgs ( txResult ) ;
2574
- await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , zeroBN , BPS , { } ) ;
2578
+ await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , zeroBN , BPS , zeroBN , { } ) ;
2575
2579
2576
2580
// reset fees
2577
2581
await storage . setFeeAccountedPerReserveType ( true , true , true , true , true , true , { from : admin } ) ;
@@ -2587,7 +2591,7 @@ contract('KyberNetwork', function(accounts) {
2587
2591
let txResult = await network . tradeWithHintAndFee ( networkProxy , ethAddress , srcQty , srcToken . address , taker ,
2588
2592
maxDestAmt , minConversionRate , platformWallet , platformFee , '0x' , { from : networkProxy , value : srcQty } ) ;
2589
2593
let tradeEventArgs = nwHelper . getTradeEventArgs ( txResult ) ;
2590
- await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , zeroBN , { } ) ;
2594
+ await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , zeroBN , zeroBN , { } ) ;
2591
2595
2592
2596
// reset fees
2593
2597
await storage . setFeeAccountedPerReserveType ( true , true , true , true , true , true , { from : admin } ) ;
0 commit comments