2018-09-04 23:41:17 -07:00
|
|
|
package keeper
|
|
|
|
|
|
|
|
import sdk "github.com/cosmos/cosmos-sdk/types"
|
|
|
|
|
|
|
|
// XXX TODO
|
2018-09-05 16:15:15 -07:00
|
|
|
func (k Keeper) AllocateFees(ctx sdk.Context, feesCollected sdk.Coins, proposerAddr sdk.ConsAddress,
|
2018-09-05 15:46:09 -07:00
|
|
|
sumPowerPrecommitValidators, totalBondedTokens, communityTax, proposerCommissionRate sdk.Dec) {
|
2018-09-04 23:41:17 -07:00
|
|
|
|
2018-09-05 15:29:20 -07:00
|
|
|
feePool := k.GetFeePool()
|
2018-09-05 16:15:15 -07:00
|
|
|
proserValidator := k.stakeKeeper.GetValidatorFromConsAddr(ctx, proposerAddr)
|
|
|
|
proposer := k.GetFeeDistribution(ctx, proserValidator.OperatorAddr)
|
2018-09-05 15:29:20 -07:00
|
|
|
|
2018-09-05 16:15:15 -07:00
|
|
|
feesCollectedDec := NewDecCoins(feesCollected)
|
|
|
|
proposerMultiplier := sdk.NewDecWithPrec(1, 2).Add(sdk.NewDecWithPrec(4, 2).Mul(
|
|
|
|
sumPowerPrecommitValidators).Div(totalBondedTokens))
|
|
|
|
proposerReward := feesCollectedDec.Mul(proposerMultiplier)
|
2018-09-04 23:41:17 -07:00
|
|
|
|
2018-09-05 16:15:15 -07:00
|
|
|
commission := proposerReward.Mul(proposerCommissionRate)
|
|
|
|
proposer.PoolCommission = proposer.PoolCommission.Add(commission)
|
|
|
|
proposer.Pool = proposer.Pool.Add(proposerReward.Sub(commission))
|
2018-09-04 23:41:17 -07:00
|
|
|
|
2018-09-05 16:15:15 -07:00
|
|
|
communityFunding := feesCollectedDec.Mul(communityTax)
|
|
|
|
feePool.CommunityFund = feePool.CommunityFund.Add(communityFunding)
|
2018-09-04 23:41:17 -07:00
|
|
|
|
|
|
|
poolReceived = feesCollectedDec - proposerReward - communityFunding
|
2018-09-05 16:15:15 -07:00
|
|
|
feePool.Pool = feePool.Pool.Add(poolReceived)
|
2018-09-04 23:41:17 -07:00
|
|
|
|
|
|
|
SetValidatorDistribution(proposer)
|
|
|
|
SetFeePool(feePool)
|
|
|
|
}
|