88const { expect} = require ( 'chai' ) ;
99
1010const UnitTestStakers = artifacts . require ( 'UnitTestStakers' ) ;
11- const getDeposition = async ( depositor , to ) => this . stakers . delegations_v2 . call ( depositor , to ) ;
11+ //const getDeposition = async (depositor, to) => this.stakers.delegations_v2.call(depositor, to);
12+ const getDeposition = async ( depositor , to ) => this . stakers . delegations . call ( depositor ) ;
1213const getStaker = async ( stakerID ) => this . stakers . stakers . call ( stakerID ) ;
1314
1415contract ( 'SFC' , async ( [ firstStaker , secondStaker , thirdStaker , firstDepositor , secondDepositor , thirdDepositor ] ) => {
@@ -453,18 +454,29 @@ contract('SFC', async ([firstStaker, secondStaker, thirdStaker, firstDepositor,
453454 await this . stakers . lockUpDelegation ( duration , firstStakerID , { from : firstDepositor } ) ;
454455 await this . stakers . lockUpDelegation ( duration , firstStakerID , { from : secondDepositor } ) ;
455456 await this . stakers . makeEpochSnapshots ( 10000 , false ) ; // epoch #3
456- await this . stakers . discardDelegationRewards ( firstStakerID , { from : firstDepositor } ) ;
457- await this . stakers . discardDelegationRewards ( firstStakerID , { from : secondDepositor } ) ;
458- /*time.increase(86400 * 14 - 2);
457+
458+ await this . stakers . claimDelegationRewards ( 2 , { from : firstDepositor } ) ;
459+ const penaltyNonLocked = await this . stakers . calcDelegationPenalty ( firstDepositor , firstStakerID , ether ( '1.0' ) ) ;
460+ expect ( penaltyNonLocked ) . to . be . bignumber . equal ( ether ( '0.0' ) ) ; // penalty must be zero for non-lockup epochs
461+
462+ const reward = await this . stakers . calcDelegationRewards ( firstDepositor , 0 , 1 ) ;
463+ expect ( reward [ 0 ] ) . to . be . bignumber . equal ( ether ( '0.000000070833333333' ) ) ;
464+ await this . stakers . claimDelegationRewards ( 100 , { from : firstDepositor } ) ;
465+ await this . stakers . claimDelegationRewards ( 100 , { from : secondDepositor } ) ;
459466 const penalty = await this . stakers . calcDelegationPenalty ( firstDepositor , firstStakerID , ether ( '1.0' ) ) ;
460- expect(penalty).to.be.bignumber.equal(ether('0.000000068958333333'));
461- await this.stakers.prepareToWithdrawDelegation(firstStakerID, { from: firstDepositor });
467+ expect ( penalty ) . to . be . bignumber . equal ( ether ( '0.000000060208333333' ) ) ; // (50% of base reward + 100% of extra reward) * 1.0 FTM / 1.0 FTM
468+
469+ time . increase ( 86400 * 14 - 2 ) ; // not unlocked yet
470+
471+ await this . stakers . prepareToWithdrawDelegation ( { from : firstDepositor } ) ;
462472 const firstDeposition = await getDeposition ( firstDepositor , firstStakerID ) ;
463473 expect ( firstDeposition . amount ) . to . be . bignumber . equal ( ether ( '1.0' ) . sub ( penalty ) ) ;
464- time.increase(3);
465- await this.stakers.prepareToWithdrawDelegation(firstStakerID, { from: secondDepositor });
474+
475+ time . increase ( 3 ) ; // after lockup
476+
477+ await this . stakers . prepareToWithdrawDelegation ( { from : secondDepositor } ) ;
466478 const secondDeposition = await getDeposition ( secondDepositor , firstStakerID ) ;
467- expect(secondDeposition.amount).to.be.bignumber.equal(ether('1.0'));*/
479+ expect ( secondDeposition . amount ) . to . be . bignumber . equal ( ether ( '1.0' ) ) ;
468480 } ) ;
469481
470482 it ( 'should subtract penalty if prepareToWithdrawDelegationPartial will call earlier than locked time is pass' , async ( ) => {
@@ -486,19 +498,35 @@ contract('SFC', async ([firstStaker, secondStaker, thirdStaker, firstDepositor,
486498 await this . stakers . lockUpDelegation ( duration , firstStakerID , { from : firstDepositor } ) ;
487499 await this . stakers . lockUpDelegation ( duration , firstStakerID , { from : secondDepositor } ) ;
488500 await this . stakers . makeEpochSnapshots ( 10000 , false ) ; // epoch #3
489- await this . stakers . discardDelegationRewards ( firstStakerID , { from : firstDepositor } ) ;
490- await this . stakers . discardDelegationRewards ( firstStakerID , { from : secondDepositor } ) ;
491- /*time.increase(86400 * 14 - 2);
501+
502+ await this . stakers . claimDelegationRewards ( 2 , { from : firstDepositor } ) ;
503+ const penaltyNonLocked = await this . stakers . calcDelegationPenalty ( firstDepositor , firstStakerID , ether ( '1.0' ) ) ;
504+ expect ( penaltyNonLocked ) . to . be . bignumber . equal ( ether ( '0.0' ) ) ; // penalty must be zero for non-lockup epochs
505+
506+ const reward = await this . stakers . calcDelegationRewards ( firstDepositor , 0 , 1 ) ;
507+ expect ( reward [ 0 ] ) . to . be . bignumber . equal ( ether ( '0.000000070833333333' ) ) ;
508+ await this . stakers . claimDelegationRewards ( 100 , { from : firstDepositor } ) ;
509+ await this . stakers . claimDelegationRewards ( 100 , { from : secondDepositor } ) ;
492510 const penalty = await this . stakers . calcDelegationPenalty ( firstDepositor , firstStakerID , ether ( '1.0' ) ) ;
493- expect(penalty).to.be.bignumber.equal(ether('0.000000034479166666')); // 50% for reward
494- const wrID = new BN('1');
495- await this.stakers.prepareToWithdrawDelegationPartial(wrID, firstStakerID, ether('1.0'), { from: firstDepositor });
511+ expect ( penalty ) . to . be . bignumber . equal ( ether ( '0.000000030104166666' ) ) ; // (50% of base reward + 100% of extra reward) * 1.0 FTM / 2.0 FTM
512+
513+ time . increase ( 86400 * 14 - 2 ) ; // not unlocked yet
514+
515+ const wrID1 = new BN ( '1' ) ;
516+ await this . stakers . prepareToWithdrawDelegationPartial ( wrID1 , ether ( '1.0' ) , { from : firstDepositor } ) ;
496517 const firstDeposition = await getDeposition ( firstDepositor , firstStakerID ) ;
497- expect(firstDeposition.amount).to.be.bignumber.equal(ether('1.0').sub(penalty));
498- time.increase(3);
499- await this.stakers.prepareToWithdrawDelegationPartial(wrID.add(new BN('1')), firstStakerID, ether('1.0'), { from: secondDepositor });
518+ const firstRequest = await this . stakers . withdrawalRequests ( firstDepositor , wrID1 ) ;
519+ expect ( firstDeposition . amount ) . to . be . bignumber . equal ( ether ( '1.0' ) ) ;
520+ expect ( firstRequest . amount ) . to . be . bignumber . equal ( ether ( '1.0' ) . sub ( penalty ) ) ;
521+
522+ time . increase ( 3 ) ; // after lockup
523+
524+ const wrID2 = new BN ( '2' ) ;
525+ await this . stakers . prepareToWithdrawDelegationPartial ( wrID2 , ether ( '1.0' ) , { from : secondDepositor } ) ;
500526 const secondDeposition = await getDeposition ( secondDepositor , firstStakerID ) ;
501- expect(secondDeposition.amount).to.be.bignumber.equal(ether('1.0'));*/
527+ const secondRequest = await this . stakers . withdrawalRequests ( secondDepositor , wrID2 ) ;
528+ expect ( secondDeposition . amount ) . to . be . bignumber . equal ( ether ( '1.0' ) ) ;
529+ expect ( secondRequest . amount ) . to . be . bignumber . equal ( ether ( '1.0' ) ) ;
502530 } ) ;
503531 } ) ;
504532} ) ;
0 commit comments