@@ -2399,7 +2399,7 @@ contract('KyberNetwork', function(accounts) {
23992399 } ) ;
24002400 } ) ;
24012401
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 ( ) => {
24032403 let platformFee = new BN ( 200 ) ;
24042404 let reserveIdToWallet = [ ] ;
24052405 let rebateWallets ;
@@ -2457,26 +2457,24 @@ 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 ) ;
2464- let hasRebate = false ;
2464+ rebateWei = zeroBN ;
24652465 for ( const [ rebateWallet , beforeBalance ] of Object . entries ( beforeRebate ) ) {
24662466 if ( rebateWallet in rebatePerWallet ) {
2467+ rebateWei = rebateWei . add ( rebatePerWallet [ rebateWallet ] ) ;
24672468 Helper . assertApproximate ( await feeHandler . rebatePerWallet ( rebateWallet ) , beforeBalance . add ( rebatePerWallet [ rebateWallet ] ) , "unexpected rebate value" ) ;
2468- hasRebate = true ;
24692469 } else {
24702470 Helper . assertApproximate ( await feeHandler . rebatePerWallet ( rebateWallet ) , beforeBalance , "unexpected rebate value" ) ;
24712471 }
24722472 }
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 ) ) ;
24782477 Helper . assertApproximate ( await feeHandler . totalPayoutBalance ( ) , beforeTotalBalancePayout . add ( totalPayout ) , "unexpected payout balance" ) ;
2479-
24802478 }
24812479
24822480 it ( "e2t trade. see fee updated in fee handler." , async ( ) => {
@@ -2494,7 +2492,7 @@ contract('KyberNetwork', function(accounts) {
24942492 let expectedRebate = new BN ( tradeEventArgs . ethWeiValue ) . mul ( networkFeeBps ) . div ( BPS ) . mul ( rebateInBPS ) . div ( BPS ) ;
24952493 let rebatePerWallet = { }
24962494 rebatePerWallet [ rebateWallet ] = expectedRebate ;
2497- await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , BPS , rebatePerWallet ) ;
2495+ await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , BPS , BPS , rebatePerWallet ) ;
24982496 } ) ;
24992497
25002498 it ( "t2e trade. see fee in fee handler." , async ( ) => {
@@ -2513,10 +2511,10 @@ contract('KyberNetwork', function(accounts) {
25132511 let expectedRebate = new BN ( tradeEventArgs . ethWeiValue ) . mul ( networkFeeBps ) . div ( BPS ) . mul ( rebateInBPS ) . div ( BPS ) ;
25142512 let rebatePerWallet = { }
25152513 rebatePerWallet [ rebateWallet ] = expectedRebate ;
2516- await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , BPS , rebatePerWallet ) ;
2514+ await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , BPS , BPS , rebatePerWallet ) ;
25172515 } ) ;
25182516
2519- it ( "should have rebate given only to rebate entitled reserve. " , async ( ) => {
2517+ it ( "check that reserve rebate amount is correct " , async ( ) => {
25202518 await storage . setFeeAccountedPerReserveType ( true , true , true , true , true , true , { from : admin } ) ;
25212519 // set rebate entitled true for FPR
25222520 await storage . setEntitledRebatePerReserveType ( true , false , false , false , false , false , { from : admin } ) ;
@@ -2530,14 +2528,22 @@ contract('KyberNetwork', function(accounts) {
25302528 await srcToken . transfer ( network . address , srcQty ) ;
25312529 hint = await nwHelper . getHint ( rateHelper , matchingEngine , reserveInstances , SPLIT_HINTTYPE , numReserves ,
25322530 srcToken . address , destToken . address , srcQty ) ;
2531+
25332532 txResult = await network . tradeWithHintAndFee ( networkProxy , srcToken . address , srcQty , destToken . address , taker ,
25342533 maxDestAmt , minConversionRate , platformWallet , platformFee , hint , { from : networkProxy } ) ;
2534+
25352535 // assert first rebateWallet is received enitled rebate value
25362536 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 ) ;
25412547 // revert changes
25422548 await storage . setEntitledRebatePerReserveType ( true , true , true , true , true , true , { from : admin } ) ;
25432549 } ) ;
@@ -2551,27 +2557,25 @@ contract('KyberNetwork', function(accounts) {
25512557 let txResult = await network . tradeWithHintAndFee ( networkProxy , ethAddress , srcQty , srcToken . address , taker ,
25522558 maxDestAmt , minConversionRate , platformWallet , zeroBN , '0x' , { from : networkProxy , value : srcQty } ) ;
25532559 let tradeEventArgs = nwHelper . getTradeEventArgs ( txResult ) ;
2554- await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , zeroBN , zeroBN , { } ) ;
2560+ await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , zeroBN , zeroBN , zeroBN , { } ) ;
25552561
25562562 // revert changes
25572563 await storage . setFeeAccountedPerReserveType ( true , true , true , true , true , true , { from : admin } ) ;
25582564 await storage . setEntitledRebatePerReserveType ( true , true , true , true , true , true , { from : admin } ) ;
25592565 } ) ;
25602566
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 ( ) => {
25622568 await storage . setFeeAccountedPerReserveType ( true , true , true , true , true , true , { from : admin } ) ;
25632569 // set entitled rebate data to false
25642570 await storage . setEntitledRebatePerReserveType ( false , false , false , false , false , false , { from : admin } ) ;
2565-
2566- // let payoutBalance0 = await feeHandler.totalPayoutBalance();
2571+
25672572 let srcQty = oneEth ;
25682573
25692574 let txResult = await network . tradeWithHintAndFee ( networkProxy , ethAddress , srcQty , srcToken . address , taker ,
25702575 maxDestAmt , minConversionRate , platformWallet , zeroBN , '0x' , { from : networkProxy , value : srcQty } ) ;
2571- // let payoutBalance1 = await feeHandler.totalPayoutBalance();
2572- // Helper.assertEqual(payoutBalance0, payoutBalance1);
2576+
25732577 let tradeEventArgs = nwHelper . getTradeEventArgs ( txResult ) ;
2574- await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , zeroBN , BPS , { } ) ;
2578+ await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , zeroBN , BPS , zeroBN , { } ) ;
25752579
25762580 // reset fees
25772581 await storage . setFeeAccountedPerReserveType ( true , true , true , true , true , true , { from : admin } ) ;
@@ -2587,7 +2591,7 @@ contract('KyberNetwork', function(accounts) {
25872591 let txResult = await network . tradeWithHintAndFee ( networkProxy , ethAddress , srcQty , srcToken . address , taker ,
25882592 maxDestAmt , minConversionRate , platformWallet , platformFee , '0x' , { from : networkProxy , value : srcQty } ) ;
25892593 let tradeEventArgs = nwHelper . getTradeEventArgs ( txResult ) ;
2590- await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , zeroBN , { } ) ;
2594+ await assertFeeHandlerUpdate ( tradeEventArgs . ethWeiValue , platformFee , zeroBN , zeroBN , { } ) ;
25912595
25922596 // reset fees
25932597 await storage . setFeeAccountedPerReserveType ( true , true , true , true , true , true , { from : admin } ) ;
0 commit comments