This commit is contained in:
rigelrozanski 2018-09-11 13:35:47 -04:00
parent 922eb5e7ce
commit a153088073
5 changed files with 40 additions and 17 deletions

View File

@ -255,6 +255,3 @@ func deductFees(acc Account, fee StdFee) (Account, sdk.Result) {
} }
return acc, sdk.Result{} return acc, sdk.Result{}
} }
// BurnFeeHandler burns all fees (decreasing total supply)
func BurnFeeHandler(_ sdk.Context, _ sdk.Tx, _ sdk.Coins) {}

View File

@ -20,7 +20,6 @@ type FeeCollectionKeeper struct {
cdc *wire.Codec cdc *wire.Codec
} }
// NewFeeKeeper returns a new FeeKeeper
func NewFeeCollectionKeeper(cdc *wire.Codec, key sdk.StoreKey) FeeCollectionKeeper { func NewFeeCollectionKeeper(cdc *wire.Codec, key sdk.StoreKey) FeeCollectionKeeper {
return FeeCollectionKeeper{ return FeeCollectionKeeper{
key: key, key: key,
@ -28,7 +27,7 @@ func NewFeeCollectionKeeper(cdc *wire.Codec, key sdk.StoreKey) FeeCollectionKeep
} }
} }
// Adds to Collected Fee Pool // retrieves the collected fee pool
func (fck FeeCollectionKeeper) GetCollectedFees(ctx sdk.Context) sdk.Coins { func (fck FeeCollectionKeeper) GetCollectedFees(ctx sdk.Context) sdk.Coins {
store := ctx.KVStore(fck.key) store := ctx.KVStore(fck.key)
bz := store.Get(collectedFeesKey) bz := store.Get(collectedFeesKey)
@ -41,14 +40,12 @@ func (fck FeeCollectionKeeper) GetCollectedFees(ctx sdk.Context) sdk.Coins {
return *feePool return *feePool
} }
// Sets to Collected Fee Pool
func (fck FeeCollectionKeeper) setCollectedFees(ctx sdk.Context, coins sdk.Coins) { func (fck FeeCollectionKeeper) setCollectedFees(ctx sdk.Context, coins sdk.Coins) {
bz := fck.cdc.MustMarshalBinary(coins) bz := fck.cdc.MustMarshalBinary(coins)
store := ctx.KVStore(fck.key) store := ctx.KVStore(fck.key)
store.Set(collectedFeesKey, bz) store.Set(collectedFeesKey, bz)
} }
// Adds to Collected Fee Pool
func (fck FeeCollectionKeeper) addCollectedFees(ctx sdk.Context, coins sdk.Coins) sdk.Coins { func (fck FeeCollectionKeeper) addCollectedFees(ctx sdk.Context, coins sdk.Coins) sdk.Coins {
newCoins := fck.GetCollectedFees(ctx).Plus(coins) newCoins := fck.GetCollectedFees(ctx).Plus(coins)
fck.setCollectedFees(ctx, newCoins) fck.setCollectedFees(ctx, newCoins)
@ -56,7 +53,7 @@ func (fck FeeCollectionKeeper) addCollectedFees(ctx sdk.Context, coins sdk.Coins
return newCoins return newCoins
} }
// Clears the collected Fee Pool // clear the fee pool
func (fck FeeCollectionKeeper) ClearCollectedFees(ctx sdk.Context) { func (fck FeeCollectionKeeper) ClearCollectedFees(ctx sdk.Context) {
fck.setCollectedFees(ctx, sdk.Coins{}) fck.setCollectedFees(ctx, sdk.Coins{})
} }

View File

@ -0,0 +1,9 @@
package distribution
import "github.com/cosmos/cosmos-sdk/x/distribution/keeper"
// slashing begin block functionality
func BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock, dk keeper.Keeper) (tags sdk.Tags) {
return
}

View File

@ -1,34 +1,48 @@
package keeper package keeper
import sdk "github.com/cosmos/cosmos-sdk/types" import (
sdk "github.com/cosmos/cosmos-sdk/types"
abci "github.com/tendermint/tendermint/abci/types"
)
// Allocate fees handles distribution of the collected fees // Allocate fees handles distribution of the collected fees
func (k Keeper) AllocateFees(ctx sdk.Context, _ sdk.Tx, feesCollected sdk.Coins, proposerAddr sdk.ConsAddress) { func (k Keeper) AllocateFees(ctx sdk.Context, req abci.RequestBeginBlock) {
sumPowerPrecommitValidators := sdk.NewDec(1) // XXX TODO actually calculate this
communityTax := sdk.NewDecWithPrec(1, 2) // XXX TODO get from global params store
feePool := k.GetFeePool(ctx)
stakePool := k.stakeKeeper.GetPool(ctx)
// get the proposer of this block
proposerAddr := req.Header.Proposer.PubKey // XXX use address?
proserValidator := k.stakeKeeper.GetValidatorFromConsAddr(ctx, proposerAddr) proserValidator := k.stakeKeeper.GetValidatorFromConsAddr(ctx, proposerAddr)
proposerDist := k.GetFeeDistribution(ctx, proserValidator.OperatorAddr) proposerDist := k.GetFeeDistribution(ctx, proserValidator.OperatorAddr)
// get the fees which have been getting collected through all the
// transactions in the block
feesCollected := k.FeeCollectionKeeper.GetCollectedFees(ctx)
feesCollectedDec := NewDecCoins(feesCollected) feesCollectedDec := NewDecCoins(feesCollected)
// allocated rewards to proposer
stakePool := k.stakeKeeper.GetPool(ctx)
sumPowerPrecommitValidators := sdk.NewDec(1) // XXX TODO actually calculate this
proposerMultiplier := sdk.NewDecWithPrec(1, 2).Add(sdk.NewDecWithPrec(4, 2).Mul( proposerMultiplier := sdk.NewDecWithPrec(1, 2).Add(sdk.NewDecWithPrec(4, 2).Mul(
sumPowerPrecommitValidators).Div(stakePool.BondedTokens)) sumPowerPrecommitValidators).Div(stakePool.BondedTokens))
proposerReward := feesCollectedDec.Mul(proposerMultiplier) proposerReward := feesCollectedDec.Mul(proposerMultiplier)
// apply commission
commission := proposerReward.Mul(proserValidator.Commission) commission := proposerReward.Mul(proserValidator.Commission)
proposerDist.PoolCommission = proposerDist.PoolCommission.Add(commission) proposerDist.PoolCommission = proposerDist.PoolCommission.Add(commission)
proposerDist.Pool = proposerDist.Pool.Add(proposerReward.Sub(commission)) proposerDist.Pool = proposerDist.Pool.Add(proposerReward.Sub(commission))
// allocate community funding
communityTax := sdk.NewDecWithPrec(1, 2) // XXX TODO get from global params store
communityFunding := feesCollectedDec.Mul(communityTax) communityFunding := feesCollectedDec.Mul(communityTax)
feePool := k.GetFeePool(ctx)
feePool.CommunityFund = feePool.CommunityFund.Add(communityFunding) feePool.CommunityFund = feePool.CommunityFund.Add(communityFunding)
// set the global pool within the distribution module
poolReceived := feesCollectedDec.Sub(proposerReward).Sub(communityFunding) poolReceived := feesCollectedDec.Sub(proposerReward).Sub(communityFunding)
feePool.Pool = feePool.Pool.Add(poolReceived) feePool.Pool = feePool.Pool.Add(poolReceived)
SetValidatorDistribution(proposerDist) SetValidatorDistribution(proposerDist)
SetFeePool(feePool) SetFeePool(feePool)
// clear the now distributed fees
k.FeeCollectionKeeper.ClearCollectedFees(ctx)
} }

View File

@ -12,6 +12,12 @@ type StakeKeeper interface {
} }
// expected coin keeper // expected coin keeper
type CoinKeeper interface { type BankKeeper interface {
AddCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Tags, sdk.Error) AddCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Tags, sdk.Error)
} }
// from ante handler
type FeeCollectionKeeper interface {
GetCollectedFees(ctx sdk.Context) sdk.Coins
ClearCollectedFees(ctx sdk.Context)
}