feat: add msg for permanent locked vesting accounts (#11019)

* feat: add msg for permanent locked vesting accounts

* add changelog entry

* review udpates

Co-authored-by: atheeshp <59333759+atheeshp@users.noreply.github.com>
This commit is contained in:
Cory
2022-01-28 16:55:18 -08:00
committed by GitHub
co-authored by atheeshp
parent 22517392b3
commit ea30578dd9
110 changed files with 2104 additions and 106 deletions
+37
View File
@@ -32,6 +32,7 @@ func GetTxCmd() *cobra.Command {
txCmd.AddCommand(
NewMsgCreateVestingAccountCmd(),
NewMsgCreatePermanentLockedAccountCmd(),
NewMsgCreatePeriodicVestingAccountCmd(),
)
@@ -84,6 +85,42 @@ timestamp.`,
return cmd
}
// NewMsgCreatePermanentLockedAccountCmd returns a CLI command handler for creating a
// MsgCreatePermanentLockedAccount transaction.
func NewMsgCreatePermanentLockedAccountCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "create-permanent-locked-account [to_address] [amount]",
Short: "Create a new permanently locked account funded with an allocation of tokens.",
Long: `Create a new account funded with an allocation of permanently locked tokens. These
tokens may be used for staking but are non-transferable. Staking rewards will acrue as liquid and transferable
tokens.`,
Args: cobra.ExactArgs(2),
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx, err := client.GetClientTxContext(cmd)
if err != nil {
return err
}
toAddr, err := sdk.AccAddressFromBech32(args[0])
if err != nil {
return err
}
amount, err := sdk.ParseCoinsNormalized(args[1])
if err != nil {
return err
}
msg := types.NewMsgCreatePermanentLockedAccount(clientCtx.GetFromAddress(), toAddr, amount)
return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)
},
}
flags.AddTxFlagsToCmd(cmd)
return cmd
}
type VestingData struct {
StartTime int64 `json:"start_time"`
Periods []InputPeriod `json:"periods"`
+75
View File
@@ -146,3 +146,78 @@ func (s *IntegrationTestSuite) TestNewMsgCreateVestingAccountCmd() {
s.T().Logf("Height now: %d", height)
}
}
func (s *IntegrationTestSuite) TestNewMsgCreatePermanentLockedAccountCmd() {
val := s.network.Validators[0]
testCases := map[string]struct {
args []string
expectErr bool
expectedCode uint32
respType proto.Message
}{
"create a permanent locked account": {
args: []string{
sdk.AccAddress("addr4_______________").String(),
sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(100))).String(),
fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address),
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync),
fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
},
expectErr: false,
expectedCode: 0,
respType: &sdk.TxResponse{},
},
"invalid address": {
args: []string{
"addr4",
sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String(),
"4070908800",
fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address),
},
expectErr: true,
expectedCode: 0,
respType: &sdk.TxResponse{},
},
"invalid coins": {
args: []string{
sdk.AccAddress("addr4_______________").String(),
"fooo",
"4070908800",
fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address),
},
expectErr: true,
expectedCode: 0,
respType: &sdk.TxResponse{},
},
}
// Synchronize height between test runs, to ensure sequence numbers are
// properly updated.
height, err := s.network.LatestHeight()
s.Require().NoError(err, "Getting initial latest height")
s.T().Logf("Initial latest height: %d", height)
for name, tc := range testCases {
tc := tc
s.Run(name, func() {
clientCtx := val.ClientCtx
bw, err := clitestutil.ExecTestCLICmd(clientCtx, cli.NewMsgCreatePermanentLockedAccountCmd(), tc.args)
if tc.expectErr {
s.Require().Error(err)
} else {
s.Require().NoError(err)
s.Require().NoError(clientCtx.Codec.UnmarshalJSON(bw.Bytes(), tc.respType), bw.String())
txResp := tc.respType.(*sdk.TxResponse)
s.Require().Equal(tc.expectedCode, txResp.Code)
}
})
next, err := s.network.WaitForHeight(height + 1)
s.Require().NoError(err, "Waiting for height...")
height = next
s.T().Logf("Height now: %d", height)
}
}
+66
View File
@@ -99,6 +99,72 @@ func (s msgServer) CreateVestingAccount(goCtx context.Context, msg *types.MsgCre
return &types.MsgCreateVestingAccountResponse{}, nil
}
func (s msgServer) CreatePermanentLockedAccount(goCtx context.Context, msg *types.MsgCreatePermanentLockedAccount) (*types.MsgCreatePermanentLockedAccountResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
ak := s.AccountKeeper
bk := s.BankKeeper
if err := bk.IsSendEnabledCoins(ctx, msg.Amount...); err != nil {
return nil, err
}
from, err := sdk.AccAddressFromBech32(msg.FromAddress)
if err != nil {
return nil, err
}
to, err := sdk.AccAddressFromBech32(msg.ToAddress)
if err != nil {
return nil, err
}
if bk.BlockedAddr(to) {
return nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to receive funds", msg.ToAddress)
}
if acc := ak.GetAccount(ctx, to); acc != nil {
return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "account %s already exists", msg.ToAddress)
}
baseAccountI := ak.NewAccountWithAddress(ctx, to)
baseAcc, ok := baseAccountI.(*authtypes.BaseAccount)
if !ok {
return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid account type; expected: BaseAccount, got: %T", baseAccountI)
}
var acc authtypes.AccountI = types.NewPermanentLockedAccount(baseAcc, msg.Amount)
ak.SetAccount(ctx, acc)
defer func() {
telemetry.IncrCounter(1, "new", "account")
for _, a := range msg.Amount {
if a.Amount.IsInt64() {
telemetry.SetGaugeWithLabels(
[]string{"tx", "msg", "create_permanent_locked_account"},
float32(a.Amount.Int64()),
[]metrics.Label{telemetry.NewLabel("denom", a.Denom)},
)
}
}
}()
err = bk.SendCoins(ctx, from, to, msg.Amount)
if err != nil {
return nil, err
}
ctx.EventManager().EmitEvent(
sdk.NewEvent(
sdk.EventTypeMessage,
sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),
),
)
return &types.MsgCreatePermanentLockedAccountResponse{}, nil
}
func (s msgServer) CreatePeriodicVestingAccount(goCtx context.Context, msg *types.MsgCreatePeriodicVestingAccount) (*types.MsgCreatePeriodicVestingAccountResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
+3
View File
@@ -18,6 +18,8 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {
cdc.RegisterConcrete(&DelayedVestingAccount{}, "cosmos-sdk/DelayedVestingAccount", nil)
cdc.RegisterConcrete(&PeriodicVestingAccount{}, "cosmos-sdk/PeriodicVestingAccount", nil)
cdc.RegisterConcrete(&PermanentLockedAccount{}, "cosmos-sdk/PermanentLockedAccount", nil)
cdc.RegisterConcrete(&MsgCreateVestingAccount{}, "cosmos-sdk/MsgCreateVestingAccount", nil)
cdc.RegisterConcrete(&MsgCreatePermanentLockedAccount{}, "cosmos-sdk/MsgCreatePermLockedAccount", nil)
}
// RegisterInterface associates protoName with AccountI and VestingAccount
@@ -53,6 +55,7 @@ func RegisterInterfaces(registry types.InterfaceRegistry) {
registry.RegisterImplementations(
(*sdk.Msg)(nil),
&MsgCreateVestingAccount{},
&MsgCreatePermanentLockedAccount{},
)
msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc)
+53
View File
@@ -10,11 +10,16 @@ import (
// TypeMsgCreateVestingAccount defines the type value for a MsgCreateVestingAccount.
const TypeMsgCreateVestingAccount = "msg_create_vesting_account"
// TypeMsgCreatePermanentLockedAccount defines the type value for a MsgCreatePermanentLockedAccount.
const TypeMsgCreatePermanentLockedAccount = "msg_create_permanent_locked_account"
// TypeMsgCreatePeriodicVestingAccount defines the type value for a MsgCreateVestingAccount.
const TypeMsgCreatePeriodicVestingAccount = "msg_create_periodic_vesting_account"
var _ sdk.Msg = &MsgCreateVestingAccount{}
var _ sdk.Msg = &MsgCreatePermanentLockedAccount{}
var _ sdk.Msg = &MsgCreatePeriodicVestingAccount{}
// NewMsgCreateVestingAccount returns a reference to a new MsgCreateVestingAccount.
@@ -71,6 +76,54 @@ func (msg MsgCreateVestingAccount) GetSigners() []sdk.AccAddress {
return []sdk.AccAddress{addr}
}
// NewMsgCreatePermanentLockedAccount returns a reference to a new MsgCreatePermanentLockedAccount.
//nolint:interfacer
func NewMsgCreatePermanentLockedAccount(fromAddr, toAddr sdk.AccAddress, amount sdk.Coins) *MsgCreatePermanentLockedAccount {
return &MsgCreatePermanentLockedAccount{
FromAddress: fromAddr.String(),
ToAddress: toAddr.String(),
Amount: amount,
}
}
// Route returns the message route for a MsgCreatePermanentLockedAccount.
func (msg MsgCreatePermanentLockedAccount) Route() string { return RouterKey }
// Type returns the message type for a MsgCreatePermanentLockedAccount.
func (msg MsgCreatePermanentLockedAccount) Type() string { return TypeMsgCreatePermanentLockedAccount }
// ValidateBasic Implements Msg.
func (msg MsgCreatePermanentLockedAccount) ValidateBasic() error {
if _, err := sdk.AccAddressFromBech32(msg.FromAddress); err != nil {
return sdkerrors.ErrInvalidAddress.Wrapf("invalid sender address: %s", err)
}
if _, err := sdk.AccAddressFromBech32(msg.ToAddress); err != nil {
return sdkerrors.ErrInvalidAddress.Wrapf("invalid recipient address: %s", err)
}
if !msg.Amount.IsValid() {
return sdkerrors.ErrInvalidCoins.Wrap(msg.Amount.String())
}
if !msg.Amount.IsAllPositive() {
return sdkerrors.ErrInvalidCoins.Wrap(msg.Amount.String())
}
return nil
}
// GetSignBytes returns the bytes all expected signers must sign over for a
// MsgCreatePermanentLockedAccount.
func (msg MsgCreatePermanentLockedAccount) GetSignBytes() []byte {
return sdk.MustSortJSON(amino.MustMarshalJSON(&msg))
}
// GetSigners returns the expected signers for a MsgCreatePermanentLockedAccount.
func (msg MsgCreatePermanentLockedAccount) GetSigners() []sdk.AccAddress {
from, _ := sdk.AccAddressFromBech32(msg.FromAddress)
return []sdk.AccAddress{from}
}
// NewMsgCreatePeriodicVestingAccount returns a reference to a new MsgCreatePeriodicVestingAccount.
//nolint:interfacer
func NewMsgCreatePeriodicVestingAccount(fromAddr, toAddr sdk.AccAddress, startTime int64, periods []Period) *MsgCreatePeriodicVestingAccount {
+524 -37
View File
@@ -147,6 +147,107 @@ func (m *MsgCreateVestingAccountResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_MsgCreateVestingAccountResponse proto.InternalMessageInfo
// MsgCreatePermanentLockedAccount defines a message that enables creating a permanent
// locked account.
type MsgCreatePermanentLockedAccount struct {
FromAddress string `protobuf:"bytes,1,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty" yaml:"from_address"`
ToAddress string `protobuf:"bytes,2,opt,name=to_address,json=toAddress,proto3" json:"to_address,omitempty" yaml:"to_address"`
Amount github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,3,rep,name=amount,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"amount"`
}
func (m *MsgCreatePermanentLockedAccount) Reset() { *m = MsgCreatePermanentLockedAccount{} }
func (m *MsgCreatePermanentLockedAccount) String() string { return proto.CompactTextString(m) }
func (*MsgCreatePermanentLockedAccount) ProtoMessage() {}
func (*MsgCreatePermanentLockedAccount) Descriptor() ([]byte, []int) {
return fileDescriptor_5338ca97811f9792, []int{2}
}
func (m *MsgCreatePermanentLockedAccount) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *MsgCreatePermanentLockedAccount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_MsgCreatePermanentLockedAccount.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 *MsgCreatePermanentLockedAccount) XXX_Merge(src proto.Message) {
xxx_messageInfo_MsgCreatePermanentLockedAccount.Merge(m, src)
}
func (m *MsgCreatePermanentLockedAccount) XXX_Size() int {
return m.Size()
}
func (m *MsgCreatePermanentLockedAccount) XXX_DiscardUnknown() {
xxx_messageInfo_MsgCreatePermanentLockedAccount.DiscardUnknown(m)
}
var xxx_messageInfo_MsgCreatePermanentLockedAccount proto.InternalMessageInfo
func (m *MsgCreatePermanentLockedAccount) GetFromAddress() string {
if m != nil {
return m.FromAddress
}
return ""
}
func (m *MsgCreatePermanentLockedAccount) GetToAddress() string {
if m != nil {
return m.ToAddress
}
return ""
}
func (m *MsgCreatePermanentLockedAccount) GetAmount() github_com_cosmos_cosmos_sdk_types.Coins {
if m != nil {
return m.Amount
}
return nil
}
// MsgCreatePermanentLockedAccountResponse defines the Msg/CreatePermanentLockedAccount response type.
type MsgCreatePermanentLockedAccountResponse struct {
}
func (m *MsgCreatePermanentLockedAccountResponse) Reset() {
*m = MsgCreatePermanentLockedAccountResponse{}
}
func (m *MsgCreatePermanentLockedAccountResponse) String() string { return proto.CompactTextString(m) }
func (*MsgCreatePermanentLockedAccountResponse) ProtoMessage() {}
func (*MsgCreatePermanentLockedAccountResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_5338ca97811f9792, []int{3}
}
func (m *MsgCreatePermanentLockedAccountResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *MsgCreatePermanentLockedAccountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_MsgCreatePermanentLockedAccountResponse.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 *MsgCreatePermanentLockedAccountResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_MsgCreatePermanentLockedAccountResponse.Merge(m, src)
}
func (m *MsgCreatePermanentLockedAccountResponse) XXX_Size() int {
return m.Size()
}
func (m *MsgCreatePermanentLockedAccountResponse) XXX_DiscardUnknown() {
xxx_messageInfo_MsgCreatePermanentLockedAccountResponse.DiscardUnknown(m)
}
var xxx_messageInfo_MsgCreatePermanentLockedAccountResponse proto.InternalMessageInfo
// MsgCreateVestingAccount defines a message that enables creating a vesting
// account.
type MsgCreatePeriodicVestingAccount struct {
@@ -160,7 +261,7 @@ func (m *MsgCreatePeriodicVestingAccount) Reset() { *m = MsgCreatePeriod
func (m *MsgCreatePeriodicVestingAccount) String() string { return proto.CompactTextString(m) }
func (*MsgCreatePeriodicVestingAccount) ProtoMessage() {}
func (*MsgCreatePeriodicVestingAccount) Descriptor() ([]byte, []int) {
return fileDescriptor_5338ca97811f9792, []int{2}
return fileDescriptor_5338ca97811f9792, []int{4}
}
func (m *MsgCreatePeriodicVestingAccount) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -228,7 +329,7 @@ func (m *MsgCreatePeriodicVestingAccountResponse) Reset() {
func (m *MsgCreatePeriodicVestingAccountResponse) String() string { return proto.CompactTextString(m) }
func (*MsgCreatePeriodicVestingAccountResponse) ProtoMessage() {}
func (*MsgCreatePeriodicVestingAccountResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_5338ca97811f9792, []int{3}
return fileDescriptor_5338ca97811f9792, []int{5}
}
func (m *MsgCreatePeriodicVestingAccountResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -260,6 +361,8 @@ var xxx_messageInfo_MsgCreatePeriodicVestingAccountResponse proto.InternalMessag
func init() {
proto.RegisterType((*MsgCreateVestingAccount)(nil), "cosmos.vesting.v1beta1.MsgCreateVestingAccount")
proto.RegisterType((*MsgCreateVestingAccountResponse)(nil), "cosmos.vesting.v1beta1.MsgCreateVestingAccountResponse")
proto.RegisterType((*MsgCreatePermanentLockedAccount)(nil), "cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount")
proto.RegisterType((*MsgCreatePermanentLockedAccountResponse)(nil), "cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccountResponse")
proto.RegisterType((*MsgCreatePeriodicVestingAccount)(nil), "cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccount")
proto.RegisterType((*MsgCreatePeriodicVestingAccountResponse)(nil), "cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccountResponse")
}
@@ -267,41 +370,46 @@ func init() {
func init() { proto.RegisterFile("cosmos/vesting/v1beta1/tx.proto", fileDescriptor_5338ca97811f9792) }
var fileDescriptor_5338ca97811f9792 = []byte{
// 533 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x31, 0x6f, 0xd3, 0x40,
0x14, 0xc7, 0x7d, 0x71, 0x68, 0x9b, 0x2b, 0x02, 0xc9, 0x0a, 0xd4, 0x89, 0xa8, 0x9d, 0x46, 0x48,
0x18, 0xa4, 0xda, 0xa4, 0x0c, 0x95, 0x60, 0x40, 0x4d, 0x47, 0x14, 0x09, 0x19, 0xc4, 0xc0, 0x12,
0x39, 0xf6, 0xe1, 0x9e, 0xc0, 0x77, 0x91, 0xdf, 0xa5, 0x6a, 0x37, 0xc4, 0x27, 0x60, 0x64, 0x44,
0x62, 0x63, 0x62, 0xe0, 0x03, 0x30, 0x76, 0xac, 0x98, 0x98, 0x00, 0x25, 0x03, 0xfd, 0x18, 0xc8,
0x77, 0xe7, 0xa8, 0xa5, 0x49, 0x23, 0x3a, 0x9d, 0x7d, 0xef, 0xff, 0x7f, 0xf7, 0xde, 0xcf, 0xef,
0x8c, 0xdd, 0x98, 0x43, 0xc6, 0x21, 0xd8, 0x27, 0x20, 0x28, 0x4b, 0x83, 0xfd, 0xce, 0x80, 0x88,
0xa8, 0x13, 0x88, 0x03, 0x7f, 0x98, 0x73, 0xc1, 0xad, 0x9b, 0x4a, 0xe0, 0x6b, 0x81, 0xaf, 0x05,
0xcd, 0x7a, 0xca, 0x53, 0x2e, 0x25, 0x41, 0xf1, 0xa4, 0xd4, 0x4d, 0x47, 0xa7, 0x1b, 0x44, 0x40,
0xa6, 0xb9, 0x62, 0x4e, 0x99, 0x8e, 0x37, 0x54, 0xbc, 0xaf, 0x8c, 0x3a, 0xb5, 0x0a, 0xdd, 0x9e,
0x53, 0x49, 0x79, 0xb0, 0x52, 0xad, 0x69, 0x55, 0x06, 0x85, 0xa2, 0x58, 0x54, 0xa0, 0xfd, 0xad,
0x82, 0xd7, 0x7a, 0x90, 0xee, 0xe6, 0x24, 0x12, 0xe4, 0x85, 0xf2, 0xec, 0xc4, 0x31, 0x1f, 0x31,
0x61, 0x3d, 0xc2, 0x57, 0x5f, 0xe5, 0x3c, 0xeb, 0x47, 0x49, 0x92, 0x13, 0x00, 0x1b, 0xb5, 0x90,
0x57, 0xeb, 0xda, 0xdf, 0xbf, 0x6e, 0xd6, 0x75, 0x09, 0x3b, 0x2a, 0xf2, 0x4c, 0xe4, 0x94, 0xa5,
0xe1, 0x6a, 0xa1, 0xd6, 0x5b, 0xd6, 0x36, 0xc6, 0x82, 0x4f, 0xad, 0x95, 0x05, 0xd6, 0x9a, 0xe0,
0xa5, 0x31, 0xc6, 0x4b, 0x51, 0x56, 0x9c, 0x6f, 0x9b, 0x2d, 0xd3, 0x5b, 0xdd, 0x6a, 0xf8, 0xda,
0x51, 0xc0, 0x29, 0x39, 0xfa, 0xbb, 0x9c, 0xb2, 0xee, 0xfd, 0xa3, 0x9f, 0xae, 0xf1, 0xf9, 0x97,
0xeb, 0xa5, 0x54, 0xec, 0x8d, 0x06, 0x7e, 0xcc, 0x33, 0x0d, 0x47, 0x2f, 0x9b, 0x90, 0xbc, 0x0e,
0xc4, 0xe1, 0x90, 0x80, 0x34, 0x40, 0xa8, 0x53, 0x5b, 0x0d, 0xbc, 0x42, 0x58, 0xd2, 0x17, 0x34,
0x23, 0x76, 0xb5, 0x85, 0x3c, 0x33, 0x5c, 0x26, 0x2c, 0x79, 0x4e, 0x33, 0x62, 0xd9, 0x78, 0x39,
0x21, 0x6f, 0xa2, 0x43, 0x92, 0xd8, 0x57, 0x5a, 0xc8, 0x5b, 0x09, 0xcb, 0xd7, 0x87, 0x37, 0x4e,
0x3e, 0xba, 0xe8, 0xdd, 0x9f, 0x2f, 0xf7, 0xce, 0x60, 0x69, 0x6f, 0x60, 0x77, 0x0e, 0xc1, 0x90,
0xc0, 0x90, 0x33, 0x20, 0xed, 0x13, 0x74, 0x4a, 0xf3, 0x94, 0xe4, 0x94, 0x27, 0x34, 0xfe, 0x87,
0xf6, 0xc6, 0x2c, 0xda, 0x67, 0x99, 0xae, 0x9f, 0x67, 0x7a, 0x9a, 0xdc, 0x3a, 0xc6, 0x20, 0xa2,
0x5c, 0xa8, 0xb6, 0x4c, 0xd9, 0x56, 0x4d, 0xee, 0xc8, 0xc6, 0x7a, 0xf8, 0xba, 0x1e, 0x8a, 0xfe,
0x50, 0x96, 0x00, 0x76, 0x55, 0x12, 0x76, 0xfc, 0xd9, 0xc3, 0xea, 0xab, 0x4a, 0xbb, 0xd5, 0x02,
0x73, 0x78, 0x4d, 0x47, 0xd5, 0x26, 0x48, 0x1a, 0xc6, 0x79, 0x1a, 0x77, 0xf1, 0x9d, 0x05, 0x9d,
0x96, 0x54, 0xb6, 0x3e, 0x55, 0xb0, 0xd9, 0x83, 0xd4, 0x7a, 0x8b, 0x70, 0x7d, 0xe6, 0x00, 0x06,
0xf3, 0x0a, 0x9b, 0xc3, 0xbb, 0xb9, 0xfd, 0x9f, 0x86, 0xb2, 0x14, 0xeb, 0x03, 0xc2, 0xb7, 0x2e,
0xfc, 0x3a, 0x8b, 0x33, 0xcf, 0x36, 0x36, 0x1f, 0x5f, 0xd2, 0x58, 0x96, 0xd6, 0x7d, 0x72, 0x34,
0x76, 0xd0, 0xf1, 0xd8, 0x41, 0xbf, 0xc7, 0x0e, 0x7a, 0x3f, 0x71, 0x8c, 0xe3, 0x89, 0x63, 0xfc,
0x98, 0x38, 0xc6, 0xcb, 0xce, 0x85, 0x63, 0x7f, 0x10, 0x44, 0x23, 0xb1, 0x37, 0xfd, 0x2f, 0xc8,
0x5b, 0x30, 0x58, 0x92, 0xb7, 0xfe, 0xc1, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x12, 0xd2, 0xcb,
0x32, 0xc0, 0x04, 0x00, 0x00,
// 609 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0xb1, 0x6f, 0xd3, 0x40,
0x14, 0xc6, 0x73, 0x75, 0x68, 0x9b, 0x2b, 0x02, 0x61, 0x52, 0xe2, 0x44, 0xd4, 0x4e, 0x2d, 0x24,
0x0c, 0x52, 0x6d, 0x52, 0x90, 0x2a, 0x85, 0x01, 0x35, 0x1d, 0x21, 0x12, 0x32, 0x88, 0x81, 0x25,
0x72, 0xec, 0xc3, 0xb5, 0x5a, 0xfb, 0x22, 0xdf, 0xa5, 0x6a, 0x36, 0xc4, 0x5f, 0xc0, 0xc8, 0xc8,
0xcc, 0xc4, 0xc0, 0x8c, 0x18, 0x3b, 0x56, 0x4c, 0x4c, 0x01, 0x25, 0x03, 0x9d, 0xfb, 0x07, 0x20,
0x64, 0xdf, 0x39, 0x34, 0xe9, 0x25, 0x29, 0x0c, 0x4c, 0x4e, 0xee, 0x7d, 0xdf, 0xdd, 0xbb, 0x9f,
0xbf, 0x67, 0xa8, 0xb9, 0x98, 0x84, 0x98, 0x58, 0x07, 0x88, 0xd0, 0x20, 0xf2, 0xad, 0x83, 0x5a,
0x1b, 0x51, 0xa7, 0x66, 0xd1, 0x43, 0xb3, 0x13, 0x63, 0x8a, 0xe5, 0x1b, 0x4c, 0x60, 0x72, 0x81,
0xc9, 0x05, 0x95, 0xa2, 0x8f, 0x7d, 0x9c, 0x4a, 0xac, 0xe4, 0x17, 0x53, 0x57, 0x54, 0xbe, 0x5d,
0xdb, 0x21, 0x68, 0xb4, 0x97, 0x8b, 0x83, 0x88, 0xd7, 0xcb, 0xac, 0xde, 0x62, 0x46, 0xbe, 0x35,
0x2b, 0xdd, 0x9a, 0xd2, 0x49, 0x76, 0x30, 0x53, 0x95, 0xb8, 0x2a, 0x24, 0x89, 0x22, 0x79, 0xb0,
0x82, 0xfe, 0x65, 0x01, 0x96, 0x9a, 0xc4, 0xdf, 0x89, 0x91, 0x43, 0xd1, 0x0b, 0xe6, 0xd9, 0x76,
0x5d, 0xdc, 0x8d, 0xa8, 0xfc, 0x10, 0x5e, 0x7e, 0x15, 0xe3, 0xb0, 0xe5, 0x78, 0x5e, 0x8c, 0x08,
0x51, 0x40, 0x15, 0x18, 0x85, 0x86, 0xf2, 0xf5, 0xd3, 0x46, 0x91, 0xb7, 0xb0, 0xcd, 0x2a, 0xcf,
0x68, 0x1c, 0x44, 0xbe, 0xbd, 0x92, 0xa8, 0xf9, 0x92, 0xbc, 0x05, 0x21, 0xc5, 0x23, 0xeb, 0xc2,
0x1c, 0x6b, 0x81, 0xe2, 0xcc, 0xe8, 0xc2, 0x45, 0x27, 0x4c, 0xce, 0x57, 0xa4, 0xaa, 0x64, 0xac,
0x6c, 0x96, 0x4d, 0xee, 0x48, 0xe0, 0x64, 0x1c, 0xcd, 0x1d, 0x1c, 0x44, 0x8d, 0x7b, 0x47, 0x7d,
0x2d, 0xf7, 0xe1, 0xbb, 0x66, 0xf8, 0x01, 0xdd, 0xed, 0xb6, 0x4d, 0x17, 0x87, 0x1c, 0x0e, 0x7f,
0x6c, 0x10, 0x6f, 0xcf, 0xa2, 0xbd, 0x0e, 0x22, 0xa9, 0x81, 0xd8, 0x7c, 0x6b, 0xb9, 0x0c, 0x97,
0x51, 0xe4, 0xb5, 0x68, 0x10, 0x22, 0x25, 0x5f, 0x05, 0x86, 0x64, 0x2f, 0xa1, 0xc8, 0x7b, 0x1e,
0x84, 0x48, 0x56, 0xe0, 0x92, 0x87, 0xf6, 0x9d, 0x1e, 0xf2, 0x94, 0x4b, 0x55, 0x60, 0x2c, 0xdb,
0xd9, 0xdf, 0xfa, 0xea, 0xc9, 0x7b, 0x0d, 0xbc, 0xf9, 0xf9, 0xf1, 0xee, 0x18, 0x16, 0x7d, 0x1d,
0x6a, 0x53, 0x08, 0xda, 0x88, 0x74, 0x70, 0x44, 0x90, 0xfe, 0x0b, 0x9c, 0xd1, 0x3c, 0x45, 0x71,
0xe8, 0x44, 0x28, 0xa2, 0x4f, 0xb0, 0xbb, 0x87, 0xbc, 0x8c, 0x76, 0x5d, 0x48, 0xbb, 0x74, 0xda,
0xd7, 0xae, 0xf7, 0x9c, 0x70, 0xbf, 0xae, 0x8f, 0x1d, 0x3a, 0x0e, 0xfb, 0x81, 0x00, 0xf6, 0xea,
0x69, 0x5f, 0xbb, 0xc6, 0x9c, 0x7f, 0x6a, 0xfa, 0xff, 0x26, 0x5d, 0xcf, 0x27, 0xd0, 0xf4, 0x3b,
0xf0, 0xf6, 0x9c, 0xfb, 0x8f, 0x58, 0x9d, 0x4c, 0xb0, 0x0a, 0xb0, 0x17, 0xb8, 0x13, 0xc9, 0x5c,
0x17, 0xb1, 0x1a, 0x47, 0xb2, 0x76, 0x1e, 0xc9, 0xd9, 0xbb, 0xaf, 0x41, 0x48, 0xa8, 0x13, 0x53,
0x16, 0x01, 0x29, 0x8d, 0x40, 0x21, 0x5d, 0x49, 0x43, 0xd0, 0x84, 0x57, 0xf9, 0x00, 0xb5, 0x3a,
0x69, 0x0b, 0x44, 0xc9, 0xa7, 0x8c, 0x54, 0x53, 0x3c, 0xd8, 0x26, 0xeb, 0xb4, 0x91, 0x4f, 0x40,
0xd9, 0x57, 0x78, 0x95, 0x2d, 0x92, 0x34, 0x39, 0xb9, 0xf3, 0xc9, 0x99, 0xa0, 0x22, 0xb8, 0x69,
0x46, 0x65, 0xf3, 0xb3, 0x04, 0xa5, 0x26, 0xf1, 0xe5, 0xd7, 0x00, 0x16, 0x85, 0xc3, 0x6a, 0x4d,
0x6b, 0x6c, 0x4a, 0x36, 0x2b, 0x5b, 0x7f, 0x69, 0xc8, 0x5a, 0x91, 0xdf, 0x01, 0x78, 0x73, 0x66,
0x92, 0xe7, 0xef, 0x2c, 0x36, 0x56, 0x1e, 0xfd, 0xa3, 0x51, 0xdc, 0x9a, 0x28, 0x38, 0x17, 0x6a,
0x4d, 0x60, 0xbc, 0x58, 0x6b, 0x33, 0x5e, 0x60, 0xe3, 0xf1, 0xd1, 0x40, 0x05, 0xc7, 0x03, 0x15,
0xfc, 0x18, 0xa8, 0xe0, 0xed, 0x50, 0xcd, 0x1d, 0x0f, 0xd5, 0xdc, 0xb7, 0xa1, 0x9a, 0x7b, 0x59,
0x9b, 0x39, 0x53, 0x87, 0x96, 0xd3, 0xa5, 0xbb, 0xa3, 0xcf, 0x7b, 0x3a, 0x62, 0xed, 0xc5, 0xf4,
0xe3, 0x7d, 0xff, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3d, 0xa4, 0x06, 0x42, 0x87, 0x06, 0x00,
0x00,
}
func (this *MsgCreateVestingAccount) Equal(that interface{}) bool {
@@ -345,6 +453,41 @@ func (this *MsgCreateVestingAccount) Equal(that interface{}) bool {
}
return true
}
func (this *MsgCreatePermanentLockedAccount) Equal(that interface{}) bool {
if that == nil {
return this == nil
}
that1, ok := that.(*MsgCreatePermanentLockedAccount)
if !ok {
that2, ok := that.(MsgCreatePermanentLockedAccount)
if ok {
that1 = &that2
} else {
return false
}
}
if that1 == nil {
return this == nil
} else if this == nil {
return false
}
if this.FromAddress != that1.FromAddress {
return false
}
if this.ToAddress != that1.ToAddress {
return false
}
if len(this.Amount) != len(that1.Amount) {
return false
}
for i := range this.Amount {
if !this.Amount[i].Equal(&that1.Amount[i]) {
return false
}
}
return true
}
// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
@@ -361,6 +504,9 @@ type MsgClient interface {
// CreateVestingAccount defines a method that enables creating a vesting
// account.
CreateVestingAccount(ctx context.Context, in *MsgCreateVestingAccount, opts ...grpc.CallOption) (*MsgCreateVestingAccountResponse, error)
// CreatePermanentLockedAccount defines a method that enables creating a permanent
// locked account.
CreatePermanentLockedAccount(ctx context.Context, in *MsgCreatePermanentLockedAccount, opts ...grpc.CallOption) (*MsgCreatePermanentLockedAccountResponse, error)
// CreatePeriodicVestingAccount defines a method that enables creating a
// periodic vesting account.
CreatePeriodicVestingAccount(ctx context.Context, in *MsgCreatePeriodicVestingAccount, opts ...grpc.CallOption) (*MsgCreatePeriodicVestingAccountResponse, error)
@@ -383,6 +529,15 @@ func (c *msgClient) CreateVestingAccount(ctx context.Context, in *MsgCreateVesti
return out, nil
}
func (c *msgClient) CreatePermanentLockedAccount(ctx context.Context, in *MsgCreatePermanentLockedAccount, opts ...grpc.CallOption) (*MsgCreatePermanentLockedAccountResponse, error) {
out := new(MsgCreatePermanentLockedAccountResponse)
err := c.cc.Invoke(ctx, "/cosmos.vesting.v1beta1.Msg/CreatePermanentLockedAccount", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *msgClient) CreatePeriodicVestingAccount(ctx context.Context, in *MsgCreatePeriodicVestingAccount, opts ...grpc.CallOption) (*MsgCreatePeriodicVestingAccountResponse, error) {
out := new(MsgCreatePeriodicVestingAccountResponse)
err := c.cc.Invoke(ctx, "/cosmos.vesting.v1beta1.Msg/CreatePeriodicVestingAccount", in, out, opts...)
@@ -397,6 +552,9 @@ type MsgServer interface {
// CreateVestingAccount defines a method that enables creating a vesting
// account.
CreateVestingAccount(context.Context, *MsgCreateVestingAccount) (*MsgCreateVestingAccountResponse, error)
// CreatePermanentLockedAccount defines a method that enables creating a permanent
// locked account.
CreatePermanentLockedAccount(context.Context, *MsgCreatePermanentLockedAccount) (*MsgCreatePermanentLockedAccountResponse, error)
// CreatePeriodicVestingAccount defines a method that enables creating a
// periodic vesting account.
CreatePeriodicVestingAccount(context.Context, *MsgCreatePeriodicVestingAccount) (*MsgCreatePeriodicVestingAccountResponse, error)
@@ -409,6 +567,9 @@ type UnimplementedMsgServer struct {
func (*UnimplementedMsgServer) CreateVestingAccount(ctx context.Context, req *MsgCreateVestingAccount) (*MsgCreateVestingAccountResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CreateVestingAccount not implemented")
}
func (*UnimplementedMsgServer) CreatePermanentLockedAccount(ctx context.Context, req *MsgCreatePermanentLockedAccount) (*MsgCreatePermanentLockedAccountResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CreatePermanentLockedAccount not implemented")
}
func (*UnimplementedMsgServer) CreatePeriodicVestingAccount(ctx context.Context, req *MsgCreatePeriodicVestingAccount) (*MsgCreatePeriodicVestingAccountResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CreatePeriodicVestingAccount not implemented")
}
@@ -435,6 +596,24 @@ func _Msg_CreateVestingAccount_Handler(srv interface{}, ctx context.Context, dec
return interceptor(ctx, in, info, handler)
}
func _Msg_CreatePermanentLockedAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(MsgCreatePermanentLockedAccount)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MsgServer).CreatePermanentLockedAccount(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/cosmos.vesting.v1beta1.Msg/CreatePermanentLockedAccount",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MsgServer).CreatePermanentLockedAccount(ctx, req.(*MsgCreatePermanentLockedAccount))
}
return interceptor(ctx, in, info, handler)
}
func _Msg_CreatePeriodicVestingAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(MsgCreatePeriodicVestingAccount)
if err := dec(in); err != nil {
@@ -461,6 +640,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{
MethodName: "CreateVestingAccount",
Handler: _Msg_CreateVestingAccount_Handler,
},
{
MethodName: "CreatePermanentLockedAccount",
Handler: _Msg_CreatePermanentLockedAccount_Handler,
},
{
MethodName: "CreatePeriodicVestingAccount",
Handler: _Msg_CreatePeriodicVestingAccount_Handler,
@@ -559,6 +742,80 @@ func (m *MsgCreateVestingAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int
return len(dAtA) - i, nil
}
func (m *MsgCreatePermanentLockedAccount) 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 *MsgCreatePermanentLockedAccount) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *MsgCreatePermanentLockedAccount) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
if len(m.Amount) > 0 {
for iNdEx := len(m.Amount) - 1; iNdEx >= 0; iNdEx-- {
{
size, err := m.Amount[iNdEx].MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintTx(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x1a
}
}
if len(m.ToAddress) > 0 {
i -= len(m.ToAddress)
copy(dAtA[i:], m.ToAddress)
i = encodeVarintTx(dAtA, i, uint64(len(m.ToAddress)))
i--
dAtA[i] = 0x12
}
if len(m.FromAddress) > 0 {
i -= len(m.FromAddress)
copy(dAtA[i:], m.FromAddress)
i = encodeVarintTx(dAtA, i, uint64(len(m.FromAddress)))
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
func (m *MsgCreatePermanentLockedAccountResponse) 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 *MsgCreatePermanentLockedAccountResponse) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *MsgCreatePermanentLockedAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
return len(dAtA) - i, nil
}
func (m *MsgCreatePeriodicVestingAccount) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -687,6 +944,38 @@ func (m *MsgCreateVestingAccountResponse) Size() (n int) {
return n
}
func (m *MsgCreatePermanentLockedAccount) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
l = len(m.FromAddress)
if l > 0 {
n += 1 + l + sovTx(uint64(l))
}
l = len(m.ToAddress)
if l > 0 {
n += 1 + l + sovTx(uint64(l))
}
if len(m.Amount) > 0 {
for _, e := range m.Amount {
l = e.Size()
n += 1 + l + sovTx(uint64(l))
}
}
return n
}
func (m *MsgCreatePermanentLockedAccountResponse) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
return n
}
func (m *MsgCreatePeriodicVestingAccount) Size() (n int) {
if m == nil {
return 0
@@ -965,6 +1254,204 @@ func (m *MsgCreateVestingAccountResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
func (m *MsgCreatePermanentLockedAccount) 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: MsgCreatePermanentLockedAccount: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: MsgCreatePermanentLockedAccount: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field FromAddress", 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.FromAddress = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ToAddress", 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.ToAddress = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 3:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Amount", 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
}
m.Amount = append(m.Amount, types.Coin{})
if err := m.Amount[len(m.Amount)-1].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 *MsgCreatePermanentLockedAccountResponse) 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: MsgCreatePermanentLockedAccountResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: MsgCreatePermanentLockedAccountResponse: 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 (m *MsgCreatePeriodicVestingAccount) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0