...
This commit is contained in:
parent
922eb5e7ce
commit
a153088073
|
@ -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) {}
|
|
||||||
|
|
|
@ -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{})
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue