@@ -2457,7 +2457,7 @@ contract('KyberNetwork', function(accounts) {
24572457 reserveInstances = { } ;
24582458 } ) ;
24592459
2460- async function assertFeeHandlerUpdate ( tradeWei , platfromFeeBps , feeAccountedBps , rebatePerWallet ) {
2460+ async function assertFeeHandlerUpdate ( tradeWei , platfromFeeBps , feeAccountedBps , rebateEntitledBps , rebatePerWallet ) {
24612461 platformFeeWei = tradeWei . mul ( platfromFeeBps ) . div ( BPS ) ;
24622462 Helper . assertEqual ( await feeHandler . feePerPlatformWallet ( platformWallet ) , beforePlatformFee . add ( platformFeeWei ) , "unexpected rebate value" ) ;
24632463 networkFeeWei = tradeWei . mul ( networkFeeBps ) . div ( BPS ) . mul ( feeAccountedBps ) . div ( BPS ) ;
@@ -2470,7 +2470,10 @@ contract('KyberNetwork', function(accounts) {
24702470 Helper . assertApproximate ( await feeHandler . rebatePerWallet ( rebateWallet ) , beforeBalance , "unexpected rebate value" ) ;
24712471 }
24722472 }
2473- totalPayout = platformFeeWei . add ( networkFeeWei . mul ( rewardInBPS ) . div ( BPS ) ) . add ( rebateWei ) ;
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 ) ) ;
24742477 Helper . assertApproximate ( await feeHandler . totalPayoutBalance ( ) , beforeTotalBalancePayout . add ( totalPayout ) , "unexpected payout balance" ) ;
24752478 }
24762479
@@ -2489,7 +2492,7 @@ contract('KyberNetwork', function(accounts) {
24892492 let expectedRebate = new BN ( tradeEventArgs . ethWeiValue ) . mul ( networkFeeBps ) . div ( BPS ) . mul ( rebateInBPS ) . div ( BPS ) ;
24902493 let rebatePerWallet = { }
24912494 rebatePerWallet [ rebateWallet ] = expectedRebate ;
2492- await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , BPS , rebatePerWallet ) ;
2495+ await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , BPS , BPS , rebatePerWallet ) ;
24932496 } ) ;
24942497
24952498 it ( "t2e trade. see fee in fee handler." , async ( ) => {
@@ -2508,7 +2511,7 @@ contract('KyberNetwork', function(accounts) {
25082511 let expectedRebate = new BN ( tradeEventArgs . ethWeiValue ) . mul ( networkFeeBps ) . div ( BPS ) . mul ( rebateInBPS ) . div ( BPS ) ;
25092512 let rebatePerWallet = { }
25102513 rebatePerWallet [ rebateWallet ] = expectedRebate ;
2511- await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , BPS , rebatePerWallet ) ;
2514+ await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , BPS , BPS , rebatePerWallet ) ;
25122515 } ) ;
25132516
25142517 it ( "check that reserve rebate amount is correct" , async ( ) => {
@@ -2525,6 +2528,7 @@ contract('KyberNetwork', function(accounts) {
25252528 await srcToken . transfer ( network . address , srcQty ) ;
25262529 hint = await nwHelper . getHint ( rateHelper , matchingEngine , reserveInstances , SPLIT_HINTTYPE , numReserves ,
25272530 srcToken . address , destToken . address , srcQty ) ;
2531+
25282532 txResult = await network . tradeWithHintAndFee ( networkProxy , srcToken . address , srcQty , destToken . address , taker ,
25292533 maxDestAmt , minConversionRate , platformWallet , platformFee , hint , { from : networkProxy } ) ;
25302534
@@ -2534,9 +2538,12 @@ contract('KyberNetwork', function(accounts) {
25342538 let feeAccountedBps = new BN ( 2 ) . mul ( BPS ) ;
25352539 let entitledRebateBps = BPS ;
25362540 let networkFeeWei = new BN ( tradeEventArgs . ethWeiValue ) . mul ( networkFeeBps ) . div ( BPS ) . mul ( new BN ( 2 ) ) ;
2537- let expectedRebateWei = networkFeeWei . mul ( entitledRebateBps ) . div ( feeAccountedBps ) . mul ( rebateInBPS ) . div ( BPS ) ; ;
2541+ let expectedRebateWei = networkFeeWei . mul ( entitledRebateBps ) . div ( feeAccountedBps ) . mul ( rebateInBPS ) . div ( BPS ) ;
2542+
25382543 rebatePerWallet [ rebateWallets [ 0 ] ] = expectedRebateWei ;
2539- await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , BPS . mul ( new BN ( 2 ) ) , rebatePerWallet ) ;
2544+ rebatePerWallet [ rebateWallets [ 1 ] ] = zeroBN ;
2545+ await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , feeAccountedBps ,
2546+ entitledRebateBps , rebatePerWallet ) ;
25402547 // revert changes
25412548 await storage . setEntitledRebatePerReserveType ( true , true , true , true , true , true , { from : admin } ) ;
25422549 } ) ;
@@ -2550,27 +2557,25 @@ contract('KyberNetwork', function(accounts) {
25502557 let txResult = await network . tradeWithHintAndFee ( networkProxy , ethAddress , srcQty , srcToken . address , taker ,
25512558 maxDestAmt , minConversionRate , platformWallet , zeroBN , '0x' , { from : networkProxy , value : srcQty } ) ;
25522559 let tradeEventArgs = nwHelper . getTradeEventArgs ( txResult ) ;
2553- await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , zeroBN , zeroBN , { } ) ;
2560+ await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , zeroBN , zeroBN , zeroBN , { } ) ;
25542561
25552562 // revert changes
25562563 await storage . setFeeAccountedPerReserveType ( true , true , true , true , true , true , { from : admin } ) ;
25572564 await storage . setEntitledRebatePerReserveType ( true , true , true , true , true , true , { from : admin } ) ;
25582565 } ) ;
25592566
2560- 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 ( ) => {
25612568 await storage . setFeeAccountedPerReserveType ( true , true , true , true , true , true , { from : admin } ) ;
25622569 // set entitled rebate data to false
25632570 await storage . setEntitledRebatePerReserveType ( false , false , false , false , false , false , { from : admin } ) ;
2564-
2565- // let payoutBalance0 = await feeHandler.totalPayoutBalance();
2571+
25662572 let srcQty = oneEth ;
25672573
25682574 let txResult = await network . tradeWithHintAndFee ( networkProxy , ethAddress , srcQty , srcToken . address , taker ,
25692575 maxDestAmt , minConversionRate , platformWallet , zeroBN , '0x' , { from : networkProxy , value : srcQty } ) ;
2570- // let payoutBalance1 = await feeHandler.totalPayoutBalance();
2571- // Helper.assertEqual(payoutBalance0, payoutBalance1);
2576+
25722577 let tradeEventArgs = nwHelper . getTradeEventArgs ( txResult ) ;
2573- await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , zeroBN , BPS , { } ) ;
2578+ await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , zeroBN , BPS , zeroBN , { } ) ;
25742579
25752580 // reset fees
25762581 await storage . setFeeAccountedPerReserveType ( true , true , true , true , true , true , { from : admin } ) ;
@@ -2586,7 +2591,7 @@ contract('KyberNetwork', function(accounts) {
25862591 let txResult = await network . tradeWithHintAndFee ( networkProxy , ethAddress , srcQty , srcToken . address , taker ,
25872592 maxDestAmt , minConversionRate , platformWallet , platformFee , '0x' , { from : networkProxy , value : srcQty } ) ;
25882593 let tradeEventArgs = nwHelper . getTradeEventArgs ( txResult ) ;
2589- await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , zeroBN , { } ) ;
2594+ await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , zeroBN , zeroBN , { } ) ;
25902595
25912596 // reset fees
25922597 await storage . setFeeAccountedPerReserveType ( true , true , true , true , true , true , { from : admin } ) ;
0 commit comments