11package org .cardanofoundation .rewards .calculation ;
22
3+ import lombok .extern .slf4j .Slf4j ;
34import org .cardanofoundation .rewards .calculation .config .NetworkConfig ;
45import org .cardanofoundation .rewards .calculation .domain .*;
56
67import java .math .BigDecimal ;
78import java .math .BigInteger ;
8- import java .util .*;
9+ import java .util .HashSet ;
10+ import java .util .Set ;
911
1012import static org .cardanofoundation .rewards .calculation .util .BigNumberUtils .*;
11- import static org .cardanofoundation .rewards .calculation .util .BigNumberUtils .divide ;
12-
13- import lombok .extern .slf4j .Slf4j ;
1413
1514@ Slf4j
1615public class PoolRewardsCalculation {
@@ -97,14 +96,14 @@ public static BigInteger calculatePoolReward(BigInteger optimalPoolReward, BigDe
9796 * This method calculates the pool operator reward regarding the formula described
9897 * in the shelly-ledger.pdf p. 61, figure 47
9998 */
100- public static BigInteger calculateLeaderReward (BigInteger poolReward , double margin , BigInteger poolCost ,
99+ public static BigInteger calculateLeaderReward (BigInteger poolReward , BigDecimal margin , BigInteger poolCost ,
101100 BigDecimal relativeOwnerStake , BigDecimal relativeStakeOfPool ) {
102101 if (isLowerOrEquals (poolReward , poolCost )) {
103102 return poolReward ;
104103 }
105104
106105 return add (poolCost , floor (multiply (subtract (poolReward , poolCost ),
107- add (margin , multiply (( 1 - margin ), divide (relativeOwnerStake , relativeStakeOfPool ))))));
106+ add (margin , multiply (BigDecimal . ONE . subtract ( margin ), divide (relativeOwnerStake , relativeStakeOfPool ))))));
108107 }
109108
110109 /*
@@ -113,7 +112,7 @@ public static BigInteger calculateLeaderReward(BigInteger poolReward, double mar
113112 *
114113 * See Haskell implementation: https://github.com/input-output-hk/cardano-ledger/blob/aed5dde9cd1096cfc2e255879cd617c0d64f8d9d/eras/shelley/impl/src/Cardano/Ledger/Shelley/Rewards.hs#L117
115114 */
116- public static BigInteger calculateMemberReward (BigInteger poolReward , double margin , BigInteger poolCost ,
115+ public static BigInteger calculateMemberReward (BigInteger poolReward , BigDecimal margin , BigInteger poolCost ,
117116 BigDecimal relativeMemberStake , BigDecimal relativeStakeOfPool ) {
118117 if (isLowerOrEquals (poolReward , poolCost )) {
119118 return BigInteger .ZERO ;
@@ -156,11 +155,11 @@ public static PoolRewardCalculationResult calculatePoolRewardInEpoch(final Strin
156155
157156 final BigInteger poolStake = poolStateCurrentEpoch .getActiveStake ();
158157 final BigInteger poolPledge = poolStateCurrentEpoch .getPledge ();
159- final double poolMargin = poolStateCurrentEpoch .getMargin ();
158+ final BigDecimal poolMargin = BigDecimal . valueOf ( poolStateCurrentEpoch .getMargin () );
160159 final BigInteger poolFixedCost = poolStateCurrentEpoch .getFixedCost ();
161160 final int blocksPoolHasMinted = poolStateCurrentEpoch .getBlockCount ();
162161
163- poolRewardCalculationResult .setPoolMargin (poolMargin );
162+ poolRewardCalculationResult .setPoolMargin (poolStateCurrentEpoch . getMargin () );
164163 poolRewardCalculationResult .setPoolCost (poolFixedCost );
165164 poolRewardCalculationResult .setRewardAddress (poolStateCurrentEpoch .getRewardAddress ());
166165
0 commit comments