fix(x/distribution): fully deprecate distribution community pool (#18539)
Co-authored-by: Likhita Polavarapu <78951027+likhita-809@users.noreply.github.com>
This commit is contained in:
parent
71876bb782
commit
7aa5635baa
24
CHANGELOG.md
24
CHANGELOG.md
@ -87,8 +87,6 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
||||
* (x/gov/testutil) [#17986](https://github.com/cosmos/cosmos-sdk/pull/18036) `MsgDeposit` has been removed because of AutoCLI migration.
|
||||
* (x/staking/testutil) [#17986](https://github.com/cosmos/cosmos-sdk/pull/17986) `MsgRedelegateExec`, `MsgUnbondExec` has been removed because of AutoCLI migration.
|
||||
* (x/bank/testutil) [#17868](https://github.com/cosmos/cosmos-sdk/pull/17868) `MsgSendExec` has been removed because of AutoCLI migration.
|
||||
* (x/distribution) [#17657](https://github.com/cosmos/cosmos-sdk/pull/17657) The `FundCommunityPool` and `DistributeFromFeePool` keeper methods are now removed from x/distribution.
|
||||
* (x/distribution) [#17657](https://github.com/cosmos/cosmos-sdk/pull/17657) The distribution module keeper now takes a new argument `PoolKeeper` in addition.
|
||||
* (app) [#17838](https://github.com/cosmos/cosmos-sdk/pull/17838) Params module was removed from simapp and all imports of the params module removed throughout the repo.
|
||||
* The Cosmos SDK has migrated away from using params, if your app still uses it, then you can leave it plugged into your app
|
||||
* (x/staking) [#17778](https://github.com/cosmos/cosmos-sdk/pull/17778) Use collections for `Params`
|
||||
@ -136,8 +134,6 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
||||
* (x/staking) [#17248](https://github.com/cosmos/cosmos-sdk/pull/17248) Use collections for `UnbondingType`.
|
||||
* remove from `types`: `GetUnbondingTypeKey`.
|
||||
* (client) [#17259](https://github.com/cosmos/cosmos-sdk/pull/17259) Remove deprecated `clientCtx.PrintObjectLegacy`. Use `clientCtx.PrintProto` or `clientCtx.PrintRaw` instead.
|
||||
* (x/distribution) [#17115](https://github.com/cosmos/cosmos-sdk/pull/17115) Use collections for `PreviousProposer` and `ValidatorSlashEvents`:
|
||||
* remove from `Keeper`: `GetPreviousProposerConsAddr`, `SetPreviousProposerConsAddr`, `GetValidatorHistoricalReferenceCount`, `GetValidatorSlashEvent`, `SetValidatorSlashEvent`.
|
||||
* (x/feegrant) [#16535](https://github.com/cosmos/cosmos-sdk/pull/16535) Use collections for `FeeAllowance`, `FeeAllowanceQueue`.
|
||||
* (x/staking) [#17063](https://github.com/cosmos/cosmos-sdk/pull/17063) Use collections for `HistoricalInfo`:
|
||||
* remove `Keeper`: `GetHistoricalInfo`, `SetHistoricalInfo`
|
||||
@ -147,19 +143,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
||||
* remove `Keeper`: `SetValidatorSigningInfo`, `GetValidatorSigningInfo`, `IterateValidatorSigningInfos`
|
||||
* (x/staking) [#17026](https://github.com/cosmos/cosmos-sdk/pull/17026) Use collections for `LastTotalPower`:
|
||||
* remove `Keeper`: `SetLastTotalPower`, `GetLastTotalPower`
|
||||
* (x/distribution) [#16440](https://github.com/cosmos/cosmos-sdk/pull/16440) use collections for `DelegatorWithdrawAddresState`:
|
||||
* remove `Keeper`: `SetDelegatorWithdrawAddr`, `DeleteDelegatorWithdrawAddr`, `IterateDelegatorWithdrawAddrs`.
|
||||
* (x/distribution) [#16459](https://github.com/cosmos/cosmos-sdk/pull/16459) use collections for `ValidatorCurrentRewards` state management:
|
||||
* remove `Keeper`: `IterateValidatorCurrentRewards`, `GetValidatorCurrentRewards`, `SetValidatorCurrentRewards`, `DeleteValidatorCurrentRewards`
|
||||
* (x/authz) [#16509](https://github.com/cosmos/cosmos-sdk/pull/16509) `AcceptResponse` has been moved to sdk/types/authz and the `Updated` field is now of the type `sdk.Msg` instead of `authz.Authorization`.
|
||||
* (x/distribution) [#16483](https://github.com/cosmos/cosmos-sdk/pull/16483) use collections for `DelegatorStartingInfo` state management:
|
||||
* remove `Keeper`: `IterateDelegatorStartingInfo`, `GetDelegatorStartingInfo`, `SetDelegatorStartingInfo`, `DeleteDelegatorStartingInfo`, `HasDelegatorStartingInfo`
|
||||
* (x/distribution) [#16571](https://github.com/cosmos/cosmos-sdk/pull/16571) use collections for `ValidatorAccumulatedCommission` state management:
|
||||
* remove `Keeper`: `IterateValidatorAccumulatedCommission`, `GetValidatorAccumulatedCommission`, `SetValidatorAccumulatedCommission`, `DeleteValidatorAccumulatedCommission`
|
||||
* (x/distribution) [#16590](https://github.com/cosmos/cosmos-sdk/pull/16590) use collections for `ValidatorOutstandingRewards` state management:
|
||||
* remove `Keeper`: `IterateValidatorOutstandingRewards`, `GetValidatorOutstandingRewards`, `SetValidatorOutstandingRewards`, `DeleteValidatorOutstandingRewards`
|
||||
* (x/distribution) [#16607](https://github.com/cosmos/cosmos-sdk/pull/16607) use collections for `ValidatorHistoricalRewards` state management:
|
||||
* remove `Keeper`: `IterateValidatorHistoricalRewards`, `GetValidatorHistoricalRewards`, `SetValidatorHistoricalRewards`, `DeleteValidatorHistoricalRewards`, `DeleteValidatorHistoricalReward`, `DeleteAllValidatorHistoricalRewards`
|
||||
* (x/slashing) [#16441](https://github.com/cosmos/cosmos-sdk/pull/16441) Params state is migrated to collections. `GetParams` has been removed.
|
||||
* (types) [#16918](https://github.com/cosmos/cosmos-sdk/pull/16918) Remove `IntProto` and `DecProto`. Instead, `math.Int` and `math.LegacyDec` should be used respectively. Both types support `Marshal` and `Unmarshal` which should be used for binary marshaling.
|
||||
* (client) [#17215](https://github.com/cosmos/cosmos-sdk/pull/17215) `server.StartCmd`,`server.ExportCmd`,`server.NewRollbackCmd`,`pruning.Cmd`,`genutilcli.InitCmd`,`genutilcli.GenTxCmd`,`genutilcli.CollectGenTxsCmd`,`genutilcli.AddGenesisAccountCmd`, do not take a home directory anymore. It is inferred from the root command.
|
||||
@ -171,7 +155,6 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
||||
* (types) [#17426](https://github.com/cosmos/cosmos-sdk/pull/17426) `NewContext` does not take a `cmtproto.Header{}` any longer.
|
||||
* `WithChainID` / `WithBlockHeight` / `WithBlockHeader` must be used to set values on the context
|
||||
* (x/bank) [#17569](https://github.com/cosmos/cosmos-sdk/pull/17569) `BurnCoins` takes an address instead of a module name
|
||||
* (x/distribution) [#17670](https://github.com/cosmos/cosmos-sdk/pull/17670) `AllocateTokens` takes `comet.VoteInfos` instead of `[]abci.VoteInfo`
|
||||
* (types) [#17738](https://github.com/cosmos/cosmos-sdk/pull/17738) `WithBlockTime()` was removed & `BlockTime()` were deprecated in favor of `WithHeaderInfo()` & `HeaderInfo()`. `BlockTime` now gets data from `HeaderInfo()` instead of `BlockHeader()`.
|
||||
* (client) [#17746](https://github.com/cosmos/cosmos-sdk/pull/17746) `txEncodeAmino` & `txDecodeAmino` txs via grpc and rest were removed
|
||||
* `RegisterLegacyAmino` was removed from `AppModuleBasic`
|
||||
@ -195,19 +178,12 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
||||
|
||||
* (server) [#18303](https://github.com/cosmos/cosmos-sdk/pull/18303) `appd export` has moved with other genesis commands, use `appd genesis export` instead.
|
||||
* (x/auth/vesting) [#18100](https://github.com/cosmos/cosmos-sdk/pull/18100) `appd tx vesting create-vesting-account` takes an amount of coin as last argument instead of second. Coins are space separated.
|
||||
* (x/distribution) [#17963](https://github.com/cosmos/cosmos-sdk/pull/17963) `appd tx distribution withdraw-rewards` now only withdraws rewards for the delegator's own delegations. For withdrawing validators commission, use `appd tx distribution withdraw-validator-commission`.
|
||||
|
||||
### State Machine Breaking
|
||||
|
||||
* (x/distribution) [#17657](https://github.com/cosmos/cosmos-sdk/pull/17657) Migrate community pool funds from x/distribution to x/protocolpool.
|
||||
* (x/distribution) [#17115](https://github.com/cosmos/cosmos-sdk/pull/17115) Migrate `PreviousProposer` to collections.
|
||||
* (x/upgrade) [#16244](https://github.com/cosmos/cosmos-sdk/pull/16244) Upgrade module no longer stores the app version but gets and sets the app version stored in the `ParamStore` of baseapp.
|
||||
* (x/staking) [#17655](https://github.com/cosmos/cosmos-sdk/pull/17655) `HistoricalInfo` was replaced with `HistoricalRecord`, it removes the validator set and comet header and only keep what is needed for IBC.
|
||||
|
||||
### Client Breaking Changes
|
||||
|
||||
* (x/distribution) [#17657](https://github.com/cosmos/cosmos-sdk/pull/17657) Deprecate `CommunityPool` and `FundCommunityPool` rpc methods. Use x/protocolpool module's rpc methods instead.
|
||||
|
||||
## [v0.50.1](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.50.1) - 2023-11-07
|
||||
|
||||
> v0.50.0 has been retracted due to a mistake in tagging the release. Please use v0.50.1 instead.
|
||||
|
||||
@ -3703,15 +3703,68 @@ func (x *_FeePool_1_list) IsValid() bool {
|
||||
return x.list != nil
|
||||
}
|
||||
|
||||
var _ protoreflect.List = (*_FeePool_2_list)(nil)
|
||||
|
||||
type _FeePool_2_list struct {
|
||||
list *[]*v1beta1.DecCoin
|
||||
}
|
||||
|
||||
func (x *_FeePool_2_list) Len() int {
|
||||
if x.list == nil {
|
||||
return 0
|
||||
}
|
||||
return len(*x.list)
|
||||
}
|
||||
|
||||
func (x *_FeePool_2_list) Get(i int) protoreflect.Value {
|
||||
return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect())
|
||||
}
|
||||
|
||||
func (x *_FeePool_2_list) Set(i int, value protoreflect.Value) {
|
||||
valueUnwrapped := value.Message()
|
||||
concreteValue := valueUnwrapped.Interface().(*v1beta1.DecCoin)
|
||||
(*x.list)[i] = concreteValue
|
||||
}
|
||||
|
||||
func (x *_FeePool_2_list) Append(value protoreflect.Value) {
|
||||
valueUnwrapped := value.Message()
|
||||
concreteValue := valueUnwrapped.Interface().(*v1beta1.DecCoin)
|
||||
*x.list = append(*x.list, concreteValue)
|
||||
}
|
||||
|
||||
func (x *_FeePool_2_list) AppendMutable() protoreflect.Value {
|
||||
v := new(v1beta1.DecCoin)
|
||||
*x.list = append(*x.list, v)
|
||||
return protoreflect.ValueOfMessage(v.ProtoReflect())
|
||||
}
|
||||
|
||||
func (x *_FeePool_2_list) Truncate(n int) {
|
||||
for i := n; i < len(*x.list); i++ {
|
||||
(*x.list)[i] = nil
|
||||
}
|
||||
*x.list = (*x.list)[:n]
|
||||
}
|
||||
|
||||
func (x *_FeePool_2_list) NewElement() protoreflect.Value {
|
||||
v := new(v1beta1.DecCoin)
|
||||
return protoreflect.ValueOfMessage(v.ProtoReflect())
|
||||
}
|
||||
|
||||
func (x *_FeePool_2_list) IsValid() bool {
|
||||
return x.list != nil
|
||||
}
|
||||
|
||||
var (
|
||||
md_FeePool protoreflect.MessageDescriptor
|
||||
fd_FeePool_community_pool protoreflect.FieldDescriptor
|
||||
fd_FeePool_decimal_pool protoreflect.FieldDescriptor
|
||||
)
|
||||
|
||||
func init() {
|
||||
file_cosmos_distribution_v1beta1_distribution_proto_init()
|
||||
md_FeePool = File_cosmos_distribution_v1beta1_distribution_proto.Messages().ByName("FeePool")
|
||||
fd_FeePool_community_pool = md_FeePool.Fields().ByName("community_pool")
|
||||
fd_FeePool_decimal_pool = md_FeePool.Fields().ByName("decimal_pool")
|
||||
}
|
||||
|
||||
var _ protoreflect.Message = (*fastReflection_FeePool)(nil)
|
||||
@ -3785,6 +3838,12 @@ func (x *fastReflection_FeePool) Range(f func(protoreflect.FieldDescriptor, prot
|
||||
return
|
||||
}
|
||||
}
|
||||
if len(x.DecimalPool) != 0 {
|
||||
value := protoreflect.ValueOfList(&_FeePool_2_list{list: &x.DecimalPool})
|
||||
if !f(fd_FeePool_decimal_pool, value) {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Has reports whether a field is populated.
|
||||
@ -3802,6 +3861,8 @@ func (x *fastReflection_FeePool) Has(fd protoreflect.FieldDescriptor) bool {
|
||||
switch fd.FullName() {
|
||||
case "cosmos.distribution.v1beta1.FeePool.community_pool":
|
||||
return len(x.CommunityPool) != 0
|
||||
case "cosmos.distribution.v1beta1.FeePool.decimal_pool":
|
||||
return len(x.DecimalPool) != 0
|
||||
default:
|
||||
if fd.IsExtension() {
|
||||
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.FeePool"))
|
||||
@ -3820,6 +3881,8 @@ func (x *fastReflection_FeePool) Clear(fd protoreflect.FieldDescriptor) {
|
||||
switch fd.FullName() {
|
||||
case "cosmos.distribution.v1beta1.FeePool.community_pool":
|
||||
x.CommunityPool = nil
|
||||
case "cosmos.distribution.v1beta1.FeePool.decimal_pool":
|
||||
x.DecimalPool = nil
|
||||
default:
|
||||
if fd.IsExtension() {
|
||||
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.FeePool"))
|
||||
@ -3842,6 +3905,12 @@ func (x *fastReflection_FeePool) Get(descriptor protoreflect.FieldDescriptor) pr
|
||||
}
|
||||
listValue := &_FeePool_1_list{list: &x.CommunityPool}
|
||||
return protoreflect.ValueOfList(listValue)
|
||||
case "cosmos.distribution.v1beta1.FeePool.decimal_pool":
|
||||
if len(x.DecimalPool) == 0 {
|
||||
return protoreflect.ValueOfList(&_FeePool_2_list{})
|
||||
}
|
||||
listValue := &_FeePool_2_list{list: &x.DecimalPool}
|
||||
return protoreflect.ValueOfList(listValue)
|
||||
default:
|
||||
if descriptor.IsExtension() {
|
||||
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.FeePool"))
|
||||
@ -3866,6 +3935,10 @@ func (x *fastReflection_FeePool) Set(fd protoreflect.FieldDescriptor, value prot
|
||||
lv := value.List()
|
||||
clv := lv.(*_FeePool_1_list)
|
||||
x.CommunityPool = *clv.list
|
||||
case "cosmos.distribution.v1beta1.FeePool.decimal_pool":
|
||||
lv := value.List()
|
||||
clv := lv.(*_FeePool_2_list)
|
||||
x.DecimalPool = *clv.list
|
||||
default:
|
||||
if fd.IsExtension() {
|
||||
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.FeePool"))
|
||||
@ -3892,6 +3965,12 @@ func (x *fastReflection_FeePool) Mutable(fd protoreflect.FieldDescriptor) protor
|
||||
}
|
||||
value := &_FeePool_1_list{list: &x.CommunityPool}
|
||||
return protoreflect.ValueOfList(value)
|
||||
case "cosmos.distribution.v1beta1.FeePool.decimal_pool":
|
||||
if x.DecimalPool == nil {
|
||||
x.DecimalPool = []*v1beta1.DecCoin{}
|
||||
}
|
||||
value := &_FeePool_2_list{list: &x.DecimalPool}
|
||||
return protoreflect.ValueOfList(value)
|
||||
default:
|
||||
if fd.IsExtension() {
|
||||
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.FeePool"))
|
||||
@ -3908,6 +3987,9 @@ func (x *fastReflection_FeePool) NewField(fd protoreflect.FieldDescriptor) proto
|
||||
case "cosmos.distribution.v1beta1.FeePool.community_pool":
|
||||
list := []*v1beta1.DecCoin{}
|
||||
return protoreflect.ValueOfList(&_FeePool_1_list{list: &list})
|
||||
case "cosmos.distribution.v1beta1.FeePool.decimal_pool":
|
||||
list := []*v1beta1.DecCoin{}
|
||||
return protoreflect.ValueOfList(&_FeePool_2_list{list: &list})
|
||||
default:
|
||||
if fd.IsExtension() {
|
||||
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.FeePool"))
|
||||
@ -3983,6 +4065,12 @@ func (x *fastReflection_FeePool) ProtoMethods() *protoiface.Methods {
|
||||
n += 1 + l + runtime.Sov(uint64(l))
|
||||
}
|
||||
}
|
||||
if len(x.DecimalPool) > 0 {
|
||||
for _, e := range x.DecimalPool {
|
||||
l = options.Size(e)
|
||||
n += 1 + l + runtime.Sov(uint64(l))
|
||||
}
|
||||
}
|
||||
if x.unknownFields != nil {
|
||||
n += len(x.unknownFields)
|
||||
}
|
||||
@ -4012,6 +4100,22 @@ func (x *fastReflection_FeePool) ProtoMethods() *protoiface.Methods {
|
||||
i -= len(x.unknownFields)
|
||||
copy(dAtA[i:], x.unknownFields)
|
||||
}
|
||||
if len(x.DecimalPool) > 0 {
|
||||
for iNdEx := len(x.DecimalPool) - 1; iNdEx >= 0; iNdEx-- {
|
||||
encoded, err := options.Marshal(x.DecimalPool[iNdEx])
|
||||
if err != nil {
|
||||
return protoiface.MarshalOutput{
|
||||
NoUnkeyedLiterals: input.NoUnkeyedLiterals,
|
||||
Buf: input.Buf,
|
||||
}, err
|
||||
}
|
||||
i -= len(encoded)
|
||||
copy(dAtA[i:], encoded)
|
||||
i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded)))
|
||||
i--
|
||||
dAtA[i] = 0x12
|
||||
}
|
||||
}
|
||||
if len(x.CommunityPool) > 0 {
|
||||
for iNdEx := len(x.CommunityPool) - 1; iNdEx >= 0; iNdEx-- {
|
||||
encoded, err := options.Marshal(x.CommunityPool[iNdEx])
|
||||
@ -4111,6 +4215,40 @@ func (x *fastReflection_FeePool) ProtoMethods() *protoiface.Methods {
|
||||
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err
|
||||
}
|
||||
iNdEx = postIndex
|
||||
case 2:
|
||||
if wireType != 2 {
|
||||
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field DecimalPool", wireType)
|
||||
}
|
||||
var msglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
msglen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if msglen < 0 {
|
||||
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength
|
||||
}
|
||||
postIndex := iNdEx + msglen
|
||||
if postIndex < 0 {
|
||||
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength
|
||||
}
|
||||
if postIndex > l {
|
||||
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
|
||||
}
|
||||
x.DecimalPool = append(x.DecimalPool, &v1beta1.DecCoin{})
|
||||
if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.DecimalPool[len(x.DecimalPool)-1]); err != nil {
|
||||
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err
|
||||
}
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := runtime.Skip(dAtA[iNdEx:])
|
||||
@ -6925,12 +7063,15 @@ func (x *ValidatorSlashEvents) GetValidatorSlashEvents() []*ValidatorSlashEvent
|
||||
}
|
||||
|
||||
// FeePool is the global fee pool for distribution.
|
||||
// It holds decimal coins. Once whole those coins can be burned or distributed to the community pool.
|
||||
type FeePool struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
// Deprecated: Do not use.
|
||||
CommunityPool []*v1beta1.DecCoin `protobuf:"bytes,1,rep,name=community_pool,json=communityPool,proto3" json:"community_pool,omitempty"`
|
||||
DecimalPool []*v1beta1.DecCoin `protobuf:"bytes,2,rep,name=decimal_pool,json=decimalPool,proto3" json:"decimal_pool,omitempty"`
|
||||
}
|
||||
|
||||
func (x *FeePool) Reset() {
|
||||
@ -6953,6 +7094,7 @@ func (*FeePool) Descriptor() ([]byte, []int) {
|
||||
return file_cosmos_distribution_v1beta1_distribution_proto_rawDescGZIP(), []int{7}
|
||||
}
|
||||
|
||||
// Deprecated: Do not use.
|
||||
func (x *FeePool) GetCommunityPool() []*v1beta1.DecCoin {
|
||||
if x != nil {
|
||||
return x.CommunityPool
|
||||
@ -6960,6 +7102,13 @@ func (x *FeePool) GetCommunityPool() []*v1beta1.DecCoin {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *FeePool) GetDecimalPool() []*v1beta1.DecCoin {
|
||||
if x != nil {
|
||||
return x.DecimalPool
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// CommunityPoolSpendProposal details a proposal for use of community funds,
|
||||
// together with how many coins are proposed to be spent, and to which
|
||||
// recipient account.
|
||||
@ -7304,92 +7453,99 @@ var file_cosmos_distribution_v1beta1_distribution_proto_rawDesc = []byte{
|
||||
0x74, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x6c, 0x61,
|
||||
0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0,
|
||||
0x2a, 0x01, 0x52, 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x6c, 0x61,
|
||||
0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x88, 0x01, 0x0a, 0x07, 0x46, 0x65, 0x65,
|
||||
0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x7d, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74,
|
||||
0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x80, 0x02, 0x0a, 0x07, 0x46, 0x65, 0x65,
|
||||
0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x7f, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74,
|
||||
0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63,
|
||||
0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74,
|
||||
0x61, 0x31, 0x2e, 0x44, 0x65, 0x63, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x38, 0xc8, 0xde, 0x1f, 0x00,
|
||||
0xaa, 0xdf, 0x1f, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63,
|
||||
0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b,
|
||||
0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0xa8,
|
||||
0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50,
|
||||
0x6f, 0x6f, 0x6c, 0x22, 0x97, 0x02, 0x0a, 0x1a, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74,
|
||||
0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73,
|
||||
0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63,
|
||||
0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64,
|
||||
0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65,
|
||||
0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72,
|
||||
0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x79, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75,
|
||||
0x6e, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f,
|
||||
0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43,
|
||||
0x6f, 0x69, 0x6e, 0x42, 0x46, 0xc8, 0xde, 0x1f, 0x00, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74,
|
||||
0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63,
|
||||
0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e,
|
||||
0x43, 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79,
|
||||
0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f,
|
||||
0x75, 0x6e, 0x74, 0x3a, 0x28, 0x18, 0x01, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0xca,
|
||||
0xb4, 0x2d, 0x1a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x6f, 0x76, 0x2e, 0x76, 0x31,
|
||||
0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0xd4, 0x01,
|
||||
0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74,
|
||||
0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x76, 0x69,
|
||||
0x6f, 0x75, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04,
|
||||
0x52, 0x0e, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64,
|
||||
0x12, 0x4c, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42,
|
||||
0x36, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73,
|
||||
0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63,
|
||||
0x79, 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44,
|
||||
0x65, 0x63, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x05, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x12, 0x44,
|
||||
0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x42, 0x2c,
|
||||
0xea, 0xde, 0x1f, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69,
|
||||
0x67, 0x68, 0x74, 0xa2, 0xe7, 0xb0, 0x2a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x68, 0x65,
|
||||
0x69, 0x67, 0x68, 0x74, 0x22, 0xe1, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x77, 0x61,
|
||||
0x72, 0x64, 0x12, 0x4e, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f,
|
||||
0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x21, 0xd2,
|
||||
0xb4, 0x2d, 0x1d, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
|
||||
0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
|
||||
0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65,
|
||||
0x73, 0x73, 0x12, 0x6e, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03,
|
||||
0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65,
|
||||
0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x63, 0x43, 0x6f, 0x69, 0x6e,
|
||||
0x42, 0x38, 0xc8, 0xde, 0x1f, 0x00, 0xaa, 0xdf, 0x1f, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
|
||||
0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d,
|
||||
0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63,
|
||||
0x43, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61,
|
||||
0x72, 0x64, 0x3a, 0x04, 0x88, 0xa0, 0x1f, 0x00, 0x22, 0xd5, 0x01, 0x0a, 0x25, 0x43, 0x6f, 0x6d,
|
||||
0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x50,
|
||||
0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x70, 0x6f, 0x73,
|
||||
0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63,
|
||||
0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64,
|
||||
0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65,
|
||||
0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72,
|
||||
0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75,
|
||||
0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74,
|
||||
0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x07, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x3a, 0x24, 0x18, 0x01, 0x88, 0xa0,
|
||||
0x1f, 0x00, 0xca, 0xb4, 0x2d, 0x1a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x6f, 0x76,
|
||||
0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
|
||||
0x42, 0x88, 0x02, 0x0a, 0x1f, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e,
|
||||
0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62,
|
||||
0x65, 0x74, 0x61, 0x31, 0x42, 0x11, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x40, 0x63, 0x6f, 0x73, 0x6d, 0x6f,
|
||||
0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d,
|
||||
0x6f, 0x73, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f,
|
||||
0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x44,
|
||||
0x58, 0xaa, 0x02, 0x1b, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72,
|
||||
0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca,
|
||||
0x02, 0x1b, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62,
|
||||
0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x27,
|
||||
0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d,
|
||||
0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1d, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73,
|
||||
0x3a, 0x3a, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a,
|
||||
0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa8, 0xe2, 0x1e, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x33,
|
||||
0x61, 0x31, 0x2e, 0x44, 0x65, 0x63, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x3a, 0x18, 0x01, 0xc8, 0xde,
|
||||
0x1f, 0x00, 0xaa, 0xdf, 0x1f, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
|
||||
0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73,
|
||||
0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x43, 0x6f, 0x69, 0x6e,
|
||||
0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74,
|
||||
0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x74, 0x0a, 0x0c, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c,
|
||||
0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f,
|
||||
0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61,
|
||||
0x31, 0x2e, 0x44, 0x65, 0x63, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x33, 0xc8, 0xde, 0x1f, 0x00, 0xaa,
|
||||
0xdf, 0x1f, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f,
|
||||
0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f,
|
||||
0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x52, 0x0b,
|
||||
0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x97, 0x02, 0x0a, 0x1a,
|
||||
0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65,
|
||||
0x6e, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69,
|
||||
0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65,
|
||||
0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18,
|
||||
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18,
|
||||
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74,
|
||||
0x12, 0x79, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b,
|
||||
0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76,
|
||||
0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x46, 0xc8, 0xde, 0x1f,
|
||||
0x00, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
|
||||
0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64,
|
||||
0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0,
|
||||
0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7,
|
||||
0xb0, 0x2a, 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x28, 0x18, 0x01, 0x88,
|
||||
0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0xca, 0xb4, 0x2d, 0x1a, 0x63, 0x6f, 0x73, 0x6d, 0x6f,
|
||||
0x73, 0x2e, 0x67, 0x6f, 0x76, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f,
|
||||
0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0xd4, 0x01, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61,
|
||||
0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12,
|
||||
0x27, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x69,
|
||||
0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f,
|
||||
0x75, 0x73, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x4c, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x6b,
|
||||
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x36, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f,
|
||||
0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61,
|
||||
0x74, 0x68, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, 0x0a,
|
||||
0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52,
|
||||
0x05, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x12, 0x44, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74,
|
||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x42, 0x2c, 0xea, 0xde, 0x1f, 0x0f, 0x63, 0x72, 0x65, 0x61,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0xa2, 0xe7, 0xb0, 0x2a, 0x0f,
|
||||
0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0xa8,
|
||||
0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xe1, 0x01, 0x0a,
|
||||
0x19, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x67,
|
||||
0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x4e, 0x0a, 0x11, 0x76, 0x61,
|
||||
0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x21, 0xd2, 0xb4, 0x2d, 0x1d, 0x63, 0x6f, 0x73, 0x6d, 0x6f,
|
||||
0x73, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65,
|
||||
0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61,
|
||||
0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x6e, 0x0a, 0x06, 0x72, 0x65,
|
||||
0x77, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x73,
|
||||
0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31,
|
||||
0x2e, 0x44, 0x65, 0x63, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x38, 0xc8, 0xde, 0x1f, 0x00, 0xaa, 0xdf,
|
||||
0x1f, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73,
|
||||
0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74,
|
||||
0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0,
|
||||
0x2a, 0x01, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x3a, 0x04, 0x88, 0xa0, 0x1f, 0x00,
|
||||
0x22, 0xd5, 0x01, 0x0a, 0x25, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f,
|
||||
0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57,
|
||||
0x69, 0x74, 0x68, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69,
|
||||
0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65,
|
||||
0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18,
|
||||
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18,
|
||||
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74,
|
||||
0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x70, 0x6f,
|
||||
0x73, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x70, 0x6f, 0x73,
|
||||
0x69, 0x74, 0x3a, 0x24, 0x18, 0x01, 0x88, 0xa0, 0x1f, 0x00, 0xca, 0xb4, 0x2d, 0x1a, 0x63, 0x6f,
|
||||
0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x6f, 0x76, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31,
|
||||
0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x88, 0x02, 0x0a, 0x1f, 0x63, 0x6f, 0x6d,
|
||||
0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x11, 0x44, 0x69,
|
||||
0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50,
|
||||
0x01, 0x5a, 0x40, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f,
|
||||
0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72,
|
||||
0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b,
|
||||
0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0x62, 0x65,
|
||||
0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x44, 0x58, 0xaa, 0x02, 0x1b, 0x43, 0x6f, 0x73, 0x6d,
|
||||
0x6f, 0x73, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
|
||||
0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x1b, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73,
|
||||
0x5c, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31,
|
||||
0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x27, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x44,
|
||||
0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x62, 0x65,
|
||||
0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea,
|
||||
0x02, 0x1d, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69,
|
||||
0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa8,
|
||||
0xe2, 0x1e, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
@ -7428,13 +7584,14 @@ var file_cosmos_distribution_v1beta1_distribution_proto_depIdxs = []int32{
|
||||
12, // 3: cosmos.distribution.v1beta1.ValidatorOutstandingRewards.rewards:type_name -> cosmos.base.v1beta1.DecCoin
|
||||
5, // 4: cosmos.distribution.v1beta1.ValidatorSlashEvents.validator_slash_events:type_name -> cosmos.distribution.v1beta1.ValidatorSlashEvent
|
||||
12, // 5: cosmos.distribution.v1beta1.FeePool.community_pool:type_name -> cosmos.base.v1beta1.DecCoin
|
||||
13, // 6: cosmos.distribution.v1beta1.CommunityPoolSpendProposal.amount:type_name -> cosmos.base.v1beta1.Coin
|
||||
12, // 7: cosmos.distribution.v1beta1.DelegationDelegatorReward.reward:type_name -> cosmos.base.v1beta1.DecCoin
|
||||
8, // [8:8] is the sub-list for method output_type
|
||||
8, // [8:8] is the sub-list for method input_type
|
||||
8, // [8:8] is the sub-list for extension type_name
|
||||
8, // [8:8] is the sub-list for extension extendee
|
||||
0, // [0:8] is the sub-list for field type_name
|
||||
12, // 6: cosmos.distribution.v1beta1.FeePool.decimal_pool:type_name -> cosmos.base.v1beta1.DecCoin
|
||||
13, // 7: cosmos.distribution.v1beta1.CommunityPoolSpendProposal.amount:type_name -> cosmos.base.v1beta1.Coin
|
||||
12, // 8: cosmos.distribution.v1beta1.DelegationDelegatorReward.reward:type_name -> cosmos.base.v1beta1.DecCoin
|
||||
9, // [9:9] is the sub-list for method output_type
|
||||
9, // [9:9] is the sub-list for method input_type
|
||||
9, // [9:9] is the sub-list for extension type_name
|
||||
9, // [9:9] is the sub-list for extension extendee
|
||||
0, // [0:9] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_cosmos_distribution_v1beta1_distribution_proto_init() }
|
||||
|
||||
@ -115,12 +115,17 @@ message ValidatorSlashEvents {
|
||||
}
|
||||
|
||||
// FeePool is the global fee pool for distribution.
|
||||
// It holds decimal coins. Once whole those coins can be burned or distributed to the community pool.
|
||||
message FeePool {
|
||||
repeated cosmos.base.v1beta1.DecCoin community_pool = 1 [
|
||||
(gogoproto.nullable) = false,
|
||||
(amino.dont_omitempty) = true,
|
||||
(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins"
|
||||
(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins",
|
||||
deprecated = true
|
||||
];
|
||||
|
||||
repeated cosmos.base.v1beta1.DecCoin decimal_pool = 2
|
||||
[(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins"];
|
||||
}
|
||||
|
||||
// CommunityPoolSpendProposal details a proposal for use of community funds,
|
||||
|
||||
@ -126,8 +126,8 @@ func (app *SimApp) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
// donate any unwithdrawn outstanding reward fraction tokens to the community pool
|
||||
scraps, err := app.DistrKeeper.GetValidatorOutstandingRewardsCoins(ctx, valBz)
|
||||
// donate any unwithdrawn outstanding reward tokens to the community pool
|
||||
rewards, err := app.DistrKeeper.GetValidatorOutstandingRewardsCoins(ctx, valBz)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@ -135,7 +135,7 @@ func (app *SimApp) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
feePool.CommunityPool = feePool.CommunityPool.Add(scraps...)
|
||||
feePool.DecimalPool = feePool.DecimalPool.Add(rewards...) // distribution will allocate this to the protocolpool eventually
|
||||
if err := app.DistrKeeper.FeePool.Set(ctx, feePool); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
@ -178,8 +178,6 @@ func TestMsgWithdrawDelegatorReward(t *testing.T) {
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, f.distrKeeper.Params.Set(f.sdkCtx, distrtypes.DefaultParams()))
|
||||
initFeePool, err := f.distrKeeper.FeePool.Get(f.sdkCtx)
|
||||
assert.NilError(t, err)
|
||||
|
||||
delAddr := sdk.AccAddress(PKS[1].Address())
|
||||
valConsAddr := sdk.ConsAddress(valConsPk0.Address())
|
||||
@ -228,8 +226,6 @@ func TestMsgWithdrawDelegatorReward(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
err = f.distrKeeper.ValidatorOutstandingRewards.Set(f.sdkCtx, f.valAddr, distrtypes.ValidatorOutstandingRewards{Rewards: valCommission})
|
||||
require.NoError(t, err)
|
||||
initOutstandingRewards, err := f.distrKeeper.GetValidatorOutstandingRewardsCoins(f.sdkCtx, f.valAddr)
|
||||
assert.NilError(t, err)
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
@ -324,13 +320,6 @@ func TestMsgWithdrawDelegatorReward(t *testing.T) {
|
||||
// check current balance is greater than initial balance
|
||||
curBalance := f.bankKeeper.GetAllBalances(f.sdkCtx, sdk.AccAddress(f.valAddr))
|
||||
assert.Assert(t, initBalance.IsAllLTE(curBalance))
|
||||
|
||||
// check rewards
|
||||
curFeePool, _ := f.distrKeeper.FeePool.Get(f.sdkCtx)
|
||||
rewards := curFeePool.GetCommunityPool().Sub(initFeePool.CommunityPool)
|
||||
curOutstandingRewards, err := f.distrKeeper.ValidatorOutstandingRewards.Get(f.sdkCtx, f.valAddr)
|
||||
assert.NilError(t, err)
|
||||
assert.DeepEqual(t, rewards, initOutstandingRewards.Sub(curOutstandingRewards.Rewards))
|
||||
}
|
||||
|
||||
prevProposerConsAddr, err := f.distrKeeper.PreviousProposer.Get(f.sdkCtx)
|
||||
|
||||
64
x/distribution/CHANGELOG.md
Normal file
64
x/distribution/CHANGELOG.md
Normal file
@ -0,0 +1,64 @@
|
||||
<!--
|
||||
Guiding Principles:
|
||||
Changelogs are for humans, not machines.
|
||||
There should be an entry for every single version.
|
||||
The same types of changes should be grouped.
|
||||
Versions and sections should be linkable.
|
||||
The latest version comes first.
|
||||
The release date of each version is displayed.
|
||||
Mention whether you follow Semantic Versioning.
|
||||
Usage:
|
||||
Change log entries are to be added to the Unreleased section under the
|
||||
appropriate stanza (see below). Each entry should ideally include a tag and
|
||||
the Github issue reference in the following format:
|
||||
* (<tag>) [#<issue-number>] Changelog message.
|
||||
Types of changes (Stanzas):
|
||||
"Features" for new features.
|
||||
"Improvements" for changes in existing functionality.
|
||||
"Deprecated" for soon-to-be removed features.
|
||||
"Bug Fixes" for any bug fixes.
|
||||
"API Breaking" for breaking exported APIs used by developers building on SDK.
|
||||
Ref: https://keepachangelog.com/en/1.0.0/
|
||||
-->
|
||||
|
||||
# Changelog
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Features
|
||||
|
||||
*
|
||||
|
||||
### API Breaking Changes
|
||||
|
||||
* [#17115](https://github.com/cosmos/cosmos-sdk/pull/17115) Use collections for `PreviousProposer` and `ValidatorSlashEvents`:
|
||||
* remove from `Keeper`: `GetPreviousProposerConsAddr`, `SetPreviousProposerConsAddr`, `GetValidatorHistoricalReferenceCount`, `GetValidatorSlashEvent`, `SetValidatorSlashEvent`.
|
||||
* [#16483](https://github.com/cosmos/cosmos-sdk/pull/16483) use collections for `DelegatorStartingInfo` state management:
|
||||
* remove `Keeper`: `IterateDelegatorStartingInfo`, `GetDelegatorStartingInfo`, `SetDelegatorStartingInfo`, `DeleteDelegatorStartingInfo`, `HasDelegatorStartingInfo`
|
||||
* [#16571](https://github.com/cosmos/cosmos-sdk/pull/16571) use collections for `ValidatorAccumulatedCommission` state management:
|
||||
* remove `Keeper`: `IterateValidatorAccumulatedCommission`, `GetValidatorAccumulatedCommission`, `SetValidatorAccumulatedCommission`, `DeleteValidatorAccumulatedCommission`
|
||||
* [#16590](https://github.com/cosmos/cosmos-sdk/pull/16590) use collections for `ValidatorOutstandingRewards` state management:
|
||||
* remove `Keeper`: `IterateValidatorOutstandingRewards`, `GetValidatorOutstandingRewards`, `SetValidatorOutstandingRewards`, `DeleteValidatorOutstandingRewards`
|
||||
* [#16607](https://github.com/cosmos/cosmos-sdk/pull/16607) use collections for `ValidatorHistoricalRewards` state management:
|
||||
* remove `Keeper`: `IterateValidatorHistoricalRewards`, `GetValidatorHistoricalRewards`, `SetValidatorHistoricalRewards`, `DeleteValidatorHistoricalRewards`, `DeleteValidatorHistoricalReward`, `DeleteAllValidatorHistoricalRewards`
|
||||
* [#17657](https://github.com/cosmos/cosmos-sdk/pull/17657) The `FundCommunityPool` and `DistributeFromFeePool` keeper methods are now removed from x/distribution.
|
||||
* [#16440](https://github.com/cosmos/cosmos-sdk/pull/16440) use collections for `DelegatorWithdrawAddresState`:
|
||||
* remove `Keeper`: `SetDelegatorWithdrawAddr`, `DeleteDelegatorWithdrawAddr`, `IterateDelegatorWithdrawAddrs`.
|
||||
* [#16459](https://github.com/cosmos/cosmos-sdk/pull/16459) use collections for `ValidatorCurrentRewards` state management:
|
||||
* remove `Keeper`: `IterateValidatorCurrentRewards`, `GetValidatorCurrentRewards`, `SetValidatorCurrentRewards`, `DeleteValidatorCurrentRewards`
|
||||
* [#17657](https://github.com/cosmos/cosmos-sdk/pull/17657) The distribution module keeper now takes a new argument `PoolKeeper` in addition.
|
||||
* [#17670](https://github.com/cosmos/cosmos-sdk/pull/17670) `AllocateTokens` takes `comet.VoteInfos` instead of `[]abci.VoteInfo`
|
||||
|
||||
### CLI Breaking Changes
|
||||
|
||||
* [#17963](https://github.com/cosmos/cosmos-sdk/pull/17963) `appd tx distribution withdraw-rewards` now only withdraws rewards for the delegator's own delegations. For withdrawing validators commission, use `appd tx distribution withdraw-validator-commission`.
|
||||
|
||||
### State Machine Breaking
|
||||
|
||||
* [#17657](https://github.com/cosmos/cosmos-sdk/pull/17657) Migrate community pool funds from `x/distribution` to `x/protocolpool`.
|
||||
* [#17115](https://github.com/cosmos/cosmos-sdk/pull/17115) Migrate `PreviousProposer` to collections.
|
||||
* [#18539](https://github.com/cosmos/cosmos-sdk/pull/18539) Introduce `FeePool.DecimalPool` to replace `FeePool.CommunityPool`, which temporarily holds fractional rewards until they are distributed to the community pool every 1000 blocks.
|
||||
|
||||
### Client Breaking Changes
|
||||
|
||||
* [#17657](https://github.com/cosmos/cosmos-sdk/pull/17657) Deprecate `CommunityPool` and `FundCommunityPool` rpc methods. Use `x/protocolpool` module's rpc methods instead.
|
||||
@ -43,7 +43,7 @@ and delegators to independently and lazily withdraw their rewards.
|
||||
|
||||
As a part of the lazy computations, each delegator holds an accumulation term
|
||||
specific to each validator which is used to estimate what their approximate
|
||||
fair portion of tokens held in the global fee pool is owed to them.
|
||||
fair portion of tokens held in the fee pool is owed to them.
|
||||
|
||||
```text
|
||||
entitlement = delegator-accumulation / all-delegators-accumulation
|
||||
@ -81,7 +81,6 @@ to set up a script to periodically withdraw and rebond rewards.
|
||||
|
||||
* [Concepts](#concepts)
|
||||
* [State](#state)
|
||||
* [FeePool](#feepool)
|
||||
* [Validator Distribution](#validator-distribution)
|
||||
* [Delegation Distribution](#delegation-distribution)
|
||||
* [Params](#params)
|
||||
@ -129,14 +128,9 @@ count is decremented. If the reference count hits zero, the historical record is
|
||||
|
||||
### FeePool
|
||||
|
||||
All globally tracked parameters for distribution are stored within
|
||||
`FeePool`. Rewards are collected and added to the reward pool and
|
||||
distributed to validators/delegators from here.
|
||||
The `FeePool` is used to store decimal rewards to allow for fractions of coins to be received from operations like inflation.
|
||||
|
||||
Note that the reward pool holds decimal coins (`DecCoins`) to allow
|
||||
for fractions of coins to be received from operations like inflation.
|
||||
When coins are distributed from the pool they are truncated back to
|
||||
`sdk.Coins` which are non-decimal.
|
||||
Once those rewards are big enough, they are sent as `sdk.Coins` to the community pool.
|
||||
|
||||
* FeePool: `0x00 -> ProtocolBuffer(FeePool)`
|
||||
|
||||
@ -150,10 +144,6 @@ type DecCoin struct {
|
||||
}
|
||||
```
|
||||
|
||||
```protobuf reference
|
||||
https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/distribution/v1beta1/distribution.proto#L116-L123
|
||||
```
|
||||
|
||||
### Validator Distribution
|
||||
|
||||
Validator distribution information for the relevant validator is updated each time:
|
||||
@ -218,12 +208,12 @@ inflationary rewards to the stake. All fees are collected in a specific module
|
||||
account during the block. During `BeginBlock`, they are sent to the
|
||||
`"distribution"` `ModuleAccount`. No other sending of tokens occurs. Instead, the
|
||||
rewards each account is entitled to are stored, and withdrawals can be triggered
|
||||
through the messages `FundCommunityPool`, `WithdrawValidatorCommission` and
|
||||
through the messages `WithdrawValidatorCommission` and
|
||||
`WithdrawDelegatorReward`.
|
||||
|
||||
#### Reward to the Community Pool
|
||||
|
||||
The community pool gets `community_tax * fees`, plus any remaining dust after
|
||||
The community pool (x/protocolpool) gets `community_tax * fees`, plus any remaining dust after
|
||||
validators get their rewards that are always rounded down to the nearest
|
||||
integer value.
|
||||
|
||||
@ -287,15 +277,15 @@ https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/distribution/
|
||||
|
||||
```go
|
||||
func (k Keeper) SetWithdrawAddr(ctx context.Context, delegatorAddr sdk.AccAddress, withdrawAddr sdk.AccAddress) error
|
||||
if k.blockedAddrs[withdrawAddr.String()] {
|
||||
fail with "`{withdrawAddr}` is not allowed to receive external funds"
|
||||
}
|
||||
if k.blockedAddrs[withdrawAddr.String()] {
|
||||
fail with "`{withdrawAddr}` is not allowed to receive external funds"
|
||||
}
|
||||
|
||||
if !k.GetWithdrawAddrEnabled(ctx) {
|
||||
fail with `ErrSetWithdrawAddrDisabled`
|
||||
}
|
||||
if !k.GetWithdrawAddrEnabled(ctx) {
|
||||
fail with `ErrSetWithdrawAddrDisabled`
|
||||
}
|
||||
|
||||
k.SetDelegatorWithdrawAddr(ctx, delegatorAddr, withdrawAddr)
|
||||
k.SetDelegatorWithdrawAddr(ctx, delegatorAddr, withdrawAddr)
|
||||
```
|
||||
|
||||
### MsgWithdrawDelegatorReward
|
||||
@ -344,33 +334,6 @@ The commission is calculated in every block during `BeginBlock`, so no iteration
|
||||
The amount withdrawn is deducted from the `ValidatorOutstandingRewards` variable for the validator.
|
||||
Only integer amounts can be sent. If the accumulated awards have decimals, the amount is truncated before the withdrawal is sent, and the remainder is left to be withdrawn later.
|
||||
|
||||
### FundCommunityPool
|
||||
|
||||
This message sends coins directly from the sender to the community pool.
|
||||
|
||||
The transaction fails if the amount cannot be transferred from the sender to the distribution module account.
|
||||
|
||||
```go
|
||||
func (k Keeper) FundCommunityPool(ctx context.Context, amount sdk.Coins, sender sdk.AccAddress) error {
|
||||
if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, sender, types.ModuleName, amount); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
feePool, err := k.FeePool.Get(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
feePool.CommunityPool = feePool.CommunityPool.Add(sdk.NewDecCoinsFromCoins(amount...)...)
|
||||
|
||||
if err := k.FeePool.Set(ctx, feePool); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
```
|
||||
|
||||
### Common distribution operations
|
||||
|
||||
These operations take place during many different messages.
|
||||
@ -386,17 +349,17 @@ func (k Keeper) initializeDelegation(ctx context.Context, val sdk.ValAddress, de
|
||||
// period has already been incremented - we want to store the period ended by this delegation action
|
||||
previousPeriod := k.GetValidatorCurrentRewards(ctx, val).Period - 1
|
||||
|
||||
// increment reference count for the period we're going to track
|
||||
k.incrementReferenceCount(ctx, val, previousPeriod)
|
||||
// increment reference count for the period we're going to track
|
||||
k.incrementReferenceCount(ctx, val, previousPeriod)
|
||||
|
||||
validator := k.stakingKeeper.Validator(ctx, val)
|
||||
delegation := k.stakingKeeper.Delegation(ctx, del, val)
|
||||
validator := k.stakingKeeper.Validator(ctx, val)
|
||||
delegation := k.stakingKeeper.Delegation(ctx, del, val)
|
||||
|
||||
// calculate delegation stake in tokens
|
||||
// we don't store directly, so multiply delegation shares * (tokens per share)
|
||||
// note: necessary to truncate so we don't allow withdrawing more rewards than owed
|
||||
stake := validator.TokensFromSharesTruncated(delegation.GetShares())
|
||||
k.SetDelegatorStartingInfo(ctx, val, del, types.NewDelegatorStartingInfo(previousPeriod, stake, uint64(ctx.BlockHeight())))
|
||||
// calculate delegation stake in tokens
|
||||
// we don't store directly, so multiply delegation shares * (tokens per share)
|
||||
// note: necessary to truncate so we don't allow withdrawing more rewards than owed
|
||||
stake := validator.TokensFromSharesTruncated(delegation.GetShares())
|
||||
k.SetDelegatorStartingInfo(ctx, val, del, types.NewDelegatorStartingInfo(previousPeriod, stake, uint64(ctx.BlockHeight())))
|
||||
}
|
||||
```
|
||||
|
||||
@ -452,7 +415,7 @@ By default, all values are set to a `0`, except period, which is set to `1`.
|
||||
* triggered-by: `staking.RemoveValidator`
|
||||
|
||||
Outstanding commission is sent to the validator's self-delegation withdrawal address.
|
||||
Remaining delegator rewards get sent to the community fee pool.
|
||||
Remaining delegator rewards get sent to the community pool.
|
||||
|
||||
Note: The validator gets removed only when it has no remaining delegations.
|
||||
At that time, all outstanding delegator rewards will have been withdrawn.
|
||||
@ -525,13 +488,12 @@ The distribution module contains the following parameters:
|
||||
* `baseproposerreward` and `bonusproposerreward` were parameters that are deprecated in v0.47 and are not used.
|
||||
|
||||
:::note
|
||||
The reserve pool is the pool of collected funds for use by governance taken via the `CommunityTax`.
|
||||
Currently with the Cosmos SDK, tokens collected by the CommunityTax are accounted for but unspendable.
|
||||
The community tax is collected and sent to the community pool (x/protocolpool).
|
||||
:::
|
||||
|
||||
## Client
|
||||
|
||||
## CLI
|
||||
### CLI
|
||||
|
||||
A user can query and interact with the `distribution` module using the CLI.
|
||||
|
||||
@ -565,28 +527,6 @@ commission:
|
||||
denom: stake
|
||||
```
|
||||
|
||||
##### community-pool
|
||||
|
||||
The `community-pool` command allows users to query all coin balances within the community pool.
|
||||
|
||||
```shell
|
||||
simd query distribution community-pool [flags]
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```shell
|
||||
simd query distribution community-pool
|
||||
```
|
||||
|
||||
Example Output:
|
||||
|
||||
```yml
|
||||
pool:
|
||||
- amount: "1000000.000000000000000000"
|
||||
denom: stake
|
||||
```
|
||||
|
||||
##### params
|
||||
|
||||
The `params` command allows users to query the parameters of the `distribution` module.
|
||||
@ -688,7 +628,7 @@ rewards:
|
||||
|
||||
The `validator-distribution-info` command allows users to query validator commission and self-delegation rewards for validator.
|
||||
|
||||
````shell
|
||||
```shell
|
||||
simd query distribution validator-distribution-info cosmosvaloper1...
|
||||
```
|
||||
|
||||
@ -712,20 +652,6 @@ The `tx` commands allow users to interact with the `distribution` module.
|
||||
simd tx distribution --help
|
||||
```
|
||||
|
||||
##### fund-community-pool
|
||||
|
||||
The `fund-community-pool` command allows users to send funds to the community pool.
|
||||
|
||||
```shell
|
||||
simd tx distribution fund-community-pool [amount] [flags]
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```shell
|
||||
simd tx distribution fund-community-pool 100stake --from cosmos1...
|
||||
```
|
||||
|
||||
##### set-withdraw-addr
|
||||
|
||||
The `set-withdraw-addr` command allows users to set the withdraw address for rewards associated with a delegator address.
|
||||
@ -1022,28 +948,3 @@ Example Output:
|
||||
"withdrawAddress": "cosmos1..."
|
||||
}
|
||||
```
|
||||
|
||||
#### CommunityPool
|
||||
|
||||
The `CommunityPool` endpoint allows users to query the community pool coins.
|
||||
|
||||
Example:
|
||||
|
||||
```shell
|
||||
grpcurl -plaintext \
|
||||
localhost:9090 \
|
||||
cosmos.distribution.v1beta1.Query/CommunityPool
|
||||
```
|
||||
|
||||
Example Output:
|
||||
|
||||
```json
|
||||
{
|
||||
"pool": [
|
||||
{
|
||||
"denom": "stake",
|
||||
"amount": "1000000000000000000"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
@ -32,6 +32,8 @@ require (
|
||||
gotest.tools/v3 v3.5.1
|
||||
)
|
||||
|
||||
require golang.org/x/sync v0.5.0 // indirect
|
||||
|
||||
require (
|
||||
cosmossdk.io/x/auth v0.0.0-00010101000000-000000000000
|
||||
cosmossdk.io/x/tx v0.12.0 // indirect
|
||||
@ -145,7 +147,6 @@ require (
|
||||
golang.org/x/crypto v0.16.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20231127185646-65229373498e // indirect
|
||||
golang.org/x/net v0.19.0 // indirect
|
||||
golang.org/x/sync v0.5.0 // indirect
|
||||
golang.org/x/sys v0.15.0 // indirect
|
||||
golang.org/x/term v0.15.0 // indirect
|
||||
golang.org/x/text v0.14.0 // indirect
|
||||
|
||||
@ -1,9 +1,8 @@
|
||||
package distribution
|
||||
package keeper
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"cosmossdk.io/x/distribution/keeper"
|
||||
"cosmossdk.io/x/distribution/types"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/telemetry"
|
||||
@ -12,7 +11,7 @@ import (
|
||||
|
||||
// BeginBlocker sets the proposer for determining distribution during endblock
|
||||
// and distribute rewards for the previous block.
|
||||
func BeginBlocker(ctx sdk.Context, k keeper.Keeper) error {
|
||||
func (k Keeper) BeginBlocker(ctx sdk.Context) error {
|
||||
defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyBeginBlocker)
|
||||
|
||||
// determine the total power signing the block
|
||||
@ -27,6 +26,13 @@ func BeginBlocker(ctx sdk.Context, k keeper.Keeper) error {
|
||||
if err := k.AllocateTokens(ctx, previousTotalPower, ctx.CometInfo().LastCommit.Votes); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// every 1000 blocks send whole coins from decimal pool to community pool
|
||||
if ctx.BlockHeight()%1000 == 0 {
|
||||
if err := k.sendDecimalPoolToCommunityPool(ctx); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// record the proposer for when we payout on the next block
|
||||
@ -24,21 +24,19 @@ func (k Keeper) AllocateTokens(ctx context.Context, totalPreviousPower int64, bo
|
||||
feesCollected := sdk.NewDecCoinsFromCoins(feesCollectedInt...)
|
||||
|
||||
// transfer collected fees to the distribution module account
|
||||
err := k.bankKeeper.SendCoinsFromModuleToModule(ctx, k.feeCollectorName, types.ModuleName, feesCollectedInt)
|
||||
if err != nil {
|
||||
if err := k.bankKeeper.SendCoinsFromModuleToModule(ctx, k.feeCollectorName, types.ModuleName, feesCollectedInt); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// temporary workaround to keep CanWithdrawInvariant happy
|
||||
// general discussions here: https://github.com/cosmos/cosmos-sdk/issues/2906#issuecomment-441867634
|
||||
feePool, err := k.FeePool.Get(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if totalPreviousPower == 0 {
|
||||
feePool.CommunityPool = feePool.CommunityPool.Add(feesCollected...)
|
||||
return k.FeePool.Set(ctx, feePool)
|
||||
if err := k.FeePool.Set(ctx, types.FeePool{DecimalPool: feePool.DecimalPool.Add(feesCollected...)}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// calculate fraction allocated to validators
|
||||
@ -69,17 +67,23 @@ func (k Keeper) AllocateTokens(ctx context.Context, totalPreviousPower int64, bo
|
||||
powerFraction := math.LegacyNewDec(vote.Validator.Power).QuoTruncate(math.LegacyNewDec(totalPreviousPower))
|
||||
reward := feeMultiplier.MulDecTruncate(powerFraction)
|
||||
|
||||
err = k.AllocateTokensToValidator(ctx, validator, reward)
|
||||
if err != nil {
|
||||
if err = k.AllocateTokensToValidator(ctx, validator, reward); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
remaining = remaining.Sub(reward)
|
||||
}
|
||||
// send to community pool and set remainder in fee pool
|
||||
amt, re := remaining.TruncateDecimal()
|
||||
if err := k.bankKeeper.SendCoinsFromModuleToModule(ctx, types.ModuleName, types.ProtocolPoolModuleName, amt); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// allocate community funding
|
||||
feePool.CommunityPool = feePool.CommunityPool.Add(remaining...)
|
||||
return k.FeePool.Set(ctx, feePool)
|
||||
if err := k.FeePool.Set(ctx, types.FeePool{DecimalPool: feePool.DecimalPool.Add(re...)}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// AllocateTokensToValidator allocate tokens to a particular validator,
|
||||
@ -144,3 +148,23 @@ func (k Keeper) AllocateTokensToValidator(ctx context.Context, val stakingtypes.
|
||||
outstanding.Rewards = outstanding.Rewards.Add(tokens...)
|
||||
return k.ValidatorOutstandingRewards.Set(ctx, valBz, outstanding)
|
||||
}
|
||||
|
||||
// sendDecimalPoolToCommunityPool sends the decimal pool to the community pool
|
||||
// Any remainer stays in the decimal pool
|
||||
func (k Keeper) sendDecimalPoolToCommunityPool(ctx context.Context) error {
|
||||
feePool, err := k.FeePool.Get(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if feePool.DecimalPool.IsZero() {
|
||||
return nil
|
||||
}
|
||||
|
||||
amt, re := feePool.DecimalPool.TruncateDecimal()
|
||||
if err := k.bankKeeper.SendCoinsFromModuleToModule(ctx, types.ModuleName, types.ProtocolPoolModuleName, amt); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return k.FeePool.Set(ctx, types.FeePool{DecimalPool: re})
|
||||
}
|
||||
|
||||
@ -150,7 +150,7 @@ func TestAllocateTokensToManyValidators(t *testing.T) {
|
||||
|
||||
feePool, err := distrKeeper.FeePool.Get(ctx)
|
||||
require.NoError(t, err)
|
||||
require.True(t, feePool.CommunityPool.IsZero())
|
||||
require.True(t, feePool.DecimalPool.IsZero())
|
||||
|
||||
_, err = distrKeeper.ValidatorsAccumulatedCommission.Get(ctx, valAddr0)
|
||||
require.ErrorIs(t, err, collections.ErrNotFound)
|
||||
@ -168,6 +168,7 @@ func TestAllocateTokensToManyValidators(t *testing.T) {
|
||||
fees := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, math.NewInt(100)))
|
||||
bankKeeper.EXPECT().GetAllBalances(gomock.Any(), feeCollectorAcc.GetAddress()).Return(fees)
|
||||
bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), "fee_collector", disttypes.ModuleName, fees)
|
||||
bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), disttypes.ModuleName, disttypes.ProtocolPoolModuleName, sdk.Coins{{Denom: sdk.DefaultBondDenom, Amount: math.NewInt(2)}}) // 2 community pool coins
|
||||
|
||||
votes := []comet.VoteInfo{
|
||||
{
|
||||
@ -189,10 +190,9 @@ func TestAllocateTokensToManyValidators(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: math.LegacyNewDecWithPrec(490, 1)}}, val1OutstandingRewards.Rewards)
|
||||
|
||||
// 2 community pool coins
|
||||
feePool, err = distrKeeper.FeePool.Get(ctx)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: math.LegacyNewDec(2)}}, feePool.CommunityPool)
|
||||
require.True(t, feePool.DecimalPool.IsZero())
|
||||
|
||||
// 50% commission for first proposer, (0.5 * 98%) * 100 / 2 = 23.25
|
||||
val0Commission, err := distrKeeper.ValidatorsAccumulatedCommission.Get(ctx, valAddr0)
|
||||
@ -291,7 +291,7 @@ func TestAllocateTokensTruncation(t *testing.T) {
|
||||
|
||||
feePool, err := distrKeeper.FeePool.Get(ctx)
|
||||
require.NoError(t, err)
|
||||
require.True(t, feePool.CommunityPool.IsZero())
|
||||
require.True(t, feePool.DecimalPool.IsZero())
|
||||
|
||||
_, err = distrKeeper.ValidatorsAccumulatedCommission.Get(ctx, valAddr0)
|
||||
require.ErrorIs(t, err, collections.ErrNotFound)
|
||||
@ -309,6 +309,7 @@ func TestAllocateTokensTruncation(t *testing.T) {
|
||||
fees := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, math.NewInt(634195840)))
|
||||
bankKeeper.EXPECT().GetAllBalances(gomock.Any(), feeCollectorAcc.GetAddress()).Return(fees)
|
||||
bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), "fee_collector", disttypes.ModuleName, fees)
|
||||
bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), disttypes.ModuleName, disttypes.ProtocolPoolModuleName, gomock.Any()) // something is sent to community pool
|
||||
|
||||
votes := []comet.VoteInfo{
|
||||
{
|
||||
|
||||
@ -248,7 +248,7 @@ func (k Keeper) withdrawDelegationRewards(ctx context.Context, val stakingtypes.
|
||||
)
|
||||
}
|
||||
|
||||
// truncate reward dec coins, return remainder to community pool
|
||||
// truncate reward dec coins, return remainder to decimal pool
|
||||
finalRewards, remainder := rewards.TruncateDecimal()
|
||||
|
||||
// add coins to user account
|
||||
@ -264,10 +264,8 @@ func (k Keeper) withdrawDelegationRewards(ctx context.Context, val stakingtypes.
|
||||
}
|
||||
}
|
||||
|
||||
// update the outstanding rewards and the community pool only if the
|
||||
// transaction was successful
|
||||
err = k.ValidatorOutstandingRewards.Set(ctx, sdk.ValAddress(valAddr), types.ValidatorOutstandingRewards{Rewards: outstanding.Sub(rewards)})
|
||||
if err != nil {
|
||||
// update the outstanding rewards and the decimal pool only if the transaction was successful
|
||||
if err := k.ValidatorOutstandingRewards.Set(ctx, sdk.ValAddress(valAddr), types.ValidatorOutstandingRewards{Rewards: outstanding.Sub(rewards)}); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@ -276,7 +274,7 @@ func (k Keeper) withdrawDelegationRewards(ctx context.Context, val stakingtypes.
|
||||
return nil, err
|
||||
}
|
||||
|
||||
feePool.CommunityPool = feePool.CommunityPool.Add(remainder...)
|
||||
feePool.DecimalPool = feePool.DecimalPool.Add(remainder...)
|
||||
err = k.FeePool.Set(ctx, feePool)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
@ -14,8 +14,7 @@ import (
|
||||
func (k Keeper) InitGenesis(ctx context.Context, data types.GenesisState) {
|
||||
var moduleHoldings sdk.DecCoins
|
||||
|
||||
err := k.FeePool.Set(ctx, data.FeePool)
|
||||
if err != nil {
|
||||
if err := k.FeePool.Set(ctx, data.FeePool); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
@ -47,7 +46,7 @@ func (k Keeper) InitGenesis(ctx context.Context, data types.GenesisState) {
|
||||
}
|
||||
}
|
||||
|
||||
if err = k.PreviousProposer.Set(ctx, previousProposer); err != nil {
|
||||
if err := k.PreviousProposer.Set(ctx, previousProposer); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
@ -128,7 +127,7 @@ func (k Keeper) InitGenesis(ctx context.Context, data types.GenesisState) {
|
||||
}
|
||||
}
|
||||
|
||||
moduleHoldings = moduleHoldings.Add(data.FeePool.CommunityPool...)
|
||||
moduleHoldings = moduleHoldings.Add(data.FeePool.DecimalPool...)
|
||||
moduleHoldingsInt, _ := moduleHoldings.TruncateDecimal()
|
||||
|
||||
// check if the module account exists
|
||||
|
||||
@ -56,13 +56,13 @@ func (h Hooks) AfterValidatorRemoved(ctx context.Context, _ sdk.ConsAddress, val
|
||||
// split into integral & remainder
|
||||
coins, remainder := commission.TruncateDecimal()
|
||||
|
||||
// remainder to community pool
|
||||
// remainder to decimal pool
|
||||
feePool, err := h.k.FeePool.Get(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
feePool.CommunityPool = feePool.CommunityPool.Add(remainder...)
|
||||
feePool.DecimalPool = feePool.DecimalPool.Add(remainder...)
|
||||
err = h.k.FeePool.Set(ctx, feePool)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -82,15 +82,15 @@ func (h Hooks) AfterValidatorRemoved(ctx context.Context, _ sdk.ConsAddress, val
|
||||
}
|
||||
}
|
||||
|
||||
// Add outstanding to community pool
|
||||
// Add outstanding to decimal pool
|
||||
// The validator is removed only after it has no more delegations.
|
||||
// This operation sends only the remaining dust to the community pool.
|
||||
// This operation sends only the remaining dust to the decimal pool.
|
||||
feePool, err := h.k.FeePool.Get(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
feePool.CommunityPool = feePool.CommunityPool.Add(outstanding...)
|
||||
feePool.DecimalPool = feePool.DecimalPool.Add(outstanding...)
|
||||
err = h.k.FeePool.Set(ctx, feePool)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@ -196,16 +196,9 @@ func ModuleAccountInvariant(k Keeper) sdk.Invariant {
|
||||
return sdk.FormatInvariant(types.ModuleName, "module account coins", err.Error()), true
|
||||
}
|
||||
|
||||
communityPool, err := k.FeePool.Get(ctx)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
expectedInt, _ := expectedCoins.Add(communityPool.CommunityPool...).TruncateDecimal()
|
||||
|
||||
macc := k.GetDistributionAccount(ctx)
|
||||
balances := k.bankKeeper.GetAllBalances(ctx, macc.GetAddress())
|
||||
expectedInt, _ := expectedCoins.TruncateDecimal()
|
||||
|
||||
balances := k.bankKeeper.GetAllBalances(ctx, k.GetDistributionAccount(ctx).GetAddress())
|
||||
broken := !balances.Equal(expectedInt)
|
||||
return sdk.FormatInvariant(
|
||||
types.ModuleName, "ModuleAccount coins",
|
||||
|
||||
@ -25,14 +25,16 @@ type Keeper struct {
|
||||
authKeeper types.AccountKeeper
|
||||
bankKeeper types.BankKeeper
|
||||
stakingKeeper types.StakingKeeper
|
||||
poolKeeper types.PoolKeeper // TODO: Needs to be removed in v0.53
|
||||
poolKeeper types.PoolKeeper
|
||||
|
||||
// the address capable of executing a MsgUpdateParams message. Typically, this
|
||||
// should be the x/gov module account.
|
||||
authority string
|
||||
|
||||
Schema collections.Schema
|
||||
Params collections.Item[types.Params]
|
||||
Schema collections.Schema
|
||||
Params collections.Item[types.Params]
|
||||
// FeePool stores decimal tokens that cannot be yet distributed.
|
||||
// In the past it held the community pool, but it has been replaced by x/protocolpool.
|
||||
FeePool collections.Item[types.FeePool]
|
||||
// DelegatorsWithdrawAddress key: delAddr | value: withdrawAddr
|
||||
DelegatorsWithdrawAddress collections.Map[sdk.AccAddress, sdk.AccAddress]
|
||||
|
||||
@ -1,10 +1,8 @@
|
||||
package keeper
|
||||
|
||||
import (
|
||||
"cosmossdk.io/x/distribution/migrations/funds"
|
||||
v4 "cosmossdk.io/x/distribution/migrations/v4"
|
||||
"cosmossdk.io/x/distribution/types"
|
||||
pooltypes "cosmossdk.io/x/protocolpool/types"
|
||||
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
@ -32,22 +30,30 @@ func (m Migrator) Migrate2to3(ctx sdk.Context) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Migrate3to4 migrates the x/distribution module state to use collections
|
||||
// Additionally it migrates distribution fee pool to use protocol pool module account
|
||||
func (m Migrator) Migrate3to4(ctx sdk.Context) error {
|
||||
return v4.MigrateStore(ctx, m.keeper.storeService, m.keeper.cdc)
|
||||
if err := v4.MigrateStore(ctx, m.keeper.storeService, m.keeper.cdc); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return m.migrateFunds(ctx)
|
||||
}
|
||||
|
||||
func (m Migrator) MigrateFundsToPool(ctx sdk.Context) error {
|
||||
func (m Migrator) migrateFunds(ctx sdk.Context) error {
|
||||
macc := m.keeper.GetDistributionAccount(ctx)
|
||||
poolMacc := m.keeper.authKeeper.GetModuleAccount(ctx, pooltypes.ModuleName)
|
||||
poolMacc := m.keeper.authKeeper.GetModuleAccount(ctx, types.ProtocolPoolModuleName)
|
||||
|
||||
feePool, err := m.keeper.FeePool.Get(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = funds.MigrateFunds(ctx, m.keeper.bankKeeper, feePool, macc, poolMacc)
|
||||
|
||||
feePool, err = v4.MigrateFunds(ctx, m.keeper.bankKeeper, feePool, macc, poolMacc)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// return FeePool as empty (since FeePool funds are migrated to pool module account)
|
||||
return m.keeper.FeePool.Set(ctx, types.FeePool{})
|
||||
|
||||
// the feePool has now an empty community pool and the remainder is stored in the DecimalPool
|
||||
return m.keeper.FeePool.Set(ctx, feePool)
|
||||
}
|
||||
|
||||
@ -158,7 +158,7 @@ func (k msgServer) CommunityPoolSpend(ctx context.Context, msg *types.MsgCommuni
|
||||
return nil, fmt.Errorf("invalid recipient address: %w", err)
|
||||
}
|
||||
|
||||
if err := k.poolKeeper.DistributeFromFeePool(ctx, msg.Amount, recipient); err != nil {
|
||||
if err := k.poolKeeper.DistributeFromCommunityPool(ctx, msg.Amount, recipient); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
||||
@ -259,7 +259,7 @@ func TestMsgUpdateParams(t *testing.T) {
|
||||
|
||||
func TestMsgCommunityPoolSpend(t *testing.T) {
|
||||
ctx, addrs, distrKeeper, dep := initFixture(t)
|
||||
dep.poolKeeper.EXPECT().DistributeFromFeePool(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).AnyTimes()
|
||||
dep.poolKeeper.EXPECT().DistributeFromCommunityPool(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).AnyTimes()
|
||||
msgServer := keeper.NewMsgServerImpl(distrKeeper)
|
||||
|
||||
cases := []struct {
|
||||
|
||||
@ -61,7 +61,7 @@ func (k Keeper) IncrementValidatorPeriod(ctx context.Context, val stakingtypes.V
|
||||
if val.GetTokens().IsZero() {
|
||||
|
||||
// can't calculate ratio for zero-token validators
|
||||
// ergo we instead add to the community pool
|
||||
// ergo we instead add to the decimal pool
|
||||
feePool, err := k.FeePool.Get(ctx)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
@ -72,7 +72,7 @@ func (k Keeper) IncrementValidatorPeriod(ctx context.Context, val stakingtypes.V
|
||||
return 0, err
|
||||
}
|
||||
|
||||
feePool.CommunityPool = feePool.CommunityPool.Add(rewards.Rewards...)
|
||||
feePool.DecimalPool = feePool.DecimalPool.Add(rewards.Rewards...)
|
||||
outstanding.Rewards = outstanding.GetRewards().Sub(rewards.Rewards)
|
||||
err = k.FeePool.Set(ctx, feePool)
|
||||
if err != nil {
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package funds
|
||||
package v4
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
@ -9,23 +9,24 @@ import (
|
||||
)
|
||||
|
||||
// MigrateFunds migrates the distribution module funds to pool module
|
||||
func MigrateFunds(ctx sdk.Context, bankKeeper types.BankKeeper, feePool types.FeePool, macc, poolMacc sdk.ModuleAccountI) error {
|
||||
poolBal := sdk.NormalizeCoins(feePool.CommunityPool)
|
||||
func MigrateFunds(ctx sdk.Context, bankKeeper types.BankKeeper, feePool types.FeePool, macc, poolMacc sdk.ModuleAccountI) (types.FeePool, error) {
|
||||
poolBal, remainder := feePool.CommunityPool.TruncateDecimal()
|
||||
|
||||
distrbalances := bankKeeper.GetAllBalances(ctx, macc.GetAddress())
|
||||
if distrbalances.IsZero() || distrbalances.IsAllLT(poolBal) {
|
||||
return fmt.Errorf("%s module account balance is less than FeePool balance", macc.GetName())
|
||||
return types.FeePool{}, fmt.Errorf("%s module account balance is less than FeePool balance", macc.GetName())
|
||||
}
|
||||
|
||||
// transfer feepool funds from the distribution module account to pool module account
|
||||
err := bankKeeper.SendCoinsFromModuleToModule(ctx, macc.GetName(), poolMacc.GetName(), poolBal)
|
||||
if err != nil {
|
||||
return err
|
||||
if err := bankKeeper.SendCoinsFromModuleToModule(ctx, macc.GetName(), poolMacc.GetName(), poolBal); err != nil {
|
||||
return types.FeePool{}, err
|
||||
}
|
||||
|
||||
// check the migrated balance from pool module account is same as fee pool balance
|
||||
balances := bankKeeper.GetAllBalances(ctx, poolMacc.GetAddress())
|
||||
if !balances.Equal(poolBal) {
|
||||
return fmt.Errorf("pool module account balance is not same as FeePool balance after migration")
|
||||
return types.FeePool{}, fmt.Errorf("pool module account balance is not same as FeePool balance after migration")
|
||||
}
|
||||
return nil
|
||||
|
||||
return types.FeePool{DecimalPool: remainder}, nil
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package funds_test
|
||||
package v4_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
@ -16,7 +16,7 @@ import (
|
||||
banktypes "cosmossdk.io/x/bank/types"
|
||||
"cosmossdk.io/x/distribution"
|
||||
"cosmossdk.io/x/distribution/keeper"
|
||||
"cosmossdk.io/x/distribution/migrations/funds"
|
||||
v4 "cosmossdk.io/x/distribution/migrations/v4"
|
||||
distrtestutil "cosmossdk.io/x/distribution/testutil"
|
||||
disttypes "cosmossdk.io/x/distribution/types"
|
||||
pooltypes "cosmossdk.io/x/protocolpool/types"
|
||||
@ -100,8 +100,8 @@ func TestFundsMigration(t *testing.T) {
|
||||
// Set pool module account
|
||||
poolAcc := authtypes.NewEmptyModuleAccount(pooltypes.ModuleName)
|
||||
|
||||
// migrate feepool funds from distribution module account to pool module accout
|
||||
err = funds.MigrateFunds(ctx, bankKeeper, feepool, distrAcc, poolAcc)
|
||||
// migrate feepool funds from distribution module account to pool module account
|
||||
_, err = v4.MigrateFunds(ctx, bankKeeper, feepool, distrAcc, poolAcc)
|
||||
require.NoError(t, err)
|
||||
|
||||
// set distrbution feepool as empty (since migration)
|
||||
@ -28,7 +28,7 @@ import (
|
||||
)
|
||||
|
||||
// ConsensusVersion defines the current x/distribution module consensus version.
|
||||
const ConsensusVersion = 5
|
||||
const ConsensusVersion = 4
|
||||
|
||||
var (
|
||||
_ module.AppModuleBasic = AppModule{}
|
||||
@ -143,10 +143,6 @@ func (am AppModule) RegisterServices(cfg module.Configurator) {
|
||||
if err := cfg.RegisterMigration(types.ModuleName, 3, m.Migrate3to4); err != nil {
|
||||
panic(fmt.Sprintf("failed to migrate x/%s from version 3 to 4: %v", types.ModuleName, err))
|
||||
}
|
||||
|
||||
if err := cfg.RegisterMigration(types.ModuleName, 4, m.MigrateFundsToPool); err != nil {
|
||||
panic(fmt.Sprintf("failed to migrate funds from x/%s to x/protocolpool module", types.ModuleName))
|
||||
}
|
||||
}
|
||||
|
||||
// InitGenesis performs genesis initialization for the distribution module. It returns
|
||||
@ -170,7 +166,7 @@ func (AppModule) ConsensusVersion() uint64 { return ConsensusVersion }
|
||||
// BeginBlock returns the begin blocker for the distribution module.
|
||||
func (am AppModule) BeginBlock(ctx context.Context) error {
|
||||
c := sdk.UnwrapSDKContext(ctx)
|
||||
return BeginBlocker(c, am.keeper)
|
||||
return am.keeper.BeginBlocker(c)
|
||||
}
|
||||
|
||||
// AppModuleSimulation functions
|
||||
|
||||
@ -31,7 +31,7 @@ func TestDecodeDistributionStore(t *testing.T) {
|
||||
|
||||
decCoins := sdk.DecCoins{sdk.NewDecCoinFromDec(sdk.DefaultBondDenom, math.LegacyOneDec())}
|
||||
feePool := types.InitialFeePool()
|
||||
feePool.CommunityPool = decCoins
|
||||
feePool.DecimalPool = decCoins
|
||||
slashEvent := types.NewValidatorSlashEvent(10, math.LegacyOneDec())
|
||||
|
||||
kvPairs := kv.Pairs{
|
||||
|
||||
@ -249,18 +249,18 @@ func (m *MockPoolKeeper) EXPECT() *MockPoolKeeperMockRecorder {
|
||||
return m.recorder
|
||||
}
|
||||
|
||||
// DistributeFromFeePool mocks base method.
|
||||
func (m *MockPoolKeeper) DistributeFromFeePool(ctx context.Context, amount types0.Coins, receiveAddr types0.AccAddress) error {
|
||||
// DistributeFromCommunityPool mocks base method.
|
||||
func (m *MockPoolKeeper) DistributeFromCommunityPool(ctx context.Context, amount types0.Coins, receiveAddr types0.AccAddress) error {
|
||||
m.ctrl.T.Helper()
|
||||
ret := m.ctrl.Call(m, "DistributeFromFeePool", ctx, amount, receiveAddr)
|
||||
ret := m.ctrl.Call(m, "DistributeFromCommunityPool", ctx, amount, receiveAddr)
|
||||
ret0, _ := ret[0].(error)
|
||||
return ret0
|
||||
}
|
||||
|
||||
// DistributeFromFeePool indicates an expected call of DistributeFromFeePool.
|
||||
func (mr *MockPoolKeeperMockRecorder) DistributeFromFeePool(ctx, amount, receiveAddr interface{}) *gomock.Call {
|
||||
// DistributeFromCommunityPool indicates an expected call of DistributeFromCommunityPool.
|
||||
func (mr *MockPoolKeeperMockRecorder) DistributeFromCommunityPool(ctx, amount, receiveAddr interface{}) *gomock.Call {
|
||||
mr.mock.ctrl.T.Helper()
|
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DistributeFromFeePool", reflect.TypeOf((*MockPoolKeeper)(nil).DistributeFromFeePool), ctx, amount, receiveAddr)
|
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DistributeFromCommunityPool", reflect.TypeOf((*MockPoolKeeper)(nil).DistributeFromCommunityPool), ctx, amount, receiveAddr)
|
||||
}
|
||||
|
||||
// FundCommunityPool mocks base method.
|
||||
|
||||
@ -387,8 +387,10 @@ func (m *ValidatorSlashEvents) GetValidatorSlashEvents() []ValidatorSlashEvent {
|
||||
}
|
||||
|
||||
// FeePool is the global fee pool for distribution.
|
||||
// It holds decimal coins. Once whole those coins can be burned or distributed to the community pool.
|
||||
type FeePool struct {
|
||||
CommunityPool github_com_cosmos_cosmos_sdk_types.DecCoins `protobuf:"bytes,1,rep,name=community_pool,json=communityPool,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.DecCoins" json:"community_pool"`
|
||||
CommunityPool github_com_cosmos_cosmos_sdk_types.DecCoins `protobuf:"bytes,1,rep,name=community_pool,json=communityPool,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.DecCoins" json:"community_pool"` // Deprecated: Do not use.
|
||||
DecimalPool github_com_cosmos_cosmos_sdk_types.DecCoins `protobuf:"bytes,2,rep,name=decimal_pool,json=decimalPool,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.DecCoins" json:"decimal_pool"`
|
||||
}
|
||||
|
||||
func (m *FeePool) Reset() { *m = FeePool{} }
|
||||
@ -424,6 +426,7 @@ func (m *FeePool) XXX_DiscardUnknown() {
|
||||
|
||||
var xxx_messageInfo_FeePool proto.InternalMessageInfo
|
||||
|
||||
// Deprecated: Do not use.
|
||||
func (m *FeePool) GetCommunityPool() github_com_cosmos_cosmos_sdk_types.DecCoins {
|
||||
if m != nil {
|
||||
return m.CommunityPool
|
||||
@ -431,6 +434,13 @@ func (m *FeePool) GetCommunityPool() github_com_cosmos_cosmos_sdk_types.DecCoins
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *FeePool) GetDecimalPool() github_com_cosmos_cosmos_sdk_types.DecCoins {
|
||||
if m != nil {
|
||||
return m.DecimalPool
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// CommunityPoolSpendProposal details a proposal for use of community funds,
|
||||
// together with how many coins are proposed to be spent, and to which
|
||||
// recipient account.
|
||||
@ -647,71 +657,73 @@ func init() {
|
||||
}
|
||||
|
||||
var fileDescriptor_cd78a31ea281a992 = []byte{
|
||||
// 1015 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0xc1, 0x6f, 0x1b, 0xc5,
|
||||
0x17, 0xf6, 0x34, 0x89, 0xd3, 0x4c, 0xdb, 0xe4, 0xd7, 0x89, 0x93, 0x3a, 0x6e, 0x7f, 0xb6, 0xbb,
|
||||
0xa2, 0xc2, 0x04, 0x62, 0x93, 0x22, 0x21, 0x94, 0x0b, 0x6a, 0xec, 0x56, 0x20, 0x15, 0x88, 0x36,
|
||||
0x08, 0x24, 0x38, 0xac, 0xc6, 0xbb, 0x13, 0x7b, 0xc8, 0xee, 0xcc, 0x32, 0x33, 0x76, 0x92, 0x03,
|
||||
0xf7, 0xc0, 0x01, 0xb8, 0x81, 0x7a, 0xaa, 0xe0, 0x52, 0x71, 0xca, 0x21, 0x7f, 0x44, 0xc5, 0xa9,
|
||||
0xaa, 0x00, 0x21, 0x0e, 0x01, 0x92, 0x43, 0x10, 0x7f, 0x05, 0x9a, 0x9d, 0xf1, 0xae, 0x13, 0x02,
|
||||
0x2a, 0x45, 0x16, 0x97, 0x28, 0xf3, 0xde, 0xec, 0xfb, 0xbe, 0xef, 0xcd, 0x37, 0x6f, 0x0c, 0xeb,
|
||||
0x3e, 0x97, 0x11, 0x97, 0x8d, 0x80, 0x4a, 0x25, 0x68, 0xbb, 0xa7, 0x28, 0x67, 0x8d, 0xfe, 0x72,
|
||||
0x9b, 0x28, 0xbc, 0x7c, 0x22, 0x58, 0x8f, 0x05, 0x57, 0x1c, 0x5d, 0x35, 0xfb, 0xeb, 0x27, 0x52,
|
||||
0x76, 0x7f, 0xa9, 0xd0, 0xe1, 0x1d, 0x9e, 0xec, 0x6b, 0xe8, 0xff, 0xcc, 0x27, 0xa5, 0xb2, 0x85,
|
||||
0x68, 0x63, 0x49, 0xd2, 0xd2, 0x3e, 0xa7, 0xb6, 0x64, 0x69, 0xc1, 0xe4, 0x3d, 0xf3, 0xa1, 0xad,
|
||||
0x6f, 0x52, 0x97, 0x71, 0x44, 0x19, 0x6f, 0x24, 0x7f, 0x4d, 0xc8, 0xb9, 0x37, 0x06, 0xf3, 0x6b,
|
||||
0x58, 0xe0, 0x48, 0xa2, 0xf7, 0xe1, 0x25, 0x9f, 0x47, 0x51, 0x8f, 0x51, 0xb5, 0xe3, 0x29, 0xbc,
|
||||
0x5d, 0x04, 0x55, 0x50, 0x9b, 0x5a, 0x7d, 0xf9, 0xe1, 0x41, 0x25, 0xf7, 0xd3, 0x41, 0xc5, 0x52,
|
||||
0x95, 0xc1, 0x66, 0x9d, 0xf2, 0x46, 0x84, 0x55, 0xb7, 0x7e, 0x97, 0x74, 0xb0, 0xbf, 0xd3, 0x22,
|
||||
0xfe, 0xe3, 0xfd, 0x25, 0x68, 0x91, 0x5a, 0xc4, 0x7f, 0x70, 0xbc, 0xb7, 0x08, 0xdc, 0x8b, 0x69,
|
||||
0xb1, 0xb7, 0xf1, 0x36, 0xfa, 0x00, 0x16, 0x34, 0x61, 0xcd, 0x2a, 0xe6, 0x92, 0x08, 0x4f, 0x90,
|
||||
0x2d, 0x2c, 0x82, 0xe2, 0xb9, 0x04, 0xe3, 0x95, 0xa7, 0xc3, 0x28, 0x02, 0x17, 0xe9, 0xaa, 0x6b,
|
||||
0xb6, 0xa8, 0x9b, 0xd4, 0x44, 0x21, 0x9c, 0x6b, 0x73, 0xd6, 0x93, 0x7f, 0x02, 0x1b, 0xfb, 0x97,
|
||||
0x60, 0xb3, 0x49, 0xd9, 0x53, 0x68, 0x37, 0xe1, 0xdc, 0x16, 0x55, 0xdd, 0x40, 0xe0, 0x2d, 0x0f,
|
||||
0x07, 0x81, 0xf0, 0x08, 0xc3, 0xed, 0x90, 0x04, 0xc5, 0xf1, 0x2a, 0xa8, 0x9d, 0x77, 0x67, 0x07,
|
||||
0xc9, 0x5b, 0x41, 0x20, 0x6e, 0x9b, 0xd4, 0xca, 0x8d, 0x4f, 0x8e, 0xf7, 0x16, 0xab, 0x06, 0x60,
|
||||
0x49, 0x06, 0x9b, 0x8d, 0xed, 0x93, 0x8e, 0x31, 0x27, 0xe2, 0xfc, 0x00, 0x60, 0xe9, 0x1d, 0x1c,
|
||||
0xd2, 0x00, 0x2b, 0x2e, 0x5e, 0xa3, 0x52, 0x71, 0x41, 0x7d, 0x1c, 0x1a, 0x60, 0x89, 0x3e, 0x05,
|
||||
0xf0, 0x8a, 0xdf, 0x8b, 0x7a, 0x21, 0x56, 0xb4, 0x4f, 0xac, 0x48, 0x4f, 0x60, 0x45, 0x79, 0x11,
|
||||
0x54, 0xc7, 0x6a, 0x17, 0x6e, 0x5e, 0xb3, 0x7e, 0xac, 0xeb, 0x2e, 0x0d, 0x7c, 0xa5, 0x15, 0x35,
|
||||
0x39, 0x65, 0xa6, 0x11, 0xdf, 0xfc, 0x5c, 0x79, 0xbe, 0x43, 0x55, 0xb7, 0xd7, 0xae, 0xfb, 0x3c,
|
||||
0xb2, 0x7e, 0x69, 0x0c, 0x51, 0x53, 0x3b, 0x31, 0x91, 0x83, 0x6f, 0xa4, 0x39, 0xdb, 0xb9, 0x0c,
|
||||
0xd6, 0x90, 0x71, 0x35, 0x28, 0x7a, 0x16, 0xce, 0x08, 0xb2, 0x41, 0x04, 0x61, 0x3e, 0xf1, 0x7c,
|
||||
0xde, 0x63, 0x2a, 0x39, 0xdf, 0x4b, 0xee, 0x74, 0x1a, 0x6e, 0xea, 0xa8, 0xf3, 0x35, 0x80, 0x57,
|
||||
0x52, 0x61, 0xcd, 0x9e, 0x10, 0x84, 0xa9, 0x81, 0xaa, 0x18, 0x4e, 0x1a, 0x25, 0x72, 0xc4, 0x22,
|
||||
0x06, 0x30, 0x68, 0x1e, 0xe6, 0x63, 0x22, 0x28, 0x37, 0x6e, 0x1c, 0x77, 0xed, 0xca, 0xf9, 0x12,
|
||||
0xc0, 0x72, 0xca, 0xf2, 0x96, 0x6f, 0x35, 0x93, 0xa0, 0xc9, 0xa3, 0x88, 0x4a, 0x49, 0x39, 0x43,
|
||||
0x7d, 0x08, 0xfd, 0x74, 0x35, 0x62, 0xbe, 0x43, 0x48, 0xce, 0x67, 0x00, 0x5e, 0x4d, 0xa9, 0xbd,
|
||||
0xd5, 0x53, 0x52, 0x61, 0x16, 0x50, 0xd6, 0xf9, 0xcf, 0x9a, 0xa8, 0x19, 0xcd, 0xa6, 0x8c, 0xd6,
|
||||
0x43, 0x2c, 0xbb, 0xb7, 0xfb, 0x84, 0x29, 0xf4, 0x1c, 0xfc, 0x5f, 0x7f, 0x10, 0xf6, 0x6c, 0x9b,
|
||||
0x41, 0xd2, 0xe6, 0x99, 0x34, 0xbe, 0x96, 0x84, 0xd1, 0x1b, 0xf0, 0xfc, 0x86, 0xc0, 0xbe, 0xbe,
|
||||
0x01, 0x76, 0x2e, 0x2c, 0xff, 0xe3, 0xab, 0xea, 0xa6, 0x25, 0x9c, 0x8f, 0x01, 0x2c, 0x9c, 0xc1,
|
||||
0x48, 0xa2, 0x0f, 0xe1, 0x7c, 0x46, 0x49, 0xea, 0x84, 0x47, 0x92, 0x8c, 0xed, 0xd5, 0x8b, 0xf5,
|
||||
0xbf, 0x99, 0xca, 0xf5, 0x33, 0x4a, 0xae, 0x4e, 0x69, 0x9e, 0xa6, 0x21, 0x85, 0xfe, 0x19, 0x90,
|
||||
0xce, 0x2e, 0x80, 0x93, 0x77, 0x08, 0x59, 0xe3, 0x3c, 0x44, 0x1f, 0xc1, 0xe9, 0x6c, 0xce, 0xc6,
|
||||
0x9c, 0x87, 0x23, 0x3e, 0xa2, 0x6c, 0xaa, 0x6b, 0x78, 0xe7, 0x8b, 0x73, 0xb0, 0xd4, 0x1c, 0x8e,
|
||||
0xac, 0xc7, 0x84, 0x05, 0x66, 0xa8, 0xe1, 0x10, 0x15, 0xe0, 0x84, 0xa2, 0x2a, 0x24, 0x66, 0xfa,
|
||||
0xbb, 0x66, 0x81, 0xaa, 0xf0, 0x42, 0x40, 0xa4, 0x2f, 0x68, 0x9c, 0x9d, 0x8e, 0x3b, 0x1c, 0x42,
|
||||
0xd7, 0xe0, 0x94, 0x20, 0x3e, 0x8d, 0x29, 0x61, 0xca, 0x0c, 0x5a, 0x37, 0x0b, 0xa0, 0x1d, 0x98,
|
||||
0xc7, 0x51, 0x32, 0x10, 0xc6, 0x13, 0xad, 0x0b, 0x67, 0x6a, 0x4d, 0x84, 0xde, 0xb1, 0x42, 0x6b,
|
||||
0x4f, 0x20, 0x34, 0x51, 0x79, 0xef, 0x78, 0x6f, 0xf1, 0x62, 0x98, 0xd8, 0xc1, 0xf3, 0x33, 0xd9,
|
||||
0x16, 0x70, 0xa5, 0xb6, 0x7b, 0xbf, 0x92, 0xfb, 0xed, 0x7e, 0x25, 0xf7, 0xed, 0xfe, 0x52, 0xc9,
|
||||
0xa2, 0x76, 0x78, 0x7f, 0x08, 0x94, 0x29, 0xcd, 0x19, 0x38, 0xdf, 0x01, 0x38, 0xd7, 0x22, 0xba,
|
||||
0x92, 0x3e, 0x3d, 0x85, 0x85, 0xa2, 0xac, 0xf3, 0x3a, 0xdb, 0x48, 0x06, 0x5b, 0x2c, 0x48, 0x9f,
|
||||
0x72, 0xfd, 0xa8, 0x0c, 0x7b, 0x78, 0x7a, 0x10, 0xb6, 0x16, 0xbe, 0x0b, 0x27, 0xa4, 0xc2, 0x9b,
|
||||
0xc4, 0xfa, 0xf7, 0x69, 0xdf, 0x4e, 0x53, 0x04, 0xb5, 0x60, 0xbe, 0x4b, 0x68, 0xa7, 0x6b, 0x1a,
|
||||
0x3a, 0xbe, 0xfa, 0xc2, 0xef, 0x07, 0x95, 0x19, 0x5f, 0x10, 0x3d, 0x6c, 0x99, 0x67, 0x52, 0x5f,
|
||||
0x1d, 0xef, 0x2d, 0x9e, 0x8e, 0xd9, 0x06, 0x98, 0x85, 0xf3, 0x2b, 0x80, 0x0b, 0x56, 0x16, 0xe5,
|
||||
0x2c, 0x15, 0x68, 0x9f, 0xaf, 0x37, 0xe1, 0xe5, 0xec, 0x32, 0xe8, 0xf7, 0x8b, 0x48, 0x69, 0x5f,
|
||||
0xfe, 0xeb, 0x8f, 0xf7, 0x97, 0xfe, 0x6f, 0xa9, 0x65, 0x73, 0xd0, 0x6c, 0x59, 0x57, 0x42, 0x8f,
|
||||
0x9b, 0xec, 0x6e, 0xdb, 0x38, 0x62, 0x30, 0x9f, 0x3e, 0xed, 0xa3, 0x74, 0xb5, 0x45, 0x59, 0x19,
|
||||
0xd7, 0xc7, 0xeb, 0x7c, 0x0f, 0xe0, 0x8d, 0xbf, 0x36, 0xf5, 0xbb, 0x54, 0x75, 0x5b, 0x24, 0xe6,
|
||||
0x92, 0xaa, 0x11, 0xf9, 0x7b, 0x7e, 0xc8, 0xdf, 0x3a, 0x65, 0x57, 0xa8, 0x08, 0x27, 0x03, 0x03,
|
||||
0x5c, 0x9c, 0x48, 0x12, 0x83, 0xe5, 0xca, 0x33, 0xbb, 0x4f, 0x60, 0xc9, 0xd5, 0x57, 0x1f, 0x1c,
|
||||
0x96, 0xc1, 0xc3, 0xc3, 0x32, 0x78, 0x74, 0x58, 0x06, 0xbf, 0x1c, 0x96, 0xc1, 0xe7, 0x47, 0xe5,
|
||||
0xdc, 0xa3, 0xa3, 0x72, 0xee, 0xc7, 0xa3, 0x72, 0xee, 0xbd, 0xeb, 0x27, 0x6c, 0x75, 0xea, 0x37,
|
||||
0x44, 0xd2, 0xb4, 0x76, 0x3e, 0xf9, 0x99, 0xf7, 0xd2, 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x10,
|
||||
0x1e, 0x8d, 0x91, 0x99, 0x0a, 0x00, 0x00,
|
||||
// 1044 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0xcf, 0x6f, 0x1b, 0x45,
|
||||
0x14, 0xf6, 0xe4, 0x87, 0xd3, 0x4c, 0xd2, 0x84, 0x4e, 0x7e, 0xd4, 0x71, 0x8b, 0x9d, 0xae, 0xa8,
|
||||
0x08, 0x81, 0xd8, 0xa4, 0x95, 0x10, 0xf2, 0x05, 0x35, 0x76, 0x2b, 0x90, 0x0a, 0x44, 0x1b, 0x04,
|
||||
0x12, 0x1c, 0x56, 0xe3, 0xdd, 0x89, 0x3d, 0x64, 0x77, 0x66, 0x99, 0x19, 0x3b, 0xc9, 0x09, 0x8e,
|
||||
0x85, 0x03, 0x70, 0x03, 0xf5, 0x54, 0xc1, 0xa5, 0xe2, 0x94, 0x43, 0xfe, 0x88, 0x8a, 0x53, 0x55,
|
||||
0x01, 0x42, 0x1c, 0x02, 0x24, 0x87, 0x20, 0xfe, 0x0a, 0x34, 0x3b, 0xe3, 0x5d, 0x27, 0x04, 0x14,
|
||||
0x82, 0xa2, 0x5e, 0x2c, 0xcf, 0x7b, 0xb3, 0xef, 0xfb, 0xbe, 0x37, 0xef, 0xbd, 0x19, 0x58, 0xf1,
|
||||
0xb9, 0x8c, 0xb8, 0xac, 0x06, 0x54, 0x2a, 0x41, 0x9b, 0x1d, 0x45, 0x39, 0xab, 0x76, 0x97, 0x9b,
|
||||
0x44, 0xe1, 0xe5, 0x23, 0xc6, 0x4a, 0x2c, 0xb8, 0xe2, 0xe8, 0x8a, 0xd9, 0x5f, 0x39, 0xe2, 0xb2,
|
||||
0xfb, 0x8b, 0xd3, 0x2d, 0xde, 0xe2, 0xc9, 0xbe, 0xaa, 0xfe, 0x67, 0x3e, 0x29, 0x96, 0x2c, 0x44,
|
||||
0x13, 0x4b, 0x92, 0x86, 0xf6, 0x39, 0xb5, 0x21, 0x8b, 0x73, 0xc6, 0xef, 0x99, 0x0f, 0x6d, 0x7c,
|
||||
0xe3, 0xba, 0x84, 0x23, 0xca, 0x78, 0x35, 0xf9, 0x35, 0x26, 0xe7, 0xfe, 0x20, 0xcc, 0xaf, 0x62,
|
||||
0x81, 0x23, 0x89, 0x3e, 0x80, 0x17, 0x7d, 0x1e, 0x45, 0x1d, 0x46, 0xd5, 0xb6, 0xa7, 0xf0, 0x56,
|
||||
0x01, 0xcc, 0x83, 0x85, 0xd1, 0x95, 0x57, 0x1e, 0xed, 0x95, 0x73, 0xbf, 0xec, 0x95, 0x2d, 0x55,
|
||||
0x19, 0x6c, 0x54, 0x28, 0xaf, 0x46, 0x58, 0xb5, 0x2b, 0x77, 0x49, 0x0b, 0xfb, 0xdb, 0x0d, 0xe2,
|
||||
0x3f, 0xd9, 0x5d, 0x82, 0x16, 0xa9, 0x41, 0xfc, 0x87, 0x87, 0x3b, 0x8b, 0xc0, 0x1d, 0x4f, 0x83,
|
||||
0xbd, 0x83, 0xb7, 0xd0, 0x87, 0x70, 0x5a, 0x13, 0xd6, 0xac, 0x62, 0x2e, 0x89, 0xf0, 0x04, 0xd9,
|
||||
0xc4, 0x22, 0x28, 0x0c, 0x24, 0x18, 0xaf, 0x9e, 0x0d, 0xa3, 0x00, 0x5c, 0xa4, 0xa3, 0xae, 0xda,
|
||||
0xa0, 0x6e, 0x12, 0x13, 0x85, 0x70, 0xa6, 0xc9, 0x59, 0x47, 0xfe, 0x0d, 0x6c, 0xf0, 0x7f, 0x82,
|
||||
0x4d, 0x25, 0x61, 0x8f, 0xa1, 0xdd, 0x80, 0x33, 0x9b, 0x54, 0xb5, 0x03, 0x81, 0x37, 0x3d, 0x1c,
|
||||
0x04, 0xc2, 0x23, 0x0c, 0x37, 0x43, 0x12, 0x14, 0x86, 0xe6, 0xc1, 0xc2, 0x05, 0x77, 0xaa, 0xe7,
|
||||
0xbc, 0x15, 0x04, 0xe2, 0xb6, 0x71, 0xd5, 0xae, 0x7f, 0x76, 0xb8, 0xb3, 0x38, 0x6f, 0x00, 0x96,
|
||||
0x64, 0xb0, 0x51, 0xdd, 0x3a, 0x5a, 0x31, 0xe6, 0x44, 0x9c, 0x9f, 0x00, 0x2c, 0xbe, 0x8b, 0x43,
|
||||
0x1a, 0x60, 0xc5, 0xc5, 0xeb, 0x54, 0x2a, 0x2e, 0xa8, 0x8f, 0x43, 0x03, 0x2c, 0xd1, 0xe7, 0x00,
|
||||
0x5e, 0xf6, 0x3b, 0x51, 0x27, 0xc4, 0x8a, 0x76, 0x89, 0x15, 0xe9, 0x09, 0xac, 0x28, 0x2f, 0x80,
|
||||
0xf9, 0xc1, 0x85, 0xb1, 0x1b, 0x57, 0x6d, 0x3d, 0x56, 0x74, 0x96, 0x7a, 0x75, 0xa5, 0x15, 0xd5,
|
||||
0x39, 0x65, 0x26, 0x11, 0xdf, 0xfd, 0x5a, 0x7e, 0xb1, 0x45, 0x55, 0xbb, 0xd3, 0xac, 0xf8, 0x3c,
|
||||
0xb2, 0xf5, 0x52, 0xed, 0xa3, 0xa6, 0xb6, 0x63, 0x22, 0x7b, 0xdf, 0x48, 0x73, 0xb6, 0x33, 0x19,
|
||||
0xac, 0x21, 0xe3, 0x6a, 0x50, 0xf4, 0x3c, 0x9c, 0x14, 0x64, 0x9d, 0x08, 0xc2, 0x7c, 0xe2, 0xf9,
|
||||
0xbc, 0xc3, 0x54, 0x72, 0xbe, 0x17, 0xdd, 0x89, 0xd4, 0x5c, 0xd7, 0x56, 0xe7, 0x5b, 0x00, 0x2f,
|
||||
0xa7, 0xc2, 0xea, 0x1d, 0x21, 0x08, 0x53, 0x3d, 0x55, 0x31, 0x1c, 0x31, 0x4a, 0xe4, 0x39, 0x8b,
|
||||
0xe8, 0xc1, 0xa0, 0x59, 0x98, 0x8f, 0x89, 0xa0, 0xdc, 0x54, 0xe3, 0x90, 0x6b, 0x57, 0xce, 0xd7,
|
||||
0x00, 0x96, 0x52, 0x96, 0xb7, 0x7c, 0xab, 0x99, 0x04, 0x75, 0x1e, 0x45, 0x54, 0x4a, 0xca, 0x19,
|
||||
0xea, 0x42, 0xe8, 0xa7, 0xab, 0x73, 0xe6, 0xdb, 0x87, 0xe4, 0x7c, 0x01, 0xe0, 0x95, 0x94, 0xda,
|
||||
0xdb, 0x1d, 0x25, 0x15, 0x66, 0x01, 0x65, 0xad, 0xa7, 0x96, 0x44, 0xcd, 0x68, 0x2a, 0x65, 0xb4,
|
||||
0x16, 0x62, 0xd9, 0xbe, 0xdd, 0x25, 0x4c, 0xa1, 0x17, 0xe0, 0x33, 0xdd, 0x9e, 0xd9, 0xb3, 0x69,
|
||||
0x06, 0x49, 0x9a, 0x27, 0x53, 0xfb, 0x6a, 0x62, 0x46, 0x6f, 0xc2, 0x0b, 0xeb, 0x02, 0xfb, 0xba,
|
||||
0x03, 0xec, 0x5c, 0x58, 0xfe, 0xcf, 0xad, 0xea, 0xa6, 0x21, 0x9c, 0x4f, 0x01, 0x9c, 0x3e, 0x81,
|
||||
0x91, 0x44, 0x1f, 0xc1, 0xd9, 0x8c, 0x92, 0xd4, 0x0e, 0x8f, 0x24, 0x1e, 0x9b, 0xab, 0x97, 0x2b,
|
||||
0xff, 0x32, 0x95, 0x2b, 0x27, 0x84, 0x5c, 0x19, 0xd5, 0x3c, 0x4d, 0x42, 0xa6, 0xbb, 0x27, 0x40,
|
||||
0x3a, 0x9f, 0x0c, 0xc0, 0x91, 0x3b, 0x84, 0xac, 0x72, 0x1e, 0xa2, 0x8f, 0xe1, 0x44, 0x36, 0x67,
|
||||
0x63, 0xce, 0xc3, 0x53, 0x1d, 0x51, 0xed, 0xac, 0x47, 0x54, 0x00, 0x6e, 0x36, 0xd7, 0x13, 0x02,
|
||||
0x0a, 0x8e, 0x07, 0xc4, 0xa7, 0x11, 0x0e, 0x0d, 0xfc, 0xc0, 0x29, 0xe0, 0x6f, 0x9e, 0x01, 0xde,
|
||||
0x1d, 0xb3, 0x30, 0x1a, 0xd5, 0xf9, 0x6a, 0x00, 0x16, 0xeb, 0xfd, 0x3c, 0xd6, 0x62, 0xc2, 0x02,
|
||||
0x33, 0x4c, 0x71, 0x88, 0xa6, 0xe1, 0xb0, 0xa2, 0x2a, 0x24, 0xe6, 0xd6, 0x71, 0xcd, 0x02, 0xcd,
|
||||
0xc3, 0xb1, 0x80, 0x48, 0x5f, 0xd0, 0x38, 0xab, 0x0a, 0xb7, 0xdf, 0x84, 0xae, 0xc2, 0x51, 0x41,
|
||||
0x7c, 0x1a, 0x53, 0xc2, 0x94, 0x19, 0xf0, 0x6e, 0x66, 0x40, 0xdb, 0x30, 0x8f, 0xa3, 0x64, 0x10,
|
||||
0x0d, 0x25, 0x22, 0xe7, 0x4e, 0x14, 0x99, 0x28, 0xbc, 0x63, 0x15, 0x2e, 0x9c, 0x42, 0x61, 0x22,
|
||||
0xef, 0xfe, 0xe1, 0xce, 0xe2, 0x78, 0x98, 0x94, 0xa1, 0xe7, 0x67, 0x1d, 0x61, 0x01, 0x6b, 0x0b,
|
||||
0xf7, 0x1e, 0x94, 0x73, 0x7f, 0x3c, 0x28, 0xe7, 0xbe, 0xdf, 0x5d, 0x2a, 0x5a, 0xd4, 0x16, 0xef,
|
||||
0xf6, 0x81, 0x32, 0xa5, 0x39, 0x03, 0xe7, 0x07, 0x00, 0x67, 0x1a, 0x44, 0x47, 0xd2, 0x55, 0xa3,
|
||||
0xb0, 0x50, 0x94, 0xb5, 0xde, 0x60, 0xeb, 0xc9, 0x40, 0x8d, 0x05, 0xe9, 0x52, 0xae, 0x2f, 0xb3,
|
||||
0xfe, 0xde, 0x99, 0xe8, 0x99, 0x6d, 0xeb, 0xdc, 0x85, 0xc3, 0x52, 0xe1, 0x0d, 0x62, 0xfb, 0xe6,
|
||||
0xac, 0x77, 0xb6, 0x09, 0x82, 0x1a, 0x30, 0xdf, 0x26, 0xb4, 0xd5, 0x36, 0x09, 0x1d, 0x5a, 0x79,
|
||||
0xe9, 0xcf, 0xbd, 0xf2, 0xa4, 0x2f, 0x88, 0x1e, 0xf2, 0xcc, 0x33, 0xae, 0x6f, 0x0e, 0x77, 0x16,
|
||||
0x8f, 0xdb, 0x6c, 0x02, 0xcc, 0xc2, 0xf9, 0x1d, 0xc0, 0x39, 0x2b, 0x8b, 0x72, 0x96, 0x0a, 0xb4,
|
||||
0xd7, 0xe6, 0x5b, 0xf0, 0x52, 0xd6, 0x84, 0xfa, 0xde, 0x24, 0x52, 0xda, 0x17, 0xc7, 0xb5, 0x27,
|
||||
0xbb, 0x4b, 0xcf, 0x5a, 0x6a, 0xd9, 0xfc, 0x35, 0x5b, 0xd6, 0x94, 0xd0, 0x63, 0x2e, 0x9b, 0x29,
|
||||
0xd6, 0x8e, 0x18, 0xcc, 0xa7, 0x4f, 0x8a, 0xf3, 0x1c, 0x78, 0x16, 0xa5, 0x36, 0xa4, 0x8f, 0xd7,
|
||||
0xf9, 0x11, 0xc0, 0xeb, 0xff, 0x5c, 0xd4, 0xef, 0x51, 0xd5, 0x6e, 0x90, 0x98, 0x4b, 0xaa, 0xce,
|
||||
0xa9, 0xbe, 0x67, 0xfb, 0xea, 0x5b, 0xbb, 0xec, 0x0a, 0x15, 0xe0, 0x48, 0x60, 0x80, 0x0b, 0xc3,
|
||||
0x89, 0xa3, 0xb7, 0xac, 0x3d, 0x77, 0xef, 0x14, 0x25, 0xb9, 0xf2, 0xda, 0xc3, 0xfd, 0x12, 0x78,
|
||||
0xb4, 0x5f, 0x02, 0x8f, 0xf7, 0x4b, 0xe0, 0xb7, 0xfd, 0x12, 0xf8, 0xf2, 0xa0, 0x94, 0x7b, 0x7c,
|
||||
0x50, 0xca, 0xfd, 0x7c, 0x50, 0xca, 0xbd, 0x7f, 0xed, 0x48, 0x59, 0x1d, 0x7b, 0xbb, 0x24, 0x49,
|
||||
0x6b, 0xe6, 0x93, 0xe7, 0xe5, 0xcd, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x5f, 0x08, 0x33, 0x8d,
|
||||
0x11, 0x0b, 0x00, 0x00,
|
||||
}
|
||||
|
||||
func (this *Params) Equal(that interface{}) bool {
|
||||
@ -952,6 +964,14 @@ func (this *FeePool) Equal(that interface{}) bool {
|
||||
return false
|
||||
}
|
||||
}
|
||||
if len(this.DecimalPool) != len(that1.DecimalPool) {
|
||||
return false
|
||||
}
|
||||
for i := range this.DecimalPool {
|
||||
if !this.DecimalPool[i].Equal(&that1.DecimalPool[i]) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
func (this *DelegatorStartingInfo) Equal(that interface{}) bool {
|
||||
@ -1368,6 +1388,20 @@ func (m *FeePool) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
if len(m.DecimalPool) > 0 {
|
||||
for iNdEx := len(m.DecimalPool) - 1; iNdEx >= 0; iNdEx-- {
|
||||
{
|
||||
size, err := m.DecimalPool[iNdEx].MarshalToSizedBuffer(dAtA[:i])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
i -= size
|
||||
i = encodeVarintDistribution(dAtA, i, uint64(size))
|
||||
}
|
||||
i--
|
||||
dAtA[i] = 0x12
|
||||
}
|
||||
}
|
||||
if len(m.CommunityPool) > 0 {
|
||||
for iNdEx := len(m.CommunityPool) - 1; iNdEx >= 0; iNdEx-- {
|
||||
{
|
||||
@ -1724,6 +1758,12 @@ func (m *FeePool) Size() (n int) {
|
||||
n += 1 + l + sovDistribution(uint64(l))
|
||||
}
|
||||
}
|
||||
if len(m.DecimalPool) > 0 {
|
||||
for _, e := range m.DecimalPool {
|
||||
l = e.Size()
|
||||
n += 1 + l + sovDistribution(uint64(l))
|
||||
}
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
@ -2621,6 +2661,40 @@ func (m *FeePool) Unmarshal(dAtA []byte) error {
|
||||
return err
|
||||
}
|
||||
iNdEx = postIndex
|
||||
case 2:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field DecimalPool", wireType)
|
||||
}
|
||||
var msglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowDistribution
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
msglen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if msglen < 0 {
|
||||
return ErrInvalidLengthDistribution
|
||||
}
|
||||
postIndex := iNdEx + msglen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthDistribution
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.DecimalPool = append(m.DecimalPool, types.DecCoin{})
|
||||
if err := m.DecimalPool[len(m.DecimalPool)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
|
||||
return err
|
||||
}
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipDistribution(dAtA[iNdEx:])
|
||||
|
||||
@ -36,7 +36,7 @@ type BankKeeper interface {
|
||||
// PoolKeeper defines the expected interface needed to fund & distribute pool balances.
|
||||
type PoolKeeper interface {
|
||||
FundCommunityPool(ctx context.Context, amount sdk.Coins, sender sdk.AccAddress) error
|
||||
DistributeFromFeePool(ctx context.Context, amount sdk.Coins, receiveAddr sdk.AccAddress) error
|
||||
DistributeFromCommunityPool(ctx context.Context, amount sdk.Coins, receiveAddr sdk.AccAddress) error
|
||||
GetCommunityPool(ctx context.Context) (sdk.Coins, error)
|
||||
}
|
||||
|
||||
|
||||
@ -6,18 +6,22 @@ import (
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
// zero fee pool
|
||||
// InitialFeePool initializes a zero fee pool
|
||||
func InitialFeePool() FeePool {
|
||||
return FeePool{
|
||||
DecimalPool: sdk.DecCoins{},
|
||||
CommunityPool: sdk.DecCoins{},
|
||||
}
|
||||
}
|
||||
|
||||
// ValidateGenesis validates the fee pool for a genesis state
|
||||
func (f FeePool) ValidateGenesis() error {
|
||||
if f.CommunityPool.IsAnyNegative() {
|
||||
return fmt.Errorf("negative CommunityPool in distribution fee pool, is %v",
|
||||
f.CommunityPool)
|
||||
if f.DecimalPool.IsAnyNegative() {
|
||||
return fmt.Errorf("negative DecimalPool in distribution fee pool, is %v", f.DecimalPool)
|
||||
}
|
||||
|
||||
if f.CommunityPool.IsAnyNegative() { // TODO(@julienrbrt) in v0.53, panic if the community pool is set
|
||||
return fmt.Errorf("negative CommunityPool in distribution fee pool, is %v", f.CommunityPool)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
@ -17,4 +17,7 @@ func TestValidateGenesis(t *testing.T) {
|
||||
|
||||
fp2 := types.FeePool{CommunityPool: sdk.DecCoins{{Denom: "stake", Amount: math.LegacyNewDec(-1)}}}
|
||||
require.NotNil(t, fp2.ValidateGenesis())
|
||||
|
||||
fp3 := types.FeePool{DecimalPool: sdk.DecCoins{{Denom: "stake", Amount: math.LegacyNewDec(-1)}}}
|
||||
require.NotNil(t, fp3.ValidateGenesis())
|
||||
}
|
||||
|
||||
@ -24,6 +24,8 @@ const (
|
||||
// It should be synced with the gov module's name if it is ever changed.
|
||||
// See: https://github.com/cosmos/cosmos-sdk/blob/b62a28aac041829da5ded4aeacfcd7a42873d1c8/x/gov/types/keys.go#L9
|
||||
GovModuleName = "gov"
|
||||
// ProtocolPoolModuleName duplicates the protocolpool module's name to avoid a cyclic dependency with x/protocolpool.
|
||||
ProtocolPoolModuleName = "protocolpool"
|
||||
)
|
||||
|
||||
// Keys for distribution store
|
||||
|
||||
@ -75,9 +75,9 @@ func (k Keeper) FundCommunityPool(ctx context.Context, amount sdk.Coins, sender
|
||||
return k.bankKeeper.SendCoinsFromAccountToModule(ctx, sender, types.ModuleName, amount)
|
||||
}
|
||||
|
||||
// DistributeFromFeePool distributes funds from the protocolpool module account to
|
||||
// DistributeFromCommunityPool distributes funds from the protocolpool module account to
|
||||
// a receiver address.
|
||||
func (k Keeper) DistributeFromFeePool(ctx context.Context, amount sdk.Coins, receiveAddr sdk.AccAddress) error {
|
||||
func (k Keeper) DistributeFromCommunityPool(ctx context.Context, amount sdk.Coins, receiveAddr sdk.AccAddress) error {
|
||||
return k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, receiveAddr, amount)
|
||||
}
|
||||
|
||||
@ -97,10 +97,10 @@ func (k Keeper) claimFunds(ctx context.Context, recipient sdk.AccAddress) (amoun
|
||||
return sdk.Coin{}, fmt.Errorf("error getting claimable funds: %w", err)
|
||||
}
|
||||
|
||||
// distribute amount from feepool
|
||||
err = k.DistributeFromFeePool(ctx, sdk.NewCoins(amount), recipient)
|
||||
// distribute amount from community pool
|
||||
err = k.DistributeFromCommunityPool(ctx, sdk.NewCoins(amount), recipient)
|
||||
if err != nil {
|
||||
return sdk.Coin{}, fmt.Errorf("error distributing from fee pool: %w", err)
|
||||
return sdk.Coin{}, fmt.Errorf("error distributing from community pool: %w", err)
|
||||
}
|
||||
|
||||
return amount, nil
|
||||
|
||||
@ -93,12 +93,11 @@ func (k MsgServer) CommunityPoolSpend(ctx context.Context, msg *types.MsgCommuni
|
||||
}
|
||||
|
||||
// distribute funds from community pool module account
|
||||
if err := k.Keeper.DistributeFromFeePool(ctx, msg.Amount, recipient); err != nil {
|
||||
if err := k.Keeper.DistributeFromCommunityPool(ctx, msg.Amount, recipient); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
logger := k.Logger(ctx)
|
||||
logger.Info("transferred from the community pool to recipient", "amount", msg.Amount.String(), "recipient", msg.Recipient)
|
||||
k.Logger(ctx).Info("transferred from the community pool to recipient", "amount", msg.Amount.String(), "recipient", msg.Recipient)
|
||||
|
||||
return &types.MsgCommunityPoolSpendResponse{}, nil
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user