mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-12-24 23:35:19 +00:00
feat(community): add MsgUpdateParams for governance (#1745)
* Add authority, MsgUpdateParams * Add e2e test for x/community UpdateParamsMsg proposal * Ensure new params are different * Add errors and update codec * Update changelog * Use single reused govAuthorityAddr * Add unit tests for authority and msg * Validate authority address * Update proto comment * Check for ErrInvalidSigner in invalid authority error
This commit is contained in:
parent
ae4cb15d73
commit
395b69ac2f
@ -42,6 +42,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
||||
- (metrics) [#1669] Add performance timing metrics to all Begin/EndBlockers
|
||||
- (community) [#1704] Add module params
|
||||
- (community) [#1706] Add disable inflation upgrade
|
||||
- (community) [#1745] Enable params update via governance with `MsgUpdateParams`
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@ -292,6 +293,7 @@ the [changelog](https://github.com/cosmos/cosmos-sdk/blob/v0.38.4/CHANGELOG.md).
|
||||
- [#257](https://github.com/Kava-Labs/kava/pulls/257) Include scripts to run
|
||||
large-scale simulations remotely using aws-batch
|
||||
|
||||
[#1745]: https://github.com/Kava-Labs/kava/pull/1745
|
||||
[#1707]: https://github.com/Kava-Labs/kava/pull/1707
|
||||
[#1706]: https://github.com/Kava-Labs/kava/pull/1706
|
||||
[#1668]: https://github.com/Kava-Labs/kava/pull/1668
|
||||
|
19
app/app.go
19
app/app.go
@ -251,8 +251,10 @@ var (
|
||||
)
|
||||
|
||||
// Verify app interface at compile time
|
||||
var _ servertypes.Application = (*App)(nil)
|
||||
var _ servertypes.ApplicationQueryService = (*App)(nil)
|
||||
var (
|
||||
_ servertypes.Application = (*App)(nil)
|
||||
_ servertypes.ApplicationQueryService = (*App)(nil)
|
||||
)
|
||||
|
||||
// Options bundles several configuration params for an App.
|
||||
type Options struct {
|
||||
@ -379,6 +381,9 @@ func NewApp(
|
||||
tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey, evmtypes.TransientKey, feemarkettypes.TransientKey)
|
||||
memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey)
|
||||
|
||||
// Authority for gov proposals, using the x/gov module account address
|
||||
govAuthorityAddr := authtypes.NewModuleAddress(govtypes.ModuleName)
|
||||
|
||||
app := &App{
|
||||
BaseApp: bApp,
|
||||
legacyAmino: legacyAmino,
|
||||
@ -485,8 +490,7 @@ func NewApp(
|
||||
appCodec,
|
||||
homePath,
|
||||
app.BaseApp,
|
||||
// Authority
|
||||
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
|
||||
govAuthorityAddr.String(),
|
||||
)
|
||||
app.evidenceKeeper = *evidencekeeper.NewKeeper(
|
||||
appCodec,
|
||||
@ -507,8 +511,7 @@ func NewApp(
|
||||
// Create Ethermint keepers
|
||||
app.feeMarketKeeper = feemarketkeeper.NewKeeper(
|
||||
appCodec,
|
||||
// Authority
|
||||
authtypes.NewModuleAddress(govtypes.ModuleName),
|
||||
govAuthorityAddr,
|
||||
keys[feemarkettypes.StoreKey],
|
||||
tkeys[feemarkettypes.TransientKey],
|
||||
feemarketSubspace,
|
||||
@ -525,8 +528,7 @@ func NewApp(
|
||||
evmBankKeeper := evmutilkeeper.NewEvmBankKeeper(app.evmutilKeeper, app.bankKeeper, app.accountKeeper)
|
||||
app.evmKeeper = evmkeeper.NewKeeper(
|
||||
appCodec, keys[evmtypes.StoreKey], tkeys[evmtypes.TransientKey],
|
||||
// Authority
|
||||
authtypes.NewModuleAddress(govtypes.ModuleName),
|
||||
govAuthorityAddr,
|
||||
app.accountKeeper, evmBankKeeper, app.stakingKeeper, app.feeMarketKeeper,
|
||||
nil, // precompiled contracts
|
||||
geth.NewEVM,
|
||||
@ -667,6 +669,7 @@ func NewApp(
|
||||
&app.mintKeeper,
|
||||
&app.kavadistKeeper,
|
||||
app.stakingKeeper,
|
||||
govAuthorityAddr,
|
||||
)
|
||||
|
||||
app.incentiveKeeper = incentivekeeper.NewKeeper(
|
||||
|
@ -209,6 +209,8 @@
|
||||
- [kava/community/v1beta1/tx.proto](#kava/community/v1beta1/tx.proto)
|
||||
- [MsgFundCommunityPool](#kava.community.v1beta1.MsgFundCommunityPool)
|
||||
- [MsgFundCommunityPoolResponse](#kava.community.v1beta1.MsgFundCommunityPoolResponse)
|
||||
- [MsgUpdateParams](#kava.community.v1beta1.MsgUpdateParams)
|
||||
- [MsgUpdateParamsResponse](#kava.community.v1beta1.MsgUpdateParamsResponse)
|
||||
|
||||
- [Msg](#kava.community.v1beta1.Msg)
|
||||
|
||||
@ -3214,6 +3216,32 @@ MsgFundCommunityPoolResponse defines the Msg/FundCommunityPool response type.
|
||||
|
||||
|
||||
|
||||
|
||||
<a name="kava.community.v1beta1.MsgUpdateParams"></a>
|
||||
|
||||
### MsgUpdateParams
|
||||
MsgUpdateParams allows an account to update the community module parameters.
|
||||
|
||||
|
||||
| Field | Type | Label | Description |
|
||||
| ----- | ---- | ----- | ----------- |
|
||||
| `authority` | [string](#string) | | authority is the address that controls the module (defaults to x/gov unless overwritten). |
|
||||
| `params` | [Params](#kava.community.v1beta1.Params) | | params defines the x/community parameters to update. |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a name="kava.community.v1beta1.MsgUpdateParamsResponse"></a>
|
||||
|
||||
### MsgUpdateParamsResponse
|
||||
MsgUpdateParamsResponse defines the Msg/UpdateParams response type.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- end messages -->
|
||||
|
||||
<!-- end enums -->
|
||||
@ -3229,6 +3257,7 @@ Msg defines the community Msg service.
|
||||
| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |
|
||||
| ----------- | ------------ | ------------- | ------------| ------- | -------- |
|
||||
| `FundCommunityPool` | [MsgFundCommunityPool](#kava.community.v1beta1.MsgFundCommunityPool) | [MsgFundCommunityPoolResponse](#kava.community.v1beta1.MsgFundCommunityPoolResponse) | FundCommunityPool defines a method to allow an account to directly fund the community module account. | |
|
||||
| `UpdateParams` | [MsgUpdateParams](#kava.community.v1beta1.MsgUpdateParams) | [MsgUpdateParamsResponse](#kava.community.v1beta1.MsgUpdateParamsResponse) | UpdateParams defines a method to allow an account to update the community module parameters. | |
|
||||
|
||||
<!-- end services -->
|
||||
|
||||
|
@ -9,6 +9,8 @@ option go_package = "github.com/kava-labs/kava/x/community/types";
|
||||
|
||||
// Params defines the parameters of the community module.
|
||||
message Params {
|
||||
option (gogoproto.equal) = true;
|
||||
|
||||
// upgrade_time_disable_inflation is the time at which to disable mint and kavadist module inflation.
|
||||
// If set to 0, inflation will be disabled from block 1.
|
||||
google.protobuf.Timestamp upgrade_time_disable_inflation = 1 [
|
||||
|
@ -4,6 +4,7 @@ package kava.community.v1beta1;
|
||||
import "cosmos/base/v1beta1/coin.proto";
|
||||
import "cosmos_proto/cosmos.proto";
|
||||
import "gogoproto/gogo.proto";
|
||||
import "kava/community/v1beta1/params.proto";
|
||||
|
||||
option go_package = "github.com/kava-labs/kava/x/community/types";
|
||||
option (gogoproto.equal_all) = true;
|
||||
@ -12,6 +13,9 @@ option (gogoproto.equal_all) = true;
|
||||
service Msg {
|
||||
// FundCommunityPool defines a method to allow an account to directly fund the community module account.
|
||||
rpc FundCommunityPool(MsgFundCommunityPool) returns (MsgFundCommunityPoolResponse);
|
||||
|
||||
// UpdateParams defines a method to allow an account to update the community module parameters.
|
||||
rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse);
|
||||
}
|
||||
|
||||
// MsgFundCommunityPool allows an account to directly fund the community module account.
|
||||
@ -27,3 +31,17 @@ message MsgFundCommunityPool {
|
||||
|
||||
// MsgFundCommunityPoolResponse defines the Msg/FundCommunityPool response type.
|
||||
message MsgFundCommunityPoolResponse {}
|
||||
|
||||
// MsgUpdateParams allows an account to update the community module parameters.
|
||||
message MsgUpdateParams {
|
||||
option (gogoproto.goproto_getters) = false;
|
||||
|
||||
// authority is the address that controls the module (defaults to x/gov unless overwritten).
|
||||
string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];
|
||||
|
||||
// params defines the x/community parameters to update.
|
||||
Params params = 2 [(gogoproto.nullable) = false];
|
||||
}
|
||||
|
||||
// MsgUpdateParamsResponse defines the Msg/UpdateParams response type.
|
||||
message MsgUpdateParamsResponse {}
|
||||
|
173
tests/e2e/e2e_community_update_params_test.go
Normal file
173
tests/e2e/e2e_community_update_params_test.go
Normal file
@ -0,0 +1,173 @@
|
||||
package e2e_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/hex"
|
||||
"time"
|
||||
|
||||
sdkmath "cosmossdk.io/math"
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
|
||||
govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
|
||||
|
||||
"github.com/kava-labs/kava/tests/e2e/testutil"
|
||||
"github.com/kava-labs/kava/tests/util"
|
||||
communitytypes "github.com/kava-labs/kava/x/community/types"
|
||||
)
|
||||
|
||||
func (suite *IntegrationTestSuite) TestCommunityUpdateParams_NonAuthority() {
|
||||
// ARRANGE
|
||||
// setup kava account
|
||||
funds := ukava(1e5) // .1 KAVA
|
||||
kavaAcc := suite.Kava.NewFundedAccount("community-non-authority", sdk.NewCoins(funds))
|
||||
|
||||
gasLimit := int64(2e5)
|
||||
fee := ukava(200)
|
||||
|
||||
msg := communitytypes.NewMsgUpdateParams(
|
||||
kavaAcc.SdkAddress,
|
||||
communitytypes.DefaultParams(),
|
||||
)
|
||||
|
||||
// ACT
|
||||
req := util.KavaMsgRequest{
|
||||
Msgs: []sdk.Msg{&msg},
|
||||
GasLimit: uint64(gasLimit),
|
||||
FeeAmount: sdk.NewCoins(fee),
|
||||
Memo: "this is a failure!",
|
||||
}
|
||||
res := kavaAcc.SignAndBroadcastKavaTx(req)
|
||||
|
||||
// ASSERT
|
||||
_, err := util.WaitForSdkTxCommit(suite.Kava.Tx, res.Result.TxHash, 6*time.Second)
|
||||
suite.Require().Error(err)
|
||||
suite.Require().ErrorContains(
|
||||
err,
|
||||
govtypes.ErrInvalidSigner.Error(),
|
||||
"should return with authority check error",
|
||||
)
|
||||
}
|
||||
|
||||
func (suite *IntegrationTestSuite) TestCommunityUpdateParams_Authority() {
|
||||
// ARRANGE
|
||||
govParamsRes, err := suite.Kava.Gov.Params(context.Background(), &govv1.QueryParamsRequest{
|
||||
ParamsType: govv1.ParamDeposit,
|
||||
})
|
||||
suite.NoError(err)
|
||||
|
||||
// Check initial params
|
||||
communityParamsResInitial, err := suite.Kava.Community.Params(
|
||||
context.Background(),
|
||||
&communitytypes.QueryParamsRequest{},
|
||||
)
|
||||
suite.Require().NoError(err)
|
||||
|
||||
// setup kava account
|
||||
// .1 KAVA + min deposit amount for proposal
|
||||
funds := sdk.NewCoins(ukava(1e5)).Add(govParamsRes.DepositParams.MinDeposit...)
|
||||
kavaAcc := suite.Kava.NewFundedAccount("community-update-params", funds)
|
||||
|
||||
gasLimit := int64(2e5)
|
||||
fee := ukava(200)
|
||||
|
||||
upgradeTime := time.Now().Add(24 * time.Hour).UTC()
|
||||
|
||||
// 1. Proposal
|
||||
updateParamsMsg := communitytypes.NewMsgUpdateParams(
|
||||
authtypes.NewModuleAddress(govtypes.ModuleName), // authority
|
||||
communitytypes.NewParams(
|
||||
upgradeTime,
|
||||
sdkmath.LegacyNewDec(1111), // stakingRewardsPerSecond
|
||||
sdkmath.LegacyNewDec(2222), // upgradeTimeSetstakingRewardsPerSecond
|
||||
),
|
||||
)
|
||||
|
||||
// Make sure we're actually changing the params
|
||||
suite.NotEqual(
|
||||
updateParamsMsg.Params,
|
||||
communityParamsResInitial.Params,
|
||||
"new params should be different from existing",
|
||||
)
|
||||
|
||||
proposalMsg, err := govv1.NewMsgSubmitProposal(
|
||||
[]sdk.Msg{&updateParamsMsg},
|
||||
govParamsRes.DepositParams.MinDeposit,
|
||||
kavaAcc.SdkAddress.String(),
|
||||
"community-update-params",
|
||||
)
|
||||
suite.NoError(err)
|
||||
|
||||
req := util.KavaMsgRequest{
|
||||
Msgs: []sdk.Msg{proposalMsg},
|
||||
GasLimit: uint64(gasLimit),
|
||||
FeeAmount: sdk.NewCoins(fee),
|
||||
Memo: "this is a proposal please accept me",
|
||||
}
|
||||
res := kavaAcc.SignAndBroadcastKavaTx(req)
|
||||
suite.Require().NoError(res.Err)
|
||||
|
||||
// Wait for proposal to be submitted
|
||||
txRes, err := util.WaitForSdkTxCommit(suite.Kava.Tx, res.Result.TxHash, 6*time.Second)
|
||||
suite.Require().NoError(err)
|
||||
|
||||
// Parse tx response to get proposal id
|
||||
var govRes govv1.MsgSubmitProposalResponse
|
||||
suite.decodeTxMsgResponse(txRes, &govRes)
|
||||
|
||||
// 2. Vote for proposal from whale account
|
||||
whale := suite.Kava.GetAccount(testutil.FundedAccountName)
|
||||
voteMsg := govv1.NewMsgVote(
|
||||
whale.SdkAddress,
|
||||
govRes.ProposalId,
|
||||
govv1.OptionYes,
|
||||
"",
|
||||
)
|
||||
|
||||
voteReq := util.KavaMsgRequest{
|
||||
Msgs: []sdk.Msg{voteMsg},
|
||||
GasLimit: uint64(gasLimit),
|
||||
FeeAmount: sdk.NewCoins(fee),
|
||||
Memo: "voting",
|
||||
}
|
||||
voteRes := whale.SignAndBroadcastKavaTx(voteReq)
|
||||
suite.Require().NoError(voteRes.Err)
|
||||
|
||||
_, err = util.WaitForSdkTxCommit(suite.Kava.Tx, voteRes.Result.TxHash, 6*time.Second)
|
||||
suite.Require().NoError(err)
|
||||
|
||||
// 3. Wait until proposal passes
|
||||
suite.Require().Eventually(func() bool {
|
||||
proposalRes, err := suite.Kava.Gov.Proposal(context.Background(), &govv1.QueryProposalRequest{
|
||||
ProposalId: govRes.ProposalId,
|
||||
})
|
||||
suite.NoError(err)
|
||||
|
||||
return proposalRes.Proposal.Status == govv1.StatusPassed
|
||||
}, 60*time.Second, 1*time.Second)
|
||||
|
||||
// Check parameters are updated
|
||||
communityParamsRes, err := suite.Kava.Community.Params(
|
||||
context.Background(),
|
||||
&communitytypes.QueryParamsRequest{},
|
||||
)
|
||||
suite.Require().NoError(err)
|
||||
|
||||
suite.Equal(updateParamsMsg.Params, communityParamsRes.Params)
|
||||
}
|
||||
|
||||
func (suite *IntegrationTestSuite) decodeTxMsgResponse(txRes *sdk.TxResponse, ptr codec.ProtoMarshaler) {
|
||||
// convert txRes.Data hex string to bytes
|
||||
txResBytes, err := hex.DecodeString(txRes.Data)
|
||||
suite.Require().NoError(err)
|
||||
|
||||
// Unmarshal data to TxMsgData
|
||||
var txMsgData sdk.TxMsgData
|
||||
suite.Kava.EncodingConfig.Marshaler.MustUnmarshal(txResBytes, &txMsgData)
|
||||
suite.T().Logf("txData.MsgResponses: %v", txMsgData.MsgResponses)
|
||||
|
||||
// Parse MsgResponse
|
||||
suite.Kava.EncodingConfig.Marshaler.MustUnmarshal(txMsgData.MsgResponses[0].Value, ptr)
|
||||
suite.Require().NoError(err)
|
||||
}
|
@ -14,6 +14,7 @@ import (
|
||||
txtypes "github.com/cosmos/cosmos-sdk/types/tx"
|
||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||
govv1types "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
|
||||
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
|
||||
|
||||
"github.com/ethereum/go-ethereum"
|
||||
@ -55,6 +56,7 @@ type Chain struct {
|
||||
Earn earntypes.QueryClient
|
||||
Evm evmtypes.QueryClient
|
||||
Evmutil evmutiltypes.QueryClient
|
||||
Gov govv1types.QueryClient
|
||||
Tm tmservice.ServiceClient
|
||||
Tx txtypes.ServiceClient
|
||||
Upgrade upgradetypes.QueryClient
|
||||
@ -91,6 +93,7 @@ func NewChain(t *testing.T, details *runner.ChainDetails, fundedAccountMnemonic
|
||||
chain.Earn = earntypes.NewQueryClient(grpcConn)
|
||||
chain.Evm = evmtypes.NewQueryClient(grpcConn)
|
||||
chain.Evmutil = evmutiltypes.NewQueryClient(grpcConn)
|
||||
chain.Gov = govv1types.NewQueryClient(grpcConn)
|
||||
chain.Tm = tmservice.NewServiceClient(grpcConn)
|
||||
chain.Tx = txtypes.NewServiceClient(grpcConn)
|
||||
chain.Upgrade = upgradetypes.NewQueryClient(grpcConn)
|
||||
|
@ -25,6 +25,10 @@ type Keeper struct {
|
||||
kavadistKeeper types.KavadistKeeper
|
||||
stakingKeeper types.StakingKeeper
|
||||
|
||||
// the address capable of executing a MsgUpdateParams message. Typically, this
|
||||
// should be the x/gov module account.
|
||||
authority sdk.AccAddress
|
||||
|
||||
legacyCommunityPoolAddress sdk.AccAddress
|
||||
}
|
||||
|
||||
@ -40,6 +44,7 @@ func NewKeeper(
|
||||
mk types.MintKeeper,
|
||||
kk types.KavadistKeeper,
|
||||
sk types.StakingKeeper,
|
||||
authority sdk.AccAddress,
|
||||
) Keeper {
|
||||
// ensure community module account is set
|
||||
addr := ak.GetModuleAddress(types.ModuleAccountName)
|
||||
@ -50,6 +55,9 @@ func NewKeeper(
|
||||
if addr == nil {
|
||||
panic("legacy community pool address not found")
|
||||
}
|
||||
if err := sdk.VerifyAddressFormat(authority); err != nil {
|
||||
panic(fmt.Sprintf("invalid authority address: %s", err))
|
||||
}
|
||||
|
||||
return Keeper{
|
||||
key: key,
|
||||
@ -64,10 +72,16 @@ func NewKeeper(
|
||||
stakingKeeper: sk,
|
||||
moduleAddress: addr,
|
||||
|
||||
authority: authority,
|
||||
legacyCommunityPoolAddress: legacyAddr,
|
||||
}
|
||||
}
|
||||
|
||||
// GetAuthority returns the x/community module's authority.
|
||||
func (k Keeper) GetAuthority() sdk.AccAddress {
|
||||
return k.authority
|
||||
}
|
||||
|
||||
// Logger returns a module-specific logger.
|
||||
func (k Keeper) Logger(ctx sdk.Context) log.Logger {
|
||||
return ctx.Logger().With("module", "x/"+types.ModuleName)
|
||||
|
@ -1,13 +1,18 @@
|
||||
package keeper_test
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
sdkmath "cosmossdk.io/math"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/types/address"
|
||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
|
||||
"github.com/stretchr/testify/suite"
|
||||
|
||||
"github.com/kava-labs/kava/x/community/keeper"
|
||||
"github.com/kava-labs/kava/x/community/testutil"
|
||||
"github.com/kava-labs/kava/x/community/types"
|
||||
)
|
||||
@ -89,3 +94,95 @@ func (suite *KeeperTestSuite) TestGetAndSetStakingRewardsState() {
|
||||
|
||||
suite.Equal(validParams, keeper.GetStakingRewardsState(suite.Ctx), "expected fetched state to equal set state")
|
||||
}
|
||||
|
||||
func (suite *KeeperTestSuite) TestGetAuthority_Default() {
|
||||
suite.Equal(
|
||||
authtypes.NewModuleAddress(govtypes.ModuleName),
|
||||
suite.Keeper.GetAuthority(),
|
||||
"expected fetched authority to equal x/gov address",
|
||||
)
|
||||
}
|
||||
|
||||
func (suite *KeeperTestSuite) TestGetAuthority_Any() {
|
||||
tests := []struct {
|
||||
name string
|
||||
authority sdk.AccAddress
|
||||
}{
|
||||
{
|
||||
name: "gov",
|
||||
authority: authtypes.NewModuleAddress(govtypes.ModuleName),
|
||||
},
|
||||
{
|
||||
name: "random",
|
||||
authority: sdk.AccAddress("random"),
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range tests {
|
||||
suite.Run(tc.name, func() {
|
||||
suite.NotPanics(func() {
|
||||
suite.Keeper = keeper.NewKeeper(
|
||||
suite.App.AppCodec(),
|
||||
suite.App.GetKVStoreKey(types.StoreKey),
|
||||
suite.App.GetAccountKeeper(),
|
||||
suite.App.GetBankKeeper(),
|
||||
suite.App.GetCDPKeeper(),
|
||||
suite.App.GetDistrKeeper(),
|
||||
suite.App.GetHardKeeper(),
|
||||
suite.App.GetMintKeeper(),
|
||||
suite.App.GetKavadistKeeper(),
|
||||
suite.App.GetStakingKeeper(),
|
||||
tc.authority,
|
||||
)
|
||||
})
|
||||
|
||||
suite.Equalf(
|
||||
tc.authority,
|
||||
suite.Keeper.GetAuthority(),
|
||||
"expected fetched authority to equal %s address",
|
||||
tc.authority,
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (suite *KeeperTestSuite) TestNewKeeper_InvalidAuthority() {
|
||||
tests := []struct {
|
||||
name string
|
||||
authority sdk.AccAddress
|
||||
panicStr string
|
||||
}{
|
||||
{
|
||||
name: "empty",
|
||||
authority: sdk.AccAddress{},
|
||||
panicStr: "invalid authority address: addresses cannot be empty: unknown address",
|
||||
},
|
||||
{
|
||||
name: "too long",
|
||||
authority: sdk.AccAddress(strings.Repeat("a", address.MaxAddrLen+1)),
|
||||
panicStr: "invalid authority address: address max length is 255, got 256: unknown address",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range tests {
|
||||
suite.Run(tc.name, func() {
|
||||
suite.PanicsWithValue(
|
||||
tc.panicStr,
|
||||
func() {
|
||||
suite.Keeper = keeper.NewKeeper(
|
||||
suite.App.AppCodec(),
|
||||
suite.App.GetKVStoreKey(types.StoreKey),
|
||||
suite.App.GetAccountKeeper(),
|
||||
suite.App.GetBankKeeper(),
|
||||
suite.App.GetCDPKeeper(),
|
||||
suite.App.GetDistrKeeper(),
|
||||
suite.App.GetHardKeeper(),
|
||||
suite.App.GetMintKeeper(),
|
||||
suite.App.GetKavadistKeeper(),
|
||||
suite.App.GetStakingKeeper(),
|
||||
tc.authority,
|
||||
)
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -3,7 +3,9 @@ package keeper
|
||||
import (
|
||||
"context"
|
||||
|
||||
"cosmossdk.io/errors"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
|
||||
|
||||
"github.com/kava-labs/kava/x/community/types"
|
||||
)
|
||||
@ -47,3 +49,28 @@ func (s msgServer) FundCommunityPool(goCtx context.Context, msg *types.MsgFundCo
|
||||
|
||||
return &types.MsgFundCommunityPoolResponse{}, nil
|
||||
}
|
||||
|
||||
// UpdateParams handles UpdateParams msgs.
|
||||
func (s msgServer) UpdateParams(
|
||||
goCtx context.Context,
|
||||
msg *types.MsgUpdateParams,
|
||||
) (*types.MsgUpdateParamsResponse, error) {
|
||||
ctx := sdk.UnwrapSDKContext(goCtx)
|
||||
|
||||
if s.keeper.GetAuthority().String() != msg.Authority {
|
||||
return nil, errors.Wrapf(
|
||||
govtypes.ErrInvalidSigner,
|
||||
"invalid authority; expected %s, got %s",
|
||||
s.keeper.GetAuthority(),
|
||||
msg.Authority,
|
||||
)
|
||||
}
|
||||
|
||||
if err := msg.Params.Validate(); err != nil {
|
||||
return nil, errors.Wrap(types.ErrInvalidParams, err.Error())
|
||||
}
|
||||
|
||||
s.keeper.SetParams(ctx, msg.Params)
|
||||
|
||||
return &types.MsgUpdateParamsResponse{}, nil
|
||||
}
|
||||
|
@ -5,6 +5,8 @@ import (
|
||||
|
||||
sdkmath "cosmossdk.io/math"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
|
||||
"github.com/stretchr/testify/suite"
|
||||
|
||||
"github.com/kava-labs/kava/app"
|
||||
@ -110,3 +112,59 @@ func (suite *msgServerTestSuite) TestMsgFundCommunityPool() {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (suite *msgServerTestSuite) TestMsgUpdateParams() {
|
||||
govAddr := authtypes.NewModuleAddress(govtypes.ModuleName)
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
msg types.MsgUpdateParams
|
||||
expectedError error
|
||||
}{
|
||||
{
|
||||
name: "valid",
|
||||
msg: types.MsgUpdateParams{
|
||||
Authority: govAddr.String(),
|
||||
Params: types.DefaultParams(),
|
||||
},
|
||||
expectedError: nil,
|
||||
},
|
||||
{
|
||||
name: "invalid - bad authority",
|
||||
msg: types.MsgUpdateParams{
|
||||
Authority: sdk.AccAddress{1, 2, 3}.String(),
|
||||
Params: types.DefaultParams(),
|
||||
},
|
||||
expectedError: govtypes.ErrInvalidSigner,
|
||||
},
|
||||
{
|
||||
name: "invalid - empty authority",
|
||||
msg: types.MsgUpdateParams{
|
||||
Authority: "",
|
||||
Params: types.DefaultParams(),
|
||||
},
|
||||
expectedError: govtypes.ErrInvalidSigner,
|
||||
},
|
||||
{
|
||||
name: "invalid - parameters",
|
||||
msg: types.MsgUpdateParams{
|
||||
Authority: govAddr.String(),
|
||||
Params: types.Params{},
|
||||
},
|
||||
expectedError: types.ErrInvalidParams,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
suite.Run(tc.name, func() {
|
||||
suite.SetupTest()
|
||||
|
||||
_, err := suite.msgServer.UpdateParams(sdk.WrapSDKContext(suite.Ctx), &tc.msg)
|
||||
if tc.expectedError == nil {
|
||||
suite.NoError(err)
|
||||
} else {
|
||||
suite.ErrorIs(err, tc.expectedError)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package types
|
||||
|
||||
import (
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
"github.com/cosmos/cosmos-sdk/codec/legacy"
|
||||
"github.com/cosmos/cosmos-sdk/codec/types"
|
||||
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
@ -12,7 +13,9 @@ import (
|
||||
|
||||
// RegisterLegacyAminoCodec registers all the necessary types and interfaces for the module.
|
||||
func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {
|
||||
cdc.RegisterConcrete(&MsgFundCommunityPool{}, "community/MsgFundCommunityPool", nil)
|
||||
legacy.RegisterAminoMsg(cdc, &MsgFundCommunityPool{}, "community/MsgFundCommunityPool")
|
||||
legacy.RegisterAminoMsg(cdc, &MsgUpdateParams{}, "community/MsgUpdateParams")
|
||||
|
||||
cdc.RegisterConcrete(&CommunityPoolLendDepositProposal{}, "kava/CommunityPoolLendDepositProposal", nil)
|
||||
cdc.RegisterConcrete(&CommunityPoolLendWithdrawProposal{}, "kava/CommunityPoolLendWithdrawProposal", nil)
|
||||
cdc.RegisterConcrete(&CommunityCDPRepayDebtProposal{}, "kava/CommunityCDPRepayDebtProposal", nil)
|
||||
@ -24,6 +27,7 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {
|
||||
func RegisterInterfaces(registry types.InterfaceRegistry) {
|
||||
registry.RegisterImplementations((*sdk.Msg)(nil),
|
||||
&MsgFundCommunityPool{},
|
||||
&MsgUpdateParams{},
|
||||
)
|
||||
registry.RegisterImplementations((*govv1beta1.Content)(nil),
|
||||
&CommunityPoolLendDepositProposal{},
|
||||
|
5
x/community/types/errors.go
Normal file
5
x/community/types/errors.go
Normal file
@ -0,0 +1,5 @@
|
||||
package types
|
||||
|
||||
import errorsmod "cosmossdk.io/errors"
|
||||
|
||||
var ErrInvalidParams = errorsmod.Register(ModuleName, 1, "invalid params")
|
@ -11,6 +11,8 @@ import (
|
||||
var (
|
||||
_ sdk.Msg = &MsgFundCommunityPool{}
|
||||
_ legacytx.LegacyMsg = &MsgFundCommunityPool{}
|
||||
_ sdk.Msg = &MsgUpdateParams{}
|
||||
_ legacytx.LegacyMsg = &MsgUpdateParams{}
|
||||
)
|
||||
|
||||
// NewMsgFundCommunityPool returns a new MsgFundCommunityPool
|
||||
@ -55,3 +57,46 @@ func (msg MsgFundCommunityPool) GetSigners() []sdk.AccAddress {
|
||||
}
|
||||
return []sdk.AccAddress{depositor}
|
||||
}
|
||||
|
||||
// NewMsgUpdateParams returns a new MsgUpdateParams
|
||||
func NewMsgUpdateParams(authority sdk.AccAddress, params Params) MsgUpdateParams {
|
||||
return MsgUpdateParams{
|
||||
Authority: authority.String(),
|
||||
Params: params,
|
||||
}
|
||||
}
|
||||
|
||||
// Route return the message type used for routing the message.
|
||||
func (msg MsgUpdateParams) Route() string { return ModuleName }
|
||||
|
||||
// Type returns a human-readable string for the message, intended for utilization within tags.
|
||||
func (msg MsgUpdateParams) Type() string { return sdk.MsgTypeURL(&msg) }
|
||||
|
||||
// ValidateBasic does a simple validation check that doesn't require access to any other information.
|
||||
func (msg MsgUpdateParams) ValidateBasic() error {
|
||||
_, err := sdk.AccAddressFromBech32(msg.Authority)
|
||||
if err != nil {
|
||||
return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, err.Error())
|
||||
}
|
||||
|
||||
if err := msg.Params.Validate(); err != nil {
|
||||
return errorsmod.Wrap(ErrInvalidParams, err.Error())
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetSignBytes gets the canonical byte representation of the Msg.
|
||||
func (msg MsgUpdateParams) GetSignBytes() []byte {
|
||||
bz := ModuleCdc.MustMarshalJSON(&msg)
|
||||
return sdk.MustSortJSON(bz)
|
||||
}
|
||||
|
||||
// GetSigners returns the addresses of signers that must sign.
|
||||
func (msg MsgUpdateParams) GetSigners() []sdk.AccAddress {
|
||||
depositor, err := sdk.AccAddressFromBech32(msg.Authority)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return []sdk.AccAddress{depositor}
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ import (
|
||||
|
||||
sdkmath "cosmossdk.io/math"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
"github.com/kava-labs/kava/app"
|
||||
"github.com/kava-labs/kava/x/community/types"
|
||||
)
|
||||
@ -74,6 +75,55 @@ func TestFundCommunityPool_ValidateBasic(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestMsgUpdateParams_ValidateBasic(t *testing.T) {
|
||||
testCases := []struct {
|
||||
name string
|
||||
message types.MsgUpdateParams
|
||||
expectedErr error
|
||||
}{
|
||||
{
|
||||
name: "valid message",
|
||||
message: types.NewMsgUpdateParams(app.RandomAddress(), types.DefaultParams()),
|
||||
expectedErr: nil,
|
||||
},
|
||||
{
|
||||
name: "invalid - bad authority",
|
||||
message: types.MsgUpdateParams{
|
||||
Authority: "not-an-address",
|
||||
Params: types.DefaultParams(),
|
||||
},
|
||||
expectedErr: sdkerrors.ErrInvalidAddress,
|
||||
},
|
||||
{
|
||||
name: "invalid - empty authority",
|
||||
message: types.MsgUpdateParams{
|
||||
Authority: "",
|
||||
Params: types.DefaultParams(),
|
||||
},
|
||||
expectedErr: sdkerrors.ErrInvalidAddress,
|
||||
},
|
||||
{
|
||||
name: "invalid - invalid params",
|
||||
message: types.MsgUpdateParams{
|
||||
Authority: app.RandomAddress().String(),
|
||||
Params: types.Params{},
|
||||
},
|
||||
expectedErr: types.ErrInvalidParams,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
err := tc.message.ValidateBasic()
|
||||
if tc.expectedErr == nil {
|
||||
require.NoError(t, err)
|
||||
} else {
|
||||
require.ErrorIs(t, err, tc.expectedErr)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestFundCommunityPool_GetSigners(t *testing.T) {
|
||||
t.Run("valid", func(t *testing.T) {
|
||||
address := app.RandomAddress()
|
||||
@ -92,3 +142,22 @@ func TestFundCommunityPool_GetSigners(t *testing.T) {
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func TestMsgUpdateParams_GetSigners(t *testing.T) {
|
||||
t.Run("valid", func(t *testing.T) {
|
||||
address := app.RandomAddress()
|
||||
signers := types.MsgUpdateParams{
|
||||
Authority: address.String(),
|
||||
}.GetSigners()
|
||||
require.Len(t, signers, 1)
|
||||
require.Equal(t, address, signers[0])
|
||||
})
|
||||
|
||||
t.Run("panics when depositor is invalid", func(t *testing.T) {
|
||||
require.Panics(t, func() {
|
||||
types.MsgUpdateParams{
|
||||
Authority: "not-an-address",
|
||||
}.GetSigners()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
@ -90,33 +90,64 @@ func init() {
|
||||
}
|
||||
|
||||
var fileDescriptor_0a48475520900507 = []byte{
|
||||
// 373 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x92, 0xc1, 0x4a, 0xc3, 0x30,
|
||||
0x18, 0xc7, 0x9b, 0x09, 0x43, 0xeb, 0xad, 0x88, 0xce, 0x0e, 0xda, 0xa1, 0x08, 0x83, 0xb1, 0x84,
|
||||
0xe9, 0x1b, 0x8c, 0x79, 0x10, 0x3c, 0x8c, 0xcd, 0x93, 0x97, 0x90, 0xb6, 0x59, 0x16, 0xd6, 0x36,
|
||||
0xa5, 0x49, 0xa7, 0x7b, 0x08, 0x61, 0x0f, 0xe3, 0x43, 0xec, 0x38, 0x3c, 0x89, 0x87, 0x29, 0xdb,
|
||||
0x23, 0xf8, 0x02, 0xd2, 0xa6, 0x93, 0x09, 0xe2, 0xc1, 0xdb, 0xf7, 0x7d, 0xf9, 0xe7, 0x97, 0xef,
|
||||
0x9f, 0xef, 0x33, 0xcf, 0x27, 0x64, 0x4a, 0x90, 0x2f, 0xa2, 0x28, 0x8b, 0xb9, 0x9a, 0xa1, 0x69,
|
||||
0xc7, 0xa3, 0x8a, 0x74, 0x50, 0x42, 0x52, 0x12, 0x49, 0x98, 0xa4, 0x42, 0x09, 0xeb, 0x38, 0x17,
|
||||
0xc1, 0x6f, 0x11, 0x2c, 0x45, 0xf6, 0xa9, 0x2f, 0x64, 0x24, 0x24, 0x2e, 0x54, 0x48, 0x27, 0xfa,
|
||||
0x8a, 0x7d, 0xc4, 0x04, 0x13, 0xba, 0x9e, 0x47, 0x65, 0xd5, 0x65, 0x42, 0xb0, 0x90, 0xa2, 0x22,
|
||||
0xf3, 0xb2, 0x11, 0x52, 0x3c, 0xa2, 0x52, 0x91, 0x28, 0xd1, 0x82, 0xb3, 0xcf, 0x8a, 0x59, 0xed,
|
||||
0x17, 0x4f, 0x5b, 0xdc, 0x74, 0xb2, 0x84, 0xa5, 0x24, 0xa0, 0x38, 0x57, 0xe1, 0x80, 0x4b, 0xe2,
|
||||
0x85, 0x14, 0xf3, 0x78, 0x14, 0x12, 0xc5, 0x45, 0x5c, 0x03, 0x0d, 0xd0, 0x3c, 0xbc, 0xb4, 0xa1,
|
||||
0x86, 0xc2, 0x2d, 0x14, 0xde, 0x6d, 0xa1, 0xdd, 0xfd, 0xc5, 0xca, 0x35, 0xe6, 0xef, 0x2e, 0x18,
|
||||
0xd4, 0x4b, 0x56, 0x7e, 0xd6, 0xd3, 0xa4, 0x9b, 0x2d, 0xc8, 0x8a, 0x4d, 0x5b, 0x2a, 0x32, 0xe1,
|
||||
0x31, 0xc3, 0x29, 0x7d, 0x20, 0x69, 0x20, 0x71, 0x42, 0x53, 0x2c, 0xa9, 0x2f, 0xe2, 0xa0, 0x56,
|
||||
0x69, 0x80, 0xe6, 0x41, 0xb7, 0x93, 0xa3, 0xde, 0x56, 0x6e, 0x5d, 0xdb, 0x94, 0xc1, 0x04, 0x72,
|
||||
0x81, 0x22, 0xa2, 0xc6, 0xf0, 0x96, 0x32, 0xe2, 0xcf, 0x7a, 0xd4, 0x7f, 0x79, 0x6e, 0x9b, 0xe5,
|
||||
0x2f, 0xf4, 0xa8, 0x3f, 0x38, 0x29, 0xa1, 0x03, 0xcd, 0xec, 0xd3, 0x74, 0x58, 0x10, 0xad, 0x27,
|
||||
0x60, 0xb6, 0x7e, 0x78, 0x93, 0x54, 0xe1, 0x3f, 0x3a, 0xd8, 0xfb, 0x6f, 0x07, 0x17, 0x3b, 0xae,
|
||||
0x87, 0x54, 0x0d, 0x7f, 0xef, 0xa7, 0x7b, 0xbd, 0x58, 0x3b, 0x60, 0xb9, 0x76, 0xc0, 0xc7, 0xda,
|
||||
0x01, 0xf3, 0x8d, 0x63, 0x2c, 0x37, 0x8e, 0xf1, 0xba, 0x71, 0x8c, 0xfb, 0x16, 0xe3, 0x6a, 0x9c,
|
||||
0x79, 0xf9, 0xec, 0x51, 0xbe, 0x04, 0xed, 0x90, 0x78, 0xb2, 0x88, 0xd0, 0xe3, 0xce, 0xd6, 0xa8,
|
||||
0x59, 0x42, 0xa5, 0x57, 0x2d, 0x26, 0x70, 0xf5, 0x15, 0x00, 0x00, 0xff, 0xff, 0x8a, 0x51, 0x6e,
|
||||
0xa4, 0x54, 0x02, 0x00, 0x00,
|
||||
// 386 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x92, 0x41, 0x4b, 0xe3, 0x40,
|
||||
0x14, 0x80, 0x33, 0xdd, 0xa5, 0xec, 0x66, 0x6f, 0x61, 0xd9, 0xad, 0x29, 0x24, 0x45, 0x11, 0x0a,
|
||||
0xa5, 0x33, 0x54, 0x6f, 0x1e, 0x4b, 0x3d, 0x08, 0x1e, 0x4a, 0xeb, 0xc9, 0xcb, 0x30, 0x49, 0xa6,
|
||||
0xd3, 0xa1, 0x49, 0x26, 0x64, 0x26, 0xd5, 0xfe, 0x08, 0xa1, 0x3f, 0xc1, 0x1f, 0xe1, 0x8f, 0xe8,
|
||||
0xb1, 0x78, 0x12, 0x0f, 0x55, 0xda, 0x8b, 0x7f, 0xc1, 0x9b, 0x24, 0x93, 0x4a, 0x05, 0xf1, 0xe0,
|
||||
0xed, 0xbd, 0x97, 0x2f, 0xdf, 0xbc, 0x37, 0xf3, 0xcc, 0x83, 0x09, 0x99, 0x12, 0xe4, 0x8b, 0x28,
|
||||
0xca, 0x62, 0xae, 0x66, 0x68, 0xda, 0xf1, 0xa8, 0x22, 0x1d, 0x94, 0x90, 0x94, 0x44, 0x12, 0x26,
|
||||
0xa9, 0x50, 0xc2, 0xfa, 0x97, 0x43, 0xf0, 0x1d, 0x82, 0x25, 0x64, 0xef, 0xf9, 0x42, 0x46, 0x42,
|
||||
0xe2, 0x82, 0x42, 0x3a, 0xd1, 0xbf, 0xd8, 0x7f, 0x99, 0x60, 0x42, 0xd7, 0xf3, 0xa8, 0xac, 0xba,
|
||||
0x4c, 0x08, 0x16, 0x52, 0x54, 0x64, 0x5e, 0x36, 0x42, 0x8a, 0x47, 0x54, 0x2a, 0x12, 0x25, 0x1a,
|
||||
0xd8, 0x7f, 0xad, 0x98, 0xd5, 0x7e, 0x71, 0xb4, 0xc5, 0x4d, 0x27, 0x4b, 0x58, 0x4a, 0x02, 0x8a,
|
||||
0x73, 0x0a, 0x07, 0x5c, 0x12, 0x2f, 0xa4, 0x98, 0xc7, 0xa3, 0x90, 0x28, 0x2e, 0xe2, 0x1a, 0x68,
|
||||
0x80, 0xe6, 0x9f, 0x23, 0x1b, 0x6a, 0x29, 0xdc, 0x4a, 0xe1, 0xc5, 0x56, 0xda, 0xfd, 0xb5, 0x58,
|
||||
0xb9, 0xc6, 0xfc, 0xc9, 0x05, 0x83, 0x7a, 0xe9, 0xca, 0xbf, 0xf5, 0xb4, 0xe9, 0x6c, 0x2b, 0xb2,
|
||||
0x62, 0xd3, 0x96, 0x8a, 0x4c, 0x78, 0xcc, 0x70, 0x4a, 0xaf, 0x48, 0x1a, 0x48, 0x9c, 0xd0, 0x14,
|
||||
0x4b, 0xea, 0x8b, 0x38, 0xa8, 0x55, 0x1a, 0xa0, 0xf9, 0xbb, 0xdb, 0xc9, 0x55, 0x8f, 0x2b, 0xb7,
|
||||
0xae, 0xc7, 0x94, 0xc1, 0x04, 0x72, 0x81, 0x22, 0xa2, 0xc6, 0xf0, 0x9c, 0x32, 0xe2, 0xcf, 0x7a,
|
||||
0xd4, 0xbf, 0xbf, 0x6b, 0x9b, 0xe5, 0x2d, 0xf4, 0xa8, 0x3f, 0xf8, 0x5f, 0x4a, 0x07, 0xda, 0xd9,
|
||||
0xa7, 0xe9, 0xb0, 0x30, 0x5a, 0x37, 0xc0, 0x6c, 0x7d, 0x98, 0x4d, 0x52, 0x85, 0xbf, 0xe8, 0xe0,
|
||||
0xc7, 0x77, 0x3b, 0x38, 0xdc, 0x99, 0x7a, 0x48, 0xd5, 0xf0, 0xf3, 0x7e, 0x4e, 0x7e, 0xbe, 0xdc,
|
||||
0xba, 0xa0, 0x7b, 0xba, 0x58, 0x3b, 0x60, 0xb9, 0x76, 0xc0, 0xf3, 0xda, 0x01, 0xf3, 0x8d, 0x63,
|
||||
0x2c, 0x37, 0x8e, 0xf1, 0xb0, 0x71, 0x8c, 0xcb, 0x16, 0xe3, 0x6a, 0x9c, 0x79, 0xf9, 0x06, 0xa0,
|
||||
0x7c, 0x15, 0xda, 0x21, 0xf1, 0x64, 0x11, 0xa1, 0xeb, 0x9d, 0xdd, 0x51, 0xb3, 0x84, 0x4a, 0xaf,
|
||||
0x5a, 0xbc, 0xc3, 0xf1, 0x5b, 0x00, 0x00, 0x00, 0xff, 0xff, 0x19, 0x03, 0x78, 0xe5, 0x5a, 0x02,
|
||||
0x00, 0x00,
|
||||
}
|
||||
|
||||
func (this *Params) Equal(that interface{}) bool {
|
||||
if that == nil {
|
||||
return this == nil
|
||||
}
|
||||
|
||||
that1, ok := that.(*Params)
|
||||
if !ok {
|
||||
that2, ok := that.(Params)
|
||||
if ok {
|
||||
that1 = &that2
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
if that1 == nil {
|
||||
return this == nil
|
||||
} else if this == nil {
|
||||
return false
|
||||
}
|
||||
if !this.UpgradeTimeDisableInflation.Equal(that1.UpgradeTimeDisableInflation) {
|
||||
return false
|
||||
}
|
||||
if !this.StakingRewardsPerSecond.Equal(that1.StakingRewardsPerSecond) {
|
||||
return false
|
||||
}
|
||||
if !this.UpgradeTimeSetStakingRewardsPerSecond.Equal(that1.UpgradeTimeSetStakingRewardsPerSecond) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
func (m *Params) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
|
@ -107,37 +107,123 @@ func (m *MsgFundCommunityPoolResponse) XXX_DiscardUnknown() {
|
||||
|
||||
var xxx_messageInfo_MsgFundCommunityPoolResponse proto.InternalMessageInfo
|
||||
|
||||
// MsgUpdateParams allows an account to update the community module parameters.
|
||||
type MsgUpdateParams struct {
|
||||
// authority is the address that controls the module (defaults to x/gov unless overwritten).
|
||||
Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"`
|
||||
// params defines the x/community parameters to update.
|
||||
Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"`
|
||||
}
|
||||
|
||||
func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} }
|
||||
func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) }
|
||||
func (*MsgUpdateParams) ProtoMessage() {}
|
||||
func (*MsgUpdateParams) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_e81067e0fbdaca18, []int{2}
|
||||
}
|
||||
func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
}
|
||||
func (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
if deterministic {
|
||||
return xxx_messageInfo_MsgUpdateParams.Marshal(b, m, deterministic)
|
||||
} else {
|
||||
b = b[:cap(b)]
|
||||
n, err := m.MarshalToSizedBuffer(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b[:n], nil
|
||||
}
|
||||
}
|
||||
func (m *MsgUpdateParams) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_MsgUpdateParams.Merge(m, src)
|
||||
}
|
||||
func (m *MsgUpdateParams) XXX_Size() int {
|
||||
return m.Size()
|
||||
}
|
||||
func (m *MsgUpdateParams) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_MsgUpdateParams.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo
|
||||
|
||||
// MsgUpdateParamsResponse defines the Msg/UpdateParams response type.
|
||||
type MsgUpdateParamsResponse struct {
|
||||
}
|
||||
|
||||
func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse{} }
|
||||
func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*MsgUpdateParamsResponse) ProtoMessage() {}
|
||||
func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_e81067e0fbdaca18, []int{3}
|
||||
}
|
||||
func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
}
|
||||
func (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
if deterministic {
|
||||
return xxx_messageInfo_MsgUpdateParamsResponse.Marshal(b, m, deterministic)
|
||||
} else {
|
||||
b = b[:cap(b)]
|
||||
n, err := m.MarshalToSizedBuffer(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b[:n], nil
|
||||
}
|
||||
}
|
||||
func (m *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src)
|
||||
}
|
||||
func (m *MsgUpdateParamsResponse) XXX_Size() int {
|
||||
return m.Size()
|
||||
}
|
||||
func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo
|
||||
|
||||
func init() {
|
||||
proto.RegisterType((*MsgFundCommunityPool)(nil), "kava.community.v1beta1.MsgFundCommunityPool")
|
||||
proto.RegisterType((*MsgFundCommunityPoolResponse)(nil), "kava.community.v1beta1.MsgFundCommunityPoolResponse")
|
||||
proto.RegisterType((*MsgUpdateParams)(nil), "kava.community.v1beta1.MsgUpdateParams")
|
||||
proto.RegisterType((*MsgUpdateParamsResponse)(nil), "kava.community.v1beta1.MsgUpdateParamsResponse")
|
||||
}
|
||||
|
||||
func init() { proto.RegisterFile("kava/community/v1beta1/tx.proto", fileDescriptor_e81067e0fbdaca18) }
|
||||
|
||||
var fileDescriptor_e81067e0fbdaca18 = []byte{
|
||||
// 348 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcf, 0x4e, 0x2c, 0x4b,
|
||||
0xd4, 0x4f, 0xce, 0xcf, 0xcd, 0x2d, 0xcd, 0xcb, 0x2c, 0xa9, 0xd4, 0x2f, 0x33, 0x4c, 0x4a, 0x2d,
|
||||
0x49, 0x34, 0xd4, 0x2f, 0xa9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x03, 0x29, 0xd0,
|
||||
0x83, 0x2b, 0xd0, 0x83, 0x2a, 0x90, 0x92, 0x4b, 0xce, 0x2f, 0xce, 0xcd, 0x2f, 0xd6, 0x4f, 0x4a,
|
||||
0x2c, 0x4e, 0x85, 0xeb, 0x4a, 0xce, 0xcf, 0xcc, 0x83, 0xe8, 0x93, 0x92, 0x84, 0xc8, 0xc7, 0x83,
|
||||
0x79, 0xfa, 0x10, 0x0e, 0x54, 0x4a, 0x24, 0x3d, 0x3f, 0x3d, 0x1f, 0x22, 0x0e, 0x62, 0x41, 0x44,
|
||||
0x95, 0x76, 0x32, 0x72, 0x89, 0xf8, 0x16, 0xa7, 0xbb, 0x95, 0xe6, 0xa5, 0x38, 0xc3, 0x6c, 0x0b,
|
||||
0xc8, 0xcf, 0xcf, 0x11, 0x4a, 0xe6, 0x62, 0x4b, 0xcc, 0xcd, 0x2f, 0xcd, 0x2b, 0x91, 0x60, 0x54,
|
||||
0x60, 0xd6, 0xe0, 0x36, 0x92, 0xd4, 0x83, 0x9a, 0x06, 0xb2, 0x1a, 0xe6, 0x1e, 0x3d, 0xe7, 0xfc,
|
||||
0xcc, 0x3c, 0x27, 0x83, 0x13, 0xf7, 0xe4, 0x19, 0x56, 0xdd, 0x97, 0xd7, 0x48, 0xcf, 0x2c, 0xc9,
|
||||
0x28, 0x4d, 0x02, 0x39, 0x1b, 0x6a, 0x35, 0x94, 0xd2, 0x2d, 0x4e, 0xc9, 0xd6, 0x2f, 0xa9, 0x2c,
|
||||
0x48, 0x2d, 0x06, 0x6b, 0x28, 0x0e, 0x82, 0x1a, 0x2d, 0x64, 0xc6, 0xc5, 0x99, 0x92, 0x5a, 0x90,
|
||||
0x5f, 0x9c, 0x59, 0x92, 0x5f, 0x24, 0xc1, 0xa4, 0xc0, 0xa8, 0xc1, 0xe9, 0x24, 0x71, 0x69, 0x8b,
|
||||
0xae, 0x08, 0xd4, 0x2a, 0xc7, 0x94, 0x94, 0xa2, 0xd4, 0xe2, 0xe2, 0xe0, 0x92, 0xa2, 0xcc, 0xbc,
|
||||
0xf4, 0x20, 0x84, 0x52, 0x2b, 0x96, 0x8e, 0x05, 0xf2, 0x0c, 0x4a, 0x72, 0x5c, 0x32, 0xd8, 0x9c,
|
||||
0x1e, 0x94, 0x5a, 0x5c, 0x90, 0x9f, 0x57, 0x9c, 0x6a, 0x54, 0xc7, 0xc5, 0xec, 0x5b, 0x9c, 0x2e,
|
||||
0x54, 0xce, 0x25, 0x88, 0xe9, 0x3d, 0x1d, 0x3d, 0xec, 0x21, 0xac, 0x87, 0xcd, 0x44, 0x29, 0x13,
|
||||
0x52, 0x54, 0xc3, 0xec, 0x77, 0xf2, 0x5c, 0xf1, 0x48, 0x8e, 0xf1, 0xc4, 0x23, 0x39, 0xc6, 0x0b,
|
||||
0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86,
|
||||
0x1b, 0x8f, 0xe5, 0x18, 0xa2, 0xb4, 0x91, 0x42, 0x0b, 0x64, 0xba, 0x6e, 0x4e, 0x62, 0x52, 0x31,
|
||||
0x98, 0xa5, 0x5f, 0x81, 0x94, 0x34, 0xc0, 0xc1, 0x96, 0xc4, 0x06, 0x8e, 0x2d, 0x63, 0x40, 0x00,
|
||||
0x00, 0x00, 0xff, 0xff, 0xc2, 0xe0, 0xfc, 0x03, 0x39, 0x02, 0x00, 0x00,
|
||||
// 446 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xcd, 0xaa, 0xd3, 0x40,
|
||||
0x14, 0xc7, 0x33, 0xde, 0x4b, 0xe1, 0xce, 0x15, 0xc4, 0x50, 0x34, 0x0d, 0x32, 0xb9, 0xd4, 0x85,
|
||||
0x05, 0x6d, 0xc6, 0x5b, 0xc5, 0x85, 0xb8, 0x31, 0x05, 0xc1, 0x45, 0xa1, 0x44, 0xdc, 0xb8, 0x91,
|
||||
0x49, 0x32, 0xa4, 0xa1, 0x4d, 0x4e, 0xc8, 0x4c, 0x6a, 0xfb, 0x06, 0x6e, 0x04, 0x1f, 0xc1, 0xa5,
|
||||
0xb8, 0x76, 0xe3, 0x1b, 0x74, 0x59, 0x5c, 0xb9, 0x52, 0x49, 0x37, 0x3e, 0x86, 0x24, 0x99, 0xd4,
|
||||
0xaa, 0xad, 0x1f, 0xab, 0xf9, 0xfa, 0x9f, 0xf3, 0xff, 0x9d, 0x33, 0x07, 0x5b, 0x53, 0x36, 0x67,
|
||||
0xd4, 0x87, 0x38, 0xce, 0x93, 0x48, 0x2e, 0xe9, 0xfc, 0xdc, 0xe3, 0x92, 0x9d, 0x53, 0xb9, 0xb0,
|
||||
0xd3, 0x0c, 0x24, 0xe8, 0x57, 0x4a, 0x81, 0xbd, 0x15, 0xd8, 0x4a, 0x60, 0x12, 0x1f, 0x44, 0x0c,
|
||||
0x82, 0x7a, 0x4c, 0xf0, 0x6d, 0x94, 0x0f, 0x51, 0x52, 0xc7, 0x99, 0x9d, 0xfa, 0xfd, 0x79, 0x75,
|
||||
0xa2, 0xf5, 0x41, 0x3d, 0xb5, 0x43, 0x08, 0xa1, 0xbe, 0x2f, 0x77, 0xea, 0xf6, 0xfa, 0x01, 0x92,
|
||||
0x94, 0x65, 0x2c, 0x56, 0xa1, 0xdd, 0x0f, 0x08, 0xb7, 0x47, 0x22, 0x7c, 0x94, 0x27, 0xc1, 0xb0,
|
||||
0x51, 0x8e, 0x01, 0x66, 0xba, 0x8f, 0x5b, 0x2c, 0x86, 0x3c, 0x91, 0x06, 0x3a, 0x3b, 0xea, 0x9d,
|
||||
0x0e, 0x3a, 0xb6, 0xb2, 0x2c, 0xf9, 0x1a, 0x68, 0x7b, 0x08, 0x51, 0xe2, 0xdc, 0x5e, 0x7d, 0xb6,
|
||||
0xb4, 0x77, 0x5f, 0xac, 0x5e, 0x18, 0xc9, 0x49, 0xee, 0x95, 0xb5, 0x29, 0x3e, 0xb5, 0xf4, 0x45,
|
||||
0x30, 0xa5, 0x72, 0x99, 0x72, 0x51, 0x05, 0x08, 0x57, 0xa5, 0xd6, 0xef, 0xe1, 0x93, 0x80, 0xa7,
|
||||
0x20, 0x22, 0x09, 0x99, 0x71, 0xe1, 0x0c, 0xf5, 0x4e, 0x1c, 0xe3, 0xe3, 0xfb, 0x7e, 0x5b, 0x59,
|
||||
0x3d, 0x0c, 0x82, 0x8c, 0x0b, 0xf1, 0x44, 0x66, 0x51, 0x12, 0xba, 0x3f, 0xa4, 0xf7, 0x8f, 0x5f,
|
||||
0xbe, 0xb1, 0xb4, 0x2e, 0xc1, 0xd7, 0xf6, 0xa1, 0xbb, 0x5c, 0xa4, 0x90, 0x08, 0xde, 0x7d, 0x85,
|
||||
0xf0, 0xa5, 0x91, 0x08, 0x9f, 0xa6, 0x01, 0x93, 0x7c, 0x5c, 0x55, 0x5d, 0x3a, 0xb2, 0x5c, 0x4e,
|
||||
0x20, 0x8b, 0xe4, 0xd2, 0x40, 0x7f, 0x73, 0xdc, 0x4a, 0xf5, 0x07, 0xb8, 0x55, 0xf7, 0xad, 0xc2,
|
||||
0x3c, 0x1d, 0x10, 0x7b, 0xff, 0x37, 0xda, 0xb5, 0x8f, 0x73, 0x5c, 0xf6, 0xc4, 0x55, 0x31, 0x8a,
|
||||
0xb7, 0x83, 0xaf, 0xfe, 0x82, 0xd3, 0xa0, 0x0e, 0xbe, 0x21, 0x7c, 0x34, 0x12, 0xa1, 0xfe, 0x02,
|
||||
0x5f, 0xfe, 0xfd, 0x2b, 0x6e, 0x1d, 0xf2, 0xda, 0x57, 0xbd, 0x79, 0xf7, 0x7f, 0xd4, 0x0d, 0x80,
|
||||
0x3e, 0xc1, 0x17, 0x7f, 0xea, 0xd3, 0x8d, 0x3f, 0x64, 0xd9, 0x15, 0x9a, 0xf4, 0x1f, 0x85, 0x8d,
|
||||
0x93, 0xf3, 0xf8, 0x6d, 0x41, 0xd0, 0xaa, 0x20, 0x68, 0x5d, 0x10, 0xf4, 0xb5, 0x20, 0xe8, 0xf5,
|
||||
0x86, 0x68, 0xeb, 0x0d, 0xd1, 0x3e, 0x6d, 0x88, 0xf6, 0xec, 0xe6, 0xce, 0x0c, 0x95, 0x89, 0xfb,
|
||||
0x33, 0xe6, 0x89, 0x6a, 0x47, 0x17, 0x3b, 0xb3, 0x5c, 0x0d, 0x93, 0xd7, 0xaa, 0x66, 0xf8, 0xce,
|
||||
0xf7, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x3a, 0x80, 0xec, 0x74, 0x03, 0x00, 0x00,
|
||||
}
|
||||
|
||||
func (this *MsgFundCommunityPool) Equal(that interface{}) bool {
|
||||
@ -193,6 +279,54 @@ func (this *MsgFundCommunityPoolResponse) Equal(that interface{}) bool {
|
||||
}
|
||||
return true
|
||||
}
|
||||
func (this *MsgUpdateParams) Equal(that interface{}) bool {
|
||||
if that == nil {
|
||||
return this == nil
|
||||
}
|
||||
|
||||
that1, ok := that.(*MsgUpdateParams)
|
||||
if !ok {
|
||||
that2, ok := that.(MsgUpdateParams)
|
||||
if ok {
|
||||
that1 = &that2
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
if that1 == nil {
|
||||
return this == nil
|
||||
} else if this == nil {
|
||||
return false
|
||||
}
|
||||
if this.Authority != that1.Authority {
|
||||
return false
|
||||
}
|
||||
if !this.Params.Equal(&that1.Params) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
func (this *MsgUpdateParamsResponse) Equal(that interface{}) bool {
|
||||
if that == nil {
|
||||
return this == nil
|
||||
}
|
||||
|
||||
that1, ok := that.(*MsgUpdateParamsResponse)
|
||||
if !ok {
|
||||
that2, ok := that.(MsgUpdateParamsResponse)
|
||||
if ok {
|
||||
that1 = &that2
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
if that1 == nil {
|
||||
return this == nil
|
||||
} else if this == nil {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var _ context.Context
|
||||
@ -208,6 +342,8 @@ const _ = grpc.SupportPackageIsVersion4
|
||||
type MsgClient interface {
|
||||
// FundCommunityPool defines a method to allow an account to directly fund the community module account.
|
||||
FundCommunityPool(ctx context.Context, in *MsgFundCommunityPool, opts ...grpc.CallOption) (*MsgFundCommunityPoolResponse, error)
|
||||
// UpdateParams defines a method to allow an account to update the community module parameters.
|
||||
UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error)
|
||||
}
|
||||
|
||||
type msgClient struct {
|
||||
@ -227,10 +363,21 @@ func (c *msgClient) FundCommunityPool(ctx context.Context, in *MsgFundCommunityP
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) {
|
||||
out := new(MsgUpdateParamsResponse)
|
||||
err := c.cc.Invoke(ctx, "/kava.community.v1beta1.Msg/UpdateParams", in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// MsgServer is the server API for Msg service.
|
||||
type MsgServer interface {
|
||||
// FundCommunityPool defines a method to allow an account to directly fund the community module account.
|
||||
FundCommunityPool(context.Context, *MsgFundCommunityPool) (*MsgFundCommunityPoolResponse, error)
|
||||
// UpdateParams defines a method to allow an account to update the community module parameters.
|
||||
UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error)
|
||||
}
|
||||
|
||||
// UnimplementedMsgServer can be embedded to have forward compatible implementations.
|
||||
@ -240,6 +387,9 @@ type UnimplementedMsgServer struct {
|
||||
func (*UnimplementedMsgServer) FundCommunityPool(ctx context.Context, req *MsgFundCommunityPool) (*MsgFundCommunityPoolResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method FundCommunityPool not implemented")
|
||||
}
|
||||
func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented")
|
||||
}
|
||||
|
||||
func RegisterMsgServer(s grpc1.Server, srv MsgServer) {
|
||||
s.RegisterService(&_Msg_serviceDesc, srv)
|
||||
@ -263,6 +413,24 @@ func _Msg_FundCommunityPool_Handler(srv interface{}, ctx context.Context, dec fu
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(MsgUpdateParams)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(MsgServer).UpdateParams(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/kava.community.v1beta1.Msg/UpdateParams",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
var _Msg_serviceDesc = grpc.ServiceDesc{
|
||||
ServiceName: "kava.community.v1beta1.Msg",
|
||||
HandlerType: (*MsgServer)(nil),
|
||||
@ -271,6 +439,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{
|
||||
MethodName: "FundCommunityPool",
|
||||
Handler: _Msg_FundCommunityPool_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "UpdateParams",
|
||||
Handler: _Msg_UpdateParams_Handler,
|
||||
},
|
||||
},
|
||||
Streams: []grpc.StreamDesc{},
|
||||
Metadata: "kava/community/v1beta1/tx.proto",
|
||||
@ -343,6 +515,69 @@ func (m *MsgFundCommunityPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, e
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dAtA[:n], nil
|
||||
}
|
||||
|
||||
func (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) {
|
||||
size := m.Size()
|
||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||
}
|
||||
|
||||
func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
i := len(dAtA)
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
{
|
||||
size, err := m.Params.MarshalToSizedBuffer(dAtA[:i])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
i -= size
|
||||
i = encodeVarintTx(dAtA, i, uint64(size))
|
||||
}
|
||||
i--
|
||||
dAtA[i] = 0x12
|
||||
if len(m.Authority) > 0 {
|
||||
i -= len(m.Authority)
|
||||
copy(dAtA[i:], m.Authority)
|
||||
i = encodeVarintTx(dAtA, i, uint64(len(m.Authority)))
|
||||
i--
|
||||
dAtA[i] = 0xa
|
||||
}
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dAtA[:n], nil
|
||||
}
|
||||
|
||||
func (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) {
|
||||
size := m.Size()
|
||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||
}
|
||||
|
||||
func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
i := len(dAtA)
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func encodeVarintTx(dAtA []byte, offset int, v uint64) int {
|
||||
offset -= sovTx(v)
|
||||
base := offset
|
||||
@ -382,6 +617,30 @@ func (m *MsgFundCommunityPoolResponse) Size() (n int) {
|
||||
return n
|
||||
}
|
||||
|
||||
func (m *MsgUpdateParams) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
l = len(m.Authority)
|
||||
if l > 0 {
|
||||
n += 1 + l + sovTx(uint64(l))
|
||||
}
|
||||
l = m.Params.Size()
|
||||
n += 1 + l + sovTx(uint64(l))
|
||||
return n
|
||||
}
|
||||
|
||||
func (m *MsgUpdateParamsResponse) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
return n
|
||||
}
|
||||
|
||||
func sovTx(x uint64) (n int) {
|
||||
return (math_bits.Len64(x|1) + 6) / 7
|
||||
}
|
||||
@ -554,6 +813,171 @@ func (m *MsgFundCommunityPoolResponse) Unmarshal(dAtA []byte) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (m *MsgUpdateParams) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
for iNdEx < l {
|
||||
preIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTx
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
wireType := int(wire & 0x7)
|
||||
if wireType == 4 {
|
||||
return fmt.Errorf("proto: MsgUpdateParams: wiretype end group for non-group")
|
||||
}
|
||||
if fieldNum <= 0 {
|
||||
return fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||
}
|
||||
switch fieldNum {
|
||||
case 1:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType)
|
||||
}
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTx
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLen |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLen := int(stringLen)
|
||||
if intStringLen < 0 {
|
||||
return ErrInvalidLengthTx
|
||||
}
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthTx
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.Authority = string(dAtA[iNdEx:postIndex])
|
||||
iNdEx = postIndex
|
||||
case 2:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType)
|
||||
}
|
||||
var msglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTx
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
msglen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if msglen < 0 {
|
||||
return ErrInvalidLengthTx
|
||||
}
|
||||
postIndex := iNdEx + msglen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthTx
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
|
||||
return err
|
||||
}
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipTx(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||
return ErrInvalidLengthTx
|
||||
}
|
||||
if (iNdEx + skippy) > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
|
||||
if iNdEx > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
for iNdEx < l {
|
||||
preIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTx
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
wireType := int(wire & 0x7)
|
||||
if wireType == 4 {
|
||||
return fmt.Errorf("proto: MsgUpdateParamsResponse: wiretype end group for non-group")
|
||||
}
|
||||
if fieldNum <= 0 {
|
||||
return fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||
}
|
||||
switch fieldNum {
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipTx(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||
return ErrInvalidLengthTx
|
||||
}
|
||||
if (iNdEx + skippy) > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
|
||||
if iNdEx > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func skipTx(dAtA []byte) (n int, err error) {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
|
Loading…
Reference in New Issue
Block a user