From f7c5def88900875b1d4d7f852b2dfc0ab96bacb7 Mon Sep 17 00:00:00 2001 From: Hieu Vu <72878483+hieuvubk@users.noreply.github.com> Date: Tue, 15 Oct 2024 12:21:09 +0700 Subject: [PATCH 01/35] add denomMetadata & authority metadata --- .../cosmos/bank/v2/authorityMetadata.proto | 17 + x/bank/proto/cosmos/bank/v2/bank.proto | 60 +- x/bank/proto/cosmos/bank/v2/genesis.proto | 3 + x/bank/v2/types/authorityMetadata.go | 15 + x/bank/v2/types/authorityMetadata.pb.go | 350 +++++++ x/bank/v2/types/bank.pb.go | 971 +++++++++++++++++- x/bank/v2/types/genesis.pb.go | 119 ++- 7 files changed, 1498 insertions(+), 37 deletions(-) create mode 100644 x/bank/proto/cosmos/bank/v2/authorityMetadata.proto create mode 100644 x/bank/v2/types/authorityMetadata.go create mode 100644 x/bank/v2/types/authorityMetadata.pb.go diff --git a/x/bank/proto/cosmos/bank/v2/authorityMetadata.proto b/x/bank/proto/cosmos/bank/v2/authorityMetadata.proto new file mode 100644 index 000000000000..fb3386877e22 --- /dev/null +++ b/x/bank/proto/cosmos/bank/v2/authorityMetadata.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; +package cosmos.bank.v2; + +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; + +option go_package = "cosmossdk.io/x/bank/v2/types"; + +// DenomAuthorityMetadata specifies metadata for addresses that have specific +// capabilities over a token factory denom. Right now there is only one Admin +// permission, but is planned to be extended to the future. +message DenomAuthorityMetadata { + option (gogoproto.equal) = true; + + // Can be empty for no admin, or a valid osmosis address + string admin = 1 [(gogoproto.moretags) = "yaml:\"admin\""]; +} diff --git a/x/bank/proto/cosmos/bank/v2/bank.proto b/x/bank/proto/cosmos/bank/v2/bank.proto index 52af72042046..3895393d1a68 100644 --- a/x/bank/proto/cosmos/bank/v2/bank.proto +++ b/x/bank/proto/cosmos/bank/v2/bank.proto @@ -1,7 +1,65 @@ syntax = "proto3"; package cosmos.bank.v2; +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/base/v1beta1/coin.proto"; + option go_package = "cosmossdk.io/x/bank/v2/types"; // Params defines the parameters for the bank/v2 module. -message Params {} \ No newline at end of file +message Params { + // DenomCreationFee defines the fee to be charged on the creation of a new + // denom. The fee is drawn from the MsgCreateDenom's sender account, and + // transferred to the community pool. + repeated cosmos.base.v1beta1.Coin denom_creation_fee = 1 [ + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (gogoproto.moretags) = "yaml:\"denom_creation_fee\"", + (gogoproto.nullable) = false + ]; + + // DenomCreationGasConsume defines the gas cost for creating a new denom. + // This is intended as a spam deterrence mechanism. + // + // See: https://github.com/CosmWasm/token-factory/issues/11 + uint64 denom_creation_gas_consume = 2 + [(gogoproto.moretags) = "yaml:\"denom_creation_gas_consume\"", (gogoproto.nullable) = true]; +} + +// DenomUnit represents a struct that describes a given +// denomination unit of the basic token. +message DenomUnit { + // denom represents the string name of the given denom unit (e.g uatom). + string denom = 1; + // exponent represents power of 10 exponent that one must + // raise the base_denom to in order to equal the given DenomUnit's denom + // 1 denom = 10^exponent base_denom + // (e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with + // exponent = 6, thus: 1 atom = 10^6 uatom). + uint32 exponent = 2; + // aliases is a list of string aliases for the given denom + repeated string aliases = 3; +} + +// Metadata represents a struct that describes +// a basic token. +message Metadata { + string description = 1; + // denom_units represents the list of DenomUnit's for a given coin + repeated DenomUnit denom_units = 2; + // base represents the base denom (should be the DenomUnit with exponent = 0). + string base = 3; + // display indicates the suggested denom that should be + // displayed in clients. + string display = 4; + // name defines the name of the token (eg: Cosmos Atom) + string name = 5 [(cosmos_proto.field_added_in) = "cosmos-sdk 0.43"]; + // symbol is the token symbol usually shown on exchanges (eg: ATOM). This can + // be the same as the display. + string symbol = 6 [(cosmos_proto.field_added_in) = "cosmos-sdk 0.43"]; + // URI to a document (on or off-chain) that contains additional information. Optional. + string uri = 7 [(gogoproto.customname) = "URI", (cosmos_proto.field_added_in) = "cosmos-sdk 0.46"]; + // URIHash is a sha256 hash of a document pointed by URI. It's used to verify that + // the document didn't change. Optional. + string uri_hash = 8 [(gogoproto.customname) = "URIHash", (cosmos_proto.field_added_in) = "cosmos-sdk 0.46"]; +} \ No newline at end of file diff --git a/x/bank/proto/cosmos/bank/v2/genesis.proto b/x/bank/proto/cosmos/bank/v2/genesis.proto index 410baba84b19..dd77805fa96e 100644 --- a/x/bank/proto/cosmos/bank/v2/genesis.proto +++ b/x/bank/proto/cosmos/bank/v2/genesis.proto @@ -25,6 +25,9 @@ message GenesisState { (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; + + // denom_metadata defines the metadata of the different coins. + repeated Metadata denom_metadata = 4 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // Balance defines an account address and balance pair used in the bank module's diff --git a/x/bank/v2/types/authorityMetadata.go b/x/bank/v2/types/authorityMetadata.go new file mode 100644 index 000000000000..b45bffcab552 --- /dev/null +++ b/x/bank/v2/types/authorityMetadata.go @@ -0,0 +1,15 @@ +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" +) + +func (metadata DenomAuthorityMetadata) Validate() error { + if metadata.Admin != "" { + _, err := sdk.AccAddressFromBech32(metadata.Admin) + if err != nil { + return err + } + } + return nil +} diff --git a/x/bank/v2/types/authorityMetadata.pb.go b/x/bank/v2/types/authorityMetadata.pb.go new file mode 100644 index 000000000000..a26094721f2d --- /dev/null +++ b/x/bank/v2/types/authorityMetadata.pb.go @@ -0,0 +1,350 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: cosmos/bank/v2/authorityMetadata.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// DenomAuthorityMetadata specifies metadata for addresses that have specific +// capabilities over a token factory denom. Right now there is only one Admin +// permission, but is planned to be extended to the future. +type DenomAuthorityMetadata struct { + // Can be empty for no admin, or a valid osmosis address + Admin string `protobuf:"bytes,1,opt,name=admin,proto3" json:"admin,omitempty" yaml:"admin"` +} + +func (m *DenomAuthorityMetadata) Reset() { *m = DenomAuthorityMetadata{} } +func (m *DenomAuthorityMetadata) String() string { return proto.CompactTextString(m) } +func (*DenomAuthorityMetadata) ProtoMessage() {} +func (*DenomAuthorityMetadata) Descriptor() ([]byte, []int) { + return fileDescriptor_c2b6286975ab0e3f, []int{0} +} +func (m *DenomAuthorityMetadata) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DenomAuthorityMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DenomAuthorityMetadata.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 *DenomAuthorityMetadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_DenomAuthorityMetadata.Merge(m, src) +} +func (m *DenomAuthorityMetadata) XXX_Size() int { + return m.Size() +} +func (m *DenomAuthorityMetadata) XXX_DiscardUnknown() { + xxx_messageInfo_DenomAuthorityMetadata.DiscardUnknown(m) +} + +var xxx_messageInfo_DenomAuthorityMetadata proto.InternalMessageInfo + +func (m *DenomAuthorityMetadata) GetAdmin() string { + if m != nil { + return m.Admin + } + return "" +} + +func init() { + proto.RegisterType((*DenomAuthorityMetadata)(nil), "cosmos.bank.v2.DenomAuthorityMetadata") +} + +func init() { + proto.RegisterFile("cosmos/bank/v2/authorityMetadata.proto", fileDescriptor_c2b6286975ab0e3f) +} + +var fileDescriptor_c2b6286975ab0e3f = []byte{ + // 211 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4b, 0xce, 0x2f, 0xce, + 0xcd, 0x2f, 0xd6, 0x4f, 0x4a, 0xcc, 0xcb, 0xd6, 0x2f, 0x33, 0xd2, 0x4f, 0x2c, 0x2d, 0xc9, 0xc8, + 0x2f, 0xca, 0x2c, 0xa9, 0xf4, 0x4d, 0x2d, 0x49, 0x4c, 0x49, 0x2c, 0x49, 0xd4, 0x2b, 0x28, 0xca, + 0x2f, 0xc9, 0x17, 0xe2, 0x83, 0xa8, 0xd3, 0x03, 0xa9, 0xd3, 0x2b, 0x33, 0x92, 0x12, 0x49, 0xcf, + 0x4f, 0xcf, 0x07, 0x4b, 0xe9, 0x83, 0x58, 0x10, 0x55, 0x52, 0x72, 0x70, 0xd3, 0x8a, 0x53, 0xf5, + 0xcb, 0x0c, 0x93, 0x52, 0x4b, 0x12, 0x0d, 0xf5, 0x93, 0xf3, 0x33, 0xf3, 0x20, 0xf2, 0x4a, 0x6e, + 0x5c, 0x62, 0x2e, 0xa9, 0x79, 0xf9, 0xb9, 0x8e, 0xe8, 0xb6, 0x08, 0xa9, 0x71, 0xb1, 0x26, 0xa6, + 0xe4, 0x66, 0xe6, 0x49, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x3a, 0x09, 0x7c, 0xba, 0x27, 0xcf, 0x53, + 0x99, 0x98, 0x9b, 0x63, 0xa5, 0x04, 0x16, 0x56, 0x0a, 0x82, 0x48, 0x5b, 0xb1, 0xbc, 0x58, 0x20, + 0xcf, 0xe8, 0x64, 0x76, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, + 0x4e, 0x78, 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, 0x32, 0x10, + 0x17, 0x14, 0xa7, 0x64, 0xeb, 0x65, 0xe6, 0xeb, 0x57, 0xc0, 0xfd, 0x55, 0x52, 0x59, 0x90, 0x5a, + 0x9c, 0xc4, 0x06, 0x76, 0x86, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x55, 0x83, 0xcb, 0x67, 0xf6, + 0x00, 0x00, 0x00, +} + +func (this *DenomAuthorityMetadata) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*DenomAuthorityMetadata) + if !ok { + that2, ok := that.(DenomAuthorityMetadata) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Admin != that1.Admin { + return false + } + return true +} +func (m *DenomAuthorityMetadata) 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 *DenomAuthorityMetadata) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DenomAuthorityMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Admin) > 0 { + i -= len(m.Admin) + copy(dAtA[i:], m.Admin) + i = encodeVarintAuthorityMetadata(dAtA, i, uint64(len(m.Admin))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintAuthorityMetadata(dAtA []byte, offset int, v uint64) int { + offset -= sovAuthorityMetadata(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *DenomAuthorityMetadata) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Admin) + if l > 0 { + n += 1 + l + sovAuthorityMetadata(uint64(l)) + } + return n +} + +func sovAuthorityMetadata(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozAuthorityMetadata(x uint64) (n int) { + return sovAuthorityMetadata(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *DenomAuthorityMetadata) 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 ErrIntOverflowAuthorityMetadata + } + 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: DenomAuthorityMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DenomAuthorityMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Admin", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuthorityMetadata + } + 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 ErrInvalidLengthAuthorityMetadata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAuthorityMetadata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Admin = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipAuthorityMetadata(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAuthorityMetadata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipAuthorityMetadata(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAuthorityMetadata + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAuthorityMetadata + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAuthorityMetadata + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthAuthorityMetadata + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupAuthorityMetadata + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthAuthorityMetadata + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthAuthorityMetadata = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowAuthorityMetadata = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupAuthorityMetadata = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/bank/v2/types/bank.pb.go b/x/bank/v2/types/bank.pb.go index bb701e8dd16f..9bbc9c460b24 100644 --- a/x/bank/v2/types/bank.pb.go +++ b/x/bank/v2/types/bank.pb.go @@ -5,6 +5,10 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" @@ -24,6 +28,15 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // Params defines the parameters for the bank/v2 module. type Params struct { + // DenomCreationFee defines the fee to be charged on the creation of a new + // denom. The fee is drawn from the MsgCreateDenom's sender account, and + // transferred to the community pool. + DenomCreationFee github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=denom_creation_fee,json=denomCreationFee,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"denom_creation_fee" yaml:"denom_creation_fee"` + // DenomCreationGasConsume defines the gas cost for creating a new denom. + // This is intended as a spam deterrence mechanism. + // + // See: https://github.com/CosmWasm/token-factory/issues/11 + DenomCreationGasConsume uint64 `protobuf:"varint,2,opt,name=denom_creation_gas_consume,json=denomCreationGasConsume,proto3" json:"denom_creation_gas_consume,omitempty" yaml:"denom_creation_gas_consume"` } func (m *Params) Reset() { *m = Params{} } @@ -59,22 +72,245 @@ func (m *Params) XXX_DiscardUnknown() { var xxx_messageInfo_Params proto.InternalMessageInfo +func (m *Params) GetDenomCreationFee() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.DenomCreationFee + } + return nil +} + +func (m *Params) GetDenomCreationGasConsume() uint64 { + if m != nil { + return m.DenomCreationGasConsume + } + return 0 +} + +// DenomUnit represents a struct that describes a given +// denomination unit of the basic token. +type DenomUnit struct { + // denom represents the string name of the given denom unit (e.g uatom). + Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"` + // exponent represents power of 10 exponent that one must + // raise the base_denom to in order to equal the given DenomUnit's denom + // 1 denom = 10^exponent base_denom + // (e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with + // exponent = 6, thus: 1 atom = 10^6 uatom). + Exponent uint32 `protobuf:"varint,2,opt,name=exponent,proto3" json:"exponent,omitempty"` + // aliases is a list of string aliases for the given denom + Aliases []string `protobuf:"bytes,3,rep,name=aliases,proto3" json:"aliases,omitempty"` +} + +func (m *DenomUnit) Reset() { *m = DenomUnit{} } +func (m *DenomUnit) String() string { return proto.CompactTextString(m) } +func (*DenomUnit) ProtoMessage() {} +func (*DenomUnit) Descriptor() ([]byte, []int) { + return fileDescriptor_2e0dfb4485ca624d, []int{1} +} +func (m *DenomUnit) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DenomUnit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DenomUnit.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 *DenomUnit) XXX_Merge(src proto.Message) { + xxx_messageInfo_DenomUnit.Merge(m, src) +} +func (m *DenomUnit) XXX_Size() int { + return m.Size() +} +func (m *DenomUnit) XXX_DiscardUnknown() { + xxx_messageInfo_DenomUnit.DiscardUnknown(m) +} + +var xxx_messageInfo_DenomUnit proto.InternalMessageInfo + +func (m *DenomUnit) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *DenomUnit) GetExponent() uint32 { + if m != nil { + return m.Exponent + } + return 0 +} + +func (m *DenomUnit) GetAliases() []string { + if m != nil { + return m.Aliases + } + return nil +} + +// Metadata represents a struct that describes +// a basic token. +type Metadata struct { + Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` + // denom_units represents the list of DenomUnit's for a given coin + DenomUnits []*DenomUnit `protobuf:"bytes,2,rep,name=denom_units,json=denomUnits,proto3" json:"denom_units,omitempty"` + // base represents the base denom (should be the DenomUnit with exponent = 0). + Base string `protobuf:"bytes,3,opt,name=base,proto3" json:"base,omitempty"` + // display indicates the suggested denom that should be + // displayed in clients. + Display string `protobuf:"bytes,4,opt,name=display,proto3" json:"display,omitempty"` + // name defines the name of the token (eg: Cosmos Atom) + Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` + // symbol is the token symbol usually shown on exchanges (eg: ATOM). This can + // be the same as the display. + Symbol string `protobuf:"bytes,6,opt,name=symbol,proto3" json:"symbol,omitempty"` + // URI to a document (on or off-chain) that contains additional information. Optional. + URI string `protobuf:"bytes,7,opt,name=uri,proto3" json:"uri,omitempty"` + // URIHash is a sha256 hash of a document pointed by URI. It's used to verify that + // the document didn't change. Optional. + URIHash string `protobuf:"bytes,8,opt,name=uri_hash,json=uriHash,proto3" json:"uri_hash,omitempty"` +} + +func (m *Metadata) Reset() { *m = Metadata{} } +func (m *Metadata) String() string { return proto.CompactTextString(m) } +func (*Metadata) ProtoMessage() {} +func (*Metadata) Descriptor() ([]byte, []int) { + return fileDescriptor_2e0dfb4485ca624d, []int{2} +} +func (m *Metadata) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Metadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Metadata.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 *Metadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_Metadata.Merge(m, src) +} +func (m *Metadata) XXX_Size() int { + return m.Size() +} +func (m *Metadata) XXX_DiscardUnknown() { + xxx_messageInfo_Metadata.DiscardUnknown(m) +} + +var xxx_messageInfo_Metadata proto.InternalMessageInfo + +func (m *Metadata) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *Metadata) GetDenomUnits() []*DenomUnit { + if m != nil { + return m.DenomUnits + } + return nil +} + +func (m *Metadata) GetBase() string { + if m != nil { + return m.Base + } + return "" +} + +func (m *Metadata) GetDisplay() string { + if m != nil { + return m.Display + } + return "" +} + +func (m *Metadata) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Metadata) GetSymbol() string { + if m != nil { + return m.Symbol + } + return "" +} + +func (m *Metadata) GetURI() string { + if m != nil { + return m.URI + } + return "" +} + +func (m *Metadata) GetURIHash() string { + if m != nil { + return m.URIHash + } + return "" +} + func init() { proto.RegisterType((*Params)(nil), "cosmos.bank.v2.Params") + proto.RegisterType((*DenomUnit)(nil), "cosmos.bank.v2.DenomUnit") + proto.RegisterType((*Metadata)(nil), "cosmos.bank.v2.Metadata") } func init() { proto.RegisterFile("cosmos/bank/v2/bank.proto", fileDescriptor_2e0dfb4485ca624d) } var fileDescriptor_2e0dfb4485ca624d = []byte{ - // 118 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4c, 0xce, 0x2f, 0xce, - 0xcd, 0x2f, 0xd6, 0x4f, 0x4a, 0xcc, 0xcb, 0xd6, 0x2f, 0x33, 0x02, 0xd3, 0x7a, 0x05, 0x45, 0xf9, - 0x25, 0xf9, 0x42, 0x7c, 0x10, 0x29, 0x3d, 0xb0, 0x50, 0x99, 0x91, 0x12, 0x07, 0x17, 0x5b, 0x40, - 0x62, 0x51, 0x62, 0x6e, 0xb1, 0x93, 0xd9, 0x89, 0x47, 0x72, 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, - 0x78, 0x24, 0xc7, 0x38, 0xe1, 0xb1, 0x1c, 0xc3, 0x85, 0xc7, 0x72, 0x0c, 0x37, 0x1e, 0xcb, 0x31, - 0x44, 0xc9, 0x40, 0xf4, 0x14, 0xa7, 0x64, 0xeb, 0x65, 0xe6, 0xeb, 0x57, 0xc0, 0x8d, 0x2d, 0xa9, - 0x2c, 0x48, 0x2d, 0x4e, 0x62, 0x03, 0x1b, 0x6c, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x40, 0x6a, - 0x3a, 0xbb, 0x75, 0x00, 0x00, 0x00, + // 537 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x53, 0xcd, 0x6e, 0xd3, 0x40, + 0x10, 0x8e, 0xe3, 0x34, 0x3f, 0x5b, 0xf1, 0xa3, 0xa5, 0x12, 0x9b, 0x08, 0xd9, 0x26, 0x17, 0x82, + 0xa0, 0x36, 0x4d, 0x51, 0x25, 0x7a, 0x4c, 0x10, 0xd0, 0x43, 0x25, 0x64, 0x29, 0x42, 0xe2, 0x12, + 0x6d, 0xec, 0x6d, 0xb2, 0x4a, 0xbc, 0x1b, 0x79, 0xec, 0xa8, 0x79, 0x04, 0x6e, 0x9c, 0x78, 0x08, + 0xce, 0x3c, 0x44, 0x8e, 0xbd, 0x20, 0x21, 0x0e, 0x06, 0x25, 0x6f, 0xd0, 0x27, 0x40, 0x5e, 0x3b, + 0xa6, 0xb4, 0xe5, 0xe4, 0x9d, 0xf9, 0x7e, 0xe6, 0x93, 0x66, 0x8c, 0x9a, 0x9e, 0x84, 0x40, 0x82, + 0x33, 0xa2, 0x62, 0xea, 0x2c, 0xba, 0xea, 0x6b, 0xcf, 0x43, 0x19, 0x49, 0x7c, 0x37, 0x83, 0x6c, + 0xd5, 0x5a, 0x74, 0x5b, 0x7b, 0x63, 0x39, 0x96, 0x0a, 0x72, 0xd2, 0x57, 0xc6, 0x6a, 0xe5, 0x06, + 0xc3, 0x0c, 0xc8, 0x25, 0x19, 0x64, 0x14, 0xde, 0xc0, 0x9c, 0xc5, 0xc1, 0x88, 0x45, 0xf4, 0xc0, + 0xf1, 0x24, 0x17, 0x19, 0xde, 0xfe, 0x54, 0x46, 0xd5, 0xf7, 0x34, 0xa4, 0x01, 0xe0, 0x2f, 0x1a, + 0xc2, 0x3e, 0x13, 0x32, 0x18, 0x7a, 0x21, 0xa3, 0x11, 0x97, 0x62, 0x78, 0xc6, 0x18, 0xd1, 0x2c, + 0xbd, 0xb3, 0xdb, 0x6d, 0xda, 0x45, 0x12, 0x60, 0x76, 0x6e, 0x64, 0xf7, 0x25, 0x17, 0xbd, 0xd3, + 0x55, 0x62, 0x96, 0x2e, 0x13, 0xb3, 0xb9, 0xa4, 0xc1, 0xec, 0xb8, 0x7d, 0xd3, 0xa2, 0xfd, 0xf5, + 0x97, 0xd9, 0x19, 0xf3, 0x68, 0x12, 0x8f, 0x6c, 0x4f, 0x06, 0x79, 0xc0, 0xfc, 0xb3, 0x0f, 0xfe, + 0xd4, 0x89, 0x96, 0x73, 0x06, 0xca, 0x0d, 0xdc, 0xfb, 0xca, 0xa0, 0x9f, 0xeb, 0xdf, 0x30, 0x86, + 0xcf, 0x50, 0xeb, 0x9a, 0xe9, 0x98, 0xc2, 0xd0, 0x93, 0x02, 0xe2, 0x80, 0x91, 0xb2, 0xa5, 0x75, + 0x2a, 0xbd, 0xa7, 0xab, 0xc4, 0xd4, 0x2e, 0x13, 0xf3, 0xf1, 0xad, 0x21, 0xae, 0xf0, 0xdb, 0xee, + 0xc3, 0x7f, 0x06, 0xbc, 0xa5, 0xd0, 0xcf, 0x91, 0x0f, 0xa8, 0xf1, 0x3a, 0x85, 0x06, 0x82, 0x47, + 0x78, 0x0f, 0xed, 0x28, 0x1e, 0xd1, 0x2c, 0xad, 0xd3, 0x70, 0xb3, 0x02, 0xb7, 0x50, 0x9d, 0x9d, + 0xcf, 0xa5, 0x60, 0x22, 0x52, 0x83, 0xef, 0xb8, 0x45, 0x8d, 0x09, 0xaa, 0xd1, 0x19, 0xa7, 0xc0, + 0x80, 0xe8, 0x96, 0xde, 0x69, 0xb8, 0xdb, 0xb2, 0xfd, 0xbd, 0x8c, 0xea, 0xa7, 0x2c, 0xa2, 0x3e, + 0x8d, 0x28, 0xb6, 0xd0, 0xae, 0xcf, 0xc0, 0x0b, 0xf9, 0x3c, 0x1d, 0x9f, 0xdb, 0x5f, 0x6d, 0xe1, + 0xe3, 0x94, 0x91, 0xe6, 0x8f, 0x05, 0x8f, 0x80, 0x94, 0xaf, 0x2f, 0x40, 0x9d, 0x82, 0x5d, 0x44, + 0x75, 0x91, 0xbf, 0x7d, 0x02, 0xc6, 0xa8, 0x92, 0x6e, 0x88, 0xe8, 0xca, 0x56, 0xbd, 0xd3, 0x60, + 0x3e, 0x87, 0xf9, 0x8c, 0x2e, 0x49, 0x45, 0xb5, 0xb7, 0x25, 0x7e, 0x82, 0x2a, 0x82, 0x06, 0x8c, + 0xec, 0xa4, 0xed, 0xde, 0x83, 0x9f, 0xdf, 0xf6, 0xef, 0xfd, 0xdd, 0x8a, 0xf5, 0xc2, 0x7e, 0x79, + 0xe8, 0x2a, 0x02, 0x7e, 0x86, 0xaa, 0xb0, 0x0c, 0x46, 0x72, 0x46, 0xaa, 0xff, 0xa7, 0xe6, 0x14, + 0xfc, 0x1c, 0xe9, 0x71, 0xc8, 0x49, 0x4d, 0x31, 0x5b, 0xeb, 0xc4, 0xd4, 0x07, 0xee, 0xc9, 0x4d, + 0xc1, 0x91, 0x9b, 0xd2, 0xf0, 0x2b, 0x54, 0x8f, 0x43, 0x3e, 0x9c, 0x50, 0x98, 0x90, 0xba, 0x92, + 0x18, 0xeb, 0xc4, 0xac, 0x0d, 0xdc, 0x93, 0x77, 0x14, 0x26, 0xb7, 0xc9, 0x6a, 0x71, 0xc8, 0x53, + 0xac, 0x77, 0xb4, 0x5a, 0x1b, 0xda, 0xc5, 0xda, 0xd0, 0x7e, 0xaf, 0x0d, 0xed, 0xf3, 0xc6, 0x28, + 0x5d, 0x6c, 0x8c, 0xd2, 0x8f, 0x8d, 0x51, 0xfa, 0xf8, 0x28, 0xd3, 0x80, 0x3f, 0xb5, 0xb9, 0x74, + 0xce, 0x8b, 0x5f, 0x4b, 0x1d, 0xda, 0xa8, 0xaa, 0x6e, 0xff, 0xf0, 0x4f, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xc2, 0xe8, 0x08, 0x7c, 0x79, 0x03, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { @@ -97,6 +333,155 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.DenomCreationGasConsume != 0 { + i = encodeVarintBank(dAtA, i, uint64(m.DenomCreationGasConsume)) + i-- + dAtA[i] = 0x10 + } + if len(m.DenomCreationFee) > 0 { + for iNdEx := len(m.DenomCreationFee) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.DenomCreationFee[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintBank(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *DenomUnit) 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 *DenomUnit) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DenomUnit) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Aliases) > 0 { + for iNdEx := len(m.Aliases) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Aliases[iNdEx]) + copy(dAtA[i:], m.Aliases[iNdEx]) + i = encodeVarintBank(dAtA, i, uint64(len(m.Aliases[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + if m.Exponent != 0 { + i = encodeVarintBank(dAtA, i, uint64(m.Exponent)) + i-- + dAtA[i] = 0x10 + } + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintBank(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Metadata) 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 *Metadata) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Metadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.URIHash) > 0 { + i -= len(m.URIHash) + copy(dAtA[i:], m.URIHash) + i = encodeVarintBank(dAtA, i, uint64(len(m.URIHash))) + i-- + dAtA[i] = 0x42 + } + if len(m.URI) > 0 { + i -= len(m.URI) + copy(dAtA[i:], m.URI) + i = encodeVarintBank(dAtA, i, uint64(len(m.URI))) + i-- + dAtA[i] = 0x3a + } + if len(m.Symbol) > 0 { + i -= len(m.Symbol) + copy(dAtA[i:], m.Symbol) + i = encodeVarintBank(dAtA, i, uint64(len(m.Symbol))) + i-- + dAtA[i] = 0x32 + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintBank(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x2a + } + if len(m.Display) > 0 { + i -= len(m.Display) + copy(dAtA[i:], m.Display) + i = encodeVarintBank(dAtA, i, uint64(len(m.Display))) + i-- + dAtA[i] = 0x22 + } + if len(m.Base) > 0 { + i -= len(m.Base) + copy(dAtA[i:], m.Base) + i = encodeVarintBank(dAtA, i, uint64(len(m.Base))) + i-- + dAtA[i] = 0x1a + } + if len(m.DenomUnits) > 0 { + for iNdEx := len(m.DenomUnits) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.DenomUnits[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintBank(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.Description) > 0 { + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = encodeVarintBank(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0xa + } return len(dAtA) - i, nil } @@ -117,6 +502,80 @@ func (m *Params) Size() (n int) { } var l int _ = l + if len(m.DenomCreationFee) > 0 { + for _, e := range m.DenomCreationFee { + l = e.Size() + n += 1 + l + sovBank(uint64(l)) + } + } + if m.DenomCreationGasConsume != 0 { + n += 1 + sovBank(uint64(m.DenomCreationGasConsume)) + } + return n +} + +func (m *DenomUnit) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovBank(uint64(l)) + } + if m.Exponent != 0 { + n += 1 + sovBank(uint64(m.Exponent)) + } + if len(m.Aliases) > 0 { + for _, s := range m.Aliases { + l = len(s) + n += 1 + l + sovBank(uint64(l)) + } + } + return n +} + +func (m *Metadata) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Description) + if l > 0 { + n += 1 + l + sovBank(uint64(l)) + } + if len(m.DenomUnits) > 0 { + for _, e := range m.DenomUnits { + l = e.Size() + n += 1 + l + sovBank(uint64(l)) + } + } + l = len(m.Base) + if l > 0 { + n += 1 + l + sovBank(uint64(l)) + } + l = len(m.Display) + if l > 0 { + n += 1 + l + sovBank(uint64(l)) + } + l = len(m.Name) + if l > 0 { + n += 1 + l + sovBank(uint64(l)) + } + l = len(m.Symbol) + if l > 0 { + n += 1 + l + sovBank(uint64(l)) + } + l = len(m.URI) + if l > 0 { + n += 1 + l + sovBank(uint64(l)) + } + l = len(m.URIHash) + if l > 0 { + n += 1 + l + sovBank(uint64(l)) + } return n } @@ -155,6 +614,500 @@ func (m *Params) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DenomCreationFee", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowBank + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthBank + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthBank + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DenomCreationFee = append(m.DenomCreationFee, types.Coin{}) + if err := m.DenomCreationFee[len(m.DenomCreationFee)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DenomCreationGasConsume", wireType) + } + m.DenomCreationGasConsume = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowBank + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DenomCreationGasConsume |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipBank(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthBank + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DenomUnit) 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 ErrIntOverflowBank + } + 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: DenomUnit: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DenomUnit: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowBank + } + 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 ErrInvalidLengthBank + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthBank + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Exponent", wireType) + } + m.Exponent = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowBank + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Exponent |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Aliases", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowBank + } + 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 ErrInvalidLengthBank + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthBank + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Aliases = append(m.Aliases, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipBank(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthBank + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Metadata) 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 ErrIntOverflowBank + } + 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: Metadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Metadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowBank + } + 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 ErrInvalidLengthBank + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthBank + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Description = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DenomUnits", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowBank + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthBank + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthBank + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DenomUnits = append(m.DenomUnits, &DenomUnit{}) + if err := m.DenomUnits[len(m.DenomUnits)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Base", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowBank + } + 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 ErrInvalidLengthBank + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthBank + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Base = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Display", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowBank + } + 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 ErrInvalidLengthBank + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthBank + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Display = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowBank + } + 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 ErrInvalidLengthBank + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthBank + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Symbol", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowBank + } + 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 ErrInvalidLengthBank + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthBank + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Symbol = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field URI", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowBank + } + 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 ErrInvalidLengthBank + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthBank + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.URI = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field URIHash", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowBank + } + 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 ErrInvalidLengthBank + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthBank + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.URIHash = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipBank(dAtA[iNdEx:]) diff --git a/x/bank/v2/types/genesis.pb.go b/x/bank/v2/types/genesis.pb.go index d2c5e38249e4..18e0910adb68 100644 --- a/x/bank/v2/types/genesis.pb.go +++ b/x/bank/v2/types/genesis.pb.go @@ -36,6 +36,8 @@ type GenesisState struct { // supply represents the total supply. If it is left empty, then supply will be calculated based on the provided // balances. Otherwise, it will be used to validate that the sum of the balances equals this amount. Supply github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,3,rep,name=supply,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"supply"` + // denom_metadata defines the metadata of the different coins. + DenomMetadata []Metadata `protobuf:"bytes,4,rep,name=denom_metadata,json=denomMetadata,proto3" json:"denom_metadata"` } func (m *GenesisState) Reset() { *m = GenesisState{} } @@ -92,6 +94,13 @@ func (m *GenesisState) GetSupply() github_com_cosmos_cosmos_sdk_types.Coins { return nil } +func (m *GenesisState) GetDenomMetadata() []Metadata { + if m != nil { + return m.DenomMetadata + } + return nil +} + // Balance defines an account address and balance pair used in the bank module's // genesis state. type Balance struct { @@ -142,33 +151,35 @@ func init() { func init() { proto.RegisterFile("cosmos/bank/v2/genesis.proto", fileDescriptor_bc2b1daa12dfd4fc) } var fileDescriptor_bc2b1daa12dfd4fc = []byte{ - // 401 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x49, 0xce, 0x2f, 0xce, - 0xcd, 0x2f, 0xd6, 0x4f, 0x4a, 0xcc, 0xcb, 0xd6, 0x2f, 0x33, 0xd2, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, - 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x83, 0xc8, 0xea, 0x81, 0x64, 0xf5, - 0xca, 0x8c, 0xa4, 0x44, 0xd2, 0xf3, 0xd3, 0xf3, 0xc1, 0x52, 0xfa, 0x20, 0x16, 0x44, 0x95, 0x94, - 0x24, 0x9a, 0x19, 0x60, 0xd5, 0x10, 0x29, 0xc1, 0xc4, 0xdc, 0xcc, 0xbc, 0x7c, 0x7d, 0x30, 0x09, - 0x15, 0x92, 0x83, 0xab, 0x2e, 0x4e, 0xd5, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x4f, - 0xce, 0xcf, 0xcc, 0x43, 0x35, 0x2d, 0x1e, 0x62, 0x0d, 0xd4, 0x01, 0x60, 0x8e, 0x52, 0x0b, 0x13, - 0x17, 0x8f, 0x3b, 0xc4, 0x81, 0xc1, 0x25, 0x89, 0x25, 0xa9, 0x42, 0x96, 0x5c, 0x6c, 0x05, 0x89, - 0x45, 0x89, 0xb9, 0xc5, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0xdc, 0x46, 0x62, 0x7a, 0xa8, 0x0e, 0xd6, - 0x0b, 0x00, 0xcb, 0x3a, 0x71, 0x9e, 0xb8, 0x27, 0xcf, 0xb0, 0xe2, 0xf9, 0x06, 0x2d, 0xc6, 0x20, - 0xa8, 0x06, 0x21, 0x3b, 0x2e, 0x8e, 0xa4, 0xc4, 0x9c, 0xc4, 0xbc, 0xe4, 0xd4, 0x62, 0x09, 0x26, - 0x05, 0x66, 0x0d, 0x6e, 0x23, 0x71, 0x74, 0xcd, 0x4e, 0x10, 0x79, 0x64, 0xdd, 0x70, 0x3d, 0x42, - 0x95, 0x5c, 0x6c, 0xc5, 0xa5, 0x05, 0x05, 0x39, 0x95, 0x12, 0xcc, 0x60, 0xdd, 0x92, 0x08, 0xdd, - 0xc5, 0xa9, 0x7a, 0x50, 0x7f, 0xe9, 0x39, 0xe7, 0x67, 0xe6, 0x39, 0xb9, 0x81, 0xf4, 0xaf, 0xba, - 0x2f, 0xaf, 0x91, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0x0b, 0xf5, 0x17, 0x94, - 0xd2, 0x2d, 0x4e, 0xc9, 0xd6, 0x2f, 0xa9, 0x2c, 0x48, 0x2d, 0x06, 0x6b, 0x28, 0x9e, 0xf5, 0x7c, - 0x83, 0x16, 0x4f, 0x4e, 0x6a, 0x7a, 0x62, 0x72, 0x65, 0x3c, 0x28, 0x64, 0x8a, 0xa1, 0x4e, 0x87, - 0x58, 0xa8, 0x74, 0x80, 0x91, 0x8b, 0x1d, 0xea, 0x36, 0x21, 0x23, 0x2e, 0xf6, 0xc4, 0x94, 0x94, - 0xa2, 0xd4, 0x62, 0x48, 0x10, 0x70, 0x3a, 0x49, 0x5c, 0xda, 0xa2, 0x2b, 0x02, 0x75, 0x8a, 0x23, - 0x44, 0x26, 0xb8, 0xa4, 0x28, 0x33, 0x2f, 0x3d, 0x08, 0xa6, 0x50, 0xa8, 0x9c, 0x8b, 0x15, 0x6c, - 0x2a, 0xd4, 0xdf, 0x74, 0x70, 0x39, 0xc4, 0x3e, 0x2b, 0x8e, 0x8e, 0x05, 0xf2, 0x0c, 0x2f, 0x16, - 0xc8, 0x33, 0x38, 0x99, 0x9d, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, - 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x14, 0x34, - 0x41, 0x16, 0xa7, 0x64, 0xeb, 0x65, 0xe6, 0xeb, 0x57, 0xc0, 0x13, 0x15, 0xd8, 0x92, 0x24, 0x36, - 0x70, 0x42, 0x30, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xa0, 0x29, 0x0f, 0xca, 0xb7, 0x02, 0x00, - 0x00, + // 435 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x92, 0xc1, 0xaa, 0xd3, 0x40, + 0x14, 0x86, 0x93, 0x7b, 0xb5, 0xf7, 0xde, 0xb9, 0xb5, 0x60, 0x28, 0x9a, 0x16, 0x49, 0x4a, 0x57, + 0xa5, 0xd0, 0x19, 0x1a, 0x41, 0xd0, 0x85, 0x60, 0x04, 0x05, 0x41, 0x90, 0x76, 0xe7, 0xa6, 0x4c, + 0x92, 0x21, 0x86, 0x36, 0x33, 0x21, 0x33, 0xad, 0xe6, 0x0d, 0x5c, 0xba, 0x76, 0xd5, 0xa5, 0xb8, + 0xea, 0xc2, 0x07, 0x70, 0xd9, 0x65, 0x71, 0xe5, 0x4a, 0xa5, 0x5d, 0xd4, 0xc7, 0x90, 0xcc, 0x4c, + 0x6b, 0xdb, 0x07, 0xb8, 0x9b, 0x36, 0xc9, 0x7f, 0xbe, 0x73, 0xfe, 0xff, 0x70, 0xc0, 0x83, 0x90, + 0xf1, 0x94, 0x71, 0x14, 0x60, 0x3a, 0x46, 0x33, 0x0f, 0xc5, 0x84, 0x12, 0x9e, 0x70, 0x98, 0xe5, + 0x4c, 0x30, 0xab, 0xa6, 0x54, 0x58, 0xaa, 0x70, 0xe6, 0x35, 0xeb, 0x31, 0x8b, 0x99, 0x94, 0x50, + 0xf9, 0xa4, 0xaa, 0x9a, 0x8d, 0x93, 0x1e, 0xb2, 0x5a, 0x49, 0x77, 0x71, 0x9a, 0x50, 0x86, 0xe4, + 0xaf, 0xfe, 0xe4, 0xec, 0xab, 0x39, 0x41, 0xb3, 0x7e, 0x40, 0x04, 0xee, 0xa3, 0x90, 0x25, 0xf4, + 0xb8, 0xdb, 0x48, 0x8d, 0xd1, 0x06, 0xe4, 0x4b, 0x7b, 0x75, 0x06, 0xaa, 0x2f, 0x95, 0xc1, 0xa1, + 0xc0, 0x82, 0x58, 0x8f, 0x41, 0x25, 0xc3, 0x39, 0x4e, 0xb9, 0x6d, 0xb6, 0xcc, 0xce, 0xb5, 0x77, + 0x0f, 0x1e, 0x1b, 0x86, 0x6f, 0xa4, 0xea, 0x5f, 0x2d, 0x7f, 0xb9, 0xc6, 0x97, 0xed, 0xa2, 0x6b, + 0x0e, 0x34, 0x60, 0x3d, 0x05, 0x97, 0x01, 0x9e, 0x60, 0x1a, 0x12, 0x6e, 0x9f, 0xb5, 0xce, 0x3b, + 0xd7, 0xde, 0xfd, 0x53, 0xd8, 0x57, 0xfa, 0x21, 0xbd, 0x67, 0xac, 0x02, 0x54, 0xf8, 0x34, 0xcb, + 0x26, 0x85, 0x7d, 0x2e, 0xe9, 0xc6, 0x7f, 0x9a, 0x13, 0xa8, 0x73, 0xc1, 0xe7, 0x2c, 0xa1, 0xfe, + 0x8b, 0x92, 0xff, 0xfa, 0xdb, 0xed, 0xc4, 0x89, 0x78, 0x37, 0x0d, 0x60, 0xc8, 0x52, 0x9d, 0x4b, + 0xff, 0xf5, 0x78, 0x34, 0x46, 0xa2, 0xc8, 0x08, 0x97, 0x00, 0xff, 0xbc, 0x5d, 0x74, 0xab, 0x13, + 0x12, 0xe3, 0xb0, 0x18, 0x95, 0x9b, 0xe1, 0xda, 0xba, 0x1a, 0x68, 0xbd, 0x02, 0xb5, 0x88, 0x50, + 0x96, 0x8e, 0x52, 0x22, 0x70, 0x84, 0x05, 0xb6, 0x6f, 0x49, 0x0b, 0xf6, 0x69, 0x80, 0xd7, 0x5a, + 0x3f, 0x4c, 0x70, 0x47, 0xa2, 0x3b, 0xa5, 0xfd, 0xdd, 0x04, 0x17, 0x3a, 0xa7, 0xe5, 0x81, 0x0b, + 0x1c, 0x45, 0x39, 0xe1, 0x6a, 0x9d, 0x57, 0xbe, 0xfd, 0xe3, 0x5b, 0xaf, 0xae, 0x7b, 0x3e, 0x53, + 0xca, 0x50, 0xe4, 0x09, 0x8d, 0x07, 0xbb, 0x42, 0xeb, 0x3d, 0xb8, 0x2d, 0x1d, 0xea, 0x1d, 0xde, + 0xc0, 0x16, 0xd4, 0xbc, 0x27, 0x97, 0x1f, 0xe7, 0xae, 0xf1, 0x77, 0xee, 0x1a, 0xfe, 0xa3, 0xe5, + 0xda, 0x31, 0x57, 0x6b, 0xc7, 0xfc, 0xb3, 0x76, 0xcc, 0x4f, 0x1b, 0xc7, 0x58, 0x6d, 0x1c, 0xe3, + 0xe7, 0xc6, 0x31, 0xde, 0xea, 0xe3, 0xe6, 0xd1, 0x18, 0x26, 0x0c, 0x7d, 0xd8, 0x1f, 0xa8, 0x1c, + 0x12, 0x54, 0xe4, 0x51, 0x3d, 0xfc, 0x17, 0x00, 0x00, 0xff, 0xff, 0x21, 0x11, 0xd2, 0x8b, 0x03, + 0x03, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -191,6 +202,20 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.DenomMetadata) > 0 { + for iNdEx := len(m.DenomMetadata) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.DenomMetadata[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } if len(m.Supply) > 0 { for iNdEx := len(m.Supply) - 1; iNdEx >= 0; iNdEx-- { { @@ -307,6 +332,12 @@ func (m *GenesisState) Size() (n int) { n += 1 + l + sovGenesis(uint64(l)) } } + if len(m.DenomMetadata) > 0 { + for _, e := range m.DenomMetadata { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } return n } @@ -465,6 +496,40 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DenomMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DenomMetadata = append(m.DenomMetadata, Metadata{}) + if err := m.DenomMetadata[len(m.DenomMetadata)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenesis(dAtA[iNdEx:]) From a7c45d412ab54ea834e122a6f65ac65a2bb464cb Mon Sep 17 00:00:00 2001 From: Hieu Vu <72878483+hieuvubk@users.noreply.github.com> Date: Tue, 15 Oct 2024 12:39:40 +0700 Subject: [PATCH 02/35] genesis & funcs --- x/bank/proto/cosmos/bank/v2/genesis.proto | 13 + x/bank/v2/keeper/admins.go | 34 ++ x/bank/v2/keeper/createdenom.go | 107 ++++++ x/bank/v2/keeper/creators.go | 28 ++ x/bank/v2/keeper/genesis.go | 22 ++ x/bank/v2/keeper/keeper.go | 63 +++- x/bank/v2/keeper/params.go | 21 ++ x/bank/v2/types/denoms.go | 68 ++++ x/bank/v2/types/errors.go | 19 ++ x/bank/v2/types/genesis.pb.go | 381 ++++++++++++++++++++-- x/bank/v2/types/keys.go | 4 + 11 files changed, 724 insertions(+), 36 deletions(-) create mode 100644 x/bank/v2/keeper/admins.go create mode 100644 x/bank/v2/keeper/createdenom.go create mode 100644 x/bank/v2/keeper/creators.go create mode 100644 x/bank/v2/keeper/params.go create mode 100644 x/bank/v2/types/denoms.go create mode 100644 x/bank/v2/types/errors.go diff --git a/x/bank/proto/cosmos/bank/v2/genesis.proto b/x/bank/proto/cosmos/bank/v2/genesis.proto index dd77805fa96e..c3fa5ca862c8 100644 --- a/x/bank/proto/cosmos/bank/v2/genesis.proto +++ b/x/bank/proto/cosmos/bank/v2/genesis.proto @@ -3,6 +3,7 @@ package cosmos.bank.v2; import "gogoproto/gogo.proto"; import "cosmos/bank/v2/bank.proto"; +import "cosmos/bank/v2/authorityMetadata.proto"; import "amino/amino.proto"; import "cosmos/base/v1beta1/coin.proto"; import "cosmos_proto/cosmos.proto"; @@ -28,6 +29,8 @@ message GenesisState { // denom_metadata defines the metadata of the different coins. repeated Metadata denom_metadata = 4 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + repeated GenesisDenom factory_denoms = 5 [(gogoproto.nullable) = false]; } // Balance defines an account address and balance pair used in the bank module's @@ -46,4 +49,14 @@ message Balance { (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; +} + +// GenesisDenom defines a tokenfactory denom that is defined within genesis +// state. The structure contains DenomAuthorityMetadata which defines the +// denom's admin. +message GenesisDenom { + option (gogoproto.equal) = true; + + string denom = 1; + DenomAuthorityMetadata authority_metadata = 2 [(gogoproto.nullable) = false]; } \ No newline at end of file diff --git a/x/bank/v2/keeper/admins.go b/x/bank/v2/keeper/admins.go new file mode 100644 index 000000000000..7e369db5cacf --- /dev/null +++ b/x/bank/v2/keeper/admins.go @@ -0,0 +1,34 @@ +package keeper + +import ( + "context" + + "cosmossdk.io/x/bank/v2/types" +) + +// GetAuthorityMetadata returns the authority metadata for a specific denom +func (k Keeper) GetAuthorityMetadata(ctx context.Context, denom string) (types.DenomAuthorityMetadata, error) { + authority, err := k.denomAuthority.Get(ctx, denom) + return authority, err +} + +// setAuthorityMetadata stores authority metadata for a specific denom +func (k Keeper) setAuthorityMetadata(ctx context.Context, denom string, metadata types.DenomAuthorityMetadata) error { + err := metadata.Validate() + if err != nil { + return err + } + + return k.denomAuthority.Set(ctx, denom, metadata) +} + +func (k Keeper) setAdmin(ctx context.Context, denom string, admin string) error { + metadata, err := k.GetAuthorityMetadata(ctx, denom) + if err != nil { + return err + } + + metadata.Admin = admin + + return k.setAuthorityMetadata(ctx, denom, metadata) +} diff --git a/x/bank/v2/keeper/createdenom.go b/x/bank/v2/keeper/createdenom.go new file mode 100644 index 000000000000..810a624c4c92 --- /dev/null +++ b/x/bank/v2/keeper/createdenom.go @@ -0,0 +1,107 @@ +package keeper + +import ( + "context" + "fmt" + + "cosmossdk.io/x/bank/v2/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" +) + +// ConvertToBaseToken converts a fee amount in a whitelisted fee token to the base fee token amount +func (k Keeper) CreateDenom(ctx context.Context, creatorAddr string, subdenom string) (newTokenDenom string, err error) { + denom, err := k.validateCreateDenom(ctx, creatorAddr, subdenom) + if err != nil { + return "", err + } + + err = k.chargeForCreateDenom(ctx, creatorAddr) + if err != nil { + return "", err + } + + err = k.createDenomAfterValidation(ctx, creatorAddr, denom) + return denom, err +} + +// Runs CreateDenom logic after the charge and all denom validation has been handled. +// Made into a second function for genesis initialization. +func (k Keeper) createDenomAfterValidation(ctx context.Context, creatorAddr string, denom string) (err error) { + _, exists := k.GetDenomMetaData(ctx, denom) + if !exists { + denomMetaData := types.Metadata{ + DenomUnits: []*types.DenomUnit{{ + Denom: denom, + Exponent: 0, + }}, + Base: denom, + Name: denom, + Symbol: denom, + Display: denom, + } + + k.SetDenomMetaData(ctx, denomMetaData) + } + + authorityMetadata := types.DenomAuthorityMetadata{ + Admin: creatorAddr, + } + err = k.setAuthorityMetadata(ctx, denom, authorityMetadata) + if err != nil { + return err + } + + // TODO: do we need map creator => denom + // k.addDenomFromCreator(ctx, creatorAddr, denom) + return nil +} + +func (k Keeper) validateCreateDenom(ctx context.Context, creatorAddr string, subdenom string) (newTokenDenom string, err error) { + // Temporary check until IBC bug is sorted out + if k.HasSupply(ctx, subdenom) { + return "", fmt.Errorf("temporary error until IBC bug is sorted out, " + + "can't create subdenoms that are the same as a native denom") + } + + denom, err := types.GetTokenDenom(creatorAddr, subdenom) + if err != nil { + return "", err + } + + _, found := k.GetDenomMetaData(ctx, denom) + if found { + return "", types.ErrDenomExists + } + + return denom, nil +} + +func (k Keeper) chargeForCreateDenom(ctx context.Context, creatorAddr string) (err error) { + params := k.GetParams(ctx) + + // if DenomCreationFee is non-zero, transfer the tokens from the creator + // account to community pool + if params.DenomCreationFee != nil { + accAddr, err := sdk.AccAddressFromBech32(creatorAddr) + if err != nil { + return err + } + + communityPoolAddr := address.Module("protocolpool") + + if err := k.SendCoins(ctx, accAddr, communityPoolAddr, params.DenomCreationFee); err != nil { + return err + } + } + + // if DenomCreationGasConsume is non-zero, consume the gas + if params.DenomCreationGasConsume != 0 { + err = k.Environment.GasService.GasMeter(ctx).Consume(params.DenomCreationGasConsume, "consume denom creation gas") + if err != nil { + return err + } + } + + return nil +} diff --git a/x/bank/v2/keeper/creators.go b/x/bank/v2/keeper/creators.go new file mode 100644 index 000000000000..bf2763af4c3b --- /dev/null +++ b/x/bank/v2/keeper/creators.go @@ -0,0 +1,28 @@ +package keeper + +// import ( +// storetypes "cosmossdk.io/store/types" +// sdk "github.com/cosmos/cosmos-sdk/types" +// ) + +// func (k Keeper) addDenomFromCreator(ctx sdk.Context, creator, denom string) { +// store := k.GetCreatorPrefixStore(ctx, creator) +// store.Set([]byte(denom), []byte(denom)) +// } + +// func (k Keeper) getDenomsFromCreator(ctx sdk.Context, creator string) []string { +// store := k.GetCreatorPrefixStore(ctx, creator) + +// iterator := store.Iterator(nil, nil) +// defer iterator.Close() + +// denoms := []string{} +// for ; iterator.Valid(); iterator.Next() { +// denoms = append(denoms, string(iterator.Key())) +// } +// return denoms +// } + +// func (k Keeper) GetAllDenomsIterator(ctx sdk.Context) storetypes.Iterator { +// return k.GetCreatorsPrefixStore(ctx).Iterator(nil, nil) +// } diff --git a/x/bank/v2/keeper/genesis.go b/x/bank/v2/keeper/genesis.go index ac03c9c1331e..708061e8db98 100644 --- a/x/bank/v2/keeper/genesis.go +++ b/x/bank/v2/keeper/genesis.go @@ -44,6 +44,28 @@ func (k *Keeper) InitGenesis(ctx context.Context, state *types.GenesisState) err k.setSupply(ctx, supply) } + for _, meta := range state.DenomMetadata { + err := k.SetDenomMetaData(ctx, meta) + if err != nil { + return err + } + } + + for _, genDenom := range state.GetFactoryDenoms() { + creator, _, err := types.DeconstructDenom(genDenom.GetDenom()) + if err != nil { + return err + } + err = k.createDenomAfterValidation(ctx, creator, genDenom.GetDenom()) + if err != nil { + return err + } + err = k.setAuthorityMetadata(ctx, genDenom.GetDenom(), genDenom.GetAuthorityMetadata()) + if err != nil { + return err + } + } + return nil } diff --git a/x/bank/v2/keeper/keeper.go b/x/bank/v2/keeper/keeper.go index 833fb298ef6f..71bfde13a9e4 100644 --- a/x/bank/v2/keeper/keeper.go +++ b/x/bank/v2/keeper/keeper.go @@ -22,12 +22,14 @@ import ( type Keeper struct { appmodulev2.Environment - authority []byte - addressCodec address.Codec - schema collections.Schema - params collections.Item[types.Params] - balances *collections.IndexedMap[collections.Pair[[]byte, string], math.Int, BalancesIndexes] - supply collections.Map[string, math.Int] + authority []byte + addressCodec address.Codec + schema collections.Schema + params collections.Item[types.Params] + balances *collections.IndexedMap[collections.Pair[[]byte, string], math.Int, BalancesIndexes] + supply collections.Map[string, math.Int] + denomMetadata collections.Map[string, types.Metadata] + denomAuthority collections.Map[string, types.DenomAuthorityMetadata] sendRestriction *sendRestriction } @@ -42,6 +44,8 @@ func NewKeeper(authority []byte, addressCodec address.Codec, env appmodulev2.Env params: collections.NewItem(sb, types.ParamsKey, "params", codec.CollValue[types.Params](cdc)), balances: collections.NewIndexedMap(sb, types.BalancesPrefix, "balances", collections.PairKeyCodec(collections.BytesKey, collections.StringKey), sdk.IntValue, newBalancesIndexes(sb)), supply: collections.NewMap(sb, types.SupplyKey, "supply", collections.StringKey, sdk.IntValue), + denomMetadata: collections.NewMap(sb, types.DenomMetadataPrefix, "denom_metadata", collections.StringKey, codec.CollValue[types.Metadata](cdc)), + denomAuthority: collections.NewMap(sb, types.DenomAuthorityPrefix, "denom_authority", collections.StringKey, codec.CollValue[types.DenomAuthorityMetadata](cdc)), sendRestriction: newSendRestriction(), } @@ -138,6 +142,12 @@ func (k Keeper) GetSupply(ctx context.Context, denom string) sdk.Coin { return sdk.NewCoin(denom, amt) } +// HasSupply checks if the supply coin exists in store. +func (k Keeper) HasSupply(ctx context.Context, denom string) bool { + has, err := k.supply.Has(ctx, denom) + return has && err == nil +} + // GetBalance returns the balance of a specific denomination for a given account // by address. func (k Keeper) GetBalance(ctx context.Context, addr []byte, denom string) sdk.Coin { @@ -148,6 +158,47 @@ func (k Keeper) GetBalance(ctx context.Context, addr []byte, denom string) sdk.C return sdk.NewCoin(denom, amt) } +// GetDenomMetaData retrieves the denomination metadata. returns the metadata and true if the denom exists, +// false otherwise. +func (k Keeper) GetDenomMetaData(ctx context.Context, denom string) (types.Metadata, bool) { + m, err := k.denomMetadata.Get(ctx, denom) + return m, err == nil +} + +// HasDenomMetaData checks if the denomination metadata exists in store. +func (k Keeper) HasDenomMetaData(ctx context.Context, denom string) bool { + has, err := k.denomMetadata.Has(ctx, denom) + return has && err == nil +} + +// GetAllDenomMetaData retrieves all denominations metadata +func (k Keeper) GetAllDenomMetaData(ctx context.Context) []types.Metadata { + denomMetaData := make([]types.Metadata, 0) + k.IterateAllDenomMetaData(ctx, func(metadata types.Metadata) bool { + denomMetaData = append(denomMetaData, metadata) + return false + }) + + return denomMetaData +} + +// IterateAllDenomMetaData iterates over all the denominations metadata and +// provides the metadata to a callback. If true is returned from the +// callback, iteration is halted. +func (k Keeper) IterateAllDenomMetaData(ctx context.Context, cb func(types.Metadata) bool) { + err := k.denomMetadata.Walk(ctx, nil, func(_ string, metadata types.Metadata) (stop bool, err error) { + return cb(metadata), nil + }) + if err != nil { + panic(err) + } +} + +// SetDenomMetaData sets the denominations metadata +func (k Keeper) SetDenomMetaData(ctx context.Context, denomMetaData types.Metadata) error { + return k.denomMetadata.Set(ctx, denomMetaData.Base, denomMetaData) +} + // subUnlockedCoins removes the unlocked amt coins of the given account. // An error is returned if the resulting balance is negative. // diff --git a/x/bank/v2/keeper/params.go b/x/bank/v2/keeper/params.go new file mode 100644 index 000000000000..1df6037a6a51 --- /dev/null +++ b/x/bank/v2/keeper/params.go @@ -0,0 +1,21 @@ +package keeper + +import ( + "context" + + "cosmossdk.io/x/bank/v2/types" +) + +// GetAuthorityMetadata returns the authority metadata for a specific denom +func (k Keeper) SetParams(ctx context.Context, params types.Params) error { + return k.params.Set(ctx, params) +} + +// setAuthorityMetadata stores authority metadata for a specific denom +func (k Keeper) GetParams(ctx context.Context) types.Params { + params, err := k.params.Get(ctx) + if err != nil { + return types.Params{} + } + return params +} diff --git a/x/bank/v2/types/denoms.go b/x/bank/v2/types/denoms.go new file mode 100644 index 000000000000..658399856efa --- /dev/null +++ b/x/bank/v2/types/denoms.go @@ -0,0 +1,68 @@ +package types + +import ( + "strings" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +const ( + ModuleDenomPrefix = "factory" + // See the TokenFactory readme for a derivation of these. + // TL;DR, MaxSubdenomLength + MaxHrpLength = 60 comes from SDK max denom length = 128 + // and the structure of tokenfactory denoms. + MaxSubdenomLength = 44 + MaxHrpLength = 16 + // MaxCreatorLength = 59 + MaxHrpLength + MaxCreatorLength = 59 + MaxHrpLength +) + +// GetTokenDenom constructs a denom string for tokens created by tokenfactory +// based on an input creator address and a subdenom +// The denom constructed is factory/{creator}/{subdenom} +func GetTokenDenom(creator, subdenom string) (string, error) { + if len(subdenom) > MaxSubdenomLength { + return "", ErrSubdenomTooLong + } + if len(creator) > MaxCreatorLength { + return "", ErrCreatorTooLong + } + if strings.Contains(creator, "/") { + return "", ErrInvalidCreator + } + denom := strings.Join([]string{ModuleDenomPrefix, creator, subdenom}, "/") + return denom, sdk.ValidateDenom(denom) +} + +// DeconstructDenom takes a token denom string and verifies that it is a valid +// denom of the tokenfactory module, and is of the form `factory/{creator}/{subdenom}` +// If valid, it returns the creator address and subdenom +func DeconstructDenom(denom string) (creator string, subdenom string, err error) { + err = sdk.ValidateDenom(denom) + if err != nil { + return "", "", err + } + + strParts := strings.Split(denom, "/") + if len(strParts) < 3 { + return "", "", errorsmod.Wrapf(ErrInvalidDenom, "not enough parts of denom %s", denom) + } + + if strParts[0] != ModuleDenomPrefix { + return "", "", errorsmod.Wrapf(ErrInvalidDenom, "denom prefix is incorrect. Is: %s. Should be: %s", strParts[0], ModuleDenomPrefix) + } + + creator = strParts[1] + creatorAddr, err := sdk.AccAddressFromBech32(creator) + if err != nil { + return "", "", errorsmod.Wrapf(ErrInvalidDenom, "Invalid creator address (%s)", err) + } + + // Handle the case where a denom has a slash in its subdenom. For example, + // when we did the split, we'd turn factory/accaddr/atomderivative/sikka into ["factory", "accaddr", "atomderivative", "sikka"] + // So we have to join [2:] with a "/" as the delimiter to get back the correct subdenom which should be "atomderivative/sikka" + subdenom = strings.Join(strParts[2:], "/") + + return creatorAddr.String(), subdenom, nil +} diff --git a/x/bank/v2/types/errors.go b/x/bank/v2/types/errors.go new file mode 100644 index 000000000000..c786de87c902 --- /dev/null +++ b/x/bank/v2/types/errors.go @@ -0,0 +1,19 @@ +package types + +// DONTCOVER + +import ( + fmt "fmt" + + errorsmod "cosmossdk.io/errors" +) + +// x/tokenfactory module sentinel errors +var ( + ErrDenomExists = errorsmod.Register(ModuleName, 2, "attempting to create a denom that already exists (has bank metadata)") + ErrUnauthorized = errorsmod.Register(ModuleName, 3, "unauthorized account") + ErrInvalidDenom = errorsmod.Register(ModuleName, 4, "invalid denom") + ErrInvalidCreator = errorsmod.Register(ModuleName, 5, "invalid creator") + ErrSubdenomTooLong = errorsmod.Register(ModuleName, 8, fmt.Sprintf("subdenom too long, max length is %d bytes", MaxSubdenomLength)) + ErrCreatorTooLong = errorsmod.Register(ModuleName, 9, fmt.Sprintf("creator too long, max length is %d bytes", MaxCreatorLength)) +) \ No newline at end of file diff --git a/x/bank/v2/types/genesis.pb.go b/x/bank/v2/types/genesis.pb.go index 18e0910adb68..3de8fa3b1f66 100644 --- a/x/bank/v2/types/genesis.pb.go +++ b/x/bank/v2/types/genesis.pb.go @@ -37,7 +37,8 @@ type GenesisState struct { // balances. Otherwise, it will be used to validate that the sum of the balances equals this amount. Supply github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,3,rep,name=supply,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"supply"` // denom_metadata defines the metadata of the different coins. - DenomMetadata []Metadata `protobuf:"bytes,4,rep,name=denom_metadata,json=denomMetadata,proto3" json:"denom_metadata"` + DenomMetadata []Metadata `protobuf:"bytes,4,rep,name=denom_metadata,json=denomMetadata,proto3" json:"denom_metadata"` + FactoryDenoms []GenesisDenom `protobuf:"bytes,5,rep,name=factory_denoms,json=factoryDenoms,proto3" json:"factory_denoms"` } func (m *GenesisState) Reset() { *m = GenesisState{} } @@ -101,6 +102,13 @@ func (m *GenesisState) GetDenomMetadata() []Metadata { return nil } +func (m *GenesisState) GetFactoryDenoms() []GenesisDenom { + if m != nil { + return m.FactoryDenoms + } + return nil +} + // Balance defines an account address and balance pair used in the bank module's // genesis state. type Balance struct { @@ -143,45 +151,134 @@ func (m *Balance) XXX_DiscardUnknown() { var xxx_messageInfo_Balance proto.InternalMessageInfo +// GenesisDenom defines a tokenfactory denom that is defined within genesis +// state. The structure contains DenomAuthorityMetadata which defines the +// denom's admin. +type GenesisDenom struct { + Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"` + AuthorityMetadata DenomAuthorityMetadata `protobuf:"bytes,2,opt,name=authority_metadata,json=authorityMetadata,proto3" json:"authority_metadata"` +} + +func (m *GenesisDenom) Reset() { *m = GenesisDenom{} } +func (m *GenesisDenom) String() string { return proto.CompactTextString(m) } +func (*GenesisDenom) ProtoMessage() {} +func (*GenesisDenom) Descriptor() ([]byte, []int) { + return fileDescriptor_bc2b1daa12dfd4fc, []int{2} +} +func (m *GenesisDenom) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisDenom) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisDenom.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 *GenesisDenom) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisDenom.Merge(m, src) +} +func (m *GenesisDenom) XXX_Size() int { + return m.Size() +} +func (m *GenesisDenom) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisDenom.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisDenom proto.InternalMessageInfo + +func (m *GenesisDenom) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *GenesisDenom) GetAuthorityMetadata() DenomAuthorityMetadata { + if m != nil { + return m.AuthorityMetadata + } + return DenomAuthorityMetadata{} +} + func init() { proto.RegisterType((*GenesisState)(nil), "cosmos.bank.v2.GenesisState") proto.RegisterType((*Balance)(nil), "cosmos.bank.v2.Balance") + proto.RegisterType((*GenesisDenom)(nil), "cosmos.bank.v2.GenesisDenom") } func init() { proto.RegisterFile("cosmos/bank/v2/genesis.proto", fileDescriptor_bc2b1daa12dfd4fc) } var fileDescriptor_bc2b1daa12dfd4fc = []byte{ - // 435 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x92, 0xc1, 0xaa, 0xd3, 0x40, - 0x14, 0x86, 0x93, 0x7b, 0xb5, 0xf7, 0xde, 0xb9, 0xb5, 0x60, 0x28, 0x9a, 0x16, 0x49, 0x4a, 0x57, - 0xa5, 0xd0, 0x19, 0x1a, 0x41, 0xd0, 0x85, 0x60, 0x04, 0x05, 0x41, 0x90, 0x76, 0xe7, 0xa6, 0x4c, - 0x92, 0x21, 0x86, 0x36, 0x33, 0x21, 0x33, 0xad, 0xe6, 0x0d, 0x5c, 0xba, 0x76, 0xd5, 0xa5, 0xb8, - 0xea, 0xc2, 0x07, 0x70, 0xd9, 0x65, 0x71, 0xe5, 0x4a, 0xa5, 0x5d, 0xd4, 0xc7, 0x90, 0xcc, 0x4c, - 0x6b, 0xdb, 0x07, 0xb8, 0x9b, 0x36, 0xc9, 0x7f, 0xbe, 0x73, 0xfe, 0xff, 0x70, 0xc0, 0x83, 0x90, - 0xf1, 0x94, 0x71, 0x14, 0x60, 0x3a, 0x46, 0x33, 0x0f, 0xc5, 0x84, 0x12, 0x9e, 0x70, 0x98, 0xe5, - 0x4c, 0x30, 0xab, 0xa6, 0x54, 0x58, 0xaa, 0x70, 0xe6, 0x35, 0xeb, 0x31, 0x8b, 0x99, 0x94, 0x50, - 0xf9, 0xa4, 0xaa, 0x9a, 0x8d, 0x93, 0x1e, 0xb2, 0x5a, 0x49, 0x77, 0x71, 0x9a, 0x50, 0x86, 0xe4, - 0xaf, 0xfe, 0xe4, 0xec, 0xab, 0x39, 0x41, 0xb3, 0x7e, 0x40, 0x04, 0xee, 0xa3, 0x90, 0x25, 0xf4, - 0xb8, 0xdb, 0x48, 0x8d, 0xd1, 0x06, 0xe4, 0x4b, 0x7b, 0x75, 0x06, 0xaa, 0x2f, 0x95, 0xc1, 0xa1, - 0xc0, 0x82, 0x58, 0x8f, 0x41, 0x25, 0xc3, 0x39, 0x4e, 0xb9, 0x6d, 0xb6, 0xcc, 0xce, 0xb5, 0x77, - 0x0f, 0x1e, 0x1b, 0x86, 0x6f, 0xa4, 0xea, 0x5f, 0x2d, 0x7f, 0xb9, 0xc6, 0x97, 0xed, 0xa2, 0x6b, - 0x0e, 0x34, 0x60, 0x3d, 0x05, 0x97, 0x01, 0x9e, 0x60, 0x1a, 0x12, 0x6e, 0x9f, 0xb5, 0xce, 0x3b, - 0xd7, 0xde, 0xfd, 0x53, 0xd8, 0x57, 0xfa, 0x21, 0xbd, 0x67, 0xac, 0x02, 0x54, 0xf8, 0x34, 0xcb, - 0x26, 0x85, 0x7d, 0x2e, 0xe9, 0xc6, 0x7f, 0x9a, 0x13, 0xa8, 0x73, 0xc1, 0xe7, 0x2c, 0xa1, 0xfe, - 0x8b, 0x92, 0xff, 0xfa, 0xdb, 0xed, 0xc4, 0x89, 0x78, 0x37, 0x0d, 0x60, 0xc8, 0x52, 0x9d, 0x4b, - 0xff, 0xf5, 0x78, 0x34, 0x46, 0xa2, 0xc8, 0x08, 0x97, 0x00, 0xff, 0xbc, 0x5d, 0x74, 0xab, 0x13, - 0x12, 0xe3, 0xb0, 0x18, 0x95, 0x9b, 0xe1, 0xda, 0xba, 0x1a, 0x68, 0xbd, 0x02, 0xb5, 0x88, 0x50, - 0x96, 0x8e, 0x52, 0x22, 0x70, 0x84, 0x05, 0xb6, 0x6f, 0x49, 0x0b, 0xf6, 0x69, 0x80, 0xd7, 0x5a, - 0x3f, 0x4c, 0x70, 0x47, 0xa2, 0x3b, 0xa5, 0xfd, 0xdd, 0x04, 0x17, 0x3a, 0xa7, 0xe5, 0x81, 0x0b, - 0x1c, 0x45, 0x39, 0xe1, 0x6a, 0x9d, 0x57, 0xbe, 0xfd, 0xe3, 0x5b, 0xaf, 0xae, 0x7b, 0x3e, 0x53, - 0xca, 0x50, 0xe4, 0x09, 0x8d, 0x07, 0xbb, 0x42, 0xeb, 0x3d, 0xb8, 0x2d, 0x1d, 0xea, 0x1d, 0xde, - 0xc0, 0x16, 0xd4, 0xbc, 0x27, 0x97, 0x1f, 0xe7, 0xae, 0xf1, 0x77, 0xee, 0x1a, 0xfe, 0xa3, 0xe5, - 0xda, 0x31, 0x57, 0x6b, 0xc7, 0xfc, 0xb3, 0x76, 0xcc, 0x4f, 0x1b, 0xc7, 0x58, 0x6d, 0x1c, 0xe3, - 0xe7, 0xc6, 0x31, 0xde, 0xea, 0xe3, 0xe6, 0xd1, 0x18, 0x26, 0x0c, 0x7d, 0xd8, 0x1f, 0xa8, 0x1c, - 0x12, 0x54, 0xe4, 0x51, 0x3d, 0xfc, 0x17, 0x00, 0x00, 0xff, 0xff, 0x21, 0x11, 0xd2, 0x8b, 0x03, - 0x03, 0x00, 0x00, + // 533 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x53, 0xbf, 0x6f, 0xd3, 0x40, + 0x14, 0xb6, 0x9b, 0x1f, 0x6d, 0xaf, 0x6d, 0xa4, 0x9e, 0x22, 0x70, 0xab, 0xca, 0xa9, 0x32, 0x54, + 0x51, 0xa5, 0xda, 0xaa, 0x91, 0x90, 0xe8, 0x80, 0x54, 0x83, 0x40, 0x20, 0x21, 0xa1, 0x74, 0x83, + 0x21, 0x3a, 0xdb, 0x87, 0x6b, 0x25, 0xf6, 0x59, 0xbe, 0x4b, 0xc0, 0x7f, 0x01, 0x8c, 0xcc, 0xb0, + 0x64, 0x44, 0x4c, 0x1d, 0xf8, 0x03, 0x18, 0x3b, 0x56, 0x4c, 0x4c, 0x80, 0x92, 0xa1, 0xfd, 0x33, + 0x90, 0xdf, 0x5d, 0xdc, 0xd6, 0xec, 0x2c, 0x89, 0xef, 0xbe, 0xf7, 0xbd, 0x7b, 0xdf, 0xf7, 0xde, + 0x43, 0x3b, 0x3e, 0xe3, 0x31, 0xe3, 0xb6, 0x47, 0x92, 0xa1, 0x3d, 0x71, 0xec, 0x90, 0x26, 0x94, + 0x47, 0xdc, 0x4a, 0x33, 0x26, 0x18, 0x6e, 0x49, 0xd4, 0x2a, 0x50, 0x6b, 0xe2, 0x6c, 0xb7, 0x43, + 0x16, 0x32, 0x80, 0xec, 0xe2, 0x4b, 0x46, 0x6d, 0x6f, 0x55, 0x72, 0x40, 0xb4, 0x84, 0xf6, 0x2a, + 0x10, 0x19, 0x8b, 0x53, 0x96, 0x45, 0x22, 0x7f, 0x41, 0x05, 0x09, 0x88, 0x20, 0x2a, 0x6e, 0x93, + 0xc4, 0x51, 0xc2, 0x6c, 0xf8, 0x55, 0x57, 0x66, 0x49, 0xe5, 0xd4, 0x9e, 0x1c, 0x7a, 0x54, 0x90, + 0x43, 0xdb, 0x67, 0x51, 0x72, 0xfb, 0xd5, 0x81, 0x2c, 0x47, 0x15, 0x0a, 0x87, 0xee, 0xe7, 0x1a, + 0x5a, 0x7f, 0x2a, 0x85, 0x9c, 0x08, 0x22, 0x28, 0x7e, 0x80, 0x9a, 0x29, 0xc9, 0x48, 0xcc, 0x0d, + 0x7d, 0x57, 0xef, 0xad, 0x39, 0x77, 0xac, 0xdb, 0xc2, 0xac, 0x97, 0x80, 0xba, 0xab, 0xe7, 0xbf, + 0x3a, 0xda, 0x97, 0xcb, 0xb3, 0x7d, 0xbd, 0xaf, 0x08, 0xf8, 0x21, 0x5a, 0xf1, 0xc8, 0x88, 0x24, + 0x3e, 0xe5, 0xc6, 0xd2, 0x6e, 0xad, 0xb7, 0xe6, 0xdc, 0xad, 0x92, 0x5d, 0x89, 0xdf, 0x64, 0x97, + 0x1c, 0x9c, 0xa3, 0x26, 0x1f, 0xa7, 0xe9, 0x28, 0x37, 0x6a, 0xc0, 0xde, 0xba, 0x66, 0x73, 0x6a, + 0x29, 0x5d, 0xd6, 0x23, 0x16, 0x25, 0xee, 0x93, 0x82, 0xff, 0xf5, 0x77, 0xa7, 0x17, 0x46, 0xe2, + 0x74, 0xec, 0x59, 0x3e, 0x8b, 0x95, 0x2e, 0xf5, 0x77, 0xc0, 0x83, 0xa1, 0x2d, 0xf2, 0x94, 0x72, + 0x20, 0xf0, 0x4f, 0x97, 0x67, 0xfb, 0xeb, 0x23, 0x1a, 0x12, 0x3f, 0x1f, 0x14, 0xce, 0x70, 0x55, + 0xba, 0x7c, 0x10, 0x3f, 0x47, 0xad, 0x80, 0x26, 0x2c, 0x1e, 0xc4, 0xca, 0x6c, 0xa3, 0x0e, 0x25, + 0x18, 0x55, 0x01, 0x8b, 0x66, 0xdc, 0x54, 0xb0, 0x01, 0xd4, 0x05, 0x82, 0x9f, 0xa1, 0xd6, 0x1b, + 0xe2, 0x0b, 0x96, 0xe5, 0x03, 0x00, 0xb8, 0xd1, 0x80, 0x5c, 0x3b, 0xd5, 0x5c, 0xca, 0xf7, 0xc7, + 0x45, 0x90, 0x5b, 0x2f, 0xf2, 0xf5, 0x37, 0x14, 0x13, 0xee, 0x78, 0xf7, 0xbb, 0x8e, 0x96, 0x95, + 0x65, 0xd8, 0x41, 0xcb, 0x24, 0x08, 0x32, 0xca, 0x65, 0x67, 0x56, 0x5d, 0xe3, 0xc7, 0xb7, 0x83, + 0xb6, 0x4a, 0x79, 0x2c, 0x91, 0x13, 0x91, 0x45, 0x49, 0xd8, 0x5f, 0x04, 0xe2, 0xb7, 0xa8, 0x01, + 0x62, 0x55, 0x3b, 0xfe, 0x83, 0xa1, 0xf2, 0xbd, 0xa3, 0x95, 0x0f, 0xd3, 0x8e, 0x76, 0x35, 0xed, + 0x68, 0xdd, 0xf7, 0x7a, 0x39, 0x60, 0x20, 0x0a, 0xb7, 0x51, 0x03, 0x6c, 0x91, 0x2a, 0xfa, 0xf2, + 0x80, 0x5f, 0x23, 0x5c, 0x0e, 0xfc, 0x75, 0x13, 0x96, 0x60, 0x04, 0xf7, 0xaa, 0xc6, 0x41, 0xa2, + 0xe3, 0xea, 0x7e, 0x28, 0x0b, 0x37, 0xff, 0x59, 0x9c, 0xa3, 0xfa, 0xd5, 0xb4, 0xa3, 0xbb, 0xf7, + 0xcf, 0x67, 0xa6, 0x7e, 0x31, 0x33, 0xf5, 0x3f, 0x33, 0x53, 0xff, 0x38, 0x37, 0xb5, 0x8b, 0xb9, + 0xa9, 0xfd, 0x9c, 0x9b, 0xda, 0x2b, 0xb5, 0xd9, 0x3c, 0x18, 0x5a, 0x11, 0xb3, 0xdf, 0x95, 0x2b, + 0x08, 0x72, 0xbd, 0x26, 0x6c, 0xca, 0xbd, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x0f, 0xf7, + 0x43, 0x00, 0x04, 0x00, 0x00, } +func (this *GenesisDenom) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*GenesisDenom) + if !ok { + that2, ok := that.(GenesisDenom) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Denom != that1.Denom { + return false + } + if !this.AuthorityMetadata.Equal(&that1.AuthorityMetadata) { + return false + } + return true +} func (m *GenesisState) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -202,6 +299,20 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.FactoryDenoms) > 0 { + for iNdEx := len(m.FactoryDenoms) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.FactoryDenoms[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + } if len(m.DenomMetadata) > 0 { for iNdEx := len(m.DenomMetadata) - 1; iNdEx >= 0; iNdEx-- { { @@ -301,6 +412,46 @@ func (m *Balance) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *GenesisDenom) 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 *GenesisDenom) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisDenom) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.AuthorityMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { offset -= sovGenesis(v) base := offset @@ -338,6 +489,12 @@ func (m *GenesisState) Size() (n int) { n += 1 + l + sovGenesis(uint64(l)) } } + if len(m.FactoryDenoms) > 0 { + for _, e := range m.FactoryDenoms { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } return n } @@ -360,6 +517,21 @@ func (m *Balance) Size() (n int) { return n } +func (m *GenesisDenom) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = m.AuthorityMetadata.Size() + n += 1 + l + sovGenesis(uint64(l)) + return n +} + func sovGenesis(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -530,6 +702,40 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FactoryDenoms", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FactoryDenoms = append(m.FactoryDenoms, GenesisDenom{}) + if err := m.FactoryDenoms[len(m.FactoryDenoms)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenesis(dAtA[iNdEx:]) @@ -667,6 +873,121 @@ func (m *Balance) Unmarshal(dAtA []byte) error { } return nil } +func (m *GenesisDenom) 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 ErrIntOverflowGenesis + } + 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: GenesisDenom: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisDenom: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + 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 ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthorityMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.AuthorityMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipGenesis(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/bank/v2/types/keys.go b/x/bank/v2/types/keys.go index 79eff8ae1c3e..6e7051a4535b 100644 --- a/x/bank/v2/types/keys.go +++ b/x/bank/v2/types/keys.go @@ -31,4 +31,8 @@ var ( DenomAddressPrefix = collections.NewPrefix(4) SupplyKey = collections.NewPrefix(5) + + DenomMetadataPrefix = collections.NewPrefix(6) + + DenomAuthorityPrefix = collections.NewPrefix(7) ) From e3794b23ce75a916389322c2c4e0faaaab9a1a7e Mon Sep 17 00:00:00 2001 From: Hieu Vu <72878483+hieuvubk@users.noreply.github.com> Date: Tue, 15 Oct 2024 12:39:51 +0700 Subject: [PATCH 03/35] add handlers --- x/bank/proto/cosmos/bank/v2/tx.proto | 27 + x/bank/v2/keeper/handlers.go | 33 + x/bank/v2/module.go | 2 + x/bank/v2/types/tx.pb.go | 895 +++++++++++++++++++++++++-- 4 files changed, 907 insertions(+), 50 deletions(-) diff --git a/x/bank/proto/cosmos/bank/v2/tx.proto b/x/bank/proto/cosmos/bank/v2/tx.proto index 55eab2a9ffd5..d9605daf4879 100644 --- a/x/bank/proto/cosmos/bank/v2/tx.proto +++ b/x/bank/proto/cosmos/bank/v2/tx.proto @@ -44,6 +44,33 @@ message MsgSend { // MsgSendResponse defines the response structure for executing a MsgSend message. message MsgSendResponse {} +// MsgCreateDenom represents a message to create new denom. +message MsgCreateDenom { + option (cosmos.msg.v1.signer) = "sender"; + option (amino.name) = "cosmos-sdk/x/bank/v2/MsgCreateDenom"; + + string sender = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string subdenom = 2; +} + +// MsgCreateDenomResponse defines the response structure for executing a MsgCreateDenom message. +message MsgCreateDenomResponse { + string new_token_denom = 1; +} + +// MsgChangeAdmin represents a message to change admin of denom. +message MsgChangeAdmin { + option (cosmos.msg.v1.signer) = "sender"; + option (amino.name) = "cosmos-sdk/x/bank/v2/MsgChangeAdmin"; + + string sender = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string denom = 2; + string new_admin = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// MsgChangeAdminResponse defines the response structure for executing a MsgChangeAdmin message. +message MsgChangeAdminResponse {} + // MsgMint is the Msg/Mint request type. message MsgMint { option (cosmos.msg.v1.signer) = "authority"; diff --git a/x/bank/v2/keeper/handlers.go b/x/bank/v2/keeper/handlers.go index e998aceecb72..c848c0ee5193 100644 --- a/x/bank/v2/keeper/handlers.go +++ b/x/bank/v2/keeper/handlers.go @@ -52,6 +52,39 @@ func (h handlers) MsgUpdateParams(ctx context.Context, msg *types.MsgUpdateParam return &types.MsgUpdateParamsResponse{}, nil } +func (h handlers) MsgCreateDenom(goCtx context.Context, msg *types.MsgCreateDenom) (*types.MsgCreateDenomResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + denom, err := h.Keeper.CreateDenom(ctx, msg.Sender, msg.Subdenom) + if err != nil { + return nil, err + } + + return &types.MsgCreateDenomResponse{ + NewTokenDenom: denom, + }, nil +} + +func (h handlers) MsgChangeAdmin(goCtx context.Context, msg *types.MsgChangeAdmin) (*types.MsgChangeAdminResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + authorityMetadata, err := h.Keeper.GetAuthorityMetadata(ctx, msg.Denom) + if err != nil { + return nil, err + } + + if msg.Sender != authorityMetadata.GetAdmin() { + return nil, types.ErrUnauthorized + } + + err = h.Keeper.setAdmin(ctx, msg.Denom, msg.NewAdmin) + if err != nil { + return nil, err + } + + return &types.MsgChangeAdminResponse{}, nil +} + func (h handlers) MsgSend(ctx context.Context, msg *types.MsgSend) (*types.MsgSendResponse, error) { var ( from, to []byte diff --git a/x/bank/v2/module.go b/x/bank/v2/module.go index 99d5ab2ab7d4..8d44c81fc488 100644 --- a/x/bank/v2/module.go +++ b/x/bank/v2/module.go @@ -98,6 +98,8 @@ func (am AppModule) RegisterMsgHandlers(router appmodulev2.MsgRouter) { appmodulev2.RegisterMsgHandler(router, handlers.MsgUpdateParams) appmodulev2.RegisterMsgHandler(router, handlers.MsgSend) appmodulev2.RegisterMsgHandler(router, handlers.MsgMint) + appmodulev2.RegisterMsgHandler(router, handlers.MsgCreateDenom) + appmodulev2.RegisterMsgHandler(router, handlers.MsgChangeAdmin) } // RegisterQueryHandlers registers the query handlers for the bank module. diff --git a/x/bank/v2/types/tx.pb.go b/x/bank/v2/types/tx.pb.go index 3867bdf64c84..d9a931debafc 100644 --- a/x/bank/v2/types/tx.pb.go +++ b/x/bank/v2/types/tx.pb.go @@ -219,6 +219,202 @@ func (m *MsgSendResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgSendResponse proto.InternalMessageInfo +// MsgCreateDenom represents a message to create new denom. +type MsgCreateDenom struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + Subdenom string `protobuf:"bytes,2,opt,name=subdenom,proto3" json:"subdenom,omitempty"` +} + +func (m *MsgCreateDenom) Reset() { *m = MsgCreateDenom{} } +func (m *MsgCreateDenom) String() string { return proto.CompactTextString(m) } +func (*MsgCreateDenom) ProtoMessage() {} +func (*MsgCreateDenom) Descriptor() ([]byte, []int) { + return fileDescriptor_14123aa47d73c00a, []int{4} +} +func (m *MsgCreateDenom) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCreateDenom) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCreateDenom.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 *MsgCreateDenom) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCreateDenom.Merge(m, src) +} +func (m *MsgCreateDenom) XXX_Size() int { + return m.Size() +} +func (m *MsgCreateDenom) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCreateDenom.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCreateDenom proto.InternalMessageInfo + +func (m *MsgCreateDenom) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *MsgCreateDenom) GetSubdenom() string { + if m != nil { + return m.Subdenom + } + return "" +} + +// MsgCreateDenomResponse defines the response structure for executing a MsgCreateDenom message. +type MsgCreateDenomResponse struct { + NewTokenDenom string `protobuf:"bytes,1,opt,name=new_token_denom,json=newTokenDenom,proto3" json:"new_token_denom,omitempty"` +} + +func (m *MsgCreateDenomResponse) Reset() { *m = MsgCreateDenomResponse{} } +func (m *MsgCreateDenomResponse) String() string { return proto.CompactTextString(m) } +func (*MsgCreateDenomResponse) ProtoMessage() {} +func (*MsgCreateDenomResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_14123aa47d73c00a, []int{5} +} +func (m *MsgCreateDenomResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCreateDenomResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCreateDenomResponse.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 *MsgCreateDenomResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCreateDenomResponse.Merge(m, src) +} +func (m *MsgCreateDenomResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgCreateDenomResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCreateDenomResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCreateDenomResponse proto.InternalMessageInfo + +func (m *MsgCreateDenomResponse) GetNewTokenDenom() string { + if m != nil { + return m.NewTokenDenom + } + return "" +} + +// MsgChangeAdmin represents a message to change admin of denom. +type MsgChangeAdmin struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` + NewAdmin string `protobuf:"bytes,3,opt,name=new_admin,json=newAdmin,proto3" json:"new_admin,omitempty"` +} + +func (m *MsgChangeAdmin) Reset() { *m = MsgChangeAdmin{} } +func (m *MsgChangeAdmin) String() string { return proto.CompactTextString(m) } +func (*MsgChangeAdmin) ProtoMessage() {} +func (*MsgChangeAdmin) Descriptor() ([]byte, []int) { + return fileDescriptor_14123aa47d73c00a, []int{6} +} +func (m *MsgChangeAdmin) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgChangeAdmin) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgChangeAdmin.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 *MsgChangeAdmin) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgChangeAdmin.Merge(m, src) +} +func (m *MsgChangeAdmin) XXX_Size() int { + return m.Size() +} +func (m *MsgChangeAdmin) XXX_DiscardUnknown() { + xxx_messageInfo_MsgChangeAdmin.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgChangeAdmin proto.InternalMessageInfo + +func (m *MsgChangeAdmin) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *MsgChangeAdmin) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *MsgChangeAdmin) GetNewAdmin() string { + if m != nil { + return m.NewAdmin + } + return "" +} + +// MsgChangeAdminResponse defines the response structure for executing a MsgChangeAdmin message. +type MsgChangeAdminResponse struct { +} + +func (m *MsgChangeAdminResponse) Reset() { *m = MsgChangeAdminResponse{} } +func (m *MsgChangeAdminResponse) String() string { return proto.CompactTextString(m) } +func (*MsgChangeAdminResponse) ProtoMessage() {} +func (*MsgChangeAdminResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_14123aa47d73c00a, []int{7} +} +func (m *MsgChangeAdminResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgChangeAdminResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgChangeAdminResponse.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 *MsgChangeAdminResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgChangeAdminResponse.Merge(m, src) +} +func (m *MsgChangeAdminResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgChangeAdminResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgChangeAdminResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgChangeAdminResponse proto.InternalMessageInfo + // MsgMint is the Msg/Mint request type. type MsgMint struct { // authority is the address that controls the module (defaults to x/gov unless overwritten). @@ -231,7 +427,7 @@ func (m *MsgMint) Reset() { *m = MsgMint{} } func (m *MsgMint) String() string { return proto.CompactTextString(m) } func (*MsgMint) ProtoMessage() {} func (*MsgMint) Descriptor() ([]byte, []int) { - return fileDescriptor_14123aa47d73c00a, []int{4} + return fileDescriptor_14123aa47d73c00a, []int{8} } func (m *MsgMint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -289,7 +485,7 @@ func (m *MsgMintResponse) Reset() { *m = MsgMintResponse{} } func (m *MsgMintResponse) String() string { return proto.CompactTextString(m) } func (*MsgMintResponse) ProtoMessage() {} func (*MsgMintResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_14123aa47d73c00a, []int{5} + return fileDescriptor_14123aa47d73c00a, []int{9} } func (m *MsgMintResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -323,6 +519,10 @@ func init() { proto.RegisterType((*MsgUpdateParamsResponse)(nil), "cosmos.bank.v2.MsgUpdateParamsResponse") proto.RegisterType((*MsgSend)(nil), "cosmos.bank.v2.MsgSend") proto.RegisterType((*MsgSendResponse)(nil), "cosmos.bank.v2.MsgSendResponse") + proto.RegisterType((*MsgCreateDenom)(nil), "cosmos.bank.v2.MsgCreateDenom") + proto.RegisterType((*MsgCreateDenomResponse)(nil), "cosmos.bank.v2.MsgCreateDenomResponse") + proto.RegisterType((*MsgChangeAdmin)(nil), "cosmos.bank.v2.MsgChangeAdmin") + proto.RegisterType((*MsgChangeAdminResponse)(nil), "cosmos.bank.v2.MsgChangeAdminResponse") proto.RegisterType((*MsgMint)(nil), "cosmos.bank.v2.MsgMint") proto.RegisterType((*MsgMintResponse)(nil), "cosmos.bank.v2.MsgMintResponse") } @@ -330,38 +530,47 @@ func init() { func init() { proto.RegisterFile("cosmos/bank/v2/tx.proto", fileDescriptor_14123aa47d73c00a) } var fileDescriptor_14123aa47d73c00a = []byte{ - // 492 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x93, 0xb1, 0x8b, 0x13, 0x41, - 0x14, 0xc6, 0xb3, 0x39, 0x88, 0x64, 0x72, 0x28, 0xb7, 0x1c, 0x5e, 0x72, 0xc8, 0x5e, 0x08, 0x16, - 0x21, 0x70, 0x33, 0x64, 0x85, 0x3b, 0x3c, 0x2b, 0x23, 0xd8, 0x05, 0x24, 0x87, 0x8d, 0x4d, 0x98, - 0x64, 0xc7, 0xbd, 0x25, 0xee, 0xbc, 0x65, 0xdf, 0x24, 0x5c, 0x5a, 0x4b, 0x2b, 0x6b, 0xff, 0x00, - 0x11, 0x0b, 0x49, 0x61, 0x6b, 0x7f, 0xe5, 0x61, 0x65, 0xa5, 0x92, 0x14, 0xf9, 0x37, 0x64, 0x76, - 0x26, 0xc9, 0x25, 0x72, 0x04, 0xec, 0x6c, 0x92, 0x61, 0xbe, 0xf7, 0x7d, 0xf3, 0xe6, 0x37, 0x6f, - 0xc9, 0x41, 0x1f, 0x30, 0x06, 0x64, 0x3d, 0x2e, 0x07, 0x6c, 0xe4, 0x33, 0x75, 0x49, 0x93, 0x14, - 0x14, 0xb8, 0x77, 0x8d, 0x40, 0xb5, 0x40, 0x47, 0xfe, 0xe1, 0x7e, 0x08, 0x21, 0x64, 0x12, 0xd3, - 0x2b, 0x53, 0x75, 0x58, 0xd9, 0xb0, 0x67, 0xd5, 0x6b, 0x52, 0xd7, 0x78, 0x6c, 0x9a, 0x91, 0x16, - 0x87, 0xc6, 0x18, 0xb2, 0x51, 0x53, 0xff, 0x59, 0x61, 0x8f, 0xc7, 0x91, 0x04, 0x96, 0xfd, 0xda, - 0x2d, 0x6f, 0x79, 0x02, 0x0a, 0x36, 0x6a, 0xf6, 0x84, 0xe2, 0x4d, 0xd6, 0x87, 0x48, 0x1a, 0xbd, - 0xf6, 0xcd, 0x21, 0xf7, 0xda, 0x18, 0xbe, 0x4c, 0x02, 0xae, 0xc4, 0x0b, 0x9e, 0xf2, 0x18, 0xdd, - 0x13, 0x52, 0xe4, 0x43, 0x75, 0x01, 0x69, 0xa4, 0xc6, 0x65, 0xa7, 0xea, 0xd4, 0x8b, 0xad, 0xf2, - 0xf7, 0xaf, 0xc7, 0xfb, 0xb6, 0x89, 0xa7, 0x41, 0x90, 0x0a, 0xc4, 0x73, 0x95, 0x46, 0x32, 0xec, - 0xac, 0x4a, 0xdd, 0xc7, 0xa4, 0x90, 0x64, 0x09, 0xe5, 0x7c, 0xd5, 0xa9, 0x97, 0xfc, 0xfb, 0x74, - 0x1d, 0x02, 0x35, 0xf9, 0xad, 0xe2, 0xd5, 0xcf, 0xa3, 0xdc, 0xa7, 0xf9, 0xa4, 0xe1, 0x74, 0xac, - 0xe1, 0xec, 0xf4, 0xed, 0x7c, 0xd2, 0x58, 0x45, 0xbd, 0x9b, 0x4f, 0x1a, 0x0f, 0x8d, 0xf9, 0x18, - 0x83, 0x01, 0xbb, 0x5c, 0x12, 0xda, 0xe8, 0xb5, 0x56, 0x21, 0x07, 0x1b, 0x5b, 0x1d, 0x81, 0x09, - 0x48, 0x14, 0xb5, 0x2f, 0x79, 0x72, 0xa7, 0x8d, 0xe1, 0xb9, 0x90, 0x81, 0xfb, 0x84, 0xec, 0xbe, - 0x4e, 0x21, 0xee, 0x72, 0xd3, 0xfb, 0xd6, 0x5b, 0x95, 0x74, 0xb5, 0xdd, 0x72, 0x4f, 0x09, 0x51, - 0xb0, 0xb4, 0xe6, 0xb7, 0x01, 0x51, 0xb0, 0x30, 0x8e, 0x49, 0x81, 0xc7, 0x30, 0x94, 0xaa, 0xbc, - 0x53, 0xdd, 0xa9, 0x97, 0xfc, 0xca, 0x0a, 0x08, 0x0a, 0x6a, 0x5f, 0x83, 0x3e, 0x83, 0x48, 0xb6, - 0x9e, 0x6b, 0x26, 0x9f, 0x7f, 0x1d, 0xd5, 0xc3, 0x48, 0x5d, 0x0c, 0x7b, 0xb4, 0x0f, 0xb1, 0x7d, - 0x74, 0x76, 0x83, 0x83, 0x1a, 0x27, 0x02, 0x33, 0x03, 0x7e, 0x98, 0x4f, 0x1a, 0xbb, 0x6f, 0x44, - 0xc8, 0xfb, 0xe3, 0xae, 0x7e, 0x4f, 0xb4, 0x40, 0xcd, 0x81, 0x67, 0xbe, 0x06, 0xba, 0x76, 0x67, - 0xcd, 0xf4, 0xc1, 0x6d, 0x4c, 0x35, 0xa4, 0xda, 0x5e, 0x36, 0x0a, 0x7a, 0xb9, 0x64, 0xf8, 0xd1, - 0x30, 0x6c, 0x47, 0x52, 0xfd, 0xf3, 0x58, 0xfc, 0x8f, 0xf8, 0xd8, 0xdf, 0xf3, 0x78, 0x2b, 0x3b, - 0x0d, 0xc7, 0xb2, 0xd3, 0xcb, 0x05, 0xbb, 0xd6, 0xc9, 0xd5, 0xd4, 0x73, 0xae, 0xa7, 0x9e, 0xf3, - 0x7b, 0xea, 0x39, 0xef, 0x67, 0x5e, 0xee, 0x7a, 0xe6, 0xe5, 0x7e, 0xcc, 0xbc, 0xdc, 0x2b, 0x1b, - 0x85, 0xc1, 0x80, 0x46, 0x70, 0x23, 0x2c, 0xeb, 0xaf, 0x57, 0xc8, 0xbe, 0xcc, 0x47, 0x7f, 0x02, - 0x00, 0x00, 0xff, 0xff, 0x9a, 0xff, 0x7c, 0x62, 0x5c, 0x04, 0x00, 0x00, + // 629 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x94, 0x4f, 0x6f, 0x12, 0x4f, + 0x18, 0xc7, 0xd9, 0x92, 0x1f, 0xbf, 0x32, 0xd4, 0x36, 0xdd, 0x90, 0x76, 0x21, 0x66, 0x4b, 0x56, + 0x63, 0x08, 0x49, 0x77, 0x84, 0xc6, 0x36, 0xe2, 0xc5, 0x52, 0xe3, 0x8d, 0xc4, 0x50, 0xbd, 0x78, + 0x21, 0x03, 0x3b, 0x2e, 0x1b, 0xdc, 0x19, 0xb2, 0x33, 0x40, 0xb9, 0x7a, 0xf4, 0x64, 0xe2, 0xcd, + 0x17, 0x60, 0x8c, 0x07, 0xc3, 0xc1, 0xab, 0x37, 0x0f, 0x3d, 0x36, 0x9e, 0x3c, 0xa9, 0x81, 0x03, + 0x6f, 0xc3, 0xcc, 0xce, 0xb0, 0xfc, 0x31, 0x84, 0xd8, 0x9b, 0x17, 0x98, 0x7d, 0xfe, 0x7e, 0x9f, + 0xcf, 0x3c, 0xbb, 0x60, 0xbf, 0x49, 0x99, 0x4f, 0x19, 0x6c, 0x20, 0xd2, 0x86, 0xbd, 0x12, 0xe4, + 0x17, 0x76, 0x27, 0xa0, 0x9c, 0xea, 0xdb, 0xd2, 0x61, 0x0b, 0x87, 0xdd, 0x2b, 0x65, 0xd3, 0x2e, + 0x75, 0x69, 0xe8, 0x82, 0xe2, 0x24, 0xa3, 0xb2, 0x99, 0xa5, 0xf4, 0x30, 0x7a, 0xc1, 0x55, 0x97, + 0x39, 0xaa, 0x9a, 0x74, 0x4d, 0x9b, 0xfa, 0xcc, 0x85, 0xbd, 0xa2, 0xf8, 0x53, 0x8e, 0x5d, 0xe4, + 0x7b, 0x84, 0xc2, 0xf0, 0x57, 0x99, 0xcc, 0xa8, 0x03, 0xc3, 0xb0, 0x57, 0x6c, 0x60, 0x8e, 0x8a, + 0xb0, 0x49, 0x3d, 0x22, 0xfd, 0xd6, 0x17, 0x0d, 0xec, 0x54, 0x99, 0xfb, 0xac, 0xe3, 0x20, 0x8e, + 0x9f, 0xa0, 0x00, 0xf9, 0x4c, 0x3f, 0x06, 0x49, 0xd4, 0xe5, 0x2d, 0x1a, 0x78, 0x7c, 0x60, 0x68, + 0x39, 0x2d, 0x9f, 0xac, 0x18, 0xdf, 0x3e, 0x1f, 0xa6, 0x95, 0x88, 0x53, 0xc7, 0x09, 0x30, 0x63, + 0xe7, 0x3c, 0xf0, 0x88, 0x5b, 0x9b, 0x85, 0xea, 0xf7, 0x41, 0xa2, 0x13, 0x56, 0x30, 0x36, 0x72, + 0x5a, 0x3e, 0x55, 0xda, 0xb3, 0x17, 0x21, 0xd8, 0xb2, 0x7e, 0x25, 0x79, 0xf9, 0xe3, 0x20, 0xf6, + 0x61, 0x32, 0x2c, 0x68, 0x35, 0x95, 0x50, 0x3e, 0x79, 0x35, 0x19, 0x16, 0x66, 0xa5, 0x5e, 0x4f, + 0x86, 0x85, 0xdb, 0x32, 0xf9, 0x90, 0x39, 0x6d, 0x78, 0x11, 0x11, 0x5a, 0xd2, 0x6a, 0x65, 0xc0, + 0xfe, 0x92, 0xa9, 0x86, 0x59, 0x87, 0x12, 0x86, 0xad, 0x4f, 0x1b, 0xe0, 0xff, 0x2a, 0x73, 0xcf, + 0x31, 0x71, 0xf4, 0x07, 0x60, 0xeb, 0x45, 0x40, 0xfd, 0x3a, 0x92, 0xda, 0xd7, 0x4e, 0x95, 0x12, + 0xd1, 0xca, 0xa4, 0x9f, 0x00, 0xc0, 0x69, 0x94, 0xba, 0xb1, 0x0e, 0x08, 0xa7, 0xd3, 0xc4, 0x01, + 0x48, 0x20, 0x9f, 0x76, 0x09, 0x37, 0xe2, 0xb9, 0x78, 0x3e, 0x55, 0xca, 0xcc, 0x80, 0x30, 0x6c, + 0xab, 0xdb, 0xb0, 0xcf, 0xa8, 0x47, 0x2a, 0x8f, 0x05, 0x93, 0x8f, 0x3f, 0x0f, 0xf2, 0xae, 0xc7, + 0x5b, 0xdd, 0x86, 0xdd, 0xa4, 0xbe, 0xba, 0x74, 0x38, 0xc7, 0x81, 0x0f, 0x3a, 0x98, 0x85, 0x09, + 0xec, 0xdd, 0x64, 0x58, 0xd8, 0x7a, 0x89, 0x5d, 0xd4, 0x1c, 0xd4, 0xc5, 0x7d, 0x32, 0x05, 0x54, + 0x36, 0x2c, 0x97, 0x04, 0xd0, 0x85, 0x99, 0x05, 0xd3, 0x9b, 0xab, 0x98, 0x0a, 0x48, 0xd6, 0x6e, + 0xb8, 0x0a, 0xe2, 0x18, 0x31, 0x7c, 0xab, 0x81, 0xed, 0x2a, 0x73, 0xcf, 0x02, 0x8c, 0x38, 0x7e, + 0x84, 0x09, 0xf5, 0xf5, 0xbb, 0x20, 0xc1, 0x30, 0x71, 0x70, 0xb0, 0x16, 0xa2, 0x8a, 0xd3, 0xb3, + 0x60, 0x93, 0x75, 0x1b, 0x8e, 0xc8, 0x96, 0xf4, 0x6a, 0xd1, 0x73, 0xf9, 0x48, 0xe8, 0x54, 0x81, + 0x42, 0xe1, 0xad, 0x55, 0x0a, 0xe7, 0x24, 0x58, 0x0f, 0xc1, 0xde, 0xa2, 0x65, 0xaa, 0x57, 0xbf, + 0x03, 0x76, 0x08, 0xee, 0xd7, 0x39, 0x6d, 0x63, 0x52, 0x97, 0x1d, 0x43, 0x95, 0xb5, 0x1b, 0x04, + 0xf7, 0x9f, 0x0a, 0xab, 0xac, 0xf0, 0x55, 0xcd, 0xd5, 0x42, 0xc4, 0xc5, 0xa7, 0x8e, 0xef, 0x91, + 0x6b, 0xcc, 0x95, 0x06, 0xff, 0xcd, 0x0f, 0x25, 0x1f, 0xf4, 0x7b, 0x20, 0x29, 0x24, 0x20, 0x51, + 0xd4, 0x88, 0xaf, 0x29, 0xb5, 0x49, 0x70, 0x3f, 0x6c, 0xff, 0x17, 0x20, 0x66, 0x9a, 0x2d, 0x43, + 0x82, 0x98, 0x59, 0xa2, 0x8b, 0x7b, 0x2f, 0x97, 0xbf, 0xea, 0x11, 0x7e, 0xed, 0xf7, 0xf9, 0x5f, + 0xdc, 0x7b, 0xf8, 0xe7, 0x87, 0x64, 0xe5, 0xd2, 0x0b, 0x38, 0x6a, 0xe9, 0xc5, 0x71, 0xca, 0xae, + 0x72, 0x7c, 0x39, 0x32, 0xb5, 0xab, 0x91, 0xa9, 0xfd, 0x1a, 0x99, 0xda, 0x9b, 0xb1, 0x19, 0xbb, + 0x1a, 0x9b, 0xb1, 0xef, 0x63, 0x33, 0xf6, 0x5c, 0x95, 0x62, 0x4e, 0xdb, 0xf6, 0xe8, 0x5c, 0xb1, + 0x50, 0x5f, 0x23, 0x11, 0x7e, 0x52, 0x8f, 0x7e, 0x07, 0x00, 0x00, 0xff, 0xff, 0x89, 0xb8, 0xc3, + 0x03, 0x15, 0x06, 0x00, 0x00, } func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) { @@ -501,6 +710,140 @@ func (m *MsgSendResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *MsgCreateDenom) 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 *MsgCreateDenom) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCreateDenom) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Subdenom) > 0 { + i -= len(m.Subdenom) + copy(dAtA[i:], m.Subdenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.Subdenom))) + i-- + dAtA[i] = 0x12 + } + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintTx(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgCreateDenomResponse) 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 *MsgCreateDenomResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCreateDenomResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.NewTokenDenom) > 0 { + i -= len(m.NewTokenDenom) + copy(dAtA[i:], m.NewTokenDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.NewTokenDenom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgChangeAdmin) 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 *MsgChangeAdmin) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgChangeAdmin) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.NewAdmin) > 0 { + i -= len(m.NewAdmin) + copy(dAtA[i:], m.NewAdmin) + i = encodeVarintTx(dAtA, i, uint64(len(m.NewAdmin))) + i-- + dAtA[i] = 0x1a + } + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintTx(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x12 + } + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintTx(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgChangeAdminResponse) 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 *MsgChangeAdminResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgChangeAdminResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + func (m *MsgMint) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -642,46 +985,106 @@ func (m *MsgSendResponse) Size() (n int) { return n } -func (m *MsgMint) Size() (n int) { +func (m *MsgCreateDenom) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.Authority) + l = len(m.Sender) if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.ToAddress) + l = len(m.Subdenom) 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 *MsgMintResponse) Size() (n int) { +func (m *MsgCreateDenomResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l + l = len(m.NewTokenDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } return n } -func sovTx(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 +func (m *MsgChangeAdmin) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.NewAdmin) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n } -func sozTx(x uint64) (n int) { - return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) + +func (m *MsgChangeAdminResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n } -func (m *MsgUpdateParams) Unmarshal(dAtA []byte) error { - l := len(dAtA) + +func (m *MsgMint) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = 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 *MsgMintResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgUpdateParams) Unmarshal(dAtA []byte) error { + l := len(dAtA) iNdEx := 0 for iNdEx < l { preIndex := iNdEx @@ -1043,6 +1446,398 @@ func (m *MsgSendResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgCreateDenom) 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: MsgCreateDenom: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCreateDenom: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sender", 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.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Subdenom", 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.Subdenom = string(dAtA[iNdEx:postIndex]) + 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 *MsgCreateDenomResponse) 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: MsgCreateDenomResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCreateDenomResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NewTokenDenom", 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.NewTokenDenom = string(dAtA[iNdEx:postIndex]) + 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 *MsgChangeAdmin) 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: MsgChangeAdmin: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgChangeAdmin: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sender", 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.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", 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.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NewAdmin", 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.NewAdmin = string(dAtA[iNdEx:postIndex]) + 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 *MsgChangeAdminResponse) 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: MsgChangeAdminResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgChangeAdminResponse: 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 *MsgMint) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 From 1ed5ce2044bfd0dd856aea72be7ab75bc8164744 Mon Sep 17 00:00:00 2001 From: Hieu Vu <72878483+hieuvubk@users.noreply.github.com> Date: Tue, 15 Oct 2024 12:43:53 +0700 Subject: [PATCH 04/35] default params & validate --- x/bank/v2/types/params.go | 45 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/x/bank/v2/types/params.go b/x/bank/v2/types/params.go index 0960d6670a87..a3facbe62d3d 100644 --- a/x/bank/v2/types/params.go +++ b/x/bank/v2/types/params.go @@ -1,16 +1,55 @@ package types +import ( + fmt "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + // NewParams creates a new parameter configuration for the bank/v2 module -func NewParams() Params { - return Params{} +func NewParams(denomCreationFee sdk.Coins, gasConsume uint64) Params { + return Params{ + DenomCreationFee: denomCreationFee, + DenomCreationGasConsume: gasConsume, + } } // DefaultParams is the default parameter configuration for the bank/v2 module func DefaultParams() Params { - return NewParams() + return NewParams(sdk.NewCoins(), 1_000_000) } // Validate all bank/v2 module parameters func (p Params) Validate() error { + if err := validateDenomCreationFee(p.DenomCreationFee); err != nil { + return err + } + + if err := validateDenomCreationGasConsume(p.DenomCreationGasConsume); err != nil { + return err + } + + return nil +} + +func validateDenomCreationFee(i interface{}) error { + v, ok := i.(sdk.Coins) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + if v.Validate() != nil { + return fmt.Errorf("invalid denom creation fee: %+v", i) + } + + return nil +} + +func validateDenomCreationGasConsume(i interface{}) error { + _, ok := i.(uint64) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + return nil } From 78fa7d07cdd37120809f8468e093ecade7f3fbbc Mon Sep 17 00:00:00 2001 From: Hieu Vu <72878483+hieuvubk@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:18:08 +0700 Subject: [PATCH 05/35] add todo --- x/bank/v2/keeper/handlers.go | 1 + 1 file changed, 1 insertion(+) diff --git a/x/bank/v2/keeper/handlers.go b/x/bank/v2/keeper/handlers.go index c848c0ee5193..03722a878fd9 100644 --- a/x/bank/v2/keeper/handlers.go +++ b/x/bank/v2/keeper/handlers.go @@ -65,6 +65,7 @@ func (h handlers) MsgCreateDenom(goCtx context.Context, msg *types.MsgCreateDeno }, nil } +// TODO: should be gov? func (h handlers) MsgChangeAdmin(goCtx context.Context, msg *types.MsgChangeAdmin) (*types.MsgChangeAdminResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) From d2fc65f2455db2df19fd4c43cd68a1aa4e88f840 Mon Sep 17 00:00:00 2001 From: Hieu Vu <72878483+hieuvubk@users.noreply.github.com> Date: Tue, 15 Oct 2024 14:20:37 +0700 Subject: [PATCH 06/35] add more query --- x/bank/v2/keeper/keeper.go | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/x/bank/v2/keeper/keeper.go b/x/bank/v2/keeper/keeper.go index 71bfde13a9e4..f25cdc77a2f1 100644 --- a/x/bank/v2/keeper/keeper.go +++ b/x/bank/v2/keeper/keeper.go @@ -34,7 +34,7 @@ type Keeper struct { sendRestriction *sendRestriction } -func NewKeeper(authority []byte, addressCodec address.Codec, env appmodulev2.Environment, cdc codec.BinaryCodec) *Keeper { +func NewKeeper(authority []byte, addressCodec address.Codec, env appmodulev2.Environment, cdc codec.BinaryCodec) *Keeper { sb := collections.NewSchemaBuilder(env.KVStoreService) k := &Keeper{ @@ -158,6 +158,29 @@ func (k Keeper) GetBalance(ctx context.Context, addr []byte, denom string) sdk.C return sdk.NewCoin(denom, amt) } +// GetAllBalances returns all the account balances for the given account address. +func (k Keeper) GetAllBalances(ctx context.Context, addr sdk.AccAddress) sdk.Coins { + balances := sdk.NewCoins() + k.IterateAccountBalances(ctx, addr, func(balance sdk.Coin) bool { + balances = balances.Add(balance) + return false + }) + + return balances.Sort() +} + +// IterateAccountBalances iterates over the balances of a single account and +// provides the token balance to a callback. If true is returned from the +// callback, iteration is halted. +func (k Keeper) IterateAccountBalances(ctx context.Context, addr sdk.AccAddress, cb func(sdk.Coin) bool) { + err := k.balances.Walk(ctx, collections.NewPrefixedPairRange[[]byte, string](addr), func(key collections.Pair[[]byte, string], value math.Int) (stop bool, err error) { + return cb(sdk.NewCoin(key.K2(), value)), nil + }) + if err != nil { + panic(err) + } +} + // GetDenomMetaData retrieves the denomination metadata. returns the metadata and true if the denom exists, // false otherwise. func (k Keeper) GetDenomMetaData(ctx context.Context, denom string) (types.Metadata, bool) { From dbdae75f7b7b6f523a0576bbaefd43c8502455c0 Mon Sep 17 00:00:00 2001 From: Hieu Vu <72878483+hieuvubk@users.noreply.github.com> Date: Tue, 15 Oct 2024 14:26:20 +0700 Subject: [PATCH 07/35] add tests --- x/bank/v2/keeper/keeper_test.go | 192 ++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) diff --git a/x/bank/v2/keeper/keeper_test.go b/x/bank/v2/keeper/keeper_test.go index 2920d0aea040..c91a60108530 100644 --- a/x/bank/v2/keeper/keeper_test.go +++ b/x/bank/v2/keeper/keeper_test.go @@ -236,3 +236,195 @@ func (suite *KeeperTestSuite) TestSendCoins_WithRestriction() { acc1BarBalance := suite.bankKeeper.GetBalance(ctx, accAddrs[1], barDenom) require.Equal(acc1BarBalance.Amount, math.ZeroInt()) } + +func (suite *KeeperTestSuite) TestCreateNewDenom() { + ctx := suite.ctx + require := suite.Require() + balances := sdk.NewCoins(newFooCoin(100), newBarCoin(50)) + + require.NoError(banktestutil.FundAccount(ctx, suite.bankKeeper, accAddrs[0], balances)) + + newDenom, err := suite.bankKeeper.CreateDenom(suite.ctx, accAddrs[0].String(), "sub") + fmt.Println("newDenom", newDenom, err) + + acc0FooBalance := suite.bankKeeper.GetBalance(ctx, accAddrs[0], fooDenom) + fmt.Println("newBal", acc0FooBalance) + +} + +func (s *KeeperTestSuite) TestCreateDenom() { + require := s.Require() + + var ( + primaryDenom = "foo" + secondaryDenom = "bar" + defaultDenomCreationFee = banktypes.Params{DenomCreationFee: sdk.NewCoins(sdk.NewCoin(primaryDenom, math.NewInt(50_000_000)))} + twoDenomCreationFee = banktypes.Params{DenomCreationFee: sdk.NewCoins(sdk.NewCoin(primaryDenom, math.NewInt(50_000_000)), sdk.NewCoin(secondaryDenom, math.NewInt(50_000_000)))} + nilCreationFee = banktypes.Params{DenomCreationFee: nil} + largeCreationFee = banktypes.Params{DenomCreationFee: sdk.NewCoins(sdk.NewCoin(primaryDenom, math.NewInt(5_000_000_000)))} + ) + + for _, tc := range []struct { + desc string + denomCreationFee banktypes.Params + setup func() + subdenom string + valid bool + }{ + { + desc: "subdenom too long", + denomCreationFee: defaultDenomCreationFee, + subdenom: "assadsadsadasdasdsadsadsadsadsadsadsklkadaskkkdasdasedskhanhassyeunganassfnlksdflksafjlkasd", + valid: false, + }, + { + desc: "subdenom and creator pair already exists", + denomCreationFee: defaultDenomCreationFee, + setup: func() { + _, err := s.bankKeeper.CreateDenom(s.ctx, accAddrs[0].String(), "bitcoin") + s.Require().NoError(err) + }, + subdenom: "bitcoin", + valid: false, + }, + { + desc: "success case: defaultDenomCreationFee", + denomCreationFee: defaultDenomCreationFee, + subdenom: "evmos", + valid: true, + }, + { + desc: "success case: twoDenomCreationFee", + denomCreationFee: twoDenomCreationFee, + subdenom: "catcoin", + valid: true, + }, + { + desc: "success case: nilCreationFee", + denomCreationFee: nilCreationFee, + subdenom: "czcoin", + valid: true, + }, + { + desc: "account doesn't have enough to pay for denom creation fee", + denomCreationFee: largeCreationFee, + subdenom: "tooexpensive", + valid: false, + }, + { + desc: "subdenom having invalid characters", + denomCreationFee: defaultDenomCreationFee, + subdenom: "bit/***///&&&/coin", + valid: false, + }, + } { + s.SetupTest() + s.Run(fmt.Sprintf("Case %s", tc.desc), func() { + if tc.setup != nil { + tc.setup() + } + require.NoError(banktestutil.FundAccount(s.ctx, s.bankKeeper, accAddrs[0], twoDenomCreationFee.DenomCreationFee)) + s.bankKeeper.SetParams(s.ctx, tc.denomCreationFee) + denomCreationFee := s.bankKeeper.GetParams(s.ctx).DenomCreationFee + s.Require().Equal(tc.denomCreationFee.DenomCreationFee, denomCreationFee) + + // note balance, create a tokenfactory denom, then note balance again + preCreateBalance := s.bankKeeper.GetAllBalances(s.ctx, accAddrs[0]) + newDenom, err := s.bankKeeper.CreateDenom(s.ctx, accAddrs[0].String(), tc.subdenom) + postCreateBalance := s.bankKeeper.GetAllBalances(s.ctx, accAddrs[0]) + if tc.valid { + s.Require().NoError(err) + s.Require().True(preCreateBalance.Sub(postCreateBalance...).Equal(denomCreationFee)) + + // Make sure that the admin is set correctly + authority, err := s.bankKeeper.GetAuthorityMetadata(s.ctx, newDenom) + + s.Require().NoError(err) + s.Require().Equal(accAddrs[0].String(), authority.Admin) + + // Make sure that the denom metadata is initialized correctly + metadata, found := s.bankKeeper.GetDenomMetaData(s.ctx, newDenom) + s.Require().True(found) + s.Require().Equal(banktypes.Metadata{ + DenomUnits: []*banktypes.DenomUnit{{ + Denom: newDenom, + Exponent: 0, + }}, + Base: newDenom, + Display: newDenom, + Name: newDenom, + Symbol: newDenom, + }, metadata) + } else { + s.Require().Error(err) + // Ensure we don't charge if we expect an error + s.Require().True(preCreateBalance.Equal(postCreateBalance)) + } + }) + } +} + +func (s *KeeperTestSuite) TestCreateDenom_GasConsume() { + // It's hard to estimate exactly how much gas will be consumed when creating a + // denom, because besides consuming the gas specified by the params, the keeper + // also does a bunch of other things that consume gas. + // + // Rather, we test whether the gas consumed is within a range. Specifically, + // the range [gasConsume, gasConsume + offset]. If the actual gas consumption + // falls within the range for all test cases, we consider the test passed. + // + // In experience, the total amount of gas consumed should consume be ~30k more + // than the set amount. + const offset = 50000 + + for _, tc := range []struct { + desc string + gasConsume uint64 + }{ + { + desc: "gas consume zero", + gasConsume: 0, + }, + { + desc: "gas consume 1,000,000", + gasConsume: 1_000_000, + }, + { + desc: "gas consume 10,000,000", + gasConsume: 10_000_000, + }, + { + desc: "gas consume 25,000,000", + gasConsume: 25_000_000, + }, + { + desc: "gas consume 50,000,000", + gasConsume: 50_000_000, + }, + { + desc: "gas consume 200,000,000", + gasConsume: 200_000_000, + }, + } { + s.SetupTest() + s.Run(fmt.Sprintf("Case %s", tc.desc), func() { + // set params with the gas consume amount + s.bankKeeper.SetParams(s.ctx, banktypes.NewParams(nil, tc.gasConsume)) + + // amount of gas consumed prior to the denom creation + gasConsumedBefore := s.bankKeeper.Environment.GasService.GasMeter(s.ctx).Consumed() + + // create a denom + _, err := s.bankKeeper.CreateDenom(s.ctx, accAddrs[0].String(), "test") + s.Require().NoError(err) + + // amount of gas consumed after the denom creation + gasConsumedAfter := s.bankKeeper.Environment.GasService.GasMeter(s.ctx).Consumed() + + // the amount of gas consumed must be within the range + gasConsumed := gasConsumedAfter - gasConsumedBefore + s.Require().Greater(gasConsumed, tc.gasConsume) + s.Require().Less(gasConsumed, tc.gasConsume+offset) + }) + } +} From 638b1a0c3eda31e709d171c726a25e2e82510e5f Mon Sep 17 00:00:00 2001 From: Hieu Vu <72878483+hieuvubk@users.noreply.github.com> Date: Tue, 15 Oct 2024 14:28:29 +0700 Subject: [PATCH 08/35] check err --- x/bank/v2/keeper/createdenom.go | 7 +++++-- x/bank/v2/keeper/keeper.go | 18 +++++++++--------- x/bank/v2/types/errors.go | 14 +++++++------- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/x/bank/v2/keeper/createdenom.go b/x/bank/v2/keeper/createdenom.go index 810a624c4c92..bbcf0ce8d2e5 100644 --- a/x/bank/v2/keeper/createdenom.go +++ b/x/bank/v2/keeper/createdenom.go @@ -41,7 +41,10 @@ func (k Keeper) createDenomAfterValidation(ctx context.Context, creatorAddr stri Display: denom, } - k.SetDenomMetaData(ctx, denomMetaData) + err := k.SetDenomMetaData(ctx, denomMetaData) + if err != nil { + return err + } } authorityMetadata := types.DenomAuthorityMetadata{ @@ -89,7 +92,7 @@ func (k Keeper) chargeForCreateDenom(ctx context.Context, creatorAddr string) (e } communityPoolAddr := address.Module("protocolpool") - + if err := k.SendCoins(ctx, accAddr, communityPoolAddr, params.DenomCreationFee); err != nil { return err } diff --git a/x/bank/v2/keeper/keeper.go b/x/bank/v2/keeper/keeper.go index f25cdc77a2f1..d10f40298836 100644 --- a/x/bank/v2/keeper/keeper.go +++ b/x/bank/v2/keeper/keeper.go @@ -22,19 +22,19 @@ import ( type Keeper struct { appmodulev2.Environment - authority []byte - addressCodec address.Codec - schema collections.Schema - params collections.Item[types.Params] - balances *collections.IndexedMap[collections.Pair[[]byte, string], math.Int, BalancesIndexes] - supply collections.Map[string, math.Int] - denomMetadata collections.Map[string, types.Metadata] - denomAuthority collections.Map[string, types.DenomAuthorityMetadata] + authority []byte + addressCodec address.Codec + schema collections.Schema + params collections.Item[types.Params] + balances *collections.IndexedMap[collections.Pair[[]byte, string], math.Int, BalancesIndexes] + supply collections.Map[string, math.Int] + denomMetadata collections.Map[string, types.Metadata] + denomAuthority collections.Map[string, types.DenomAuthorityMetadata] sendRestriction *sendRestriction } -func NewKeeper(authority []byte, addressCodec address.Codec, env appmodulev2.Environment, cdc codec.BinaryCodec) *Keeper { +func NewKeeper(authority []byte, addressCodec address.Codec, env appmodulev2.Environment, cdc codec.BinaryCodec) *Keeper { sb := collections.NewSchemaBuilder(env.KVStoreService) k := &Keeper{ diff --git a/x/bank/v2/types/errors.go b/x/bank/v2/types/errors.go index c786de87c902..645cc7455ca6 100644 --- a/x/bank/v2/types/errors.go +++ b/x/bank/v2/types/errors.go @@ -10,10 +10,10 @@ import ( // x/tokenfactory module sentinel errors var ( - ErrDenomExists = errorsmod.Register(ModuleName, 2, "attempting to create a denom that already exists (has bank metadata)") - ErrUnauthorized = errorsmod.Register(ModuleName, 3, "unauthorized account") - ErrInvalidDenom = errorsmod.Register(ModuleName, 4, "invalid denom") - ErrInvalidCreator = errorsmod.Register(ModuleName, 5, "invalid creator") - ErrSubdenomTooLong = errorsmod.Register(ModuleName, 8, fmt.Sprintf("subdenom too long, max length is %d bytes", MaxSubdenomLength)) - ErrCreatorTooLong = errorsmod.Register(ModuleName, 9, fmt.Sprintf("creator too long, max length is %d bytes", MaxCreatorLength)) -) \ No newline at end of file + ErrDenomExists = errorsmod.Register(ModuleName, 2, "attempting to create a denom that already exists (has bank metadata)") + ErrUnauthorized = errorsmod.Register(ModuleName, 3, "unauthorized account") + ErrInvalidDenom = errorsmod.Register(ModuleName, 4, "invalid denom") + ErrInvalidCreator = errorsmod.Register(ModuleName, 5, "invalid creator") + ErrSubdenomTooLong = errorsmod.Register(ModuleName, 8, fmt.Sprintf("subdenom too long, max length is %d bytes", MaxSubdenomLength)) + ErrCreatorTooLong = errorsmod.Register(ModuleName, 9, fmt.Sprintf("creator too long, max length is %d bytes", MaxCreatorLength)) +) From edfcd6756907eb2646a65f9394832c948781dcbf Mon Sep 17 00:00:00 2001 From: Hieu Vu <72878483+hieuvubk@users.noreply.github.com> Date: Tue, 15 Oct 2024 14:35:40 +0700 Subject: [PATCH 09/35] check setParams err --- x/bank/v2/keeper/keeper_test.go | 6 +++--- x/bank/v2/types/denoms.go | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/x/bank/v2/keeper/keeper_test.go b/x/bank/v2/keeper/keeper_test.go index c91a60108530..25d624b97a6c 100644 --- a/x/bank/v2/keeper/keeper_test.go +++ b/x/bank/v2/keeper/keeper_test.go @@ -249,7 +249,7 @@ func (suite *KeeperTestSuite) TestCreateNewDenom() { acc0FooBalance := suite.bankKeeper.GetBalance(ctx, accAddrs[0], fooDenom) fmt.Println("newBal", acc0FooBalance) - + } func (s *KeeperTestSuite) TestCreateDenom() { @@ -324,7 +324,7 @@ func (s *KeeperTestSuite) TestCreateDenom() { tc.setup() } require.NoError(banktestutil.FundAccount(s.ctx, s.bankKeeper, accAddrs[0], twoDenomCreationFee.DenomCreationFee)) - s.bankKeeper.SetParams(s.ctx, tc.denomCreationFee) + require.NoError(s.bankKeeper.SetParams(s.ctx, tc.denomCreationFee)) denomCreationFee := s.bankKeeper.GetParams(s.ctx).DenomCreationFee s.Require().Equal(tc.denomCreationFee.DenomCreationFee, denomCreationFee) @@ -409,7 +409,7 @@ func (s *KeeperTestSuite) TestCreateDenom_GasConsume() { s.SetupTest() s.Run(fmt.Sprintf("Case %s", tc.desc), func() { // set params with the gas consume amount - s.bankKeeper.SetParams(s.ctx, banktypes.NewParams(nil, tc.gasConsume)) + s.Require().NoError(s.bankKeeper.SetParams(s.ctx, banktypes.NewParams(nil, tc.gasConsume))) // amount of gas consumed prior to the denom creation gasConsumedBefore := s.bankKeeper.Environment.GasService.GasMeter(s.ctx).Consumed() diff --git a/x/bank/v2/types/denoms.go b/x/bank/v2/types/denoms.go index 658399856efa..834802d2adf5 100644 --- a/x/bank/v2/types/denoms.go +++ b/x/bank/v2/types/denoms.go @@ -3,7 +3,7 @@ package types import ( "strings" - errorsmod "cosmossdk.io/errors" + "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -46,17 +46,17 @@ func DeconstructDenom(denom string) (creator string, subdenom string, err error) strParts := strings.Split(denom, "/") if len(strParts) < 3 { - return "", "", errorsmod.Wrapf(ErrInvalidDenom, "not enough parts of denom %s", denom) + return "", "", errors.Wrapf(ErrInvalidDenom, "not enough parts of denom %s", denom) } if strParts[0] != ModuleDenomPrefix { - return "", "", errorsmod.Wrapf(ErrInvalidDenom, "denom prefix is incorrect. Is: %s. Should be: %s", strParts[0], ModuleDenomPrefix) + return "", "", errors.Wrapf(ErrInvalidDenom, "denom prefix is incorrect. Is: %s. Should be: %s", strParts[0], ModuleDenomPrefix) } creator = strParts[1] creatorAddr, err := sdk.AccAddressFromBech32(creator) if err != nil { - return "", "", errorsmod.Wrapf(ErrInvalidDenom, "Invalid creator address (%s)", err) + return "", "", errors.Wrapf(ErrInvalidDenom, "Invalid creator address (%s)", err) } // Handle the case where a denom has a slash in its subdenom. For example, From b20efbe66d0414a0e5919c394ccad013a1aca659 Mon Sep 17 00:00:00 2001 From: Hieu Vu <72878483+hieuvubk@users.noreply.github.com> Date: Tue, 15 Oct 2024 15:01:50 +0700 Subject: [PATCH 10/35] lint --- x/bank/v2/keeper/admins.go | 2 +- x/bank/v2/keeper/createdenom.go | 7 ++++--- x/bank/v2/keeper/keeper_test.go | 15 --------------- x/bank/v2/types/denoms.go | 3 ++- 4 files changed, 7 insertions(+), 20 deletions(-) diff --git a/x/bank/v2/keeper/admins.go b/x/bank/v2/keeper/admins.go index 7e369db5cacf..87bb04f3711a 100644 --- a/x/bank/v2/keeper/admins.go +++ b/x/bank/v2/keeper/admins.go @@ -22,7 +22,7 @@ func (k Keeper) setAuthorityMetadata(ctx context.Context, denom string, metadata return k.denomAuthority.Set(ctx, denom, metadata) } -func (k Keeper) setAdmin(ctx context.Context, denom string, admin string) error { +func (k Keeper) setAdmin(ctx context.Context, denom, admin string) error { metadata, err := k.GetAuthorityMetadata(ctx, denom) if err != nil { return err diff --git a/x/bank/v2/keeper/createdenom.go b/x/bank/v2/keeper/createdenom.go index bbcf0ce8d2e5..0c27d3d579a5 100644 --- a/x/bank/v2/keeper/createdenom.go +++ b/x/bank/v2/keeper/createdenom.go @@ -5,12 +5,13 @@ import ( "fmt" "cosmossdk.io/x/bank/v2/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/address" ) // ConvertToBaseToken converts a fee amount in a whitelisted fee token to the base fee token amount -func (k Keeper) CreateDenom(ctx context.Context, creatorAddr string, subdenom string) (newTokenDenom string, err error) { +func (k Keeper) CreateDenom(ctx context.Context, creatorAddr, subdenom string) (newTokenDenom string, err error) { denom, err := k.validateCreateDenom(ctx, creatorAddr, subdenom) if err != nil { return "", err @@ -27,7 +28,7 @@ func (k Keeper) CreateDenom(ctx context.Context, creatorAddr string, subdenom st // Runs CreateDenom logic after the charge and all denom validation has been handled. // Made into a second function for genesis initialization. -func (k Keeper) createDenomAfterValidation(ctx context.Context, creatorAddr string, denom string) (err error) { +func (k Keeper) createDenomAfterValidation(ctx context.Context, creatorAddr, denom string) (err error) { _, exists := k.GetDenomMetaData(ctx, denom) if !exists { denomMetaData := types.Metadata{ @@ -60,7 +61,7 @@ func (k Keeper) createDenomAfterValidation(ctx context.Context, creatorAddr stri return nil } -func (k Keeper) validateCreateDenom(ctx context.Context, creatorAddr string, subdenom string) (newTokenDenom string, err error) { +func (k Keeper) validateCreateDenom(ctx context.Context, creatorAddr, subdenom string) (newTokenDenom string, err error) { // Temporary check until IBC bug is sorted out if k.HasSupply(ctx, subdenom) { return "", fmt.Errorf("temporary error until IBC bug is sorted out, " + diff --git a/x/bank/v2/keeper/keeper_test.go b/x/bank/v2/keeper/keeper_test.go index 25d624b97a6c..03ea35ecffc6 100644 --- a/x/bank/v2/keeper/keeper_test.go +++ b/x/bank/v2/keeper/keeper_test.go @@ -237,21 +237,6 @@ func (suite *KeeperTestSuite) TestSendCoins_WithRestriction() { require.Equal(acc1BarBalance.Amount, math.ZeroInt()) } -func (suite *KeeperTestSuite) TestCreateNewDenom() { - ctx := suite.ctx - require := suite.Require() - balances := sdk.NewCoins(newFooCoin(100), newBarCoin(50)) - - require.NoError(banktestutil.FundAccount(ctx, suite.bankKeeper, accAddrs[0], balances)) - - newDenom, err := suite.bankKeeper.CreateDenom(suite.ctx, accAddrs[0].String(), "sub") - fmt.Println("newDenom", newDenom, err) - - acc0FooBalance := suite.bankKeeper.GetBalance(ctx, accAddrs[0], fooDenom) - fmt.Println("newBal", acc0FooBalance) - -} - func (s *KeeperTestSuite) TestCreateDenom() { require := s.Require() diff --git a/x/bank/v2/types/denoms.go b/x/bank/v2/types/denoms.go index 834802d2adf5..aced047b7fce 100644 --- a/x/bank/v2/types/denoms.go +++ b/x/bank/v2/types/denoms.go @@ -4,6 +4,7 @@ import ( "strings" "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -38,7 +39,7 @@ func GetTokenDenom(creator, subdenom string) (string, error) { // DeconstructDenom takes a token denom string and verifies that it is a valid // denom of the tokenfactory module, and is of the form `factory/{creator}/{subdenom}` // If valid, it returns the creator address and subdenom -func DeconstructDenom(denom string) (creator string, subdenom string, err error) { +func DeconstructDenom(denom string) (creator, subdenom string, err error) { err = sdk.ValidateDenom(denom) if err != nil { return "", "", err From d95d5fb1b17192ad46e332af762a64607921505d Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Tue, 29 Oct 2024 16:11:14 +0700 Subject: [PATCH 11/35] update proto --- x/bank/proto/cosmos/bank/v2/tx.proto | 9 +- x/bank/v2/types/errors.go | 13 +-- x/bank/v2/types/tx.pb.go | 123 +++++++++++++-------------- 3 files changed, 66 insertions(+), 79 deletions(-) diff --git a/x/bank/proto/cosmos/bank/v2/tx.proto b/x/bank/proto/cosmos/bank/v2/tx.proto index d9605daf4879..d4d5a1ea813f 100644 --- a/x/bank/proto/cosmos/bank/v2/tx.proto +++ b/x/bank/proto/cosmos/bank/v2/tx.proto @@ -79,13 +79,8 @@ message MsgMint { // authority is the address that controls the module (defaults to x/gov unless overwritten). string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string to_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated cosmos.base.v1beta1.Coin amount = 3 [ - (gogoproto.nullable) = false, - (amino.dont_omitempty) = true, - (amino.encoding) = "legacy_coins", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; + string to_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false]; } // MsgMint defines the response structure for executing a MsgMint message. diff --git a/x/bank/v2/types/errors.go b/x/bank/v2/types/errors.go index 645cc7455ca6..905d3525c6d1 100644 --- a/x/bank/v2/types/errors.go +++ b/x/bank/v2/types/errors.go @@ -10,10 +10,11 @@ import ( // x/tokenfactory module sentinel errors var ( - ErrDenomExists = errorsmod.Register(ModuleName, 2, "attempting to create a denom that already exists (has bank metadata)") - ErrUnauthorized = errorsmod.Register(ModuleName, 3, "unauthorized account") - ErrInvalidDenom = errorsmod.Register(ModuleName, 4, "invalid denom") - ErrInvalidCreator = errorsmod.Register(ModuleName, 5, "invalid creator") - ErrSubdenomTooLong = errorsmod.Register(ModuleName, 8, fmt.Sprintf("subdenom too long, max length is %d bytes", MaxSubdenomLength)) - ErrCreatorTooLong = errorsmod.Register(ModuleName, 9, fmt.Sprintf("creator too long, max length is %d bytes", MaxCreatorLength)) + ErrDenomExists = errorsmod.Register(ModuleName, 2, "attempting to create a denom that already exists (has bank metadata)") + ErrUnauthorized = errorsmod.Register(ModuleName, 3, "unauthorized account") + ErrInvalidDenom = errorsmod.Register(ModuleName, 4, "invalid denom") + ErrInvalidCreator = errorsmod.Register(ModuleName, 5, "invalid creator") + ErrSubdenomTooLong = errorsmod.Register(ModuleName, 8, fmt.Sprintf("subdenom too long, max length is %d bytes", MaxSubdenomLength)) + ErrCreatorTooLong = errorsmod.Register(ModuleName, 9, fmt.Sprintf("creator too long, max length is %d bytes", MaxCreatorLength)) + ErrDenomDoesNotExist = errorsmod.Register(ModuleName, 10, "denom does not exist") ) diff --git a/x/bank/v2/types/tx.pb.go b/x/bank/v2/types/tx.pb.go index d9a931debafc..a7cfd2f2eb01 100644 --- a/x/bank/v2/types/tx.pb.go +++ b/x/bank/v2/types/tx.pb.go @@ -418,9 +418,9 @@ var xxx_messageInfo_MsgChangeAdminResponse proto.InternalMessageInfo // MsgMint is the Msg/Mint request type. type MsgMint struct { // authority is the address that controls the module (defaults to x/gov unless overwritten). - Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` - ToAddress string `protobuf:"bytes,2,opt,name=to_address,json=toAddress,proto3" json:"to_address,omitempty"` - 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"` + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + ToAddress string `protobuf:"bytes,2,opt,name=to_address,json=toAddress,proto3" json:"to_address,omitempty"` + Amount types.Coin `protobuf:"bytes,3,opt,name=amount,proto3" json:"amount"` } func (m *MsgMint) Reset() { *m = MsgMint{} } @@ -470,11 +470,11 @@ func (m *MsgMint) GetToAddress() string { return "" } -func (m *MsgMint) GetAmount() github_com_cosmos_cosmos_sdk_types.Coins { +func (m *MsgMint) GetAmount() types.Coin { if m != nil { return m.Amount } - return nil + return types.Coin{} } // MsgMint defines the response structure for executing a MsgMint message. @@ -530,47 +530,47 @@ func init() { func init() { proto.RegisterFile("cosmos/bank/v2/tx.proto", fileDescriptor_14123aa47d73c00a) } var fileDescriptor_14123aa47d73c00a = []byte{ - // 629 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x94, 0x4f, 0x6f, 0x12, 0x4f, - 0x18, 0xc7, 0xd9, 0x92, 0x1f, 0xbf, 0x32, 0xd4, 0x36, 0xdd, 0x90, 0x76, 0x21, 0x66, 0x4b, 0x56, - 0x63, 0x08, 0x49, 0x77, 0x84, 0xc6, 0x36, 0xe2, 0xc5, 0x52, 0xe3, 0x8d, 0xc4, 0x50, 0xbd, 0x78, - 0x21, 0x03, 0x3b, 0x2e, 0x1b, 0xdc, 0x19, 0xb2, 0x33, 0x40, 0xb9, 0x7a, 0xf4, 0x64, 0xe2, 0xcd, - 0x17, 0x60, 0x8c, 0x07, 0xc3, 0xc1, 0xab, 0x37, 0x0f, 0x3d, 0x36, 0x9e, 0x3c, 0xa9, 0x81, 0x03, - 0x6f, 0xc3, 0xcc, 0xce, 0xb0, 0xfc, 0x31, 0x84, 0xd8, 0x9b, 0x17, 0x98, 0x7d, 0xfe, 0x7e, 0x9f, - 0xcf, 0x3c, 0xbb, 0x60, 0xbf, 0x49, 0x99, 0x4f, 0x19, 0x6c, 0x20, 0xd2, 0x86, 0xbd, 0x12, 0xe4, - 0x17, 0x76, 0x27, 0xa0, 0x9c, 0xea, 0xdb, 0xd2, 0x61, 0x0b, 0x87, 0xdd, 0x2b, 0x65, 0xd3, 0x2e, - 0x75, 0x69, 0xe8, 0x82, 0xe2, 0x24, 0xa3, 0xb2, 0x99, 0xa5, 0xf4, 0x30, 0x7a, 0xc1, 0x55, 0x97, - 0x39, 0xaa, 0x9a, 0x74, 0x4d, 0x9b, 0xfa, 0xcc, 0x85, 0xbd, 0xa2, 0xf8, 0x53, 0x8e, 0x5d, 0xe4, - 0x7b, 0x84, 0xc2, 0xf0, 0x57, 0x99, 0xcc, 0xa8, 0x03, 0xc3, 0xb0, 0x57, 0x6c, 0x60, 0x8e, 0x8a, - 0xb0, 0x49, 0x3d, 0x22, 0xfd, 0xd6, 0x17, 0x0d, 0xec, 0x54, 0x99, 0xfb, 0xac, 0xe3, 0x20, 0x8e, - 0x9f, 0xa0, 0x00, 0xf9, 0x4c, 0x3f, 0x06, 0x49, 0xd4, 0xe5, 0x2d, 0x1a, 0x78, 0x7c, 0x60, 0x68, - 0x39, 0x2d, 0x9f, 0xac, 0x18, 0xdf, 0x3e, 0x1f, 0xa6, 0x95, 0x88, 0x53, 0xc7, 0x09, 0x30, 0x63, - 0xe7, 0x3c, 0xf0, 0x88, 0x5b, 0x9b, 0x85, 0xea, 0xf7, 0x41, 0xa2, 0x13, 0x56, 0x30, 0x36, 0x72, - 0x5a, 0x3e, 0x55, 0xda, 0xb3, 0x17, 0x21, 0xd8, 0xb2, 0x7e, 0x25, 0x79, 0xf9, 0xe3, 0x20, 0xf6, - 0x61, 0x32, 0x2c, 0x68, 0x35, 0x95, 0x50, 0x3e, 0x79, 0x35, 0x19, 0x16, 0x66, 0xa5, 0x5e, 0x4f, - 0x86, 0x85, 0xdb, 0x32, 0xf9, 0x90, 0x39, 0x6d, 0x78, 0x11, 0x11, 0x5a, 0xd2, 0x6a, 0x65, 0xc0, - 0xfe, 0x92, 0xa9, 0x86, 0x59, 0x87, 0x12, 0x86, 0xad, 0x4f, 0x1b, 0xe0, 0xff, 0x2a, 0x73, 0xcf, - 0x31, 0x71, 0xf4, 0x07, 0x60, 0xeb, 0x45, 0x40, 0xfd, 0x3a, 0x92, 0xda, 0xd7, 0x4e, 0x95, 0x12, - 0xd1, 0xca, 0xa4, 0x9f, 0x00, 0xc0, 0x69, 0x94, 0xba, 0xb1, 0x0e, 0x08, 0xa7, 0xd3, 0xc4, 0x01, - 0x48, 0x20, 0x9f, 0x76, 0x09, 0x37, 0xe2, 0xb9, 0x78, 0x3e, 0x55, 0xca, 0xcc, 0x80, 0x30, 0x6c, - 0xab, 0xdb, 0xb0, 0xcf, 0xa8, 0x47, 0x2a, 0x8f, 0x05, 0x93, 0x8f, 0x3f, 0x0f, 0xf2, 0xae, 0xc7, - 0x5b, 0xdd, 0x86, 0xdd, 0xa4, 0xbe, 0xba, 0x74, 0x38, 0xc7, 0x81, 0x0f, 0x3a, 0x98, 0x85, 0x09, - 0xec, 0xdd, 0x64, 0x58, 0xd8, 0x7a, 0x89, 0x5d, 0xd4, 0x1c, 0xd4, 0xc5, 0x7d, 0x32, 0x05, 0x54, - 0x36, 0x2c, 0x97, 0x04, 0xd0, 0x85, 0x99, 0x05, 0xd3, 0x9b, 0xab, 0x98, 0x0a, 0x48, 0xd6, 0x6e, - 0xb8, 0x0a, 0xe2, 0x18, 0x31, 0x7c, 0xab, 0x81, 0xed, 0x2a, 0x73, 0xcf, 0x02, 0x8c, 0x38, 0x7e, - 0x84, 0x09, 0xf5, 0xf5, 0xbb, 0x20, 0xc1, 0x30, 0x71, 0x70, 0xb0, 0x16, 0xa2, 0x8a, 0xd3, 0xb3, - 0x60, 0x93, 0x75, 0x1b, 0x8e, 0xc8, 0x96, 0xf4, 0x6a, 0xd1, 0x73, 0xf9, 0x48, 0xe8, 0x54, 0x81, - 0x42, 0xe1, 0xad, 0x55, 0x0a, 0xe7, 0x24, 0x58, 0x0f, 0xc1, 0xde, 0xa2, 0x65, 0xaa, 0x57, 0xbf, - 0x03, 0x76, 0x08, 0xee, 0xd7, 0x39, 0x6d, 0x63, 0x52, 0x97, 0x1d, 0x43, 0x95, 0xb5, 0x1b, 0x04, - 0xf7, 0x9f, 0x0a, 0xab, 0xac, 0xf0, 0x55, 0xcd, 0xd5, 0x42, 0xc4, 0xc5, 0xa7, 0x8e, 0xef, 0x91, - 0x6b, 0xcc, 0x95, 0x06, 0xff, 0xcd, 0x0f, 0x25, 0x1f, 0xf4, 0x7b, 0x20, 0x29, 0x24, 0x20, 0x51, - 0xd4, 0x88, 0xaf, 0x29, 0xb5, 0x49, 0x70, 0x3f, 0x6c, 0xff, 0x17, 0x20, 0x66, 0x9a, 0x2d, 0x43, - 0x82, 0x98, 0x59, 0xa2, 0x8b, 0x7b, 0x2f, 0x97, 0xbf, 0xea, 0x11, 0x7e, 0xed, 0xf7, 0xf9, 0x5f, - 0xdc, 0x7b, 0xf8, 0xe7, 0x87, 0x64, 0xe5, 0xd2, 0x0b, 0x38, 0x6a, 0xe9, 0xc5, 0x71, 0xca, 0xae, - 0x72, 0x7c, 0x39, 0x32, 0xb5, 0xab, 0x91, 0xa9, 0xfd, 0x1a, 0x99, 0xda, 0x9b, 0xb1, 0x19, 0xbb, - 0x1a, 0x9b, 0xb1, 0xef, 0x63, 0x33, 0xf6, 0x5c, 0x95, 0x62, 0x4e, 0xdb, 0xf6, 0xe8, 0x5c, 0xb1, - 0x50, 0x5f, 0x23, 0x11, 0x7e, 0x52, 0x8f, 0x7e, 0x07, 0x00, 0x00, 0xff, 0xff, 0x89, 0xb8, 0xc3, - 0x03, 0x15, 0x06, 0x00, 0x00, + // 640 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xbf, 0x8f, 0x12, 0x41, + 0x18, 0x65, 0x41, 0xf1, 0x18, 0xce, 0xbb, 0xdc, 0x86, 0xdc, 0x2d, 0xc4, 0xec, 0x91, 0xd5, 0x18, + 0x42, 0x72, 0xbb, 0xc2, 0xc5, 0x23, 0x62, 0xe3, 0x71, 0xc6, 0x8e, 0xc4, 0x70, 0xda, 0xd8, 0x90, + 0x81, 0x1d, 0x97, 0x0d, 0xee, 0x0c, 0xd9, 0x19, 0xe0, 0x68, 0x2d, 0xad, 0x4c, 0xec, 0xfc, 0x0b, + 0x8c, 0x85, 0xa1, 0xb0, 0xb5, 0xb3, 0xb8, 0xf2, 0x62, 0x65, 0xa5, 0x06, 0x4c, 0xf8, 0x37, 0xcc, + 0xec, 0x0c, 0xcb, 0x0f, 0x83, 0x44, 0x1a, 0x98, 0xfd, 0x7e, 0xbc, 0xef, 0x7d, 0x6f, 0xde, 0x2e, + 0x38, 0x68, 0x12, 0xea, 0x11, 0x6a, 0x35, 0x20, 0x6e, 0x5b, 0xbd, 0xa2, 0xc5, 0x2e, 0xcc, 0x8e, + 0x4f, 0x18, 0x51, 0x77, 0x44, 0xc2, 0xe4, 0x09, 0xb3, 0x57, 0xcc, 0xa4, 0x1c, 0xe2, 0x90, 0x20, + 0x65, 0xf1, 0x93, 0xa8, 0xca, 0xa4, 0x97, 0xda, 0x83, 0xea, 0x85, 0x54, 0x5d, 0xf4, 0x48, 0x34, + 0x91, 0x9a, 0x0e, 0xf5, 0xa8, 0x63, 0xf5, 0x0a, 0xfc, 0x4f, 0x26, 0xf6, 0xa0, 0xe7, 0x62, 0x62, + 0x05, 0xbf, 0x32, 0xa4, 0x87, 0x13, 0x28, 0xb2, 0x7a, 0x85, 0x06, 0x62, 0xb0, 0x60, 0x35, 0x89, + 0x8b, 0x45, 0xde, 0xf8, 0xa2, 0x80, 0xdd, 0x2a, 0x75, 0x9e, 0x77, 0x6c, 0xc8, 0xd0, 0x53, 0xe8, + 0x43, 0x8f, 0xaa, 0x27, 0x20, 0x01, 0xbb, 0xac, 0x45, 0x7c, 0x97, 0x0d, 0x34, 0x25, 0xab, 0xe4, + 0x12, 0x15, 0xed, 0xdb, 0xe7, 0xa3, 0x94, 0x24, 0x71, 0x6a, 0xdb, 0x3e, 0xa2, 0xf4, 0x9c, 0xf9, + 0x2e, 0x76, 0x6a, 0xb3, 0x52, 0xf5, 0x01, 0x88, 0x77, 0x02, 0x04, 0x2d, 0x9a, 0x55, 0x72, 0xc9, + 0xe2, 0xbe, 0xb9, 0x28, 0x82, 0x29, 0xf0, 0x2b, 0x89, 0xcb, 0x1f, 0x87, 0x91, 0x0f, 0x93, 0x61, + 0x5e, 0xa9, 0xc9, 0x86, 0x72, 0xe9, 0xf5, 0x64, 0x98, 0x9f, 0x41, 0xbd, 0x99, 0x0c, 0xf3, 0x77, + 0x44, 0xf3, 0x11, 0xb5, 0xdb, 0xd6, 0x45, 0xa8, 0xd0, 0x12, 0x57, 0x23, 0x0d, 0x0e, 0x96, 0x42, + 0x35, 0x44, 0x3b, 0x04, 0x53, 0x64, 0x7c, 0x8a, 0x82, 0x1b, 0x55, 0xea, 0x9c, 0x23, 0x6c, 0xab, + 0x0f, 0xc1, 0xf6, 0x4b, 0x9f, 0x78, 0x75, 0x28, 0xb8, 0xaf, 0xdd, 0x2a, 0xc9, 0xab, 0x65, 0x48, + 0x2d, 0x01, 0xc0, 0x48, 0xd8, 0x1a, 0x5d, 0x27, 0x08, 0x23, 0xd3, 0xc6, 0x01, 0x88, 0x43, 0x8f, + 0x74, 0x31, 0xd3, 0x62, 0xd9, 0x58, 0x2e, 0x59, 0x4c, 0xcf, 0x04, 0xa1, 0xc8, 0x94, 0xb7, 0x61, + 0x9e, 0x11, 0x17, 0x57, 0x9e, 0x70, 0x4d, 0x3e, 0xfe, 0x3c, 0xcc, 0x39, 0x2e, 0x6b, 0x75, 0x1b, + 0x66, 0x93, 0x78, 0xf2, 0xd2, 0xad, 0x39, 0x1d, 0xd8, 0xa0, 0x83, 0x68, 0xd0, 0x40, 0xdf, 0x4f, + 0x86, 0xf9, 0xed, 0x57, 0xc8, 0x81, 0xcd, 0x41, 0x9d, 0xdf, 0x27, 0x95, 0x82, 0x8a, 0x81, 0xe5, + 0x22, 0x17, 0x74, 0x61, 0x67, 0xae, 0xe9, 0xad, 0x55, 0x9a, 0x72, 0x91, 0x8c, 0xbd, 0xc0, 0x0a, + 0xfc, 0x18, 0x6a, 0xf8, 0x4e, 0x01, 0x3b, 0x55, 0xea, 0x9c, 0xf9, 0x08, 0x32, 0xf4, 0x18, 0x61, + 0xe2, 0xa9, 0xf7, 0x40, 0x9c, 0x22, 0x6c, 0x23, 0x7f, 0xad, 0x88, 0xb2, 0x4e, 0xcd, 0x80, 0x2d, + 0xda, 0x6d, 0xd8, 0xbc, 0x5b, 0xa8, 0x57, 0x0b, 0x9f, 0xcb, 0xc7, 0x9c, 0xa7, 0x2c, 0xe4, 0x0c, + 0x6f, 0xaf, 0x62, 0x38, 0x47, 0xc1, 0x78, 0x04, 0xf6, 0x17, 0x23, 0x53, 0xbe, 0xea, 0x5d, 0xb0, + 0x8b, 0x51, 0xbf, 0xce, 0x48, 0x1b, 0xe1, 0xba, 0x98, 0x18, 0xb0, 0xac, 0xdd, 0xc4, 0xa8, 0xff, + 0x8c, 0x47, 0x05, 0xc2, 0x57, 0xb9, 0x57, 0x0b, 0x62, 0x07, 0x9d, 0xda, 0x9e, 0x8b, 0x37, 0xd8, + 0x2b, 0x05, 0xae, 0xcf, 0x2f, 0x25, 0x1e, 0xd4, 0xfb, 0x20, 0xc1, 0x29, 0x40, 0x0e, 0xaa, 0xc5, + 0xd6, 0x40, 0x6d, 0x61, 0xd4, 0x0f, 0xc6, 0xff, 0x87, 0x10, 0x33, 0xce, 0x86, 0x26, 0x84, 0x98, + 0x45, 0xc2, 0x8b, 0xfb, 0xad, 0x04, 0xe6, 0xaf, 0xba, 0x98, 0x6d, 0xfc, 0x3e, 0x6f, 0xec, 0xfb, + 0xd2, 0x9c, 0xef, 0x95, 0x7f, 0xfb, 0xfe, 0x1a, 0xf7, 0x7d, 0xe8, 0x5a, 0xeb, 0xef, 0xcf, 0xc0, + 0x4a, 0xcb, 0xf2, 0xd5, 0xa4, 0x65, 0xf9, 0x71, 0xba, 0x79, 0xe5, 0xe4, 0x72, 0xa4, 0x2b, 0x57, + 0x23, 0x5d, 0xf9, 0x35, 0xd2, 0x95, 0xb7, 0x63, 0x3d, 0x72, 0x35, 0xd6, 0x23, 0xdf, 0xc7, 0x7a, + 0xe4, 0x85, 0x84, 0xa2, 0x76, 0xdb, 0x74, 0xc9, 0x1c, 0x58, 0xf0, 0x56, 0x35, 0xe2, 0xc1, 0x07, + 0xf1, 0xf8, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5f, 0x91, 0x7c, 0xa3, 0xd3, 0x05, 0x00, 0x00, } func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) { @@ -864,20 +864,16 @@ func (m *MsgMint) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = 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 + { + size, err := m.Amount.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) @@ -1059,12 +1055,8 @@ func (m *MsgMint) Size() (n int) { 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)) - } - } + l = m.Amount.Size() + n += 1 + l + sovTx(uint64(l)) return n } @@ -1960,8 +1952,7 @@ func (m *MsgMint) Unmarshal(dAtA []byte) error { 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 { + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex From 0d1ceaf85fae83554975e50731a7ea98caf70f10 Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Tue, 29 Oct 2024 16:11:47 +0700 Subject: [PATCH 12/35] add tokenfatory logic into mint --- x/bank/v2/keeper/handlers.go | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/x/bank/v2/keeper/handlers.go b/x/bank/v2/keeper/handlers.go index 03722a878fd9..b940c616a1b1 100644 --- a/x/bank/v2/keeper/handlers.go +++ b/x/bank/v2/keeper/handlers.go @@ -121,18 +121,36 @@ func (h handlers) MsgSend(ctx context.Context, msg *types.MsgSend) (*types.MsgSe } func (h handlers) MsgMint(ctx context.Context, msg *types.MsgMint) (*types.MsgMintResponse, error) { - authorityBytes, err := h.addressCodec.StringToBytes(msg.Authority) - if err != nil { - return nil, err - } + // Check if is a tokenfatory denom + _, _, err := types.DeconstructDenom(msg.Amount.Denom) + if err == nil { + _, denomExists := h.GetDenomMetaData(ctx, msg.Amount.Denom) + if !denomExists { + return nil, types.ErrDenomDoesNotExist.Wrapf("denom: %s", msg.Amount.Denom) + } - if !bytes.Equal(h.authority, authorityBytes) { - expectedAuthority, err := h.addressCodec.BytesToString(h.authority) + authorityMetadata, err := h.GetAuthorityMetadata(ctx, msg.Amount.Denom) if err != nil { return nil, err } - return nil, fmt.Errorf("invalid authority; expected %s, got %s", expectedAuthority, msg.Authority) + if msg.Authority != authorityMetadata.GetAdmin() { + return nil, types.ErrUnauthorized + } + } else { + authorityBytes, err := h.addressCodec.StringToBytes(msg.Authority) + if err != nil { + return nil, err + } + + if !bytes.Equal(h.authority, authorityBytes) { + expectedAuthority, err := h.addressCodec.BytesToString(h.authority) + if err != nil { + return nil, err + } + + return nil, fmt.Errorf("invalid authority; expected %s, got %s", expectedAuthority, msg.Authority) + } } to, err := h.addressCodec.StringToBytes(msg.ToAddress) @@ -144,12 +162,12 @@ func (h handlers) MsgMint(ctx context.Context, msg *types.MsgMint) (*types.MsgMi return nil, errorsmod.Wrap(sdkerrors.ErrInvalidCoins, msg.Amount.String()) } - if !msg.Amount.IsAllPositive() { + if !msg.Amount.IsPositive() { return nil, errorsmod.Wrap(sdkerrors.ErrInvalidCoins, msg.Amount.String()) } // TODO: should mint to mint module then transfer? - err = h.MintCoins(ctx, to, msg.Amount) + err = h.MintCoins(ctx, to, sdk.NewCoins(msg.Amount)) if err != nil { return nil, err } From 13878ffd906837bd0399a121739047b8e630c60f Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Tue, 29 Oct 2024 16:11:55 +0700 Subject: [PATCH 13/35] mint test --- x/bank/v2/keeper/keeper_test.go | 85 +++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/x/bank/v2/keeper/keeper_test.go b/x/bank/v2/keeper/keeper_test.go index 03ea35ecffc6..6049dae65bcb 100644 --- a/x/bank/v2/keeper/keeper_test.go +++ b/x/bank/v2/keeper/keeper_test.go @@ -16,6 +16,7 @@ import ( storetypes "cosmossdk.io/store/types" "cosmossdk.io/x/bank/v2/keeper" banktestutil "cosmossdk.io/x/bank/v2/testutil" + "cosmossdk.io/x/bank/v2/types" banktypes "cosmossdk.io/x/bank/v2/types" codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" @@ -413,3 +414,87 @@ func (s *KeeperTestSuite) TestCreateDenom_GasConsume() { }) } } + +func (s *KeeperTestSuite) TestMintHandler() { + s.SetupTest() + require := s.Require() + s.bankKeeper.SetParams(s.ctx, types.Params{ + DenomCreationFee: sdk.NewCoins(sdk.NewCoin(fooDenom, math.NewInt(10))), + }) + handler := keeper.NewHandlers(&s.bankKeeper) + require.NoError(banktestutil.FundAccount(s.ctx, s.bankKeeper, accAddrs[0], sdk.NewCoins(sdk.NewCoin(fooDenom, math.NewInt(100))))) + + resp, err := handler.MsgCreateDenom(s.ctx, &types.MsgCreateDenom{ + Sender: accAddrs[0].String(), + Subdenom: "test", + }) + require.NoError(err) + + newDenom := resp.NewTokenDenom + authority := authtypes.NewModuleAddress("gov") + + for _, tc := range []struct { + desc string + msg *types.MsgMint + expErr bool + }{ + { + desc: "Mint bar denom, valid", + msg: &types.MsgMint{ + Authority: authority.String(), + ToAddress: accAddrs[1].String(), + Amount: sdk.NewCoin(barDenom, math.NewInt(100)), + }, + expErr: false, + }, + { + desc: "Mint bar denom, invalid authority", + msg: &types.MsgMint{ + Authority: authority.String() + "s", + ToAddress: accAddrs[1].String(), + Amount: sdk.NewCoin(barDenom, math.NewInt(100)), + }, + expErr: true, + }, + { + desc: "Mint tokenfatory denom, valid", + msg: &types.MsgMint{ + Authority: accAddrs[0].String(), + ToAddress: accAddrs[1].String(), + Amount: sdk.NewCoin(newDenom, math.NewInt(100)), + }, + expErr: false, + }, + { + desc: "Mint tokenfatory denom, invalid admin", + msg: &types.MsgMint{ + Authority: authority.String(), + ToAddress: accAddrs[1].String(), + Amount: sdk.NewCoin(newDenom, math.NewInt(100)), + }, + expErr: true, + }, + { + desc: "Mint tokenfatory denom, denom not created", + msg: &types.MsgMint{ + Authority: accAddrs[0].String(), + ToAddress: accAddrs[1].String(), + Amount: sdk.NewCoin(newDenom + "s", math.NewInt(100)), + }, + expErr: true, + }, + } { + s.Run(fmt.Sprintf("Case %s", tc.desc), func() { + _, err := handler.MsgMint(s.ctx, tc.msg) + fmt.Println("err", err) + if tc.expErr { + require.Error(err) + } else { + require.NoError(err) + // Check ToAddress balance after + balance := s.bankKeeper.GetBalance(s.ctx, accAddrs[1], tc.msg.Amount.Denom) + require.Equal(balance, tc.msg.Amount) + } + }) + } +} From 498208a95a5a5af409c3e29aad84264e974be980 Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Tue, 29 Oct 2024 18:43:27 +0700 Subject: [PATCH 14/35] test send tokenfactory denoms --- x/bank/v2/keeper/keeper_test.go | 71 +++++++++++++++++++++++++++++++-- 1 file changed, 68 insertions(+), 3 deletions(-) diff --git a/x/bank/v2/keeper/keeper_test.go b/x/bank/v2/keeper/keeper_test.go index 6049dae65bcb..1c30a957b1c7 100644 --- a/x/bank/v2/keeper/keeper_test.go +++ b/x/bank/v2/keeper/keeper_test.go @@ -479,22 +479,87 @@ func (s *KeeperTestSuite) TestMintHandler() { msg: &types.MsgMint{ Authority: accAddrs[0].String(), ToAddress: accAddrs[1].String(), - Amount: sdk.NewCoin(newDenom + "s", math.NewInt(100)), + Amount: sdk.NewCoin(newDenom+"s", math.NewInt(100)), }, expErr: true, }, } { s.Run(fmt.Sprintf("Case %s", tc.desc), func() { _, err := handler.MsgMint(s.ctx, tc.msg) - fmt.Println("err", err) if tc.expErr { require.Error(err) } else { require.NoError(err) // Check ToAddress balance after - balance := s.bankKeeper.GetBalance(s.ctx, accAddrs[1], tc.msg.Amount.Denom) + toAddr, err := s.addressCodec.StringToBytes(tc.msg.ToAddress) + require.NoError(err) + balance := s.bankKeeper.GetBalance(s.ctx, toAddr, tc.msg.Amount.Denom) require.Equal(balance, tc.msg.Amount) } }) } } + +func (s *KeeperTestSuite) TestSendHandler_TokenfactoryDenom() { + s.SetupTest() + require := s.Require() + s.bankKeeper.SetParams(s.ctx, types.Params{ + DenomCreationFee: sdk.NewCoins(sdk.NewCoin(fooDenom, math.NewInt(10))), + }) + handler := keeper.NewHandlers(&s.bankKeeper) + require.NoError(banktestutil.FundAccount(s.ctx, s.bankKeeper, accAddrs[0], sdk.NewCoins(sdk.NewCoin(fooDenom, math.NewInt(100))))) + + resp, err := handler.MsgCreateDenom(s.ctx, &types.MsgCreateDenom{ + Sender: accAddrs[0].String(), + Subdenom: "test", + }) + require.NoError(err) + + newDenom := resp.NewTokenDenom + + _, err = handler.MsgMint(s.ctx, &types.MsgMint{ + Authority: accAddrs[0].String(), + ToAddress: accAddrs[0].String(), + Amount: sdk.NewCoin(newDenom, math.NewInt(100)), + }) + require.NoError(err) + + for _, tc := range []struct { + desc string + msg *types.MsgSend + expErr bool + }{ + { + desc: "valid", + msg: &types.MsgSend{ + FromAddress: accAddrs[0].String(), + ToAddress: accAddrs[1].String(), + Amount: sdk.NewCoins(sdk.NewCoin(newDenom, math.NewInt(50))), + }, + expErr: false, + }, + { + desc: "insufficient funds", + msg: &types.MsgSend{ + FromAddress: accAddrs[0].String(), + ToAddress: accAddrs[1].String(), + Amount: sdk.NewCoins(sdk.NewCoin(newDenom, math.NewInt(150))), + }, + expErr: true, + }, + } { + s.Run(fmt.Sprintf("Case %s", tc.desc), func() { + _, err := handler.MsgSend(s.ctx, tc.msg) + if tc.expErr { + require.Error(err) + } else { + require.NoError(err) + // Check ToAddress balances after + toAddr, err := s.addressCodec.StringToBytes(tc.msg.ToAddress) + require.NoError(err) + balances := s.bankKeeper.GetAllBalances(s.ctx, toAddr) + require.Equal(balances, tc.msg.Amount) + } + }) + } +} From 767299a525c34b5bc00391f1aa32488ddd25c3e6 Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Tue, 29 Oct 2024 20:02:42 +0700 Subject: [PATCH 15/35] burn handler & tests --- x/bank/proto/cosmos/bank/v2/tx.proto | 17 +- x/bank/v2/keeper/handlers.go | 54 +++ x/bank/v2/keeper/keeper.go | 36 ++ x/bank/v2/keeper/keeper_test.go | 122 +++++++ x/bank/v2/types/tx.pb.go | 483 ++++++++++++++++++++++++--- 5 files changed, 669 insertions(+), 43 deletions(-) diff --git a/x/bank/proto/cosmos/bank/v2/tx.proto b/x/bank/proto/cosmos/bank/v2/tx.proto index d4d5a1ea813f..a0a36460d163 100644 --- a/x/bank/proto/cosmos/bank/v2/tx.proto +++ b/x/bank/proto/cosmos/bank/v2/tx.proto @@ -83,5 +83,20 @@ message MsgMint { cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false]; } -// MsgMint defines the response structure for executing a MsgMint message. +// MsgMintResponse defines the response structure for executing a MsgMint message. message MsgMintResponse {} + +// MsgBurn is the Msg/Burn request type. +message MsgBurn { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/x/bank/v2/MsgBurn"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + string burn_from_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false]; +} + +// MsgBurnResponse defines the response structure for executing a MsgBurn message. +message MsgBurnResponse {} diff --git a/x/bank/v2/keeper/handlers.go b/x/bank/v2/keeper/handlers.go index b940c616a1b1..bf4b76a86898 100644 --- a/x/bank/v2/keeper/handlers.go +++ b/x/bank/v2/keeper/handlers.go @@ -175,6 +175,60 @@ func (h handlers) MsgMint(ctx context.Context, msg *types.MsgMint) (*types.MsgMi return &types.MsgMintResponse{}, nil } +func (h handlers) MsgBurn(ctx context.Context, msg *types.MsgBurn) (*types.MsgBurnResponse, error) { + // Check if is a tokenfatory denom + _, _, err := types.DeconstructDenom(msg.Amount.Denom) + if err == nil { + _, denomExists := h.GetDenomMetaData(ctx, msg.Amount.Denom) + if !denomExists { + return nil, types.ErrDenomDoesNotExist.Wrapf("denom: %s", msg.Amount.Denom) + } + + authorityMetadata, err := h.GetAuthorityMetadata(ctx, msg.Amount.Denom) + if err != nil { + return nil, err + } + + if msg.Authority != authorityMetadata.GetAdmin() { + return nil, types.ErrUnauthorized + } + } else { + authorityBytes, err := h.addressCodec.StringToBytes(msg.Authority) + if err != nil { + return nil, err + } + + if !bytes.Equal(h.authority, authorityBytes) { + expectedAuthority, err := h.addressCodec.BytesToString(h.authority) + if err != nil { + return nil, err + } + + return nil, fmt.Errorf("invalid authority; expected %s, got %s", expectedAuthority, msg.Authority) + } + } + + from, err := h.addressCodec.StringToBytes(msg.BurnFromAddress) + if err != nil { + return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid to address: %s", err) + } + + if !msg.Amount.IsValid() { + return nil, errorsmod.Wrap(sdkerrors.ErrInvalidCoins, msg.Amount.String()) + } + + if !msg.Amount.IsPositive() { + return nil, errorsmod.Wrap(sdkerrors.ErrInvalidCoins, msg.Amount.String()) + } + + err = h.BurnCoins(ctx, from, sdk.NewCoins(msg.Amount)) + if err != nil { + return nil, err + } + + return &types.MsgBurnResponse{}, nil +} + // QueryParams queries the parameters of the bank/v2 module. func (h handlers) QueryParams(ctx context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { if req == nil { diff --git a/x/bank/v2/keeper/keeper.go b/x/bank/v2/keeper/keeper.go index d10f40298836..27cee49b77e2 100644 --- a/x/bank/v2/keeper/keeper.go +++ b/x/bank/v2/keeper/keeper.go @@ -91,6 +91,42 @@ func (k Keeper) MintCoins(ctx context.Context, addr []byte, amounts sdk.Coins) e ) } +// BurnCoins burns coins deletes coins from the balance of an account. +// An error is returned if the module account does not exist or is unauthorized. +func (k Keeper) BurnCoins(ctx context.Context, address []byte, amounts sdk.Coins) error { + + // TODO: Burn restriction & permission + + if !amounts.IsValid() { + return errorsmod.Wrap(sdkerrors.ErrInvalidCoins, amounts.String()) + } + + err := k.subUnlockedCoins(ctx, address, amounts) + if err != nil { + return err + } + + for _, amount := range amounts { + supply := k.GetSupply(ctx, amount.GetDenom()) + supply = supply.Sub(amount) + k.setSupply(ctx, supply) + } + + addrStr, err := k.addressCodec.BytesToString(address) + if err != nil { + return err + } + + k.Logger.Debug("burned tokens from account", "amount", amounts.String(), "from", addrStr) + + // emit burn event + return k.EventService.EventManager(ctx).EmitKV( + types.EventTypeCoinBurn, + event.NewAttribute(types.AttributeKeyBurner, addrStr), + event.NewAttribute(sdk.AttributeKeyAmount, amounts.String()), + ) +} + // SendCoins transfers amt coins from a sending account to a receiving account. // Function take sender & receipient as []byte. // They can be sdk address or module name. diff --git a/x/bank/v2/keeper/keeper_test.go b/x/bank/v2/keeper/keeper_test.go index 1c30a957b1c7..43998bd1a826 100644 --- a/x/bank/v2/keeper/keeper_test.go +++ b/x/bank/v2/keeper/keeper_test.go @@ -500,6 +500,128 @@ func (s *KeeperTestSuite) TestMintHandler() { } } +func (s *KeeperTestSuite) TestBurnHandler() { + s.SetupTest() + require := s.Require() + s.bankKeeper.SetParams(s.ctx, types.Params{ + DenomCreationFee: sdk.NewCoins(sdk.NewCoin(fooDenom, math.NewInt(10))), + }) + handler := keeper.NewHandlers(&s.bankKeeper) + require.NoError(banktestutil.FundAccount(s.ctx, s.bankKeeper, accAddrs[0], sdk.NewCoins(sdk.NewCoin(fooDenom, math.NewInt(100))))) + + resp, err := handler.MsgCreateDenom(s.ctx, &types.MsgCreateDenom{ + Sender: accAddrs[0].String(), + Subdenom: "test", + }) + require.NoError(err) + + newDenom := resp.NewTokenDenom + authority := authtypes.NewModuleAddress("gov") + + _, err = handler.MsgMint(s.ctx, &types.MsgMint{ + Authority: accAddrs[0].String(), + ToAddress: accAddrs[0].String(), + Amount: sdk.NewCoin(newDenom, math.NewInt(100)), + }) + require.NoError(err) + + for _, tc := range []struct { + desc string + msg *types.MsgBurn + expErr bool + }{ + { + desc: "Burn foo denom, valid", + msg: &types.MsgBurn{ + Authority: authority.String(), + BurnFromAddress: accAddrs[0].String(), + Amount: sdk.NewCoin(fooDenom, math.NewInt(50)), + }, + expErr: false, + }, + { + desc: "Burn foo denom, invalid authority", + msg: &types.MsgBurn{ + Authority: accAddrs[0].String(), + BurnFromAddress: accAddrs[0].String(), + Amount: sdk.NewCoin(fooDenom, math.NewInt(50)), + }, + expErr: true, + }, + { + desc: "Burn foo denom, insufficient funds", + msg: &types.MsgBurn{ + Authority: authority.String(), + BurnFromAddress: accAddrs[0].String(), + Amount: sdk.NewCoin(fooDenom, math.NewInt(200)), + }, + expErr: true, + }, + { + desc: "Burn bar denom, invalid denom", + msg: &types.MsgBurn{ + Authority: authority.String(), + BurnFromAddress: accAddrs[0].String(), + Amount: sdk.NewCoin(barDenom, math.NewInt(50)), + }, + expErr: true, + }, + { + desc: "Burn tokenfactory denom, valid", + msg: &types.MsgBurn{ + Authority: accAddrs[0].String(), + BurnFromAddress: accAddrs[0].String(), + Amount: sdk.NewCoin(newDenom, math.NewInt(50)), + }, + expErr: false, + }, + { + desc: "Burn tokenfactory denom, invalid admin", + msg: &types.MsgBurn{ + Authority: authority.String(), + BurnFromAddress: accAddrs[0].String(), + Amount: sdk.NewCoin(newDenom, math.NewInt(50)), + }, + expErr: true, + }, + { + desc: "Burn tokenfactory denom, insufficient funds", + msg: &types.MsgBurn{ + Authority: accAddrs[0].String(), + BurnFromAddress: accAddrs[0].String(), + Amount: sdk.NewCoin(newDenom, math.NewInt(150)), + }, + expErr: true, + }, + { + desc: "Burn tokenfactory denom, token not exist", + msg: &types.MsgBurn{ + Authority: authority.String(), + BurnFromAddress: accAddrs[0].String(), + Amount: sdk.NewCoin(newDenom+"s", math.NewInt(50)), + }, + expErr: true, + }, + } { + s.Run(fmt.Sprintf("Case %s", tc.desc), func() { + // Get balance before burn + fromAddr, err := s.addressCodec.StringToBytes(tc.msg.BurnFromAddress) + require.NoError(err) + + beforeBalances := s.bankKeeper.GetAllBalances(s.ctx, fromAddr) + _, err = handler.MsgBurn(s.ctx, tc.msg) + if tc.expErr { + require.Error(err) + } else { + require.NoError(err) + // Check ToAddress balance after + afterBalances := s.bankKeeper.GetAllBalances(s.ctx, fromAddr) + require.Equal(beforeBalances.Sub(afterBalances...), sdk.NewCoins(tc.msg.Amount)) + } + }) + } +} + func (s *KeeperTestSuite) TestSendHandler_TokenfactoryDenom() { s.SetupTest() require := s.Require() diff --git a/x/bank/v2/types/tx.pb.go b/x/bank/v2/types/tx.pb.go index a7cfd2f2eb01..dd2e34e3e78f 100644 --- a/x/bank/v2/types/tx.pb.go +++ b/x/bank/v2/types/tx.pb.go @@ -477,7 +477,7 @@ func (m *MsgMint) GetAmount() types.Coin { return types.Coin{} } -// MsgMint defines the response structure for executing a MsgMint message. +// MsgMintResponse defines the response structure for executing a MsgMint message. type MsgMintResponse struct { } @@ -514,6 +514,105 @@ func (m *MsgMintResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgMintResponse proto.InternalMessageInfo +// MsgBurn is the Msg/Burn request type. +type MsgBurn struct { + // authority is the address that controls the module (defaults to x/gov unless overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + BurnFromAddress string `protobuf:"bytes,2,opt,name=burn_from_address,json=burnFromAddress,proto3" json:"burn_from_address,omitempty"` + Amount types.Coin `protobuf:"bytes,3,opt,name=amount,proto3" json:"amount"` +} + +func (m *MsgBurn) Reset() { *m = MsgBurn{} } +func (m *MsgBurn) String() string { return proto.CompactTextString(m) } +func (*MsgBurn) ProtoMessage() {} +func (*MsgBurn) Descriptor() ([]byte, []int) { + return fileDescriptor_14123aa47d73c00a, []int{10} +} +func (m *MsgBurn) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgBurn) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgBurn.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 *MsgBurn) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgBurn.Merge(m, src) +} +func (m *MsgBurn) XXX_Size() int { + return m.Size() +} +func (m *MsgBurn) XXX_DiscardUnknown() { + xxx_messageInfo_MsgBurn.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgBurn proto.InternalMessageInfo + +func (m *MsgBurn) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgBurn) GetBurnFromAddress() string { + if m != nil { + return m.BurnFromAddress + } + return "" +} + +func (m *MsgBurn) GetAmount() types.Coin { + if m != nil { + return m.Amount + } + return types.Coin{} +} + +// MsgBurnResponse defines the response structure for executing a MsgBurn message. +type MsgBurnResponse struct { +} + +func (m *MsgBurnResponse) Reset() { *m = MsgBurnResponse{} } +func (m *MsgBurnResponse) String() string { return proto.CompactTextString(m) } +func (*MsgBurnResponse) ProtoMessage() {} +func (*MsgBurnResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_14123aa47d73c00a, []int{11} +} +func (m *MsgBurnResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgBurnResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgBurnResponse.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 *MsgBurnResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgBurnResponse.Merge(m, src) +} +func (m *MsgBurnResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgBurnResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgBurnResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgBurnResponse proto.InternalMessageInfo + func init() { proto.RegisterType((*MsgUpdateParams)(nil), "cosmos.bank.v2.MsgUpdateParams") proto.RegisterType((*MsgUpdateParamsResponse)(nil), "cosmos.bank.v2.MsgUpdateParamsResponse") @@ -525,52 +624,57 @@ func init() { proto.RegisterType((*MsgChangeAdminResponse)(nil), "cosmos.bank.v2.MsgChangeAdminResponse") proto.RegisterType((*MsgMint)(nil), "cosmos.bank.v2.MsgMint") proto.RegisterType((*MsgMintResponse)(nil), "cosmos.bank.v2.MsgMintResponse") + proto.RegisterType((*MsgBurn)(nil), "cosmos.bank.v2.MsgBurn") + proto.RegisterType((*MsgBurnResponse)(nil), "cosmos.bank.v2.MsgBurnResponse") } func init() { proto.RegisterFile("cosmos/bank/v2/tx.proto", fileDescriptor_14123aa47d73c00a) } var fileDescriptor_14123aa47d73c00a = []byte{ - // 640 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xbf, 0x8f, 0x12, 0x41, - 0x18, 0x65, 0x41, 0xf1, 0x18, 0xce, 0xbb, 0xdc, 0x86, 0xdc, 0x2d, 0xc4, 0xec, 0x91, 0xd5, 0x18, - 0x42, 0x72, 0xbb, 0xc2, 0xc5, 0x23, 0x62, 0xe3, 0x71, 0xc6, 0x8e, 0xc4, 0x70, 0xda, 0xd8, 0x90, - 0x81, 0x1d, 0x97, 0x0d, 0xee, 0x0c, 0xd9, 0x19, 0xe0, 0x68, 0x2d, 0xad, 0x4c, 0xec, 0xfc, 0x0b, - 0x8c, 0x85, 0xa1, 0xb0, 0xb5, 0xb3, 0xb8, 0xf2, 0x62, 0x65, 0xa5, 0x06, 0x4c, 0xf8, 0x37, 0xcc, - 0xec, 0x0c, 0xcb, 0x0f, 0x83, 0x44, 0x1a, 0x98, 0xfd, 0x7e, 0xbc, 0xef, 0x7d, 0x6f, 0xde, 0x2e, - 0x38, 0x68, 0x12, 0xea, 0x11, 0x6a, 0x35, 0x20, 0x6e, 0x5b, 0xbd, 0xa2, 0xc5, 0x2e, 0xcc, 0x8e, - 0x4f, 0x18, 0x51, 0x77, 0x44, 0xc2, 0xe4, 0x09, 0xb3, 0x57, 0xcc, 0xa4, 0x1c, 0xe2, 0x90, 0x20, - 0x65, 0xf1, 0x93, 0xa8, 0xca, 0xa4, 0x97, 0xda, 0x83, 0xea, 0x85, 0x54, 0x5d, 0xf4, 0x48, 0x34, - 0x91, 0x9a, 0x0e, 0xf5, 0xa8, 0x63, 0xf5, 0x0a, 0xfc, 0x4f, 0x26, 0xf6, 0xa0, 0xe7, 0x62, 0x62, - 0x05, 0xbf, 0x32, 0xa4, 0x87, 0x13, 0x28, 0xb2, 0x7a, 0x85, 0x06, 0x62, 0xb0, 0x60, 0x35, 0x89, - 0x8b, 0x45, 0xde, 0xf8, 0xa2, 0x80, 0xdd, 0x2a, 0x75, 0x9e, 0x77, 0x6c, 0xc8, 0xd0, 0x53, 0xe8, - 0x43, 0x8f, 0xaa, 0x27, 0x20, 0x01, 0xbb, 0xac, 0x45, 0x7c, 0x97, 0x0d, 0x34, 0x25, 0xab, 0xe4, - 0x12, 0x15, 0xed, 0xdb, 0xe7, 0xa3, 0x94, 0x24, 0x71, 0x6a, 0xdb, 0x3e, 0xa2, 0xf4, 0x9c, 0xf9, - 0x2e, 0x76, 0x6a, 0xb3, 0x52, 0xf5, 0x01, 0x88, 0x77, 0x02, 0x04, 0x2d, 0x9a, 0x55, 0x72, 0xc9, - 0xe2, 0xbe, 0xb9, 0x28, 0x82, 0x29, 0xf0, 0x2b, 0x89, 0xcb, 0x1f, 0x87, 0x91, 0x0f, 0x93, 0x61, - 0x5e, 0xa9, 0xc9, 0x86, 0x72, 0xe9, 0xf5, 0x64, 0x98, 0x9f, 0x41, 0xbd, 0x99, 0x0c, 0xf3, 0x77, - 0x44, 0xf3, 0x11, 0xb5, 0xdb, 0xd6, 0x45, 0xa8, 0xd0, 0x12, 0x57, 0x23, 0x0d, 0x0e, 0x96, 0x42, - 0x35, 0x44, 0x3b, 0x04, 0x53, 0x64, 0x7c, 0x8a, 0x82, 0x1b, 0x55, 0xea, 0x9c, 0x23, 0x6c, 0xab, - 0x0f, 0xc1, 0xf6, 0x4b, 0x9f, 0x78, 0x75, 0x28, 0xb8, 0xaf, 0xdd, 0x2a, 0xc9, 0xab, 0x65, 0x48, - 0x2d, 0x01, 0xc0, 0x48, 0xd8, 0x1a, 0x5d, 0x27, 0x08, 0x23, 0xd3, 0xc6, 0x01, 0x88, 0x43, 0x8f, - 0x74, 0x31, 0xd3, 0x62, 0xd9, 0x58, 0x2e, 0x59, 0x4c, 0xcf, 0x04, 0xa1, 0xc8, 0x94, 0xb7, 0x61, - 0x9e, 0x11, 0x17, 0x57, 0x9e, 0x70, 0x4d, 0x3e, 0xfe, 0x3c, 0xcc, 0x39, 0x2e, 0x6b, 0x75, 0x1b, - 0x66, 0x93, 0x78, 0xf2, 0xd2, 0xad, 0x39, 0x1d, 0xd8, 0xa0, 0x83, 0x68, 0xd0, 0x40, 0xdf, 0x4f, - 0x86, 0xf9, 0xed, 0x57, 0xc8, 0x81, 0xcd, 0x41, 0x9d, 0xdf, 0x27, 0x95, 0x82, 0x8a, 0x81, 0xe5, - 0x22, 0x17, 0x74, 0x61, 0x67, 0xae, 0xe9, 0xad, 0x55, 0x9a, 0x72, 0x91, 0x8c, 0xbd, 0xc0, 0x0a, - 0xfc, 0x18, 0x6a, 0xf8, 0x4e, 0x01, 0x3b, 0x55, 0xea, 0x9c, 0xf9, 0x08, 0x32, 0xf4, 0x18, 0x61, - 0xe2, 0xa9, 0xf7, 0x40, 0x9c, 0x22, 0x6c, 0x23, 0x7f, 0xad, 0x88, 0xb2, 0x4e, 0xcd, 0x80, 0x2d, - 0xda, 0x6d, 0xd8, 0xbc, 0x5b, 0xa8, 0x57, 0x0b, 0x9f, 0xcb, 0xc7, 0x9c, 0xa7, 0x2c, 0xe4, 0x0c, - 0x6f, 0xaf, 0x62, 0x38, 0x47, 0xc1, 0x78, 0x04, 0xf6, 0x17, 0x23, 0x53, 0xbe, 0xea, 0x5d, 0xb0, - 0x8b, 0x51, 0xbf, 0xce, 0x48, 0x1b, 0xe1, 0xba, 0x98, 0x18, 0xb0, 0xac, 0xdd, 0xc4, 0xa8, 0xff, - 0x8c, 0x47, 0x05, 0xc2, 0x57, 0xb9, 0x57, 0x0b, 0x62, 0x07, 0x9d, 0xda, 0x9e, 0x8b, 0x37, 0xd8, - 0x2b, 0x05, 0xae, 0xcf, 0x2f, 0x25, 0x1e, 0xd4, 0xfb, 0x20, 0xc1, 0x29, 0x40, 0x0e, 0xaa, 0xc5, - 0xd6, 0x40, 0x6d, 0x61, 0xd4, 0x0f, 0xc6, 0xff, 0x87, 0x10, 0x33, 0xce, 0x86, 0x26, 0x84, 0x98, - 0x45, 0xc2, 0x8b, 0xfb, 0xad, 0x04, 0xe6, 0xaf, 0xba, 0x98, 0x6d, 0xfc, 0x3e, 0x6f, 0xec, 0xfb, - 0xd2, 0x9c, 0xef, 0x95, 0x7f, 0xfb, 0xfe, 0x1a, 0xf7, 0x7d, 0xe8, 0x5a, 0xeb, 0xef, 0xcf, 0xc0, - 0x4a, 0xcb, 0xf2, 0xd5, 0xa4, 0x65, 0xf9, 0x71, 0xba, 0x79, 0xe5, 0xe4, 0x72, 0xa4, 0x2b, 0x57, - 0x23, 0x5d, 0xf9, 0x35, 0xd2, 0x95, 0xb7, 0x63, 0x3d, 0x72, 0x35, 0xd6, 0x23, 0xdf, 0xc7, 0x7a, - 0xe4, 0x85, 0x84, 0xa2, 0x76, 0xdb, 0x74, 0xc9, 0x1c, 0x58, 0xf0, 0x56, 0x35, 0xe2, 0xc1, 0x07, - 0xf1, 0xf8, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5f, 0x91, 0x7c, 0xa3, 0xd3, 0x05, 0x00, 0x00, + // 681 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x95, 0xbf, 0x6f, 0xd3, 0x40, + 0x14, 0xc7, 0xe3, 0x16, 0x42, 0x73, 0x2d, 0xad, 0x6a, 0x55, 0xad, 0x5b, 0x21, 0xb7, 0x32, 0x08, + 0x45, 0x91, 0x6a, 0xd3, 0x54, 0xb4, 0xa2, 0x2c, 0x34, 0xad, 0xba, 0x45, 0x42, 0x29, 0x2c, 0x2c, + 0xd6, 0x39, 0x3e, 0x1c, 0x2b, 0xf8, 0x2e, 0xf2, 0x9d, 0x93, 0x66, 0x65, 0x64, 0x42, 0x62, 0xe3, + 0x2f, 0x40, 0x0c, 0x28, 0x03, 0x2b, 0x1b, 0x43, 0xc7, 0x8a, 0x89, 0x09, 0x50, 0x82, 0x94, 0x99, + 0xff, 0x00, 0x9d, 0xef, 0xe2, 0xc4, 0x41, 0x21, 0x22, 0x03, 0x4b, 0x72, 0xf7, 0x7e, 0xdd, 0xf7, + 0x7d, 0xee, 0xe5, 0x02, 0x36, 0xaa, 0x84, 0x06, 0x84, 0x5a, 0x0e, 0xc4, 0x75, 0xab, 0x59, 0xb4, + 0xd8, 0x85, 0xd9, 0x08, 0x09, 0x23, 0xea, 0xb2, 0x70, 0x98, 0xdc, 0x61, 0x36, 0x8b, 0x5b, 0x6b, + 0x1e, 0xf1, 0x48, 0xec, 0xb2, 0xf8, 0x4a, 0x44, 0x6d, 0x6d, 0x8e, 0xa5, 0xc7, 0xd1, 0x29, 0x97, + 0x2d, 0x72, 0x64, 0x35, 0xe1, 0x1a, 0x1c, 0x1a, 0x50, 0xcf, 0x6a, 0xee, 0xf1, 0x2f, 0xe9, 0x58, + 0x85, 0x81, 0x8f, 0x89, 0x15, 0x7f, 0x4a, 0x93, 0x9e, 0x9c, 0x40, 0x91, 0xd5, 0xdc, 0x73, 0x10, + 0x83, 0x7b, 0x56, 0x95, 0xf8, 0x58, 0xf8, 0x8d, 0x4f, 0x0a, 0x58, 0x29, 0x53, 0xef, 0x69, 0xc3, + 0x85, 0x0c, 0x3d, 0x86, 0x21, 0x0c, 0xa8, 0x7a, 0x00, 0x72, 0x30, 0x62, 0x35, 0x12, 0xfa, 0xac, + 0xad, 0x29, 0x3b, 0x4a, 0x3e, 0x57, 0xd2, 0xbe, 0x7c, 0xdc, 0x5d, 0x93, 0x22, 0x8e, 0x5d, 0x37, + 0x44, 0x94, 0x9e, 0xb3, 0xd0, 0xc7, 0x5e, 0x65, 0x18, 0xaa, 0x3e, 0x00, 0xd9, 0x46, 0x5c, 0x41, + 0x9b, 0xdb, 0x51, 0xf2, 0x8b, 0xc5, 0x75, 0x33, 0x0d, 0xc1, 0x14, 0xf5, 0x4b, 0xb9, 0xcb, 0x6f, + 0xdb, 0x99, 0x77, 0xfd, 0x4e, 0x41, 0xa9, 0xc8, 0x84, 0xa3, 0xc3, 0x97, 0xfd, 0x4e, 0x61, 0x58, + 0xea, 0x55, 0xbf, 0x53, 0xb8, 0x23, 0x92, 0x77, 0xa9, 0x5b, 0xb7, 0x2e, 0x12, 0x42, 0x63, 0x5a, + 0x8d, 0x4d, 0xb0, 0x31, 0x66, 0xaa, 0x20, 0xda, 0x20, 0x98, 0x22, 0xe3, 0xc3, 0x1c, 0xb8, 0x51, + 0xa6, 0xde, 0x39, 0xc2, 0xae, 0xfa, 0x10, 0x2c, 0x3d, 0x0f, 0x49, 0x60, 0x43, 0xa1, 0x7d, 0x6a, + 0x57, 0x8b, 0x3c, 0x5a, 0x9a, 0xd4, 0x43, 0x00, 0x18, 0x49, 0x52, 0xe7, 0xa6, 0x01, 0x61, 0x64, + 0x90, 0xd8, 0x06, 0x59, 0x18, 0x90, 0x08, 0x33, 0x6d, 0x7e, 0x67, 0x3e, 0xbf, 0x58, 0xdc, 0x1c, + 0x02, 0xa1, 0xc8, 0x94, 0xb7, 0x61, 0x9e, 0x10, 0x1f, 0x97, 0xce, 0x38, 0x93, 0xf7, 0xdf, 0xb7, + 0xf3, 0x9e, 0xcf, 0x6a, 0x91, 0x63, 0x56, 0x49, 0x20, 0x2f, 0xdd, 0x1a, 0xe1, 0xc0, 0xda, 0x0d, + 0x44, 0xe3, 0x04, 0xfa, 0xb6, 0xdf, 0x29, 0x2c, 0xbd, 0x40, 0x1e, 0xac, 0xb6, 0x6d, 0x7e, 0x9f, + 0x54, 0x02, 0x15, 0x07, 0x1e, 0x15, 0x39, 0xd0, 0x54, 0xcf, 0x9c, 0xe9, 0xad, 0x49, 0x4c, 0x39, + 0x24, 0x63, 0x35, 0x1e, 0x05, 0xbe, 0x4c, 0x18, 0xbe, 0x51, 0xc0, 0x72, 0x99, 0x7a, 0x27, 0x21, + 0x82, 0x0c, 0x9d, 0x22, 0x4c, 0x02, 0xf5, 0x1e, 0xc8, 0x52, 0x84, 0x5d, 0x14, 0x4e, 0x85, 0x28, + 0xe3, 0xd4, 0x2d, 0xb0, 0x40, 0x23, 0xc7, 0xe5, 0xd9, 0x82, 0x5e, 0x25, 0xd9, 0x1f, 0xed, 0x73, + 0x9d, 0x32, 0x90, 0x2b, 0xbc, 0x3d, 0x49, 0xe1, 0x88, 0x04, 0xe3, 0x11, 0x58, 0x4f, 0x5b, 0x06, + 0x7a, 0xd5, 0xbb, 0x60, 0x05, 0xa3, 0x96, 0xcd, 0x48, 0x1d, 0x61, 0x5b, 0x9c, 0x18, 0xab, 0xac, + 0xdc, 0xc4, 0xa8, 0xf5, 0x84, 0x5b, 0x45, 0x85, 0xcf, 0xb2, 0xaf, 0x1a, 0xc4, 0x1e, 0x3a, 0x76, + 0x03, 0x1f, 0xcf, 0xd0, 0xd7, 0x1a, 0xb8, 0x3e, 0xda, 0x94, 0xd8, 0xa8, 0xf7, 0x41, 0x8e, 0x4b, + 0x80, 0xbc, 0xa8, 0x36, 0x3f, 0xa5, 0xd4, 0x02, 0x46, 0xad, 0xf8, 0xf8, 0x7f, 0x00, 0x31, 0xd4, + 0x6c, 0x68, 0x02, 0xc4, 0xd0, 0x92, 0x5c, 0xdc, 0x4f, 0x25, 0x1e, 0xfe, 0xb2, 0x8f, 0xd9, 0xcc, + 0xbf, 0xe7, 0x99, 0xe7, 0xfe, 0x70, 0x64, 0xee, 0x95, 0xbf, 0xcf, 0xfd, 0x35, 0x3e, 0xf7, 0xc9, + 0xd4, 0x5a, 0x7f, 0x3e, 0x03, 0x13, 0x47, 0x96, 0xb7, 0x26, 0x47, 0x96, 0x2f, 0x93, 0xce, 0x7f, + 0x89, 0xce, 0x4b, 0x51, 0x88, 0x67, 0xee, 0xfc, 0x14, 0xac, 0x3a, 0x51, 0x88, 0xed, 0xd4, 0x9b, + 0x31, 0x0d, 0xc0, 0x0a, 0x4f, 0x39, 0x4b, 0xbd, 0x1b, 0xff, 0x01, 0x03, 0xef, 0x53, 0x62, 0xe0, + 0xcb, 0x01, 0x86, 0xd2, 0xc1, 0x65, 0x57, 0x57, 0xae, 0xba, 0xba, 0xf2, 0xa3, 0xab, 0x2b, 0xaf, + 0x7b, 0x7a, 0xe6, 0xaa, 0xa7, 0x67, 0xbe, 0xf6, 0xf4, 0xcc, 0x33, 0x59, 0x8a, 0xba, 0x75, 0xd3, + 0x27, 0x23, 0xc5, 0xe2, 0xc7, 0xc5, 0xc9, 0xc6, 0xff, 0x0b, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0xff, + 0xff, 0xf8, 0x1e, 0xd7, 0x7c, 0xda, 0x06, 0x00, 0x00, } func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) { @@ -914,6 +1018,76 @@ func (m *MsgMintResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *MsgBurn) 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 *MsgBurn) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgBurn) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.BurnFromAddress) > 0 { + i -= len(m.BurnFromAddress) + copy(dAtA[i:], m.BurnFromAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.BurnFromAddress))) + i-- + dAtA[i] = 0x12 + } + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgBurnResponse) 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 *MsgBurnResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgBurnResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + func encodeVarintTx(dAtA []byte, offset int, v uint64) int { offset -= sovTx(v) base := offset @@ -1069,6 +1243,34 @@ func (m *MsgMintResponse) Size() (n int) { return n } +func (m *MsgBurn) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.BurnFromAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgBurnResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func sovTx(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -2027,6 +2229,203 @@ func (m *MsgMintResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgBurn) 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: MsgBurn: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgBurn: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BurnFromAddress", 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.BurnFromAddress = 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 + } + if err := m.Amount.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 *MsgBurnResponse) 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: MsgBurnResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgBurnResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipTx(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 From 4ec773ccdeff46ce78df03bb4d2989341f6b6a21 Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Thu, 31 Oct 2024 16:22:11 +0700 Subject: [PATCH 16/35] add query --- x/bank/proto/cosmos/bank/v2/query.proto | 14 + x/bank/v2/keeper/handlers.go | 20 ++ x/bank/v2/types/query.pb.go | 398 ++++++++++++++++++++++-- 3 files changed, 409 insertions(+), 23 deletions(-) diff --git a/x/bank/proto/cosmos/bank/v2/query.proto b/x/bank/proto/cosmos/bank/v2/query.proto index 4b47915b0baf..487e3f5f452b 100644 --- a/x/bank/proto/cosmos/bank/v2/query.proto +++ b/x/bank/proto/cosmos/bank/v2/query.proto @@ -6,6 +6,7 @@ import "amino/amino.proto"; import "cosmos/bank/v2/bank.proto"; import "cosmos/base/v1beta1/coin.proto"; import "cosmos_proto/cosmos.proto"; +import "cosmos/bank/v2/authorityMetadata.proto"; option go_package = "cosmossdk.io/x/bank/v2/types"; @@ -34,4 +35,17 @@ message QueryBalanceRequest { message QueryBalanceResponse { // balance is the balance of the coin. cosmos.base.v1beta1.Coin balance = 1; +} + +// QueryDenomAuthorityMetadataRequest defines the request structure for the +// DenomAuthorityMetadata gRPC query. +message QueryDenomAuthorityMetadataRequest { + string denom = 1 [(gogoproto.moretags) = "yaml:\"denom\""]; +} + +// QueryDenomAuthorityMetadataResponse defines the response structure for the +// DenomAuthorityMetadata gRPC query. +message QueryDenomAuthorityMetadataResponse { + DenomAuthorityMetadata authority_metadata = 1 + [(gogoproto.moretags) = "yaml:\"authority_metadata\"", (gogoproto.nullable) = false]; } \ No newline at end of file diff --git a/x/bank/v2/keeper/handlers.go b/x/bank/v2/keeper/handlers.go index bf4b76a86898..07af26b81329 100644 --- a/x/bank/v2/keeper/handlers.go +++ b/x/bank/v2/keeper/handlers.go @@ -262,3 +262,23 @@ func (h handlers) QueryBalance(ctx context.Context, req *types.QueryBalanceReque return &types.QueryBalanceResponse{Balance: &balance}, nil } + +// DenomAuthorityMetadata queries the authority metadata of a denom. +func (h handlers) DenomAuthorityMetadata(ctx context.Context, req *types.QueryBalanceRequest) (*types.QueryBalanceResponse, error) { + if req == nil { + return nil, errors.New("empty request") + } + + if err := sdk.ValidateDenom(req.Denom); err != nil { + return nil, status.Error(codes.InvalidArgument, err.Error()) + } + + addr, err := h.addressCodec.StringToBytes(req.Address) + if err != nil { + return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid address: %s", err) + } + + balance := h.Keeper.GetBalance(ctx, addr, req.Denom) + + return &types.QueryBalanceResponse{Balance: &balance}, nil +} diff --git a/x/bank/v2/types/query.pb.go b/x/bank/v2/types/query.pb.go index da09cfc83a44..5011d1790449 100644 --- a/x/bank/v2/types/query.pb.go +++ b/x/bank/v2/types/query.pb.go @@ -196,39 +196,139 @@ func (m *QueryBalanceResponse) GetBalance() *types.Coin { return nil } +// QueryDenomAuthorityMetadataRequest defines the request structure for the +// DenomAuthorityMetadata gRPC query. +type QueryDenomAuthorityMetadataRequest struct { + Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty" yaml:"denom"` +} + +func (m *QueryDenomAuthorityMetadataRequest) Reset() { *m = QueryDenomAuthorityMetadataRequest{} } +func (m *QueryDenomAuthorityMetadataRequest) String() string { return proto.CompactTextString(m) } +func (*QueryDenomAuthorityMetadataRequest) ProtoMessage() {} +func (*QueryDenomAuthorityMetadataRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_bf35183cd83cb842, []int{4} +} +func (m *QueryDenomAuthorityMetadataRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryDenomAuthorityMetadataRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryDenomAuthorityMetadataRequest.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 *QueryDenomAuthorityMetadataRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryDenomAuthorityMetadataRequest.Merge(m, src) +} +func (m *QueryDenomAuthorityMetadataRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryDenomAuthorityMetadataRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryDenomAuthorityMetadataRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryDenomAuthorityMetadataRequest proto.InternalMessageInfo + +func (m *QueryDenomAuthorityMetadataRequest) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +// QueryDenomAuthorityMetadataResponse defines the response structure for the +// DenomAuthorityMetadata gRPC query. +type QueryDenomAuthorityMetadataResponse struct { + AuthorityMetadata DenomAuthorityMetadata `protobuf:"bytes,1,opt,name=authority_metadata,json=authorityMetadata,proto3" json:"authority_metadata" yaml:"authority_metadata"` +} + +func (m *QueryDenomAuthorityMetadataResponse) Reset() { *m = QueryDenomAuthorityMetadataResponse{} } +func (m *QueryDenomAuthorityMetadataResponse) String() string { return proto.CompactTextString(m) } +func (*QueryDenomAuthorityMetadataResponse) ProtoMessage() {} +func (*QueryDenomAuthorityMetadataResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_bf35183cd83cb842, []int{5} +} +func (m *QueryDenomAuthorityMetadataResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryDenomAuthorityMetadataResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryDenomAuthorityMetadataResponse.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 *QueryDenomAuthorityMetadataResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryDenomAuthorityMetadataResponse.Merge(m, src) +} +func (m *QueryDenomAuthorityMetadataResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryDenomAuthorityMetadataResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryDenomAuthorityMetadataResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryDenomAuthorityMetadataResponse proto.InternalMessageInfo + +func (m *QueryDenomAuthorityMetadataResponse) GetAuthorityMetadata() DenomAuthorityMetadata { + if m != nil { + return m.AuthorityMetadata + } + return DenomAuthorityMetadata{} +} + func init() { proto.RegisterType((*QueryParamsRequest)(nil), "cosmos.bank.v2.QueryParamsRequest") proto.RegisterType((*QueryParamsResponse)(nil), "cosmos.bank.v2.QueryParamsResponse") proto.RegisterType((*QueryBalanceRequest)(nil), "cosmos.bank.v2.QueryBalanceRequest") proto.RegisterType((*QueryBalanceResponse)(nil), "cosmos.bank.v2.QueryBalanceResponse") + proto.RegisterType((*QueryDenomAuthorityMetadataRequest)(nil), "cosmos.bank.v2.QueryDenomAuthorityMetadataRequest") + proto.RegisterType((*QueryDenomAuthorityMetadataResponse)(nil), "cosmos.bank.v2.QueryDenomAuthorityMetadataResponse") } func init() { proto.RegisterFile("cosmos/bank/v2/query.proto", fileDescriptor_bf35183cd83cb842) } var fileDescriptor_bf35183cd83cb842 = []byte{ - // 345 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x51, 0x3f, 0x4b, 0xf3, 0x40, - 0x18, 0x4f, 0x5e, 0x78, 0x5b, 0x7b, 0x82, 0x60, 0x0c, 0xd2, 0x16, 0xb9, 0x4a, 0x26, 0x11, 0xbc, - 0xa3, 0x29, 0x08, 0xba, 0x19, 0x47, 0x97, 0x1a, 0x37, 0x17, 0xb9, 0x34, 0x47, 0x09, 0x35, 0xf7, - 0xa4, 0xb9, 0xb4, 0xd8, 0x6f, 0xe0, 0xe8, 0x47, 0xe8, 0xe8, 0xe8, 0xe0, 0x87, 0xe8, 0x58, 0x9c, - 0x9c, 0x44, 0x9a, 0x41, 0x3f, 0x86, 0x24, 0x77, 0xad, 0xc4, 0x25, 0xe4, 0xf9, 0xfd, 0x7b, 0x7e, - 0x79, 0x82, 0xda, 0x03, 0x90, 0x31, 0x48, 0x1a, 0x30, 0x31, 0xa2, 0x53, 0x97, 0x8e, 0x27, 0x3c, - 0x9d, 0x91, 0x24, 0x85, 0x0c, 0xac, 0x1d, 0xc5, 0x91, 0x82, 0x23, 0x53, 0xb7, 0x6d, 0x0f, 0x61, - 0x08, 0x25, 0x45, 0x8b, 0x37, 0xa5, 0x6a, 0xef, 0xb2, 0x38, 0x12, 0x40, 0xcb, 0xa7, 0x86, 0x5a, - 0x7f, 0x42, 0xcb, 0x00, 0x45, 0xe1, 0x0d, 0x25, 0x39, 0x9d, 0x76, 0x03, 0x9e, 0xb1, 0x2e, 0x1d, - 0x40, 0x24, 0xaa, 0xd6, 0x3b, 0xb5, 0x46, 0x17, 0x28, 0x07, 0xc7, 0x46, 0xd6, 0x75, 0xd1, 0xae, - 0xcf, 0x52, 0x16, 0x4b, 0x9f, 0x8f, 0x27, 0x5c, 0x66, 0x4e, 0x1f, 0xed, 0x55, 0x50, 0x99, 0x80, - 0x90, 0xdc, 0x3a, 0x43, 0xb5, 0xa4, 0x44, 0x9a, 0xe6, 0xa1, 0x79, 0xb4, 0xed, 0xee, 0x93, 0xea, - 0xc7, 0x10, 0xa5, 0xf7, 0x1a, 0x8b, 0x8f, 0x8e, 0xf1, 0xfc, 0xf5, 0x72, 0x6c, 0xfa, 0xda, 0xe0, - 0x44, 0x3a, 0xd1, 0x63, 0xf7, 0x4c, 0x0c, 0xb8, 0x5e, 0x64, 0xb9, 0xa8, 0xce, 0xc2, 0x30, 0xe5, - 0x52, 0x45, 0x36, 0xbc, 0xe6, 0xdb, 0xeb, 0x89, 0xad, 0x53, 0x2f, 0x14, 0x73, 0x93, 0xa5, 0x91, - 0x18, 0xfa, 0x6b, 0xa1, 0x65, 0xa3, 0xff, 0x21, 0x17, 0x10, 0x37, 0xff, 0x15, 0x0e, 0x5f, 0x0d, - 0xe7, 0x5b, 0x8f, 0xf3, 0x8e, 0xf1, 0x3d, 0xef, 0x18, 0xce, 0x15, 0xb2, 0xab, 0xab, 0x74, 0xfb, - 0x1e, 0xaa, 0x07, 0x0a, 0xd2, 0xf5, 0x5b, 0xbf, 0xf5, 0x25, 0x27, 0xfa, 0x6e, 0xe4, 0x12, 0x22, - 0xe1, 0xaf, 0x95, 0xde, 0xe9, 0x62, 0x85, 0xcd, 0xe5, 0x0a, 0x9b, 0x9f, 0x2b, 0x6c, 0x3e, 0xe5, - 0xd8, 0x58, 0xe6, 0xd8, 0x78, 0xcf, 0xb1, 0x71, 0x7b, 0xa0, 0xcc, 0x32, 0x1c, 0x91, 0x08, 0xe8, - 0xc3, 0xe6, 0xbf, 0x64, 0xb3, 0x84, 0xcb, 0xa0, 0x56, 0x9e, 0xb7, 0xf7, 0x13, 0x00, 0x00, 0xff, - 0xff, 0x4a, 0x63, 0x62, 0x68, 0x0b, 0x02, 0x00, 0x00, + // 447 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x41, 0x8b, 0xd3, 0x40, + 0x14, 0xc7, 0x13, 0xc1, 0x5d, 0x77, 0x14, 0x71, 0x63, 0x90, 0xb6, 0x48, 0xa2, 0x23, 0x14, 0x11, + 0x9c, 0x61, 0xb3, 0x20, 0xb8, 0xb7, 0x46, 0x6f, 0x2a, 0xd4, 0x78, 0xf3, 0x52, 0x26, 0xcd, 0x50, + 0x43, 0x9b, 0x99, 0x34, 0x33, 0x2d, 0xcd, 0x37, 0xf0, 0xe8, 0x37, 0xb0, 0x47, 0x8f, 0x1e, 0xfc, + 0x10, 0x3d, 0x16, 0x4f, 0x9e, 0x8a, 0xb4, 0x07, 0x3d, 0xf7, 0x13, 0x48, 0x32, 0x93, 0x4a, 0x52, + 0xf1, 0x52, 0x9a, 0xf7, 0x7f, 0xef, 0xf7, 0xfe, 0xef, 0xcd, 0x03, 0x9d, 0x21, 0x17, 0x09, 0x17, + 0x38, 0x24, 0x6c, 0x8c, 0xe7, 0x1e, 0x9e, 0xce, 0x68, 0x96, 0xa3, 0x34, 0xe3, 0x92, 0x5b, 0xb7, + 0x95, 0x86, 0x0a, 0x0d, 0xcd, 0xbd, 0x8e, 0x3d, 0xe2, 0x23, 0x5e, 0x4a, 0xb8, 0xf8, 0xa7, 0xb2, + 0x3a, 0xe7, 0x24, 0x89, 0x19, 0xc7, 0xe5, 0xaf, 0x0e, 0xb5, 0x1b, 0xd0, 0x12, 0xa0, 0x24, 0xe7, + 0x20, 0x09, 0x8a, 0xe7, 0x17, 0x21, 0x95, 0xe4, 0x02, 0x0f, 0x79, 0xcc, 0xea, 0xa5, 0x03, 0xd5, + 0x46, 0x1b, 0x50, 0x52, 0xb7, 0x41, 0x25, 0x33, 0xf9, 0x81, 0x67, 0xb1, 0xcc, 0xdf, 0x50, 0x49, + 0x22, 0x22, 0x89, 0xca, 0x83, 0x36, 0xb0, 0xde, 0x16, 0x53, 0xf4, 0x49, 0x46, 0x12, 0x11, 0xd0, + 0xe9, 0x8c, 0x0a, 0x09, 0xfb, 0xe0, 0x6e, 0x2d, 0x2a, 0x52, 0xce, 0x04, 0xb5, 0x9e, 0x83, 0x93, + 0xb4, 0x8c, 0xb4, 0xcc, 0x07, 0xe6, 0xe3, 0x9b, 0xde, 0x3d, 0x54, 0x1f, 0x1a, 0xa9, 0x7c, 0xff, + 0x6c, 0xb5, 0x71, 0x8d, 0x2f, 0xbf, 0xbe, 0x3e, 0x31, 0x03, 0x5d, 0x00, 0x63, 0x4d, 0xf4, 0xc9, + 0x84, 0xb0, 0x21, 0xd5, 0x8d, 0x2c, 0x0f, 0x9c, 0x92, 0x28, 0xca, 0xa8, 0x50, 0xc8, 0x33, 0xbf, + 0xf5, 0xfd, 0xdb, 0x53, 0x5b, 0x53, 0x7b, 0x4a, 0x79, 0x27, 0xb3, 0x98, 0x8d, 0x82, 0x2a, 0xd1, + 0xb2, 0xc1, 0xf5, 0x88, 0x32, 0x9e, 0xb4, 0xae, 0x15, 0x15, 0x81, 0xfa, 0xb8, 0xba, 0xf1, 0x71, + 0xe9, 0x1a, 0xbf, 0x97, 0xae, 0x01, 0x5f, 0x01, 0xbb, 0xde, 0x4a, 0xbb, 0xbf, 0x04, 0xa7, 0xa1, + 0x0a, 0x69, 0xfb, 0xed, 0xbf, 0xf6, 0x05, 0x45, 0x7a, 0xbf, 0xe8, 0x05, 0x8f, 0x59, 0x50, 0x65, + 0xc2, 0xd7, 0x00, 0x96, 0xb0, 0x97, 0x45, 0x93, 0x5e, 0x73, 0x89, 0xd5, 0x18, 0xdd, 0xca, 0x92, + 0x1a, 0xe2, 0xce, 0x7e, 0xe3, 0xde, 0xca, 0x49, 0x32, 0xb9, 0x82, 0x65, 0x18, 0x6a, 0x93, 0xf0, + 0xb3, 0x09, 0x1e, 0xfd, 0x17, 0xa7, 0xad, 0x2e, 0x80, 0x75, 0x78, 0xb0, 0x41, 0xa2, 0x55, 0xed, + 0xba, 0xdb, 0x5c, 0xfa, 0xbf, 0x59, 0xfe, 0xc3, 0xe2, 0x11, 0xf6, 0x1b, 0xb7, 0xad, 0x8c, 0x1c, + 0xf3, 0x60, 0x70, 0x7e, 0x74, 0x15, 0xfe, 0xb3, 0xd5, 0xd6, 0x31, 0xd7, 0x5b, 0xc7, 0xfc, 0xb9, + 0x75, 0xcc, 0x4f, 0x3b, 0xc7, 0x58, 0xef, 0x1c, 0xe3, 0xc7, 0xce, 0x31, 0xde, 0xdf, 0x57, 0x6d, + 0x45, 0x34, 0x46, 0x31, 0xc7, 0x8b, 0xc3, 0x65, 0xc9, 0x3c, 0xa5, 0x22, 0x3c, 0x29, 0xcf, 0xe9, + 0xf2, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x82, 0xed, 0xc0, 0x71, 0x23, 0x03, 0x00, 0x00, } func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { @@ -359,6 +459,69 @@ func (m *QueryBalanceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *QueryDenomAuthorityMetadataRequest) 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 *QueryDenomAuthorityMetadataRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDenomAuthorityMetadataRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryDenomAuthorityMetadataResponse) 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 *QueryDenomAuthorityMetadataResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDenomAuthorityMetadataResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.AuthorityMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { offset -= sovQuery(v) base := offset @@ -420,6 +583,30 @@ func (m *QueryBalanceResponse) Size() (n int) { return n } +func (m *QueryDenomAuthorityMetadataRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryDenomAuthorityMetadataResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.AuthorityMetadata.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + func sovQuery(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -759,6 +946,171 @@ func (m *QueryBalanceResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *QueryDenomAuthorityMetadataRequest) 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 ErrIntOverflowQuery + } + 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: QueryDenomAuthorityMetadataRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryDenomAuthorityMetadataRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryDenomAuthorityMetadataResponse) 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 ErrIntOverflowQuery + } + 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: QueryDenomAuthorityMetadataResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryDenomAuthorityMetadataResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthorityMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.AuthorityMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipQuery(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 From 9ae0291d676101dbb0316e4470f7e905d3749c1f Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Mon, 4 Nov 2024 21:17:45 +0700 Subject: [PATCH 17/35] test denom creation --- tests/systemtests/bankv2_test.go | 44 ++++++++++++++++++++++++++++++++ tests/systemtests/genesis_io.go | 10 ++++++++ x/bank/v2/keeper/handlers.go | 4 +-- x/bank/v2/types/codec.go | 1 + x/bank/v2/types/params.go | 3 ++- 5 files changed, 58 insertions(+), 4 deletions(-) diff --git a/tests/systemtests/bankv2_test.go b/tests/systemtests/bankv2_test.go index b753ee0be430..9e7b7464e830 100644 --- a/tests/systemtests/bankv2_test.go +++ b/tests/systemtests/bankv2_test.go @@ -6,6 +6,7 @@ import ( "fmt" "testing" + "cosmossdk.io/math" "github.com/stretchr/testify/require" "github.com/tidwall/gjson" ) @@ -56,3 +57,46 @@ func TestBankV2SendTxCmd(t *testing.T) { receiverBalance := gjson.Get(receiverRaw, "balance.amount").Int() require.Equal(t, receiverBalance, transferAmount) } + +func TestCreateDenom(t *testing.T) { + // Currently only run with app v2 + if !isV2() { + t.Skip() + } + // given a running chain + + sut.ResetChain(t) + cli := NewCLIWrapper(t, sut, verbose) + + // add new key + denom := "stake" + subDenom := "test" + feeAmount := math.NewInt(1000000) + + sut.ModifyGenesisJSON( + t, + SetDenomCreationFee(t, "stake", feeAmount), + ) + + // get validator address + valAddr := gjson.Get(cli.Keys("keys", "list"), "1.address").String() + require.NotEmpty(t, valAddr) + + sut.StartChain(t) + + raw := cli.CustomQuery("q", "bankv2", "balance", valAddr, denom) + valBalanceBefore := gjson.Get(raw, "balance.amount").Int() + fmt.Println("valBalance", valBalanceBefore) + + rsp := cli.Run("tx", "bankv2", "create-denom", subDenom, "--from", valAddr) + txResult, found := cli.AwaitTxCommitted(rsp) + fmt.Println("txResult", txResult) + require.True(t, found) + RequireTxSuccess(t, txResult) + + raw = cli.CustomQuery("q", "bankv2", "balance", valAddr, denom) + valBalanceAfter := gjson.Get(raw, "balance.amount").Int() + fmt.Println("valBalanceAfter", valBalanceAfter) + + require.Equal(t, valBalanceBefore - valBalanceAfter, feeAmount.Int64()) +} diff --git a/tests/systemtests/genesis_io.go b/tests/systemtests/genesis_io.go index f3a61e54a2dd..b3b229f904a2 100644 --- a/tests/systemtests/genesis_io.go +++ b/tests/systemtests/genesis_io.go @@ -9,6 +9,7 @@ import ( "github.com/tidwall/gjson" "github.com/tidwall/sjson" + "cosmossdk.io/math" sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" @@ -42,6 +43,15 @@ func SetGovExpeditedVotingPeriod(t *testing.T, period time.Duration) GenesisMuta } } +func SetDenomCreationFee(t *testing.T, denom string, amount math.Int) GenesisMutator { + t.Helper() + return func(genesis []byte) []byte { + state, err := sjson.SetBytes(genesis, "app_state.bankv2.params.denom_creation_fee", sdk.NewCoins(sdk.NewCoin(denom, amount))) + require.NoError(t, err) + return []byte(state) + } +} + // GetGenesisBalance return the balance amount for an address from the given genesis json func GetGenesisBalance(rawGenesis []byte, addr string) sdk.Coins { var r []sdk.Coin diff --git a/x/bank/v2/keeper/handlers.go b/x/bank/v2/keeper/handlers.go index 07af26b81329..2957f22d9011 100644 --- a/x/bank/v2/keeper/handlers.go +++ b/x/bank/v2/keeper/handlers.go @@ -52,9 +52,7 @@ func (h handlers) MsgUpdateParams(ctx context.Context, msg *types.MsgUpdateParam return &types.MsgUpdateParamsResponse{}, nil } -func (h handlers) MsgCreateDenom(goCtx context.Context, msg *types.MsgCreateDenom) (*types.MsgCreateDenomResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - +func (h handlers) MsgCreateDenom(ctx context.Context, msg *types.MsgCreateDenom) (*types.MsgCreateDenomResponse, error) { denom, err := h.Keeper.CreateDenom(ctx, msg.Sender, msg.Subdenom) if err != nil { return nil, err diff --git a/x/bank/v2/types/codec.go b/x/bank/v2/types/codec.go index 78bca6f3b34b..8ff3d0628ff5 100644 --- a/x/bank/v2/types/codec.go +++ b/x/bank/v2/types/codec.go @@ -9,5 +9,6 @@ func RegisterInterfaces(registrar registry.InterfaceRegistrar) { registrar.RegisterImplementations((*transaction.Msg)(nil), &MsgUpdateParams{}, &MsgSend{}, + &MsgCreateDenom{}, ) } diff --git a/x/bank/v2/types/params.go b/x/bank/v2/types/params.go index a3facbe62d3d..bebe1550abf1 100644 --- a/x/bank/v2/types/params.go +++ b/x/bank/v2/types/params.go @@ -3,6 +3,7 @@ package types import ( fmt "fmt" + "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -16,7 +17,7 @@ func NewParams(denomCreationFee sdk.Coins, gasConsume uint64) Params { // DefaultParams is the default parameter configuration for the bank/v2 module func DefaultParams() Params { - return NewParams(sdk.NewCoins(), 1_000_000) + return NewParams(sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, math.NewInt(1_000_000))), 1_000_000) } // Validate all bank/v2 module parameters From 3d937ca0b583e082d2c4cbb083e3fbff1e09e661 Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Mon, 4 Nov 2024 21:25:35 +0700 Subject: [PATCH 18/35] add create denom tx cmd --- x/bank/v2/client/cli/tx.go | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/x/bank/v2/client/cli/tx.go b/x/bank/v2/client/cli/tx.go index b131c7b62b01..2eba00f86935 100644 --- a/x/bank/v2/client/cli/tx.go +++ b/x/bank/v2/client/cli/tx.go @@ -24,6 +24,7 @@ func NewTxCmd() *cobra.Command { txCmd.AddCommand( NewSendTxCmd(), + NewCreateDenomTxCmd(), ) return txCmd @@ -63,3 +64,34 @@ When using '--dry-run' a key name cannot be used, only a bech32 address. return cmd } + +// NewCreateDenomTxCmd returns a CLI command handler for creating a MsgCreateDenom transaction. +func NewCreateDenomTxCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "create-denom [subdenom]", + Short: "Create new tokenfactory denom", + Long: `Create new tokenfactory denom. +Note, the '--from' flag is ignored as it is implied from [from_key_or_address]. +When using '--dry-run' a key name cannot be used, only a bech32 address. +`, + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + fromAddr := clientCtx.GetFromAddress() + + msg := &types.MsgCreateDenom{ + Sender: fromAddr.String(), + Subdenom: args[0], + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} From 0bfe528b884730a1c5da4a3eac2aa3175c920fe5 Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Mon, 4 Nov 2024 23:09:33 +0700 Subject: [PATCH 19/35] add more query and tests --- tests/systemtests/bankv2_test.go | 10 + x/bank/proto/cosmos/bank/v2/query.proto | 18 +- x/bank/v2/client/cli/query.go | 76 +++++ x/bank/v2/keeper/handlers.go | 31 +- x/bank/v2/module.go | 2 + x/bank/v2/types/query.pb.go | 412 ++++++++++++++++++++++-- 6 files changed, 507 insertions(+), 42 deletions(-) diff --git a/tests/systemtests/bankv2_test.go b/tests/systemtests/bankv2_test.go index 9e7b7464e830..c46c54e47be8 100644 --- a/tests/systemtests/bankv2_test.go +++ b/tests/systemtests/bankv2_test.go @@ -99,4 +99,14 @@ func TestCreateDenom(t *testing.T) { fmt.Println("valBalanceAfter", valBalanceAfter) require.Equal(t, valBalanceBefore - valBalanceAfter, feeAmount.Int64()) + + raw = cli.CustomQuery("q", "bankv2", "denoms-from-creator", valAddr) + denoms := gjson.Get(raw, "denoms").Array() + require.Equal(t, len(denoms), 1) + fmt.Println("denoms", raw) + + raw = cli.CustomQuery("q", "bankv2", "denom-authority-metadata", denoms[0].String()) + admin := gjson.Get(raw, "authority_metadata.admin").String() + require.Equal(t, len(denoms), 1) + fmt.Println("authority", raw) } diff --git a/x/bank/proto/cosmos/bank/v2/query.proto b/x/bank/proto/cosmos/bank/v2/query.proto index 487e3f5f452b..c2ebaba89287 100644 --- a/x/bank/proto/cosmos/bank/v2/query.proto +++ b/x/bank/proto/cosmos/bank/v2/query.proto @@ -40,12 +40,24 @@ message QueryBalanceResponse { // QueryDenomAuthorityMetadataRequest defines the request structure for the // DenomAuthorityMetadata gRPC query. message QueryDenomAuthorityMetadataRequest { - string denom = 1 [(gogoproto.moretags) = "yaml:\"denom\""]; + string denom = 1; } // QueryDenomAuthorityMetadataResponse defines the response structure for the // DenomAuthorityMetadata gRPC query. message QueryDenomAuthorityMetadataResponse { - DenomAuthorityMetadata authority_metadata = 1 - [(gogoproto.moretags) = "yaml:\"authority_metadata\"", (gogoproto.nullable) = false]; + DenomAuthorityMetadata authority_metadata = 1 [(gogoproto.nullable) = false]; +} + +// QueryDenomsFromCreatorRequest defines the request structure for the +// QueryDenomsFromCreator gRPC query. +message QueryDenomsFromCreatorRequest { + string creator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + ; +} + +// QueryDenomsFromCreatorResponse defines the response structure for the +// QueryDenomsFromCreator gRPC query. +message QueryDenomsFromCreatorResponse { + repeated string denoms = 1; } \ No newline at end of file diff --git a/x/bank/v2/client/cli/query.go b/x/bank/v2/client/cli/query.go index 2bc0af45f35e..6346ea3a81e9 100644 --- a/x/bank/v2/client/cli/query.go +++ b/x/bank/v2/client/cli/query.go @@ -31,6 +31,8 @@ func GetQueryCmd() *cobra.Command { cmd.AddCommand( GetBalanceCmd(), + GetDenomAuthorityMetadataCmd(), + GetDenomsFromCreatorCmd(), ) return cmd @@ -77,3 +79,77 @@ func GetBalanceCmd() *cobra.Command { return cmd } + +func GetDenomAuthorityMetadataCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "denom-authority-metadata [denom]", + Short: "Query denom authority metadata", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + + denom := args[0] + if denom == "" { + return errors.New("empty denom") + } + + ctx := cmd.Context() + + req := &types.QueryDenomAuthorityMetadataRequest{ + Denom: denom, + } + out := new(types.QueryDenomAuthorityMetadataResponse) + + err = clientCtx.Invoke(ctx, gogoproto.MessageName(&types.QueryDenomAuthorityMetadataRequest{}), req, out) + if err != nil { + return err + } + + return clientCtx.PrintProto(out) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +func GetDenomsFromCreatorCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "denoms-from-creator [creator]", + Short: "Query all denoms created by creator", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + + creator := args[0] + if creator == "" { + return errors.New("empty creator") + } + + ctx := cmd.Context() + + req := &types.QueryDenomsFromCreatorRequest{ + Creator: creator, + } + out := new(types.QueryDenomsFromCreatorResponse) + + err = clientCtx.Invoke(ctx, gogoproto.MessageName(&types.QueryDenomsFromCreatorRequest{}), req, out) + if err != nil { + return err + } + + return clientCtx.PrintProto(out) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} diff --git a/x/bank/v2/keeper/handlers.go b/x/bank/v2/keeper/handlers.go index 2957f22d9011..1819253b780b 100644 --- a/x/bank/v2/keeper/handlers.go +++ b/x/bank/v2/keeper/handlers.go @@ -262,21 +262,36 @@ func (h handlers) QueryBalance(ctx context.Context, req *types.QueryBalanceReque } // DenomAuthorityMetadata queries the authority metadata of a denom. -func (h handlers) DenomAuthorityMetadata(ctx context.Context, req *types.QueryBalanceRequest) (*types.QueryBalanceResponse, error) { +func (h handlers) QueryDenomAuthorityMetadata(ctx context.Context, req *types.QueryDenomAuthorityMetadataRequest) (*types.QueryDenomAuthorityMetadataResponse, error) { if req == nil { return nil, errors.New("empty request") } - if err := sdk.ValidateDenom(req.Denom); err != nil { - return nil, status.Error(codes.InvalidArgument, err.Error()) + authorityMetadata, err := h.GetAuthorityMetadata(ctx, req.GetDenom()) + if err != nil { + return nil, err } - addr, err := h.addressCodec.StringToBytes(req.Address) - if err != nil { - return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid address: %s", err) + return &types.QueryDenomAuthorityMetadataResponse{AuthorityMetadata: authorityMetadata}, nil +} + +// DenomsFromCreator queries all denom created by creator. +func (h handlers) QueryDenomsFromCreator(ctx context.Context, req *types.QueryDenomsFromCreatorRequest) (*types.QueryDenomsFromCreatorResponse, error) { + if req == nil { + return nil, errors.New("empty request") } - balance := h.Keeper.GetBalance(ctx, addr, req.Denom) + denoms := []string{} - return &types.QueryBalanceResponse{Balance: &balance}, nil + err := h.Keeper.denomAuthority.Walk(ctx, nil, func (denom string, authority types.DenomAuthorityMetadata) (stop bool, err error) { + if authority.Admin == req.Creator { + denoms = append(denoms, denom) + } + return false, nil + }) + if err != nil { + return nil, err + } + + return &types.QueryDenomsFromCreatorResponse{Denoms: denoms}, nil } diff --git a/x/bank/v2/module.go b/x/bank/v2/module.go index 8d44c81fc488..bfdf9c5e068a 100644 --- a/x/bank/v2/module.go +++ b/x/bank/v2/module.go @@ -108,6 +108,8 @@ func (am AppModule) RegisterQueryHandlers(router appmodulev2.QueryRouter) { appmodulev2.RegisterMsgHandler(router, handlers.QueryParams) appmodulev2.RegisterMsgHandler(router, handlers.QueryBalance) + appmodulev2.RegisterMsgHandler(router, handlers.QueryDenomAuthorityMetadata) + appmodulev2.RegisterMsgHandler(router, handlers.QueryDenomsFromCreator) } // GetTxCmd returns the root tx command for the bank/v2 module. diff --git a/x/bank/v2/types/query.pb.go b/x/bank/v2/types/query.pb.go index 5011d1790449..be70ec47174d 100644 --- a/x/bank/v2/types/query.pb.go +++ b/x/bank/v2/types/query.pb.go @@ -199,7 +199,7 @@ func (m *QueryBalanceResponse) GetBalance() *types.Coin { // QueryDenomAuthorityMetadataRequest defines the request structure for the // DenomAuthorityMetadata gRPC query. type QueryDenomAuthorityMetadataRequest struct { - Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty" yaml:"denom"` + Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"` } func (m *QueryDenomAuthorityMetadataRequest) Reset() { *m = QueryDenomAuthorityMetadataRequest{} } @@ -245,7 +245,7 @@ func (m *QueryDenomAuthorityMetadataRequest) GetDenom() string { // QueryDenomAuthorityMetadataResponse defines the response structure for the // DenomAuthorityMetadata gRPC query. type QueryDenomAuthorityMetadataResponse struct { - AuthorityMetadata DenomAuthorityMetadata `protobuf:"bytes,1,opt,name=authority_metadata,json=authorityMetadata,proto3" json:"authority_metadata" yaml:"authority_metadata"` + AuthorityMetadata DenomAuthorityMetadata `protobuf:"bytes,1,opt,name=authority_metadata,json=authorityMetadata,proto3" json:"authority_metadata"` } func (m *QueryDenomAuthorityMetadataResponse) Reset() { *m = QueryDenomAuthorityMetadataResponse{} } @@ -288,6 +288,98 @@ func (m *QueryDenomAuthorityMetadataResponse) GetAuthorityMetadata() DenomAuthor return DenomAuthorityMetadata{} } +// QueryDenomsFromCreatorRequest defines the request structure for the +// QueryDenomsFromCreator gRPC query. +type QueryDenomsFromCreatorRequest struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` +} + +func (m *QueryDenomsFromCreatorRequest) Reset() { *m = QueryDenomsFromCreatorRequest{} } +func (m *QueryDenomsFromCreatorRequest) String() string { return proto.CompactTextString(m) } +func (*QueryDenomsFromCreatorRequest) ProtoMessage() {} +func (*QueryDenomsFromCreatorRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_bf35183cd83cb842, []int{6} +} +func (m *QueryDenomsFromCreatorRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryDenomsFromCreatorRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryDenomsFromCreatorRequest.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 *QueryDenomsFromCreatorRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryDenomsFromCreatorRequest.Merge(m, src) +} +func (m *QueryDenomsFromCreatorRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryDenomsFromCreatorRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryDenomsFromCreatorRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryDenomsFromCreatorRequest proto.InternalMessageInfo + +func (m *QueryDenomsFromCreatorRequest) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +// QueryDenomsFromCreatorResponse defines the response structure for the +// QueryDenomsFromCreator gRPC query. +type QueryDenomsFromCreatorResponse struct { + Denoms []string `protobuf:"bytes,1,rep,name=denoms,proto3" json:"denoms,omitempty"` +} + +func (m *QueryDenomsFromCreatorResponse) Reset() { *m = QueryDenomsFromCreatorResponse{} } +func (m *QueryDenomsFromCreatorResponse) String() string { return proto.CompactTextString(m) } +func (*QueryDenomsFromCreatorResponse) ProtoMessage() {} +func (*QueryDenomsFromCreatorResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_bf35183cd83cb842, []int{7} +} +func (m *QueryDenomsFromCreatorResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryDenomsFromCreatorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryDenomsFromCreatorResponse.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 *QueryDenomsFromCreatorResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryDenomsFromCreatorResponse.Merge(m, src) +} +func (m *QueryDenomsFromCreatorResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryDenomsFromCreatorResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryDenomsFromCreatorResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryDenomsFromCreatorResponse proto.InternalMessageInfo + +func (m *QueryDenomsFromCreatorResponse) GetDenoms() []string { + if m != nil { + return m.Denoms + } + return nil +} + func init() { proto.RegisterType((*QueryParamsRequest)(nil), "cosmos.bank.v2.QueryParamsRequest") proto.RegisterType((*QueryParamsResponse)(nil), "cosmos.bank.v2.QueryParamsResponse") @@ -295,40 +387,44 @@ func init() { proto.RegisterType((*QueryBalanceResponse)(nil), "cosmos.bank.v2.QueryBalanceResponse") proto.RegisterType((*QueryDenomAuthorityMetadataRequest)(nil), "cosmos.bank.v2.QueryDenomAuthorityMetadataRequest") proto.RegisterType((*QueryDenomAuthorityMetadataResponse)(nil), "cosmos.bank.v2.QueryDenomAuthorityMetadataResponse") + proto.RegisterType((*QueryDenomsFromCreatorRequest)(nil), "cosmos.bank.v2.QueryDenomsFromCreatorRequest") + proto.RegisterType((*QueryDenomsFromCreatorResponse)(nil), "cosmos.bank.v2.QueryDenomsFromCreatorResponse") } func init() { proto.RegisterFile("cosmos/bank/v2/query.proto", fileDescriptor_bf35183cd83cb842) } var fileDescriptor_bf35183cd83cb842 = []byte{ - // 447 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x41, 0x8b, 0xd3, 0x40, - 0x14, 0xc7, 0x13, 0xc1, 0x5d, 0x77, 0x14, 0x71, 0x63, 0x90, 0xb6, 0x48, 0xa2, 0x23, 0x14, 0x11, - 0x9c, 0x61, 0xb3, 0x20, 0xb8, 0xb7, 0x46, 0x6f, 0x2a, 0xd4, 0x78, 0xf3, 0x52, 0x26, 0xcd, 0x50, - 0x43, 0x9b, 0x99, 0x34, 0x33, 0x2d, 0xcd, 0x37, 0xf0, 0xe8, 0x37, 0xb0, 0x47, 0x8f, 0x1e, 0xfc, - 0x10, 0x3d, 0x16, 0x4f, 0x9e, 0x8a, 0xb4, 0x07, 0x3d, 0xf7, 0x13, 0x48, 0x32, 0x93, 0x4a, 0x52, - 0xf1, 0x52, 0x9a, 0xf7, 0x7f, 0xef, 0xf7, 0xfe, 0xef, 0xcd, 0x03, 0x9d, 0x21, 0x17, 0x09, 0x17, - 0x38, 0x24, 0x6c, 0x8c, 0xe7, 0x1e, 0x9e, 0xce, 0x68, 0x96, 0xa3, 0x34, 0xe3, 0x92, 0x5b, 0xb7, - 0x95, 0x86, 0x0a, 0x0d, 0xcd, 0xbd, 0x8e, 0x3d, 0xe2, 0x23, 0x5e, 0x4a, 0xb8, 0xf8, 0xa7, 0xb2, - 0x3a, 0xe7, 0x24, 0x89, 0x19, 0xc7, 0xe5, 0xaf, 0x0e, 0xb5, 0x1b, 0xd0, 0x12, 0xa0, 0x24, 0xe7, - 0x20, 0x09, 0x8a, 0xe7, 0x17, 0x21, 0x95, 0xe4, 0x02, 0x0f, 0x79, 0xcc, 0xea, 0xa5, 0x03, 0xd5, - 0x46, 0x1b, 0x50, 0x52, 0xb7, 0x41, 0x25, 0x33, 0xf9, 0x81, 0x67, 0xb1, 0xcc, 0xdf, 0x50, 0x49, - 0x22, 0x22, 0x89, 0xca, 0x83, 0x36, 0xb0, 0xde, 0x16, 0x53, 0xf4, 0x49, 0x46, 0x12, 0x11, 0xd0, - 0xe9, 0x8c, 0x0a, 0x09, 0xfb, 0xe0, 0x6e, 0x2d, 0x2a, 0x52, 0xce, 0x04, 0xb5, 0x9e, 0x83, 0x93, - 0xb4, 0x8c, 0xb4, 0xcc, 0x07, 0xe6, 0xe3, 0x9b, 0xde, 0x3d, 0x54, 0x1f, 0x1a, 0xa9, 0x7c, 0xff, - 0x6c, 0xb5, 0x71, 0x8d, 0x2f, 0xbf, 0xbe, 0x3e, 0x31, 0x03, 0x5d, 0x00, 0x63, 0x4d, 0xf4, 0xc9, - 0x84, 0xb0, 0x21, 0xd5, 0x8d, 0x2c, 0x0f, 0x9c, 0x92, 0x28, 0xca, 0xa8, 0x50, 0xc8, 0x33, 0xbf, - 0xf5, 0xfd, 0xdb, 0x53, 0x5b, 0x53, 0x7b, 0x4a, 0x79, 0x27, 0xb3, 0x98, 0x8d, 0x82, 0x2a, 0xd1, - 0xb2, 0xc1, 0xf5, 0x88, 0x32, 0x9e, 0xb4, 0xae, 0x15, 0x15, 0x81, 0xfa, 0xb8, 0xba, 0xf1, 0x71, - 0xe9, 0x1a, 0xbf, 0x97, 0xae, 0x01, 0x5f, 0x01, 0xbb, 0xde, 0x4a, 0xbb, 0xbf, 0x04, 0xa7, 0xa1, - 0x0a, 0x69, 0xfb, 0xed, 0xbf, 0xf6, 0x05, 0x45, 0x7a, 0xbf, 0xe8, 0x05, 0x8f, 0x59, 0x50, 0x65, - 0xc2, 0xd7, 0x00, 0x96, 0xb0, 0x97, 0x45, 0x93, 0x5e, 0x73, 0x89, 0xd5, 0x18, 0xdd, 0xca, 0x92, - 0x1a, 0xe2, 0xce, 0x7e, 0xe3, 0xde, 0xca, 0x49, 0x32, 0xb9, 0x82, 0x65, 0x18, 0x6a, 0x93, 0xf0, - 0xb3, 0x09, 0x1e, 0xfd, 0x17, 0xa7, 0xad, 0x2e, 0x80, 0x75, 0x78, 0xb0, 0x41, 0xa2, 0x55, 0xed, - 0xba, 0xdb, 0x5c, 0xfa, 0xbf, 0x59, 0xfe, 0xc3, 0xe2, 0x11, 0xf6, 0x1b, 0xb7, 0xad, 0x8c, 0x1c, - 0xf3, 0x60, 0x70, 0x7e, 0x74, 0x15, 0xfe, 0xb3, 0xd5, 0xd6, 0x31, 0xd7, 0x5b, 0xc7, 0xfc, 0xb9, - 0x75, 0xcc, 0x4f, 0x3b, 0xc7, 0x58, 0xef, 0x1c, 0xe3, 0xc7, 0xce, 0x31, 0xde, 0xdf, 0x57, 0x6d, - 0x45, 0x34, 0x46, 0x31, 0xc7, 0x8b, 0xc3, 0x65, 0xc9, 0x3c, 0xa5, 0x22, 0x3c, 0x29, 0xcf, 0xe9, - 0xf2, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x82, 0xed, 0xc0, 0x71, 0x23, 0x03, 0x00, 0x00, + // 469 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x4d, 0x6b, 0xd4, 0x40, + 0x18, 0xce, 0xf8, 0xb1, 0x75, 0x47, 0x10, 0x1a, 0x43, 0xd9, 0x2e, 0x3a, 0x2b, 0x23, 0x94, 0x22, + 0x38, 0x43, 0x53, 0x10, 0xed, 0xad, 0xa9, 0x78, 0x11, 0xa1, 0xa6, 0x37, 0x3d, 0x94, 0x49, 0x32, + 0xac, 0xa1, 0x66, 0x26, 0x9d, 0x99, 0x5d, 0xdc, 0xab, 0x27, 0x8f, 0xfe, 0x84, 0x1e, 0x3d, 0x7a, + 0xf0, 0x47, 0xf4, 0x58, 0x3c, 0x79, 0x12, 0xd9, 0x3d, 0xe8, 0xcf, 0x90, 0x64, 0x66, 0xd3, 0x26, + 0x7e, 0xf4, 0x12, 0x32, 0xef, 0xf3, 0xbc, 0xcf, 0xfb, 0xbc, 0x1f, 0x70, 0x98, 0x4a, 0x5d, 0x48, + 0x4d, 0x13, 0x26, 0x8e, 0xe8, 0x34, 0xa4, 0xc7, 0x13, 0xae, 0x66, 0xa4, 0x54, 0xd2, 0x48, 0xff, + 0x96, 0xc5, 0x48, 0x85, 0x91, 0x69, 0x38, 0x0c, 0xc6, 0x72, 0x2c, 0x6b, 0x88, 0x56, 0x7f, 0x96, + 0x35, 0x5c, 0x65, 0x45, 0x2e, 0x24, 0xad, 0xbf, 0x2e, 0xb4, 0xde, 0x11, 0xad, 0x05, 0x2c, 0x84, + 0x1a, 0x48, 0x73, 0x3a, 0xdd, 0x4a, 0xb8, 0x61, 0x5b, 0x34, 0x95, 0xb9, 0x68, 0xa7, 0x1e, 0xda, + 0x32, 0xce, 0x80, 0x85, 0x36, 0x3a, 0xaa, 0x6c, 0x62, 0xde, 0x48, 0x95, 0x9b, 0xd9, 0x0b, 0x6e, + 0x58, 0xc6, 0x0c, 0xb3, 0x3c, 0x1c, 0x40, 0xff, 0x65, 0xd5, 0xc5, 0x3e, 0x53, 0xac, 0xd0, 0x31, + 0x3f, 0x9e, 0x70, 0x6d, 0xf0, 0x3e, 0xbc, 0xdd, 0x8a, 0xea, 0x52, 0x0a, 0xcd, 0xfd, 0x27, 0xb0, + 0x57, 0xd6, 0x91, 0x01, 0xb8, 0x07, 0x36, 0x6f, 0x86, 0x6b, 0xa4, 0xdd, 0x34, 0xb1, 0xfc, 0xa8, + 0x7f, 0xfa, 0x7d, 0xe4, 0x7d, 0xfa, 0xf9, 0xf9, 0x01, 0x88, 0x5d, 0x02, 0xce, 0x9d, 0x62, 0xc4, + 0xde, 0x32, 0x91, 0x72, 0x57, 0xc8, 0x0f, 0xe1, 0x0a, 0xcb, 0x32, 0xc5, 0xb5, 0x95, 0xec, 0x47, + 0x83, 0xaf, 0x5f, 0x1e, 0x06, 0x4e, 0x75, 0xd7, 0x22, 0x07, 0x46, 0xe5, 0x62, 0x1c, 0x2f, 0x89, + 0x7e, 0x00, 0xaf, 0x67, 0x5c, 0xc8, 0x62, 0x70, 0xa5, 0xca, 0x88, 0xed, 0x63, 0xe7, 0xc6, 0x87, + 0x93, 0x91, 0xf7, 0xeb, 0x64, 0xe4, 0xe1, 0xe7, 0x30, 0x68, 0x97, 0x72, 0xee, 0xb7, 0xe1, 0x4a, + 0x62, 0x43, 0xce, 0xfe, 0xfa, 0xb9, 0x7d, 0xcd, 0x89, 0x9b, 0x2f, 0xd9, 0x93, 0xb9, 0x88, 0x97, + 0x4c, 0xbc, 0x03, 0x71, 0x2d, 0xf6, 0xb4, 0x2a, 0xb2, 0xdb, 0x1d, 0xe2, 0xb2, 0x8d, 0xc6, 0x12, + 0xb8, 0x60, 0x09, 0xbf, 0x07, 0xf0, 0xfe, 0x7f, 0x93, 0x9d, 0xb1, 0xd7, 0xd0, 0x6f, 0xd6, 0x73, + 0x58, 0x38, 0xd4, 0x79, 0xdc, 0xe8, 0x8e, 0xf8, 0xef, 0x5a, 0xd1, 0xb5, 0x6a, 0xe4, 0xf1, 0xea, + 0x1f, 0x6b, 0xc6, 0x07, 0xf0, 0xee, 0xb9, 0x07, 0xfd, 0x4c, 0xc9, 0x62, 0x4f, 0x71, 0x66, 0xa4, + 0xba, 0xb0, 0x82, 0xd4, 0x46, 0x2e, 0x5f, 0x81, 0x23, 0xe2, 0xc7, 0x10, 0xfd, 0x4b, 0xd4, 0xf5, + 0xb4, 0x06, 0x7b, 0xf5, 0x10, 0xaa, 0xbd, 0x5e, 0xdd, 0xec, 0xc7, 0xee, 0x15, 0x3d, 0x3a, 0x9d, + 0x23, 0x70, 0x36, 0x47, 0xe0, 0xc7, 0x1c, 0x81, 0x8f, 0x0b, 0xe4, 0x9d, 0x2d, 0x90, 0xf7, 0x6d, + 0x81, 0xbc, 0x57, 0x77, 0x6c, 0x49, 0x9d, 0x1d, 0x91, 0x5c, 0xd2, 0x77, 0xcd, 0xe5, 0x9a, 0x59, + 0xc9, 0x75, 0xd2, 0xab, 0xcf, 0x75, 0xfb, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd1, 0x0c, 0xfa, + 0x65, 0x83, 0x03, 0x00, 0x00, } func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { @@ -522,6 +618,68 @@ func (m *QueryDenomAuthorityMetadataResponse) MarshalToSizedBuffer(dAtA []byte) return len(dAtA) - i, nil } +func (m *QueryDenomsFromCreatorRequest) 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 *QueryDenomsFromCreatorRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDenomsFromCreatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryDenomsFromCreatorResponse) 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 *QueryDenomsFromCreatorResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDenomsFromCreatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Denoms) > 0 { + for iNdEx := len(m.Denoms) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Denoms[iNdEx]) + copy(dAtA[i:], m.Denoms[iNdEx]) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Denoms[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { offset -= sovQuery(v) base := offset @@ -607,6 +765,34 @@ func (m *QueryDenomAuthorityMetadataResponse) Size() (n int) { return n } +func (m *QueryDenomsFromCreatorRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryDenomsFromCreatorResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Denoms) > 0 { + for _, s := range m.Denoms { + l = len(s) + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + func sovQuery(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -1111,6 +1297,170 @@ func (m *QueryDenomAuthorityMetadataResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *QueryDenomsFromCreatorRequest) 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 ErrIntOverflowQuery + } + 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: QueryDenomsFromCreatorRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryDenomsFromCreatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryDenomsFromCreatorResponse) 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 ErrIntOverflowQuery + } + 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: QueryDenomsFromCreatorResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryDenomsFromCreatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denoms", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denoms = append(m.Denoms, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipQuery(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 From 73eaed38ea959ce73b9bffe3c5e6f2ced88eb5a1 Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Tue, 5 Nov 2024 15:10:24 +0700 Subject: [PATCH 20/35] test mint --- tests/systemtests/bankv2_test.go | 55 ++++++++++++++++++++++++++++++-- x/bank/v2/client/cli/tx.go | 51 +++++++++++++++++++++++++++++ x/bank/v2/types/codec.go | 1 + 3 files changed, 105 insertions(+), 2 deletions(-) diff --git a/tests/systemtests/bankv2_test.go b/tests/systemtests/bankv2_test.go index c46c54e47be8..29e15181a2b6 100644 --- a/tests/systemtests/bankv2_test.go +++ b/tests/systemtests/bankv2_test.go @@ -75,7 +75,7 @@ func TestCreateDenom(t *testing.T) { sut.ModifyGenesisJSON( t, - SetDenomCreationFee(t, "stake", feeAmount), + SetDenomCreationFee(t, denom, feeAmount), ) // get validator address @@ -107,6 +107,57 @@ func TestCreateDenom(t *testing.T) { raw = cli.CustomQuery("q", "bankv2", "denom-authority-metadata", denoms[0].String()) admin := gjson.Get(raw, "authority_metadata.admin").String() - require.Equal(t, len(denoms), 1) + require.Equal(t, admin, valAddr) fmt.Println("authority", raw) } + +func TestMintTokenCmd(t *testing.T) { + // Currently only run with app v2 + if !isV2() { + t.Skip() + } + // given a running chain + + sut.ResetChain(t) + cli := NewCLIWrapper(t, sut, verbose) + + // add new key + denom := "stake" + subDenom := "test" + feeAmount := math.NewInt(1000000) + mintAmount := 1000000 + + sut.ModifyGenesisJSON( + t, + SetDenomCreationFee(t, denom, feeAmount), + ) + + // get validator address + valAddr := gjson.Get(cli.Keys("keys", "list"), "1.address").String() + require.NotEmpty(t, valAddr) + + // add new key + receiverAddr := cli.AddKey("account1") + + sut.StartChain(t) + + + rsp := cli.Run("tx", "bankv2", "create-denom", subDenom, "--from", valAddr) + txResult, found := cli.AwaitTxCommitted(rsp) + require.True(t, found) + RequireTxSuccess(t, txResult) + + raw := cli.CustomQuery("q", "bankv2", "denoms-from-creator", valAddr) + denoms := gjson.Get(raw, "denoms").Array() + require.Equal(t, len(denoms), 1) + fmt.Println("denoms", raw) + + rsp = cli.Run("tx", "bankv2", "mint",valAddr, receiverAddr, fmt.Sprintf("%d%s", mintAmount, denoms[0])) + txResult, found = cli.AwaitTxCommitted(rsp) + fmt.Println("mint result", txResult) + require.True(t, found) + RequireTxSuccess(t, txResult) + + raw = cli.CustomQuery("q", "bankv2", "balance", receiverAddr, denoms[0].String()) + fmt.Println("raw balance after mint", raw) +} diff --git a/x/bank/v2/client/cli/tx.go b/x/bank/v2/client/cli/tx.go index 2eba00f86935..5d38ede91482 100644 --- a/x/bank/v2/client/cli/tx.go +++ b/x/bank/v2/client/cli/tx.go @@ -1,6 +1,8 @@ package cli import ( + "fmt" + "github.com/spf13/cobra" "cosmossdk.io/x/bank/v2/types" @@ -25,6 +27,7 @@ func NewTxCmd() *cobra.Command { txCmd.AddCommand( NewSendTxCmd(), NewCreateDenomTxCmd(), + NewMintCmd(), ) return txCmd @@ -81,6 +84,11 @@ When using '--dry-run' a key name cannot be used, only a bech32 address. return err } + subDenom := args[0] + if subDenom == "" { + return fmt.Errorf("empty denom") + } + fromAddr := clientCtx.GetFromAddress() msg := &types.MsgCreateDenom{ @@ -95,3 +103,46 @@ When using '--dry-run' a key name cannot be used, only a bech32 address. return cmd } + +// NewMintCmd returns a CLI command handler for creating a MsgMint transaction. +func NewMintCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "mint [sender] [mint_to] [amount]", + Short: "Mint a denom to an address. Must have admin authority to do so.", + Long: `Mint a denom to an address. Must have admin authority to do so.. +Note, the '--from' flag is ignored as it is implied from [from_key_or_address]. +When using '--dry-run' a key name cannot be used, only a bech32 address. +`, + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) error { + if err := cmd.Flags().Set(flags.FlagFrom, args[0]); err != nil { + return err + } + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + toAddr := args[1] + if toAddr == "" { + return fmt.Errorf("Mint to address is empty") + } + + coin, err := sdk.ParseCoinNormalized(args[2]) + if err != nil { + return err + } + + msg := &types.MsgMint{ + Authority: clientCtx.GetFromAddress().String(), + ToAddress: toAddr, + Amount: coin, + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} diff --git a/x/bank/v2/types/codec.go b/x/bank/v2/types/codec.go index 8ff3d0628ff5..f6d388ced57d 100644 --- a/x/bank/v2/types/codec.go +++ b/x/bank/v2/types/codec.go @@ -10,5 +10,6 @@ func RegisterInterfaces(registrar registry.InterfaceRegistrar) { &MsgUpdateParams{}, &MsgSend{}, &MsgCreateDenom{}, + &MsgMint{}, ) } From f7c130ced89f711cfaf3077c2ad76c54c875fe62 Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Tue, 5 Nov 2024 19:56:31 +0700 Subject: [PATCH 21/35] pass mint cmd & mint proposal --- tests/systemtests/bankv2_test.go | 149 +++++++++++++++++++++++++++---- 1 file changed, 133 insertions(+), 16 deletions(-) diff --git a/tests/systemtests/bankv2_test.go b/tests/systemtests/bankv2_test.go index 29e15181a2b6..d4857344959f 100644 --- a/tests/systemtests/bankv2_test.go +++ b/tests/systemtests/bankv2_test.go @@ -5,6 +5,7 @@ package systemtests import ( "fmt" "testing" + "time" "cosmossdk.io/math" "github.com/stretchr/testify/require" @@ -86,7 +87,6 @@ func TestCreateDenom(t *testing.T) { raw := cli.CustomQuery("q", "bankv2", "balance", valAddr, denom) valBalanceBefore := gjson.Get(raw, "balance.amount").Int() - fmt.Println("valBalance", valBalanceBefore) rsp := cli.Run("tx", "bankv2", "create-denom", subDenom, "--from", valAddr) txResult, found := cli.AwaitTxCommitted(rsp) @@ -96,19 +96,16 @@ func TestCreateDenom(t *testing.T) { raw = cli.CustomQuery("q", "bankv2", "balance", valAddr, denom) valBalanceAfter := gjson.Get(raw, "balance.amount").Int() - fmt.Println("valBalanceAfter", valBalanceAfter) - require.Equal(t, valBalanceBefore - valBalanceAfter, feeAmount.Int64()) + require.Equal(t, valBalanceBefore-valBalanceAfter, feeAmount.Int64()) raw = cli.CustomQuery("q", "bankv2", "denoms-from-creator", valAddr) - denoms := gjson.Get(raw, "denoms").Array() - require.Equal(t, len(denoms), 1) - fmt.Println("denoms", raw) + newDenoms := gjson.Get(raw, "denoms").Array() + require.Equal(t, len(newDenoms), 1) - raw = cli.CustomQuery("q", "bankv2", "denom-authority-metadata", denoms[0].String()) + raw = cli.CustomQuery("q", "bankv2", "denom-authority-metadata", newDenoms[0].String()) admin := gjson.Get(raw, "authority_metadata.admin").String() require.Equal(t, admin, valAddr) - fmt.Println("authority", raw) } func TestMintTokenCmd(t *testing.T) { @@ -141,23 +138,143 @@ func TestMintTokenCmd(t *testing.T) { sut.StartChain(t) - rsp := cli.Run("tx", "bankv2", "create-denom", subDenom, "--from", valAddr) txResult, found := cli.AwaitTxCommitted(rsp) require.True(t, found) RequireTxSuccess(t, txResult) raw := cli.CustomQuery("q", "bankv2", "denoms-from-creator", valAddr) - denoms := gjson.Get(raw, "denoms").Array() - require.Equal(t, len(denoms), 1) - fmt.Println("denoms", raw) + newDenoms := gjson.Get(raw, "denoms").Array() + require.Equal(t, len(newDenoms), 1) - rsp = cli.Run("tx", "bankv2", "mint",valAddr, receiverAddr, fmt.Sprintf("%d%s", mintAmount, denoms[0])) + rsp = cli.Run("tx", "bankv2", "mint", valAddr, receiverAddr, fmt.Sprintf("%d%s", mintAmount, newDenoms[0])) txResult, found = cli.AwaitTxCommitted(rsp) - fmt.Println("mint result", txResult) require.True(t, found) RequireTxSuccess(t, txResult) - raw = cli.CustomQuery("q", "bankv2", "balance", receiverAddr, denoms[0].String()) - fmt.Println("raw balance after mint", raw) + raw = cli.CustomQuery("q", "bankv2", "balance", receiverAddr, newDenoms[0].String()) + balance := gjson.Get(raw, "balance.amount").Int() + require.Equal(t, balance, int64(mintAmount)) +} + +func TestMintTokenProposal(t *testing.T) { + // Currently only run with app v2 + if !isV2() { + t.Skip() + } + // given a running chain + + sut.ResetChain(t) + cli := NewCLIWrapper(t, sut, verbose) + + // add new key + denom := "stake" + subDenom := "test" + mintAmount := 1000000 + + sut.ModifyGenesisJSON( + t, + SetGovVotingPeriod(t, time.Second*8), + SetGovExpeditedVotingPeriod(t, time.Second*7), + ) + + // get validator address + valAddr := cli.GetKeyAddr("node0") + require.NotEmpty(t, valAddr) + + valAddr1 := cli.GetKeyAddr("node1") + require.NotEmpty(t, valAddr1) + + // add new key + receiverAddr := cli.AddKey("account1") + + sut.StartChain(t) + + // get gov module address + resp := cli.CustomQuery("q", "auth", "module-account", "gov") + govAddr := gjson.Get(resp, "account.value.address").String() + + rsp := cli.Run("tx", "bankv2", "create-denom", subDenom, "--from", valAddr) + txResult, found := cli.AwaitTxCommitted(rsp) + require.True(t, found) + RequireTxSuccess(t, txResult) + + raw := cli.CustomQuery("q", "bankv2", "denoms-from-creator", valAddr) + newDenoms := gjson.Get(raw, "denoms").Array() + require.Equal(t, len(newDenoms), 1) + fmt.Println("denoms", raw) + + + invalidProposal := fmt.Sprintf(` + { + "messages": [ + { + "@type": "/cosmos.bank.v2.MsgMint", + "authority": "%s", + "to_address": "%s", + "amount": { + "denom": "%s", + "amount": "%d" + } + } + ], + "metadata": "ipfs://CID", + "deposit": "100000000stake", + "title": "mint tokenfactory token", + "summary": "testing" +}`, govAddr, receiverAddr, newDenoms[0], mintAmount) + + invalidProposalFile := StoreTempFile(t, []byte(invalidProposal)) + rsp = cli.RunAndWait("tx", "gov", "submit-proposal", invalidProposalFile.Name(), "--from", valAddr) + RequireTxSuccess(t, rsp) + + // vote to proposal from two validators + rsp = cli.RunAndWait("tx", "gov", "vote", "1", "yes", "--from", valAddr) + RequireTxSuccess(t, rsp) + rsp = cli.RunAndWait("tx", "gov", "vote", "1", "yes", "--from", valAddr1) + RequireTxSuccess(t, rsp) + + time.Sleep(8 * time.Second) + + // Token should not be minted to receiver + raw = cli.CustomQuery("q", "bankv2", "balance", receiverAddr, newDenoms[0].String()) + balance := gjson.Get(raw, "balance.amount").Int() + require.Equal(t, balance, int64(0)) + + validProposal := fmt.Sprintf(` + { + "messages": [ + { + "@type": "/cosmos.bank.v2.MsgMint", + "authority": "%s", + "to_address": "%s", + "amount": { + "denom": "%s", + "amount": "%d" + } + } + ], + "metadata": "ipfs://CID", + "deposit": "100000000stake", + "title": "mint tokenfactory token", + "summary": "testing" +}`, govAddr, receiverAddr, denom, mintAmount) + + proposalFile := StoreTempFile(t, []byte(validProposal)) + + rsp = cli.RunAndWait("tx", "gov", "submit-proposal", proposalFile.Name(), "--from", valAddr) + RequireTxSuccess(t, rsp) + + // vote to proposal from two validators + rsp = cli.RunAndWait("tx", "gov", "vote", "2", "yes", "--from", valAddr) + RequireTxSuccess(t, rsp) + rsp = cli.RunAndWait("tx", "gov", "vote", "2", "yes", "--from", valAddr1) + RequireTxSuccess(t, rsp) + + time.Sleep(8 * time.Second) + + // stake should be minted to receiver + raw = cli.CustomQuery("q", "bankv2", "balance", receiverAddr, denom) + balance = gjson.Get(raw, "balance.amount").Int() + require.Equal(t, balance, int64(mintAmount)) } From 3c33c55575fc1ba639d583855ec331ca06e16ada Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Thu, 7 Nov 2024 15:23:05 +0700 Subject: [PATCH 22/35] burn msg & cmd --- x/bank/v2/client/cli/tx.go | 46 +++++++++++++++++++++++++++++++++++++- x/bank/v2/module.go | 1 + x/bank/v2/types/codec.go | 1 + 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/x/bank/v2/client/cli/tx.go b/x/bank/v2/client/cli/tx.go index 5d38ede91482..e8dc6d4b3ee1 100644 --- a/x/bank/v2/client/cli/tx.go +++ b/x/bank/v2/client/cli/tx.go @@ -28,6 +28,7 @@ func NewTxCmd() *cobra.Command { NewSendTxCmd(), NewCreateDenomTxCmd(), NewMintCmd(), + NewBurnCmd(), ) return txCmd @@ -125,7 +126,7 @@ When using '--dry-run' a key name cannot be used, only a bech32 address. toAddr := args[1] if toAddr == "" { - return fmt.Errorf("Mint to address is empty") + return fmt.Errorf("mint to address is empty") } coin, err := sdk.ParseCoinNormalized(args[2]) @@ -146,3 +147,46 @@ When using '--dry-run' a key name cannot be used, only a bech32 address. return cmd } + +// NewBurnCmd returns a CLI command handler for creating a MsgBurn transaction. +func NewBurnCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "burn [sender] [burn_from] [amount]", + Short: "Burn a token denom from an address. Must have admin authority to do so.", + Long: `Burn a token denom from an address. Must have admin authority to do so.. +Note, the '--from' flag is ignored as it is implied from [from_key_or_address]. +When using '--dry-run' a key name cannot be used, only a bech32 address. +`, + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) error { + if err := cmd.Flags().Set(flags.FlagFrom, args[0]); err != nil { + return err + } + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + fromAddr := args[1] + if fromAddr == "" { + return fmt.Errorf("burn from address is empty") + } + + coin, err := sdk.ParseCoinNormalized(args[2]) + if err != nil { + return err + } + + msg := &types.MsgBurn{ + Authority: clientCtx.GetFromAddress().String(), + BurnFromAddress: fromAddr, + Amount: coin, + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} diff --git a/x/bank/v2/module.go b/x/bank/v2/module.go index bfdf9c5e068a..c9bffa00d95d 100644 --- a/x/bank/v2/module.go +++ b/x/bank/v2/module.go @@ -98,6 +98,7 @@ func (am AppModule) RegisterMsgHandlers(router appmodulev2.MsgRouter) { appmodulev2.RegisterMsgHandler(router, handlers.MsgUpdateParams) appmodulev2.RegisterMsgHandler(router, handlers.MsgSend) appmodulev2.RegisterMsgHandler(router, handlers.MsgMint) + appmodulev2.RegisterMsgHandler(router, handlers.MsgBurn) appmodulev2.RegisterMsgHandler(router, handlers.MsgCreateDenom) appmodulev2.RegisterMsgHandler(router, handlers.MsgChangeAdmin) } diff --git a/x/bank/v2/types/codec.go b/x/bank/v2/types/codec.go index f6d388ced57d..8d15d8adce9e 100644 --- a/x/bank/v2/types/codec.go +++ b/x/bank/v2/types/codec.go @@ -11,5 +11,6 @@ func RegisterInterfaces(registrar registry.InterfaceRegistrar) { &MsgSend{}, &MsgCreateDenom{}, &MsgMint{}, + &MsgBurn{}, ) } From f391ffec6a8a24ed5b470c9cd79820d5bb88b60e Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Thu, 7 Nov 2024 15:23:33 +0700 Subject: [PATCH 23/35] burn systemtest --- tests/systemtests/bankv2_test.go | 79 +++++++++++++++++++++++++++----- 1 file changed, 67 insertions(+), 12 deletions(-) diff --git a/tests/systemtests/bankv2_test.go b/tests/systemtests/bankv2_test.go index d4857344959f..d34dded8722e 100644 --- a/tests/systemtests/bankv2_test.go +++ b/tests/systemtests/bankv2_test.go @@ -108,7 +108,7 @@ func TestCreateDenom(t *testing.T) { require.Equal(t, admin, valAddr) } -func TestMintTokenCmd(t *testing.T) { +func TestMintBurnTokenCmd(t *testing.T) { // Currently only run with app v2 if !isV2() { t.Skip() @@ -121,8 +121,9 @@ func TestMintTokenCmd(t *testing.T) { // add new key denom := "stake" subDenom := "test" - feeAmount := math.NewInt(1000000) - mintAmount := 1000000 + feeAmount := math.NewInt(1_000_000) + mintAmount := 1_000_000 + burnAmount := 500_000 sut.ModifyGenesisJSON( t, @@ -147,6 +148,13 @@ func TestMintTokenCmd(t *testing.T) { newDenoms := gjson.Get(raw, "denoms").Array() require.Equal(t, len(newDenoms), 1) + // non tokenfactory should not be minted directly + rsp = cli.Run("tx", "bankv2", "mint", valAddr, receiverAddr, fmt.Sprintf("%d%s", mintAmount, denom)) + code := gjson.Get(rsp, "code").Int() + require.NotEqual(t, code, int64(0)) + rawLog := gjson.Get(rsp, "raw_log").String() + require.Contains(t, rawLog, "invalid authority") + rsp = cli.Run("tx", "bankv2", "mint", valAddr, receiverAddr, fmt.Sprintf("%d%s", mintAmount, newDenoms[0])) txResult, found = cli.AwaitTxCommitted(rsp) require.True(t, found) @@ -155,9 +163,19 @@ func TestMintTokenCmd(t *testing.T) { raw = cli.CustomQuery("q", "bankv2", "balance", receiverAddr, newDenoms[0].String()) balance := gjson.Get(raw, "balance.amount").Int() require.Equal(t, balance, int64(mintAmount)) + + // Burn token from receiver + rsp = cli.Run("tx", "bankv2", "burn", valAddr, receiverAddr, fmt.Sprintf("%d%s", burnAmount, newDenoms[0])) + txResult, found = cli.AwaitTxCommitted(rsp) + require.True(t, found) + RequireTxSuccess(t, txResult) + + raw = cli.CustomQuery("q", "bankv2", "balance", receiverAddr, newDenoms[0].String()) + balance = gjson.Get(raw, "balance.amount").Int() + require.Equal(t, balance, int64(mintAmount-burnAmount)) } -func TestMintTokenProposal(t *testing.T) { +func TestMintBurnTokenProposal(t *testing.T) { // Currently only run with app v2 if !isV2() { t.Skip() @@ -170,7 +188,8 @@ func TestMintTokenProposal(t *testing.T) { // add new key denom := "stake" subDenom := "test" - mintAmount := 1000000 + mintAmount := 1_000_000 + burnAmount := 500_000 sut.ModifyGenesisJSON( t, @@ -204,8 +223,7 @@ func TestMintTokenProposal(t *testing.T) { require.Equal(t, len(newDenoms), 1) fmt.Println("denoms", raw) - - invalidProposal := fmt.Sprintf(` + invalidMintProposal := fmt.Sprintf(` { "messages": [ { @@ -224,8 +242,8 @@ func TestMintTokenProposal(t *testing.T) { "summary": "testing" }`, govAddr, receiverAddr, newDenoms[0], mintAmount) - invalidProposalFile := StoreTempFile(t, []byte(invalidProposal)) - rsp = cli.RunAndWait("tx", "gov", "submit-proposal", invalidProposalFile.Name(), "--from", valAddr) + invalidMintProposalFile := StoreTempFile(t, []byte(invalidMintProposal)) + rsp = cli.RunAndWait("tx", "gov", "submit-proposal", invalidMintProposalFile.Name(), "--from", valAddr) RequireTxSuccess(t, rsp) // vote to proposal from two validators @@ -241,7 +259,7 @@ func TestMintTokenProposal(t *testing.T) { balance := gjson.Get(raw, "balance.amount").Int() require.Equal(t, balance, int64(0)) - validProposal := fmt.Sprintf(` + validMintProposal := fmt.Sprintf(` { "messages": [ { @@ -260,9 +278,9 @@ func TestMintTokenProposal(t *testing.T) { "summary": "testing" }`, govAddr, receiverAddr, denom, mintAmount) - proposalFile := StoreTempFile(t, []byte(validProposal)) + mintProposalFile := StoreTempFile(t, []byte(validMintProposal)) - rsp = cli.RunAndWait("tx", "gov", "submit-proposal", proposalFile.Name(), "--from", valAddr) + rsp = cli.RunAndWait("tx", "gov", "submit-proposal", mintProposalFile.Name(), "--from", valAddr) RequireTxSuccess(t, rsp) // vote to proposal from two validators @@ -277,4 +295,41 @@ func TestMintTokenProposal(t *testing.T) { raw = cli.CustomQuery("q", "bankv2", "balance", receiverAddr, denom) balance = gjson.Get(raw, "balance.amount").Int() require.Equal(t, balance, int64(mintAmount)) + + validBurnProposal := fmt.Sprintf(` + { + "messages": [ + { + "@type": "/cosmos.bank.v2.MsgBurn", + "authority": "%s", + "burn_from_address": "%s", + "amount": { + "denom": "%s", + "amount": "%d" + } + } + ], + "metadata": "ipfs://CID", + "deposit": "100000000stake", + "title": "mint tokenfactory token", + "summary": "testing" +}`, govAddr, receiverAddr, denom, burnAmount) + + burnProposalFile := StoreTempFile(t, []byte(validBurnProposal)) + + rsp = cli.RunAndWait("tx", "gov", "submit-proposal", burnProposalFile.Name(), "--from", valAddr) + RequireTxSuccess(t, rsp) + + // vote to proposal from two validators + rsp = cli.RunAndWait("tx", "gov", "vote", "3", "yes", "--from", valAddr) + RequireTxSuccess(t, rsp) + rsp = cli.RunAndWait("tx", "gov", "vote", "3", "yes", "--from", valAddr1) + RequireTxSuccess(t, rsp) + + time.Sleep(8 * time.Second) + + // stake should be burned from receiver + raw = cli.CustomQuery("q", "bankv2", "balance", receiverAddr, denom) + balance = gjson.Get(raw, "balance.amount").Int() + require.Equal(t, balance, int64(mintAmount-burnAmount)) } From 03b04389072456d668f2538be279ab1f0b424720 Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Thu, 7 Nov 2024 15:23:42 +0700 Subject: [PATCH 24/35] unused --- x/bank/v2/keeper/creators.go | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 x/bank/v2/keeper/creators.go diff --git a/x/bank/v2/keeper/creators.go b/x/bank/v2/keeper/creators.go deleted file mode 100644 index bf2763af4c3b..000000000000 --- a/x/bank/v2/keeper/creators.go +++ /dev/null @@ -1,28 +0,0 @@ -package keeper - -// import ( -// storetypes "cosmossdk.io/store/types" -// sdk "github.com/cosmos/cosmos-sdk/types" -// ) - -// func (k Keeper) addDenomFromCreator(ctx sdk.Context, creator, denom string) { -// store := k.GetCreatorPrefixStore(ctx, creator) -// store.Set([]byte(denom), []byte(denom)) -// } - -// func (k Keeper) getDenomsFromCreator(ctx sdk.Context, creator string) []string { -// store := k.GetCreatorPrefixStore(ctx, creator) - -// iterator := store.Iterator(nil, nil) -// defer iterator.Close() - -// denoms := []string{} -// for ; iterator.Valid(); iterator.Next() { -// denoms = append(denoms, string(iterator.Key())) -// } -// return denoms -// } - -// func (k Keeper) GetAllDenomsIterator(ctx sdk.Context) storetypes.Iterator { -// return k.GetCreatorsPrefixStore(ctx).Iterator(nil, nil) -// } From 23a27030b897b4d94b2b460328e0218c6c47726e Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Thu, 7 Nov 2024 15:34:47 +0700 Subject: [PATCH 25/35] lint --- x/bank/v2/client/cli/tx.go | 6 +++--- x/bank/v2/keeper/handlers.go | 2 +- x/bank/v2/keeper/keeper.go | 3 +-- x/bank/v2/keeper/keeper_test.go | 30 ++++++++++++++++-------------- x/bank/v2/types/params.go | 1 + 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/x/bank/v2/client/cli/tx.go b/x/bank/v2/client/cli/tx.go index e8dc6d4b3ee1..dcdeaf9b526d 100644 --- a/x/bank/v2/client/cli/tx.go +++ b/x/bank/v2/client/cli/tx.go @@ -137,7 +137,7 @@ When using '--dry-run' a key name cannot be used, only a bech32 address. msg := &types.MsgMint{ Authority: clientCtx.GetFromAddress().String(), ToAddress: toAddr, - Amount: coin, + Amount: coin, } return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, @@ -178,9 +178,9 @@ When using '--dry-run' a key name cannot be used, only a bech32 address. } msg := &types.MsgBurn{ - Authority: clientCtx.GetFromAddress().String(), + Authority: clientCtx.GetFromAddress().String(), BurnFromAddress: fromAddr, - Amount: coin, + Amount: coin, } return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, diff --git a/x/bank/v2/keeper/handlers.go b/x/bank/v2/keeper/handlers.go index 1819253b780b..7c9b8c961dce 100644 --- a/x/bank/v2/keeper/handlers.go +++ b/x/bank/v2/keeper/handlers.go @@ -283,7 +283,7 @@ func (h handlers) QueryDenomsFromCreator(ctx context.Context, req *types.QueryDe denoms := []string{} - err := h.Keeper.denomAuthority.Walk(ctx, nil, func (denom string, authority types.DenomAuthorityMetadata) (stop bool, err error) { + err := h.Keeper.denomAuthority.Walk(ctx, nil, func(denom string, authority types.DenomAuthorityMetadata) (stop bool, err error) { if authority.Admin == req.Creator { denoms = append(denoms, denom) } diff --git a/x/bank/v2/keeper/keeper.go b/x/bank/v2/keeper/keeper.go index 27cee49b77e2..9255ffe33f16 100644 --- a/x/bank/v2/keeper/keeper.go +++ b/x/bank/v2/keeper/keeper.go @@ -94,9 +94,8 @@ func (k Keeper) MintCoins(ctx context.Context, addr []byte, amounts sdk.Coins) e // BurnCoins burns coins deletes coins from the balance of an account. // An error is returned if the module account does not exist or is unauthorized. func (k Keeper) BurnCoins(ctx context.Context, address []byte, amounts sdk.Coins) error { - // TODO: Burn restriction & permission - + if !amounts.IsValid() { return errorsmod.Wrap(sdkerrors.ErrInvalidCoins, amounts.String()) } diff --git a/x/bank/v2/keeper/keeper_test.go b/x/bank/v2/keeper/keeper_test.go index 43998bd1a826..792384734c5a 100644 --- a/x/bank/v2/keeper/keeper_test.go +++ b/x/bank/v2/keeper/keeper_test.go @@ -17,7 +17,6 @@ import ( "cosmossdk.io/x/bank/v2/keeper" banktestutil "cosmossdk.io/x/bank/v2/testutil" "cosmossdk.io/x/bank/v2/types" - banktypes "cosmossdk.io/x/bank/v2/types" codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" "github.com/cosmos/cosmos-sdk/runtime" @@ -34,7 +33,7 @@ const ( var ( burnerAcc = authtypes.NewEmptyModuleAccount(authtypes.Burner, authtypes.Burner, authtypes.Staking) - mintAcc = authtypes.NewEmptyModuleAccount(banktypes.MintModuleName, authtypes.Minter) + mintAcc = authtypes.NewEmptyModuleAccount(types.MintModuleName, authtypes.Minter) accAddrs = []sdk.AccAddress{ sdk.AccAddress([]byte("addr1_______________")), @@ -66,7 +65,7 @@ func TestKeeperTestSuite(t *testing.T) { } func (suite *KeeperTestSuite) SetupTest() { - key := storetypes.NewKVStoreKey(banktypes.StoreKey) + key := storetypes.NewKVStoreKey(types.StoreKey) testCtx := testutil.DefaultContextWithDB(suite.T(), key, storetypes.NewTransientStoreKey("transient_test")) ctx := testCtx.Ctx.WithHeaderInfo(header.Info{Time: time.Now()}) encCfg := moduletestutil.MakeTestEncodingConfig(codectestutil.CodecOptions{}) @@ -244,15 +243,15 @@ func (s *KeeperTestSuite) TestCreateDenom() { var ( primaryDenom = "foo" secondaryDenom = "bar" - defaultDenomCreationFee = banktypes.Params{DenomCreationFee: sdk.NewCoins(sdk.NewCoin(primaryDenom, math.NewInt(50_000_000)))} - twoDenomCreationFee = banktypes.Params{DenomCreationFee: sdk.NewCoins(sdk.NewCoin(primaryDenom, math.NewInt(50_000_000)), sdk.NewCoin(secondaryDenom, math.NewInt(50_000_000)))} - nilCreationFee = banktypes.Params{DenomCreationFee: nil} - largeCreationFee = banktypes.Params{DenomCreationFee: sdk.NewCoins(sdk.NewCoin(primaryDenom, math.NewInt(5_000_000_000)))} + defaultDenomCreationFee = types.Params{DenomCreationFee: sdk.NewCoins(sdk.NewCoin(primaryDenom, math.NewInt(50_000_000)))} + twoDenomCreationFee = types.Params{DenomCreationFee: sdk.NewCoins(sdk.NewCoin(primaryDenom, math.NewInt(50_000_000)), sdk.NewCoin(secondaryDenom, math.NewInt(50_000_000)))} + nilCreationFee = types.Params{DenomCreationFee: nil} + largeCreationFee = types.Params{DenomCreationFee: sdk.NewCoins(sdk.NewCoin(primaryDenom, math.NewInt(5_000_000_000)))} ) for _, tc := range []struct { desc string - denomCreationFee banktypes.Params + denomCreationFee types.Params setup func() subdenom string valid bool @@ -331,8 +330,8 @@ func (s *KeeperTestSuite) TestCreateDenom() { // Make sure that the denom metadata is initialized correctly metadata, found := s.bankKeeper.GetDenomMetaData(s.ctx, newDenom) s.Require().True(found) - s.Require().Equal(banktypes.Metadata{ - DenomUnits: []*banktypes.DenomUnit{{ + s.Require().Equal(types.Metadata{ + DenomUnits: []*types.DenomUnit{{ Denom: newDenom, Exponent: 0, }}, @@ -395,7 +394,7 @@ func (s *KeeperTestSuite) TestCreateDenom_GasConsume() { s.SetupTest() s.Run(fmt.Sprintf("Case %s", tc.desc), func() { // set params with the gas consume amount - s.Require().NoError(s.bankKeeper.SetParams(s.ctx, banktypes.NewParams(nil, tc.gasConsume))) + s.Require().NoError(s.bankKeeper.SetParams(s.ctx, types.NewParams(nil, tc.gasConsume))) // amount of gas consumed prior to the denom creation gasConsumedBefore := s.bankKeeper.Environment.GasService.GasMeter(s.ctx).Consumed() @@ -418,9 +417,10 @@ func (s *KeeperTestSuite) TestCreateDenom_GasConsume() { func (s *KeeperTestSuite) TestMintHandler() { s.SetupTest() require := s.Require() - s.bankKeeper.SetParams(s.ctx, types.Params{ + err := s.bankKeeper.SetParams(s.ctx, types.Params{ DenomCreationFee: sdk.NewCoins(sdk.NewCoin(fooDenom, math.NewInt(10))), }) + require.NoError(err) handler := keeper.NewHandlers(&s.bankKeeper) require.NoError(banktestutil.FundAccount(s.ctx, s.bankKeeper, accAddrs[0], sdk.NewCoins(sdk.NewCoin(fooDenom, math.NewInt(100))))) @@ -503,9 +503,10 @@ func (s *KeeperTestSuite) TestMintHandler() { func (s *KeeperTestSuite) TestBurnHandler() { s.SetupTest() require := s.Require() - s.bankKeeper.SetParams(s.ctx, types.Params{ + err := s.bankKeeper.SetParams(s.ctx, types.Params{ DenomCreationFee: sdk.NewCoins(sdk.NewCoin(fooDenom, math.NewInt(10))), }) + require.NoError(err) handler := keeper.NewHandlers(&s.bankKeeper) require.NoError(banktestutil.FundAccount(s.ctx, s.bankKeeper, accAddrs[0], sdk.NewCoins(sdk.NewCoin(fooDenom, math.NewInt(100))))) @@ -625,9 +626,10 @@ func (s *KeeperTestSuite) TestBurnHandler() { func (s *KeeperTestSuite) TestSendHandler_TokenfactoryDenom() { s.SetupTest() require := s.Require() - s.bankKeeper.SetParams(s.ctx, types.Params{ + err := s.bankKeeper.SetParams(s.ctx, types.Params{ DenomCreationFee: sdk.NewCoins(sdk.NewCoin(fooDenom, math.NewInt(10))), }) + require.NoError(err) handler := keeper.NewHandlers(&s.bankKeeper) require.NoError(banktestutil.FundAccount(s.ctx, s.bankKeeper, accAddrs[0], sdk.NewCoins(sdk.NewCoin(fooDenom, math.NewInt(100))))) diff --git a/x/bank/v2/types/params.go b/x/bank/v2/types/params.go index bebe1550abf1..5f05e9bb2b82 100644 --- a/x/bank/v2/types/params.go +++ b/x/bank/v2/types/params.go @@ -4,6 +4,7 @@ import ( fmt "fmt" "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" ) From 3d8967e392c062f67e1373c6fb7f242f66143c41 Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Thu, 7 Nov 2024 15:40:38 +0700 Subject: [PATCH 26/35] lint --- tests/systemtests/genesis_io.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/systemtests/genesis_io.go b/tests/systemtests/genesis_io.go index b3b229f904a2..63fde3ef9258 100644 --- a/tests/systemtests/genesis_io.go +++ b/tests/systemtests/genesis_io.go @@ -10,7 +10,6 @@ import ( "github.com/tidwall/sjson" "cosmossdk.io/math" - sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -48,7 +47,7 @@ func SetDenomCreationFee(t *testing.T, denom string, amount math.Int) GenesisMut return func(genesis []byte) []byte { state, err := sjson.SetBytes(genesis, "app_state.bankv2.params.denom_creation_fee", sdk.NewCoins(sdk.NewCoin(denom, amount))) require.NoError(t, err) - return []byte(state) + return state } } @@ -58,7 +57,7 @@ func GetGenesisBalance(rawGenesis []byte, addr string) sdk.Coins { balances := gjson.GetBytes(rawGenesis, fmt.Sprintf(`app_state.bank.balances.#[address==%q]#.coins`, addr)).Array() for _, coins := range balances { for _, coin := range coins.Array() { - r = append(r, sdk.NewCoin(coin.Get("denom").String(), sdkmath.NewInt(coin.Get("amount").Int()))) + r = append(r, sdk.NewCoin(coin.Get("denom").String(), math.NewInt(coin.Get("amount").Int()))) } } return r From a325394b90755cbc914904c7c241c2fa7bb53440 Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Wed, 13 Nov 2024 22:25:30 +0700 Subject: [PATCH 27/35] add admin account type --- .../defaults/admin/v1/admin.pulsar.go | 4810 +++++++++++++++++ x/accounts/defaults/admin/admin.go | 148 + .../defaults/admin/depinject/depinject.go | 10 + x/accounts/defaults/admin/v1/admin.pb.go | 1857 +++++++ .../accounts/defaults/admin/v1/admin.proto | 62 + 5 files changed, 6887 insertions(+) create mode 100644 api/cosmos/accounts/defaults/admin/v1/admin.pulsar.go create mode 100644 x/accounts/defaults/admin/admin.go create mode 100644 x/accounts/defaults/admin/depinject/depinject.go create mode 100644 x/accounts/defaults/admin/v1/admin.pb.go create mode 100644 x/accounts/proto/cosmos/accounts/defaults/admin/v1/admin.proto diff --git a/api/cosmos/accounts/defaults/admin/v1/admin.pulsar.go b/api/cosmos/accounts/defaults/admin/v1/admin.pulsar.go new file mode 100644 index 000000000000..f87ed1b81e4e --- /dev/null +++ b/api/cosmos/accounts/defaults/admin/v1/admin.pulsar.go @@ -0,0 +1,4810 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package adminv1 + +import ( + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + _ "google.golang.org/protobuf/types/known/anypb" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_MsgInit protoreflect.MessageDescriptor + fd_MsgInit_owner protoreflect.FieldDescriptor + fd_MsgInit_denom protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_accounts_defaults_admin_v1_admin_proto_init() + md_MsgInit = File_cosmos_accounts_defaults_admin_v1_admin_proto.Messages().ByName("MsgInit") + fd_MsgInit_owner = md_MsgInit.Fields().ByName("owner") + fd_MsgInit_denom = md_MsgInit.Fields().ByName("denom") +} + +var _ protoreflect.Message = (*fastReflection_MsgInit)(nil) + +type fastReflection_MsgInit MsgInit + +func (x *MsgInit) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgInit)(x) +} + +func (x *MsgInit) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_MsgInit_messageType fastReflection_MsgInit_messageType +var _ protoreflect.MessageType = fastReflection_MsgInit_messageType{} + +type fastReflection_MsgInit_messageType struct{} + +func (x fastReflection_MsgInit_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgInit)(nil) +} +func (x fastReflection_MsgInit_messageType) New() protoreflect.Message { + return new(fastReflection_MsgInit) +} +func (x fastReflection_MsgInit_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgInit +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgInit) Descriptor() protoreflect.MessageDescriptor { + return md_MsgInit +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgInit) Type() protoreflect.MessageType { + return _fastReflection_MsgInit_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgInit) New() protoreflect.Message { + return new(fastReflection_MsgInit) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgInit) Interface() protoreflect.ProtoMessage { + return (*MsgInit)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgInit) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Owner != "" { + value := protoreflect.ValueOfString(x.Owner) + if !f(fd_MsgInit_owner, value) { + return + } + } + if x.Denom != "" { + value := protoreflect.ValueOfString(x.Denom) + if !f(fd_MsgInit_denom, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgInit) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.MsgInit.owner": + return x.Owner != "" + case "cosmos.accounts.defaults.admin.v1.MsgInit.denom": + return x.Denom != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgInit")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgInit does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgInit) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.MsgInit.owner": + x.Owner = "" + case "cosmos.accounts.defaults.admin.v1.MsgInit.denom": + x.Denom = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgInit")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgInit does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgInit) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.accounts.defaults.admin.v1.MsgInit.owner": + value := x.Owner + return protoreflect.ValueOfString(value) + case "cosmos.accounts.defaults.admin.v1.MsgInit.denom": + value := x.Denom + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgInit")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgInit does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgInit) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.MsgInit.owner": + x.Owner = value.Interface().(string) + case "cosmos.accounts.defaults.admin.v1.MsgInit.denom": + x.Denom = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgInit")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgInit does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgInit) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.MsgInit.owner": + panic(fmt.Errorf("field owner of message cosmos.accounts.defaults.admin.v1.MsgInit is not mutable")) + case "cosmos.accounts.defaults.admin.v1.MsgInit.denom": + panic(fmt.Errorf("field denom of message cosmos.accounts.defaults.admin.v1.MsgInit is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgInit")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgInit does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgInit) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.MsgInit.owner": + return protoreflect.ValueOfString("") + case "cosmos.accounts.defaults.admin.v1.MsgInit.denom": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgInit")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgInit does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgInit) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.accounts.defaults.admin.v1.MsgInit", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgInit) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgInit) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgInit) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgInit) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgInit) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Owner) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Denom) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgInit) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Denom) > 0 { + i -= len(x.Denom) + copy(dAtA[i:], x.Denom) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Denom))) + i-- + dAtA[i] = 0x12 + } + if len(x.Owner) > 0 { + i -= len(x.Owner) + copy(dAtA[i:], x.Owner) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Owner))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgInit) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgInit: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgInit: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Owner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgInitResponse protoreflect.MessageDescriptor +) + +func init() { + file_cosmos_accounts_defaults_admin_v1_admin_proto_init() + md_MsgInitResponse = File_cosmos_accounts_defaults_admin_v1_admin_proto.Messages().ByName("MsgInitResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgInitResponse)(nil) + +type fastReflection_MsgInitResponse MsgInitResponse + +func (x *MsgInitResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgInitResponse)(x) +} + +func (x *MsgInitResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_MsgInitResponse_messageType fastReflection_MsgInitResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgInitResponse_messageType{} + +type fastReflection_MsgInitResponse_messageType struct{} + +func (x fastReflection_MsgInitResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgInitResponse)(nil) +} +func (x fastReflection_MsgInitResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgInitResponse) +} +func (x fastReflection_MsgInitResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgInitResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgInitResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgInitResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgInitResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgInitResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgInitResponse) New() protoreflect.Message { + return new(fastReflection_MsgInitResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgInitResponse) Interface() protoreflect.ProtoMessage { + return (*MsgInitResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgInitResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgInitResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgInitResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgInitResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgInitResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgInitResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgInitResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgInitResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgInitResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgInitResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgInitResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgInitResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgInitResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgInitResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgInitResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgInitResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgInitResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgInitResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgInitResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgInitResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.accounts.defaults.admin.v1.MsgInitResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgInitResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgInitResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgInitResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgInitResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgInitResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgInitResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgInitResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgInitResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgInitResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgSwapOwner protoreflect.MessageDescriptor + fd_MsgSwapOwner_new_owner protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_accounts_defaults_admin_v1_admin_proto_init() + md_MsgSwapOwner = File_cosmos_accounts_defaults_admin_v1_admin_proto.Messages().ByName("MsgSwapOwner") + fd_MsgSwapOwner_new_owner = md_MsgSwapOwner.Fields().ByName("new_owner") +} + +var _ protoreflect.Message = (*fastReflection_MsgSwapOwner)(nil) + +type fastReflection_MsgSwapOwner MsgSwapOwner + +func (x *MsgSwapOwner) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgSwapOwner)(x) +} + +func (x *MsgSwapOwner) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_MsgSwapOwner_messageType fastReflection_MsgSwapOwner_messageType +var _ protoreflect.MessageType = fastReflection_MsgSwapOwner_messageType{} + +type fastReflection_MsgSwapOwner_messageType struct{} + +func (x fastReflection_MsgSwapOwner_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgSwapOwner)(nil) +} +func (x fastReflection_MsgSwapOwner_messageType) New() protoreflect.Message { + return new(fastReflection_MsgSwapOwner) +} +func (x fastReflection_MsgSwapOwner_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgSwapOwner +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgSwapOwner) Descriptor() protoreflect.MessageDescriptor { + return md_MsgSwapOwner +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgSwapOwner) Type() protoreflect.MessageType { + return _fastReflection_MsgSwapOwner_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgSwapOwner) New() protoreflect.Message { + return new(fastReflection_MsgSwapOwner) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgSwapOwner) Interface() protoreflect.ProtoMessage { + return (*MsgSwapOwner)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgSwapOwner) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.NewOwner != "" { + value := protoreflect.ValueOfString(x.NewOwner) + if !f(fd_MsgSwapOwner_new_owner, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgSwapOwner) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.MsgSwapOwner.new_owner": + return x.NewOwner != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgSwapOwner")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgSwapOwner does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSwapOwner) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.MsgSwapOwner.new_owner": + x.NewOwner = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgSwapOwner")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgSwapOwner does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgSwapOwner) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.accounts.defaults.admin.v1.MsgSwapOwner.new_owner": + value := x.NewOwner + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgSwapOwner")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgSwapOwner does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSwapOwner) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.MsgSwapOwner.new_owner": + x.NewOwner = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgSwapOwner")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgSwapOwner does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSwapOwner) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.MsgSwapOwner.new_owner": + panic(fmt.Errorf("field new_owner of message cosmos.accounts.defaults.admin.v1.MsgSwapOwner is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgSwapOwner")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgSwapOwner does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgSwapOwner) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.MsgSwapOwner.new_owner": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgSwapOwner")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgSwapOwner does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgSwapOwner) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.accounts.defaults.admin.v1.MsgSwapOwner", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgSwapOwner) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSwapOwner) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgSwapOwner) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgSwapOwner) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgSwapOwner) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.NewOwner) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgSwapOwner) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.NewOwner) > 0 { + i -= len(x.NewOwner) + copy(dAtA[i:], x.NewOwner) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.NewOwner))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgSwapOwner) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgSwapOwner: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgSwapOwner: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NewOwner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.NewOwner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgSwapOwnerResponse protoreflect.MessageDescriptor +) + +func init() { + file_cosmos_accounts_defaults_admin_v1_admin_proto_init() + md_MsgSwapOwnerResponse = File_cosmos_accounts_defaults_admin_v1_admin_proto.Messages().ByName("MsgSwapOwnerResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgSwapOwnerResponse)(nil) + +type fastReflection_MsgSwapOwnerResponse MsgSwapOwnerResponse + +func (x *MsgSwapOwnerResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgSwapOwnerResponse)(x) +} + +func (x *MsgSwapOwnerResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_MsgSwapOwnerResponse_messageType fastReflection_MsgSwapOwnerResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgSwapOwnerResponse_messageType{} + +type fastReflection_MsgSwapOwnerResponse_messageType struct{} + +func (x fastReflection_MsgSwapOwnerResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgSwapOwnerResponse)(nil) +} +func (x fastReflection_MsgSwapOwnerResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgSwapOwnerResponse) +} +func (x fastReflection_MsgSwapOwnerResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgSwapOwnerResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgSwapOwnerResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgSwapOwnerResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgSwapOwnerResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgSwapOwnerResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgSwapOwnerResponse) New() protoreflect.Message { + return new(fastReflection_MsgSwapOwnerResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgSwapOwnerResponse) Interface() protoreflect.ProtoMessage { + return (*MsgSwapOwnerResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgSwapOwnerResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgSwapOwnerResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgSwapOwnerResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgSwapOwnerResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSwapOwnerResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgSwapOwnerResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgSwapOwnerResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgSwapOwnerResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgSwapOwnerResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgSwapOwnerResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSwapOwnerResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgSwapOwnerResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgSwapOwnerResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSwapOwnerResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgSwapOwnerResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgSwapOwnerResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgSwapOwnerResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.MsgSwapOwnerResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.MsgSwapOwnerResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgSwapOwnerResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.accounts.defaults.admin.v1.MsgSwapOwnerResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgSwapOwnerResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSwapOwnerResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgSwapOwnerResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgSwapOwnerResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgSwapOwnerResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgSwapOwnerResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgSwapOwnerResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgSwapOwnerResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgSwapOwnerResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryMintPerm protoreflect.MessageDescriptor + fd_QueryMintPerm_sender protoreflect.FieldDescriptor + fd_QueryMintPerm_denom protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_accounts_defaults_admin_v1_admin_proto_init() + md_QueryMintPerm = File_cosmos_accounts_defaults_admin_v1_admin_proto.Messages().ByName("QueryMintPerm") + fd_QueryMintPerm_sender = md_QueryMintPerm.Fields().ByName("sender") + fd_QueryMintPerm_denom = md_QueryMintPerm.Fields().ByName("denom") +} + +var _ protoreflect.Message = (*fastReflection_QueryMintPerm)(nil) + +type fastReflection_QueryMintPerm QueryMintPerm + +func (x *QueryMintPerm) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryMintPerm)(x) +} + +func (x *QueryMintPerm) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_QueryMintPerm_messageType fastReflection_QueryMintPerm_messageType +var _ protoreflect.MessageType = fastReflection_QueryMintPerm_messageType{} + +type fastReflection_QueryMintPerm_messageType struct{} + +func (x fastReflection_QueryMintPerm_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryMintPerm)(nil) +} +func (x fastReflection_QueryMintPerm_messageType) New() protoreflect.Message { + return new(fastReflection_QueryMintPerm) +} +func (x fastReflection_QueryMintPerm_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryMintPerm +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryMintPerm) Descriptor() protoreflect.MessageDescriptor { + return md_QueryMintPerm +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryMintPerm) Type() protoreflect.MessageType { + return _fastReflection_QueryMintPerm_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryMintPerm) New() protoreflect.Message { + return new(fastReflection_QueryMintPerm) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryMintPerm) Interface() protoreflect.ProtoMessage { + return (*QueryMintPerm)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryMintPerm) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Sender != "" { + value := protoreflect.ValueOfString(x.Sender) + if !f(fd_QueryMintPerm_sender, value) { + return + } + } + if x.Denom != "" { + value := protoreflect.ValueOfString(x.Denom) + if !f(fd_QueryMintPerm_denom, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryMintPerm) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryMintPerm.sender": + return x.Sender != "" + case "cosmos.accounts.defaults.admin.v1.QueryMintPerm.denom": + return x.Denom != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryMintPerm")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryMintPerm does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryMintPerm) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryMintPerm.sender": + x.Sender = "" + case "cosmos.accounts.defaults.admin.v1.QueryMintPerm.denom": + x.Denom = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryMintPerm")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryMintPerm does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryMintPerm) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryMintPerm.sender": + value := x.Sender + return protoreflect.ValueOfString(value) + case "cosmos.accounts.defaults.admin.v1.QueryMintPerm.denom": + value := x.Denom + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryMintPerm")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryMintPerm does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryMintPerm) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryMintPerm.sender": + x.Sender = value.Interface().(string) + case "cosmos.accounts.defaults.admin.v1.QueryMintPerm.denom": + x.Denom = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryMintPerm")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryMintPerm does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryMintPerm) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryMintPerm.sender": + panic(fmt.Errorf("field sender of message cosmos.accounts.defaults.admin.v1.QueryMintPerm is not mutable")) + case "cosmos.accounts.defaults.admin.v1.QueryMintPerm.denom": + panic(fmt.Errorf("field denom of message cosmos.accounts.defaults.admin.v1.QueryMintPerm is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryMintPerm")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryMintPerm does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryMintPerm) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryMintPerm.sender": + return protoreflect.ValueOfString("") + case "cosmos.accounts.defaults.admin.v1.QueryMintPerm.denom": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryMintPerm")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryMintPerm does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryMintPerm) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.accounts.defaults.admin.v1.QueryMintPerm", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryMintPerm) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryMintPerm) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryMintPerm) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryMintPerm) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryMintPerm) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Sender) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Denom) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryMintPerm) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Denom) > 0 { + i -= len(x.Denom) + copy(dAtA[i:], x.Denom) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Denom))) + i-- + dAtA[i] = 0x12 + } + if len(x.Sender) > 0 { + i -= len(x.Sender) + copy(dAtA[i:], x.Sender) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Sender))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryMintPerm) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryMintPerm: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryMintPerm: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryMintPermResponse protoreflect.MessageDescriptor + fd_QueryMintPermResponse_should_mint protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_accounts_defaults_admin_v1_admin_proto_init() + md_QueryMintPermResponse = File_cosmos_accounts_defaults_admin_v1_admin_proto.Messages().ByName("QueryMintPermResponse") + fd_QueryMintPermResponse_should_mint = md_QueryMintPermResponse.Fields().ByName("should_mint") +} + +var _ protoreflect.Message = (*fastReflection_QueryMintPermResponse)(nil) + +type fastReflection_QueryMintPermResponse QueryMintPermResponse + +func (x *QueryMintPermResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryMintPermResponse)(x) +} + +func (x *QueryMintPermResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_QueryMintPermResponse_messageType fastReflection_QueryMintPermResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryMintPermResponse_messageType{} + +type fastReflection_QueryMintPermResponse_messageType struct{} + +func (x fastReflection_QueryMintPermResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryMintPermResponse)(nil) +} +func (x fastReflection_QueryMintPermResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryMintPermResponse) +} +func (x fastReflection_QueryMintPermResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryMintPermResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryMintPermResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryMintPermResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryMintPermResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryMintPermResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryMintPermResponse) New() protoreflect.Message { + return new(fastReflection_QueryMintPermResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryMintPermResponse) Interface() protoreflect.ProtoMessage { + return (*QueryMintPermResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryMintPermResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ShouldMint != false { + value := protoreflect.ValueOfBool(x.ShouldMint) + if !f(fd_QueryMintPermResponse_should_mint, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryMintPermResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryMintPermResponse.should_mint": + return x.ShouldMint != false + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryMintPermResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryMintPermResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryMintPermResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryMintPermResponse.should_mint": + x.ShouldMint = false + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryMintPermResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryMintPermResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryMintPermResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryMintPermResponse.should_mint": + value := x.ShouldMint + return protoreflect.ValueOfBool(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryMintPermResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryMintPermResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryMintPermResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryMintPermResponse.should_mint": + x.ShouldMint = value.Bool() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryMintPermResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryMintPermResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryMintPermResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryMintPermResponse.should_mint": + panic(fmt.Errorf("field should_mint of message cosmos.accounts.defaults.admin.v1.QueryMintPermResponse is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryMintPermResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryMintPermResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryMintPermResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryMintPermResponse.should_mint": + return protoreflect.ValueOfBool(false) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryMintPermResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryMintPermResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryMintPermResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.accounts.defaults.admin.v1.QueryMintPermResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryMintPermResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryMintPermResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryMintPermResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryMintPermResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryMintPermResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ShouldMint { + n += 2 + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryMintPermResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.ShouldMint { + i-- + if x.ShouldMint { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryMintPermResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryMintPermResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryMintPermResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ShouldMint", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.ShouldMint = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryBurnPerm protoreflect.MessageDescriptor + fd_QueryBurnPerm_sender protoreflect.FieldDescriptor + fd_QueryBurnPerm_denom protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_accounts_defaults_admin_v1_admin_proto_init() + md_QueryBurnPerm = File_cosmos_accounts_defaults_admin_v1_admin_proto.Messages().ByName("QueryBurnPerm") + fd_QueryBurnPerm_sender = md_QueryBurnPerm.Fields().ByName("sender") + fd_QueryBurnPerm_denom = md_QueryBurnPerm.Fields().ByName("denom") +} + +var _ protoreflect.Message = (*fastReflection_QueryBurnPerm)(nil) + +type fastReflection_QueryBurnPerm QueryBurnPerm + +func (x *QueryBurnPerm) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryBurnPerm)(x) +} + +func (x *QueryBurnPerm) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_QueryBurnPerm_messageType fastReflection_QueryBurnPerm_messageType +var _ protoreflect.MessageType = fastReflection_QueryBurnPerm_messageType{} + +type fastReflection_QueryBurnPerm_messageType struct{} + +func (x fastReflection_QueryBurnPerm_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryBurnPerm)(nil) +} +func (x fastReflection_QueryBurnPerm_messageType) New() protoreflect.Message { + return new(fastReflection_QueryBurnPerm) +} +func (x fastReflection_QueryBurnPerm_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryBurnPerm +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryBurnPerm) Descriptor() protoreflect.MessageDescriptor { + return md_QueryBurnPerm +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryBurnPerm) Type() protoreflect.MessageType { + return _fastReflection_QueryBurnPerm_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryBurnPerm) New() protoreflect.Message { + return new(fastReflection_QueryBurnPerm) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryBurnPerm) Interface() protoreflect.ProtoMessage { + return (*QueryBurnPerm)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryBurnPerm) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Sender != "" { + value := protoreflect.ValueOfString(x.Sender) + if !f(fd_QueryBurnPerm_sender, value) { + return + } + } + if x.Denom != "" { + value := protoreflect.ValueOfString(x.Denom) + if !f(fd_QueryBurnPerm_denom, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryBurnPerm) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryBurnPerm.sender": + return x.Sender != "" + case "cosmos.accounts.defaults.admin.v1.QueryBurnPerm.denom": + return x.Denom != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryBurnPerm")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryBurnPerm does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryBurnPerm) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryBurnPerm.sender": + x.Sender = "" + case "cosmos.accounts.defaults.admin.v1.QueryBurnPerm.denom": + x.Denom = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryBurnPerm")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryBurnPerm does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryBurnPerm) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryBurnPerm.sender": + value := x.Sender + return protoreflect.ValueOfString(value) + case "cosmos.accounts.defaults.admin.v1.QueryBurnPerm.denom": + value := x.Denom + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryBurnPerm")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryBurnPerm does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryBurnPerm) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryBurnPerm.sender": + x.Sender = value.Interface().(string) + case "cosmos.accounts.defaults.admin.v1.QueryBurnPerm.denom": + x.Denom = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryBurnPerm")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryBurnPerm does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryBurnPerm) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryBurnPerm.sender": + panic(fmt.Errorf("field sender of message cosmos.accounts.defaults.admin.v1.QueryBurnPerm is not mutable")) + case "cosmos.accounts.defaults.admin.v1.QueryBurnPerm.denom": + panic(fmt.Errorf("field denom of message cosmos.accounts.defaults.admin.v1.QueryBurnPerm is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryBurnPerm")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryBurnPerm does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryBurnPerm) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryBurnPerm.sender": + return protoreflect.ValueOfString("") + case "cosmos.accounts.defaults.admin.v1.QueryBurnPerm.denom": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryBurnPerm")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryBurnPerm does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryBurnPerm) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.accounts.defaults.admin.v1.QueryBurnPerm", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryBurnPerm) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryBurnPerm) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryBurnPerm) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryBurnPerm) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryBurnPerm) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Sender) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Denom) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryBurnPerm) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Denom) > 0 { + i -= len(x.Denom) + copy(dAtA[i:], x.Denom) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Denom))) + i-- + dAtA[i] = 0x12 + } + if len(x.Sender) > 0 { + i -= len(x.Sender) + copy(dAtA[i:], x.Sender) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Sender))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryBurnPerm) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryBurnPerm: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryBurnPerm: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryBurnPermResponse protoreflect.MessageDescriptor + fd_QueryBurnPermResponse_should_burn protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_accounts_defaults_admin_v1_admin_proto_init() + md_QueryBurnPermResponse = File_cosmos_accounts_defaults_admin_v1_admin_proto.Messages().ByName("QueryBurnPermResponse") + fd_QueryBurnPermResponse_should_burn = md_QueryBurnPermResponse.Fields().ByName("should_burn") +} + +var _ protoreflect.Message = (*fastReflection_QueryBurnPermResponse)(nil) + +type fastReflection_QueryBurnPermResponse QueryBurnPermResponse + +func (x *QueryBurnPermResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryBurnPermResponse)(x) +} + +func (x *QueryBurnPermResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_QueryBurnPermResponse_messageType fastReflection_QueryBurnPermResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryBurnPermResponse_messageType{} + +type fastReflection_QueryBurnPermResponse_messageType struct{} + +func (x fastReflection_QueryBurnPermResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryBurnPermResponse)(nil) +} +func (x fastReflection_QueryBurnPermResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryBurnPermResponse) +} +func (x fastReflection_QueryBurnPermResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryBurnPermResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryBurnPermResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryBurnPermResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryBurnPermResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryBurnPermResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryBurnPermResponse) New() protoreflect.Message { + return new(fastReflection_QueryBurnPermResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryBurnPermResponse) Interface() protoreflect.ProtoMessage { + return (*QueryBurnPermResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryBurnPermResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ShouldBurn != false { + value := protoreflect.ValueOfBool(x.ShouldBurn) + if !f(fd_QueryBurnPermResponse_should_burn, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryBurnPermResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse.should_burn": + return x.ShouldBurn != false + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryBurnPermResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse.should_burn": + x.ShouldBurn = false + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryBurnPermResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse.should_burn": + value := x.ShouldBurn + return protoreflect.ValueOfBool(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryBurnPermResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse.should_burn": + x.ShouldBurn = value.Bool() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryBurnPermResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse.should_burn": + panic(fmt.Errorf("field should_burn of message cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryBurnPermResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse.should_burn": + return protoreflect.ValueOfBool(false) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryBurnPermResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryBurnPermResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryBurnPermResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryBurnPermResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryBurnPermResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryBurnPermResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ShouldBurn { + n += 2 + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryBurnPermResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.ShouldBurn { + i-- + if x.ShouldBurn { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryBurnPermResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryBurnPermResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryBurnPermResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ShouldBurn", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.ShouldBurn = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryOwner protoreflect.MessageDescriptor +) + +func init() { + file_cosmos_accounts_defaults_admin_v1_admin_proto_init() + md_QueryOwner = File_cosmos_accounts_defaults_admin_v1_admin_proto.Messages().ByName("QueryOwner") +} + +var _ protoreflect.Message = (*fastReflection_QueryOwner)(nil) + +type fastReflection_QueryOwner QueryOwner + +func (x *QueryOwner) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryOwner)(x) +} + +func (x *QueryOwner) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_QueryOwner_messageType fastReflection_QueryOwner_messageType +var _ protoreflect.MessageType = fastReflection_QueryOwner_messageType{} + +type fastReflection_QueryOwner_messageType struct{} + +func (x fastReflection_QueryOwner_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryOwner)(nil) +} +func (x fastReflection_QueryOwner_messageType) New() protoreflect.Message { + return new(fastReflection_QueryOwner) +} +func (x fastReflection_QueryOwner_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryOwner +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryOwner) Descriptor() protoreflect.MessageDescriptor { + return md_QueryOwner +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryOwner) Type() protoreflect.MessageType { + return _fastReflection_QueryOwner_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryOwner) New() protoreflect.Message { + return new(fastReflection_QueryOwner) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryOwner) Interface() protoreflect.ProtoMessage { + return (*QueryOwner)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryOwner) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryOwner) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryOwner")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryOwner does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryOwner) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryOwner")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryOwner does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryOwner) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryOwner")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryOwner does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryOwner) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryOwner")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryOwner does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryOwner) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryOwner")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryOwner does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryOwner) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryOwner")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryOwner does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryOwner) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.accounts.defaults.admin.v1.QueryOwner", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryOwner) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryOwner) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryOwner) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryOwner) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryOwner) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryOwner) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryOwner) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryOwner: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryOwner: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryOwnerResponse protoreflect.MessageDescriptor + fd_QueryOwnerResponse_owner protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_accounts_defaults_admin_v1_admin_proto_init() + md_QueryOwnerResponse = File_cosmos_accounts_defaults_admin_v1_admin_proto.Messages().ByName("QueryOwnerResponse") + fd_QueryOwnerResponse_owner = md_QueryOwnerResponse.Fields().ByName("owner") +} + +var _ protoreflect.Message = (*fastReflection_QueryOwnerResponse)(nil) + +type fastReflection_QueryOwnerResponse QueryOwnerResponse + +func (x *QueryOwnerResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryOwnerResponse)(x) +} + +func (x *QueryOwnerResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_QueryOwnerResponse_messageType fastReflection_QueryOwnerResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryOwnerResponse_messageType{} + +type fastReflection_QueryOwnerResponse_messageType struct{} + +func (x fastReflection_QueryOwnerResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryOwnerResponse)(nil) +} +func (x fastReflection_QueryOwnerResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryOwnerResponse) +} +func (x fastReflection_QueryOwnerResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryOwnerResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryOwnerResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryOwnerResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryOwnerResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryOwnerResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryOwnerResponse) New() protoreflect.Message { + return new(fastReflection_QueryOwnerResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryOwnerResponse) Interface() protoreflect.ProtoMessage { + return (*QueryOwnerResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryOwnerResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Owner != "" { + value := protoreflect.ValueOfString(x.Owner) + if !f(fd_QueryOwnerResponse_owner, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryOwnerResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryOwnerResponse.owner": + return x.Owner != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryOwnerResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryOwnerResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryOwnerResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryOwnerResponse.owner": + x.Owner = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryOwnerResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryOwnerResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryOwnerResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryOwnerResponse.owner": + value := x.Owner + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryOwnerResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryOwnerResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryOwnerResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryOwnerResponse.owner": + x.Owner = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryOwnerResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryOwnerResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryOwnerResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryOwnerResponse.owner": + panic(fmt.Errorf("field owner of message cosmos.accounts.defaults.admin.v1.QueryOwnerResponse is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryOwnerResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryOwnerResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryOwnerResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.accounts.defaults.admin.v1.QueryOwnerResponse.owner": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.accounts.defaults.admin.v1.QueryOwnerResponse")) + } + panic(fmt.Errorf("message cosmos.accounts.defaults.admin.v1.QueryOwnerResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryOwnerResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.accounts.defaults.admin.v1.QueryOwnerResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryOwnerResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryOwnerResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryOwnerResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryOwnerResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryOwnerResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Owner) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryOwnerResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Owner) > 0 { + i -= len(x.Owner) + copy(dAtA[i:], x.Owner) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Owner))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryOwnerResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryOwnerResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryOwnerResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Owner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: cosmos/accounts/defaults/admin/v1/admin.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// MsgInit is used to initialize a denom admin account. +type MsgInit struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // owner defines the owner of denom. + Owner string `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` + // denom defines the denom owner by address. + Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` +} + +func (x *MsgInit) Reset() { + *x = MsgInit{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgInit) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgInit) ProtoMessage() {} + +// Deprecated: Use MsgInit.ProtoReflect.Descriptor instead. +func (*MsgInit) Descriptor() ([]byte, []int) { + return file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDescGZIP(), []int{0} +} + +func (x *MsgInit) GetOwner() string { + if x != nil { + return x.Owner + } + return "" +} + +func (x *MsgInit) GetDenom() string { + if x != nil { + return x.Denom + } + return "" +} + +// MsgInitResponse is the response returned after denom admin account initialization. +// This is empty. +type MsgInitResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgInitResponse) Reset() { + *x = MsgInitResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgInitResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgInitResponse) ProtoMessage() {} + +// Deprecated: Use MsgInitResponse.ProtoReflect.Descriptor instead. +func (*MsgInitResponse) Descriptor() ([]byte, []int) { + return file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDescGZIP(), []int{1} +} + +// MsgSwapOwner is used to change the owner of denom. +type MsgSwapOwner struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // new_owner defines the new owner. + NewOwner string `protobuf:"bytes,1,opt,name=new_owner,json=newOwner,proto3" json:"new_owner,omitempty"` +} + +func (x *MsgSwapOwner) Reset() { + *x = MsgSwapOwner{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgSwapOwner) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgSwapOwner) ProtoMessage() {} + +// Deprecated: Use MsgSwapOwner.ProtoReflect.Descriptor instead. +func (*MsgSwapOwner) Descriptor() ([]byte, []int) { + return file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDescGZIP(), []int{2} +} + +func (x *MsgSwapOwner) GetNewOwner() string { + if x != nil { + return x.NewOwner + } + return "" +} + +// MsgSwapOwnerResponse is the response for the MsgSwapOwner message. +// This is empty. +type MsgSwapOwnerResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgSwapOwnerResponse) Reset() { + *x = MsgSwapOwnerResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgSwapOwnerResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgSwapOwnerResponse) ProtoMessage() {} + +// Deprecated: Use MsgSwapOwnerResponse.ProtoReflect.Descriptor instead. +func (*MsgSwapOwnerResponse) Descriptor() ([]byte, []int) { + return file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDescGZIP(), []int{3} +} + +// QueryMintPerm is used to query if address have mint permission to denom. +type QueryMintPerm struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` +} + +func (x *QueryMintPerm) Reset() { + *x = QueryMintPerm{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryMintPerm) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryMintPerm) ProtoMessage() {} + +// Deprecated: Use QueryMintPerm.ProtoReflect.Descriptor instead. +func (*QueryMintPerm) Descriptor() ([]byte, []int) { + return file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDescGZIP(), []int{4} +} + +func (x *QueryMintPerm) GetSender() string { + if x != nil { + return x.Sender + } + return "" +} + +func (x *QueryMintPerm) GetDenom() string { + if x != nil { + return x.Denom + } + return "" +} + +// QueryMintPermResponse is the response for the QueryMintPerm message. +// This is empty. +type QueryMintPermResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ShouldMint bool `protobuf:"varint,1,opt,name=should_mint,json=shouldMint,proto3" json:"should_mint,omitempty"` +} + +func (x *QueryMintPermResponse) Reset() { + *x = QueryMintPermResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryMintPermResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryMintPermResponse) ProtoMessage() {} + +// Deprecated: Use QueryMintPermResponse.ProtoReflect.Descriptor instead. +func (*QueryMintPermResponse) Descriptor() ([]byte, []int) { + return file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDescGZIP(), []int{5} +} + +func (x *QueryMintPermResponse) GetShouldMint() bool { + if x != nil { + return x.ShouldMint + } + return false +} + +// QueryBurnPerm is used to query if address have burn permission to denom. +type QueryBurnPerm struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` +} + +func (x *QueryBurnPerm) Reset() { + *x = QueryBurnPerm{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryBurnPerm) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryBurnPerm) ProtoMessage() {} + +// Deprecated: Use QueryBurnPerm.ProtoReflect.Descriptor instead. +func (*QueryBurnPerm) Descriptor() ([]byte, []int) { + return file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDescGZIP(), []int{6} +} + +func (x *QueryBurnPerm) GetSender() string { + if x != nil { + return x.Sender + } + return "" +} + +func (x *QueryBurnPerm) GetDenom() string { + if x != nil { + return x.Denom + } + return "" +} + +// QueryBurnPermResponse is the response for the QueryBurnPerm message. +// This is empty. +type QueryBurnPermResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ShouldBurn bool `protobuf:"varint,1,opt,name=should_burn,json=shouldBurn,proto3" json:"should_burn,omitempty"` +} + +func (x *QueryBurnPermResponse) Reset() { + *x = QueryBurnPermResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryBurnPermResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryBurnPermResponse) ProtoMessage() {} + +// Deprecated: Use QueryBurnPermResponse.ProtoReflect.Descriptor instead. +func (*QueryBurnPermResponse) Descriptor() ([]byte, []int) { + return file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDescGZIP(), []int{7} +} + +func (x *QueryBurnPermResponse) GetShouldBurn() bool { + if x != nil { + return x.ShouldBurn + } + return false +} + +// QueryOwner is used to query owner of account. +type QueryOwner struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *QueryOwner) Reset() { + *x = QueryOwner{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryOwner) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryOwner) ProtoMessage() {} + +// Deprecated: Use QueryOwner.ProtoReflect.Descriptor instead. +func (*QueryOwner) Descriptor() ([]byte, []int) { + return file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDescGZIP(), []int{8} +} + +// QueryOwnerResponse is the response for the QueryOwner message. +// This is empty. +type QueryOwnerResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Owner string `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` +} + +func (x *QueryOwnerResponse) Reset() { + *x = QueryOwnerResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryOwnerResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryOwnerResponse) ProtoMessage() {} + +// Deprecated: Use QueryOwnerResponse.ProtoReflect.Descriptor instead. +func (*QueryOwnerResponse) Descriptor() ([]byte, []int) { + return file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDescGZIP(), []int{9} +} + +func (x *QueryOwnerResponse) GetOwner() string { + if x != nil { + return x.Owner + } + return "" +} + +var File_cosmos_accounts_defaults_admin_v1_admin_proto protoreflect.FileDescriptor + +var file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDesc = []byte{ + 0x0a, 0x2d, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x21, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x2e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, + 0x76, 0x31, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x35, 0x0a, + 0x07, 0x4d, 0x73, 0x67, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x14, + 0x0a, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, + 0x65, 0x6e, 0x6f, 0x6d, 0x22, 0x11, 0x0a, 0x0f, 0x4d, 0x73, 0x67, 0x49, 0x6e, 0x69, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x0a, 0x0c, 0x4d, 0x73, 0x67, 0x53, 0x77, + 0x61, 0x70, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x6f, + 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x4f, + 0x77, 0x6e, 0x65, 0x72, 0x22, 0x16, 0x0a, 0x14, 0x4d, 0x73, 0x67, 0x53, 0x77, 0x61, 0x70, 0x4f, + 0x77, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x0a, 0x0d, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x69, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x22, 0x38, 0x0a, 0x15, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x4d, 0x69, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x5f, 0x6d, + 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x68, 0x6f, 0x75, 0x6c, + 0x64, 0x4d, 0x69, 0x6e, 0x74, 0x22, 0x3d, 0x0a, 0x0d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x75, + 0x72, 0x6e, 0x50, 0x65, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x14, + 0x0a, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, + 0x65, 0x6e, 0x6f, 0x6d, 0x22, 0x38, 0x0a, 0x15, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x75, 0x72, + 0x6e, 0x50, 0x65, 0x72, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, + 0x0b, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x5f, 0x62, 0x75, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0a, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x42, 0x75, 0x72, 0x6e, 0x22, 0x0c, + 0x0a, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x22, 0x2a, 0x0a, 0x12, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x42, 0x98, 0x02, 0x0a, 0x25, 0x63, 0x6f, 0x6d, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x2e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, + 0x76, 0x31, 0x42, 0x0a, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x3a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x2f, 0x61, 0x64, 0x6d, 0x69, + 0x6e, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x76, 0x31, 0xa2, 0x02, 0x04, 0x43, + 0x41, 0x44, 0x41, 0xaa, 0x02, 0x21, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x41, + 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x21, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x5c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x5c, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x73, 0x5c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x2d, 0x43, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x5c, 0x44, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x5c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x5c, 0x56, 0x31, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x25, 0x43, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x3a, 0x3a, + 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x3a, 0x3a, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x3a, + 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDescOnce sync.Once + file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDescData = file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDesc +) + +func file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDescGZIP() []byte { + file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDescOnce.Do(func() { + file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDescData = protoimpl.X.CompressGZIP(file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDescData) + }) + return file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDescData +} + +var file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes = make([]protoimpl.MessageInfo, 10) +var file_cosmos_accounts_defaults_admin_v1_admin_proto_goTypes = []interface{}{ + (*MsgInit)(nil), // 0: cosmos.accounts.defaults.admin.v1.MsgInit + (*MsgInitResponse)(nil), // 1: cosmos.accounts.defaults.admin.v1.MsgInitResponse + (*MsgSwapOwner)(nil), // 2: cosmos.accounts.defaults.admin.v1.MsgSwapOwner + (*MsgSwapOwnerResponse)(nil), // 3: cosmos.accounts.defaults.admin.v1.MsgSwapOwnerResponse + (*QueryMintPerm)(nil), // 4: cosmos.accounts.defaults.admin.v1.QueryMintPerm + (*QueryMintPermResponse)(nil), // 5: cosmos.accounts.defaults.admin.v1.QueryMintPermResponse + (*QueryBurnPerm)(nil), // 6: cosmos.accounts.defaults.admin.v1.QueryBurnPerm + (*QueryBurnPermResponse)(nil), // 7: cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse + (*QueryOwner)(nil), // 8: cosmos.accounts.defaults.admin.v1.QueryOwner + (*QueryOwnerResponse)(nil), // 9: cosmos.accounts.defaults.admin.v1.QueryOwnerResponse +} +var file_cosmos_accounts_defaults_admin_v1_admin_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_cosmos_accounts_defaults_admin_v1_admin_proto_init() } +func file_cosmos_accounts_defaults_admin_v1_admin_proto_init() { + if File_cosmos_accounts_defaults_admin_v1_admin_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgInit); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgInitResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgSwapOwner); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgSwapOwnerResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryMintPerm); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryMintPermResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryBurnPerm); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryBurnPermResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryOwner); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryOwnerResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDesc, + NumEnums: 0, + NumMessages: 10, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_cosmos_accounts_defaults_admin_v1_admin_proto_goTypes, + DependencyIndexes: file_cosmos_accounts_defaults_admin_v1_admin_proto_depIdxs, + MessageInfos: file_cosmos_accounts_defaults_admin_v1_admin_proto_msgTypes, + }.Build() + File_cosmos_accounts_defaults_admin_v1_admin_proto = out.File + file_cosmos_accounts_defaults_admin_v1_admin_proto_rawDesc = nil + file_cosmos_accounts_defaults_admin_v1_admin_proto_goTypes = nil + file_cosmos_accounts_defaults_admin_v1_admin_proto_depIdxs = nil +} diff --git a/x/accounts/defaults/admin/admin.go b/x/accounts/defaults/admin/admin.go new file mode 100644 index 000000000000..518299d238c0 --- /dev/null +++ b/x/accounts/defaults/admin/admin.go @@ -0,0 +1,148 @@ +package admin + +import ( + "bytes" + "context" + "errors" + "fmt" + + "cosmossdk.io/collections" + "cosmossdk.io/core/address" + "cosmossdk.io/core/header" + "cosmossdk.io/x/accounts/accountstd" + admintypes "cosmossdk.io/x/accounts/defaults/admin/v1" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +var ( + OwnerPrefix = collections.NewPrefix(0) + DenomPrefix = collections.NewPrefix(1) + Type = "admin" +) + +// NewAdmin creates a new Admin object. +func NewAdmin(d accountstd.Dependencies) (*Admin, error) { + Admin := &Admin{ + Owner: collections.NewItem(d.SchemaBuilder, OwnerPrefix, "owner", collections.BytesValue), + Denom: collections.NewItem(d.SchemaBuilder, DenomPrefix, "denom", collections.StringValue), + addressCodec: d.AddressCodec, + headerService: d.Environment.HeaderService, + } + + return Admin, nil +} + +type Admin struct { + // Owner is the address of the account owner. + Owner collections.Item[[]byte] + Denom collections.Item[string] + addressCodec address.Codec + headerService header.Service +} + +func (ad *Admin) Init(ctx context.Context, msg *admintypes.MsgInit) ( + *admintypes.MsgInitResponse, error, +) { + owner, err := ad.addressCodec.StringToBytes(msg.Owner) + if err != nil { + return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid 'owner' address: %s", err) + } + err = ad.Owner.Set(ctx, owner) + if err != nil { + return nil, err + } + + if msg.Denom == "" { + return nil, errors.New("empty denom") + } + err = ad.Denom.Set(ctx, msg.Denom) + if err != nil { + return nil, err + } + + return &admintypes.MsgInitResponse{}, nil +} + +func (ad *Admin) HaveMintPerm(ctx context.Context, msg *admintypes.QueryMintPerm) ( + *admintypes.QueryMintPermResponse, error, +) { + denom, err := ad.Denom.Get(ctx) + if err != nil { + return nil, err + } + if denom != msg.Denom { + return nil, fmt.Errorf("invalid denom, got %s, expected %s", msg.Denom, denom) + } + sender, err := ad.addressCodec.StringToBytes(msg.Sender) + if err != nil { + return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid 'owner' address: %s", err) + } + owner, err := ad.Owner.Get(ctx) + if err != nil { + return nil, err + } + + if !bytes.Equal(sender, owner) { + return nil, sdkerrors.ErrInvalidAddress.Wrapf("%s does not have mint permission", string(sender)) + } + + return &admintypes.QueryMintPermResponse{ShouldMint: true}, nil +} + +func (ad *Admin) HaveBurnPerm(ctx context.Context, msg *admintypes.QueryBurnPerm) ( + *admintypes.QueryBurnPermResponse, error, +) { + denom, err := ad.Denom.Get(ctx) + if err != nil { + return nil, err + } + if denom != msg.Denom { + return nil, fmt.Errorf("invalid denom, got %s, expected %s", msg.Denom, denom) + } + sender, err := ad.addressCodec.StringToBytes(msg.Sender) + if err != nil { + return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid 'owner' address: %s", err) + } + owner, err := ad.Owner.Get(ctx) + if err != nil { + return nil, err + } + + if !bytes.Equal(sender, owner) { + return nil, sdkerrors.ErrInvalidAddress.Wrapf("%s does not have burn permission", string(sender)) + } + + return &admintypes.QueryBurnPermResponse{ShouldBurn: true}, nil +} + +func (ad *Admin) QueryOwner(ctx context.Context, msg *admintypes.QueryOwner) ( + *admintypes.QueryOwnerResponse, error, +) { + owner, err := ad.Owner.Get(ctx) + if err != nil { + return nil, err + } + + ownerStr, err := ad.addressCodec.BytesToString(owner) + if err != nil { + return nil, err + } + + return &admintypes.QueryOwnerResponse{Owner: ownerStr}, nil +} + +// RegisterExecuteHandlers implements implementation.Account. +func (a *Admin) RegisterExecuteHandlers(builder *accountstd.ExecuteBuilder) { +} + +// RegisterInitHandler implements implementation.Account. +func (a *Admin) RegisterInitHandler(builder *accountstd.InitBuilder) { + accountstd.RegisterInitHandler(builder, a.Init) +} + +// RegisterQueryHandlers implements implementation.Account. +func (a *Admin) RegisterQueryHandlers(builder *accountstd.QueryBuilder) { + accountstd.RegisterQueryHandler(builder, a.HaveMintPerm) + accountstd.RegisterQueryHandler(builder, a.HaveBurnPerm) +} diff --git a/x/accounts/defaults/admin/depinject/depinject.go b/x/accounts/defaults/admin/depinject/depinject.go new file mode 100644 index 000000000000..5f6a43b19cc9 --- /dev/null +++ b/x/accounts/defaults/admin/depinject/depinject.go @@ -0,0 +1,10 @@ +package admindepinject + +import ( + "cosmossdk.io/x/accounts/accountstd" + "cosmossdk.io/x/accounts/defaults/admin" +) + +func ProvideAccount() accountstd.DepinjectAccount { + return accountstd.DIAccount(admin.Type, admin.NewAdmin) +} diff --git a/x/accounts/defaults/admin/v1/admin.pb.go b/x/accounts/defaults/admin/v1/admin.pb.go new file mode 100644 index 000000000000..de3fd1146ef7 --- /dev/null +++ b/x/accounts/defaults/admin/v1/admin.pb.go @@ -0,0 +1,1857 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: cosmos/accounts/defaults/admin/v1/admin.proto + +package v1 + +import ( + fmt "fmt" + proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types/any" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// MsgInit is used to initialize a denom admin account. +type MsgInit struct { + // owner defines the owner of denom. + Owner string `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` + // denom defines the denom owner by address. + Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` +} + +func (m *MsgInit) Reset() { *m = MsgInit{} } +func (m *MsgInit) String() string { return proto.CompactTextString(m) } +func (*MsgInit) ProtoMessage() {} +func (*MsgInit) Descriptor() ([]byte, []int) { + return fileDescriptor_11c1c531a12fc7ac, []int{0} +} +func (m *MsgInit) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgInit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgInit.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 *MsgInit) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgInit.Merge(m, src) +} +func (m *MsgInit) XXX_Size() int { + return m.Size() +} +func (m *MsgInit) XXX_DiscardUnknown() { + xxx_messageInfo_MsgInit.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgInit proto.InternalMessageInfo + +func (m *MsgInit) GetOwner() string { + if m != nil { + return m.Owner + } + return "" +} + +func (m *MsgInit) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +// MsgInitResponse is the response returned after denom admin account initialization. +// This is empty. +type MsgInitResponse struct { +} + +func (m *MsgInitResponse) Reset() { *m = MsgInitResponse{} } +func (m *MsgInitResponse) String() string { return proto.CompactTextString(m) } +func (*MsgInitResponse) ProtoMessage() {} +func (*MsgInitResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_11c1c531a12fc7ac, []int{1} +} +func (m *MsgInitResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgInitResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgInitResponse.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 *MsgInitResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgInitResponse.Merge(m, src) +} +func (m *MsgInitResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgInitResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgInitResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgInitResponse proto.InternalMessageInfo + +// MsgSwapOwner is used to change the owner of denom. +type MsgSwapOwner struct { + // new_owner defines the new owner. + NewOwner string `protobuf:"bytes,1,opt,name=new_owner,json=newOwner,proto3" json:"new_owner,omitempty"` +} + +func (m *MsgSwapOwner) Reset() { *m = MsgSwapOwner{} } +func (m *MsgSwapOwner) String() string { return proto.CompactTextString(m) } +func (*MsgSwapOwner) ProtoMessage() {} +func (*MsgSwapOwner) Descriptor() ([]byte, []int) { + return fileDescriptor_11c1c531a12fc7ac, []int{2} +} +func (m *MsgSwapOwner) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSwapOwner) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSwapOwner.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 *MsgSwapOwner) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSwapOwner.Merge(m, src) +} +func (m *MsgSwapOwner) XXX_Size() int { + return m.Size() +} +func (m *MsgSwapOwner) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSwapOwner.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSwapOwner proto.InternalMessageInfo + +func (m *MsgSwapOwner) GetNewOwner() string { + if m != nil { + return m.NewOwner + } + return "" +} + +// MsgSwapOwnerResponse is the response for the MsgSwapOwner message. +// This is empty. +type MsgSwapOwnerResponse struct { +} + +func (m *MsgSwapOwnerResponse) Reset() { *m = MsgSwapOwnerResponse{} } +func (m *MsgSwapOwnerResponse) String() string { return proto.CompactTextString(m) } +func (*MsgSwapOwnerResponse) ProtoMessage() {} +func (*MsgSwapOwnerResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_11c1c531a12fc7ac, []int{3} +} +func (m *MsgSwapOwnerResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSwapOwnerResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSwapOwnerResponse.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 *MsgSwapOwnerResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSwapOwnerResponse.Merge(m, src) +} +func (m *MsgSwapOwnerResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgSwapOwnerResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSwapOwnerResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSwapOwnerResponse proto.InternalMessageInfo + +// QueryMintPerm is used to query if address have mint permission to denom. +type QueryMintPerm struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` +} + +func (m *QueryMintPerm) Reset() { *m = QueryMintPerm{} } +func (m *QueryMintPerm) String() string { return proto.CompactTextString(m) } +func (*QueryMintPerm) ProtoMessage() {} +func (*QueryMintPerm) Descriptor() ([]byte, []int) { + return fileDescriptor_11c1c531a12fc7ac, []int{4} +} +func (m *QueryMintPerm) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryMintPerm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryMintPerm.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 *QueryMintPerm) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryMintPerm.Merge(m, src) +} +func (m *QueryMintPerm) XXX_Size() int { + return m.Size() +} +func (m *QueryMintPerm) XXX_DiscardUnknown() { + xxx_messageInfo_QueryMintPerm.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryMintPerm proto.InternalMessageInfo + +func (m *QueryMintPerm) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *QueryMintPerm) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +// QueryMintPermResponse is the response for the QueryMintPerm message. +// This is empty. +type QueryMintPermResponse struct { + ShouldMint bool `protobuf:"varint,1,opt,name=should_mint,json=shouldMint,proto3" json:"should_mint,omitempty"` +} + +func (m *QueryMintPermResponse) Reset() { *m = QueryMintPermResponse{} } +func (m *QueryMintPermResponse) String() string { return proto.CompactTextString(m) } +func (*QueryMintPermResponse) ProtoMessage() {} +func (*QueryMintPermResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_11c1c531a12fc7ac, []int{5} +} +func (m *QueryMintPermResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryMintPermResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryMintPermResponse.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 *QueryMintPermResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryMintPermResponse.Merge(m, src) +} +func (m *QueryMintPermResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryMintPermResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryMintPermResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryMintPermResponse proto.InternalMessageInfo + +func (m *QueryMintPermResponse) GetShouldMint() bool { + if m != nil { + return m.ShouldMint + } + return false +} + +// QueryBurnPerm is used to query if address have burn permission to denom. +type QueryBurnPerm struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` +} + +func (m *QueryBurnPerm) Reset() { *m = QueryBurnPerm{} } +func (m *QueryBurnPerm) String() string { return proto.CompactTextString(m) } +func (*QueryBurnPerm) ProtoMessage() {} +func (*QueryBurnPerm) Descriptor() ([]byte, []int) { + return fileDescriptor_11c1c531a12fc7ac, []int{6} +} +func (m *QueryBurnPerm) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryBurnPerm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryBurnPerm.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 *QueryBurnPerm) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryBurnPerm.Merge(m, src) +} +func (m *QueryBurnPerm) XXX_Size() int { + return m.Size() +} +func (m *QueryBurnPerm) XXX_DiscardUnknown() { + xxx_messageInfo_QueryBurnPerm.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryBurnPerm proto.InternalMessageInfo + +func (m *QueryBurnPerm) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *QueryBurnPerm) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +// QueryBurnPermResponse is the response for the QueryBurnPerm message. +// This is empty. +type QueryBurnPermResponse struct { + ShouldBurn bool `protobuf:"varint,1,opt,name=should_burn,json=shouldBurn,proto3" json:"should_burn,omitempty"` +} + +func (m *QueryBurnPermResponse) Reset() { *m = QueryBurnPermResponse{} } +func (m *QueryBurnPermResponse) String() string { return proto.CompactTextString(m) } +func (*QueryBurnPermResponse) ProtoMessage() {} +func (*QueryBurnPermResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_11c1c531a12fc7ac, []int{7} +} +func (m *QueryBurnPermResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryBurnPermResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryBurnPermResponse.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 *QueryBurnPermResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryBurnPermResponse.Merge(m, src) +} +func (m *QueryBurnPermResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryBurnPermResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryBurnPermResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryBurnPermResponse proto.InternalMessageInfo + +func (m *QueryBurnPermResponse) GetShouldBurn() bool { + if m != nil { + return m.ShouldBurn + } + return false +} + +// QueryOwner is used to query owner of account. +type QueryOwner struct { +} + +func (m *QueryOwner) Reset() { *m = QueryOwner{} } +func (m *QueryOwner) String() string { return proto.CompactTextString(m) } +func (*QueryOwner) ProtoMessage() {} +func (*QueryOwner) Descriptor() ([]byte, []int) { + return fileDescriptor_11c1c531a12fc7ac, []int{8} +} +func (m *QueryOwner) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryOwner) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryOwner.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 *QueryOwner) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryOwner.Merge(m, src) +} +func (m *QueryOwner) XXX_Size() int { + return m.Size() +} +func (m *QueryOwner) XXX_DiscardUnknown() { + xxx_messageInfo_QueryOwner.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryOwner proto.InternalMessageInfo + +// QueryOwnerResponse is the response for the QueryOwner message. +// This is empty. +type QueryOwnerResponse struct { + Owner string `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` +} + +func (m *QueryOwnerResponse) Reset() { *m = QueryOwnerResponse{} } +func (m *QueryOwnerResponse) String() string { return proto.CompactTextString(m) } +func (*QueryOwnerResponse) ProtoMessage() {} +func (*QueryOwnerResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_11c1c531a12fc7ac, []int{9} +} +func (m *QueryOwnerResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryOwnerResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryOwnerResponse.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 *QueryOwnerResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryOwnerResponse.Merge(m, src) +} +func (m *QueryOwnerResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryOwnerResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryOwnerResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryOwnerResponse proto.InternalMessageInfo + +func (m *QueryOwnerResponse) GetOwner() string { + if m != nil { + return m.Owner + } + return "" +} + +func init() { + proto.RegisterType((*MsgInit)(nil), "cosmos.accounts.defaults.admin.v1.MsgInit") + proto.RegisterType((*MsgInitResponse)(nil), "cosmos.accounts.defaults.admin.v1.MsgInitResponse") + proto.RegisterType((*MsgSwapOwner)(nil), "cosmos.accounts.defaults.admin.v1.MsgSwapOwner") + proto.RegisterType((*MsgSwapOwnerResponse)(nil), "cosmos.accounts.defaults.admin.v1.MsgSwapOwnerResponse") + proto.RegisterType((*QueryMintPerm)(nil), "cosmos.accounts.defaults.admin.v1.QueryMintPerm") + proto.RegisterType((*QueryMintPermResponse)(nil), "cosmos.accounts.defaults.admin.v1.QueryMintPermResponse") + proto.RegisterType((*QueryBurnPerm)(nil), "cosmos.accounts.defaults.admin.v1.QueryBurnPerm") + proto.RegisterType((*QueryBurnPermResponse)(nil), "cosmos.accounts.defaults.admin.v1.QueryBurnPermResponse") + proto.RegisterType((*QueryOwner)(nil), "cosmos.accounts.defaults.admin.v1.QueryOwner") + proto.RegisterType((*QueryOwnerResponse)(nil), "cosmos.accounts.defaults.admin.v1.QueryOwnerResponse") +} + +func init() { + proto.RegisterFile("cosmos/accounts/defaults/admin/v1/admin.proto", fileDescriptor_11c1c531a12fc7ac) +} + +var fileDescriptor_11c1c531a12fc7ac = []byte{ + // 338 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x92, 0x4f, 0x4f, 0xc2, 0x40, + 0x10, 0xc5, 0xa9, 0x89, 0x08, 0x23, 0xc6, 0xd8, 0x20, 0x41, 0x4d, 0xaa, 0xf6, 0xe4, 0x9f, 0xd8, + 0x0d, 0x31, 0x26, 0x5e, 0xbc, 0xe0, 0xc9, 0x03, 0x51, 0xf1, 0xe6, 0x85, 0x14, 0xba, 0xd4, 0x46, + 0x3a, 0x43, 0xba, 0x5d, 0x2a, 0xdf, 0xc2, 0x8f, 0xe5, 0x91, 0xa3, 0x47, 0x03, 0x5f, 0xc4, 0x74, + 0x97, 0x56, 0x48, 0xd0, 0x8b, 0xb7, 0xbe, 0xe9, 0xfb, 0xbd, 0xb7, 0xd9, 0x1d, 0xb8, 0xe8, 0x91, + 0x08, 0x49, 0x30, 0xb7, 0xd7, 0x23, 0x89, 0xb1, 0x60, 0x1e, 0xef, 0xbb, 0x72, 0x10, 0x0b, 0xe6, + 0x7a, 0x61, 0x80, 0x6c, 0xd4, 0xd0, 0x1f, 0xce, 0x30, 0xa2, 0x98, 0xcc, 0x63, 0x6d, 0x77, 0x32, + 0xbb, 0x93, 0xd9, 0x1d, 0xed, 0x1a, 0x35, 0xf6, 0xf7, 0x7c, 0x22, 0x7f, 0xc0, 0x99, 0x02, 0xba, + 0xb2, 0xcf, 0x5c, 0x1c, 0x6b, 0xda, 0xbe, 0x82, 0x8d, 0x96, 0xf0, 0xef, 0x30, 0x88, 0xcd, 0x2a, + 0xac, 0x53, 0x82, 0x3c, 0xaa, 0x1b, 0x47, 0xc6, 0x49, 0xb9, 0xad, 0x45, 0x3a, 0xf5, 0x38, 0x52, + 0x58, 0x5f, 0xd3, 0x53, 0x25, 0xec, 0x1d, 0xd8, 0x9e, 0x63, 0x6d, 0x2e, 0x86, 0x84, 0x82, 0xdb, + 0xe7, 0x50, 0x69, 0x09, 0xff, 0x29, 0x71, 0x87, 0xf7, 0x0a, 0x3c, 0x80, 0x32, 0xf2, 0xa4, 0xb3, + 0x18, 0x59, 0x42, 0x9e, 0xa8, 0x9f, 0x76, 0x0d, 0xaa, 0x8b, 0xe6, 0x3c, 0xe4, 0x06, 0xb6, 0x1e, + 0x25, 0x8f, 0xc6, 0xad, 0x00, 0xe3, 0x07, 0x1e, 0x85, 0x66, 0x0d, 0x8a, 0x82, 0xa3, 0x97, 0x47, + 0xcc, 0xd5, 0x2f, 0xc7, 0xba, 0x86, 0xdd, 0x25, 0x3c, 0xcb, 0x35, 0x0f, 0x61, 0x53, 0xbc, 0x90, + 0x1c, 0x78, 0x9d, 0x30, 0xc0, 0x58, 0x65, 0x95, 0xda, 0xa0, 0x47, 0xa9, 0x39, 0x2f, 0x6e, 0xca, + 0x08, 0xff, 0x51, 0x9c, 0xe1, 0x2b, 0x8a, 0xbb, 0x32, 0xc2, 0xe5, 0xe2, 0xd4, 0x6c, 0x57, 0x00, + 0x14, 0xa9, 0xef, 0xe5, 0x0c, 0xcc, 0x1f, 0x95, 0x87, 0xac, 0x7c, 0x99, 0xe6, 0xed, 0xc7, 0xd4, + 0x32, 0x26, 0x53, 0xcb, 0xf8, 0x9a, 0x5a, 0xc6, 0xfb, 0xcc, 0x2a, 0x4c, 0x66, 0x56, 0xe1, 0x73, + 0x66, 0x15, 0x9e, 0x4f, 0xf5, 0x4a, 0x08, 0xef, 0xd5, 0x09, 0x88, 0xbd, 0xfd, 0xb1, 0x49, 0xdd, + 0xa2, 0x5a, 0x83, 0xcb, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0xc0, 0x8c, 0xef, 0x75, 0x02, + 0x00, 0x00, +} + +func (m *MsgInit) 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 *MsgInit) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgInit) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintAdmin(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x12 + } + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintAdmin(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgInitResponse) 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 *MsgInitResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgInitResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgSwapOwner) 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 *MsgSwapOwner) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSwapOwner) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.NewOwner) > 0 { + i -= len(m.NewOwner) + copy(dAtA[i:], m.NewOwner) + i = encodeVarintAdmin(dAtA, i, uint64(len(m.NewOwner))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgSwapOwnerResponse) 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 *MsgSwapOwnerResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSwapOwnerResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryMintPerm) 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 *QueryMintPerm) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryMintPerm) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintAdmin(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x12 + } + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintAdmin(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryMintPermResponse) 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 *QueryMintPermResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryMintPermResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ShouldMint { + i-- + if m.ShouldMint { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryBurnPerm) 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 *QueryBurnPerm) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryBurnPerm) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintAdmin(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x12 + } + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintAdmin(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryBurnPermResponse) 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 *QueryBurnPermResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryBurnPermResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ShouldBurn { + i-- + if m.ShouldBurn { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryOwner) 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 *QueryOwner) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryOwner) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryOwnerResponse) 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 *QueryOwnerResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryOwnerResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintAdmin(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintAdmin(dAtA []byte, offset int, v uint64) int { + offset -= sovAdmin(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgInit) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Owner) + if l > 0 { + n += 1 + l + sovAdmin(uint64(l)) + } + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovAdmin(uint64(l)) + } + return n +} + +func (m *MsgInitResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgSwapOwner) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.NewOwner) + if l > 0 { + n += 1 + l + sovAdmin(uint64(l)) + } + return n +} + +func (m *MsgSwapOwnerResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryMintPerm) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovAdmin(uint64(l)) + } + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovAdmin(uint64(l)) + } + return n +} + +func (m *QueryMintPermResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ShouldMint { + n += 2 + } + return n +} + +func (m *QueryBurnPerm) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovAdmin(uint64(l)) + } + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovAdmin(uint64(l)) + } + return n +} + +func (m *QueryBurnPermResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ShouldBurn { + n += 2 + } + return n +} + +func (m *QueryOwner) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryOwnerResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Owner) + if l > 0 { + n += 1 + l + sovAdmin(uint64(l)) + } + return n +} + +func sovAdmin(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozAdmin(x uint64) (n int) { + return sovAdmin(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgInit) 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 ErrIntOverflowAdmin + } + 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: MsgInit: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgInit: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAdmin + } + 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 ErrInvalidLengthAdmin + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAdmin + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Owner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAdmin + } + 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 ErrInvalidLengthAdmin + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAdmin + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipAdmin(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAdmin + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgInitResponse) 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 ErrIntOverflowAdmin + } + 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: MsgInitResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgInitResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipAdmin(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAdmin + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSwapOwner) 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 ErrIntOverflowAdmin + } + 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: MsgSwapOwner: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSwapOwner: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NewOwner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAdmin + } + 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 ErrInvalidLengthAdmin + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAdmin + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NewOwner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipAdmin(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAdmin + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSwapOwnerResponse) 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 ErrIntOverflowAdmin + } + 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: MsgSwapOwnerResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSwapOwnerResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipAdmin(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAdmin + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryMintPerm) 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 ErrIntOverflowAdmin + } + 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: QueryMintPerm: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryMintPerm: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAdmin + } + 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 ErrInvalidLengthAdmin + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAdmin + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAdmin + } + 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 ErrInvalidLengthAdmin + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAdmin + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipAdmin(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAdmin + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryMintPermResponse) 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 ErrIntOverflowAdmin + } + 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: QueryMintPermResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryMintPermResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ShouldMint", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAdmin + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ShouldMint = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipAdmin(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAdmin + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryBurnPerm) 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 ErrIntOverflowAdmin + } + 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: QueryBurnPerm: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryBurnPerm: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAdmin + } + 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 ErrInvalidLengthAdmin + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAdmin + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAdmin + } + 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 ErrInvalidLengthAdmin + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAdmin + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipAdmin(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAdmin + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryBurnPermResponse) 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 ErrIntOverflowAdmin + } + 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: QueryBurnPermResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryBurnPermResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ShouldBurn", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAdmin + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ShouldBurn = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipAdmin(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAdmin + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryOwner) 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 ErrIntOverflowAdmin + } + 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: QueryOwner: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryOwner: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipAdmin(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAdmin + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryOwnerResponse) 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 ErrIntOverflowAdmin + } + 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: QueryOwnerResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryOwnerResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAdmin + } + 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 ErrInvalidLengthAdmin + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAdmin + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Owner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipAdmin(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAdmin + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipAdmin(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAdmin + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAdmin + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAdmin + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthAdmin + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupAdmin + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthAdmin + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthAdmin = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowAdmin = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupAdmin = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/accounts/proto/cosmos/accounts/defaults/admin/v1/admin.proto b/x/accounts/proto/cosmos/accounts/defaults/admin/v1/admin.proto new file mode 100644 index 000000000000..8cf22d83377a --- /dev/null +++ b/x/accounts/proto/cosmos/accounts/defaults/admin/v1/admin.proto @@ -0,0 +1,62 @@ +syntax = "proto3"; + +package cosmos.accounts.defaults.admin.v1; + +option go_package = "cosmossdk.io/x/accounts/defaults/admin/v1"; + +import "google/protobuf/any.proto"; + +// MsgInit is used to initialize a denom admin account. +message MsgInit { + // owner defines the owner of denom. + string owner = 1; + // denom defines the denom owner by address. + string denom = 2; +} + +// MsgInitResponse is the response returned after denom admin account initialization. +// This is empty. +message MsgInitResponse {} + +// MsgSwapOwner is used to change the owner of denom. +message MsgSwapOwner { + // new_owner defines the new owner. + string new_owner = 1; +} + +// MsgSwapOwnerResponse is the response for the MsgSwapOwner message. +// This is empty. +message MsgSwapOwnerResponse {} + +// QueryMintPerm is used to query if address have mint permission to denom. +message QueryMintPerm { + string sender = 1; + string denom = 2; +} + +// QueryMintPermResponse is the response for the QueryMintPerm message. +// This is empty. +message QueryMintPermResponse { + bool should_mint = 1; +} + +// QueryBurnPerm is used to query if address have burn permission to denom. +message QueryBurnPerm { + string sender = 1; + string denom = 2; +} + +// QueryBurnPermResponse is the response for the QueryBurnPerm message. +// This is empty. +message QueryBurnPermResponse { + bool should_burn = 1; +} + +// QueryOwner is used to query owner of account. +message QueryOwner {} + +// QueryOwnerResponse is the response for the QueryOwner message. +// This is empty. +message QueryOwnerResponse { + string owner = 1; +} From 081f723043ee1ce48f8cf92f9d6e6bc40f011af6 Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Wed, 13 Nov 2024 22:26:18 +0700 Subject: [PATCH 28/35] admin disable --- x/bank/proto/cosmos/bank/v2/bank.proto | 2 + x/bank/v2/types/bank.pb.go | 112 +++++++++++++++++-------- x/bank/v2/types/params.go | 5 +- 3 files changed, 82 insertions(+), 37 deletions(-) diff --git a/x/bank/proto/cosmos/bank/v2/bank.proto b/x/bank/proto/cosmos/bank/v2/bank.proto index 3895393d1a68..6cf02e6a8dae 100644 --- a/x/bank/proto/cosmos/bank/v2/bank.proto +++ b/x/bank/proto/cosmos/bank/v2/bank.proto @@ -24,6 +24,8 @@ message Params { // See: https://github.com/CosmWasm/token-factory/issues/11 uint64 denom_creation_gas_consume = 2 [(gogoproto.moretags) = "yaml:\"denom_creation_gas_consume\"", (gogoproto.nullable) = true]; + + bool admin_disable = 3; } // DenomUnit represents a struct that describes a given diff --git a/x/bank/v2/types/bank.pb.go b/x/bank/v2/types/bank.pb.go index 9bbc9c460b24..6764432b41a4 100644 --- a/x/bank/v2/types/bank.pb.go +++ b/x/bank/v2/types/bank.pb.go @@ -37,6 +37,7 @@ type Params struct { // // See: https://github.com/CosmWasm/token-factory/issues/11 DenomCreationGasConsume uint64 `protobuf:"varint,2,opt,name=denom_creation_gas_consume,json=denomCreationGasConsume,proto3" json:"denom_creation_gas_consume,omitempty" yaml:"denom_creation_gas_consume"` + AdminDisable bool `protobuf:"varint,3,opt,name=admin_disable,json=adminDisable,proto3" json:"admin_disable,omitempty"` } func (m *Params) Reset() { *m = Params{} } @@ -86,6 +87,13 @@ func (m *Params) GetDenomCreationGasConsume() uint64 { return 0 } +func (m *Params) GetAdminDisable() bool { + if m != nil { + return m.AdminDisable + } + return false +} + // DenomUnit represents a struct that describes a given // denomination unit of the basic token. type DenomUnit struct { @@ -276,41 +284,42 @@ func init() { func init() { proto.RegisterFile("cosmos/bank/v2/bank.proto", fileDescriptor_2e0dfb4485ca624d) } var fileDescriptor_2e0dfb4485ca624d = []byte{ - // 537 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x53, 0xcd, 0x6e, 0xd3, 0x40, - 0x10, 0x8e, 0xe3, 0x34, 0x3f, 0x5b, 0xf1, 0xa3, 0xa5, 0x12, 0x9b, 0x08, 0xd9, 0x26, 0x17, 0x82, - 0xa0, 0x36, 0x4d, 0x51, 0x25, 0x7a, 0x4c, 0x10, 0xd0, 0x43, 0x25, 0x64, 0x29, 0x42, 0xe2, 0x12, - 0x6d, 0xec, 0x6d, 0xb2, 0x4a, 0xbc, 0x1b, 0x79, 0xec, 0xa8, 0x79, 0x04, 0x6e, 0x9c, 0x78, 0x08, - 0xce, 0x3c, 0x44, 0x8e, 0xbd, 0x20, 0x21, 0x0e, 0x06, 0x25, 0x6f, 0xd0, 0x27, 0x40, 0x5e, 0x3b, - 0xa6, 0xb4, 0xe5, 0xe4, 0x9d, 0xf9, 0x7e, 0xe6, 0x93, 0x66, 0x8c, 0x9a, 0x9e, 0x84, 0x40, 0x82, - 0x33, 0xa2, 0x62, 0xea, 0x2c, 0xba, 0xea, 0x6b, 0xcf, 0x43, 0x19, 0x49, 0x7c, 0x37, 0x83, 0x6c, - 0xd5, 0x5a, 0x74, 0x5b, 0x7b, 0x63, 0x39, 0x96, 0x0a, 0x72, 0xd2, 0x57, 0xc6, 0x6a, 0xe5, 0x06, - 0xc3, 0x0c, 0xc8, 0x25, 0x19, 0x64, 0x14, 0xde, 0xc0, 0x9c, 0xc5, 0xc1, 0x88, 0x45, 0xf4, 0xc0, - 0xf1, 0x24, 0x17, 0x19, 0xde, 0xfe, 0x54, 0x46, 0xd5, 0xf7, 0x34, 0xa4, 0x01, 0xe0, 0x2f, 0x1a, - 0xc2, 0x3e, 0x13, 0x32, 0x18, 0x7a, 0x21, 0xa3, 0x11, 0x97, 0x62, 0x78, 0xc6, 0x18, 0xd1, 0x2c, - 0xbd, 0xb3, 0xdb, 0x6d, 0xda, 0x45, 0x12, 0x60, 0x76, 0x6e, 0x64, 0xf7, 0x25, 0x17, 0xbd, 0xd3, - 0x55, 0x62, 0x96, 0x2e, 0x13, 0xb3, 0xb9, 0xa4, 0xc1, 0xec, 0xb8, 0x7d, 0xd3, 0xa2, 0xfd, 0xf5, - 0x97, 0xd9, 0x19, 0xf3, 0x68, 0x12, 0x8f, 0x6c, 0x4f, 0x06, 0x79, 0xc0, 0xfc, 0xb3, 0x0f, 0xfe, - 0xd4, 0x89, 0x96, 0x73, 0x06, 0xca, 0x0d, 0xdc, 0xfb, 0xca, 0xa0, 0x9f, 0xeb, 0xdf, 0x30, 0x86, - 0xcf, 0x50, 0xeb, 0x9a, 0xe9, 0x98, 0xc2, 0xd0, 0x93, 0x02, 0xe2, 0x80, 0x91, 0xb2, 0xa5, 0x75, - 0x2a, 0xbd, 0xa7, 0xab, 0xc4, 0xd4, 0x2e, 0x13, 0xf3, 0xf1, 0xad, 0x21, 0xae, 0xf0, 0xdb, 0xee, - 0xc3, 0x7f, 0x06, 0xbc, 0xa5, 0xd0, 0xcf, 0x91, 0x0f, 0xa8, 0xf1, 0x3a, 0x85, 0x06, 0x82, 0x47, - 0x78, 0x0f, 0xed, 0x28, 0x1e, 0xd1, 0x2c, 0xad, 0xd3, 0x70, 0xb3, 0x02, 0xb7, 0x50, 0x9d, 0x9d, - 0xcf, 0xa5, 0x60, 0x22, 0x52, 0x83, 0xef, 0xb8, 0x45, 0x8d, 0x09, 0xaa, 0xd1, 0x19, 0xa7, 0xc0, - 0x80, 0xe8, 0x96, 0xde, 0x69, 0xb8, 0xdb, 0xb2, 0xfd, 0xbd, 0x8c, 0xea, 0xa7, 0x2c, 0xa2, 0x3e, - 0x8d, 0x28, 0xb6, 0xd0, 0xae, 0xcf, 0xc0, 0x0b, 0xf9, 0x3c, 0x1d, 0x9f, 0xdb, 0x5f, 0x6d, 0xe1, - 0xe3, 0x94, 0x91, 0xe6, 0x8f, 0x05, 0x8f, 0x80, 0x94, 0xaf, 0x2f, 0x40, 0x9d, 0x82, 0x5d, 0x44, - 0x75, 0x91, 0xbf, 0x7d, 0x02, 0xc6, 0xa8, 0x92, 0x6e, 0x88, 0xe8, 0xca, 0x56, 0xbd, 0xd3, 0x60, - 0x3e, 0x87, 0xf9, 0x8c, 0x2e, 0x49, 0x45, 0xb5, 0xb7, 0x25, 0x7e, 0x82, 0x2a, 0x82, 0x06, 0x8c, - 0xec, 0xa4, 0xed, 0xde, 0x83, 0x9f, 0xdf, 0xf6, 0xef, 0xfd, 0xdd, 0x8a, 0xf5, 0xc2, 0x7e, 0x79, - 0xe8, 0x2a, 0x02, 0x7e, 0x86, 0xaa, 0xb0, 0x0c, 0x46, 0x72, 0x46, 0xaa, 0xff, 0xa7, 0xe6, 0x14, - 0xfc, 0x1c, 0xe9, 0x71, 0xc8, 0x49, 0x4d, 0x31, 0x5b, 0xeb, 0xc4, 0xd4, 0x07, 0xee, 0xc9, 0x4d, - 0xc1, 0x91, 0x9b, 0xd2, 0xf0, 0x2b, 0x54, 0x8f, 0x43, 0x3e, 0x9c, 0x50, 0x98, 0x90, 0xba, 0x92, - 0x18, 0xeb, 0xc4, 0xac, 0x0d, 0xdc, 0x93, 0x77, 0x14, 0x26, 0xb7, 0xc9, 0x6a, 0x71, 0xc8, 0x53, - 0xac, 0x77, 0xb4, 0x5a, 0x1b, 0xda, 0xc5, 0xda, 0xd0, 0x7e, 0xaf, 0x0d, 0xed, 0xf3, 0xc6, 0x28, - 0x5d, 0x6c, 0x8c, 0xd2, 0x8f, 0x8d, 0x51, 0xfa, 0xf8, 0x28, 0xd3, 0x80, 0x3f, 0xb5, 0xb9, 0x74, - 0xce, 0x8b, 0x5f, 0x4b, 0x1d, 0xda, 0xa8, 0xaa, 0x6e, 0xff, 0xf0, 0x4f, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xc2, 0xe8, 0x08, 0x7c, 0x79, 0x03, 0x00, 0x00, + // 560 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x53, 0xcd, 0x6e, 0xd3, 0x30, + 0x1c, 0x6f, 0x9a, 0xae, 0x1f, 0x1e, 0x03, 0x64, 0x26, 0xe1, 0x55, 0x28, 0x09, 0xe1, 0x40, 0x10, + 0x2c, 0x61, 0x1b, 0x9a, 0xc4, 0x8e, 0xdd, 0x04, 0xec, 0x30, 0x09, 0x59, 0x9a, 0x90, 0xb8, 0x44, + 0x4e, 0xe2, 0xb5, 0x56, 0x1b, 0xbb, 0x8a, 0x93, 0x6a, 0x7d, 0x0b, 0x4e, 0x3c, 0x04, 0x07, 0x4e, + 0x3c, 0x44, 0x8f, 0xbb, 0x20, 0x21, 0x0e, 0x01, 0xb5, 0x6f, 0xb0, 0x27, 0x40, 0x71, 0xd2, 0x32, + 0xb6, 0x71, 0x8a, 0xff, 0xbf, 0xaf, 0xfc, 0x2c, 0xdb, 0x60, 0x2b, 0x14, 0x32, 0x16, 0xd2, 0x0b, + 0x08, 0x1f, 0x7a, 0x93, 0x5d, 0xf5, 0x75, 0xc7, 0x89, 0x48, 0x05, 0xbc, 0x5b, 0x52, 0xae, 0x82, + 0x26, 0xbb, 0xdd, 0xcd, 0xbe, 0xe8, 0x0b, 0x45, 0x79, 0xc5, 0xaa, 0x54, 0x75, 0xab, 0x00, 0xbf, + 0x24, 0x2a, 0x4b, 0x49, 0x19, 0xab, 0x6c, 0x49, 0xbd, 0xc9, 0x4e, 0x40, 0x53, 0xb2, 0xe3, 0x85, + 0x82, 0xf1, 0x92, 0xb7, 0xbf, 0xd6, 0x41, 0xf3, 0x3d, 0x49, 0x48, 0x2c, 0xe1, 0x67, 0x0d, 0xc0, + 0x88, 0x72, 0x11, 0xfb, 0x61, 0x42, 0x49, 0xca, 0x04, 0xf7, 0xcf, 0x28, 0x45, 0x9a, 0xa5, 0x3b, + 0xeb, 0xbb, 0x5b, 0xee, 0xaa, 0x89, 0xa4, 0x6e, 0x15, 0xe4, 0x1e, 0x0a, 0xc6, 0x7b, 0x27, 0xb3, + 0xdc, 0xac, 0x5d, 0xe6, 0xe6, 0xd6, 0x94, 0xc4, 0xa3, 0x03, 0xfb, 0x66, 0x84, 0xfd, 0xe5, 0x97, + 0xe9, 0xf4, 0x59, 0x3a, 0xc8, 0x02, 0x37, 0x14, 0x71, 0x55, 0xb0, 0xfa, 0x6c, 0xcb, 0x68, 0xe8, + 0xa5, 0xd3, 0x31, 0x95, 0x2a, 0x4d, 0xe2, 0xfb, 0x2a, 0xe0, 0xb0, 0xf2, 0xbf, 0xa1, 0x14, 0x9e, + 0x81, 0xee, 0xb5, 0xd0, 0x3e, 0x91, 0x7e, 0x28, 0xb8, 0xcc, 0x62, 0x8a, 0xea, 0x96, 0xe6, 0x34, + 0x7a, 0xcf, 0x66, 0xb9, 0xa9, 0x5d, 0xe6, 0xe6, 0xe3, 0x5b, 0x4b, 0x5c, 0xd1, 0xdb, 0xf8, 0xe1, + 0x3f, 0x3f, 0x78, 0x4b, 0xe4, 0x61, 0xc9, 0xc0, 0x27, 0x60, 0x83, 0x44, 0x31, 0xe3, 0x7e, 0xc4, + 0x24, 0x09, 0x46, 0x14, 0xe9, 0x96, 0xe6, 0xb4, 0xf1, 0x1d, 0x05, 0x1e, 0x95, 0x98, 0xfd, 0x01, + 0x74, 0x8e, 0x0a, 0xff, 0x29, 0x67, 0x29, 0xdc, 0x04, 0x6b, 0x2a, 0x0c, 0x69, 0x96, 0xe6, 0x74, + 0x70, 0x39, 0xc0, 0x2e, 0x68, 0xd3, 0xf3, 0xb1, 0xe0, 0x94, 0xa7, 0xaa, 0xdd, 0x06, 0x5e, 0xcd, + 0x10, 0x81, 0x16, 0x19, 0x31, 0x22, 0xa9, 0x44, 0xba, 0xa5, 0x3b, 0x1d, 0xbc, 0x1c, 0xed, 0xef, + 0x75, 0xd0, 0x3e, 0xa1, 0x29, 0x89, 0x48, 0x4a, 0xa0, 0x05, 0xd6, 0x23, 0x2a, 0xc3, 0x84, 0x8d, + 0x8b, 0x8e, 0x55, 0xfc, 0x55, 0x08, 0x1e, 0x14, 0x8a, 0x62, 0x93, 0x19, 0x67, 0xa9, 0x44, 0xf5, + 0xeb, 0xa7, 0xa4, 0xee, 0x8b, 0xbb, 0xaa, 0x8a, 0x41, 0xb4, 0x5c, 0x4a, 0x08, 0x41, 0xa3, 0x38, + 0x46, 0xb5, 0xbf, 0x0e, 0x56, 0xeb, 0xa2, 0x58, 0xc4, 0xe4, 0x78, 0x44, 0xa6, 0xa8, 0xa1, 0xe0, + 0xe5, 0x08, 0x9f, 0x82, 0x06, 0x27, 0x31, 0x45, 0x6b, 0x05, 0xdc, 0x7b, 0xf0, 0xf3, 0xdb, 0xf6, + 0xbd, 0xbf, 0x47, 0x67, 0xbd, 0x74, 0x5f, 0xed, 0x61, 0x25, 0x80, 0xcf, 0x41, 0x53, 0x4e, 0xe3, + 0x40, 0x8c, 0x50, 0xf3, 0xff, 0xd2, 0x4a, 0x02, 0x5f, 0x00, 0x3d, 0x4b, 0x18, 0x6a, 0x29, 0x65, + 0x77, 0x9e, 0x9b, 0xfa, 0x29, 0x3e, 0xbe, 0x69, 0xd8, 0xc7, 0x85, 0x0c, 0xbe, 0x06, 0xed, 0x2c, + 0x61, 0xfe, 0x80, 0xc8, 0x01, 0x6a, 0x2b, 0x8b, 0x31, 0xcf, 0xcd, 0xd6, 0x29, 0x3e, 0x7e, 0x47, + 0xe4, 0xe0, 0x36, 0x5b, 0x2b, 0x4b, 0x58, 0xc1, 0xf5, 0xf6, 0x67, 0x73, 0x43, 0xbb, 0x98, 0x1b, + 0xda, 0xef, 0xb9, 0xa1, 0x7d, 0x5a, 0x18, 0xb5, 0x8b, 0x85, 0x51, 0xfb, 0xb1, 0x30, 0x6a, 0x1f, + 0x1f, 0x95, 0x1e, 0x19, 0x0d, 0x5d, 0x26, 0xbc, 0xf3, 0xd5, 0xfb, 0x53, 0xb7, 0x31, 0x68, 0xaa, + 0x07, 0xb2, 0xf7, 0x27, 0x00, 0x00, 0xff, 0xff, 0x8a, 0x27, 0xa5, 0xa1, 0x9e, 0x03, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { @@ -333,6 +342,16 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.AdminDisable { + i-- + if m.AdminDisable { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } if m.DenomCreationGasConsume != 0 { i = encodeVarintBank(dAtA, i, uint64(m.DenomCreationGasConsume)) i-- @@ -511,6 +530,9 @@ func (m *Params) Size() (n int) { if m.DenomCreationGasConsume != 0 { n += 1 + sovBank(uint64(m.DenomCreationGasConsume)) } + if m.AdminDisable { + n += 2 + } return n } @@ -667,6 +689,26 @@ func (m *Params) Unmarshal(dAtA []byte) error { break } } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AdminDisable", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowBank + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AdminDisable = bool(v != 0) default: iNdEx = preIndex skippy, err := skipBank(dAtA[iNdEx:]) diff --git a/x/bank/v2/types/params.go b/x/bank/v2/types/params.go index 5f05e9bb2b82..382fcb0a08eb 100644 --- a/x/bank/v2/types/params.go +++ b/x/bank/v2/types/params.go @@ -9,16 +9,17 @@ import ( ) // NewParams creates a new parameter configuration for the bank/v2 module -func NewParams(denomCreationFee sdk.Coins, gasConsume uint64) Params { +func NewParams(denomCreationFee sdk.Coins, gasConsume uint64, adminDisable bool) Params { return Params{ DenomCreationFee: denomCreationFee, DenomCreationGasConsume: gasConsume, + AdminDisable: adminDisable, } } // DefaultParams is the default parameter configuration for the bank/v2 module func DefaultParams() Params { - return NewParams(sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, math.NewInt(1_000_000))), 1_000_000) + return NewParams(sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, math.NewInt(1_000_000))), 1_000_000, false) } // Validate all bank/v2 module parameters From 737463c517796cd330d5a6a63ecd2b165efc23a8 Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Wed, 13 Nov 2024 22:26:48 +0700 Subject: [PATCH 29/35] update logic --- .../cosmos/bank/v2/authorityMetadata.proto | 2 +- x/bank/v2/depinject.go | 11 +- x/bank/v2/keeper/admins.go | 7 +- x/bank/v2/keeper/createdenom.go | 17 ++- x/bank/v2/keeper/handlers.go | 116 ++++++++++-------- x/bank/v2/keeper/keeper.go | 4 +- x/bank/v2/module.go | 1 - x/bank/v2/types/authorityMetadata.go | 10 +- x/bank/v2/types/authorityMetadata.pb.go | 42 ++++--- x/bank/v2/types/expected_keepers.go | 26 ++++ 10 files changed, 150 insertions(+), 86 deletions(-) diff --git a/x/bank/proto/cosmos/bank/v2/authorityMetadata.proto b/x/bank/proto/cosmos/bank/v2/authorityMetadata.proto index fb3386877e22..46d5a1a678a4 100644 --- a/x/bank/proto/cosmos/bank/v2/authorityMetadata.proto +++ b/x/bank/proto/cosmos/bank/v2/authorityMetadata.proto @@ -13,5 +13,5 @@ message DenomAuthorityMetadata { option (gogoproto.equal) = true; // Can be empty for no admin, or a valid osmosis address - string admin = 1 [(gogoproto.moretags) = "yaml:\"admin\""]; + bytes admin = 1; } diff --git a/x/bank/v2/depinject.go b/x/bank/v2/depinject.go index 6bb04908db2a..bcf4eeeed23d 100644 --- a/x/bank/v2/depinject.go +++ b/x/bank/v2/depinject.go @@ -34,10 +34,11 @@ func init() { type ModuleInputs struct { depinject.In - Config *moduletypes.Module - Cdc codec.Codec - Environment appmodule.Environment - AddressCodec address.Codec + AccountsKeeper types.AccountsModKeeper + Config *moduletypes.Module + Cdc codec.Codec + Environment appmodule.Environment + AddressCodec address.Codec } type ModuleOutputs struct { @@ -59,7 +60,7 @@ func ProvideModule(in ModuleInputs) ModuleOutputs { } } - k := keeper.NewKeeper(authority, in.AddressCodec, in.Environment, in.Cdc) + k := keeper.NewKeeper(authority, in.AddressCodec, in.Environment, in.Cdc, in.AccountsKeeper) m := NewAppModule(in.Cdc, k) return ModuleOutputs{ diff --git a/x/bank/v2/keeper/admins.go b/x/bank/v2/keeper/admins.go index 87bb04f3711a..e236b0637522 100644 --- a/x/bank/v2/keeper/admins.go +++ b/x/bank/v2/keeper/admins.go @@ -28,7 +28,12 @@ func (k Keeper) setAdmin(ctx context.Context, denom, admin string) error { return err } - metadata.Admin = admin + adminAddr, err := k.addressCodec.StringToBytes(admin) + if err != nil { + return err + } + + metadata.Admin = adminAddr return k.setAuthorityMetadata(ctx, denom, metadata) } diff --git a/x/bank/v2/keeper/createdenom.go b/x/bank/v2/keeper/createdenom.go index 0c27d3d579a5..313c39279d03 100644 --- a/x/bank/v2/keeper/createdenom.go +++ b/x/bank/v2/keeper/createdenom.go @@ -6,6 +6,8 @@ import ( "cosmossdk.io/x/bank/v2/types" + admin "cosmossdk.io/x/accounts/defaults/admin" + adminv1 "cosmossdk.io/x/accounts/defaults/admin/v1" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/address" ) @@ -48,8 +50,21 @@ func (k Keeper) createDenomAfterValidation(ctx context.Context, creatorAddr, den } } + creatorAddrBz, err := k.addressCodec.StringToBytes(creatorAddr) + if err != nil { + return err + } + + msgInitAdmin := &adminv1.MsgInit{ + Owner: creatorAddr, + Denom: denom, + } + + // Create denom admin account + _, accountAddr, err := k.accountsKeeper.Init(ctx, admin.Type, creatorAddrBz, msgInitAdmin, sdk.NewCoins()) + authorityMetadata := types.DenomAuthorityMetadata{ - Admin: creatorAddr, + Admin: accountAddr, } err = k.setAuthorityMetadata(ctx, denom, authorityMetadata) if err != nil { diff --git a/x/bank/v2/keeper/handlers.go b/x/bank/v2/keeper/handlers.go index 7c9b8c961dce..8e855936a564 100644 --- a/x/bank/v2/keeper/handlers.go +++ b/x/bank/v2/keeper/handlers.go @@ -14,6 +14,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + adminv1 "cosmossdk.io/x/accounts/defaults/admin/v1" ) type handlers struct { @@ -63,27 +64,6 @@ func (h handlers) MsgCreateDenom(ctx context.Context, msg *types.MsgCreateDenom) }, nil } -// TODO: should be gov? -func (h handlers) MsgChangeAdmin(goCtx context.Context, msg *types.MsgChangeAdmin) (*types.MsgChangeAdminResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - authorityMetadata, err := h.Keeper.GetAuthorityMetadata(ctx, msg.Denom) - if err != nil { - return nil, err - } - - if msg.Sender != authorityMetadata.GetAdmin() { - return nil, types.ErrUnauthorized - } - - err = h.Keeper.setAdmin(ctx, msg.Denom, msg.NewAdmin) - if err != nil { - return nil, err - } - - return &types.MsgChangeAdminResponse{}, nil -} - func (h handlers) MsgSend(ctx context.Context, msg *types.MsgSend) (*types.MsgSendResponse, error) { var ( from, to []byte @@ -119,23 +99,37 @@ func (h handlers) MsgSend(ctx context.Context, msg *types.MsgSend) (*types.MsgSe } func (h handlers) MsgMint(ctx context.Context, msg *types.MsgMint) (*types.MsgMintResponse, error) { - // Check if is a tokenfatory denom - _, _, err := types.DeconstructDenom(msg.Amount.Denom) - if err == nil { - _, denomExists := h.GetDenomMetaData(ctx, msg.Amount.Denom) - if !denomExists { - return nil, types.ErrDenomDoesNotExist.Wrapf("denom: %s", msg.Amount.Denom) - } + // Check if disable admin role or not + params := h.GetParams(ctx) + + isGov := false + if !params.AdminDisable { + // Check if a tokenfactory denom + _, _, err := types.DeconstructDenom(msg.Amount.Denom) + if err == nil { + authorityMetadata, err := h.GetAuthorityMetadata(ctx, msg.Amount.Denom) + if err != nil { + return nil, err + } - authorityMetadata, err := h.GetAuthorityMetadata(ctx, msg.Amount.Denom) - if err != nil { - return nil, err - } + adminAccAddr := authorityMetadata.Admin + + // Query if sender have mint perm + + _, err = h.accountsKeeper.Query(ctx, adminAccAddr, &adminv1.QueryMintPerm{ + Sender: msg.Authority, + Denom: msg.Amount.Denom, + }) - if msg.Authority != authorityMetadata.GetAdmin() { - return nil, types.ErrUnauthorized + if err != nil { + return nil, err + } + } else { + isGov = true } - } else { + } + + if params.AdminDisable || isGov { authorityBytes, err := h.addressCodec.StringToBytes(msg.Authority) if err != nil { return nil, err @@ -174,23 +168,37 @@ func (h handlers) MsgMint(ctx context.Context, msg *types.MsgMint) (*types.MsgMi } func (h handlers) MsgBurn(ctx context.Context, msg *types.MsgBurn) (*types.MsgBurnResponse, error) { - // Check if is a tokenfatory denom - _, _, err := types.DeconstructDenom(msg.Amount.Denom) - if err == nil { - _, denomExists := h.GetDenomMetaData(ctx, msg.Amount.Denom) - if !denomExists { - return nil, types.ErrDenomDoesNotExist.Wrapf("denom: %s", msg.Amount.Denom) - } + // Check if disable admin role or not + params := h.GetParams(ctx) + + isGov := false + if !params.AdminDisable { + // Check if a tokenfactory denom + _, _, err := types.DeconstructDenom(msg.Amount.Denom) + if err == nil { + authorityMetadata, err := h.GetAuthorityMetadata(ctx, msg.Amount.Denom) + if err != nil { + return nil, err + } - authorityMetadata, err := h.GetAuthorityMetadata(ctx, msg.Amount.Denom) - if err != nil { - return nil, err - } + adminAccAddr := authorityMetadata.Admin + + // Query if sender have mint perm + + _, err = h.accountsKeeper.Query(ctx, adminAccAddr, &adminv1.QueryBurnPerm{ + Sender: msg.Authority, + Denom: msg.Amount.Denom, + }) - if msg.Authority != authorityMetadata.GetAdmin() { - return nil, types.ErrUnauthorized + if err != nil { + return nil, err + } + } else { + isGov = true } - } else { + } + + if params.AdminDisable || isGov { authorityBytes, err := h.addressCodec.StringToBytes(msg.Authority) if err != nil { return nil, err @@ -284,7 +292,15 @@ func (h handlers) QueryDenomsFromCreator(ctx context.Context, req *types.QueryDe denoms := []string{} err := h.Keeper.denomAuthority.Walk(ctx, nil, func(denom string, authority types.DenomAuthorityMetadata) (stop bool, err error) { - if authority.Admin == req.Creator { + resp, err := h.accountsKeeper.Query(ctx, authority.Admin, &adminv1.QueryOwner{}) + if err != nil { + return true, err + } + v1Resp, ok := resp.(*adminv1.QueryOwnerResponse) + if !ok { + return true, errors.New("invalid response") + } + if v1Resp.Owner == req.Creator { denoms = append(denoms, denom) } return false, nil diff --git a/x/bank/v2/keeper/keeper.go b/x/bank/v2/keeper/keeper.go index 9255ffe33f16..90e8b774eb4a 100644 --- a/x/bank/v2/keeper/keeper.go +++ b/x/bank/v2/keeper/keeper.go @@ -22,6 +22,7 @@ import ( type Keeper struct { appmodulev2.Environment + accountsKeeper types.AccountsModKeeper authority []byte addressCodec address.Codec schema collections.Schema @@ -34,11 +35,12 @@ type Keeper struct { sendRestriction *sendRestriction } -func NewKeeper(authority []byte, addressCodec address.Codec, env appmodulev2.Environment, cdc codec.BinaryCodec) *Keeper { +func NewKeeper(authority []byte, addressCodec address.Codec, env appmodulev2.Environment, cdc codec.BinaryCodec, accountsKeeper types.AccountsModKeeper) *Keeper { sb := collections.NewSchemaBuilder(env.KVStoreService) k := &Keeper{ Environment: env, + accountsKeeper: accountsKeeper, authority: authority, addressCodec: addressCodec, // TODO(@julienrbrt): Should we add address codec to the environment? params: collections.NewItem(sb, types.ParamsKey, "params", codec.CollValue[types.Params](cdc)), diff --git a/x/bank/v2/module.go b/x/bank/v2/module.go index c9bffa00d95d..e19bf07751a0 100644 --- a/x/bank/v2/module.go +++ b/x/bank/v2/module.go @@ -100,7 +100,6 @@ func (am AppModule) RegisterMsgHandlers(router appmodulev2.MsgRouter) { appmodulev2.RegisterMsgHandler(router, handlers.MsgMint) appmodulev2.RegisterMsgHandler(router, handlers.MsgBurn) appmodulev2.RegisterMsgHandler(router, handlers.MsgCreateDenom) - appmodulev2.RegisterMsgHandler(router, handlers.MsgChangeAdmin) } // RegisterQueryHandlers registers the query handlers for the bank module. diff --git a/x/bank/v2/types/authorityMetadata.go b/x/bank/v2/types/authorityMetadata.go index b45bffcab552..fb321e9f63fb 100644 --- a/x/bank/v2/types/authorityMetadata.go +++ b/x/bank/v2/types/authorityMetadata.go @@ -1,15 +1,13 @@ package types import ( - sdk "github.com/cosmos/cosmos-sdk/types" + "bytes" + "errors" ) func (metadata DenomAuthorityMetadata) Validate() error { - if metadata.Admin != "" { - _, err := sdk.AccAddressFromBech32(metadata.Admin) - if err != nil { - return err - } + if bytes.Equal(metadata.Admin, []byte{}) { + return errors.New("empty admin") } return nil } diff --git a/x/bank/v2/types/authorityMetadata.pb.go b/x/bank/v2/types/authorityMetadata.pb.go index a26094721f2d..6986fc2bfc4b 100644 --- a/x/bank/v2/types/authorityMetadata.pb.go +++ b/x/bank/v2/types/authorityMetadata.pb.go @@ -4,6 +4,7 @@ package types import ( + bytes "bytes" fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" @@ -29,7 +30,7 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // permission, but is planned to be extended to the future. type DenomAuthorityMetadata struct { // Can be empty for no admin, or a valid osmosis address - Admin string `protobuf:"bytes,1,opt,name=admin,proto3" json:"admin,omitempty" yaml:"admin"` + Admin []byte `protobuf:"bytes,1,opt,name=admin,proto3" json:"admin,omitempty"` } func (m *DenomAuthorityMetadata) Reset() { *m = DenomAuthorityMetadata{} } @@ -65,11 +66,11 @@ func (m *DenomAuthorityMetadata) XXX_DiscardUnknown() { var xxx_messageInfo_DenomAuthorityMetadata proto.InternalMessageInfo -func (m *DenomAuthorityMetadata) GetAdmin() string { +func (m *DenomAuthorityMetadata) GetAdmin() []byte { if m != nil { return m.Admin } - return "" + return nil } func init() { @@ -81,21 +82,20 @@ func init() { } var fileDescriptor_c2b6286975ab0e3f = []byte{ - // 211 bytes of a gzipped FileDescriptorProto + // 196 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4b, 0xce, 0x2f, 0xce, 0xcd, 0x2f, 0xd6, 0x4f, 0x4a, 0xcc, 0xcb, 0xd6, 0x2f, 0x33, 0xd2, 0x4f, 0x2c, 0x2d, 0xc9, 0xc8, 0x2f, 0xca, 0x2c, 0xa9, 0xf4, 0x4d, 0x2d, 0x49, 0x4c, 0x49, 0x2c, 0x49, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x83, 0xa8, 0xd3, 0x03, 0xa9, 0xd3, 0x2b, 0x33, 0x92, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0x4b, 0xe9, 0x83, 0x58, 0x10, 0x55, 0x52, 0x72, 0x70, 0xd3, 0x8a, 0x53, 0xf5, - 0xcb, 0x0c, 0x93, 0x52, 0x4b, 0x12, 0x0d, 0xf5, 0x93, 0xf3, 0x33, 0xf3, 0x20, 0xf2, 0x4a, 0x6e, - 0x5c, 0x62, 0x2e, 0xa9, 0x79, 0xf9, 0xb9, 0x8e, 0xe8, 0xb6, 0x08, 0xa9, 0x71, 0xb1, 0x26, 0xa6, - 0xe4, 0x66, 0xe6, 0x49, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x3a, 0x09, 0x7c, 0xba, 0x27, 0xcf, 0x53, - 0x99, 0x98, 0x9b, 0x63, 0xa5, 0x04, 0x16, 0x56, 0x0a, 0x82, 0x48, 0x5b, 0xb1, 0xbc, 0x58, 0x20, - 0xcf, 0xe8, 0x64, 0x76, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, - 0x4e, 0x78, 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, 0x32, 0x10, - 0x17, 0x14, 0xa7, 0x64, 0xeb, 0x65, 0xe6, 0xeb, 0x57, 0xc0, 0xfd, 0x55, 0x52, 0x59, 0x90, 0x5a, - 0x9c, 0xc4, 0x06, 0x76, 0x86, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x55, 0x83, 0xcb, 0x67, 0xf6, - 0x00, 0x00, 0x00, + 0xcb, 0x0c, 0x93, 0x52, 0x4b, 0x12, 0x0d, 0xf5, 0x93, 0xf3, 0x33, 0xf3, 0x20, 0xf2, 0x4a, 0x26, + 0x5c, 0x62, 0x2e, 0xa9, 0x79, 0xf9, 0xb9, 0x8e, 0xe8, 0xb6, 0x08, 0x89, 0x70, 0xb1, 0x26, 0xa6, + 0xe4, 0x66, 0xe6, 0x49, 0x30, 0x2a, 0x30, 0x6a, 0xf0, 0x04, 0x41, 0x38, 0x56, 0x2c, 0x2f, 0x16, + 0xc8, 0x33, 0x3a, 0x99, 0x9d, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, + 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x0c, + 0xc4, 0xbe, 0xe2, 0x94, 0x6c, 0xbd, 0xcc, 0x7c, 0xfd, 0x0a, 0xb8, 0x2f, 0x4a, 0x2a, 0x0b, 0x52, + 0x8b, 0x93, 0xd8, 0xc0, 0x96, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x6e, 0x2a, 0x92, 0xf4, + 0xe4, 0x00, 0x00, 0x00, } func (this *DenomAuthorityMetadata) Equal(that interface{}) bool { @@ -117,7 +117,7 @@ func (this *DenomAuthorityMetadata) Equal(that interface{}) bool { } else if this == nil { return false } - if this.Admin != that1.Admin { + if !bytes.Equal(this.Admin, that1.Admin) { return false } return true @@ -215,7 +215,7 @@ func (m *DenomAuthorityMetadata) Unmarshal(dAtA []byte) error { if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Admin", wireType) } - var stringLen uint64 + var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowAuthorityMetadata @@ -225,23 +225,25 @@ func (m *DenomAuthorityMetadata) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if byteLen < 0 { return ErrInvalidLengthAuthorityMetadata } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + byteLen if postIndex < 0 { return ErrInvalidLengthAuthorityMetadata } if postIndex > l { return io.ErrUnexpectedEOF } - m.Admin = string(dAtA[iNdEx:postIndex]) + m.Admin = append(m.Admin[:0], dAtA[iNdEx:postIndex]...) + if m.Admin == nil { + m.Admin = []byte{} + } iNdEx = postIndex default: iNdEx = preIndex diff --git a/x/bank/v2/types/expected_keepers.go b/x/bank/v2/types/expected_keepers.go index ab1254f4c2be..a51968149cb1 100644 --- a/x/bank/v2/types/expected_keepers.go +++ b/x/bank/v2/types/expected_keepers.go @@ -1 +1,27 @@ package types + +import ( + "context" + + "cosmossdk.io/core/transaction" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// AccountsModKeeper defines the contract for x/accounts APIs +type AccountsModKeeper interface { + + // Query is used to query an account + Query( + ctx context.Context, + accountAddr []byte, + queryRequest transaction.Msg, + ) (transaction.Msg, error) + + Init( + ctx context.Context, + accountType string, + creator []byte, + initRequest transaction.Msg, + funds sdk.Coins, + ) (transaction.Msg, []byte, error) +} From a18b33de631cbbf6a895424100539f4fbd00130e Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Wed, 13 Nov 2024 22:26:55 +0700 Subject: [PATCH 30/35] test --- x/bank/v2/keeper/keeper_test.go | 96 ++++++++++++++++++++++++++++----- 1 file changed, 83 insertions(+), 13 deletions(-) diff --git a/x/bank/v2/keeper/keeper_test.go b/x/bank/v2/keeper/keeper_test.go index 792384734c5a..c3cba315daeb 100644 --- a/x/bank/v2/keeper/keeper_test.go +++ b/x/bank/v2/keeper/keeper_test.go @@ -18,7 +18,12 @@ import ( banktestutil "cosmossdk.io/x/bank/v2/testutil" "cosmossdk.io/x/bank/v2/types" + accountskeeper "cosmossdk.io/x/accounts" + "cosmossdk.io/x/accounts/accountstd" + "cosmossdk.io/x/accounts/defaults/admin" + "github.com/cosmos/cosmos-sdk/codec" codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/runtime" "github.com/cosmos/cosmos-sdk/testutil" sdk "github.com/cosmos/cosmos-sdk/types" @@ -76,11 +81,17 @@ func (suite *KeeperTestSuite) SetupTest() { authority := authtypes.NewModuleAddress("gov") suite.ctx = ctx + + ir := codectypes.NewInterfaceRegistry() + + accountsKeeper, err := accountskeeper.NewKeeper(codec.NewProtoCodec(ir), env, suite.addressCodec, ir, nil, accountstd.AddAccount(admin.Type, admin.NewAdmin)) + suite.Require().NoError(err) suite.bankKeeper = *keeper.NewKeeper( authority, ac, env, encCfg.Codec, + accountsKeeper, ) suite.addressCodec = ac } @@ -394,7 +405,7 @@ func (s *KeeperTestSuite) TestCreateDenom_GasConsume() { s.SetupTest() s.Run(fmt.Sprintf("Case %s", tc.desc), func() { // set params with the gas consume amount - s.Require().NoError(s.bankKeeper.SetParams(s.ctx, types.NewParams(nil, tc.gasConsume))) + s.Require().NoError(s.bankKeeper.SetParams(s.ctx, types.NewParams(nil, tc.gasConsume, false))) // amount of gas consumed prior to the denom creation gasConsumedBefore := s.bankKeeper.Environment.GasService.GasMeter(s.ctx).Consumed() @@ -434,9 +445,10 @@ func (s *KeeperTestSuite) TestMintHandler() { authority := authtypes.NewModuleAddress("gov") for _, tc := range []struct { - desc string - msg *types.MsgMint - expErr bool + desc string + msg *types.MsgMint + adminDisable bool + expErr bool }{ { desc: "Mint bar denom, valid", @@ -446,6 +458,7 @@ func (s *KeeperTestSuite) TestMintHandler() { Amount: sdk.NewCoin(barDenom, math.NewInt(100)), }, expErr: false, + adminDisable: false, }, { desc: "Mint bar denom, invalid authority", @@ -455,24 +468,47 @@ func (s *KeeperTestSuite) TestMintHandler() { Amount: sdk.NewCoin(barDenom, math.NewInt(100)), }, expErr: true, + adminDisable: false, }, { - desc: "Mint tokenfatory denom, valid", + desc: "Mint tokenfatory denom, admin enable, valid", msg: &types.MsgMint{ Authority: accAddrs[0].String(), ToAddress: accAddrs[1].String(), Amount: sdk.NewCoin(newDenom, math.NewInt(100)), }, expErr: false, + adminDisable: false, + }, + { + desc: "Mint tokenfatory denom, admin enable, invalid admin", + msg: &types.MsgMint{ + Authority: authority.String(), + ToAddress: accAddrs[1].String(), + Amount: sdk.NewCoin(newDenom, math.NewInt(100)), + }, + expErr: true, + adminDisable: false, }, { - desc: "Mint tokenfatory denom, invalid admin", + desc: "Mint tokenfatory denom, admin disable, valid authority", msg: &types.MsgMint{ Authority: authority.String(), ToAddress: accAddrs[1].String(), Amount: sdk.NewCoin(newDenom, math.NewInt(100)), }, + expErr: false, + adminDisable: true, + }, + { + desc: "Mint tokenfatory denom, admin enable, invalid authority", + msg: &types.MsgMint{ + Authority: accAddrs[0].String(), + ToAddress: accAddrs[1].String(), + Amount: sdk.NewCoin(newDenom, math.NewInt(100)), + }, expErr: true, + adminDisable: true, }, { desc: "Mint tokenfatory denom, denom not created", @@ -482,19 +518,23 @@ func (s *KeeperTestSuite) TestMintHandler() { Amount: sdk.NewCoin(newDenom+"s", math.NewInt(100)), }, expErr: true, + adminDisable: true, }, } { s.Run(fmt.Sprintf("Case %s", tc.desc), func() { - _, err := handler.MsgMint(s.ctx, tc.msg) + + require.NoError(handler.Keeper.SetParams(s.ctx, types.NewParams(sdk.NewCoins(), 0, tc.adminDisable))) + toAddr, err := s.addressCodec.StringToBytes(tc.msg.ToAddress) + require.NoError(err) + balanceBefore := s.bankKeeper.GetBalance(s.ctx, toAddr, tc.msg.Amount.Denom) + _, err = handler.MsgMint(s.ctx, tc.msg) if tc.expErr { require.Error(err) } else { require.NoError(err) // Check ToAddress balance after - toAddr, err := s.addressCodec.StringToBytes(tc.msg.ToAddress) - require.NoError(err) - balance := s.bankKeeper.GetBalance(s.ctx, toAddr, tc.msg.Amount.Denom) - require.Equal(balance, tc.msg.Amount) + balanceAfter := s.bankKeeper.GetBalance(s.ctx, toAddr, tc.msg.Amount.Denom) + require.Equal(balanceAfter.Sub(balanceBefore), tc.msg.Amount) } }) } @@ -529,6 +569,7 @@ func (s *KeeperTestSuite) TestBurnHandler() { for _, tc := range []struct { desc string msg *types.MsgBurn + adminDisable bool expErr bool }{ { @@ -538,6 +579,7 @@ func (s *KeeperTestSuite) TestBurnHandler() { BurnFromAddress: accAddrs[0].String(), Amount: sdk.NewCoin(fooDenom, math.NewInt(50)), }, + adminDisable: false, expErr: false, }, { @@ -547,6 +589,7 @@ func (s *KeeperTestSuite) TestBurnHandler() { BurnFromAddress: accAddrs[0].String(), Amount: sdk.NewCoin(fooDenom, math.NewInt(50)), }, + adminDisable: false, expErr: true, }, { @@ -556,6 +599,7 @@ func (s *KeeperTestSuite) TestBurnHandler() { BurnFromAddress: accAddrs[0].String(), Amount: sdk.NewCoin(fooDenom, math.NewInt(200)), }, + adminDisable: false, expErr: true, }, { @@ -565,24 +609,47 @@ func (s *KeeperTestSuite) TestBurnHandler() { BurnFromAddress: accAddrs[0].String(), Amount: sdk.NewCoin(barDenom, math.NewInt(50)), }, + adminDisable: false, expErr: true, }, { - desc: "Burn tokenfactory denom, valid", + desc: "Burn tokenfactory denom, admin enable, valid", msg: &types.MsgBurn{ Authority: accAddrs[0].String(), BurnFromAddress: accAddrs[0].String(), Amount: sdk.NewCoin(newDenom, math.NewInt(50)), }, + adminDisable: false, expErr: false, }, { - desc: "Burn tokenfactory denom, invalid admin", + desc: "Burn tokenfactory denom, admin enable, invalid admin", + msg: &types.MsgBurn{ + Authority: authority.String(), + BurnFromAddress: accAddrs[0].String(), + Amount: sdk.NewCoin(newDenom, math.NewInt(50)), + }, + adminDisable: false, + expErr: true, + }, + { + desc: "Burn tokenfactory denom, admin disable, valid authority", msg: &types.MsgBurn{ Authority: authority.String(), BurnFromAddress: accAddrs[0].String(), Amount: sdk.NewCoin(newDenom, math.NewInt(50)), }, + adminDisable: true, + expErr: false, + }, + { + desc: "Burn tokenfactory denom, admin disable, invalid authority", + msg: &types.MsgBurn{ + Authority: accAddrs[0].String(), + BurnFromAddress: accAddrs[0].String(), + Amount: sdk.NewCoin(newDenom, math.NewInt(50)), + }, + adminDisable: true, expErr: true, }, { @@ -592,6 +659,7 @@ func (s *KeeperTestSuite) TestBurnHandler() { BurnFromAddress: accAddrs[0].String(), Amount: sdk.NewCoin(newDenom, math.NewInt(150)), }, + adminDisable: false, expErr: true, }, { @@ -601,10 +669,12 @@ func (s *KeeperTestSuite) TestBurnHandler() { BurnFromAddress: accAddrs[0].String(), Amount: sdk.NewCoin(newDenom+"s", math.NewInt(50)), }, + adminDisable: false, expErr: true, }, } { s.Run(fmt.Sprintf("Case %s", tc.desc), func() { + require.NoError(handler.Keeper.SetParams(s.ctx, types.NewParams(sdk.NewCoins(), 0, tc.adminDisable))) // Get balance before burn fromAddr, err := s.addressCodec.StringToBytes(tc.msg.BurnFromAddress) require.NoError(err) From 1ce441ec35c190c721542f197a986e3ea0e9a43b Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Wed, 13 Nov 2024 22:27:14 +0700 Subject: [PATCH 31/35] go mod tidy --- go.mod | 29 +- go.sum | 62 ++-- simapp/go.mod | 33 +- simapp/go.sum | 62 ++-- simapp/v2/go.mod | 33 +- simapp/v2/go.sum | 62 ++-- tests/go.mod | 33 +- tests/go.sum | 62 ++-- x/accounts/defaults/admin/go.mod | 123 +++++++ x/accounts/defaults/admin/go.sum | 602 +++++++++++++++++++++++++++++++ x/accounts/go.mod | 29 +- x/accounts/go.sum | 62 ++-- x/bank/go.mod | 37 +- x/bank/go.sum | 62 ++-- x/group/go.mod | 32 +- x/group/go.sum | 62 ++-- 16 files changed, 1149 insertions(+), 236 deletions(-) create mode 100644 x/accounts/defaults/admin/go.mod create mode 100644 x/accounts/defaults/admin/go.sum diff --git a/go.mod b/go.mod index f3ec8fc48d23..3379eb6fb7f3 100644 --- a/go.mod +++ b/go.mod @@ -5,11 +5,11 @@ module github.com/cosmos/cosmos-sdk require ( cosmossdk.io/api v0.7.6 cosmossdk.io/collections v0.4.0 - cosmossdk.io/core v1.0.0-alpha.5 - cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29 + cosmossdk.io/core v1.0.0-alpha.6 + cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e cosmossdk.io/depinject v1.1.0 cosmossdk.io/errors v1.0.1 - cosmossdk.io/log v1.4.1 + cosmossdk.io/log v1.5.0 cosmossdk.io/math v1.3.0 cosmossdk.io/schema v0.3.1-0.20240930054013-7c6e0388a3f9 cosmossdk.io/store v1.1.1-0.20240418092142-896cdf1971bc @@ -55,10 +55,10 @@ require ( github.com/tendermint/go-amino v0.16.0 gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b go.uber.org/mock v0.5.0 - golang.org/x/crypto v0.28.0 - golang.org/x/sync v0.8.0 - google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 - google.golang.org/grpc v1.67.1 + golang.org/x/crypto v0.29.0 + golang.org/x/sync v0.9.0 + google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 + google.golang.org/grpc v1.68.0 google.golang.org/protobuf v1.35.1 gotest.tools/v3 v3.5.1 pgregory.net/rapid v1.1.0 @@ -76,7 +76,11 @@ require ( github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect + github.com/bytedance/sonic v1.12.4 // indirect + github.com/bytedance/sonic/loader v0.2.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cloudwego/base64x v0.1.4 // indirect + github.com/cloudwego/iasm v0.2.0 // indirect github.com/cockroachdb/errors v1.11.3 // indirect github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect @@ -121,6 +125,7 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.9 // indirect + github.com/klauspost/cpuid/v2 v2.2.9 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -154,21 +159,23 @@ require ( github.com/supranational/blst v0.3.13 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tidwall/btree v1.7.0 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 // indirect go.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5 // indirect go.opencensus.io v0.24.0 // indirect go.uber.org/multierr v1.11.0 // indirect + golang.org/x/arch v0.12.0 // indirect golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc // indirect golang.org/x/mod v0.18.0 // indirect golang.org/x/net v0.30.0 // indirect - golang.org/x/sys v0.26.0 // indirect - golang.org/x/term v0.25.0 // indirect - golang.org/x/text v0.19.0 // indirect + golang.org/x/sys v0.27.0 // indirect + golang.org/x/term v0.26.0 // indirect + golang.org/x/text v0.20.0 // indirect golang.org/x/tools v0.22.0 // indirect google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect rsc.io/qr v0.2.0 // indirect diff --git a/go.sum b/go.sum index 8b055a164ed9..ed416b4db25f 100644 --- a/go.sum +++ b/go.sum @@ -4,16 +4,16 @@ buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.35.1-20240130113600-88e buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.35.1-20240130113600-88ef6483f90f.1/go.mod h1:zqi/LZjZhyvjCMTEVIwAf5VRlkLduuCfqmZxgoormq0= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cosmossdk.io/core v1.0.0-alpha.5 h1:McjYXAQ6XcT20v2uHyH7PhoWH8V+mebzfVFqT3GinsI= -cosmossdk.io/core v1.0.0-alpha.5/go.mod h1:3u9cWq1FAVtiiCrDPpo4LhR+9V6k/ycSG4/Y/tREWCY= -cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29 h1:NxxUo0GMJUbIuVg0R70e3cbn9eFTEuMr7ev1AFvypdY= -cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29/go.mod h1:8s2tPeJtSiQuoyPmr2Ag7meikonISO4Fv4MoO8+ORrs= +cosmossdk.io/core v1.0.0-alpha.6 h1:5ukC4JcQKmemLQXcAgu/QoOvJI50hpBkIIg4ZT2EN8E= +cosmossdk.io/core v1.0.0-alpha.6/go.mod h1:3u9cWq1FAVtiiCrDPpo4LhR+9V6k/ycSG4/Y/tREWCY= +cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e h1:F+ScucYxwrrDJU8guJXQXpGhdpziYSbxW6HMP2wCNxs= +cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e/go.mod h1:3YvVv9aJayjPhdX0DY1IMrGse4sR63hNBWx2VtDWjGQ= cosmossdk.io/depinject v1.1.0 h1:wLan7LG35VM7Yo6ov0jId3RHWCGRhe8E8bsuARorl5E= cosmossdk.io/depinject v1.1.0/go.mod h1:kkI5H9jCGHeKeYWXTqYdruogYrEeWvBQCw1Pj4/eCFI= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/log v1.4.1 h1:wKdjfDRbDyZRuWa8M+9nuvpVYxrEOwbD/CA8hvhU8QM= -cosmossdk.io/log v1.4.1/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU= +cosmossdk.io/log v1.5.0 h1:dVdzPJW9kMrnAYyMf1duqacoidB9uZIl+7c6z0mnq0g= +cosmossdk.io/log v1.5.0/go.mod h1:Tr46PUJjiUthlwQ+hxYtUtPn4D/oCZXAkYevBeh5+FI= cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/schema v0.3.1-0.20240930054013-7c6e0388a3f9 h1:DmOoS/1PeY6Ih0hAVlJ69kLMUrLV+TCbfICrZtB1vdU= @@ -60,6 +60,11 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOF github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= +github.com/bytedance/sonic v1.12.4 h1:9Csb3c9ZJhfUWeMtpCDCq6BUoH5ogfDFLUgQ/jG+R0k= +github.com/bytedance/sonic v1.12.4/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= +github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.1 h1:1GgorWTqf12TA8mma4DDSbaQigE2wOgQo7iCjjJv3+E= +github.com/bytedance/sonic/loader v0.2.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -69,6 +74,10 @@ github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= +github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= +github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= @@ -306,6 +315,10 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= +github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -481,6 +494,8 @@ github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoM github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= @@ -505,13 +520,15 @@ go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9i go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +golang.org/x/arch v0.12.0 h1:UsYJhbzPYGsT0HbEdmYcqtCv8UNGvnaL561NnIUvaKg= +golang.org/x/arch v0.12.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= -golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= +golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc h1:O9NuF4s+E/PvMIy+9IUZB9znFwUIXEWSstNjek6VpVg= golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= @@ -554,8 +571,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= +golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -588,19 +605,19 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= -golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= +golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= +golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -629,10 +646,10 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEY google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= -google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= -google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 h1:zciRKQ4kBpFgpfC5QQCVtnnNAcLIqweL7plyZRQHVpI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 h1:XVhgTWWV3kGQlwJHR3upFWZeTsei6Oks1apkZSeonIE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= @@ -643,8 +660,8 @@ google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= -google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0= +google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -687,6 +704,7 @@ gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/qr v0.2.0 h1:6vBLea5/NRMVTz8V66gipeLycZMl/+UlFmk8DvqQ6WY= diff --git a/simapp/go.mod b/simapp/go.mod index e66832348356..c210edf15bdb 100644 --- a/simapp/go.mod +++ b/simapp/go.mod @@ -6,15 +6,15 @@ require ( cosmossdk.io/api v0.7.6 cosmossdk.io/client/v2 v2.0.0-20230630094428-02b760776860 cosmossdk.io/collections v0.4.1-0.20241104084251-838f1557af0a - cosmossdk.io/core v1.0.0-alpha.5 - cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29 + cosmossdk.io/core v1.0.0-alpha.6 + cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e cosmossdk.io/depinject v1.1.0 cosmossdk.io/indexer/postgres v0.1.0 - cosmossdk.io/log v1.4.1 + cosmossdk.io/log v1.5.0 cosmossdk.io/math v1.3.0 cosmossdk.io/store v1.1.1 cosmossdk.io/tools/confix v0.0.0-20230613133644-0a778132a60f - cosmossdk.io/x/accounts v0.0.0-20240913065641-0064ccbce64e + cosmossdk.io/x/accounts v0.0.0-20241112091912-96a1c1c833ea cosmossdk.io/x/accounts/defaults/base v0.0.0-00010101000000-000000000000 cosmossdk.io/x/accounts/defaults/lockup v0.0.0-20240417181816-5e7aae0db1f5 cosmossdk.io/x/accounts/defaults/multisig v0.0.0-00010101000000-000000000000 @@ -46,7 +46,7 @@ require ( github.com/spf13/viper v1.19.0 github.com/stretchr/testify v1.9.0 go.uber.org/mock v0.5.0 - google.golang.org/grpc v1.67.1 + google.golang.org/grpc v1.68.0 google.golang.org/protobuf v1.35.1 ) @@ -63,6 +63,7 @@ require ( cloud.google.com/go/storage v1.43.0 // indirect cosmossdk.io/errors v1.0.1 // indirect cosmossdk.io/schema v0.3.1-0.20241010135032-192601639cac // indirect + cosmossdk.io/x/accounts/defaults/admin v0.0.0-00010101000000-000000000000 // indirect filippo.io/edwards25519 v1.1.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.2 // indirect @@ -76,8 +77,12 @@ require ( github.com/bgentry/speakeasy v0.2.0 // indirect github.com/bits-and-blooms/bitset v1.10.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect + github.com/bytedance/sonic v1.12.4 // indirect + github.com/bytedance/sonic/loader v0.2.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chzyer/readline v1.5.1 // indirect + github.com/cloudwego/base64x v0.1.4 // indirect + github.com/cloudwego/iasm v0.2.0 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect github.com/cockroachdb/errors v1.11.3 // indirect github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect @@ -156,6 +161,7 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.9 // indirect + github.com/klauspost/cpuid/v2 v2.2.9 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -199,6 +205,7 @@ require ( github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.7.0 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ulikunitz/xz v0.5.12 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect @@ -212,21 +219,22 @@ require ( go.opentelemetry.io/otel/metric v1.28.0 // indirect go.opentelemetry.io/otel/trace v1.28.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.28.0 // indirect + golang.org/x/arch v0.12.0 // indirect + golang.org/x/crypto v0.29.0 // indirect golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc // indirect golang.org/x/mod v0.18.0 // indirect golang.org/x/net v0.30.0 // indirect golang.org/x/oauth2 v0.23.0 // indirect - golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.26.0 // indirect - golang.org/x/term v0.25.0 // indirect - golang.org/x/text v0.19.0 // indirect + golang.org/x/sync v0.9.0 // indirect + golang.org/x/sys v0.27.0 // indirect + golang.org/x/term v0.26.0 // indirect + golang.org/x/text v0.20.0 // indirect golang.org/x/time v0.6.0 // indirect golang.org/x/tools v0.22.0 // indirect google.golang.org/api v0.192.0 // indirect google.golang.org/genproto v0.0.0-20240814211410-ddb44dafa142 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.1 // indirect @@ -250,6 +258,7 @@ replace ( cosmossdk.io/store => ../store cosmossdk.io/tools/confix => ../tools/confix cosmossdk.io/x/accounts => ../x/accounts + cosmossdk.io/x/accounts/defaults/admin => ../x/accounts/defaults/admin cosmossdk.io/x/accounts/defaults/base => ../x/accounts/defaults/base cosmossdk.io/x/accounts/defaults/lockup => ../x/accounts/defaults/lockup cosmossdk.io/x/accounts/defaults/multisig => ../x/accounts/defaults/multisig diff --git a/simapp/go.sum b/simapp/go.sum index 7b12724d4e52..a56253768474 100644 --- a/simapp/go.sum +++ b/simapp/go.sum @@ -192,16 +192,16 @@ cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xX cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -cosmossdk.io/core v1.0.0-alpha.5 h1:McjYXAQ6XcT20v2uHyH7PhoWH8V+mebzfVFqT3GinsI= -cosmossdk.io/core v1.0.0-alpha.5/go.mod h1:3u9cWq1FAVtiiCrDPpo4LhR+9V6k/ycSG4/Y/tREWCY= -cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29 h1:NxxUo0GMJUbIuVg0R70e3cbn9eFTEuMr7ev1AFvypdY= -cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29/go.mod h1:8s2tPeJtSiQuoyPmr2Ag7meikonISO4Fv4MoO8+ORrs= +cosmossdk.io/core v1.0.0-alpha.6 h1:5ukC4JcQKmemLQXcAgu/QoOvJI50hpBkIIg4ZT2EN8E= +cosmossdk.io/core v1.0.0-alpha.6/go.mod h1:3u9cWq1FAVtiiCrDPpo4LhR+9V6k/ycSG4/Y/tREWCY= +cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e h1:F+ScucYxwrrDJU8guJXQXpGhdpziYSbxW6HMP2wCNxs= +cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e/go.mod h1:3YvVv9aJayjPhdX0DY1IMrGse4sR63hNBWx2VtDWjGQ= cosmossdk.io/depinject v1.1.0 h1:wLan7LG35VM7Yo6ov0jId3RHWCGRhe8E8bsuARorl5E= cosmossdk.io/depinject v1.1.0/go.mod h1:kkI5H9jCGHeKeYWXTqYdruogYrEeWvBQCw1Pj4/eCFI= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/log v1.4.1 h1:wKdjfDRbDyZRuWa8M+9nuvpVYxrEOwbD/CA8hvhU8QM= -cosmossdk.io/log v1.4.1/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU= +cosmossdk.io/log v1.5.0 h1:dVdzPJW9kMrnAYyMf1duqacoidB9uZIl+7c6z0mnq0g= +cosmossdk.io/log v1.5.0/go.mod h1:Tr46PUJjiUthlwQ+hxYtUtPn4D/oCZXAkYevBeh5+FI= cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/schema v0.3.0/go.mod h1:RDAhxIeNB4bYqAlF4NBJwRrgtnciMcyyg0DOKnhNZQQ= @@ -259,6 +259,11 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOF github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= +github.com/bytedance/sonic v1.12.4 h1:9Csb3c9ZJhfUWeMtpCDCq6BUoH5ogfDFLUgQ/jG+R0k= +github.com/bytedance/sonic v1.12.4/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= +github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.1 h1:1GgorWTqf12TA8mma4DDSbaQigE2wOgQo7iCjjJv3+E= +github.com/bytedance/sonic/loader v0.2.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -279,6 +284,10 @@ github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38 github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= +github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= +github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -628,6 +637,10 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= +github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -814,6 +827,8 @@ github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoM github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc= github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= @@ -863,6 +878,8 @@ go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9i go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +golang.org/x/arch v0.12.0 h1:UsYJhbzPYGsT0HbEdmYcqtCv8UNGvnaL561NnIUvaKg= +golang.org/x/arch v0.12.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -871,8 +888,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= -golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= +golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1008,8 +1025,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= +golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1092,13 +1109,13 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= -golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= +golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= +golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1109,8 +1126,8 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1345,10 +1362,10 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20240814211410-ddb44dafa142 h1:oLiyxGgE+rt22duwci1+TG7bg2/L1LQsXwfjPlmuJA0= google.golang.org/genproto v0.0.0-20240814211410-ddb44dafa142/go.mod h1:G11eXq53iI5Q+kyNOmCvnzBaxEA2Q/Ik5Tj7nqBE8j4= -google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= -google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 h1:zciRKQ4kBpFgpfC5QQCVtnnNAcLIqweL7plyZRQHVpI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 h1:XVhgTWWV3kGQlwJHR3upFWZeTsei6Oks1apkZSeonIE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1384,8 +1401,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= -google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0= +google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1440,6 +1457,7 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/simapp/v2/go.mod b/simapp/v2/go.mod index 9e624a42b33b..69aef521fa2f 100644 --- a/simapp/v2/go.mod +++ b/simapp/v2/go.mod @@ -5,16 +5,16 @@ go 1.23.1 require ( cosmossdk.io/api v0.7.6 cosmossdk.io/client/v2 v2.0.0-00010101000000-000000000000 - cosmossdk.io/core v1.0.0-alpha.5 + cosmossdk.io/core v1.0.0-alpha.6 cosmossdk.io/depinject v1.1.0 - cosmossdk.io/log v1.4.1 + cosmossdk.io/log v1.5.0 cosmossdk.io/math v1.3.0 cosmossdk.io/runtime/v2 v2.0.0-00010101000000-000000000000 cosmossdk.io/server/v2 v2.0.0-20240718121635-a877e3e8048a cosmossdk.io/server/v2/cometbft v0.0.0-20241015140036-ee3d320eaa55 cosmossdk.io/store/v2 v2.0.0 cosmossdk.io/tools/confix v0.0.0-00010101000000-000000000000 - cosmossdk.io/x/accounts v0.0.0-20240913065641-0064ccbce64e + cosmossdk.io/x/accounts v0.0.0-20241112091912-96a1c1c833ea cosmossdk.io/x/authz v0.0.0-00010101000000-000000000000 cosmossdk.io/x/bank v0.0.0-20240226161501-23359a0b6d91 cosmossdk.io/x/circuit v0.0.0-20230613133644-0a778132a60f @@ -58,13 +58,14 @@ require ( cloud.google.com/go/iam v1.1.13 // indirect cloud.google.com/go/storage v1.43.0 // indirect cosmossdk.io/collections v0.4.1-0.20241104084251-838f1557af0a // indirect - cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29 // indirect + cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e // indirect cosmossdk.io/errors v1.0.1 // indirect cosmossdk.io/errors/v2 v2.0.0-20240731132947-df72853b3ca5 // indirect cosmossdk.io/schema v0.3.1-0.20241010135032-192601639cac // indirect cosmossdk.io/server/v2/appmanager v0.0.0-20240802110823-cffeedff643d // indirect cosmossdk.io/server/v2/stf v0.0.0-20240708142107-25e99c54bac1 // indirect cosmossdk.io/store v1.1.1 // indirect + cosmossdk.io/x/accounts/defaults/admin v0.0.0-00010101000000-000000000000 // indirect cosmossdk.io/x/tx v1.0.0-alpha.1 // indirect filippo.io/edwards25519 v1.1.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect @@ -79,8 +80,12 @@ require ( github.com/bgentry/speakeasy v0.2.0 // indirect github.com/bits-and-blooms/bitset v1.10.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect + github.com/bytedance/sonic v1.12.4 // indirect + github.com/bytedance/sonic/loader v0.2.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chzyer/readline v1.5.1 // indirect + github.com/cloudwego/base64x v0.1.4 // indirect + github.com/cloudwego/iasm v0.2.0 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect github.com/cockroachdb/errors v1.11.3 // indirect github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect @@ -158,6 +163,7 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.9 // indirect + github.com/klauspost/cpuid/v2 v2.2.9 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -202,6 +208,7 @@ require ( github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.7.0 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ulikunitz/xz v0.5.12 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect @@ -216,22 +223,23 @@ require ( go.opentelemetry.io/otel/trace v1.28.0 // indirect go.uber.org/mock v0.5.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.28.0 // indirect + golang.org/x/arch v0.12.0 // indirect + golang.org/x/crypto v0.29.0 // indirect golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc // indirect golang.org/x/mod v0.18.0 // indirect golang.org/x/net v0.30.0 // indirect golang.org/x/oauth2 v0.23.0 // indirect - golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.26.0 // indirect - golang.org/x/term v0.25.0 // indirect - golang.org/x/text v0.19.0 // indirect + golang.org/x/sync v0.9.0 // indirect + golang.org/x/sys v0.27.0 // indirect + golang.org/x/term v0.26.0 // indirect + golang.org/x/text v0.20.0 // indirect golang.org/x/time v0.6.0 // indirect golang.org/x/tools v0.22.0 // indirect google.golang.org/api v0.192.0 // indirect google.golang.org/genproto v0.0.0-20240814211410-ddb44dafa142 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 // indirect - google.golang.org/grpc v1.67.1 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect + google.golang.org/grpc v1.68.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.1 // indirect @@ -252,6 +260,7 @@ replace ( cosmossdk.io/collections => ../../collections cosmossdk.io/tools/confix => ../../tools/confix cosmossdk.io/x/accounts => ../../x/accounts + cosmossdk.io/x/accounts/defaults/admin => ../../x/accounts/defaults/admin cosmossdk.io/x/accounts/defaults/base => ../../x/accounts/defaults/base cosmossdk.io/x/accounts/defaults/lockup => ../../x/accounts/defaults/lockup cosmossdk.io/x/accounts/defaults/multisig => ../../x/accounts/defaults/multisig diff --git a/simapp/v2/go.sum b/simapp/v2/go.sum index dc3317e03545..275d40bfaca8 100644 --- a/simapp/v2/go.sum +++ b/simapp/v2/go.sum @@ -192,18 +192,18 @@ cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xX cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -cosmossdk.io/core v1.0.0-alpha.5 h1:McjYXAQ6XcT20v2uHyH7PhoWH8V+mebzfVFqT3GinsI= -cosmossdk.io/core v1.0.0-alpha.5/go.mod h1:3u9cWq1FAVtiiCrDPpo4LhR+9V6k/ycSG4/Y/tREWCY= -cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29 h1:NxxUo0GMJUbIuVg0R70e3cbn9eFTEuMr7ev1AFvypdY= -cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29/go.mod h1:8s2tPeJtSiQuoyPmr2Ag7meikonISO4Fv4MoO8+ORrs= +cosmossdk.io/core v1.0.0-alpha.6 h1:5ukC4JcQKmemLQXcAgu/QoOvJI50hpBkIIg4ZT2EN8E= +cosmossdk.io/core v1.0.0-alpha.6/go.mod h1:3u9cWq1FAVtiiCrDPpo4LhR+9V6k/ycSG4/Y/tREWCY= +cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e h1:F+ScucYxwrrDJU8guJXQXpGhdpziYSbxW6HMP2wCNxs= +cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e/go.mod h1:3YvVv9aJayjPhdX0DY1IMrGse4sR63hNBWx2VtDWjGQ= cosmossdk.io/depinject v1.1.0 h1:wLan7LG35VM7Yo6ov0jId3RHWCGRhe8E8bsuARorl5E= cosmossdk.io/depinject v1.1.0/go.mod h1:kkI5H9jCGHeKeYWXTqYdruogYrEeWvBQCw1Pj4/eCFI= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= cosmossdk.io/errors/v2 v2.0.0-20240731132947-df72853b3ca5 h1:IQNdY2kB+k+1OM2DvqFG1+UgeU1JzZrWtwuWzI3ZfwA= cosmossdk.io/errors/v2 v2.0.0-20240731132947-df72853b3ca5/go.mod h1:0CuYKkFHxc1vw2JC+t21THBCALJVROrWVR/3PQ1urpc= -cosmossdk.io/log v1.4.1 h1:wKdjfDRbDyZRuWa8M+9nuvpVYxrEOwbD/CA8hvhU8QM= -cosmossdk.io/log v1.4.1/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU= +cosmossdk.io/log v1.5.0 h1:dVdzPJW9kMrnAYyMf1duqacoidB9uZIl+7c6z0mnq0g= +cosmossdk.io/log v1.5.0/go.mod h1:Tr46PUJjiUthlwQ+hxYtUtPn4D/oCZXAkYevBeh5+FI= cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/schema v0.3.1-0.20241010135032-192601639cac h1:3joNZZWZ3k7fMsrBDL1ktuQ2xQwYLZOaDhkruadDFmc= @@ -260,6 +260,11 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOF github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= +github.com/bytedance/sonic v1.12.4 h1:9Csb3c9ZJhfUWeMtpCDCq6BUoH5ogfDFLUgQ/jG+R0k= +github.com/bytedance/sonic v1.12.4/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= +github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.1 h1:1GgorWTqf12TA8mma4DDSbaQigE2wOgQo7iCjjJv3+E= +github.com/bytedance/sonic/loader v0.2.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -280,6 +285,10 @@ github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38 github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= +github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= +github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -621,6 +630,10 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= +github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -809,6 +822,8 @@ github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoM github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc= github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= @@ -858,6 +873,8 @@ go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9i go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +golang.org/x/arch v0.12.0 h1:UsYJhbzPYGsT0HbEdmYcqtCv8UNGvnaL561NnIUvaKg= +golang.org/x/arch v0.12.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -866,8 +883,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= -golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= +golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1003,8 +1020,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= +golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1087,13 +1104,13 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= -golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= +golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= +golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1104,8 +1121,8 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1340,10 +1357,10 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20240814211410-ddb44dafa142 h1:oLiyxGgE+rt22duwci1+TG7bg2/L1LQsXwfjPlmuJA0= google.golang.org/genproto v0.0.0-20240814211410-ddb44dafa142/go.mod h1:G11eXq53iI5Q+kyNOmCvnzBaxEA2Q/Ik5Tj7nqBE8j4= -google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= -google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 h1:zciRKQ4kBpFgpfC5QQCVtnnNAcLIqweL7plyZRQHVpI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 h1:XVhgTWWV3kGQlwJHR3upFWZeTsei6Oks1apkZSeonIE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1379,8 +1396,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= -google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0= +google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1435,6 +1452,7 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/tests/go.mod b/tests/go.mod index ecfb14d397ca..a0ae8947e5b5 100644 --- a/tests/go.mod +++ b/tests/go.mod @@ -5,9 +5,9 @@ go 1.23.1 require ( cosmossdk.io/api v0.7.6 cosmossdk.io/collections v0.4.1-0.20241104084251-838f1557af0a - cosmossdk.io/core v1.0.0-alpha.5 + cosmossdk.io/core v1.0.0-alpha.6 cosmossdk.io/depinject v1.1.0 - cosmossdk.io/log v1.4.1 + cosmossdk.io/log v1.5.0 cosmossdk.io/math v1.3.0 cosmossdk.io/simapp v0.0.0-20230309163709-87da587416ba cosmossdk.io/store v1.1.1 @@ -25,18 +25,18 @@ require ( github.com/spf13/cobra v1.8.1 // indirect github.com/stretchr/testify v1.9.0 go.uber.org/mock v0.5.0 - google.golang.org/grpc v1.67.1 + google.golang.org/grpc v1.68.0 google.golang.org/protobuf v1.35.1 gotest.tools/v3 v3.5.1 pgregory.net/rapid v1.1.0 ) require ( - cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29 + cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e cosmossdk.io/runtime/v2 v2.0.0-20240911143651-72620a577660 cosmossdk.io/server/v2/stf v0.0.0-00010101000000-000000000000 cosmossdk.io/store/v2 v2.0.0-00010101000000-000000000000 - cosmossdk.io/x/accounts v0.0.0-20240913065641-0064ccbce64e + cosmossdk.io/x/accounts v0.0.0-20241112091912-96a1c1c833ea cosmossdk.io/x/accounts/defaults/base v0.0.0-00010101000000-000000000000 cosmossdk.io/x/accounts/defaults/lockup v0.0.0-20240417181816-5e7aae0db1f5 cosmossdk.io/x/accounts/defaults/multisig v0.0.0-00010101000000-000000000000 @@ -73,6 +73,7 @@ require ( cosmossdk.io/indexer/postgres v0.1.0 // indirect cosmossdk.io/schema v0.3.1-0.20241010135032-192601639cac // indirect cosmossdk.io/server/v2/appmanager v0.0.0-00010101000000-000000000000 // indirect + cosmossdk.io/x/accounts/defaults/admin v0.0.0-00010101000000-000000000000 // indirect cosmossdk.io/x/circuit v0.0.0-20230613133644-0a778132a60f // indirect cosmossdk.io/x/epochs v0.0.0-20240522060652-a1ae4c3e0337 // indirect filippo.io/edwards25519 v1.1.0 // indirect @@ -88,8 +89,12 @@ require ( github.com/bits-and-blooms/bitset v1.10.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/bufbuild/protocompile v0.14.1 // indirect + github.com/bytedance/sonic v1.12.4 // indirect + github.com/bytedance/sonic/loader v0.2.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chzyer/readline v1.5.1 // indirect + github.com/cloudwego/base64x v0.1.4 // indirect + github.com/cloudwego/iasm v0.2.0 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect github.com/cockroachdb/errors v1.11.3 // indirect github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect @@ -165,6 +170,7 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.9 // indirect + github.com/klauspost/cpuid/v2 v2.2.9 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -205,6 +211,7 @@ require ( github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.7.0 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ulikunitz/xz v0.5.12 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect @@ -217,21 +224,22 @@ require ( go.opentelemetry.io/otel/metric v1.28.0 // indirect go.opentelemetry.io/otel/trace v1.28.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.28.0 // indirect + golang.org/x/arch v0.12.0 // indirect + golang.org/x/crypto v0.29.0 // indirect golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc // indirect golang.org/x/mod v0.18.0 // indirect golang.org/x/net v0.30.0 // indirect golang.org/x/oauth2 v0.23.0 // indirect - golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.26.0 // indirect - golang.org/x/term v0.25.0 // indirect - golang.org/x/text v0.19.0 // indirect + golang.org/x/sync v0.9.0 // indirect + golang.org/x/sys v0.27.0 // indirect + golang.org/x/term v0.26.0 // indirect + golang.org/x/text v0.20.0 // indirect golang.org/x/time v0.6.0 // indirect golang.org/x/tools v0.22.0 // indirect google.golang.org/api v0.192.0 // indirect google.golang.org/genproto v0.0.0-20240814211410-ddb44dafa142 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect sigs.k8s.io/yaml v1.4.0 // indirect @@ -255,6 +263,7 @@ replace ( cosmossdk.io/store => ../store cosmossdk.io/store/v2 => ../store/v2 cosmossdk.io/x/accounts => ../x/accounts + cosmossdk.io/x/accounts/defaults/admin => ../x/accounts/defaults/admin cosmossdk.io/x/accounts/defaults/base => ../x/accounts/defaults/base cosmossdk.io/x/accounts/defaults/lockup => ../x/accounts/defaults/lockup cosmossdk.io/x/accounts/defaults/multisig => ../x/accounts/defaults/multisig diff --git a/tests/go.sum b/tests/go.sum index 0afc406fdc31..041ac7621d59 100644 --- a/tests/go.sum +++ b/tests/go.sum @@ -192,18 +192,18 @@ cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xX cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -cosmossdk.io/core v1.0.0-alpha.5 h1:McjYXAQ6XcT20v2uHyH7PhoWH8V+mebzfVFqT3GinsI= -cosmossdk.io/core v1.0.0-alpha.5/go.mod h1:3u9cWq1FAVtiiCrDPpo4LhR+9V6k/ycSG4/Y/tREWCY= -cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29 h1:NxxUo0GMJUbIuVg0R70e3cbn9eFTEuMr7ev1AFvypdY= -cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29/go.mod h1:8s2tPeJtSiQuoyPmr2Ag7meikonISO4Fv4MoO8+ORrs= +cosmossdk.io/core v1.0.0-alpha.6 h1:5ukC4JcQKmemLQXcAgu/QoOvJI50hpBkIIg4ZT2EN8E= +cosmossdk.io/core v1.0.0-alpha.6/go.mod h1:3u9cWq1FAVtiiCrDPpo4LhR+9V6k/ycSG4/Y/tREWCY= +cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e h1:F+ScucYxwrrDJU8guJXQXpGhdpziYSbxW6HMP2wCNxs= +cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e/go.mod h1:3YvVv9aJayjPhdX0DY1IMrGse4sR63hNBWx2VtDWjGQ= cosmossdk.io/depinject v1.1.0 h1:wLan7LG35VM7Yo6ov0jId3RHWCGRhe8E8bsuARorl5E= cosmossdk.io/depinject v1.1.0/go.mod h1:kkI5H9jCGHeKeYWXTqYdruogYrEeWvBQCw1Pj4/eCFI= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= cosmossdk.io/errors/v2 v2.0.0-20240731132947-df72853b3ca5 h1:IQNdY2kB+k+1OM2DvqFG1+UgeU1JzZrWtwuWzI3ZfwA= cosmossdk.io/errors/v2 v2.0.0-20240731132947-df72853b3ca5/go.mod h1:0CuYKkFHxc1vw2JC+t21THBCALJVROrWVR/3PQ1urpc= -cosmossdk.io/log v1.4.1 h1:wKdjfDRbDyZRuWa8M+9nuvpVYxrEOwbD/CA8hvhU8QM= -cosmossdk.io/log v1.4.1/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU= +cosmossdk.io/log v1.5.0 h1:dVdzPJW9kMrnAYyMf1duqacoidB9uZIl+7c6z0mnq0g= +cosmossdk.io/log v1.5.0/go.mod h1:Tr46PUJjiUthlwQ+hxYtUtPn4D/oCZXAkYevBeh5+FI= cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/schema v0.3.0/go.mod h1:RDAhxIeNB4bYqAlF4NBJwRrgtnciMcyyg0DOKnhNZQQ= @@ -259,6 +259,11 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOF github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/bufbuild/protocompile v0.14.1 h1:iA73zAf/fyljNjQKwYzUHD6AD4R8KMasmwa/FBatYVw= github.com/bufbuild/protocompile v0.14.1/go.mod h1:ppVdAIhbr2H8asPk6k4pY7t9zB1OU5DoEw9xY/FUi1c= +github.com/bytedance/sonic v1.12.4 h1:9Csb3c9ZJhfUWeMtpCDCq6BUoH5ogfDFLUgQ/jG+R0k= +github.com/bytedance/sonic v1.12.4/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= +github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.1 h1:1GgorWTqf12TA8mma4DDSbaQigE2wOgQo7iCjjJv3+E= +github.com/bytedance/sonic/loader v0.2.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -279,6 +284,10 @@ github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38 github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= +github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= +github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -625,6 +634,10 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= +github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -807,6 +820,8 @@ github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoM github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc= github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= @@ -856,6 +871,8 @@ go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9i go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +golang.org/x/arch v0.12.0 h1:UsYJhbzPYGsT0HbEdmYcqtCv8UNGvnaL561NnIUvaKg= +golang.org/x/arch v0.12.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -864,8 +881,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= -golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= +golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1001,8 +1018,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= +golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1084,13 +1101,13 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= -golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= +golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= +golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1101,8 +1118,8 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1338,10 +1355,10 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20240814211410-ddb44dafa142 h1:oLiyxGgE+rt22duwci1+TG7bg2/L1LQsXwfjPlmuJA0= google.golang.org/genproto v0.0.0-20240814211410-ddb44dafa142/go.mod h1:G11eXq53iI5Q+kyNOmCvnzBaxEA2Q/Ik5Tj7nqBE8j4= -google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= -google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 h1:zciRKQ4kBpFgpfC5QQCVtnnNAcLIqweL7plyZRQHVpI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 h1:XVhgTWWV3kGQlwJHR3upFWZeTsei6Oks1apkZSeonIE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1377,8 +1394,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= -google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0= +google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1433,6 +1450,7 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/x/accounts/defaults/admin/go.mod b/x/accounts/defaults/admin/go.mod new file mode 100644 index 000000000000..8ba0a2a61222 --- /dev/null +++ b/x/accounts/defaults/admin/go.mod @@ -0,0 +1,123 @@ +module cosmossdk.io/x/accounts/defaults/admin + +go 1.23.1 + +require ( + cosmossdk.io/collections v0.4.0 + cosmossdk.io/core v1.0.0-alpha.6 + cosmossdk.io/x/accounts v0.0.0-00010101000000-000000000000 + github.com/cosmos/cosmos-sdk v0.53.0 + github.com/cosmos/gogoproto v1.7.0 +) + +require ( + buf.build/gen/go/cometbft/cometbft/protocolbuffers/go v1.35.1-20240701160653-fedbb9acfd2f.1 // indirect + buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.35.1-20240130113600-88ef6483f90f.1 // indirect + cosmossdk.io/api v0.7.6 // indirect + cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e // indirect + cosmossdk.io/depinject v1.1.0 // indirect + cosmossdk.io/errors v1.0.1 // indirect + cosmossdk.io/log v1.5.0 // indirect + cosmossdk.io/math v1.3.0 // indirect + cosmossdk.io/schema v0.3.1-0.20240930054013-7c6e0388a3f9 // indirect + cosmossdk.io/store v1.1.1-0.20240418092142-896cdf1971bc // indirect + cosmossdk.io/x/tx v1.0.0-alpha.1 // indirect + filippo.io/edwards25519 v1.1.0 // indirect + github.com/DataDog/zstd v1.5.5 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect + github.com/bytedance/sonic v1.12.4 // indirect + github.com/bytedance/sonic/loader v0.2.1 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cloudwego/base64x v0.1.4 // indirect + github.com/cloudwego/iasm v0.2.0 // indirect + github.com/cockroachdb/errors v1.11.3 // indirect + github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect + github.com/cockroachdb/pebble v1.1.2 // indirect + github.com/cockroachdb/redact v1.1.5 // indirect + github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect + github.com/cometbft/cometbft v1.0.0-rc1.0.20240908111210-ab0be101882f // indirect + github.com/cometbft/cometbft-db v0.15.0 // indirect + github.com/cometbft/cometbft/api v1.0.0-rc.1 // indirect + github.com/cosmos/btcutil v1.0.5 // indirect + github.com/cosmos/cosmos-db v1.0.3-0.20240911104526-ddc3f09bfc22 // indirect + github.com/cosmos/cosmos-proto v1.0.0-beta.5 // indirect + github.com/cosmos/crypto v0.1.2 // indirect + github.com/cosmos/ics23/go v0.11.0 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect + github.com/dgraph-io/badger/v4 v4.3.0 // indirect + github.com/dgraph-io/ristretto v0.1.2-0.20240116140435-c67e07994f91 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/getsentry/sentry-go v0.27.0 // indirect + github.com/go-kit/kit v0.13.0 // indirect + github.com/go-kit/log v0.2.1 // indirect + github.com/go-logfmt/logfmt v0.6.0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/btree v1.1.3 // indirect + github.com/google/flatbuffers v2.0.8+incompatible // indirect + github.com/google/go-cmp v0.6.0 // indirect + github.com/hashicorp/go-immutable-radix v1.3.1 // indirect + github.com/hashicorp/go-metrics v0.5.3 // indirect + github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hdevalence/ed25519consensus v0.2.0 // indirect + github.com/iancoleman/strcase v0.3.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/jmhodges/levigo v1.0.0 // indirect + github.com/klauspost/compress v1.17.9 // indirect + github.com/klauspost/cpuid/v2 v2.2.9 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect + github.com/linxGnu/grocksdb v1.9.3 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect + github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/prometheus/client_golang v1.20.5 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.60.1 // indirect + github.com/prometheus/procfs v0.15.1 // indirect + github.com/rogpeppe/go-internal v1.12.0 // indirect + github.com/rs/zerolog v1.33.0 // indirect + github.com/sasha-s/go-deadlock v0.3.5 // indirect + github.com/spf13/cast v1.7.0 // indirect + github.com/spf13/cobra v1.8.1 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/stretchr/testify v1.9.0 // indirect + github.com/supranational/blst v0.3.13 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect + github.com/tendermint/go-amino v0.16.0 // indirect + github.com/tidwall/btree v1.7.0 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b // indirect + gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 // indirect + go.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5 // indirect + go.opencensus.io v0.24.0 // indirect + golang.org/x/arch v0.12.0 // indirect + golang.org/x/crypto v0.29.0 // indirect + golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc // indirect + golang.org/x/net v0.30.0 // indirect + golang.org/x/sys v0.27.0 // indirect + golang.org/x/text v0.20.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect + google.golang.org/grpc v1.68.0 // indirect + google.golang.org/protobuf v1.35.1 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect +) + +replace github.com/cosmos/cosmos-sdk => ../../../../. + +replace ( + cosmossdk.io/api => ../../../../api + cosmossdk.io/x/accounts => ../../. + +) diff --git a/x/accounts/defaults/admin/go.sum b/x/accounts/defaults/admin/go.sum new file mode 100644 index 000000000000..27b3eccbf7e6 --- /dev/null +++ b/x/accounts/defaults/admin/go.sum @@ -0,0 +1,602 @@ +buf.build/gen/go/cometbft/cometbft/protocolbuffers/go v1.35.1-20240701160653-fedbb9acfd2f.1 h1:DIUSA9vcIz63uUotWfbXXlwv1iTL+C0O2kEMLsnIIbc= +buf.build/gen/go/cometbft/cometbft/protocolbuffers/go v1.35.1-20240701160653-fedbb9acfd2f.1/go.mod h1:JTBMfyi+qAXUHumX+rcD2WIq9FNWmdcNh5MjBnSw0L0= +buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.35.1-20240130113600-88ef6483f90f.1 h1:F78ecjvMtgd1aZ1Aj9cvBjURxVGCYvRM+OOy5eR+pjw= +buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.35.1-20240130113600-88ef6483f90f.1/go.mod h1:zqi/LZjZhyvjCMTEVIwAf5VRlkLduuCfqmZxgoormq0= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= +cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= +cosmossdk.io/core v1.0.0-alpha.6 h1:5ukC4JcQKmemLQXcAgu/QoOvJI50hpBkIIg4ZT2EN8E= +cosmossdk.io/core v1.0.0-alpha.6/go.mod h1:3u9cWq1FAVtiiCrDPpo4LhR+9V6k/ycSG4/Y/tREWCY= +cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e h1:F+ScucYxwrrDJU8guJXQXpGhdpziYSbxW6HMP2wCNxs= +cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e/go.mod h1:3YvVv9aJayjPhdX0DY1IMrGse4sR63hNBWx2VtDWjGQ= +cosmossdk.io/depinject v1.1.0 h1:wLan7LG35VM7Yo6ov0jId3RHWCGRhe8E8bsuARorl5E= +cosmossdk.io/depinject v1.1.0/go.mod h1:kkI5H9jCGHeKeYWXTqYdruogYrEeWvBQCw1Pj4/eCFI= +cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= +cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= +cosmossdk.io/log v1.5.0 h1:dVdzPJW9kMrnAYyMf1duqacoidB9uZIl+7c6z0mnq0g= +cosmossdk.io/log v1.5.0/go.mod h1:Tr46PUJjiUthlwQ+hxYtUtPn4D/oCZXAkYevBeh5+FI= +cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= +cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= +cosmossdk.io/schema v0.3.1-0.20240930054013-7c6e0388a3f9 h1:DmOoS/1PeY6Ih0hAVlJ69kLMUrLV+TCbfICrZtB1vdU= +cosmossdk.io/schema v0.3.1-0.20240930054013-7c6e0388a3f9/go.mod h1:RDAhxIeNB4bYqAlF4NBJwRrgtnciMcyyg0DOKnhNZQQ= +cosmossdk.io/store v1.1.1-0.20240418092142-896cdf1971bc h1:R9O9d75e0qZYUsVV0zzi+D7cNLnX2JrUOQNoIPaF0Bg= +cosmossdk.io/store v1.1.1-0.20240418092142-896cdf1971bc/go.mod h1:amTTatOUV3u1PsKmNb87z6/galCxrRbz9kRdJkL0DyU= +cosmossdk.io/x/tx v1.0.0-alpha.1 h1:5w61etWMQbdCSR7uveWXCnGnD5eQ/64B2vzIhqA80yo= +cosmossdk.io/x/tx v1.0.0-alpha.1/go.mod h1:xlJjZV1wxZBTCP+ygZx9pNT/XxsfHDPf1H0VhHaUp5w= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= +github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= +github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= +github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/DataDog/datadog-go v4.8.3+incompatible h1:fNGaYSuObuQb5nzeTQqowRAd9bpDIRRV4/gUtIBjh8Q= +github.com/DataDog/datadog-go v4.8.3+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= +github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.2.0 h1:tgObeVOf8WAvtuAX6DhJ4xks4CFNwPDZiqzGqIHE51E= +github.com/bgentry/speakeasy v0.2.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ= +github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c= +github.com/btcsuite/btcd/btcutil v1.1.6/go.mod h1:9dFymx8HpuLqBnsPELrImQeTQfKBQqzqGbbV3jK55aE= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/bytedance/sonic v1.12.4 h1:9Csb3c9ZJhfUWeMtpCDCq6BUoH5ogfDFLUgQ/jG+R0k= +github.com/bytedance/sonic v1.12.4/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= +github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.1 h1:1GgorWTqf12TA8mma4DDSbaQigE2wOgQo7iCjjJv3+E= +github.com/bytedance/sonic/loader v0.2.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= +github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= +github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I= +github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8= +github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce h1:giXvy4KSc/6g/esnpM7Geqxka4WSqI1SZc7sMJFd3y4= +github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/pebble v1.1.2 h1:CUh2IPtR4swHlEj48Rhfzw6l/d0qA31fItcIszQVIsA= +github.com/cockroachdb/pebble v1.1.2/go.mod h1:4exszw1r40423ZsmkG/09AFEG83I0uDgfujJdbL6kYU= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= +github.com/cometbft/cometbft v1.0.0-rc1.0.20240908111210-ab0be101882f h1:rPWKqyc+CeuddICqlqptf+3NPE8exbC9SOGuDPTEN3k= +github.com/cometbft/cometbft v1.0.0-rc1.0.20240908111210-ab0be101882f/go.mod h1:MqZ5E5jLU1JdP10FSRXhItpm+GdHMbW7Myv3UARLxqg= +github.com/cometbft/cometbft-db v0.15.0 h1:VLtsRt8udD4jHCyjvrsTBpgz83qne5hnL245AcPJVRk= +github.com/cometbft/cometbft-db v0.15.0/go.mod h1:EBrFs1GDRiTqrWXYi4v90Awf/gcdD5ExzdPbg4X8+mk= +github.com/cometbft/cometbft/api v1.0.0-rc.1 h1:GtdXwDGlqwHYs16A4egjwylfYOMYyEacLBrs3Zvpt7g= +github.com/cometbft/cometbft/api v1.0.0-rc.1/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= +github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= +github.com/cosmos/cosmos-db v1.0.3-0.20240911104526-ddc3f09bfc22 h1:V3WlarcZwlYYt3dUsStxm0FAFXVeEcvgwfmR6upxm5M= +github.com/cosmos/cosmos-db v1.0.3-0.20240911104526-ddc3f09bfc22/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= +github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= +github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= +github.com/cosmos/crypto v0.1.2 h1:Yn500sPY+9sKVdhiPUSDtt8JOpBGMB515dOmla4zfls= +github.com/cosmos/crypto v0.1.2/go.mod h1:b6VWz3HczIpBaQPvI7KrbQeF3pXHh0al3T5e0uwMBQw= +github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= +github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= +github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= +github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= +github.com/cosmos/gogoproto v1.7.0 h1:79USr0oyXAbxg3rspGh/m4SWNyoz/GLaAh0QlCe2fro= +github.com/cosmos/gogoproto v1.7.0/go.mod h1:yWChEv5IUEYURQasfyBW5ffkMHR/90hiHgbNgrtp4j0= +github.com/cosmos/iavl v1.3.1 h1:+W1G2uSUtJMqMGpwz/fKiwZxY2DDT/9/0hyNLm6Geu0= +github.com/cosmos/iavl v1.3.1/go.mod h1:T6SfBcyhulVIY2G/ZtAtQm/QiJvsuhIos52V4dWYk88= +github.com/cosmos/ics23/go v0.11.0 h1:jk5skjT0TqX5e5QJbEnwXIS2yI2vnmLOgpQPeM5RtnU= +github.com/cosmos/ics23/go v0.11.0/go.mod h1:A8OjxPE67hHST4Icw94hOxxFEJMBG031xIGF/JHNIY0= +github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5nvue4rK+yM= +github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/danieljoos/wincred v1.2.1 h1:dl9cBrupW8+r5250DYkYxocLeZ1Y4vB1kxgtjxw8GQs= +github.com/danieljoos/wincred v1.2.1/go.mod h1:uGaFL9fDn3OLTvzCGulzE+SzjEe5NGlh5FdCcyfPwps= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= +github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/dgraph-io/badger/v4 v4.3.0 h1:lcsCE1/1qrRhqP+zYx6xDZb8n7U+QlwNicpc676Ub40= +github.com/dgraph-io/badger/v4 v4.3.0/go.mod h1:Sc0T595g8zqAQRDf44n+z3wG4BOqLwceaFntt8KPxUM= +github.com/dgraph-io/ristretto v0.1.2-0.20240116140435-c67e07994f91 h1:Pux6+xANi0I7RRo5E1gflI4EZ2yx3BGZ75JkAIvGEOA= +github.com/dgraph-io/ristretto v0.1.2-0.20240116140435-c67e07994f91/go.mod h1:swkazRqnUf1N62d0Nutz7KIj2UKqsm/H8tD0nBJAXqM= +github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= +github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/dvsekhvalnov/jose2go v1.6.0 h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY= +github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= +github.com/emicklei/dot v1.6.2 h1:08GN+DD79cy/tzN6uLCT84+2Wk9u+wvqP+Hkx/dIR8A= +github.com/emicklei/dot v1.6.2/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= +github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= +github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.13.0 h1:OoneCcHKHQ03LfBpoQCUfCluwd2Vt3ohz+kvbJneZAU= +github.com/go-kit/kit v0.13.0/go.mod h1:phqEHMMUbyrCFCTgH48JueqrM3md2HcAZ8N3XE4FKDg= +github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= +github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= +github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= +github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= +github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/flatbuffers v2.0.8+incompatible h1:ivUb1cGomAB101ZM1T0nOiWz9pSrTMoa9+EiY7igmkM= +github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= +github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= +github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= +github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= +github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= +github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= +github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= +github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-metrics v0.5.3 h1:M5uADWMOGCTUNU1YuC4hfknOeHNaX54LDm4oYSucoNE= +github.com/hashicorp/go-metrics v0.5.3/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE= +github.com/hashicorp/go-plugin v1.6.2 h1:zdGAEd0V1lCaU0u+MxWQhtSDQmahpkwOun8U8EiRVog= +github.com/hashicorp/go-plugin v1.6.2/go.mod h1:CkgLQ5CZqNmdL9U9JzM532t8ZiYQ35+pj3b1FD37R0Q= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= +github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8= +github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns= +github.com/hdevalence/ed25519consensus v0.2.0 h1:37ICyZqdyj0lAZ8P4D1d1id3HqbbG1N3iBb1Tb4rdcU= +github.com/hdevalence/ed25519consensus v0.2.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/skiplist v1.2.1 h1:dTi93MgjwErA/8idWTzIw4Y1kZsMWx35fmI2c8Rij7w= +github.com/huandu/skiplist v1.2.1/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= +github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= +github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= +github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= +github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/linxGnu/grocksdb v1.9.3 h1:s1cbPcOd0cU2SKXRG1nEqCOWYAELQjdqg3RVI2MH9ik= +github.com/linxGnu/grocksdb v1.9.3/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= +github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a h1:dlRvE5fWabOchtH7znfiFCcOvmIYgOeAS5ifBXBlh9Q= +github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s= +github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= +github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/onsi/gomega v1.28.1 h1:MijcGUbfYuznzK/5R4CPNoUP/9Xvuo20sXfEm6XxoTA= +github.com/onsi/gomega v1.28.1/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= +github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= +github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw= +github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= +github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/common v0.60.1 h1:FUas6GcOw66yB/73KC+BOZoFJmbo/1pojoILArPAaSc= +github.com/prometheus/common v0.60.1/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= +github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= +github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/sasha-s/go-deadlock v0.3.5 h1:tNCOEEDG6tBqrNDOX35j/7hL5FcFViG6awUGROb2NsU= +github.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= +github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= +github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/supranational/blst v0.3.13 h1:AYeSxdOMacwu7FBmpfloBz5pbFXDmJL33RuwnKtmTjk= +github.com/supranational/blst v0.3.13/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= +github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= +github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= +github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= +github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= +github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= +github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= +gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b h1:CzigHMRySiX3drau9C6Q5CAbNIApmLdat5jPMqChvDA= +gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b/go.mod h1:/y/V339mxv2sZmYYR64O07VuCpdNZqCTwO8ZcouTMI8= +gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 h1:qwDnMxjkyLmAFgcfgTnfJrmYKWhHnci3GjDqcZp1M3Q= +gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02/go.mod h1:JTnUj0mpYiAsuZLmKjTx/ex3AtMowcCgnE7YNyCEP0I= +go.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5 h1:qxen9oVGzDdIRP6ejyAJc760RwW4SnVDiTYTzwnXuxo= +go.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5/go.mod h1:eW0HG9/oHQhvRCvb1/pIXW4cOvtDqeQK+XSi3TnwaXY= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= +go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +golang.org/x/arch v0.12.0 h1:UsYJhbzPYGsT0HbEdmYcqtCv8UNGvnaL561NnIUvaKg= +golang.org/x/arch v0.12.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= +golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc h1:O9NuF4s+E/PvMIy+9IUZB9znFwUIXEWSstNjek6VpVg= +golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= +golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= +golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= +golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= +golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= +golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= +google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 h1:XVhgTWWV3kGQlwJHR3upFWZeTsei6Oks1apkZSeonIE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0= +google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= +google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= +gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= +gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= +pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= +pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/x/accounts/go.mod b/x/accounts/go.mod index 63b1fb75c66b..716f4d4dc053 100644 --- a/x/accounts/go.mod +++ b/x/accounts/go.mod @@ -5,8 +5,8 @@ go 1.23.1 require ( cosmossdk.io/api v0.7.6 cosmossdk.io/collections v0.4.0 - cosmossdk.io/core v1.0.0-alpha.5 - cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29 + cosmossdk.io/core v1.0.0-alpha.6 + cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e cosmossdk.io/depinject v1.1.0 cosmossdk.io/x/bank v0.0.0-20240226161501-23359a0b6d91 cosmossdk.io/x/tx v1.0.0-alpha.1 @@ -14,22 +14,29 @@ require ( github.com/cosmos/gogoproto v1.7.0 github.com/spf13/cobra v1.8.1 github.com/stretchr/testify v1.9.0 - google.golang.org/grpc v1.67.1 + google.golang.org/grpc v1.68.0 google.golang.org/protobuf v1.35.1 ) require ( + github.com/bytedance/sonic v1.12.4 // indirect + github.com/bytedance/sonic/loader v0.2.1 // indirect + github.com/cloudwego/base64x v0.1.4 // indirect + github.com/cloudwego/iasm v0.2.0 // indirect github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect github.com/cosmos/cosmos-db v1.0.3-0.20240911104526-ddc3f09bfc22 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect github.com/google/uuid v1.6.0 // indirect + github.com/klauspost/cpuid/v2 v2.2.9 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + golang.org/x/arch v0.12.0 // indirect ) require ( buf.build/gen/go/cometbft/cometbft/protocolbuffers/go v1.35.1-20240701160653-fedbb9acfd2f.1 // indirect buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.35.1-20240130113600-88ef6483f90f.1 // indirect cosmossdk.io/errors v1.0.1 - cosmossdk.io/log v1.4.1 // indirect + cosmossdk.io/log v1.5.0 // indirect cosmossdk.io/math v1.3.0 cosmossdk.io/schema v0.3.1-0.20240930054013-7c6e0388a3f9 // indirect cosmossdk.io/store v1.1.1-0.20240418092142-896cdf1971bc // indirect @@ -150,18 +157,18 @@ require ( go.opencensus.io v0.24.0 // indirect go.uber.org/mock v0.5.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.28.0 // indirect + golang.org/x/crypto v0.29.0 // indirect golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc // indirect golang.org/x/mod v0.18.0 // indirect golang.org/x/net v0.30.0 // indirect - golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.26.0 // indirect - golang.org/x/term v0.25.0 // indirect - golang.org/x/text v0.19.0 // indirect + golang.org/x/sync v0.9.0 // indirect + golang.org/x/sys v0.27.0 // indirect + golang.org/x/term v0.26.0 // indirect + golang.org/x/text v0.20.0 // indirect golang.org/x/tools v0.22.0 // indirect google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.1 // indirect diff --git a/x/accounts/go.sum b/x/accounts/go.sum index 84ef31a82e6f..315102153bd4 100644 --- a/x/accounts/go.sum +++ b/x/accounts/go.sum @@ -4,16 +4,16 @@ buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.35.1-20240130113600-88e buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.35.1-20240130113600-88ef6483f90f.1/go.mod h1:zqi/LZjZhyvjCMTEVIwAf5VRlkLduuCfqmZxgoormq0= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cosmossdk.io/core v1.0.0-alpha.5 h1:McjYXAQ6XcT20v2uHyH7PhoWH8V+mebzfVFqT3GinsI= -cosmossdk.io/core v1.0.0-alpha.5/go.mod h1:3u9cWq1FAVtiiCrDPpo4LhR+9V6k/ycSG4/Y/tREWCY= -cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29 h1:NxxUo0GMJUbIuVg0R70e3cbn9eFTEuMr7ev1AFvypdY= -cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29/go.mod h1:8s2tPeJtSiQuoyPmr2Ag7meikonISO4Fv4MoO8+ORrs= +cosmossdk.io/core v1.0.0-alpha.6 h1:5ukC4JcQKmemLQXcAgu/QoOvJI50hpBkIIg4ZT2EN8E= +cosmossdk.io/core v1.0.0-alpha.6/go.mod h1:3u9cWq1FAVtiiCrDPpo4LhR+9V6k/ycSG4/Y/tREWCY= +cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e h1:F+ScucYxwrrDJU8guJXQXpGhdpziYSbxW6HMP2wCNxs= +cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e/go.mod h1:3YvVv9aJayjPhdX0DY1IMrGse4sR63hNBWx2VtDWjGQ= cosmossdk.io/depinject v1.1.0 h1:wLan7LG35VM7Yo6ov0jId3RHWCGRhe8E8bsuARorl5E= cosmossdk.io/depinject v1.1.0/go.mod h1:kkI5H9jCGHeKeYWXTqYdruogYrEeWvBQCw1Pj4/eCFI= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/log v1.4.1 h1:wKdjfDRbDyZRuWa8M+9nuvpVYxrEOwbD/CA8hvhU8QM= -cosmossdk.io/log v1.4.1/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU= +cosmossdk.io/log v1.5.0 h1:dVdzPJW9kMrnAYyMf1duqacoidB9uZIl+7c6z0mnq0g= +cosmossdk.io/log v1.5.0/go.mod h1:Tr46PUJjiUthlwQ+hxYtUtPn4D/oCZXAkYevBeh5+FI= cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/schema v0.3.1-0.20240930054013-7c6e0388a3f9 h1:DmOoS/1PeY6Ih0hAVlJ69kLMUrLV+TCbfICrZtB1vdU= @@ -60,6 +60,11 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOF github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= +github.com/bytedance/sonic v1.12.4 h1:9Csb3c9ZJhfUWeMtpCDCq6BUoH5ogfDFLUgQ/jG+R0k= +github.com/bytedance/sonic v1.12.4/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= +github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.1 h1:1GgorWTqf12TA8mma4DDSbaQigE2wOgQo7iCjjJv3+E= +github.com/bytedance/sonic/loader v0.2.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -72,6 +77,10 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= +github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= +github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= @@ -311,6 +320,10 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= +github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -480,6 +493,8 @@ github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoM github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= @@ -503,13 +518,15 @@ go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9i go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +golang.org/x/arch v0.12.0 h1:UsYJhbzPYGsT0HbEdmYcqtCv8UNGvnaL561NnIUvaKg= +golang.org/x/arch v0.12.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= -golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= +golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc h1:O9NuF4s+E/PvMIy+9IUZB9znFwUIXEWSstNjek6VpVg= golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= @@ -551,8 +568,8 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= +golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -588,19 +605,19 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= -golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= +golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= +golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -630,10 +647,10 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEY google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= -google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= -google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 h1:zciRKQ4kBpFgpfC5QQCVtnnNAcLIqweL7plyZRQHVpI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 h1:XVhgTWWV3kGQlwJHR3upFWZeTsei6Oks1apkZSeonIE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= @@ -644,8 +661,8 @@ google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= -google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0= +google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -689,6 +706,7 @@ gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= diff --git a/x/bank/go.mod b/x/bank/go.mod index 131d577819eb..dc5c11fdbb04 100644 --- a/x/bank/go.mod +++ b/x/bank/go.mod @@ -5,10 +5,10 @@ go 1.23.1 require ( cosmossdk.io/api v0.7.6 cosmossdk.io/collections v0.4.0 - cosmossdk.io/core v1.0.0-alpha.5 + cosmossdk.io/core v1.0.0-alpha.6 cosmossdk.io/depinject v1.1.0 cosmossdk.io/errors v1.0.1 - cosmossdk.io/log v1.4.1 // indirect + cosmossdk.io/log v1.5.0 // indirect cosmossdk.io/math v1.3.0 cosmossdk.io/store v1.1.1-0.20240418092142-896cdf1971bc github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect @@ -22,15 +22,15 @@ require ( github.com/spf13/cobra v1.8.1 github.com/stretchr/testify v1.9.0 go.uber.org/mock v0.5.0 - google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 - google.golang.org/grpc v1.67.1 + google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 + google.golang.org/grpc v1.68.0 gotest.tools/v3 v3.5.1 ) require ( buf.build/gen/go/cometbft/cometbft/protocolbuffers/go v1.35.1-20240701160653-fedbb9acfd2f.1 // indirect buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.35.1-20240130113600-88ef6483f90f.1 // indirect - cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29 + cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e cosmossdk.io/x/staking v0.0.0-00010101000000-000000000000 // indirect cosmossdk.io/x/tx v1.0.0-alpha.1 // indirect filippo.io/edwards25519 v1.1.0 // indirect @@ -142,17 +142,17 @@ require ( go.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5 // indirect go.opencensus.io v0.24.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.28.0 // indirect + golang.org/x/crypto v0.29.0 // indirect golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc // indirect golang.org/x/mod v0.18.0 // indirect golang.org/x/net v0.30.0 // indirect - golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.26.0 // indirect - golang.org/x/term v0.25.0 // indirect - golang.org/x/text v0.19.0 // indirect + golang.org/x/sync v0.9.0 // indirect + golang.org/x/sys v0.27.0 // indirect + golang.org/x/term v0.26.0 // indirect + golang.org/x/text v0.20.0 // indirect golang.org/x/tools v0.22.0 // indirect google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/protobuf v1.35.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect @@ -160,13 +160,24 @@ require ( sigs.k8s.io/yaml v1.4.0 // indirect ) -require cosmossdk.io/schema v0.3.1-0.20240930054013-7c6e0388a3f9 +require ( + cosmossdk.io/schema v0.3.1-0.20240930054013-7c6e0388a3f9 + cosmossdk.io/x/accounts/defaults/admin v0.0.0-00010101000000-000000000000 +) require ( + cosmossdk.io/x/accounts v0.0.0-20241112091912-96a1c1c833ea // indirect + github.com/bytedance/sonic v1.12.4 // indirect + github.com/bytedance/sonic/loader v0.2.1 // indirect + github.com/cloudwego/base64x v0.1.4 // indirect + github.com/cloudwego/iasm v0.2.0 // indirect github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect github.com/cosmos/cosmos-db v1.0.3-0.20240911104526-ddc3f09bfc22 // indirect github.com/google/uuid v1.6.0 // indirect + github.com/klauspost/cpuid/v2 v2.2.9 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + golang.org/x/arch v0.12.0 // indirect ) replace github.com/cosmos/cosmos-sdk => ../../. @@ -176,6 +187,8 @@ replace ( cosmossdk.io/api => ../../api cosmossdk.io/collections => ../../collections cosmossdk.io/store => ../../store + cosmossdk.io/x/accounts => ../accounts + cosmossdk.io/x/accounts/defaults/admin => ../accounts/defaults/admin cosmossdk.io/x/staking => ../staking cosmossdk.io/x/tx => ../tx ) diff --git a/x/bank/go.sum b/x/bank/go.sum index 84ef31a82e6f..315102153bd4 100644 --- a/x/bank/go.sum +++ b/x/bank/go.sum @@ -4,16 +4,16 @@ buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.35.1-20240130113600-88e buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.35.1-20240130113600-88ef6483f90f.1/go.mod h1:zqi/LZjZhyvjCMTEVIwAf5VRlkLduuCfqmZxgoormq0= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cosmossdk.io/core v1.0.0-alpha.5 h1:McjYXAQ6XcT20v2uHyH7PhoWH8V+mebzfVFqT3GinsI= -cosmossdk.io/core v1.0.0-alpha.5/go.mod h1:3u9cWq1FAVtiiCrDPpo4LhR+9V6k/ycSG4/Y/tREWCY= -cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29 h1:NxxUo0GMJUbIuVg0R70e3cbn9eFTEuMr7ev1AFvypdY= -cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29/go.mod h1:8s2tPeJtSiQuoyPmr2Ag7meikonISO4Fv4MoO8+ORrs= +cosmossdk.io/core v1.0.0-alpha.6 h1:5ukC4JcQKmemLQXcAgu/QoOvJI50hpBkIIg4ZT2EN8E= +cosmossdk.io/core v1.0.0-alpha.6/go.mod h1:3u9cWq1FAVtiiCrDPpo4LhR+9V6k/ycSG4/Y/tREWCY= +cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e h1:F+ScucYxwrrDJU8guJXQXpGhdpziYSbxW6HMP2wCNxs= +cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e/go.mod h1:3YvVv9aJayjPhdX0DY1IMrGse4sR63hNBWx2VtDWjGQ= cosmossdk.io/depinject v1.1.0 h1:wLan7LG35VM7Yo6ov0jId3RHWCGRhe8E8bsuARorl5E= cosmossdk.io/depinject v1.1.0/go.mod h1:kkI5H9jCGHeKeYWXTqYdruogYrEeWvBQCw1Pj4/eCFI= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/log v1.4.1 h1:wKdjfDRbDyZRuWa8M+9nuvpVYxrEOwbD/CA8hvhU8QM= -cosmossdk.io/log v1.4.1/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU= +cosmossdk.io/log v1.5.0 h1:dVdzPJW9kMrnAYyMf1duqacoidB9uZIl+7c6z0mnq0g= +cosmossdk.io/log v1.5.0/go.mod h1:Tr46PUJjiUthlwQ+hxYtUtPn4D/oCZXAkYevBeh5+FI= cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/schema v0.3.1-0.20240930054013-7c6e0388a3f9 h1:DmOoS/1PeY6Ih0hAVlJ69kLMUrLV+TCbfICrZtB1vdU= @@ -60,6 +60,11 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOF github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= +github.com/bytedance/sonic v1.12.4 h1:9Csb3c9ZJhfUWeMtpCDCq6BUoH5ogfDFLUgQ/jG+R0k= +github.com/bytedance/sonic v1.12.4/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= +github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.1 h1:1GgorWTqf12TA8mma4DDSbaQigE2wOgQo7iCjjJv3+E= +github.com/bytedance/sonic/loader v0.2.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -72,6 +77,10 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= +github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= +github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= @@ -311,6 +320,10 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= +github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -480,6 +493,8 @@ github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoM github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= @@ -503,13 +518,15 @@ go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9i go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +golang.org/x/arch v0.12.0 h1:UsYJhbzPYGsT0HbEdmYcqtCv8UNGvnaL561NnIUvaKg= +golang.org/x/arch v0.12.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= -golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= +golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc h1:O9NuF4s+E/PvMIy+9IUZB9znFwUIXEWSstNjek6VpVg= golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= @@ -551,8 +568,8 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= +golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -588,19 +605,19 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= -golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= +golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= +golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -630,10 +647,10 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEY google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= -google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= -google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 h1:zciRKQ4kBpFgpfC5QQCVtnnNAcLIqweL7plyZRQHVpI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 h1:XVhgTWWV3kGQlwJHR3upFWZeTsei6Oks1apkZSeonIE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= @@ -644,8 +661,8 @@ google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= -google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0= +google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -689,6 +706,7 @@ gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= diff --git a/x/group/go.mod b/x/group/go.mod index 88da544ac75b..83d17e219b5f 100644 --- a/x/group/go.mod +++ b/x/group/go.mod @@ -4,14 +4,14 @@ go 1.23.1 require ( cosmossdk.io/api v0.7.6 - cosmossdk.io/core v1.0.0-alpha.5 - cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29 + cosmossdk.io/core v1.0.0-alpha.6 + cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e cosmossdk.io/depinject v1.1.0 cosmossdk.io/errors v1.0.1 - cosmossdk.io/log v1.4.1 + cosmossdk.io/log v1.5.0 cosmossdk.io/math v1.3.0 cosmossdk.io/store v1.1.1-0.20240418092142-896cdf1971bc - cosmossdk.io/x/accounts v0.0.0-20240913065641-0064ccbce64e + cosmossdk.io/x/accounts v0.0.0-20241112091912-96a1c1c833ea cosmossdk.io/x/authz v0.0.0-00010101000000-000000000000 cosmossdk.io/x/bank v0.0.0-20240226161501-23359a0b6d91 cosmossdk.io/x/consensus v0.0.0-00010101000000-000000000000 @@ -28,8 +28,8 @@ require ( github.com/spf13/cobra v1.8.1 github.com/stretchr/testify v1.9.0 go.uber.org/mock v0.5.0 - google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 - google.golang.org/grpc v1.67.1 + google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 + google.golang.org/grpc v1.68.0 google.golang.org/protobuf v1.35.1 pgregory.net/rapid v1.1.0 ) @@ -50,8 +50,12 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/speakeasy v0.2.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect + github.com/bytedance/sonic v1.12.4 // indirect + github.com/bytedance/sonic/loader v0.2.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chzyer/readline v1.5.1 // indirect + github.com/cloudwego/base64x v0.1.4 // indirect + github.com/cloudwego/iasm v0.2.0 // indirect github.com/cockroachdb/errors v1.11.3 // indirect github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect @@ -113,6 +117,7 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.9 // indirect + github.com/klauspost/cpuid/v2 v2.2.9 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -151,6 +156,7 @@ require ( github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.7.0 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b // indirect @@ -158,17 +164,18 @@ require ( go.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5 // indirect go.opencensus.io v0.24.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.28.0 // indirect + golang.org/x/arch v0.12.0 // indirect + golang.org/x/crypto v0.29.0 // indirect golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc // indirect golang.org/x/mod v0.18.0 // indirect golang.org/x/net v0.30.0 // indirect - golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.26.0 // indirect - golang.org/x/term v0.25.0 // indirect - golang.org/x/text v0.19.0 // indirect + golang.org/x/sync v0.9.0 // indirect + golang.org/x/sys v0.27.0 // indirect + golang.org/x/term v0.26.0 // indirect + golang.org/x/text v0.20.0 // indirect golang.org/x/tools v0.22.0 // indirect google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.1 // indirect @@ -183,6 +190,7 @@ replace ( cosmossdk.io/collections => ../../collections cosmossdk.io/store => ../../store cosmossdk.io/x/accounts => ../accounts + cosmossdk.io/x/accounts/defaults/admin => ../x/accounts/defaults/admin cosmossdk.io/x/accounts/defaults/base => ../accounts/defaults/base cosmossdk.io/x/accounts/defaults/lockup => ../accounts/defaults/lockup cosmossdk.io/x/accounts/defaults/multisig => ../accounts/defaults/multisig diff --git a/x/group/go.sum b/x/group/go.sum index 5f9c9ee3b7fc..0bb7c6c4278d 100644 --- a/x/group/go.sum +++ b/x/group/go.sum @@ -4,16 +4,16 @@ buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.35.1-20240130113600-88e buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.35.1-20240130113600-88ef6483f90f.1/go.mod h1:zqi/LZjZhyvjCMTEVIwAf5VRlkLduuCfqmZxgoormq0= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cosmossdk.io/core v1.0.0-alpha.5 h1:McjYXAQ6XcT20v2uHyH7PhoWH8V+mebzfVFqT3GinsI= -cosmossdk.io/core v1.0.0-alpha.5/go.mod h1:3u9cWq1FAVtiiCrDPpo4LhR+9V6k/ycSG4/Y/tREWCY= -cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29 h1:NxxUo0GMJUbIuVg0R70e3cbn9eFTEuMr7ev1AFvypdY= -cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29/go.mod h1:8s2tPeJtSiQuoyPmr2Ag7meikonISO4Fv4MoO8+ORrs= +cosmossdk.io/core v1.0.0-alpha.6 h1:5ukC4JcQKmemLQXcAgu/QoOvJI50hpBkIIg4ZT2EN8E= +cosmossdk.io/core v1.0.0-alpha.6/go.mod h1:3u9cWq1FAVtiiCrDPpo4LhR+9V6k/ycSG4/Y/tREWCY= +cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e h1:F+ScucYxwrrDJU8guJXQXpGhdpziYSbxW6HMP2wCNxs= +cosmossdk.io/core/testing v0.0.0-20241108153815-606544c7be7e/go.mod h1:3YvVv9aJayjPhdX0DY1IMrGse4sR63hNBWx2VtDWjGQ= cosmossdk.io/depinject v1.1.0 h1:wLan7LG35VM7Yo6ov0jId3RHWCGRhe8E8bsuARorl5E= cosmossdk.io/depinject v1.1.0/go.mod h1:kkI5H9jCGHeKeYWXTqYdruogYrEeWvBQCw1Pj4/eCFI= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/log v1.4.1 h1:wKdjfDRbDyZRuWa8M+9nuvpVYxrEOwbD/CA8hvhU8QM= -cosmossdk.io/log v1.4.1/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU= +cosmossdk.io/log v1.5.0 h1:dVdzPJW9kMrnAYyMf1duqacoidB9uZIl+7c6z0mnq0g= +cosmossdk.io/log v1.5.0/go.mod h1:Tr46PUJjiUthlwQ+hxYtUtPn4D/oCZXAkYevBeh5+FI= cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/schema v0.3.1-0.20240930054013-7c6e0388a3f9 h1:DmOoS/1PeY6Ih0hAVlJ69kLMUrLV+TCbfICrZtB1vdU= @@ -60,6 +60,11 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOF github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= +github.com/bytedance/sonic v1.12.4 h1:9Csb3c9ZJhfUWeMtpCDCq6BUoH5ogfDFLUgQ/jG+R0k= +github.com/bytedance/sonic v1.12.4/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= +github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.1 h1:1GgorWTqf12TA8mma4DDSbaQigE2wOgQo7iCjjJv3+E= +github.com/bytedance/sonic/loader v0.2.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -78,6 +83,10 @@ github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38 github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= +github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= +github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= @@ -319,6 +328,10 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= +github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -490,6 +503,8 @@ github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoM github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= @@ -513,13 +528,15 @@ go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9i go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +golang.org/x/arch v0.12.0 h1:UsYJhbzPYGsT0HbEdmYcqtCv8UNGvnaL561NnIUvaKg= +golang.org/x/arch v0.12.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= -golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= +golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc h1:O9NuF4s+E/PvMIy+9IUZB9znFwUIXEWSstNjek6VpVg= golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= @@ -561,8 +578,8 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= +golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -600,19 +617,19 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= -golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= +golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= +golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -642,10 +659,10 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEY google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= -google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= -google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 h1:zciRKQ4kBpFgpfC5QQCVtnnNAcLIqweL7plyZRQHVpI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 h1:XVhgTWWV3kGQlwJHR3upFWZeTsei6Oks1apkZSeonIE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= @@ -656,8 +673,8 @@ google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= -google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0= +google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -701,6 +718,7 @@ gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= From 7b2bbcb12f3dd824de2e5e8301a09850ed78160e Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Wed, 13 Nov 2024 22:42:03 +0700 Subject: [PATCH 32/35] go mod tidy again --- x/accounts/defaults/base/go.mod | 2 +- x/accounts/defaults/lockup/go.mod | 2 +- x/accounts/defaults/multisig/go.mod | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/x/accounts/defaults/base/go.mod b/x/accounts/defaults/base/go.mod index 8ea1d1306447..e5d235970c3b 100644 --- a/x/accounts/defaults/base/go.mod +++ b/x/accounts/defaults/base/go.mod @@ -7,7 +7,7 @@ require ( cosmossdk.io/collections v0.4.0 cosmossdk.io/core v1.0.0-alpha.6 cosmossdk.io/depinject v1.1.0 - cosmossdk.io/x/accounts v0.0.0-20240913065641-0064ccbce64e + cosmossdk.io/x/accounts v0.0.0-20241112091912-96a1c1c833ea cosmossdk.io/x/tx v1.0.0-alpha.1 github.com/cosmos/cosmos-sdk v0.53.0 github.com/cosmos/gogoproto v1.7.0 diff --git a/x/accounts/defaults/lockup/go.mod b/x/accounts/defaults/lockup/go.mod index 1ec7e553b306..5366538936cf 100644 --- a/x/accounts/defaults/lockup/go.mod +++ b/x/accounts/defaults/lockup/go.mod @@ -5,7 +5,7 @@ go 1.23.1 require ( cosmossdk.io/collections v0.4.0 cosmossdk.io/core v1.0.0-alpha.6 - cosmossdk.io/x/accounts v0.0.0-20240226161501-23359a0b6d91 + cosmossdk.io/x/accounts v0.0.0-20241112091912-96a1c1c833ea cosmossdk.io/x/bank v0.0.0-20240226161501-23359a0b6d91 cosmossdk.io/x/distribution v0.0.0-00010101000000-000000000000 cosmossdk.io/x/staking v0.0.0-00010101000000-000000000000 diff --git a/x/accounts/defaults/multisig/go.mod b/x/accounts/defaults/multisig/go.mod index 90ebcbfd82bc..26407d9dcbeb 100644 --- a/x/accounts/defaults/multisig/go.mod +++ b/x/accounts/defaults/multisig/go.mod @@ -6,7 +6,7 @@ require ( cosmossdk.io/collections v0.4.0 cosmossdk.io/core v1.0.0-alpha.6 cosmossdk.io/math v1.3.0 - cosmossdk.io/x/accounts v0.0.0-00010101000000-000000000000 + cosmossdk.io/x/accounts v0.0.0-20241112091912-96a1c1c833ea cosmossdk.io/x/bank v0.0.0-20240226161501-23359a0b6d91 github.com/cosmos/cosmos-proto v1.0.0-beta.5 github.com/cosmos/cosmos-sdk v0.53.0 From ede3f223a6a1a244e1d354ecd14697910322426a Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Wed, 13 Nov 2024 23:10:15 +0700 Subject: [PATCH 33/35] fix test --- x/accounts/defaults/admin/admin.go | 1 + x/bank/v2/keeper/handlers.go | 2 +- x/bank/v2/keeper/keeper.go | 4 ++++ x/bank/v2/keeper/keeper_test.go | 12 ++++++++++-- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/x/accounts/defaults/admin/admin.go b/x/accounts/defaults/admin/admin.go index 518299d238c0..18d4f9fa25cd 100644 --- a/x/accounts/defaults/admin/admin.go +++ b/x/accounts/defaults/admin/admin.go @@ -145,4 +145,5 @@ func (a *Admin) RegisterInitHandler(builder *accountstd.InitBuilder) { func (a *Admin) RegisterQueryHandlers(builder *accountstd.QueryBuilder) { accountstd.RegisterQueryHandler(builder, a.HaveMintPerm) accountstd.RegisterQueryHandler(builder, a.HaveBurnPerm) + accountstd.RegisterQueryHandler(builder, a.QueryOwner) } diff --git a/x/bank/v2/keeper/handlers.go b/x/bank/v2/keeper/handlers.go index 8e855936a564..73fea10de952 100644 --- a/x/bank/v2/keeper/handlers.go +++ b/x/bank/v2/keeper/handlers.go @@ -12,9 +12,9 @@ import ( errorsmod "cosmossdk.io/errors" "cosmossdk.io/x/bank/v2/types" + adminv1 "cosmossdk.io/x/accounts/defaults/admin/v1" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - adminv1 "cosmossdk.io/x/accounts/defaults/admin/v1" ) type handlers struct { diff --git a/x/bank/v2/keeper/keeper.go b/x/bank/v2/keeper/keeper.go index cec48aabbca3..3c79a3da5c44 100644 --- a/x/bank/v2/keeper/keeper.go +++ b/x/bank/v2/keeper/keeper.go @@ -60,6 +60,10 @@ func NewKeeper(authority []byte, addressCodec address.Codec, env appmodulev2.Env return k } +func (k Keeper) GetAccountsKeeper() types.AccountsModKeeper { + return k.accountsKeeper +} + // MintCoins creates new coins from thin air and adds it to the module account. // An error is returned if the module account does not exist or is unauthorized. func (k Keeper) MintCoins(ctx context.Context, addr []byte, amounts sdk.Coins) error { diff --git a/x/bank/v2/keeper/keeper_test.go b/x/bank/v2/keeper/keeper_test.go index d965d7a1d96e..9c103498b949 100644 --- a/x/bank/v2/keeper/keeper_test.go +++ b/x/bank/v2/keeper/keeper_test.go @@ -29,6 +29,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + adminv1 "cosmossdk.io/x/accounts/defaults/admin/v1" ) const ( @@ -334,9 +335,16 @@ func (s *KeeperTestSuite) TestCreateDenom() { // Make sure that the admin is set correctly authority, err := s.bankKeeper.GetAuthorityMetadata(s.ctx, newDenom) + require.NoError(err) - s.Require().NoError(err) - s.Require().Equal(accAddrs[0].String(), authority.Admin) + accountsKeeper := s.bankKeeper.GetAccountsKeeper() + + resp, err := accountsKeeper.Query(s.ctx, authority.Admin, &adminv1.QueryOwner{}) + require.NoError(err) + v1Resp, ok := resp.(*adminv1.QueryOwnerResponse) + require.True(ok) + + s.Require().Equal(accAddrs[0].String(), v1Resp.Owner) // Make sure that the denom metadata is initialized correctly metadata, found := s.bankKeeper.GetDenomMetaData(s.ctx, newDenom) From 989643fe6ef3d154f44cddac3596b31d3aec1a46 Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Thu, 14 Nov 2024 13:51:35 +0700 Subject: [PATCH 34/35] systemtests --- simapp/v2/app_di.go | 2 + .../cosmos/bank/v2/authorityMetadata.proto | 2 +- x/bank/v2/keeper/admins.go | 16 ------ x/bank/v2/keeper/createdenom.go | 14 +++-- x/bank/v2/keeper/handlers.go | 24 ++++++--- x/bank/v2/keeper/keeper_test.go | 54 ++++++++++--------- x/bank/v2/types/authorityMetadata.go | 3 +- x/bank/v2/types/authorityMetadata.pb.go | 27 +++++----- x/bank/v2/types/expected_keepers.go | 2 +- 9 files changed, 72 insertions(+), 72 deletions(-) diff --git a/simapp/v2/app_di.go b/simapp/v2/app_di.go index 1d028c1025e4..2fcdbe121597 100644 --- a/simapp/v2/app_di.go +++ b/simapp/v2/app_di.go @@ -16,6 +16,7 @@ import ( basedepinject "cosmossdk.io/x/accounts/defaults/base/depinject" lockupdepinject "cosmossdk.io/x/accounts/defaults/lockup/depinject" multisigdepinject "cosmossdk.io/x/accounts/defaults/multisig/depinject" + admindepinject "cosmossdk.io/x/accounts/defaults/admin/depinject" stakingkeeper "cosmossdk.io/x/staking/keeper" upgradekeeper "cosmossdk.io/x/upgrade/keeper" @@ -55,6 +56,7 @@ func AppConfig() depinject.Config { multisigdepinject.ProvideAccount, basedepinject.ProvideAccount, lockupdepinject.ProvideAllLockupAccounts, + admindepinject.ProvideAccount, // provide base account options basedepinject.ProvideSecp256K1PubKey, diff --git a/x/bank/proto/cosmos/bank/v2/authorityMetadata.proto b/x/bank/proto/cosmos/bank/v2/authorityMetadata.proto index 46d5a1a678a4..a2168cbec1ec 100644 --- a/x/bank/proto/cosmos/bank/v2/authorityMetadata.proto +++ b/x/bank/proto/cosmos/bank/v2/authorityMetadata.proto @@ -13,5 +13,5 @@ message DenomAuthorityMetadata { option (gogoproto.equal) = true; // Can be empty for no admin, or a valid osmosis address - bytes admin = 1; + string admin = 1; } diff --git a/x/bank/v2/keeper/admins.go b/x/bank/v2/keeper/admins.go index e236b0637522..13871937c16e 100644 --- a/x/bank/v2/keeper/admins.go +++ b/x/bank/v2/keeper/admins.go @@ -21,19 +21,3 @@ func (k Keeper) setAuthorityMetadata(ctx context.Context, denom string, metadata return k.denomAuthority.Set(ctx, denom, metadata) } - -func (k Keeper) setAdmin(ctx context.Context, denom, admin string) error { - metadata, err := k.GetAuthorityMetadata(ctx, denom) - if err != nil { - return err - } - - adminAddr, err := k.addressCodec.StringToBytes(admin) - if err != nil { - return err - } - - metadata.Admin = adminAddr - - return k.setAuthorityMetadata(ctx, denom, metadata) -} diff --git a/x/bank/v2/keeper/createdenom.go b/x/bank/v2/keeper/createdenom.go index 313c39279d03..1b563982199c 100644 --- a/x/bank/v2/keeper/createdenom.go +++ b/x/bank/v2/keeper/createdenom.go @@ -4,10 +4,10 @@ import ( "context" "fmt" - "cosmossdk.io/x/bank/v2/types" - admin "cosmossdk.io/x/accounts/defaults/admin" adminv1 "cosmossdk.io/x/accounts/defaults/admin/v1" + "cosmossdk.io/x/bank/v2/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/address" ) @@ -62,9 +62,17 @@ func (k Keeper) createDenomAfterValidation(ctx context.Context, creatorAddr, den // Create denom admin account _, accountAddr, err := k.accountsKeeper.Init(ctx, admin.Type, creatorAddrBz, msgInitAdmin, sdk.NewCoins()) + if err != nil { + return err + } + + accountAddrStr, err := k.addressCodec.BytesToString(accountAddr) + if err != nil { + return err + } authorityMetadata := types.DenomAuthorityMetadata{ - Admin: accountAddr, + Admin: accountAddrStr, } err = k.setAuthorityMetadata(ctx, denom, authorityMetadata) if err != nil { diff --git a/x/bank/v2/keeper/handlers.go b/x/bank/v2/keeper/handlers.go index 73fea10de952..d818032a82f2 100644 --- a/x/bank/v2/keeper/handlers.go +++ b/x/bank/v2/keeper/handlers.go @@ -10,9 +10,9 @@ import ( "google.golang.org/grpc/status" errorsmod "cosmossdk.io/errors" + adminv1 "cosmossdk.io/x/accounts/defaults/admin/v1" "cosmossdk.io/x/bank/v2/types" - adminv1 "cosmossdk.io/x/accounts/defaults/admin/v1" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) @@ -112,15 +112,17 @@ func (h handlers) MsgMint(ctx context.Context, msg *types.MsgMint) (*types.MsgMi return nil, err } - adminAccAddr := authorityMetadata.Admin + adminAccAddr, err := h.addressCodec.StringToBytes(authorityMetadata.Admin) + if err != nil { + return nil, err + } // Query if sender have mint perm _, err = h.accountsKeeper.Query(ctx, adminAccAddr, &adminv1.QueryMintPerm{ Sender: msg.Authority, - Denom: msg.Amount.Denom, + Denom: msg.Amount.Denom, }) - if err != nil { return nil, err } @@ -181,15 +183,17 @@ func (h handlers) MsgBurn(ctx context.Context, msg *types.MsgBurn) (*types.MsgBu return nil, err } - adminAccAddr := authorityMetadata.Admin + adminAccAddr, err := h.addressCodec.StringToBytes(authorityMetadata.Admin) + if err != nil { + return nil, err + } // Query if sender have mint perm _, err = h.accountsKeeper.Query(ctx, adminAccAddr, &adminv1.QueryBurnPerm{ Sender: msg.Authority, - Denom: msg.Amount.Denom, + Denom: msg.Amount.Denom, }) - if err != nil { return nil, err } @@ -292,7 +296,11 @@ func (h handlers) QueryDenomsFromCreator(ctx context.Context, req *types.QueryDe denoms := []string{} err := h.Keeper.denomAuthority.Walk(ctx, nil, func(denom string, authority types.DenomAuthorityMetadata) (stop bool, err error) { - resp, err := h.accountsKeeper.Query(ctx, authority.Admin, &adminv1.QueryOwner{}) + adminAccAddr, err := h.addressCodec.StringToBytes(authority.Admin) + if err != nil { + return true, err + } + resp, err := h.accountsKeeper.Query(ctx, adminAccAddr, &adminv1.QueryOwner{}) if err != nil { return true, err } diff --git a/x/bank/v2/keeper/keeper_test.go b/x/bank/v2/keeper/keeper_test.go index 9c103498b949..a8b6ffb5449d 100644 --- a/x/bank/v2/keeper/keeper_test.go +++ b/x/bank/v2/keeper/keeper_test.go @@ -14,13 +14,14 @@ import ( coretesting "cosmossdk.io/core/testing" "cosmossdk.io/math" storetypes "cosmossdk.io/store/types" + accountskeeper "cosmossdk.io/x/accounts" + "cosmossdk.io/x/accounts/accountstd" + "cosmossdk.io/x/accounts/defaults/admin" + adminv1 "cosmossdk.io/x/accounts/defaults/admin/v1" "cosmossdk.io/x/bank/v2/keeper" banktestutil "cosmossdk.io/x/bank/v2/testutil" "cosmossdk.io/x/bank/v2/types" - accountskeeper "cosmossdk.io/x/accounts" - "cosmossdk.io/x/accounts/accountstd" - "cosmossdk.io/x/accounts/defaults/admin" "github.com/cosmos/cosmos-sdk/codec" codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -29,7 +30,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - adminv1 "cosmossdk.io/x/accounts/defaults/admin/v1" ) const ( @@ -339,7 +339,10 @@ func (s *KeeperTestSuite) TestCreateDenom() { accountsKeeper := s.bankKeeper.GetAccountsKeeper() - resp, err := accountsKeeper.Query(s.ctx, authority.Admin, &adminv1.QueryOwner{}) + adminAccAddr, err := s.addressCodec.StringToBytes(authority.Admin) + require.NoError(err) + + resp, err := accountsKeeper.Query(s.ctx, adminAccAddr, &adminv1.QueryOwner{}) require.NoError(err) v1Resp, ok := resp.(*adminv1.QueryOwnerResponse) require.True(ok) @@ -465,7 +468,7 @@ func (s *KeeperTestSuite) TestMintHandler() { ToAddress: accAddrs[1].String(), Amount: sdk.NewCoin(barDenom, math.NewInt(100)), }, - expErr: false, + expErr: false, adminDisable: false, }, { @@ -475,7 +478,7 @@ func (s *KeeperTestSuite) TestMintHandler() { ToAddress: accAddrs[1].String(), Amount: sdk.NewCoin(barDenom, math.NewInt(100)), }, - expErr: true, + expErr: true, adminDisable: false, }, { @@ -485,7 +488,7 @@ func (s *KeeperTestSuite) TestMintHandler() { ToAddress: accAddrs[1].String(), Amount: sdk.NewCoin(newDenom, math.NewInt(100)), }, - expErr: false, + expErr: false, adminDisable: false, }, { @@ -495,7 +498,7 @@ func (s *KeeperTestSuite) TestMintHandler() { ToAddress: accAddrs[1].String(), Amount: sdk.NewCoin(newDenom, math.NewInt(100)), }, - expErr: true, + expErr: true, adminDisable: false, }, { @@ -505,7 +508,7 @@ func (s *KeeperTestSuite) TestMintHandler() { ToAddress: accAddrs[1].String(), Amount: sdk.NewCoin(newDenom, math.NewInt(100)), }, - expErr: false, + expErr: false, adminDisable: true, }, { @@ -515,7 +518,7 @@ func (s *KeeperTestSuite) TestMintHandler() { ToAddress: accAddrs[1].String(), Amount: sdk.NewCoin(newDenom, math.NewInt(100)), }, - expErr: true, + expErr: true, adminDisable: true, }, { @@ -525,12 +528,11 @@ func (s *KeeperTestSuite) TestMintHandler() { ToAddress: accAddrs[1].String(), Amount: sdk.NewCoin(newDenom+"s", math.NewInt(100)), }, - expErr: true, + expErr: true, adminDisable: true, }, } { s.Run(fmt.Sprintf("Case %s", tc.desc), func() { - require.NoError(handler.Keeper.SetParams(s.ctx, types.NewParams(sdk.NewCoins(), 0, tc.adminDisable))) toAddr, err := s.addressCodec.StringToBytes(tc.msg.ToAddress) require.NoError(err) @@ -575,10 +577,10 @@ func (s *KeeperTestSuite) TestBurnHandler() { require.NoError(err) for _, tc := range []struct { - desc string - msg *types.MsgBurn + desc string + msg *types.MsgBurn adminDisable bool - expErr bool + expErr bool }{ { desc: "Burn foo denom, valid", @@ -588,7 +590,7 @@ func (s *KeeperTestSuite) TestBurnHandler() { Amount: sdk.NewCoin(fooDenom, math.NewInt(50)), }, adminDisable: false, - expErr: false, + expErr: false, }, { desc: "Burn foo denom, invalid authority", @@ -598,7 +600,7 @@ func (s *KeeperTestSuite) TestBurnHandler() { Amount: sdk.NewCoin(fooDenom, math.NewInt(50)), }, adminDisable: false, - expErr: true, + expErr: true, }, { desc: "Burn foo denom, insufficient funds", @@ -608,7 +610,7 @@ func (s *KeeperTestSuite) TestBurnHandler() { Amount: sdk.NewCoin(fooDenom, math.NewInt(200)), }, adminDisable: false, - expErr: true, + expErr: true, }, { desc: "Burn bar denom, invalid denom", @@ -618,7 +620,7 @@ func (s *KeeperTestSuite) TestBurnHandler() { Amount: sdk.NewCoin(barDenom, math.NewInt(50)), }, adminDisable: false, - expErr: true, + expErr: true, }, { desc: "Burn tokenfactory denom, admin enable, valid", @@ -628,7 +630,7 @@ func (s *KeeperTestSuite) TestBurnHandler() { Amount: sdk.NewCoin(newDenom, math.NewInt(50)), }, adminDisable: false, - expErr: false, + expErr: false, }, { desc: "Burn tokenfactory denom, admin enable, invalid admin", @@ -638,7 +640,7 @@ func (s *KeeperTestSuite) TestBurnHandler() { Amount: sdk.NewCoin(newDenom, math.NewInt(50)), }, adminDisable: false, - expErr: true, + expErr: true, }, { desc: "Burn tokenfactory denom, admin disable, valid authority", @@ -648,7 +650,7 @@ func (s *KeeperTestSuite) TestBurnHandler() { Amount: sdk.NewCoin(newDenom, math.NewInt(50)), }, adminDisable: true, - expErr: false, + expErr: false, }, { desc: "Burn tokenfactory denom, admin disable, invalid authority", @@ -658,7 +660,7 @@ func (s *KeeperTestSuite) TestBurnHandler() { Amount: sdk.NewCoin(newDenom, math.NewInt(50)), }, adminDisable: true, - expErr: true, + expErr: true, }, { desc: "Burn tokenfactory denom, insufficient funds", @@ -668,7 +670,7 @@ func (s *KeeperTestSuite) TestBurnHandler() { Amount: sdk.NewCoin(newDenom, math.NewInt(150)), }, adminDisable: false, - expErr: true, + expErr: true, }, { desc: "Burn tokenfactory denom, token not exist", @@ -678,7 +680,7 @@ func (s *KeeperTestSuite) TestBurnHandler() { Amount: sdk.NewCoin(newDenom+"s", math.NewInt(50)), }, adminDisable: false, - expErr: true, + expErr: true, }, } { s.Run(fmt.Sprintf("Case %s", tc.desc), func() { diff --git a/x/bank/v2/types/authorityMetadata.go b/x/bank/v2/types/authorityMetadata.go index fb321e9f63fb..3220fa5b7d66 100644 --- a/x/bank/v2/types/authorityMetadata.go +++ b/x/bank/v2/types/authorityMetadata.go @@ -1,12 +1,11 @@ package types import ( - "bytes" "errors" ) func (metadata DenomAuthorityMetadata) Validate() error { - if bytes.Equal(metadata.Admin, []byte{}) { + if metadata.Admin == "" { return errors.New("empty admin") } return nil diff --git a/x/bank/v2/types/authorityMetadata.pb.go b/x/bank/v2/types/authorityMetadata.pb.go index 6986fc2bfc4b..7e31d7df6aee 100644 --- a/x/bank/v2/types/authorityMetadata.pb.go +++ b/x/bank/v2/types/authorityMetadata.pb.go @@ -4,7 +4,6 @@ package types import ( - bytes "bytes" fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" @@ -30,7 +29,7 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // permission, but is planned to be extended to the future. type DenomAuthorityMetadata struct { // Can be empty for no admin, or a valid osmosis address - Admin []byte `protobuf:"bytes,1,opt,name=admin,proto3" json:"admin,omitempty"` + Admin string `protobuf:"bytes,1,opt,name=admin,proto3" json:"admin,omitempty"` } func (m *DenomAuthorityMetadata) Reset() { *m = DenomAuthorityMetadata{} } @@ -66,11 +65,11 @@ func (m *DenomAuthorityMetadata) XXX_DiscardUnknown() { var xxx_messageInfo_DenomAuthorityMetadata proto.InternalMessageInfo -func (m *DenomAuthorityMetadata) GetAdmin() []byte { +func (m *DenomAuthorityMetadata) GetAdmin() string { if m != nil { return m.Admin } - return nil + return "" } func init() { @@ -90,11 +89,11 @@ var fileDescriptor_c2b6286975ab0e3f = []byte{ 0x4f, 0xcf, 0x07, 0x4b, 0xe9, 0x83, 0x58, 0x10, 0x55, 0x52, 0x72, 0x70, 0xd3, 0x8a, 0x53, 0xf5, 0xcb, 0x0c, 0x93, 0x52, 0x4b, 0x12, 0x0d, 0xf5, 0x93, 0xf3, 0x33, 0xf3, 0x20, 0xf2, 0x4a, 0x26, 0x5c, 0x62, 0x2e, 0xa9, 0x79, 0xf9, 0xb9, 0x8e, 0xe8, 0xb6, 0x08, 0x89, 0x70, 0xb1, 0x26, 0xa6, - 0xe4, 0x66, 0xe6, 0x49, 0x30, 0x2a, 0x30, 0x6a, 0xf0, 0x04, 0x41, 0x38, 0x56, 0x2c, 0x2f, 0x16, + 0xe4, 0x66, 0xe6, 0x49, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x06, 0x41, 0x38, 0x56, 0x2c, 0x2f, 0x16, 0xc8, 0x33, 0x3a, 0x99, 0x9d, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x0c, 0xc4, 0xbe, 0xe2, 0x94, 0x6c, 0xbd, 0xcc, 0x7c, 0xfd, 0x0a, 0xb8, 0x2f, 0x4a, 0x2a, 0x0b, 0x52, - 0x8b, 0x93, 0xd8, 0xc0, 0x96, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x6e, 0x2a, 0x92, 0xf4, + 0x8b, 0x93, 0xd8, 0xc0, 0x96, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x5d, 0x68, 0x5f, 0x49, 0xe4, 0x00, 0x00, 0x00, } @@ -117,7 +116,7 @@ func (this *DenomAuthorityMetadata) Equal(that interface{}) bool { } else if this == nil { return false } - if !bytes.Equal(this.Admin, that1.Admin) { + if this.Admin != that1.Admin { return false } return true @@ -215,7 +214,7 @@ func (m *DenomAuthorityMetadata) Unmarshal(dAtA []byte) error { if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Admin", wireType) } - var byteLen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowAuthorityMetadata @@ -225,25 +224,23 @@ func (m *DenomAuthorityMetadata) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - byteLen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if byteLen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthAuthorityMetadata } - postIndex := iNdEx + byteLen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthAuthorityMetadata } if postIndex > l { return io.ErrUnexpectedEOF } - m.Admin = append(m.Admin[:0], dAtA[iNdEx:postIndex]...) - if m.Admin == nil { - m.Admin = []byte{} - } + m.Admin = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex diff --git a/x/bank/v2/types/expected_keepers.go b/x/bank/v2/types/expected_keepers.go index a51968149cb1..5da56fe6470b 100644 --- a/x/bank/v2/types/expected_keepers.go +++ b/x/bank/v2/types/expected_keepers.go @@ -4,12 +4,12 @@ import ( "context" "cosmossdk.io/core/transaction" + sdk "github.com/cosmos/cosmos-sdk/types" ) // AccountsModKeeper defines the contract for x/accounts APIs type AccountsModKeeper interface { - // Query is used to query an account Query( ctx context.Context, From 710a95a5bf91c6c27ef718d9f36122119113bda1 Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Mon, 25 Nov 2024 12:13:13 +0700 Subject: [PATCH 35/35] use address codec --- x/bank/v2/keeper/createdenom.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/bank/v2/keeper/createdenom.go b/x/bank/v2/keeper/createdenom.go index 1b563982199c..8d4bcc9a1006 100644 --- a/x/bank/v2/keeper/createdenom.go +++ b/x/bank/v2/keeper/createdenom.go @@ -110,7 +110,7 @@ func (k Keeper) chargeForCreateDenom(ctx context.Context, creatorAddr string) (e // if DenomCreationFee is non-zero, transfer the tokens from the creator // account to community pool if params.DenomCreationFee != nil { - accAddr, err := sdk.AccAddressFromBech32(creatorAddr) + accAddr, err := k.addressCodec.StringToBytes(creatorAddr) if err != nil { return err }