diff --git a/proto/cosmos/staking/v1beta1/tx.proto b/proto/cosmos/staking/v1beta1/tx.proto index 4eb3c8418a4b..c68e037dca3d 100644 --- a/proto/cosmos/staking/v1beta1/tx.proto +++ b/proto/cosmos/staking/v1beta1/tx.proto @@ -3,11 +3,33 @@ package cosmos.staking.v1beta1; import "gogoproto/gogo.proto"; import "cosmos/base/v1beta1/coin.proto"; +import "google/protobuf/timestamp.proto"; import "cosmos/staking/v1beta1/staking.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/staking/types"; -// MsgCreateValidator defines an SDK message for creating a new validator. +// Msg defines the staking Msg service. +service Msg { + // CreateValidator defines a method for creating a new validator. + rpc CreateValidator(MsgCreateValidator) returns (MsgCreateValidatorResponse); + + // EditValidator defines a method for editing an existing validator. + rpc EditValidator(MsgEditValidator) returns (MsgEditValidatorResponse); + + // Delegate defines a method for performing a delegation of coins + // from a delegator to a validator. + rpc Delegate(MsgDelegate) returns (MsgDelegateResponse); + + // BeginRedelegate defines a method for performing a redelegation + // of coins from a delegator and source validator to a destination validator. + rpc BeginRedelegate(MsgBeginRedelegate) returns (MsgBeginRedelegateResponse); + + // Undelegate defines a method for performing an undelegation from a + // delegate and a validator. + rpc Undelegate(MsgUndelegate) returns (MsgUndelegateResponse); +} + +// MsgCreateValidator defines a SDK message for creating a new validator. message MsgCreateValidator { option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; @@ -25,7 +47,10 @@ message MsgCreateValidator { cosmos.base.v1beta1.Coin value = 7 [(gogoproto.nullable) = false]; } -// MsgEditValidator defines an SDK message for editing an existing validator. +// MsgCreateValidatorResponse defines the Msg/CreateValidator response type. +message MsgCreateValidatorResponse { } + +// MsgEditValidator defines a SDK message for editing an existing validator. message MsgEditValidator { option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; @@ -48,7 +73,10 @@ message MsgEditValidator { ]; } -// MsgDelegate defines an SDK message for performing a delegation of coins +// MsgEditValidatorResponse defines the Msg/EditValidator response type. +message MsgEditValidatorResponse { } + +// MsgDelegate defines a SDK message for performing a delegation of coins // from a delegator to a validator. message MsgDelegate { option (gogoproto.equal) = false; @@ -59,7 +87,10 @@ message MsgDelegate { cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false]; } -// MsgBeginRedelegate defines an SDK message for performing a redelegation +// MsgDelegateResponse defines the Msg/Delegate response type. +message MsgDelegateResponse { } + +// MsgBeginRedelegate defines a SDK message for performing a redelegation // of coins from a delegator and source validator to a destination validator. message MsgBeginRedelegate { option (gogoproto.equal) = false; @@ -71,7 +102,12 @@ message MsgBeginRedelegate { cosmos.base.v1beta1.Coin amount = 4 [(gogoproto.nullable) = false]; } -// MsgUndelegate defines an SDK message for performing an undelegation from a +// MsgBeginRedelegateResponse defines the Msg/BeginRedelegate response type. +message MsgBeginRedelegateResponse { + google.protobuf.Timestamp completion_time = 1 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; +} + +// MsgUndelegate defines a SDK message for performing an undelegation from a // delegate and a validator. message MsgUndelegate { option (gogoproto.equal) = false; @@ -80,4 +116,9 @@ message MsgUndelegate { string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""]; string validator_address = 2 [(gogoproto.moretags) = "yaml:\"validator_address\""]; cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false]; -} \ No newline at end of file +} + +// MsgUndelegateResponse defines the Msg/Undelegate response type. +message MsgUndelegateResponse { + google.protobuf.Timestamp completion_time = 1 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; +} diff --git a/x/distribution/handler.go b/x/distribution/handler.go index e89b9fbf8c06..279a6bf726de 100644 --- a/x/distribution/handler.go +++ b/x/distribution/handler.go @@ -9,11 +9,11 @@ import ( ) func NewHandler(k keeper.Keeper) sdk.Handler { + msgServer := keeper.NewMsgServerImpl(k) + return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { ctx = ctx.WithEventManager(sdk.NewEventManager()) - msgServer := keeper.NewMsgServerImpl(k) - switch msg := msg.(type) { case *types.MsgSetWithdrawAddress: res, err := msgServer.SetWithdrawAddress(sdk.WrapSDKContext(ctx), msg) diff --git a/x/distribution/keeper/msg_server.go b/x/distribution/keeper/msg_server.go index 9aa24529d8e7..017aeeb216bf 100644 --- a/x/distribution/keeper/msg_server.go +++ b/x/distribution/keeper/msg_server.go @@ -13,7 +13,7 @@ type msgServer struct { Keeper } -// NewMsgServerImpl returns an implementation of the bank MsgServer interface +// NewMsgServerImpl returns an implementation of the distribution MsgServer interface // for the provided Keeper. func NewMsgServerImpl(keeper Keeper) types.MsgServer { return &msgServer{Keeper: keeper} diff --git a/x/staking/handler.go b/x/staking/handler.go index 4da6b05a6654..6d89c7a29c53 100644 --- a/x/staking/handler.go +++ b/x/staking/handler.go @@ -1,13 +1,6 @@ package staking import ( - "time" - - metrics "github.com/armon/go-metrics" - gogotypes "github.com/gogo/protobuf/types" - tmstrings "github.com/tendermint/tendermint/libs/strings" - - "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/staking/keeper" @@ -15,356 +8,34 @@ import ( ) func NewHandler(k keeper.Keeper) sdk.Handler { + msgServer := keeper.NewMsgServerImpl(k) + return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { ctx = ctx.WithEventManager(sdk.NewEventManager()) switch msg := msg.(type) { case *types.MsgCreateValidator: - return handleMsgCreateValidator(ctx, msg, k) + res, err := msgServer.CreateValidator(sdk.WrapSDKContext(ctx), msg) + return sdk.WrapServiceResult(ctx, res, err) case *types.MsgEditValidator: - return handleMsgEditValidator(ctx, msg, k) + res, err := msgServer.EditValidator(sdk.WrapSDKContext(ctx), msg) + return sdk.WrapServiceResult(ctx, res, err) case *types.MsgDelegate: - return handleMsgDelegate(ctx, msg, k) + res, err := msgServer.Delegate(sdk.WrapSDKContext(ctx), msg) + return sdk.WrapServiceResult(ctx, res, err) case *types.MsgBeginRedelegate: - return handleMsgBeginRedelegate(ctx, msg, k) + res, err := msgServer.BeginRedelegate(sdk.WrapSDKContext(ctx), msg) + return sdk.WrapServiceResult(ctx, res, err) case *types.MsgUndelegate: - return handleMsgUndelegate(ctx, msg, k) + res, err := msgServer.Undelegate(sdk.WrapSDKContext(ctx), msg) + return sdk.WrapServiceResult(ctx, res, err) default: return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized %s message type: %T", types.ModuleName, msg) } } } - -// These functions assume everything has been authenticated, -// now we just perform action and save - -func handleMsgCreateValidator(ctx sdk.Context, msg *types.MsgCreateValidator, k keeper.Keeper) (*sdk.Result, error) { - - valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress) - if err != nil { - return nil, err - } - - // check to see if the pubkey or sender has been registered before - if _, found := k.GetValidator(ctx, valAddr); found { - return nil, types.ErrValidatorOwnerExists - } - - pk, err := sdk.GetPubKeyFromBech32(sdk.Bech32PubKeyTypeConsPub, msg.Pubkey) - if err != nil { - return nil, err - } - - if _, found := k.GetValidatorByConsAddr(ctx, sdk.GetConsAddress(pk)); found { - return nil, types.ErrValidatorPubKeyExists - } - - bondDenom := k.BondDenom(ctx) - if msg.Value.Denom != bondDenom { - return nil, sdkerrors.Wrapf(types.ErrBadDenom, "got %s, expected %s", msg.Value.Denom, bondDenom) - } - - if _, err := msg.Description.EnsureLength(); err != nil { - return nil, err - } - - cp := ctx.ConsensusParams() - if cp != nil && cp.Validator != nil { - if !tmstrings.StringInSlice(pk.Type(), cp.Validator.PubKeyTypes) { - return nil, sdkerrors.Wrapf( - types.ErrValidatorPubKeyTypeNotSupported, - "got: %s, expected: %s", pk.Type(), cp.Validator.PubKeyTypes, - ) - } - } - - validator := types.NewValidator(valAddr, pk, msg.Description) - commission := types.NewCommissionWithTime( - msg.Commission.Rate, msg.Commission.MaxRate, - msg.Commission.MaxChangeRate, ctx.BlockHeader().Time, - ) - - validator, err = validator.SetInitialCommission(commission) - if err != nil { - return nil, err - } - - delegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress) - if err != nil { - return nil, err - } - - validator.MinSelfDelegation = msg.MinSelfDelegation - - k.SetValidator(ctx, validator) - k.SetValidatorByConsAddr(ctx, validator) - k.SetNewValidatorByPowerIndex(ctx, validator) - - // call the after-creation hook - k.AfterValidatorCreated(ctx, validator.GetOperator()) - - // move coins from the msg.Address account to a (self-delegation) delegator account - // the validator account and global shares are updated within here - // NOTE source will always be from a wallet which are unbonded - _, err = k.Delegate(ctx, delegatorAddress, msg.Value.Amount, types.Unbonded, validator, true) - if err != nil { - return nil, err - } - - ctx.EventManager().EmitEvents(sdk.Events{ - sdk.NewEvent( - types.EventTypeCreateValidator, - sdk.NewAttribute(types.AttributeKeyValidator, msg.ValidatorAddress), - sdk.NewAttribute(sdk.AttributeKeyAmount, msg.Value.Amount.String()), - ), - sdk.NewEvent( - sdk.EventTypeMessage, - sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), - sdk.NewAttribute(sdk.AttributeKeySender, msg.DelegatorAddress), - ), - }) - - return &sdk.Result{Events: ctx.EventManager().ABCIEvents()}, nil -} - -func handleMsgEditValidator(ctx sdk.Context, msg *types.MsgEditValidator, k keeper.Keeper) (*sdk.Result, error) { - valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress) - if err != nil { - return nil, err - } - // validator must already be registered - validator, found := k.GetValidator(ctx, valAddr) - if !found { - return nil, types.ErrNoValidatorFound - } - - // replace all editable fields (clients should autofill existing values) - description, err := validator.Description.UpdateDescription(msg.Description) - if err != nil { - return nil, err - } - - validator.Description = description - - if msg.CommissionRate != nil { - commission, err := k.UpdateValidatorCommission(ctx, validator, *msg.CommissionRate) - if err != nil { - return nil, err - } - - // call the before-modification hook since we're about to update the commission - k.BeforeValidatorModified(ctx, valAddr) - - validator.Commission = commission - } - - if msg.MinSelfDelegation != nil { - if !msg.MinSelfDelegation.GT(validator.MinSelfDelegation) { - return nil, types.ErrMinSelfDelegationDecreased - } - - if msg.MinSelfDelegation.GT(validator.Tokens) { - return nil, types.ErrSelfDelegationBelowMinimum - } - - validator.MinSelfDelegation = (*msg.MinSelfDelegation) - } - - k.SetValidator(ctx, validator) - - ctx.EventManager().EmitEvents(sdk.Events{ - sdk.NewEvent( - types.EventTypeEditValidator, - sdk.NewAttribute(types.AttributeKeyCommissionRate, validator.Commission.String()), - sdk.NewAttribute(types.AttributeKeyMinSelfDelegation, validator.MinSelfDelegation.String()), - ), - sdk.NewEvent( - sdk.EventTypeMessage, - sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), - sdk.NewAttribute(sdk.AttributeKeySender, msg.ValidatorAddress), - ), - }) - - return &sdk.Result{Events: ctx.EventManager().ABCIEvents()}, nil -} - -func handleMsgDelegate(ctx sdk.Context, msg *types.MsgDelegate, k keeper.Keeper) (*sdk.Result, error) { - valAddr, valErr := sdk.ValAddressFromBech32(msg.ValidatorAddress) - if valErr != nil { - return nil, valErr - } - - validator, found := k.GetValidator(ctx, valAddr) - if !found { - return nil, types.ErrNoValidatorFound - } - - delegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress) - if err != nil { - return nil, err - } - - bondDenom := k.BondDenom(ctx) - if msg.Amount.Denom != bondDenom { - return nil, sdkerrors.Wrapf(types.ErrBadDenom, "got %s, expected %s", msg.Amount.Denom, bondDenom) - } - - // NOTE: source funds are always unbonded - _, err = k.Delegate(ctx, delegatorAddress, msg.Amount.Amount, types.Unbonded, validator, true) - if err != nil { - return nil, err - } - - defer func() { - telemetry.IncrCounter(1, types.ModuleName, "delegate") - telemetry.SetGaugeWithLabels( - []string{"tx", "msg", msg.Type()}, - float32(msg.Amount.Amount.Int64()), - []metrics.Label{telemetry.NewLabel("denom", msg.Amount.Denom)}, - ) - }() - - ctx.EventManager().EmitEvents(sdk.Events{ - sdk.NewEvent( - types.EventTypeDelegate, - sdk.NewAttribute(types.AttributeKeyValidator, msg.ValidatorAddress), - sdk.NewAttribute(sdk.AttributeKeyAmount, msg.Amount.Amount.String()), - ), - sdk.NewEvent( - sdk.EventTypeMessage, - sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), - sdk.NewAttribute(sdk.AttributeKeySender, msg.DelegatorAddress), - ), - }) - - return &sdk.Result{Events: ctx.EventManager().ABCIEvents()}, nil -} - -func handleMsgUndelegate(ctx sdk.Context, msg *types.MsgUndelegate, k keeper.Keeper) (*sdk.Result, error) { - addr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress) - if err != nil { - return nil, err - } - delegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress) - if err != nil { - return nil, err - } - shares, err := k.ValidateUnbondAmount( - ctx, delegatorAddress, addr, msg.Amount.Amount, - ) - if err != nil { - return nil, err - } - - bondDenom := k.BondDenom(ctx) - if msg.Amount.Denom != bondDenom { - return nil, sdkerrors.Wrapf(types.ErrBadDenom, "got %s, expected %s", msg.Amount.Denom, bondDenom) - } - - completionTime, err := k.Undelegate(ctx, delegatorAddress, addr, shares) - if err != nil { - return nil, err - } - - ts, err := gogotypes.TimestampProto(completionTime) - if err != nil { - return nil, types.ErrBadRedelegationAddr - } - - defer func() { - telemetry.IncrCounter(1, types.ModuleName, "undelegate") - telemetry.SetGaugeWithLabels( - []string{"tx", "msg", msg.Type()}, - float32(msg.Amount.Amount.Int64()), - []metrics.Label{telemetry.NewLabel("denom", msg.Amount.Denom)}, - ) - }() - - completionTimeBz := types.ModuleCdc.MustMarshalBinaryLengthPrefixed(ts) - ctx.EventManager().EmitEvents(sdk.Events{ - sdk.NewEvent( - types.EventTypeUnbond, - sdk.NewAttribute(types.AttributeKeyValidator, msg.ValidatorAddress), - sdk.NewAttribute(sdk.AttributeKeyAmount, msg.Amount.Amount.String()), - sdk.NewAttribute(types.AttributeKeyCompletionTime, completionTime.Format(time.RFC3339)), - ), - sdk.NewEvent( - sdk.EventTypeMessage, - sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), - sdk.NewAttribute(sdk.AttributeKeySender, msg.DelegatorAddress), - ), - }) - - return &sdk.Result{Data: completionTimeBz, Events: ctx.EventManager().ABCIEvents()}, nil -} - -func handleMsgBeginRedelegate(ctx sdk.Context, msg *types.MsgBeginRedelegate, k keeper.Keeper) (*sdk.Result, error) { - valSrcAddr, err := sdk.ValAddressFromBech32(msg.ValidatorSrcAddress) - if err != nil { - return nil, err - } - delegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress) - if err != nil { - return nil, err - } - shares, err := k.ValidateUnbondAmount( - ctx, delegatorAddress, valSrcAddr, msg.Amount.Amount, - ) - if err != nil { - return nil, err - } - - bondDenom := k.BondDenom(ctx) - if msg.Amount.Denom != bondDenom { - return nil, sdkerrors.Wrapf(types.ErrBadDenom, "got %s, expected %s", msg.Amount.Denom, bondDenom) - } - - valDstAddr, err := sdk.ValAddressFromBech32(msg.ValidatorDstAddress) - if err != nil { - return nil, err - } - - completionTime, err := k.BeginRedelegation( - ctx, delegatorAddress, valSrcAddr, valDstAddr, shares, - ) - if err != nil { - return nil, err - } - - ts, err := gogotypes.TimestampProto(completionTime) - if err != nil { - return nil, types.ErrBadRedelegationAddr - } - - defer func() { - telemetry.IncrCounter(1, types.ModuleName, "redelegate") - telemetry.SetGaugeWithLabels( - []string{"tx", "msg", msg.Type()}, - float32(msg.Amount.Amount.Int64()), - []metrics.Label{telemetry.NewLabel("denom", msg.Amount.Denom)}, - ) - }() - - completionTimeBz := types.ModuleCdc.MustMarshalBinaryLengthPrefixed(ts) - ctx.EventManager().EmitEvents(sdk.Events{ - sdk.NewEvent( - types.EventTypeRedelegate, - sdk.NewAttribute(types.AttributeKeySrcValidator, msg.ValidatorSrcAddress), - sdk.NewAttribute(types.AttributeKeyDstValidator, msg.ValidatorDstAddress), - sdk.NewAttribute(sdk.AttributeKeyAmount, msg.Amount.Amount.String()), - sdk.NewAttribute(types.AttributeKeyCompletionTime, completionTime.Format(time.RFC3339)), - ), - sdk.NewEvent( - sdk.EventTypeMessage, - sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), - sdk.NewAttribute(sdk.AttributeKeySender, msg.DelegatorAddress), - ), - }) - - return &sdk.Result{Data: completionTimeBz, Events: ctx.EventManager().ABCIEvents()}, nil -} diff --git a/x/staking/handler_test.go b/x/staking/handler_test.go index 8114355d90e2..51a7323ca0ab 100644 --- a/x/staking/handler_test.go +++ b/x/staking/handler_test.go @@ -5,7 +5,6 @@ import ( "testing" "time" - gogotypes "github.com/gogo/protobuf/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" @@ -21,6 +20,7 @@ import ( "github.com/cosmos/cosmos-sdk/x/staking" "github.com/cosmos/cosmos-sdk/x/staking/keeper" "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/golang/protobuf/proto" ) func bootstrapHandlerGenesisTest(t *testing.T, power int64, numAddrs int, accAmount int64) (*simapp.SimApp, sdk.Context, []sdk.AccAddress, []sdk.ValAddress) { @@ -117,13 +117,11 @@ func TestValidatorByPowerIndex(t *testing.T) { require.NoError(t, err) require.NotNil(t, res) - ts := &gogotypes.Timestamp{} - types.ModuleCdc.MustUnmarshalBinaryLengthPrefixed(res.Data, ts) - - finishTime, err := gogotypes.TimestampFromProto(ts) + var resData types.MsgUndelegateResponse + err = proto.Unmarshal(res.Data, &resData) require.NoError(t, err) - ctx = ctx.WithBlockTime(finishTime) + ctx = ctx.WithBlockTime(resData.CompletionTime) staking.EndBlocker(ctx, app.StakingKeeper) staking.EndBlocker(ctx, app.StakingKeeper) @@ -255,13 +253,11 @@ func TestLegacyValidatorDelegations(t *testing.T) { require.NoError(t, err) require.NotNil(t, res) - ts := &gogotypes.Timestamp{} - types.ModuleCdc.MustUnmarshalBinaryLengthPrefixed(res.Data, ts) - - finishTime, err := gogotypes.TimestampFromProto(ts) + var resData types.MsgUndelegateResponse + err = proto.Unmarshal(res.Data, &resData) require.NoError(t, err) - ctx = ctx.WithBlockTime(finishTime) + ctx = ctx.WithBlockTime(resData.CompletionTime) staking.EndBlocker(ctx, app.StakingKeeper) // verify the validator record still exists, is jailed, and has correct tokens @@ -500,13 +496,11 @@ func TestIncrementsMsgUnbond(t *testing.T) { require.NoError(t, err) require.NotNil(t, res) - ts := &gogotypes.Timestamp{} - types.ModuleCdc.MustUnmarshalBinaryLengthPrefixed(res.Data, ts) - - finishTime, err := gogotypes.TimestampFromProto(ts) + var resData types.MsgUndelegateResponse + err = proto.Unmarshal(res.Data, &resData) require.NoError(t, err) - ctx = ctx.WithBlockTime(finishTime) + ctx = ctx.WithBlockTime(resData.CompletionTime) staking.EndBlocker(ctx, app.StakingKeeper) // check that the accounts and the bond account have the appropriate values @@ -618,10 +612,8 @@ func TestMultipleMsgCreateValidator(t *testing.T) { require.NoError(t, err) require.NotNil(t, res) - ts := &gogotypes.Timestamp{} - types.ModuleCdc.MustUnmarshalBinaryLengthPrefixed(res.Data, ts) - - _, err = gogotypes.TimestampFromProto(ts) + var resData types.MsgUndelegateResponse + err = proto.Unmarshal(res.Data, &resData) require.NoError(t, err) // adds validator into unbonding queue @@ -676,13 +668,11 @@ func TestMultipleMsgDelegate(t *testing.T) { require.NoError(t, err) require.NotNil(t, res) - ts := &gogotypes.Timestamp{} - types.ModuleCdc.MustUnmarshalBinaryLengthPrefixed(res.Data, ts) - - finishTime, err := gogotypes.TimestampFromProto(ts) + var resData types.MsgUndelegateResponse + err = proto.Unmarshal(res.Data, &resData) require.NoError(t, err) - ctx = ctx.WithBlockTime(finishTime) + ctx = ctx.WithBlockTime(resData.CompletionTime) staking.EndBlocker(ctx, app.StakingKeeper) // check that the account is unbonded @@ -715,13 +705,11 @@ func TestJailValidator(t *testing.T) { require.NoError(t, err) require.NotNil(t, res) - ts := &gogotypes.Timestamp{} - types.ModuleCdc.MustUnmarshalBinaryLengthPrefixed(res.Data, ts) - - finishTime, err := gogotypes.TimestampFromProto(ts) + var resData types.MsgUndelegateResponse + err = proto.Unmarshal(res.Data, &resData) require.NoError(t, err) - ctx = ctx.WithBlockTime(finishTime) + ctx = ctx.WithBlockTime(resData.CompletionTime) staking.EndBlocker(ctx, app.StakingKeeper) validator, found := app.StakingKeeper.GetValidator(ctx, validatorAddr) @@ -735,13 +723,10 @@ func TestJailValidator(t *testing.T) { require.NoError(t, err) require.NotNil(t, res) - ts = &gogotypes.Timestamp{} - types.ModuleCdc.MustUnmarshalBinaryLengthPrefixed(res.Data, ts) - - finishTime, err = gogotypes.TimestampFromProto(ts) + err = proto.Unmarshal(res.Data, &resData) require.NoError(t, err) - ctx = ctx.WithBlockTime(finishTime) + ctx = ctx.WithBlockTime(resData.CompletionTime) staking.EndBlocker(ctx, app.StakingKeeper) // verify that the pubkey can now be reused @@ -783,13 +768,11 @@ func TestValidatorQueue(t *testing.T) { require.NoError(t, err) require.NotNil(t, res) - ts := &gogotypes.Timestamp{} - types.ModuleCdc.MustUnmarshalBinaryLengthPrefixed(res.Data, ts) - - finishTime, err := gogotypes.TimestampFromProto(ts) + var resData types.MsgUndelegateResponse + err = proto.Unmarshal(res.Data, &resData) require.NoError(t, err) - ctx = ctx.WithBlockTime(finishTime) + ctx = ctx.WithBlockTime(resData.CompletionTime) staking.EndBlocker(ctx, app.StakingKeeper) origHeader := ctx.BlockHeader() @@ -889,13 +872,11 @@ func TestUnbondingFromUnbondingValidator(t *testing.T) { require.NotNil(t, res) // change the ctx to Block Time one second before the validator would have unbonded - ts := &gogotypes.Timestamp{} - types.ModuleCdc.MustUnmarshalBinaryLengthPrefixed(res.Data, ts) - - finishTime, err := gogotypes.TimestampFromProto(ts) + var resData types.MsgUndelegateResponse + err = proto.Unmarshal(res.Data, &resData) require.NoError(t, err) - ctx = ctx.WithBlockTime(finishTime.Add(time.Second * -1)) + ctx = ctx.WithBlockTime(resData.CompletionTime.Add(time.Second * -1)) // unbond the delegator from the validator msgUndelegateDelegator := types.NewMsgUndelegate(delegatorAddr, validatorAddr, unbondAmt) diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go new file mode 100644 index 000000000000..d4084402265e --- /dev/null +++ b/x/staking/keeper/msg_server.go @@ -0,0 +1,350 @@ +package keeper + +import ( + "context" + "time" + + metrics "github.com/armon/go-metrics" + tmstrings "github.com/tendermint/tendermint/libs/strings" + + "github.com/cosmos/cosmos-sdk/telemetry" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/x/staking/types" +) + +type msgServer struct { + Keeper +} + +// NewMsgServerImpl returns an implementation of the bank MsgServer interface +// for the provided Keeper. +func NewMsgServerImpl(keeper Keeper) types.MsgServer { + return &msgServer{Keeper: keeper} +} + +var _ types.MsgServer = msgServer{} + +func (k msgServer) CreateValidator(goCtx context.Context, msg *types.MsgCreateValidator) (*types.MsgCreateValidatorResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress) + if err != nil { + return nil, err + } + + // check to see if the pubkey or sender has been registered before + if _, found := k.GetValidator(ctx, valAddr); found { + return nil, types.ErrValidatorOwnerExists + } + + pk, err := sdk.GetPubKeyFromBech32(sdk.Bech32PubKeyTypeConsPub, msg.Pubkey) + if err != nil { + return nil, err + } + + if _, found := k.GetValidatorByConsAddr(ctx, sdk.GetConsAddress(pk)); found { + return nil, types.ErrValidatorPubKeyExists + } + + bondDenom := k.BondDenom(ctx) + if msg.Value.Denom != bondDenom { + return nil, sdkerrors.Wrapf(types.ErrBadDenom, "got %s, expected %s", msg.Value.Denom, bondDenom) + } + + if _, err := msg.Description.EnsureLength(); err != nil { + return nil, err + } + + cp := ctx.ConsensusParams() + if cp != nil && cp.Validator != nil { + if !tmstrings.StringInSlice(pk.Type(), cp.Validator.PubKeyTypes) { + return nil, sdkerrors.Wrapf( + types.ErrValidatorPubKeyTypeNotSupported, + "got: %s, expected: %s", pk.Type(), cp.Validator.PubKeyTypes, + ) + } + } + + validator := types.NewValidator(valAddr, pk, msg.Description) + commission := types.NewCommissionWithTime( + msg.Commission.Rate, msg.Commission.MaxRate, + msg.Commission.MaxChangeRate, ctx.BlockHeader().Time, + ) + + validator, err = validator.SetInitialCommission(commission) + if err != nil { + return nil, err + } + + delegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress) + if err != nil { + return nil, err + } + + validator.MinSelfDelegation = msg.MinSelfDelegation + + k.SetValidator(ctx, validator) + k.SetValidatorByConsAddr(ctx, validator) + k.SetNewValidatorByPowerIndex(ctx, validator) + + // call the after-creation hook + k.AfterValidatorCreated(ctx, validator.GetOperator()) + + // move coins from the msg.Address account to a (self-delegation) delegator account + // the validator account and global shares are updated within here + // NOTE source will always be from a wallet which are unbonded + _, err = k.Keeper.Delegate(ctx, delegatorAddress, msg.Value.Amount, types.Unbonded, validator, true) + if err != nil { + return nil, err + } + + ctx.EventManager().EmitEvents(sdk.Events{ + sdk.NewEvent( + types.EventTypeCreateValidator, + sdk.NewAttribute(types.AttributeKeyValidator, msg.ValidatorAddress), + sdk.NewAttribute(sdk.AttributeKeyAmount, msg.Value.Amount.String()), + ), + sdk.NewEvent( + sdk.EventTypeMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), + sdk.NewAttribute(sdk.AttributeKeySender, msg.DelegatorAddress), + ), + }) + + return &types.MsgCreateValidatorResponse{}, nil +} + +func (k msgServer) EditValidator(goCtx context.Context, msg *types.MsgEditValidator) (*types.MsgEditValidatorResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress) + if err != nil { + return nil, err + } + // validator must already be registered + validator, found := k.GetValidator(ctx, valAddr) + if !found { + return nil, types.ErrNoValidatorFound + } + + // replace all editable fields (clients should autofill existing values) + description, err := validator.Description.UpdateDescription(msg.Description) + if err != nil { + return nil, err + } + + validator.Description = description + + if msg.CommissionRate != nil { + commission, err := k.UpdateValidatorCommission(ctx, validator, *msg.CommissionRate) + if err != nil { + return nil, err + } + + // call the before-modification hook since we're about to update the commission + k.BeforeValidatorModified(ctx, valAddr) + + validator.Commission = commission + } + + if msg.MinSelfDelegation != nil { + if !msg.MinSelfDelegation.GT(validator.MinSelfDelegation) { + return nil, types.ErrMinSelfDelegationDecreased + } + + if msg.MinSelfDelegation.GT(validator.Tokens) { + return nil, types.ErrSelfDelegationBelowMinimum + } + + validator.MinSelfDelegation = (*msg.MinSelfDelegation) + } + + k.SetValidator(ctx, validator) + + ctx.EventManager().EmitEvents(sdk.Events{ + sdk.NewEvent( + types.EventTypeEditValidator, + sdk.NewAttribute(types.AttributeKeyCommissionRate, validator.Commission.String()), + sdk.NewAttribute(types.AttributeKeyMinSelfDelegation, validator.MinSelfDelegation.String()), + ), + sdk.NewEvent( + sdk.EventTypeMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), + sdk.NewAttribute(sdk.AttributeKeySender, msg.ValidatorAddress), + ), + }) + + return &types.MsgEditValidatorResponse{}, nil +} + +func (k msgServer) Delegate(goCtx context.Context, msg *types.MsgDelegate) (*types.MsgDelegateResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + valAddr, valErr := sdk.ValAddressFromBech32(msg.ValidatorAddress) + if valErr != nil { + return nil, valErr + } + + validator, found := k.GetValidator(ctx, valAddr) + if !found { + return nil, types.ErrNoValidatorFound + } + + delegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress) + if err != nil { + return nil, err + } + + bondDenom := k.BondDenom(ctx) + if msg.Amount.Denom != bondDenom { + return nil, sdkerrors.Wrapf(types.ErrBadDenom, "got %s, expected %s", msg.Amount.Denom, bondDenom) + } + + // NOTE: source funds are always unbonded + _, err = k.Keeper.Delegate(ctx, delegatorAddress, msg.Amount.Amount, types.Unbonded, validator, true) + if err != nil { + return nil, err + } + + defer func() { + telemetry.IncrCounter(1, types.ModuleName, "delegate") + telemetry.SetGaugeWithLabels( + []string{"tx", "msg", msg.Type()}, + float32(msg.Amount.Amount.Int64()), + []metrics.Label{telemetry.NewLabel("denom", msg.Amount.Denom)}, + ) + }() + + ctx.EventManager().EmitEvents(sdk.Events{ + sdk.NewEvent( + types.EventTypeDelegate, + sdk.NewAttribute(types.AttributeKeyValidator, msg.ValidatorAddress), + sdk.NewAttribute(sdk.AttributeKeyAmount, msg.Amount.Amount.String()), + ), + sdk.NewEvent( + sdk.EventTypeMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), + sdk.NewAttribute(sdk.AttributeKeySender, msg.DelegatorAddress), + ), + }) + + return &types.MsgDelegateResponse{}, nil +} + +func (k msgServer) BeginRedelegate(goCtx context.Context, msg *types.MsgBeginRedelegate) (*types.MsgBeginRedelegateResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + valSrcAddr, err := sdk.ValAddressFromBech32(msg.ValidatorSrcAddress) + if err != nil { + return nil, err + } + delegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress) + if err != nil { + return nil, err + } + shares, err := k.ValidateUnbondAmount( + ctx, delegatorAddress, valSrcAddr, msg.Amount.Amount, + ) + if err != nil { + return nil, err + } + + bondDenom := k.BondDenom(ctx) + if msg.Amount.Denom != bondDenom { + return nil, sdkerrors.Wrapf(types.ErrBadDenom, "got %s, expected %s", msg.Amount.Denom, bondDenom) + } + + valDstAddr, err := sdk.ValAddressFromBech32(msg.ValidatorDstAddress) + if err != nil { + return nil, err + } + + completionTime, err := k.BeginRedelegation( + ctx, delegatorAddress, valSrcAddr, valDstAddr, shares, + ) + if err != nil { + return nil, err + } + + defer func() { + telemetry.IncrCounter(1, types.ModuleName, "redelegate") + telemetry.SetGaugeWithLabels( + []string{"tx", "msg", msg.Type()}, + float32(msg.Amount.Amount.Int64()), + []metrics.Label{telemetry.NewLabel("denom", msg.Amount.Denom)}, + ) + }() + + ctx.EventManager().EmitEvents(sdk.Events{ + sdk.NewEvent( + types.EventTypeRedelegate, + sdk.NewAttribute(types.AttributeKeySrcValidator, msg.ValidatorSrcAddress), + sdk.NewAttribute(types.AttributeKeyDstValidator, msg.ValidatorDstAddress), + sdk.NewAttribute(sdk.AttributeKeyAmount, msg.Amount.Amount.String()), + sdk.NewAttribute(types.AttributeKeyCompletionTime, completionTime.Format(time.RFC3339)), + ), + sdk.NewEvent( + sdk.EventTypeMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), + sdk.NewAttribute(sdk.AttributeKeySender, msg.DelegatorAddress), + ), + }) + + return &types.MsgBeginRedelegateResponse{ + CompletionTime: completionTime, + }, nil +} + +func (k msgServer) Undelegate(goCtx context.Context, msg *types.MsgUndelegate) (*types.MsgUndelegateResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + addr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress) + if err != nil { + return nil, err + } + delegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress) + if err != nil { + return nil, err + } + shares, err := k.ValidateUnbondAmount( + ctx, delegatorAddress, addr, msg.Amount.Amount, + ) + if err != nil { + return nil, err + } + + bondDenom := k.BondDenom(ctx) + if msg.Amount.Denom != bondDenom { + return nil, sdkerrors.Wrapf(types.ErrBadDenom, "got %s, expected %s", msg.Amount.Denom, bondDenom) + } + + completionTime, err := k.Keeper.Undelegate(ctx, delegatorAddress, addr, shares) + if err != nil { + return nil, err + } + + defer func() { + telemetry.IncrCounter(1, types.ModuleName, "undelegate") + telemetry.SetGaugeWithLabels( + []string{"tx", "msg", msg.Type()}, + float32(msg.Amount.Amount.Int64()), + []metrics.Label{telemetry.NewLabel("denom", msg.Amount.Denom)}, + ) + }() + + ctx.EventManager().EmitEvents(sdk.Events{ + sdk.NewEvent( + types.EventTypeUnbond, + sdk.NewAttribute(types.AttributeKeyValidator, msg.ValidatorAddress), + sdk.NewAttribute(sdk.AttributeKeyAmount, msg.Amount.Amount.String()), + sdk.NewAttribute(types.AttributeKeyCompletionTime, completionTime.Format(time.RFC3339)), + ), + sdk.NewEvent( + sdk.EventTypeMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), + sdk.NewAttribute(sdk.AttributeKeySender, msg.DelegatorAddress), + ), + }) + + return &types.MsgUndelegateResponse{ + CompletionTime: completionTime, + }, nil +} diff --git a/x/staking/types/tx.pb.go b/x/staking/types/tx.pb.go index 07c643c7dc3c..d2d26bd25116 100644 --- a/x/staking/types/tx.pb.go +++ b/x/staking/types/tx.pb.go @@ -4,20 +4,29 @@ package types import ( + context "context" fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + grpc1 "github.com/gogo/protobuf/grpc" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + _ "github.com/golang/protobuf/ptypes/timestamp" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" io "io" math "math" math_bits "math/bits" + time "time" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf +var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. @@ -25,7 +34,7 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -// MsgCreateValidator defines an SDK message for creating a new validator. +// MsgCreateValidator defines a SDK message for creating a new validator. type MsgCreateValidator struct { Description Description `protobuf:"bytes,1,opt,name=description,proto3" json:"description"` Commission CommissionRates `protobuf:"bytes,2,opt,name=commission,proto3" json:"commission"` @@ -69,7 +78,44 @@ func (m *MsgCreateValidator) XXX_DiscardUnknown() { var xxx_messageInfo_MsgCreateValidator proto.InternalMessageInfo -// MsgEditValidator defines an SDK message for editing an existing validator. +// MsgCreateValidatorResponse defines the Msg/CreateValidator response type. +type MsgCreateValidatorResponse struct { +} + +func (m *MsgCreateValidatorResponse) Reset() { *m = MsgCreateValidatorResponse{} } +func (m *MsgCreateValidatorResponse) String() string { return proto.CompactTextString(m) } +func (*MsgCreateValidatorResponse) ProtoMessage() {} +func (*MsgCreateValidatorResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{1} +} +func (m *MsgCreateValidatorResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCreateValidatorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCreateValidatorResponse.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 *MsgCreateValidatorResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCreateValidatorResponse.Merge(m, src) +} +func (m *MsgCreateValidatorResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgCreateValidatorResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCreateValidatorResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCreateValidatorResponse proto.InternalMessageInfo + +// MsgEditValidator defines a SDK message for editing an existing validator. type MsgEditValidator struct { Description Description `protobuf:"bytes,1,opt,name=description,proto3" json:"description"` ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty" yaml:"address"` @@ -86,7 +132,7 @@ func (m *MsgEditValidator) Reset() { *m = MsgEditValidator{} } func (m *MsgEditValidator) String() string { return proto.CompactTextString(m) } func (*MsgEditValidator) ProtoMessage() {} func (*MsgEditValidator) Descriptor() ([]byte, []int) { - return fileDescriptor_0926ef28816b35ab, []int{1} + return fileDescriptor_0926ef28816b35ab, []int{2} } func (m *MsgEditValidator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -115,7 +161,44 @@ func (m *MsgEditValidator) XXX_DiscardUnknown() { var xxx_messageInfo_MsgEditValidator proto.InternalMessageInfo -// MsgDelegate defines an SDK message for performing a delegation of coins +// MsgEditValidatorResponse defines the Msg/EditValidator response type. +type MsgEditValidatorResponse struct { +} + +func (m *MsgEditValidatorResponse) Reset() { *m = MsgEditValidatorResponse{} } +func (m *MsgEditValidatorResponse) String() string { return proto.CompactTextString(m) } +func (*MsgEditValidatorResponse) ProtoMessage() {} +func (*MsgEditValidatorResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{3} +} +func (m *MsgEditValidatorResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgEditValidatorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgEditValidatorResponse.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 *MsgEditValidatorResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgEditValidatorResponse.Merge(m, src) +} +func (m *MsgEditValidatorResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgEditValidatorResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgEditValidatorResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgEditValidatorResponse proto.InternalMessageInfo + +// MsgDelegate defines a SDK message for performing a delegation of coins // from a delegator to a validator. type MsgDelegate struct { DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"` @@ -127,7 +210,7 @@ func (m *MsgDelegate) Reset() { *m = MsgDelegate{} } func (m *MsgDelegate) String() string { return proto.CompactTextString(m) } func (*MsgDelegate) ProtoMessage() {} func (*MsgDelegate) Descriptor() ([]byte, []int) { - return fileDescriptor_0926ef28816b35ab, []int{2} + return fileDescriptor_0926ef28816b35ab, []int{4} } func (m *MsgDelegate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -156,7 +239,44 @@ func (m *MsgDelegate) XXX_DiscardUnknown() { var xxx_messageInfo_MsgDelegate proto.InternalMessageInfo -// MsgBeginRedelegate defines an SDK message for performing a redelegation +// MsgDelegateResponse defines the Msg/Delegate response type. +type MsgDelegateResponse struct { +} + +func (m *MsgDelegateResponse) Reset() { *m = MsgDelegateResponse{} } +func (m *MsgDelegateResponse) String() string { return proto.CompactTextString(m) } +func (*MsgDelegateResponse) ProtoMessage() {} +func (*MsgDelegateResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{5} +} +func (m *MsgDelegateResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgDelegateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgDelegateResponse.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 *MsgDelegateResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDelegateResponse.Merge(m, src) +} +func (m *MsgDelegateResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgDelegateResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDelegateResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgDelegateResponse proto.InternalMessageInfo + +// MsgBeginRedelegate defines a SDK message for performing a redelegation // of coins from a delegator and source validator to a destination validator. type MsgBeginRedelegate struct { DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"` @@ -169,7 +289,7 @@ func (m *MsgBeginRedelegate) Reset() { *m = MsgBeginRedelegate{} } func (m *MsgBeginRedelegate) String() string { return proto.CompactTextString(m) } func (*MsgBeginRedelegate) ProtoMessage() {} func (*MsgBeginRedelegate) Descriptor() ([]byte, []int) { - return fileDescriptor_0926ef28816b35ab, []int{3} + return fileDescriptor_0926ef28816b35ab, []int{6} } func (m *MsgBeginRedelegate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -198,7 +318,52 @@ func (m *MsgBeginRedelegate) XXX_DiscardUnknown() { var xxx_messageInfo_MsgBeginRedelegate proto.InternalMessageInfo -// MsgUndelegate defines an SDK message for performing an undelegation from a +// MsgBeginRedelegateResponse defines the Msg/BeginRedelegate response type. +type MsgBeginRedelegateResponse struct { + CompletionTime time.Time `protobuf:"bytes,1,opt,name=completion_time,json=completionTime,proto3,stdtime" json:"completion_time"` +} + +func (m *MsgBeginRedelegateResponse) Reset() { *m = MsgBeginRedelegateResponse{} } +func (m *MsgBeginRedelegateResponse) String() string { return proto.CompactTextString(m) } +func (*MsgBeginRedelegateResponse) ProtoMessage() {} +func (*MsgBeginRedelegateResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{7} +} +func (m *MsgBeginRedelegateResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgBeginRedelegateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgBeginRedelegateResponse.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 *MsgBeginRedelegateResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgBeginRedelegateResponse.Merge(m, src) +} +func (m *MsgBeginRedelegateResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgBeginRedelegateResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgBeginRedelegateResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgBeginRedelegateResponse proto.InternalMessageInfo + +func (m *MsgBeginRedelegateResponse) GetCompletionTime() time.Time { + if m != nil { + return m.CompletionTime + } + return time.Time{} +} + +// MsgUndelegate defines a SDK message for performing an undelegation from a // delegate and a validator. type MsgUndelegate struct { DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"` @@ -210,7 +375,7 @@ func (m *MsgUndelegate) Reset() { *m = MsgUndelegate{} } func (m *MsgUndelegate) String() string { return proto.CompactTextString(m) } func (*MsgUndelegate) ProtoMessage() {} func (*MsgUndelegate) Descriptor() ([]byte, []int) { - return fileDescriptor_0926ef28816b35ab, []int{4} + return fileDescriptor_0926ef28816b35ab, []int{8} } func (m *MsgUndelegate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -239,57 +404,359 @@ func (m *MsgUndelegate) XXX_DiscardUnknown() { var xxx_messageInfo_MsgUndelegate proto.InternalMessageInfo +// MsgUndelegateResponse defines the Msg/Undelegate response type. +type MsgUndelegateResponse struct { + CompletionTime time.Time `protobuf:"bytes,1,opt,name=completion_time,json=completionTime,proto3,stdtime" json:"completion_time"` +} + +func (m *MsgUndelegateResponse) Reset() { *m = MsgUndelegateResponse{} } +func (m *MsgUndelegateResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUndelegateResponse) ProtoMessage() {} +func (*MsgUndelegateResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{9} +} +func (m *MsgUndelegateResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUndelegateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUndelegateResponse.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 *MsgUndelegateResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUndelegateResponse.Merge(m, src) +} +func (m *MsgUndelegateResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUndelegateResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUndelegateResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUndelegateResponse proto.InternalMessageInfo + +func (m *MsgUndelegateResponse) GetCompletionTime() time.Time { + if m != nil { + return m.CompletionTime + } + return time.Time{} +} + func init() { proto.RegisterType((*MsgCreateValidator)(nil), "cosmos.staking.v1beta1.MsgCreateValidator") + proto.RegisterType((*MsgCreateValidatorResponse)(nil), "cosmos.staking.v1beta1.MsgCreateValidatorResponse") proto.RegisterType((*MsgEditValidator)(nil), "cosmos.staking.v1beta1.MsgEditValidator") + proto.RegisterType((*MsgEditValidatorResponse)(nil), "cosmos.staking.v1beta1.MsgEditValidatorResponse") proto.RegisterType((*MsgDelegate)(nil), "cosmos.staking.v1beta1.MsgDelegate") + proto.RegisterType((*MsgDelegateResponse)(nil), "cosmos.staking.v1beta1.MsgDelegateResponse") proto.RegisterType((*MsgBeginRedelegate)(nil), "cosmos.staking.v1beta1.MsgBeginRedelegate") + proto.RegisterType((*MsgBeginRedelegateResponse)(nil), "cosmos.staking.v1beta1.MsgBeginRedelegateResponse") proto.RegisterType((*MsgUndelegate)(nil), "cosmos.staking.v1beta1.MsgUndelegate") + proto.RegisterType((*MsgUndelegateResponse)(nil), "cosmos.staking.v1beta1.MsgUndelegateResponse") } func init() { proto.RegisterFile("cosmos/staking/v1beta1/tx.proto", fileDescriptor_0926ef28816b35ab) } var fileDescriptor_0926ef28816b35ab = []byte{ - // 621 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x95, 0xc1, 0x8a, 0xd3, 0x40, - 0x1c, 0xc6, 0x93, 0x6e, 0xb7, 0xea, 0x14, 0xd7, 0x6e, 0x56, 0x4b, 0x2d, 0x4b, 0x52, 0xa2, 0xe8, - 0x1e, 0x34, 0x61, 0x15, 0x11, 0xf6, 0x22, 0x76, 0xab, 0xb8, 0x68, 0x2f, 0x59, 0xf5, 0xe0, 0xa5, - 0x4c, 0x93, 0xd9, 0x38, 0x34, 0xc9, 0x94, 0xcc, 0xb4, 0xb4, 0xe0, 0x03, 0x78, 0x14, 0x3c, 0x0b, - 0xfb, 0x38, 0x7b, 0x92, 0x3d, 0x8a, 0x87, 0x20, 0x2d, 0xc8, 0x9e, 0xfb, 0x04, 0x92, 0x64, 0x9a, - 0xc6, 0x36, 0x5d, 0x96, 0xc5, 0x5e, 0x3c, 0xb5, 0xfd, 0xcf, 0x37, 0xbf, 0x99, 0xff, 0x37, 0xdf, - 0x74, 0x80, 0x62, 0x12, 0xea, 0x12, 0xaa, 0x53, 0x06, 0x3b, 0xd8, 0xb3, 0xf5, 0xfe, 0x6e, 0x1b, - 0x31, 0xb8, 0xab, 0xb3, 0x81, 0xd6, 0xf5, 0x09, 0x23, 0x52, 0x39, 0x16, 0x68, 0x5c, 0xa0, 0x71, - 0x41, 0xf5, 0xa6, 0x4d, 0x6c, 0x12, 0x49, 0xf4, 0xf0, 0x5b, 0xac, 0xae, 0xca, 0x1c, 0xd7, 0x86, - 0x14, 0x25, 0x2c, 0x93, 0x60, 0x8f, 0x8f, 0xdf, 0x5d, 0xb2, 0xdc, 0x94, 0x1e, 0xa9, 0xd4, 0x6f, - 0x79, 0x20, 0x35, 0xa9, 0xbd, 0xef, 0x23, 0xc8, 0xd0, 0x7b, 0xe8, 0x60, 0x0b, 0x32, 0xe2, 0x4b, - 0xaf, 0x41, 0xd1, 0x42, 0xd4, 0xf4, 0x71, 0x97, 0x61, 0xe2, 0x55, 0xc4, 0x9a, 0xb8, 0x53, 0x7c, - 0x74, 0x47, 0xcb, 0xde, 0xa0, 0xd6, 0x98, 0x49, 0xeb, 0xf9, 0x93, 0x40, 0x11, 0x8c, 0xf4, 0x6c, - 0xa9, 0x09, 0x80, 0x49, 0x5c, 0x17, 0x53, 0x1a, 0xb2, 0x72, 0x11, 0xeb, 0xfe, 0x32, 0xd6, 0x7e, - 0xa2, 0x34, 0x20, 0x43, 0x94, 0xf3, 0x52, 0x00, 0xe9, 0x13, 0xd8, 0x72, 0xb1, 0xd7, 0xa2, 0xc8, - 0x39, 0x6a, 0x59, 0xc8, 0x41, 0x36, 0x8c, 0xf6, 0xb8, 0x56, 0x13, 0x77, 0xae, 0xd5, 0xdf, 0x84, - 0xf2, 0x9f, 0x81, 0x72, 0xcf, 0xc6, 0xec, 0x63, 0xaf, 0xad, 0x99, 0xc4, 0xd5, 0xb9, 0x11, 0xf1, - 0xc7, 0x43, 0x6a, 0x75, 0x74, 0x36, 0xec, 0x22, 0xaa, 0x1d, 0x78, 0x6c, 0x12, 0x28, 0xd5, 0x21, - 0x74, 0x9d, 0x3d, 0x35, 0x03, 0xa9, 0x1a, 0x9b, 0x2e, 0xf6, 0x0e, 0x91, 0x73, 0xd4, 0x48, 0x6a, - 0xd2, 0x01, 0xd8, 0xe4, 0x0a, 0xe2, 0xb7, 0xa0, 0x65, 0xf9, 0x88, 0xd2, 0x4a, 0x3e, 0x5a, 0x7b, - 0x7b, 0x12, 0x28, 0x95, 0x98, 0xb6, 0x20, 0x51, 0x8d, 0x52, 0x52, 0x7b, 0x1e, 0x97, 0x42, 0x54, - 0x7f, 0xea, 0x78, 0x82, 0x5a, 0x9f, 0x47, 0x2d, 0x48, 0x54, 0xa3, 0x94, 0xd4, 0xa6, 0xa8, 0x32, - 0x28, 0x74, 0x7b, 0xed, 0x0e, 0x1a, 0x56, 0x0a, 0xe1, 0x7c, 0x83, 0xff, 0x92, 0x9e, 0x80, 0xf5, - 0x3e, 0x74, 0x7a, 0xa8, 0x72, 0x25, 0x72, 0xfd, 0xf6, 0xd4, 0xf5, 0x30, 0x34, 0x29, 0xcb, 0xf1, - 0xf4, 0xdc, 0x62, 0xf5, 0xde, 0xd5, 0xcf, 0xc7, 0x8a, 0x70, 0x76, 0xac, 0x08, 0xea, 0xd7, 0x35, - 0x50, 0x6a, 0x52, 0xfb, 0x85, 0x85, 0xd9, 0x8a, 0xd2, 0xf1, 0x2c, 0xcb, 0x85, 0x5c, 0xe4, 0x82, - 0x34, 0x09, 0x94, 0x8d, 0xd8, 0x85, 0x73, 0x7a, 0x77, 0xc1, 0x8d, 0x59, 0x3a, 0x5a, 0x3e, 0x64, - 0x88, 0x67, 0xa1, 0x71, 0xc1, 0x1c, 0x34, 0x90, 0x39, 0x09, 0x94, 0x72, 0xbc, 0xd0, 0x1c, 0x4a, - 0x35, 0x36, 0xcc, 0xbf, 0x12, 0x29, 0x0d, 0xb2, 0xe3, 0x17, 0x47, 0xe0, 0xd5, 0x0a, 0xa3, 0x97, - 0x3a, 0x95, 0xdf, 0x22, 0x28, 0x36, 0xa9, 0xcd, 0xc7, 0x50, 0x76, 0x28, 0xc5, 0x7f, 0x17, 0xca, - 0xdc, 0xa5, 0x42, 0xf9, 0x14, 0x14, 0xa0, 0x4b, 0x7a, 0x1e, 0x8b, 0xce, 0xe3, 0x02, 0xe9, 0xe3, - 0xf2, 0x54, 0xa3, 0xdf, 0x73, 0xd1, 0xdf, 0x53, 0x1d, 0xd9, 0xd8, 0x33, 0x90, 0xb5, 0x82, 0x7e, - 0xdf, 0x82, 0x5b, 0xb3, 0x66, 0xa8, 0x6f, 0xce, 0xf5, 0x5c, 0x9b, 0x04, 0xca, 0xf6, 0x7c, 0xcf, - 0x29, 0x99, 0x6a, 0x6c, 0x25, 0xf5, 0x43, 0xdf, 0xcc, 0xa4, 0x5a, 0x94, 0x25, 0xd4, 0xb5, 0xe5, - 0xd4, 0x94, 0x2c, 0x4d, 0x6d, 0x50, 0xb6, 0x68, 0x68, 0xfe, 0xb2, 0x86, 0x9e, 0x89, 0xe0, 0x7a, - 0x93, 0xda, 0xef, 0x3c, 0xeb, 0x7f, 0xcf, 0x4e, 0xfd, 0xe5, 0xc9, 0x48, 0x16, 0x4f, 0x47, 0xb2, - 0xf8, 0x6b, 0x24, 0x8b, 0x5f, 0xc6, 0xb2, 0x70, 0x3a, 0x96, 0x85, 0x1f, 0x63, 0x59, 0xf8, 0xf0, - 0xe0, 0xdc, 0x1b, 0x3a, 0x48, 0x9e, 0xcc, 0xe8, 0xae, 0xb6, 0x0b, 0xd1, 0x4b, 0xf9, 0xf8, 0x4f, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x4f, 0x9f, 0xcb, 0x45, 0xc0, 0x07, 0x00, 0x00, + // 815 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x96, 0x4f, 0x6b, 0xdb, 0x48, + 0x18, 0xc6, 0x2d, 0xdb, 0xf1, 0x66, 0x27, 0xe4, 0x9f, 0xb2, 0x09, 0x5e, 0x11, 0xac, 0xa0, 0xec, + 0xb6, 0xa1, 0x6d, 0xa4, 0x26, 0xa5, 0x14, 0x72, 0x29, 0x75, 0xdc, 0xd2, 0xd0, 0xfa, 0xa2, 0xa4, + 0x3d, 0x94, 0x82, 0x91, 0xa5, 0xb1, 0x2a, 0x2c, 0x69, 0x1c, 0xcd, 0x38, 0x24, 0xd0, 0x0f, 0xd0, + 0x63, 0xa0, 0xb7, 0x42, 0x21, 0x1f, 0x27, 0xa7, 0x92, 0x63, 0xe9, 0xc1, 0x2d, 0x09, 0x94, 0x9c, + 0xfd, 0x09, 0x8a, 0x46, 0xd2, 0x58, 0x96, 0x6d, 0x61, 0x42, 0x7d, 0xe9, 0x29, 0xf1, 0xe8, 0x37, + 0xcf, 0x68, 0x9e, 0x79, 0xe6, 0x7d, 0x05, 0x44, 0x1d, 0x61, 0x07, 0x61, 0x05, 0x13, 0xad, 0x69, + 0xb9, 0xa6, 0x72, 0xb4, 0x55, 0x87, 0x44, 0xdb, 0x52, 0xc8, 0xb1, 0xdc, 0xf2, 0x10, 0x41, 0xfc, + 0x4a, 0x00, 0xc8, 0x21, 0x20, 0x87, 0x80, 0xf0, 0x8f, 0x89, 0x4c, 0x44, 0x11, 0xc5, 0xff, 0x2f, + 0xa0, 0x85, 0x52, 0x28, 0x57, 0xd7, 0x30, 0x64, 0x5a, 0x3a, 0xb2, 0xdc, 0xf0, 0xb9, 0x68, 0x22, + 0x64, 0xda, 0x50, 0xa1, 0xbf, 0xea, 0xed, 0x86, 0x42, 0x2c, 0x07, 0x62, 0xa2, 0x39, 0xad, 0x10, + 0xf8, 0x6f, 0xc4, 0xfb, 0x44, 0xcb, 0x53, 0x4a, 0xfa, 0x9c, 0x07, 0x7c, 0x15, 0x9b, 0xbb, 0x1e, + 0xd4, 0x08, 0x7c, 0xad, 0xd9, 0x96, 0xa1, 0x11, 0xe4, 0xf1, 0x2f, 0xc0, 0x8c, 0x01, 0xb1, 0xee, + 0x59, 0x2d, 0x62, 0x21, 0xb7, 0xc8, 0xad, 0x71, 0x1b, 0x33, 0xdb, 0xeb, 0xf2, 0xf0, 0x1d, 0xc8, + 0x95, 0x1e, 0x5a, 0xce, 0x9f, 0x77, 0xc4, 0x8c, 0x1a, 0x9f, 0xcd, 0x57, 0x01, 0xd0, 0x91, 0xe3, + 0x58, 0x18, 0xfb, 0x5a, 0x59, 0xaa, 0x75, 0x7b, 0x94, 0xd6, 0x2e, 0x23, 0x55, 0x8d, 0x40, 0x1c, + 0xea, 0xc5, 0x04, 0xf8, 0xf7, 0x60, 0xc9, 0xb1, 0xdc, 0x1a, 0x86, 0x76, 0xa3, 0x66, 0x40, 0x1b, + 0x9a, 0x1a, 0x7d, 0xc7, 0xdc, 0x1a, 0xb7, 0xf1, 0x77, 0xf9, 0xa5, 0x8f, 0x7f, 0xeb, 0x88, 0xb7, + 0x4c, 0x8b, 0xbc, 0x6b, 0xd7, 0x65, 0x1d, 0x39, 0x4a, 0x68, 0x44, 0xf0, 0x67, 0x13, 0x1b, 0x4d, + 0x85, 0x9c, 0xb4, 0x20, 0x96, 0xf7, 0x5c, 0xd2, 0xed, 0x88, 0xc2, 0x89, 0xe6, 0xd8, 0x3b, 0xd2, + 0x10, 0x49, 0x49, 0x5d, 0x74, 0x2c, 0x77, 0x1f, 0xda, 0x8d, 0x0a, 0x1b, 0xe3, 0xf7, 0xc0, 0x62, + 0x48, 0x20, 0xaf, 0xa6, 0x19, 0x86, 0x07, 0x31, 0x2e, 0xe6, 0xe9, 0xda, 0xab, 0xdd, 0x8e, 0x58, + 0x0c, 0xd4, 0x06, 0x10, 0x49, 0x5d, 0x60, 0x63, 0x4f, 0x82, 0x21, 0x5f, 0xea, 0x28, 0x72, 0x9c, + 0x49, 0x4d, 0x25, 0xa5, 0x06, 0x10, 0x49, 0x5d, 0x60, 0x63, 0x91, 0xd4, 0x0a, 0x28, 0xb4, 0xda, + 0xf5, 0x26, 0x3c, 0x29, 0x16, 0xfc, 0xf9, 0x6a, 0xf8, 0x8b, 0x7f, 0x08, 0xa6, 0x8e, 0x34, 0xbb, + 0x0d, 0x8b, 0x7f, 0x51, 0xd7, 0xff, 0x8d, 0x5c, 0xf7, 0x53, 0x15, 0xb3, 0xdc, 0x8a, 0xce, 0x2d, + 0xa0, 0x77, 0xa6, 0x3f, 0x9c, 0x89, 0x99, 0xeb, 0x33, 0x31, 0x23, 0xad, 0x02, 0x61, 0x30, 0x1e, + 0x2a, 0xc4, 0x2d, 0xe4, 0x62, 0x28, 0x7d, 0xcc, 0x81, 0x85, 0x2a, 0x36, 0x9f, 0x1a, 0x16, 0x99, + 0x50, 0x76, 0x1e, 0x0f, 0xf3, 0x28, 0x4b, 0x3d, 0xe2, 0xbb, 0x1d, 0x71, 0x2e, 0xf0, 0x28, 0xc5, + 0x19, 0x07, 0xcc, 0xf7, 0xb2, 0x53, 0xf3, 0x34, 0x02, 0xc3, 0xa4, 0x54, 0xc6, 0x4c, 0x49, 0x05, + 0xea, 0xdd, 0x8e, 0xb8, 0x12, 0x2c, 0x94, 0x90, 0x92, 0xd4, 0x39, 0xbd, 0x2f, 0xaf, 0xfc, 0xf1, + 0xf0, 0x70, 0x06, 0x01, 0x79, 0x3e, 0xc1, 0x60, 0xc6, 0xce, 0x4c, 0x00, 0xc5, 0xe4, 0xa1, 0xb0, + 0x13, 0xfb, 0xc9, 0x81, 0x99, 0x2a, 0x36, 0xc3, 0x79, 0x70, 0x78, 0x9c, 0xb9, 0xdf, 0x17, 0xe7, + 0xec, 0x8d, 0xe2, 0xfc, 0x08, 0x14, 0x34, 0x07, 0xb5, 0x5d, 0x42, 0xcf, 0x6a, 0x8c, 0xdc, 0x86, + 0x78, 0xcc, 0x84, 0x65, 0xb0, 0x14, 0xdb, 0x27, 0xdb, 0xff, 0x97, 0x2c, 0xad, 0x77, 0x65, 0x68, + 0x5a, 0xae, 0x0a, 0x8d, 0x09, 0xd8, 0x70, 0x00, 0x96, 0x7b, 0x7b, 0xc4, 0x9e, 0x9e, 0xb0, 0x62, + 0xad, 0xdb, 0x11, 0x57, 0x93, 0x56, 0xc4, 0x30, 0x49, 0x5d, 0x62, 0xe3, 0xfb, 0x9e, 0x3e, 0x54, + 0xd5, 0xc0, 0x84, 0xa9, 0xe6, 0x46, 0xab, 0xc6, 0xb0, 0xb8, 0x6a, 0x05, 0x93, 0x41, 0x9f, 0xf3, + 0x37, 0xf5, 0xb9, 0x49, 0x0b, 0x44, 0xc2, 0xcf, 0xc8, 0x6e, 0xbe, 0x4a, 0x6f, 0x5f, 0xcb, 0x86, + 0x7e, 0x44, 0x6b, 0x7e, 0x8b, 0x0a, 0xeb, 0x81, 0x20, 0x07, 0xfd, 0x4b, 0x8e, 0xfa, 0x97, 0x7c, + 0x10, 0xf5, 0xaf, 0xf2, 0xb4, 0xbf, 0xd4, 0xe9, 0x77, 0x91, 0xa3, 0xb7, 0x2b, 0x9c, 0xec, 0x3f, + 0x96, 0xae, 0x39, 0x30, 0x5b, 0xc5, 0xe6, 0x2b, 0xd7, 0xf8, 0xe3, 0xf3, 0xdb, 0x00, 0xcb, 0x7d, + 0x3b, 0x9d, 0x90, 0xa5, 0xdb, 0x9f, 0xf2, 0x20, 0x57, 0xc5, 0x26, 0x7f, 0x08, 0xe6, 0x93, 0x1f, + 0x01, 0x77, 0x46, 0xd5, 0xec, 0xc1, 0x8e, 0x20, 0x6c, 0x8f, 0xcf, 0xb2, 0x9d, 0x34, 0xc1, 0x6c, + 0x7f, 0xe7, 0xd8, 0x48, 0x11, 0xe9, 0x23, 0x85, 0xfb, 0xe3, 0x92, 0x6c, 0xb1, 0xb7, 0x60, 0x9a, + 0x15, 0xbd, 0xf5, 0x94, 0xd9, 0x11, 0x24, 0xdc, 0x1d, 0x03, 0x62, 0xea, 0x87, 0x60, 0x3e, 0x59, + 0x52, 0xd2, 0xdc, 0x4b, 0xb0, 0xa9, 0xee, 0x8d, 0xba, 0x5a, 0x75, 0x00, 0x62, 0xf7, 0xe0, 0xff, + 0x14, 0x85, 0x1e, 0x26, 0x6c, 0x8e, 0x85, 0x45, 0x6b, 0x94, 0x9f, 0x9d, 0x5f, 0x96, 0xb8, 0x8b, + 0xcb, 0x12, 0xf7, 0xe3, 0xb2, 0xc4, 0x9d, 0x5e, 0x95, 0x32, 0x17, 0x57, 0xa5, 0xcc, 0xd7, 0xab, + 0x52, 0xe6, 0xcd, 0xbd, 0xd4, 0x36, 0x76, 0xcc, 0xbe, 0x3a, 0x69, 0x43, 0xab, 0x17, 0x68, 0x24, + 0x1f, 0xfc, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x72, 0xf7, 0x1e, 0x24, 0x0b, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { + // CreateValidator defines a method for creating a new validator. + CreateValidator(ctx context.Context, in *MsgCreateValidator, opts ...grpc.CallOption) (*MsgCreateValidatorResponse, error) + // EditValidator defines a method for editing an existing validator. + EditValidator(ctx context.Context, in *MsgEditValidator, opts ...grpc.CallOption) (*MsgEditValidatorResponse, error) + // Delegate defines a method for performing a delegation of coins + // from a delegator to a validator. + Delegate(ctx context.Context, in *MsgDelegate, opts ...grpc.CallOption) (*MsgDelegateResponse, error) + // BeginRedelegate defines a method for performing a redelegation + // of coins from a delegator and source validator to a destination validator. + BeginRedelegate(ctx context.Context, in *MsgBeginRedelegate, opts ...grpc.CallOption) (*MsgBeginRedelegateResponse, error) + // Undelegate defines a method for performing an undelegation from a + // delegate and a validator. + Undelegate(ctx context.Context, in *MsgUndelegate, opts ...grpc.CallOption) (*MsgUndelegateResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) CreateValidator(ctx context.Context, in *MsgCreateValidator, opts ...grpc.CallOption) (*MsgCreateValidatorResponse, error) { + out := new(MsgCreateValidatorResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/CreateValidator", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) EditValidator(ctx context.Context, in *MsgEditValidator, opts ...grpc.CallOption) (*MsgEditValidatorResponse, error) { + out := new(MsgEditValidatorResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/EditValidator", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) Delegate(ctx context.Context, in *MsgDelegate, opts ...grpc.CallOption) (*MsgDelegateResponse, error) { + out := new(MsgDelegateResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/Delegate", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) BeginRedelegate(ctx context.Context, in *MsgBeginRedelegate, opts ...grpc.CallOption) (*MsgBeginRedelegateResponse, error) { + out := new(MsgBeginRedelegateResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/BeginRedelegate", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) Undelegate(ctx context.Context, in *MsgUndelegate, opts ...grpc.CallOption) (*MsgUndelegateResponse, error) { + out := new(MsgUndelegateResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/Undelegate", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + // CreateValidator defines a method for creating a new validator. + CreateValidator(context.Context, *MsgCreateValidator) (*MsgCreateValidatorResponse, error) + // EditValidator defines a method for editing an existing validator. + EditValidator(context.Context, *MsgEditValidator) (*MsgEditValidatorResponse, error) + // Delegate defines a method for performing a delegation of coins + // from a delegator to a validator. + Delegate(context.Context, *MsgDelegate) (*MsgDelegateResponse, error) + // BeginRedelegate defines a method for performing a redelegation + // of coins from a delegator and source validator to a destination validator. + BeginRedelegate(context.Context, *MsgBeginRedelegate) (*MsgBeginRedelegateResponse, error) + // Undelegate defines a method for performing an undelegation from a + // delegate and a validator. + Undelegate(context.Context, *MsgUndelegate) (*MsgUndelegateResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) CreateValidator(ctx context.Context, req *MsgCreateValidator) (*MsgCreateValidatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateValidator not implemented") +} +func (*UnimplementedMsgServer) EditValidator(ctx context.Context, req *MsgEditValidator) (*MsgEditValidatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EditValidator not implemented") +} +func (*UnimplementedMsgServer) Delegate(ctx context.Context, req *MsgDelegate) (*MsgDelegateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Delegate not implemented") +} +func (*UnimplementedMsgServer) BeginRedelegate(ctx context.Context, req *MsgBeginRedelegate) (*MsgBeginRedelegateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method BeginRedelegate not implemented") +} +func (*UnimplementedMsgServer) Undelegate(ctx context.Context, req *MsgUndelegate) (*MsgUndelegateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Undelegate not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_CreateValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgCreateValidator) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).CreateValidator(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/CreateValidator", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).CreateValidator(ctx, req.(*MsgCreateValidator)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_EditValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgEditValidator) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).EditValidator(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/EditValidator", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).EditValidator(ctx, req.(*MsgEditValidator)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_Delegate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgDelegate) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).Delegate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/Delegate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).Delegate(ctx, req.(*MsgDelegate)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_BeginRedelegate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgBeginRedelegate) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).BeginRedelegate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/BeginRedelegate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).BeginRedelegate(ctx, req.(*MsgBeginRedelegate)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_Undelegate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUndelegate) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).Undelegate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/Undelegate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).Undelegate(ctx, req.(*MsgUndelegate)) + } + return interceptor(ctx, in, info, handler) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "cosmos.staking.v1beta1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateValidator", + Handler: _Msg_CreateValidator_Handler, + }, + { + MethodName: "EditValidator", + Handler: _Msg_EditValidator_Handler, + }, + { + MethodName: "Delegate", + Handler: _Msg_Delegate_Handler, + }, + { + MethodName: "BeginRedelegate", + Handler: _Msg_BeginRedelegate_Handler, + }, + { + MethodName: "Undelegate", + Handler: _Msg_Undelegate_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "cosmos/staking/v1beta1/tx.proto", } func (m *MsgCreateValidator) Marshal() (dAtA []byte, err error) { @@ -376,6 +843,29 @@ func (m *MsgCreateValidator) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *MsgCreateValidatorResponse) 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 *MsgCreateValidatorResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCreateValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + func (m *MsgEditValidator) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -440,6 +930,29 @@ func (m *MsgEditValidator) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *MsgEditValidatorResponse) 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 *MsgEditValidatorResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgEditValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + func (m *MsgDelegate) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -487,6 +1000,29 @@ func (m *MsgDelegate) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *MsgDelegateResponse) 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 *MsgDelegateResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgDelegateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + func (m *MsgBeginRedelegate) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -541,6 +1077,37 @@ func (m *MsgBeginRedelegate) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *MsgBeginRedelegateResponse) 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 *MsgBeginRedelegateResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgBeginRedelegateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + n7, err7 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime):]) + if err7 != nil { + return 0, err7 + } + i -= n7 + i = encodeVarintTx(dAtA, i, uint64(n7)) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *MsgUndelegate) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -588,6 +1155,37 @@ func (m *MsgUndelegate) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *MsgUndelegateResponse) 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 *MsgUndelegateResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUndelegateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + n9, err9 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime):]) + if err9 != nil { + return 0, err9 + } + i -= n9 + i = encodeVarintTx(dAtA, i, uint64(n9)) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func encodeVarintTx(dAtA []byte, offset int, v uint64) int { offset -= sovTx(v) base := offset @@ -628,6 +1226,15 @@ func (m *MsgCreateValidator) Size() (n int) { return n } +func (m *MsgCreateValidatorResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func (m *MsgEditValidator) Size() (n int) { if m == nil { return 0 @@ -651,6 +1258,15 @@ func (m *MsgEditValidator) Size() (n int) { return n } +func (m *MsgEditValidatorResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func (m *MsgDelegate) Size() (n int) { if m == nil { return 0 @@ -670,6 +1286,15 @@ func (m *MsgDelegate) Size() (n int) { return n } +func (m *MsgDelegateResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func (m *MsgBeginRedelegate) Size() (n int) { if m == nil { return 0 @@ -693,6 +1318,17 @@ func (m *MsgBeginRedelegate) Size() (n int) { return n } +func (m *MsgBeginRedelegateResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime) + n += 1 + l + sovTx(uint64(l)) + return n +} + func (m *MsgUndelegate) Size() (n int) { if m == nil { return 0 @@ -712,6 +1348,17 @@ func (m *MsgUndelegate) Size() (n int) { return n } +func (m *MsgUndelegateResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime) + n += 1 + l + sovTx(uint64(l)) + return n +} + func sovTx(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -1000,6 +1647,59 @@ func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgCreateValidatorResponse) 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: MsgCreateValidatorResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCreateValidatorResponse: 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 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *MsgEditValidator) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -1153,19 +1853,72 @@ func (m *MsgEditValidator) Unmarshal(dAtA []byte) error { if intStringLen < 0 { return ErrInvalidLengthTx } - postIndex := iNdEx + intStringLen - if postIndex < 0 { + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var v github_com_cosmos_cosmos_sdk_types.Int + m.MinSelfDelegation = &v + if err := m.MinSelfDelegation.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 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { return ErrInvalidLengthTx } - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - var v github_com_cosmos_cosmos_sdk_types.Int - m.MinSelfDelegation = &v - if err := m.MinSelfDelegation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgEditValidatorResponse) 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 } - iNdEx = postIndex + 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: MsgEditValidatorResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgEditValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -1340,6 +2093,59 @@ func (m *MsgDelegate) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgDelegateResponse) 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: MsgDelegateResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgDelegateResponse: 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 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *MsgBeginRedelegate) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -1522,6 +2328,92 @@ func (m *MsgBeginRedelegate) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgBeginRedelegateResponse) 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: MsgBeginRedelegateResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgBeginRedelegateResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CompletionTime", 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 := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.CompletionTime, 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 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *MsgUndelegate) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -1672,6 +2564,92 @@ func (m *MsgUndelegate) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgUndelegateResponse) 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: MsgUndelegateResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUndelegateResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CompletionTime", 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 := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.CompletionTime, 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 { + return ErrInvalidLengthTx + } + if (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