-
Notifications
You must be signed in to change notification settings - Fork 3.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
38c6090
commit 53253aa
Showing
12 changed files
with
329 additions
and
234 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
// nolint | ||
package cli | ||
|
||
import ( | ||
"os" | ||
|
||
"github.com/cosmos/cosmos-sdk/client/context" | ||
"github.com/cosmos/cosmos-sdk/client/utils" | ||
sdk "github.com/cosmos/cosmos-sdk/types" | ||
"github.com/cosmos/cosmos-sdk/x/stake" | ||
"github.com/spf13/cobra" | ||
"github.com/spf13/viper" | ||
wire "github.com/tendermint/go-wire" | ||
) | ||
|
||
type TxWithdrawDelegationRewardsAll struct { | ||
delegatorAddr sdk.AccAddress | ||
withdrawAddr sdk.AccAddress // address to make the withdrawal to | ||
} | ||
|
||
type TxWithdrawDelegationReward struct { | ||
delegatorAddr sdk.AccAddress | ||
validatorAddr sdk.AccAddress | ||
withdrawAddr sdk.AccAddress // address to make the withdrawal to | ||
} | ||
|
||
type TxWithdrawValidatorRewardsAll struct { | ||
operatorAddr sdk.AccAddress // validator address to withdraw from | ||
withdrawAddr sdk.AccAddress // address to make the withdrawal to | ||
} | ||
|
||
var ( | ||
flagOnlyFromValidator = "only-from-validator" | ||
flagIsValidator = "is-validator" | ||
) | ||
|
||
// GetCmdDelegate implements the delegate command. | ||
func GetCmdWithdrawDelegationRewardsAll(cdc *wire.Codec) *cobra.Command { | ||
cmd := &cobra.Command{ | ||
Use: "withdraw-rewards [delegator]", | ||
Short: "withdraw rewards from delegation accounts", | ||
RunE: func(cmd *cobra.Command, args []string) error { | ||
txCtx := authctx.NewTxContextFromCLI().WithCodec(cdc) | ||
cliCtx := context.NewCLIContext(). | ||
WithCodec(cdc). | ||
WithLogger(os.Stdout). | ||
WithAccountDecoder(authcmd.GetAccountDecoder(cdc)) | ||
|
||
amount, err := sdk.ParseCoin(viper.GetString(FlagAmount)) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
delAddr, err := cliCtx.GetFromAddress() | ||
if err != nil { | ||
return err | ||
} | ||
|
||
valAddr, err := sdk.ValAddressFromBech32(viper.GetString(FlagAddressValidator)) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
msg := stake.NewMsgDelegate(delAddr, valAddr, amount) | ||
|
||
// build and sign the transaction, then broadcast to Tendermint | ||
return utils.SendTx(txCtx, cliCtx, []sdk.Msg{msg}) | ||
}, | ||
} | ||
|
||
// TODO add flags for "is-validator", "only-for-validator" | ||
cmd.Flags().String(flagOnlyFromValidator, "", "Only withdraw from this validator address") | ||
cmd.Flags().Bool(flagIsValidator, false, "Also withdraw validator's commission") | ||
|
||
return cmd | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,144 +1,14 @@ | ||
package stake | ||
|
||
import ( | ||
"time" | ||
|
||
sdk "github.com/cosmos/cosmos-sdk/types" | ||
"github.com/cosmos/cosmos-sdk/x/stake/keeper" | ||
) | ||
|
||
// burn burn burn | ||
func BurnFeeHandler(ctx sdk.Context, _ sdk.Tx, collectedFees sdk.Coins) {} | ||
|
||
// Called every block, process inflation, update validator set | ||
func EndBlocker(ctx sdk.Context, k keeper.Keeper) (ValidatorUpdates []abci.Validator) { | ||
pool := k.GetPool(ctx) | ||
|
||
// Process provision inflation | ||
blockTime := ctx.BlockHeader().Time | ||
if blockTime.Sub(pool.InflationLastTime) >= time.Hour { | ||
params := k.GetParams(ctx) | ||
pool.InflationLastTime = blockTime | ||
pool = pool.ProcessProvisions(params) | ||
k.SetPool(ctx, pool) | ||
} | ||
|
||
// reset the intra-transaction counter | ||
k.SetIntraTxCounter(ctx, 0) | ||
|
||
// calculate validator set changes | ||
ValidatorUpdates = k.GetTendermintUpdates(ctx) | ||
k.ClearTendermintUpdates(ctx) | ||
return | ||
} | ||
|
||
/* | ||
func AllocateFees(feesCollected sdk.Coins, global Global, proposer ValidatorDistribution, | ||
sumPowerPrecommitValidators, totalBondedTokens, communityTax, | ||
proposerCommissionRate sdk.Dec) | ||
feesCollectedDec = MakeDecCoins(feesCollected) | ||
proposerReward = feesCollectedDec * (0.01 + 0.04 | ||
* sumPowerPrecommitValidators / totalBondedTokens) | ||
commission = proposerReward * proposerCommissionRate | ||
proposer.PoolCommission += commission | ||
proposer.Pool += proposerReward - commission | ||
communityFunding = feesCollectedDec * communityTax | ||
global.CommunityFund += communityFunding | ||
poolReceived = feesCollectedDec - proposerReward - communityFunding | ||
global.Pool += poolReceived | ||
global.EverReceivedPool += poolReceived | ||
global.LastReceivedPool = poolReceived | ||
SetValidatorDistribution(proposer) | ||
SetGlobal(global) | ||
///////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
type TxWithdrawDelegationRewardsAll struct { | ||
delegatorAddr sdk.AccAddress | ||
withdrawAddr sdk.AccAddress // address to make the withdrawal to | ||
} | ||
func WithdrawDelegationRewardsAll(delegatorAddr, withdrawAddr sdk.AccAddress) | ||
height = GetHeight() | ||
withdraw = GetDelegatorRewardsAll(delegatorAddr, height) | ||
AddCoins(withdrawAddr, withdraw.TruncateDecimal()) | ||
func GetDelegatorRewardsAll(delegatorAddr sdk.AccAddress, height int64) DecCoins | ||
// distribution fee handler | ||
func DistributionFeeHandler(ctx sdk.Context, _ sdk.Tx, collectedFees sdk.Coins) { | ||
|
||
// get all distribution scenarios | ||
delegations = GetDelegations(delegatorAddr) | ||
// collect all entitled rewards | ||
withdraw = 0 | ||
pool = stake.GetPool() | ||
global = GetGlobal() | ||
for delegation = range delegations | ||
delInfo = GetDelegationDistInfo(delegation.DelegatorAddr, | ||
delegation.ValidatorAddr) | ||
valInfo = GetValidatorDistInfo(delegation.ValidatorAddr) | ||
validator = GetValidator(delegation.ValidatorAddr) | ||
global, diWithdraw = delInfo.WithdrawRewards(global, valInfo, height, pool.BondedTokens, | ||
validator.Tokens, validator.DelegatorShares, validator.Commission) | ||
withdraw += diWithdraw | ||
SetGlobal(global) | ||
return withdraw | ||
///////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
type TxWithdrawDelegationReward struct { | ||
delegatorAddr sdk.AccAddress | ||
validatorAddr sdk.AccAddress | ||
withdrawAddr sdk.AccAddress // address to make the withdrawal to | ||
} | ||
|
||
func WithdrawDelegationReward(delegatorAddr, validatorAddr, withdrawAddr sdk.AccAddress) | ||
height = GetHeight() | ||
// get all distribution scenarios | ||
pool = stake.GetPool() | ||
global = GetGlobal() | ||
delInfo = GetDelegationDistInfo(delegatorAddr, | ||
validatorAddr) | ||
valInfo = GetValidatorDistInfo(validatorAddr) | ||
validator = GetValidator(validatorAddr) | ||
global, withdraw = delInfo.WithdrawRewards(global, valInfo, height, pool.BondedTokens, | ||
validator.Tokens, validator.DelegatorShares, validator.Commission) | ||
SetGlobal(global) | ||
AddCoins(withdrawAddr, withdraw.TruncateDecimal()) | ||
///////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
type TxWithdrawValidatorRewardsAll struct { | ||
operatorAddr sdk.AccAddress // validator address to withdraw from | ||
withdrawAddr sdk.AccAddress // address to make the withdrawal to | ||
} | ||
func WithdrawValidatorRewardsAll(operatorAddr, withdrawAddr sdk.AccAddress) | ||
height = GetHeight() | ||
global = GetGlobal() | ||
pool = GetPool() | ||
ValInfo = GetValidatorDistInfo(delegation.ValidatorAddr) | ||
validator = GetValidator(delegation.ValidatorAddr) | ||
// withdraw self-delegation | ||
withdraw = GetDelegatorRewardsAll(validator.OperatorAddr, height) | ||
// withdrawal validator commission rewards | ||
global, commission = valInfo.WithdrawCommission(global, valInfo, height, pool.BondedTokens, | ||
validator.Tokens, validator.Commission) | ||
withdraw += commission | ||
SetGlobal(global) | ||
AddCoins(withdrawAddr, withdraw.TruncateDecimal()) | ||
*/ | ||
////////////////////////////////////////////////////////////////////////////////// | ||
// burn burn burn | ||
func BurnFeeHandler(ctx sdk.Context, _ sdk.Tx, collectedFees sdk.Coins) {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package keeper | ||
|
||
import sdk "github.com/cosmos/cosmos-sdk/types" | ||
|
||
// XXX TODO | ||
func AllocateFees(feesCollected sdk.Coins, feePool FeePool, proposer ValidatorDistribution, | ||
sumPowerPrecommitValidators, totalBondedTokens, communityTax, | ||
proposerCommissionRate sdk.Dec) { | ||
|
||
feesCollectedDec = MakeDecCoins(feesCollected) | ||
proposerReward = feesCollectedDec * (0.01 + 0.04*sumPowerPrecommitValidators/totalBondedTokens) | ||
|
||
commission = proposerReward * proposerCommissionRate | ||
proposer.PoolCommission += commission | ||
proposer.Pool += proposerReward - commission | ||
|
||
communityFunding = feesCollectedDec * communityTax | ||
feePool.CommunityFund += communityFunding | ||
|
||
poolReceived = feesCollectedDec - proposerReward - communityFunding | ||
feePool.Pool += poolReceived | ||
feePool.EverReceivedPool += poolReceived | ||
feePool.LastReceivedPool = poolReceived | ||
|
||
SetValidatorDistribution(proposer) | ||
SetFeePool(feePool) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
package keeper | ||
|
||
import ( | ||
sdk "github.com/cosmos/cosmos-sdk/types" | ||
"github.com/cosmos/cosmos-sdk/x/distribution/types" | ||
"github.com/cosmos/cosmos-sdk/x/stake" | ||
) | ||
|
||
// get the delegator distribution info | ||
func (k Keeper) GetDelegatorDistInfo(ctx sdk.Context, delAddr sdk.AccAddress, | ||
valOperatorAddr sdk.ValAddress) (ddi types.DelegatorDistInfo) { | ||
|
||
store := ctx.KVStore(k.storeKey) | ||
|
||
b := store.Get(GetDelegationDistInfoKey(delAddr, valOperatorAddr)) | ||
if b == nil { | ||
panic("Stored delegation-distribution info should not have been nil") | ||
} | ||
|
||
k.cdc.MustUnmarshalBinary(b, &ddi) | ||
return | ||
} | ||
|
||
// set the delegator distribution info | ||
func (k Keeper) SetDelegatorDistInfo(ctx sdk.Context, ddi types.DelegatorDistInfo) { | ||
store := ctx.KVStore(k.storeKey) | ||
b := k.cdc.MustMarshalBinary(ddi) | ||
store.Set(GetDelegationDistInfoKey(ddi.DelegatorAddr, ddi.ValOperatorAddr), b) | ||
} | ||
|
||
//___________________________________________________________________________________________ | ||
|
||
// XXX TODO | ||
func (k Keeper) WithdrawDelegationReward(ctx sdk.Context, delegatorAddr, validatorAddr, withdrawAddr sdk.AccAddress) { | ||
height = ctx.BlockHeight() | ||
|
||
// get all distribution scenarios | ||
pool = stake.GetPool() | ||
feePool = GetFeePool() | ||
delInfo = GetDelegationDistInfo(delegatorAddr, | ||
validatorAddr) | ||
valInfo = GetValidatorDistInfo(validatorAddr) | ||
validator = GetValidator(validatorAddr) | ||
|
||
feePool, withdraw = delInfo.WithdrawRewards(feePool, valInfo, height, pool.BondedTokens, | ||
validator.Tokens, validator.DelegatorShares, validator.Commission) | ||
|
||
SetFeePool(feePool) | ||
AddCoins(withdrawAddr, withdraw.TruncateDecimal()) | ||
} | ||
|
||
/////////////////////////////////////////////////////////////////////////////////////// | ||
|
||
// XXX TODO | ||
func (k Keeper) WithdrawDelegationRewardsAll(ctx sdk.Context, delegatorAddr, withdrawAddr sdk.AccAddress) { | ||
height = ctx.BlockHeight() | ||
withdraw = GetDelegatorRewardsAll(delegatorAddr, height) | ||
k.coinsKeeper.AddCoins(withdrawAddr, withdraw.Amount.TruncateDecimal()) | ||
} | ||
|
||
// XXX TODO | ||
func (k Keeper) GetDelegatorRewardsAll(ctx sdk.Context, delAddr sdk.AccAddress, height int64) DecCoins { | ||
|
||
// collect all entitled rewards | ||
withdraw = 0 | ||
pool = stake.GetPool() | ||
feePool = GetFeePool() | ||
|
||
// iterate over all the delegations | ||
operationAtDelegation := func(_ int64, del types.Delegation) (stop bool) { | ||
delInfo = GetDelegationDistInfo(delAddr, del.ValidatorAddr) | ||
valInfo = GetValidatorDistInfo(del.ValidatorAddr) | ||
validator = GetValidator(del.ValidatorAddr) | ||
|
||
feePool, diWithdraw = delInfo.WithdrawRewards(feePool, valInfo, height, pool.BondedTokens, | ||
validator.Tokens, validator.DelegatorShares, validator.Commission) | ||
withdraw += diWithdraw | ||
return false | ||
} | ||
k.stakeKeeper.IterateDelegations(ctx, delAddr, operationAtDelegation) | ||
|
||
SetFeePool(feePool) | ||
return withdraw | ||
} |
Oops, something went wrong.